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 */

Reply via email to