Print this page
13175 Add support for IP_RECVTOS
13182 CMSG_ macros should have man pages
Change-ID: I784aa36cfd3c17e3cccbf1fd329fa7e69b663ef9
*** 1316,1327 ****
if (oldflg)
continue;
cmsg->cmsg_level = tohp->level;
cmsg->cmsg_type = tohp->name;
! cmsg->cmsg_len = (socklen_t)(_TPI_TOPT_DATALEN(tohp) +
! sizeof (struct cmsghdr));
/* copy content to control data part */
bcopy(&tohp[1], CMSG_CONTENT(cmsg),
CMSG_CONTENTLEN(cmsg));
}
--- 1316,1343 ----
if (oldflg)
continue;
cmsg->cmsg_level = tohp->level;
cmsg->cmsg_type = tohp->name;
! cmsg->cmsg_len = (socklen_t)sizeof (struct cmsghdr);
! if (tohp->level == IPPROTO_IP &&
! (tohp->name == IP_RECVTOS ||
! tohp->name == IP_RECVTTL)) {
! /*
! * The data for these is a uint8_t but, in
! * order to maintain alignment for any
! * following TPI primitives in the message,
! * there will be some trailing padding bytes
! * which are included in the TPI_TOPT_DATALEN.
! * For these types, we set the cmsg_len
! * explicitly to the correct value.
! */
! cmsg->cmsg_len += (socklen_t)sizeof (uint8_t);
! } else {
! cmsg->cmsg_len +=
! (socklen_t)(_TPI_TOPT_DATALEN(tohp));
! }
/* copy content to control data part */
bcopy(&tohp[1], CMSG_CONTENT(cmsg),
CMSG_CONTENTLEN(cmsg));
}