sockbuf: merge two versions of sbcreatecontrol() into one

No functional change.
This commit is contained in:
Gleb Smirnoff 2022-05-17 10:10:42 -07:00
parent eac7f0798b
commit b46667c63e
10 changed files with 83 additions and 92 deletions

View file

@ -1035,7 +1035,7 @@ do_rx_tls_cmp(struct sge_iq *iq, const struct rss_header *rss, struct mbuf *m)
/* Allocate the control message mbuf. */
control = sbcreatecontrol(NULL, sizeof(*tgr), TLS_GET_RECORD,
IPPROTO_TCP);
IPPROTO_TCP, M_NOWAIT);
if (control == NULL) {
m_freem(m);
m_freem(tls_data);

View file

@ -2119,7 +2119,7 @@ ktls_decrypt(struct socket *so)
tgr.tls_vminor = hdr->tls_vminor;
tgr.tls_length = htobe16(tls_len - tls->params.tls_hlen -
trail_len);
control = sbcreatecontrol_how(&tgr, sizeof(tgr),
control = sbcreatecontrol(&tgr, sizeof(tgr),
TLS_GET_RECORD, IPPROTO_TCP, M_WAITOK);
SOCKBUF_LOCK(sb);

View file

@ -1760,7 +1760,7 @@ sbdroprecord(struct sockbuf *sb)
* type for presentation on a socket buffer.
*/
struct mbuf *
sbcreatecontrol_how(void *p, int size, int type, int level, int wait)
sbcreatecontrol(void *p, int size, int type, int level, int wait)
{
struct cmsghdr *cp;
struct mbuf *m;
@ -1792,13 +1792,6 @@ sbcreatecontrol_how(void *p, int size, int type, int level, int wait)
return (m);
}
struct mbuf *
sbcreatecontrol(caddr_t p, int size, int type, int level)
{
return (sbcreatecontrol_how(p, size, type, level, M_NOWAIT));
}
/*
* This does the same for socket buffers that sotoxsocket does for sockets:
* generate an user-format data structure describing the socket buffer. Note

View file

@ -2043,7 +2043,7 @@ unp_externalize(struct mbuf *control, struct mbuf **controlp, int flags)
*/
newlen = newfds * sizeof(int);
*controlp = sbcreatecontrol(NULL, newlen,
SCM_RIGHTS, SOL_SOCKET);
SCM_RIGHTS, SOL_SOCKET, M_NOWAIT);
if (*controlp == NULL) {
FILEDESC_XUNLOCK(fdesc);
error = E2BIG;
@ -2081,7 +2081,7 @@ unp_externalize(struct mbuf *control, struct mbuf **controlp, int flags)
if (error || controlp == NULL)
goto next;
*controlp = sbcreatecontrol(NULL, datalen,
cm->cmsg_type, cm->cmsg_level);
cm->cmsg_type, cm->cmsg_level, M_NOWAIT);
if (*controlp == NULL) {
error = ENOBUFS;
goto next;
@ -2222,7 +2222,7 @@ unp_internalize(struct mbuf **controlp, struct thread *td)
* Fill in credential information.
*/
case SCM_CREDS:
*controlp = sbcreatecontrol_how(NULL, sizeof(*cmcred),
*controlp = sbcreatecontrol(NULL, sizeof(*cmcred),
SCM_CREDS, SOL_SOCKET, M_WAITOK);
cmcred = (struct cmsgcred *)
CMSG_DATA(mtod(*controlp, struct cmsghdr *));
@ -2266,7 +2266,7 @@ unp_internalize(struct mbuf **controlp, struct thread *td)
* file structure and capability rights.
*/
newlen = oldfds * sizeof(fdep[0]);
*controlp = sbcreatecontrol_how(NULL, newlen,
*controlp = sbcreatecontrol(NULL, newlen,
SCM_RIGHTS, SOL_SOCKET, M_WAITOK);
fdp = data;
for (i = 0; i < oldfds; i++, fdp++) {
@ -2298,7 +2298,7 @@ unp_internalize(struct mbuf **controlp, struct thread *td)
break;
case SCM_TIMESTAMP:
*controlp = sbcreatecontrol_how(NULL, sizeof(*tv),
*controlp = sbcreatecontrol(NULL, sizeof(*tv),
SCM_TIMESTAMP, SOL_SOCKET, M_WAITOK);
tv = (struct timeval *)
CMSG_DATA(mtod(*controlp, struct cmsghdr *));
@ -2306,7 +2306,7 @@ unp_internalize(struct mbuf **controlp, struct thread *td)
break;
case SCM_BINTIME:
*controlp = sbcreatecontrol_how(NULL, sizeof(*bt),
*controlp = sbcreatecontrol(NULL, sizeof(*bt),
SCM_BINTIME, SOL_SOCKET, M_WAITOK);
bt = (struct bintime *)
CMSG_DATA(mtod(*controlp, struct cmsghdr *));
@ -2314,7 +2314,7 @@ unp_internalize(struct mbuf **controlp, struct thread *td)
break;
case SCM_REALTIME:
*controlp = sbcreatecontrol_how(NULL, sizeof(*ts),
*controlp = sbcreatecontrol(NULL, sizeof(*ts),
SCM_REALTIME, SOL_SOCKET, M_WAITOK);
ts = (struct timespec *)
CMSG_DATA(mtod(*controlp, struct cmsghdr *));
@ -2322,7 +2322,7 @@ unp_internalize(struct mbuf **controlp, struct thread *td)
break;
case SCM_MONOTONIC:
*controlp = sbcreatecontrol_how(NULL, sizeof(*ts),
*controlp = sbcreatecontrol(NULL, sizeof(*ts),
SCM_MONOTONIC, SOL_SOCKET, M_WAITOK);
ts = (struct timespec *)
CMSG_DATA(mtod(*controlp, struct cmsghdr *));
@ -2370,7 +2370,7 @@ unp_addsockcred(struct thread *td, struct mbuf *control, int mode)
cmsgtype = SCM_CREDS;
}
m = sbcreatecontrol(NULL, ctrlsz, cmsgtype, SOL_SOCKET);
m = sbcreatecontrol(NULL, ctrlsz, cmsgtype, SOL_SOCKET, M_NOWAIT);
if (m == NULL)
return (control);

View file

@ -460,16 +460,16 @@ ng_btsocket_hci_raw_savctl(ng_btsocket_hci_raw_pcb_p pcb, struct mbuf **ctl,
if (pcb->flags & NG_BTSOCKET_HCI_RAW_DIRECTION) {
dir = (m->m_flags & M_PROTO1)? 1 : 0;
*ctl = sbcreatecontrol((caddr_t) &dir, sizeof(dir),
SCM_HCI_RAW_DIRECTION, SOL_HCI_RAW);
*ctl = sbcreatecontrol(&dir, sizeof(dir),
SCM_HCI_RAW_DIRECTION, SOL_HCI_RAW, M_NOWAIT);
if (*ctl != NULL)
ctl = &((*ctl)->m_next);
}
if (pcb->so->so_options & SO_TIMESTAMP) {
microtime(&tv);
*ctl = sbcreatecontrol((caddr_t) &tv, sizeof(tv),
SCM_TIMESTAMP, SOL_SOCKET);
*ctl = sbcreatecontrol(&tv, sizeof(tv), SCM_TIMESTAMP,
SOL_SOCKET, M_NOWAIT);
if (*ctl != NULL)
ctl = &((*ctl)->m_next);
}

View file

@ -1167,8 +1167,8 @@ ip_savecontrol(struct inpcb *inp, struct mbuf **mp, struct ip *ip,
} else {
bintime(&bt);
}
*mp = sbcreatecontrol((caddr_t)&bt, sizeof(bt),
SCM_BINTIME, SOL_SOCKET);
*mp = sbcreatecontrol(&bt, sizeof(bt), SCM_BINTIME,
SOL_SOCKET, M_NOWAIT);
if (*mp != NULL) {
mp = &(*mp)->m_next;
stamped = true;
@ -1189,8 +1189,8 @@ ip_savecontrol(struct inpcb *inp, struct mbuf **mp, struct ip *ip,
} else {
microtime(&tv);
}
*mp = sbcreatecontrol((caddr_t)&tv, sizeof(tv),
SCM_TIMESTAMP, SOL_SOCKET);
*mp = sbcreatecontrol((caddr_t)&tv, sizeof(tv), SCM_TIMESTAMP,
SOL_SOCKET, M_NOWAIT);
if (*mp != NULL) {
mp = &(*mp)->m_next;
stamped = true;
@ -1208,8 +1208,8 @@ ip_savecontrol(struct inpcb *inp, struct mbuf **mp, struct ip *ip,
} else {
nanotime(&ts);
}
*mp = sbcreatecontrol((caddr_t)&ts, sizeof(ts),
SCM_REALTIME, SOL_SOCKET);
*mp = sbcreatecontrol(&ts, sizeof(ts), SCM_REALTIME,
SOL_SOCKET, M_NOWAIT);
if (*mp != NULL) {
mp = &(*mp)->m_next;
stamped = true;
@ -1222,8 +1222,8 @@ ip_savecontrol(struct inpcb *inp, struct mbuf **mp, struct ip *ip,
mbuf_tstmp2timespec(m, &ts);
else
nanouptime(&ts);
*mp = sbcreatecontrol((caddr_t)&ts, sizeof(ts),
SCM_MONOTONIC, SOL_SOCKET);
*mp = sbcreatecontrol(&ts, sizeof(ts), SCM_MONOTONIC,
SOL_SOCKET, M_NOWAIT);
if (*mp != NULL) {
mp = &(*mp)->m_next;
stamped = true;
@ -1237,20 +1237,20 @@ ip_savecontrol(struct inpcb *inp, struct mbuf **mp, struct ip *ip,
sti.st_info_flags = ST_INFO_HW;
if ((m->m_flags & M_TSTMP_HPREC) != 0)
sti.st_info_flags |= ST_INFO_HW_HPREC;
*mp = sbcreatecontrol((caddr_t)&sti, sizeof(sti), SCM_TIME_INFO,
SOL_SOCKET);
*mp = sbcreatecontrol(&sti, sizeof(sti), SCM_TIME_INFO,
SOL_SOCKET, M_NOWAIT);
if (*mp != NULL)
mp = &(*mp)->m_next;
}
if (inp->inp_flags & INP_RECVDSTADDR) {
*mp = sbcreatecontrol((caddr_t)&ip->ip_dst,
sizeof(struct in_addr), IP_RECVDSTADDR, IPPROTO_IP);
*mp = sbcreatecontrol(&ip->ip_dst, sizeof(struct in_addr),
IP_RECVDSTADDR, IPPROTO_IP, M_NOWAIT);
if (*mp)
mp = &(*mp)->m_next;
}
if (inp->inp_flags & INP_RECVTTL) {
*mp = sbcreatecontrol((caddr_t)&ip->ip_ttl,
sizeof(u_char), IP_RECVTTL, IPPROTO_IP);
*mp = sbcreatecontrol(&ip->ip_ttl, sizeof(u_char), IP_RECVTTL,
IPPROTO_IP, M_NOWAIT);
if (*mp)
mp = &(*mp)->m_next;
}
@ -1261,15 +1261,15 @@ ip_savecontrol(struct inpcb *inp, struct mbuf **mp, struct ip *ip,
*/
/* options were tossed already */
if (inp->inp_flags & INP_RECVOPTS) {
*mp = sbcreatecontrol((caddr_t)opts_deleted_above,
sizeof(struct in_addr), IP_RECVOPTS, IPPROTO_IP);
*mp = sbcreatecontrol(opts_deleted_above,
sizeof(struct in_addr), IP_RECVOPTS, IPPROTO_IP, M_NOWAIT);
if (*mp)
mp = &(*mp)->m_next;
}
/* ip_srcroute doesn't do what we want here, need to fix */
if (inp->inp_flags & INP_RECVRETOPTS) {
*mp = sbcreatecontrol((caddr_t)ip_srcroute(m),
sizeof(struct in_addr), IP_RECVRETOPTS, IPPROTO_IP);
*mp = sbcreatecontrol(ip_srcroute(m), sizeof(struct in_addr),
IP_RECVRETOPTS, IPPROTO_IP, M_NOWAIT);
if (*mp)
mp = &(*mp)->m_next;
}
@ -1301,14 +1301,14 @@ ip_savecontrol(struct inpcb *inp, struct mbuf **mp, struct ip *ip,
sdl2->sdl_index = 0;
sdl2->sdl_nlen = sdl2->sdl_alen = sdl2->sdl_slen = 0;
}
*mp = sbcreatecontrol((caddr_t)sdl2, sdl2->sdl_len,
IP_RECVIF, IPPROTO_IP);
*mp = sbcreatecontrol(sdl2, sdl2->sdl_len, IP_RECVIF,
IPPROTO_IP, M_NOWAIT);
if (*mp)
mp = &(*mp)->m_next;
}
if (inp->inp_flags & INP_RECVTOS) {
*mp = sbcreatecontrol((caddr_t)&ip->ip_tos,
sizeof(u_char), IP_RECVTOS, IPPROTO_IP);
*mp = sbcreatecontrol(&ip->ip_tos, sizeof(u_char), IP_RECVTOS,
IPPROTO_IP, M_NOWAIT);
if (*mp)
mp = &(*mp)->m_next;
}
@ -1323,12 +1323,12 @@ ip_savecontrol(struct inpcb *inp, struct mbuf **mp, struct ip *ip,
* XXX should handle the failure of one or the
* other - don't populate both?
*/
*mp = sbcreatecontrol((caddr_t) &flowid,
sizeof(uint32_t), IP_FLOWID, IPPROTO_IP);
*mp = sbcreatecontrol(&flowid, sizeof(uint32_t), IP_FLOWID,
IPPROTO_IP, M_NOWAIT);
if (*mp)
mp = &(*mp)->m_next;
*mp = sbcreatecontrol((caddr_t) &flow_type,
sizeof(uint32_t), IP_FLOWTYPE, IPPROTO_IP);
*mp = sbcreatecontrol(&flow_type, sizeof(uint32_t),
IP_FLOWTYPE, IPPROTO_IP, M_NOWAIT);
if (*mp)
mp = &(*mp)->m_next;
}
@ -1342,8 +1342,8 @@ ip_savecontrol(struct inpcb *inp, struct mbuf **mp, struct ip *ip,
flow_type = M_HASHTYPE_GET(m);
if (rss_hash2bucket(flowid, flow_type, &rss_bucketid) == 0) {
*mp = sbcreatecontrol((caddr_t) &rss_bucketid,
sizeof(uint32_t), IP_RSSBUCKETID, IPPROTO_IP);
*mp = sbcreatecontrol(&rss_bucketid, sizeof(uint32_t),
IP_RSSBUCKETID, IPPROTO_IP, M_NOWAIT);
if (*mp)
mp = &(*mp)->m_next;
}

View file

@ -327,8 +327,9 @@ udp_append(struct inpcb *inp, struct ip *ip, struct mbuf *n, int off,
ip_savecontrol(inp, &opts, ip, n);
}
if ((inp->inp_vflag & INP_IPV4) && (inp->inp_flags2 & INP_ORIGDSTADDR)) {
tmpopts = sbcreatecontrol((caddr_t)&udp_in[1],
sizeof(struct sockaddr_in), IP_ORIGDSTADDR, IPPROTO_IP);
tmpopts = sbcreatecontrol(&udp_in[1],
sizeof(struct sockaddr_in), IP_ORIGDSTADDR, IPPROTO_IP,
M_NOWAIT);
if (tmpopts) {
if (opts) {
tmpopts->m_next = opts;

View file

@ -1216,8 +1216,8 @@ ip6_savecontrol_v4(struct inpcb *inp, struct mbuf *m, struct mbuf **mp,
} else {
microtime(&t.tv);
}
*mp = sbcreatecontrol((caddr_t) &t.tv, sizeof(t.tv),
SCM_TIMESTAMP, SOL_SOCKET);
*mp = sbcreatecontrol(&t.tv, sizeof(t.tv),
SCM_TIMESTAMP, SOL_SOCKET, M_NOWAIT);
if (*mp != NULL) {
mp = &(*mp)->m_next;
stamped = true;
@ -1234,8 +1234,8 @@ ip6_savecontrol_v4(struct inpcb *inp, struct mbuf *m, struct mbuf **mp,
} else {
bintime(&t.bt);
}
*mp = sbcreatecontrol((caddr_t)&t.bt, sizeof(t.bt),
SCM_BINTIME, SOL_SOCKET);
*mp = sbcreatecontrol(&t.bt, sizeof(t.bt), SCM_BINTIME,
SOL_SOCKET, M_NOWAIT);
if (*mp != NULL) {
mp = &(*mp)->m_next;
stamped = true;
@ -1252,8 +1252,8 @@ ip6_savecontrol_v4(struct inpcb *inp, struct mbuf *m, struct mbuf **mp,
} else {
nanotime(&t.ts);
}
*mp = sbcreatecontrol((caddr_t)&t.ts, sizeof(t.ts),
SCM_REALTIME, SOL_SOCKET);
*mp = sbcreatecontrol(&t.ts, sizeof(t.ts),
SCM_REALTIME, SOL_SOCKET, M_NOWAIT);
if (*mp != NULL) {
mp = &(*mp)->m_next;
stamped = true;
@ -1266,8 +1266,8 @@ ip6_savecontrol_v4(struct inpcb *inp, struct mbuf *m, struct mbuf **mp,
mbuf_tstmp2timespec(m, &t.ts);
else
nanouptime(&t.ts);
*mp = sbcreatecontrol((caddr_t)&t.ts, sizeof(t.ts),
SCM_MONOTONIC, SOL_SOCKET);
*mp = sbcreatecontrol(&t.ts, sizeof(t.ts),
SCM_MONOTONIC, SOL_SOCKET, M_NOWAIT);
if (*mp != NULL) {
mp = &(*mp)->m_next;
stamped = true;
@ -1285,8 +1285,8 @@ ip6_savecontrol_v4(struct inpcb *inp, struct mbuf *m, struct mbuf **mp,
sti.st_info_flags = ST_INFO_HW;
if ((m->m_flags & M_TSTMP_HPREC) != 0)
sti.st_info_flags |= ST_INFO_HW_HPREC;
*mp = sbcreatecontrol((caddr_t)&sti, sizeof(sti),
SCM_TIME_INFO, SOL_SOCKET);
*mp = sbcreatecontrol(&sti, sizeof(sti), SCM_TIME_INFO,
SOL_SOCKET, M_NOWAIT);
if (*mp != NULL)
mp = &(*mp)->m_next;
}
@ -1318,9 +1318,9 @@ ip6_savecontrol_v4(struct inpcb *inp, struct mbuf *m, struct mbuf **mp,
pi6.ipi6_ifindex =
(m && m->m_pkthdr.rcvif) ? m->m_pkthdr.rcvif->if_index : 0;
*mp = sbcreatecontrol((caddr_t) &pi6,
sizeof(struct in6_pktinfo),
IS2292(inp, IPV6_2292PKTINFO, IPV6_PKTINFO), IPPROTO_IPV6);
*mp = sbcreatecontrol(&pi6, sizeof(struct in6_pktinfo),
IS2292(inp, IPV6_2292PKTINFO, IPV6_PKTINFO), IPPROTO_IPV6,
M_NOWAIT);
if (*mp)
mp = &(*mp)->m_next;
}
@ -1341,9 +1341,9 @@ ip6_savecontrol_v4(struct inpcb *inp, struct mbuf *m, struct mbuf **mp,
} else {
hlim = ip6->ip6_hlim & 0xff;
}
*mp = sbcreatecontrol((caddr_t) &hlim, sizeof(int),
*mp = sbcreatecontrol(&hlim, sizeof(int),
IS2292(inp, IPV6_2292HOPLIMIT, IPV6_HOPLIMIT),
IPPROTO_IPV6);
IPPROTO_IPV6, M_NOWAIT);
if (*mp)
mp = &(*mp)->m_next;
}
@ -1368,8 +1368,8 @@ ip6_savecontrol_v4(struct inpcb *inp, struct mbuf *m, struct mbuf **mp,
flowinfo >>= 20;
tclass = flowinfo & 0xff;
}
*mp = sbcreatecontrol((caddr_t) &tclass, sizeof(int),
IPV6_TCLASS, IPPROTO_IPV6);
*mp = sbcreatecontrol(&tclass, sizeof(int), IPV6_TCLASS,
IPPROTO_IPV6, M_NOWAIT);
if (*mp)
mp = &(*mp)->m_next;
}
@ -1425,9 +1425,9 @@ ip6_savecontrol(struct inpcb *inp, struct mbuf *m, struct mbuf **mp)
* RFC2292.
* Note: this constraint is removed in RFC3542
*/
*mp = sbcreatecontrol((caddr_t)hbh, hbhlen,
*mp = sbcreatecontrol(hbh, hbhlen,
IS2292(inp, IPV6_2292HOPOPTS, IPV6_HOPOPTS),
IPPROTO_IPV6);
IPPROTO_IPV6, M_NOWAIT);
if (*mp)
mp = &(*mp)->m_next;
}
@ -1476,10 +1476,9 @@ ip6_savecontrol(struct inpcb *inp, struct mbuf *m, struct mbuf **mp)
if (!(inp->inp_flags & IN6P_DSTOPTS))
break;
*mp = sbcreatecontrol((caddr_t)ip6e, elen,
IS2292(inp,
IPV6_2292DSTOPTS, IPV6_DSTOPTS),
IPPROTO_IPV6);
*mp = sbcreatecontrol(ip6e, elen,
IS2292(inp, IPV6_2292DSTOPTS, IPV6_DSTOPTS),
IPPROTO_IPV6, M_NOWAIT);
if (*mp)
mp = &(*mp)->m_next;
break;
@ -1487,9 +1486,9 @@ ip6_savecontrol(struct inpcb *inp, struct mbuf *m, struct mbuf **mp)
if (!(inp->inp_flags & IN6P_RTHDR))
break;
*mp = sbcreatecontrol((caddr_t)ip6e, elen,
*mp = sbcreatecontrol(ip6e, elen,
IS2292(inp, IPV6_2292RTHDR, IPV6_RTHDR),
IPPROTO_IPV6);
IPPROTO_IPV6, M_NOWAIT);
if (*mp)
mp = &(*mp)->m_next;
break;
@ -1526,12 +1525,12 @@ ip6_savecontrol(struct inpcb *inp, struct mbuf *m, struct mbuf **mp)
* XXX should handle the failure of one or the
* other - don't populate both?
*/
*mp = sbcreatecontrol((caddr_t) &flowid,
sizeof(uint32_t), IPV6_FLOWID, IPPROTO_IPV6);
*mp = sbcreatecontrol(&flowid, sizeof(uint32_t), IPV6_FLOWID,
IPPROTO_IPV6, M_NOWAIT);
if (*mp)
mp = &(*mp)->m_next;
*mp = sbcreatecontrol((caddr_t) &flow_type,
sizeof(uint32_t), IPV6_FLOWTYPE, IPPROTO_IPV6);
*mp = sbcreatecontrol(&flow_type, sizeof(uint32_t),
IPV6_FLOWTYPE, IPPROTO_IPV6, M_NOWAIT);
if (*mp)
mp = &(*mp)->m_next;
}
@ -1545,8 +1544,8 @@ ip6_savecontrol(struct inpcb *inp, struct mbuf *m, struct mbuf **mp)
flow_type = M_HASHTYPE_GET(m);
if (rss_hash2bucket(flowid, flow_type, &rss_bucketid) == 0) {
*mp = sbcreatecontrol((caddr_t) &rss_bucketid,
sizeof(uint32_t), IPV6_RSSBUCKETID, IPPROTO_IPV6);
*mp = sbcreatecontrol(&rss_bucketid, sizeof(uint32_t),
IPV6_RSSBUCKETID, IPPROTO_IPV6, M_NOWAIT);
if (*mp)
mp = &(*mp)->m_next;
}
@ -1583,8 +1582,8 @@ ip6_notify_pmtu(struct inpcb *inp, struct sockaddr_in6 *dst, u_int32_t mtu)
if (sa6_recoverscope(&mtuctl.ip6m_addr))
return;
if ((m_mtu = sbcreatecontrol((caddr_t)&mtuctl, sizeof(mtuctl),
IPV6_PATHMTU, IPPROTO_IPV6)) == NULL)
if ((m_mtu = sbcreatecontrol(&mtuctl, sizeof(mtuctl), IPV6_PATHMTU,
IPPROTO_IPV6, M_NOWAIT)) == NULL)
return;
so = inp->inp_socket;

View file

@ -183,8 +183,9 @@ udp6_append(struct inpcb *inp, struct mbuf *n, int off,
inp->inp_socket->so_options & SO_TIMESTAMP)
ip6_savecontrol(inp, n, &opts);
if ((inp->inp_vflag & INP_IPV6) && (inp->inp_flags2 & INP_ORIGDSTADDR)) {
tmp_opts = sbcreatecontrol((caddr_t)&fromsa[1],
sizeof(struct sockaddr_in6), IPV6_ORIGDSTADDR, IPPROTO_IPV6);
tmp_opts = sbcreatecontrol(&fromsa[1],
sizeof(struct sockaddr_in6), IPV6_ORIGDSTADDR,
IPPROTO_IPV6, M_NOWAIT);
if (tmp_opts) {
if (opts) {
tmp_opts->m_next = opts;

View file

@ -158,10 +158,7 @@ void sbappendrecord(struct sockbuf *sb, struct mbuf *m0);
void sbappendrecord_locked(struct sockbuf *sb, struct mbuf *m0);
void sbcompress(struct sockbuf *sb, struct mbuf *m, struct mbuf *n);
struct mbuf *
sbcreatecontrol(caddr_t p, int size, int type, int level);
struct mbuf *
sbcreatecontrol_how(void *p, int size, int type, int level,
int wait);
sbcreatecontrol(void *p, int size, int type, int level, int wait);
void sbdestroy(struct socket *, sb_which);
void sbdrop(struct sockbuf *sb, int len);
void sbdrop_locked(struct sockbuf *sb, int len);