messages.
dctx = arg;
ctx = dctx->ipv6;
ctx->rcvhdr.msg_controllen = CMSG_SPACE(sizeof(struct in6_pktinfo));
- bytes = recvmsg(ctx->dhcp_fd, &ctx->rcvhdr, 0);
+ bytes = recvmsg_realloc(ctx->dhcp_fd, &ctx->rcvhdr, 0);
if (bytes == -1) {
logger(dctx, LOG_ERR, "%s: recvmsg: %m", __func__);
close(ctx->dhcp_fd);
TAILQ_INIT(&ctx->kroutes);
ctx->sndhdr.msg_namelen = sizeof(struct sockaddr_in6);
- ctx->sndhdr.msg_iov = ctx->sndiov;
+ ctx->sndhdr.msg_iov = &ctx->sndiov;
ctx->sndhdr.msg_iovlen = 1;
ctx->sndhdr.msg_control = ctx->sndbuf;
ctx->sndhdr.msg_controllen = sizeof(ctx->sndbuf);
ctx->rcvhdr.msg_name = &ctx->from;
ctx->rcvhdr.msg_namelen = sizeof(ctx->from);
- ctx->rcvhdr.msg_iov = ctx->rcviov;
+ ctx->rcvhdr.msg_iov = &dhcpcd_ctx->iov;
ctx->rcvhdr.msg_iovlen = 1;
- ctx->rcvhdr.msg_control = ctx->rcvbuf;
+ ctx->rcvhdr.msg_control = ctx->ctlbuf;
// controllen is set at recieve
//ctx->rcvhdr.msg_controllen = sizeof(ctx->rcvbuf);
- ctx->rcviov[0].iov_base = ctx->ansbuf;
- ctx->rcviov[0].iov_len = sizeof(ctx->ansbuf);
ctx->nd_fd = -1;
ctx->dhcp_fd = -1;
#define IP6BUFLEN (CMSG_SPACE(sizeof(struct in6_pktinfo)) + \
CMSG_SPACE(sizeof(int)))
-
#ifdef INET6
struct ipv6_ctx {
+ unsigned char ctlbuf[IP6BUFLEN];
struct sockaddr_in6 from;
struct msghdr sndhdr;
- struct iovec sndiov[2];
+ struct iovec sndiov;
unsigned char sndbuf[CMSG_SPACE(sizeof(struct in6_pktinfo))];
struct msghdr rcvhdr;
- struct iovec rcviov[2];
- unsigned char rcvbuf[IP6BUFLEN];
- unsigned char ansbuf[1500];
char ntopbuf[INET6_ADDRSTRLEN];
const char *sfrom;
ctx = dctx->ipv6;
ctx->rcvhdr.msg_controllen = CMSG_SPACE(sizeof(struct in6_pktinfo)) +
CMSG_SPACE(sizeof(int));
- len = recvmsg(ctx->nd_fd, &ctx->rcvhdr, 0);
+ len = recvmsg_realloc(ctx->nd_fd, &ctx->rcvhdr, 0);
if (len == -1) {
logger(dctx, LOG_ERR, "recvmsg: %m");
eloop_event_delete(dctx->eloop, ctx->nd_fd);