int retval;
struct msghdr smsghdr;
struct cmsghdr *scmsgp;
- u_char cmsgbuf[CMSG_SPACE(sizeof (struct in6_pktinfo))];
+ union
+ {
+ struct cmsghdr hdr;
+ u_char buf[CMSG_SPACE (sizeof (struct in6_pktinfo))];
+ } cmsgbuf;
struct in6_pktinfo *pktinfo;
struct sockaddr_in6 dst_sin6;
assert (dst);
assert (*ifindex);
- scmsgp = (struct cmsghdr *)cmsgbuf;
+ scmsgp = (struct cmsghdr *)&cmsgbuf;
pktinfo = (struct in6_pktinfo *)(CMSG_DATA(scmsgp));
memset (&dst_sin6, 0, sizeof (struct sockaddr_in6));
dst_sin6.sin6_len = sizeof (struct sockaddr_in6);
#endif /*SIN6_LEN*/
memcpy (&dst_sin6.sin6_addr, dst, sizeof (struct in6_addr));
-#ifdef HAVE_SIN6_SCOPE_ID
+#ifdef HAVE_STRUCT_SOCKADDR_IN6_SIN6_SCOPE_ID
dst_sin6.sin6_scope_id = *ifindex;
#endif
smsghdr.msg_iovlen = iov_count (message);
smsghdr.msg_name = (caddr_t) &dst_sin6;
smsghdr.msg_namelen = sizeof (struct sockaddr_in6);
- smsghdr.msg_control = (caddr_t) cmsgbuf;
- smsghdr.msg_controllen = scmsgp->cmsg_len;
+ smsghdr.msg_control = (caddr_t) &cmsgbuf.buf;
+ smsghdr.msg_controllen = sizeof(cmsgbuf.buf);
retval = sendmsg (ospf6_sock, &smsghdr, 0);
if (retval != iov_totallen (message))