Module Name: src Committed By: ozaki-r Date: Fri Oct 28 05:26:29 UTC 2022
Modified Files: src/sys/netinet: dccp_usrreq.c sctp_output.c sctp_pcb.h src/sys/netinet6: dccp6_usrreq.c sctp6_usrreq.c Log Message: Adjust dccp and sctp for struct inpcb separation To generate a diff of this commit: cvs rdiff -u -r1.23 -r1.24 src/sys/netinet/dccp_usrreq.c cvs rdiff -u -r1.31 -r1.32 src/sys/netinet/sctp_output.c cvs rdiff -u -r1.6 -r1.7 src/sys/netinet/sctp_pcb.h cvs rdiff -u -r1.13 -r1.14 src/sys/netinet6/dccp6_usrreq.c cvs rdiff -u -r1.22 -r1.23 src/sys/netinet6/sctp6_usrreq.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
Modified files: Index: src/sys/netinet/dccp_usrreq.c diff -u src/sys/netinet/dccp_usrreq.c:1.23 src/sys/netinet/dccp_usrreq.c:1.24 --- src/sys/netinet/dccp_usrreq.c:1.23 Fri Oct 28 05:20:08 2022 +++ src/sys/netinet/dccp_usrreq.c Fri Oct 28 05:26:29 2022 @@ -1,5 +1,5 @@ /* $KAME: dccp_usrreq.c,v 1.67 2005/11/03 16:05:04 nishida Exp $ */ -/* $NetBSD: dccp_usrreq.c,v 1.23 2022/10/28 05:20:08 ozaki-r Exp $ */ +/* $NetBSD: dccp_usrreq.c,v 1.24 2022/10/28 05:26:29 ozaki-r Exp $ */ /* * Copyright (c) 2003 Joacim Häggmark, Magnus Erixzon, Nils-Erik Mattsson @@ -67,7 +67,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: dccp_usrreq.c,v 1.23 2022/10/28 05:20:08 ozaki-r Exp $"); +__KERNEL_RCSID(0, "$NetBSD: dccp_usrreq.c,v 1.24 2022/10/28 05:26:29 ozaki-r Exp $"); #ifdef _KERNEL_OPT #include "opt_inet.h" @@ -443,8 +443,8 @@ dccp_input(struct mbuf *m, int off, int #ifdef INET6 if (isipv6) { inp = sotoinpcb(so); - inp->inp_laddr6 = ip6->ip6_dst; - inp->inp_faddr6 = ip6->ip6_src; + in6p_laddr(inp) = ip6->ip6_dst; + in6p_faddr(inp) = ip6->ip6_src; inp->inp_lport = dh->dh_dport; inp->inp_fport = dh->dh_sport; in_pcbstate(inp, INP_CONNECTED); @@ -452,8 +452,8 @@ dccp_input(struct mbuf *m, int off, int #endif { inp = sotoinpcb(so); - inp->inp_laddr = ip->ip_dst; - inp->inp_faddr = ip->ip_src; + in4p_laddr(inp) = ip->ip_dst; + in4p_faddr(inp) = ip->ip_src; inp->inp_lport = dh->dh_dport; inp->inp_fport = dh->dh_sport; } @@ -1353,12 +1353,12 @@ again: ip6 = mtod(m, struct ip6_hdr *); dh = (struct dccphdr *)(ip6 + 1); ip6->ip6_flow = (ip6->ip6_flow & ~IPV6_FLOWINFO_MASK) | - (inp->inp_flowinfo & IPV6_FLOWINFO_MASK); + (in6p_flowinfo(inp) & IPV6_FLOWINFO_MASK); ip6->ip6_vfc = (ip6->ip6_vfc & ~IPV6_VERSION_MASK) | (IPV6_VERSION & IPV6_VERSION_MASK); ip6->ip6_nxt = IPPROTO_DCCP; - ip6->ip6_src = inp->inp_laddr6; - ip6->ip6_dst = inp->inp_faddr6; + ip6->ip6_src = in6p_laddr(inp); + ip6->ip6_dst = in6p_faddr(inp); } else #endif { @@ -1366,8 +1366,8 @@ again: dh = (struct dccphdr *)(ip + 1); memset(ip, 0, sizeof(struct ip)); ip->ip_p = IPPROTO_DCCP; - ip->ip_src = inp->inp_laddr; - ip->ip_dst = inp->inp_faddr; + ip->ip_src = in4p_laddr(inp); + ip->ip_dst = in4p_faddr(inp); } dlh = (struct dccplhdr *)dh; @@ -1507,7 +1507,7 @@ again: if (isipv6) { DCCP_DEBUG((LOG_INFO, "Calling ip_output6, mbuf->m_len = %u, mbuf->m_pkthdr.len = %u\n", m->m_len, m->m_pkthdr.len)); - error = ip6_output(m, inp->inp_outputopts6, &inp->inp_route, + error = ip6_output(m, in6p_outputopts(inp), &inp->inp_route, (inp->inp_socket->so_options & SO_DONTROUTE), NULL, NULL, NULL); } else @@ -1705,7 +1705,7 @@ dccp_connect(struct socket *so, struct s return EINVAL; } INP_LOCK(inp); - if (inp->inp_faddr.s_addr != INADDR_ANY) { + if (in4p_faddr(inp).s_addr != INADDR_ANY) { INP_UNLOCK(inp); INP_INFO_WUNLOCK(&dccpbinfo); return EISCONN; @@ -1850,7 +1850,7 @@ dccp_disconnect(struct socket *so) return EINVAL; } INP_LOCK(inp); - if (inp->inp_faddr.s_addr == INADDR_ANY) { + if (in4p_faddr(inp).s_addr == INADDR_ANY) { INP_INFO_WUNLOCK(&dccpbinfo); INP_UNLOCK(inp); return ENOTCONN; @@ -2130,10 +2130,10 @@ dccp_newdccpcb(int family, void *aux) inp->inp_ppcb = dp; switch (family) { case PF_INET: - inp->inp_ip.ip_ttl = ip_defttl; + in4p_ip(inp).ip_ttl = ip_defttl; break; case PF_INET6: - inp->inp_ip6.ip6_hlim = in6_selecthlim_rt(inp); + in6p_ip6(inp).ip6_hlim = in6_selecthlim_rt(inp); break; } Index: src/sys/netinet/sctp_output.c diff -u src/sys/netinet/sctp_output.c:1.31 src/sys/netinet/sctp_output.c:1.32 --- src/sys/netinet/sctp_output.c:1.31 Tue May 31 08:43:16 2022 +++ src/sys/netinet/sctp_output.c Fri Oct 28 05:26:29 2022 @@ -1,4 +1,4 @@ -/* $NetBSD: sctp_output.c,v 1.31 2022/05/31 08:43:16 andvar Exp $ */ +/* $NetBSD: sctp_output.c,v 1.32 2022/10/28 05:26:29 ozaki-r Exp $ */ /* $KAME: sctp_output.c,v 1.48 2005/06/16 18:29:24 jinmei Exp $ */ /* @@ -30,7 +30,7 @@ * SUCH DAMAGE. */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: sctp_output.c,v 1.31 2022/05/31 08:43:16 andvar Exp $"); +__KERNEL_RCSID(0, "$NetBSD: sctp_output.c,v 1.32 2022/10/28 05:26:29 ozaki-r Exp $"); #ifdef _KERNEL_OPT #include "opt_ipsec.h" @@ -2137,11 +2137,11 @@ sctp_lowlevel_chunk_output(struct sctp_i if (stcb) { if ((stcb->asoc.ecn_allowed) && ecn_ok) { /* Enable ECN */ - ip->ip_tos = (u_char)((inp->ip_inp.inp.inp_ip.ip_tos & 0x000000fc) | + ip->ip_tos = (u_char)((in4p_ip(&inp->ip_inp.inp).ip_tos & 0x000000fc) | sctp_get_ect(stcb, chk)); } else { /* No ECN */ - ip->ip_tos = inp->ip_inp.inp.inp_ip.ip_tos; + ip->ip_tos = in4p_ip(&inp->ip_inp.inp).ip_tos; } } else { /* no association at all */ @@ -2299,10 +2299,10 @@ sctp_lowlevel_chunk_output(struct sctp_i * We assume here that inp_flow is in host byte order within * the TCB! */ - flowBottom = ((struct in6pcb *)inp)->in6p_flowinfo & 0x0000ffff; - flowTop = ((((struct in6pcb *)inp)->in6p_flowinfo & 0x000f0000) >> 16); + flowBottom = in6p_flowinfo(inp) & 0x0000ffff; + flowTop = ((in6p_flowinfo(inp) & 0x000f0000) >> 16); - tosTop = (((((struct in6pcb *)inp)->in6p_flowinfo & 0xf0) >> 4) | IPV6_VERSION); + tosTop = (((in6p_flowinfo(inp) & 0xf0) >> 4) | IPV6_VERSION); /* protect *sin6 from overwrite */ memcpy(&tmp, to, sizeof(struct sockaddr_in6)); @@ -2331,14 +2331,14 @@ sctp_lowlevel_chunk_output(struct sctp_i if (stcb != NULL) { if ((stcb->asoc.ecn_allowed) && ecn_ok) { /* Enable ECN */ - tosBottom = (((((struct in6pcb *)inp)->in6p_flowinfo & 0x0c) | sctp_get_ect(stcb, chk)) << 4); + tosBottom = (((in6p_flowinfo(inp) & 0x0c) | sctp_get_ect(stcb, chk)) << 4); } else { /* No ECN */ - tosBottom = ((((struct in6pcb *)inp)->in6p_flowinfo & 0x0c) << 4); + tosBottom = ((in6p_flowinfo(inp) & 0x0c) << 4); } } else { /* we could get no asoc if it is a O-O-T-B packet */ - tosBottom = ((((struct in6pcb *)inp)->in6p_flowinfo & 0x0c) << 4); + tosBottom = ((in6p_flowinfo(inp) & 0x0c) << 4); } ip6h->ip6_flow = htonl(((tosTop << 24) | ((tosBottom|flowTop) << 16) | flowBottom)); ip6h->ip6_nxt = IPPROTO_SCTP; @@ -2416,7 +2416,7 @@ sctp_lowlevel_chunk_output(struct sctp_i * We set the hop limit now since there is a good chance that * our ro pointer is now filled */ - ip6h->ip6_hlim = in6_selecthlim((struct in6pcb *)&inp->ip_inp.inp, + ip6h->ip6_hlim = in6_selecthlim(&inp->ip_inp.inp, (ro ? (rt ? (rt->rt_ifp) : (NULL)) : (NULL))); @@ -2447,7 +2447,7 @@ sctp_lowlevel_chunk_output(struct sctp_i ro, o_flgs, ((struct in6pcb *)inp)->in6p_moptions, - (struct in6pcb *)inp, + (struct inpcb *)inp, &ifp); if (net) { /* for link local this must be done */ Index: src/sys/netinet/sctp_pcb.h diff -u src/sys/netinet/sctp_pcb.h:1.6 src/sys/netinet/sctp_pcb.h:1.7 --- src/sys/netinet/sctp_pcb.h:1.6 Fri Oct 28 05:20:08 2022 +++ src/sys/netinet/sctp_pcb.h Fri Oct 28 05:26:29 2022 @@ -1,5 +1,5 @@ /* $KAME: sctp_pcb.h,v 1.21 2005/07/16 01:18:47 suz Exp $ */ -/* $NetBSD: sctp_pcb.h,v 1.6 2022/10/28 05:20:08 ozaki-r Exp $ */ +/* $NetBSD: sctp_pcb.h,v 1.7 2022/10/28 05:26:29 ozaki-r Exp $ */ #ifndef __SCTP_PCB_H__ #define __SCTP_PCB_H__ @@ -288,7 +288,7 @@ struct sctp_inpcb { */ union { struct inpcb inp; - char align[(sizeof(struct inpcb) + SCTP_ALIGNM1) & + char align[(sizeof(struct in6pcb) + SCTP_ALIGNM1) & ~SCTP_ALIGNM1]; } ip_inp; LIST_ENTRY(sctp_inpcb) sctp_list; /* lists all endpoints */ @@ -753,32 +753,14 @@ void in6_sin6_2_sin (struct sockaddr_in struct sockaddr_in6 *sin6); #ifdef __NetBSD__ -#ifndef in6pcb -#define in6pcb inpcb -#endif #ifndef sotoin6pcb -#define sotoin6pcb sotoinpcb +#define sotoin6pcb(so) ((struct in6pcb *)((so)->so_pcb)) #endif #ifndef in6p_flags -#define in6p_flags inp_flags +#define in6p_flags in6p_pcb.inp_flags #endif #ifndef in6p_af -#define in6p_af inp_af -#endif -#ifndef in6p_cksum -#define in6p_cksum inp_cksum6 -#endif -#ifndef in6p_hops -#define in6p_hops inp_hops6 -#endif -#ifndef in6p_flowinfo -#define in6p_flowinfo inp_flowinfo -#endif -#ifndef in6p_outputopts -#define in6p_outputopts inp_outputopts6 -#endif -#ifndef in6p_moptions -#define in6p_moptions inp_moptions6 +#define in6p_af in6p_pcb.inp_af #endif #ifndef inpcb_hdr #define inpcb_hdr inpcb Index: src/sys/netinet6/dccp6_usrreq.c diff -u src/sys/netinet6/dccp6_usrreq.c:1.13 src/sys/netinet6/dccp6_usrreq.c:1.14 --- src/sys/netinet6/dccp6_usrreq.c:1.13 Fri Oct 28 05:20:08 2022 +++ src/sys/netinet6/dccp6_usrreq.c Fri Oct 28 05:26:29 2022 @@ -1,5 +1,5 @@ /* $KAME: dccp6_usrreq.c,v 1.13 2005/07/27 08:42:56 nishida Exp $ */ -/* $NetBSD: dccp6_usrreq.c,v 1.13 2022/10/28 05:20:08 ozaki-r Exp $ */ +/* $NetBSD: dccp6_usrreq.c,v 1.14 2022/10/28 05:26:29 ozaki-r Exp $ */ /* * Copyright (C) 2003 WIDE Project. @@ -31,7 +31,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: dccp6_usrreq.c,v 1.13 2022/10/28 05:20:08 ozaki-r Exp $"); +__KERNEL_RCSID(0, "$NetBSD: dccp6_usrreq.c,v 1.14 2022/10/28 05:26:29 ozaki-r Exp $"); #ifdef _KERNEL_OPT #include "opt_inet.h" @@ -162,7 +162,7 @@ dccp6_connect(struct socket *so, struct return EINVAL; } INP_LOCK(inp); - if (inp->inp_faddr6.s_addr != INADDR_ANY) { + if (in6p_faddr(inp).s_addr != INADDR_ANY) { INP_UNLOCK(inp); INP_INFO_WUNLOCK(&dccpbinfo); return EISCONN; @@ -174,7 +174,7 @@ dccp6_connect(struct socket *so, struct if (inp == 0) { return EINVAL; } - if (!IN6_IS_ADDR_UNSPECIFIED(&inp->inp_faddr6)) { + if (!IN6_IS_ADDR_UNSPECIFIED(&in6p_faddr(inp))) { return EISCONN; } Index: src/sys/netinet6/sctp6_usrreq.c diff -u src/sys/netinet6/sctp6_usrreq.c:1.22 src/sys/netinet6/sctp6_usrreq.c:1.23 --- src/sys/netinet6/sctp6_usrreq.c:1.22 Mon Apr 27 19:33:48 2020 +++ src/sys/netinet6/sctp6_usrreq.c Fri Oct 28 05:26:29 2022 @@ -1,5 +1,5 @@ /* $KAME: sctp6_usrreq.c,v 1.38 2005/08/24 08:08:56 suz Exp $ */ -/* $NetBSD: sctp6_usrreq.c,v 1.22 2020/04/27 19:33:48 rjs Exp $ */ +/* $NetBSD: sctp6_usrreq.c,v 1.23 2022/10/28 05:26:29 ozaki-r Exp $ */ /* * Copyright (c) 2001, 2002, 2003, 2004 Cisco Systems, Inc. @@ -33,7 +33,7 @@ * SUCH DAMAGE. */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: sctp6_usrreq.c,v 1.22 2020/04/27 19:33:48 rjs Exp $"); +__KERNEL_RCSID(0, "$NetBSD: sctp6_usrreq.c,v 1.23 2022/10/28 05:26:29 ozaki-r Exp $"); #ifdef _KERNEL_OPT #include "opt_inet.h" @@ -234,7 +234,7 @@ sctp_skip_csum: /* * Check AH/ESP integrity. */ - if (ipsec_used && ipsec_in_reject(m, (struct in6pcb *)in6p_ip)) { + if (ipsec_used && ipsec_in_reject(m, in6p_ip)) { /* XXX */ #if 0 /* FIX ME: need to find right stat */ @@ -262,9 +262,9 @@ sctp_skip_csum: ip6_savecontrol(in6p_ip, m, &opts, NULL); #endif #elif defined(__NetBSD__) - ip6_savecontrol((struct in6pcb *)in6p_ip, &opts, ip6, m); + ip6_savecontrol(in6p_ip, &opts, ip6, m); #else - ip6_savecontrol((struct in6pcb *)in6p_ip, m, &opts); + ip6_savecontrol(in6p_ip, m, &opts); #endif } @@ -483,8 +483,7 @@ sctp6_ctlinput(int cmd, const struct soc } } else { if (PRC_IS_REDIRECT(cmd) && inp) { - in6_rtchange((struct in6pcb *)inp, - inet6ctlerrmap[cmd]); + in6_rtchange((struct inpcb *)inp, inet6ctlerrmap[cmd]); } if (inp) { /* reduce inp's ref-count */