Module Name: src
Committed By: ozaki-r
Date: Fri Oct 28 05:20:08 UTC 2022
Modified Files:
src/sys/dist/pf/net: pf.c
src/sys/net: if_wg.c
src/sys/netinet: dccp_usrreq.c dccp_var.h sctp_pcb.h
src/sys/netinet6: dccp6_usrreq.c
Log Message:
Adjust pf, wg, dccp and sctp for struct inpcb integration
To generate a diff of this commit:
cvs rdiff -u -r1.84 -r1.85 src/sys/dist/pf/net/pf.c
cvs rdiff -u -r1.69 -r1.70 src/sys/net/if_wg.c
cvs rdiff -u -r1.22 -r1.23 src/sys/netinet/dccp_usrreq.c
cvs rdiff -u -r1.6 -r1.7 src/sys/netinet/dccp_var.h
cvs rdiff -u -r1.5 -r1.6 src/sys/netinet/sctp_pcb.h
cvs rdiff -u -r1.12 -r1.13 src/sys/netinet6/dccp6_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/dist/pf/net/pf.c
diff -u src/sys/dist/pf/net/pf.c:1.84 src/sys/dist/pf/net/pf.c:1.85
--- src/sys/dist/pf/net/pf.c:1.84 Mon Aug 10 10:59:34 2020
+++ src/sys/dist/pf/net/pf.c Fri Oct 28 05:20:08 2022
@@ -1,4 +1,4 @@
-/* $NetBSD: pf.c,v 1.84 2020/08/10 10:59:34 rin Exp $ */
+/* $NetBSD: pf.c,v 1.85 2022/10/28 05:20:08 ozaki-r Exp $ */
/* $OpenBSD: pf.c,v 1.552.2.1 2007/11/27 16:37:57 henning Exp $ */
/*
@@ -37,7 +37,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: pf.c,v 1.84 2020/08/10 10:59:34 rin Exp $");
+__KERNEL_RCSID(0, "$NetBSD: pf.c,v 1.85 2022/10/28 05:20:08 ozaki-r Exp $");
#include "pflog.h"
@@ -2758,11 +2758,8 @@ pf_socket_lookup(int direction, struct p
struct inpcbtable *tb;
struct inpcb *inp = NULL;
struct socket *so = NULL;
-#if defined(__NetBSD__) && defined(INET6)
- struct in6pcb *in6p = NULL;
-#else
#define in6p inp
-#endif /* __NetBSD__ && INET6 */
+#define in6p_socket inp_socket
if (pd == NULL)
return (-1);
Index: src/sys/net/if_wg.c
diff -u src/sys/net/if_wg.c:1.69 src/sys/net/if_wg.c:1.70
--- src/sys/net/if_wg.c:1.69 Fri Mar 25 08:57:50 2022
+++ src/sys/net/if_wg.c Fri Oct 28 05:20:08 2022
@@ -1,4 +1,4 @@
-/* $NetBSD: if_wg.c,v 1.69 2022/03/25 08:57:50 hannken Exp $ */
+/* $NetBSD: if_wg.c,v 1.70 2022/10/28 05:20:08 ozaki-r Exp $ */
/*
* Copyright (C) Ryota Ozaki <[email protected]>
@@ -41,7 +41,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: if_wg.c,v 1.69 2022/03/25 08:57:50 hannken Exp $");
+__KERNEL_RCSID(0, "$NetBSD: if_wg.c,v 1.70 2022/10/28 05:20:08 ozaki-r Exp $");
#ifdef _KERNEL_OPT
#include "opt_altq_enabled.h"
@@ -3266,12 +3266,7 @@ wg_socreate(struct wg_softc *wg, int af,
so->so_upcallarg = wg;
so->so_upcall = wg_so_upcall;
so->so_rcv.sb_flags |= SB_UPCALL;
- if (af == AF_INET)
- in_pcb_register_overudp_cb(sotoinpcb(so), wg_overudp_cb, wg);
-#if INET6
- else
- in6_pcb_register_overudp_cb(sotoin6pcb(so), wg_overudp_cb, wg);
-#endif
+ in_pcb_register_overudp_cb(sotoinpcb(so), wg_overudp_cb, wg);
sounlock(so);
*sop = so;
@@ -3924,7 +3919,7 @@ wg_send_udp(struct wg_peer *wgp, struct
error = udp_send(so, m, wgsatosa(wgsa), NULL, curlwp);
} else {
#ifdef INET6
- error = udp6_output(sotoin6pcb(so), m, wgsatosin6(wgsa),
+ error = udp6_output(sotoinpcb(so), m, wgsatosin6(wgsa),
NULL, curlwp);
#else
m_freem(m);
Index: src/sys/netinet/dccp_usrreq.c
diff -u src/sys/netinet/dccp_usrreq.c:1.22 src/sys/netinet/dccp_usrreq.c:1.23
--- src/sys/netinet/dccp_usrreq.c:1.22 Sat Dec 4 13:23:04 2021
+++ src/sys/netinet/dccp_usrreq.c Fri Oct 28 05:20:08 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.22 2021/12/04 13:23:04 andvar Exp $ */
+/* $NetBSD: dccp_usrreq.c,v 1.23 2022/10/28 05:20:08 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.22 2021/12/04 13:23:04 andvar Exp $");
+__KERNEL_RCSID(0, "$NetBSD: dccp_usrreq.c,v 1.23 2022/10/28 05:20:08 ozaki-r Exp $");
#ifdef _KERNEL_OPT
#include "opt_inet.h"
@@ -188,7 +188,6 @@ dccp_input(struct mbuf *m, int off, int
struct dccphdr *dh;
struct dccplhdr *dlh;
struct inpcb *inp = NULL, *oinp = NULL;
- struct in6pcb *in6p = NULL, *oin6p = NULL;
struct dccpcb *dp;
struct ipovly *ipov = NULL;
struct dccp_requesthdr *drqh;
@@ -338,11 +337,11 @@ dccp_input(struct mbuf *m, int off, int
*/
#ifdef INET6
if (isipv6) {
- in6p = in6_pcblookup_connect(&dccpbtable, &ip6->ip6_src,
+ inp = in6_pcblookup_connect(&dccpbtable, &ip6->ip6_src,
dh->dh_sport, &ip6->ip6_dst, dh->dh_dport, 0, 0);
- if (in6p == 0) {
+ if (inp == NULL) {
/* XXX stats increment? */
- in6p = in6_pcblookup_bind(&dccpbtable, &ip6->ip6_dst,
+ inp = in6_pcblookup_bind(&dccpbtable, &ip6->ip6_dst,
dh->dh_dport, 0);
}
} else
@@ -357,12 +356,12 @@ dccp_input(struct mbuf *m, int off, int
}
}
if (isipv6) {
- DCCP_DEBUG((LOG_INFO, "in6p=%p\n", in6p));
+ DCCP_DEBUG((LOG_INFO, "in6p=%p\n", inp));
} else {
DCCP_DEBUG((LOG_INFO, "inp=%p\n", inp));
}
- if (isipv6 ? in6p == NULL : inp == NULL) {
+ if (inp == NULL) {
if (dccp_log_in_vain) {
#ifdef INET6
char dbuf[INET6_ADDRSTRLEN+2], sbuf[INET6_ADDRSTRLEN+2];
@@ -409,14 +408,8 @@ dccp_input(struct mbuf *m, int off, int
}
INP_LOCK(inp);
-#ifdef INET6
- if (isipv6)
- dp = in6todccpcb(in6p);
- else
-#endif
- dp = intodccpcb(inp);
-
- if (dp == 0) {
+ dp = intodccpcb(inp);
+ if (dp == NULL) {
INP_UNLOCK(inp);
INP_INFO_WUNLOCK(&dccpbinfo);
goto badunlocked;
@@ -431,12 +424,7 @@ dccp_input(struct mbuf *m, int off, int
goto badunlocked;
}
-#if defined(INET6)
- if (isipv6)
- so = in6p->in6p_socket;
- else
-#endif
- so = inp->inp_socket;
+ so = inp->inp_socket;
if (so->so_options & SO_ACCEPTCONN) {
DCCP_DEBUG((LOG_INFO, "so->options & SO_ACCEPTCONN! dp->state = %i\n", dp->state));
@@ -450,21 +438,16 @@ dccp_input(struct mbuf *m, int off, int
/* INP_LOCK(inp); XXX */
-#if defined(INET6)
- if (isipv6)
- oin6p = in6p;
- else
-#endif
- oinp = inp;
+ oinp = inp;
#ifdef INET6
if (isipv6) {
- in6p = sotoin6pcb(so);
- in6p->in6p_laddr = ip6->ip6_dst;
- in6p->in6p_faddr = ip6->ip6_src;
- in6p->in6p_lport = dh->dh_dport;
- in6p->in6p_fport = dh->dh_sport;
- in6_pcbstate(in6p, IN6P_CONNECTED);
+ inp = sotoinpcb(so);
+ inp->inp_laddr6 = ip6->ip6_dst;
+ inp->inp_faddr6 = ip6->ip6_src;
+ inp->inp_lport = dh->dh_dport;
+ inp->inp_fport = dh->dh_sport;
+ in_pcbstate(inp, INP_CONNECTED);
} else
#endif
{
@@ -478,27 +461,13 @@ dccp_input(struct mbuf *m, int off, int
if (!isipv6)
in_pcbstate(inp, INP_BOUND);
-#if defined(INET6)
- if (isipv6)
- dp = (struct dccpcb *)in6p->in6p_ppcb;
- else
-#endif
- dp = (struct dccpcb *)inp->inp_ppcb;
+ dp = inp->inp_ppcb;
dp->state = DCCPS_LISTEN;
dp->who = DCCP_SERVER;
-#if defined(INET6)
- if (isipv6) {
- dp->cslen = ((struct dccpcb *)oin6p->in6p_ppcb)->cslen;
- dp->avgpsize = ((struct dccpcb *)oin6p->in6p_ppcb)->avgpsize;
- dp->scode = ((struct dccpcb *)oin6p->in6p_ppcb)->scode;
- } else
-#endif
- {
- dp->cslen = ((struct dccpcb *)oinp->inp_ppcb)->cslen;
- dp->avgpsize = ((struct dccpcb *)oinp->inp_ppcb)->avgpsize;
- dp->scode = ((struct dccpcb *)oinp->inp_ppcb)->scode;
- }
+ dp->cslen = ((struct dccpcb *)oinp->inp_ppcb)->cslen;
+ dp->avgpsize = ((struct dccpcb *)oinp->inp_ppcb)->avgpsize;
+ dp->scode = ((struct dccpcb *)oinp->inp_ppcb)->scode;
dp->seq_snd = (((u_int64_t)random() << 32) | random()) % 281474976710656LL;
dp->ref_seq.hi = dp->seq_snd >> 24;
dp->ref_seq.lo = (u_int64_t)(dp->seq_snd & 0xffffff);
@@ -690,12 +659,7 @@ dccp_input(struct mbuf *m, int off, int
DCCP_DEBUG((LOG_INFO, "Setting DCCPS_ESTAB & soisconnected\n"));
dp->state = DCCPS_ESTAB;
dccpstat.dccps_connects++;
-#if defined(INET6)
- if (isipv6)
- soisconnected(in6p->in6p_socket);
- else
-#endif
- soisconnected(inp->inp_socket);
+ soisconnected(inp->inp_socket);
} else {
dp->state = DCCPS_RESPOND;
DCCP_DEBUG((LOG_INFO, "CC negotiation is not finished, cc_in_use[0] = %u, cc_in_use[1] = %u\n",dp->cc_in_use[0], dp->cc_in_use[1]));
@@ -744,12 +708,7 @@ dccp_input(struct mbuf *m, int off, int
DCCP_DEBUG((LOG_INFO, "Setting DCCPS_ESTAB & soisconnected\n"));
dp->state = DCCPS_ESTAB;
dccpstat.dccps_connects++;
-#if defined(INET6)
- if (isipv6)
- soisconnected(in6p->in6p_socket);
- else
-#endif
- soisconnected(inp->inp_socket);
+ soisconnected(inp->inp_socket);
} else {
DCCP_DEBUG((LOG_INFO, "CC negotiation is not finished, cc_in_use[0] = %u, cc_in_use[1] = %u\n",dp->cc_in_use[0], dp->cc_in_use[1]));
/* Force an output!!! */
@@ -1094,9 +1053,6 @@ dccp_ctloutput(int op, struct socket *so
{
int s, error = 0;
struct inpcb *inp;
-#if defined(INET6)
- struct in6pcb *in6p;
-#endif
struct dccpcb *dp;
int family; /* family of the socket */
@@ -1105,29 +1061,8 @@ dccp_ctloutput(int op, struct socket *so
s = splsoftnet();
INP_INFO_RLOCK(&dccpbinfo);
- switch (family) {
- case PF_INET:
- inp = sotoinpcb(so);
-#if defined(INET6)
- in6p = NULL;
-#endif
- break;
-#if defined(INET6)
- case PF_INET6:
- inp = NULL;
- in6p = sotoin6pcb(so);
- break;
-#endif
- default:
- INP_INFO_RUNLOCK(&dccpbinfo);
- splx(s);
- return EAFNOSUPPORT;
- }
-#if defined(INET6)
- if (inp == NULL && in6p == NULL)
-#else
+ inp = sotoinpcb(so);
if (inp == NULL)
-#endif
{
INP_INFO_RUNLOCK(&dccpbinfo);
splx(s);
@@ -1155,14 +1090,7 @@ dccp_ctloutput(int op, struct socket *so
return (error);
}
- if (inp)
- dp = intodccpcb(inp);
-#if defined(INET6)
- else if (in6p)
- dp = in6todccpcb(in6p);
-#endif
- else
- dp = NULL;
+ dp = intodccpcb(inp);
if (op == PRCO_SETOPT) {
error = dccp_optsset(dp, sopt);
@@ -1185,7 +1113,6 @@ int
dccp_output(struct dccpcb *dp, u_int8_t extra)
{
struct inpcb *inp;
- struct in6pcb *in6p = NULL;
struct socket *so;
struct mbuf *m;
@@ -1218,17 +1145,8 @@ dccp_output(struct dccpcb *dp, u_int8_t
KASSERT(mutex_assert(&dp->d_inpcb->inp_mtx, MA_OWNED));
#endif
-#if defined(INET6)
- if (isipv6) {
- inp = 0;
- in6p = dp->d_in6pcb;
- so = in6p->in6p_socket;
- } else
-#endif
- {
- inp = dp->d_inpcb;
- so = inp->inp_socket;
- }
+ inp = dp->d_inpcb;
+ so = inp->inp_socket;
if (dp->state != DCCPS_ESTAB && extra == 1) {
/* Only let cc decide when to resend if we are in established state */
@@ -1435,12 +1353,12 @@ again:
ip6 = mtod(m, struct ip6_hdr *);
dh = (struct dccphdr *)(ip6 + 1);
ip6->ip6_flow = (ip6->ip6_flow & ~IPV6_FLOWINFO_MASK) |
- (in6p->in6p_flowinfo & IPV6_FLOWINFO_MASK);
+ (inp->inp_flowinfo & 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 = in6p->in6p_laddr;
- ip6->ip6_dst = in6p->in6p_faddr;
+ ip6->ip6_src = inp->inp_laddr6;
+ ip6->ip6_dst = inp->inp_faddr6;
} else
#endif
{
@@ -1453,16 +1371,8 @@ again:
}
dlh = (struct dccplhdr *)dh;
- if (inp) {
- dh->dh_sport = inp->inp_lport;
- dh->dh_dport = inp->inp_fport;
- }
-#ifdef INET6
- else if (in6p) {
- dh->dh_sport = in6p->in6p_lport;
- dh->dh_dport = in6p->in6p_fport;
- }
-#endif
+ dh->dh_sport = inp->inp_lport;
+ dh->dh_dport = inp->inp_fport;
dh->dh_cscov = dp->cslen;
dh->dh_ccval = dp->ccval;
dh->dh_type = type;
@@ -1597,8 +1507,8 @@ 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, in6p->in6p_outputopts, &in6p->in6p_route,
- (in6p->in6p_socket->so_options & SO_DONTROUTE), NULL, NULL,
+ error = ip6_output(m, inp->inp_outputopts6, &inp->inp_route,
+ (inp->inp_socket->so_options & SO_DONTROUTE), NULL, NULL,
NULL);
} else
#endif
@@ -1614,16 +1524,8 @@ again:
return (error);
}
-#if defined(INET6)
- if (isipv6) {
- sbdrop(&in6p->in6p_socket->so_snd, len);
- sowwakeup(in6p->in6p_socket);
- } else
-#endif
- {
- sbdrop(&inp->inp_socket->so_snd, len);
- sowwakeup(inp->inp_socket);
- }
+ sbdrop(&inp->inp_socket->so_snd, len);
+ sowwakeup(inp->inp_socket);
if (dp->cc_in_use[0] > 0 && dp->state == DCCPS_ESTAB) {
DCCP_DEBUG((LOG_INFO, "Calling *cc_sw[%u].cc_send_packet_sent!\n", dp->cc_in_use[0]));
@@ -1650,27 +1552,17 @@ release:
int
dccp_abort(struct socket *so)
{
- struct inpcb *inp = 0;
- struct in6pcb *in6p;
+ struct inpcb *inp = NULL;
struct dccpcb *dp;
DCCP_DEBUG((LOG_INFO, "Entering dccp_abort!\n"));
INP_INFO_WLOCK(&dccpbinfo);
- if (so->so_proto->pr_domain->dom_family == PF_INET6) {
- in6p = sotoin6pcb(so);
- if (in6p == 0) {
- return EINVAL;
- }
- inp = 0;
- dp = (struct dccpcb *)in6p->in6p_ppcb;
- } else {
- inp = sotoinpcb(so);
- if (inp == 0) {
- INP_INFO_WUNLOCK(&dccpbinfo);
- return EINVAL;
- }
- dp = (struct dccpcb *)inp->inp_ppcb;
+ inp = sotoinpcb(so);
+ if (inp == NULL) {
+ INP_INFO_WUNLOCK(&dccpbinfo);
+ return EINVAL;
}
+ dp = inp->inp_ppcb;
dccp_disconnect2(dp);
@@ -1683,7 +1575,6 @@ dccp_close(struct dccpcb *dp)
{
struct socket *so;
struct inpcb *inp = dp->d_inpcb;
- struct in6pcb *in6p = dp->d_in6pcb;
so = dptosocket(dp);
DCCP_DEBUG((LOG_INFO, "Entering dccp_close!\n"));
@@ -1700,18 +1591,9 @@ dccp_close(struct dccpcb *dp)
(*cc_sw[dp->cc_in_use[1]].cc_recv_free)(dp->cc_state[1]);
pool_put(&dccpcb_pool, dp);
- if (inp) {
- inp->inp_ppcb = NULL;
- soisdisconnected(so);
- in_pcbdetach(inp);
- }
-#if defined(INET6)
- else if (in6p) {
- in6p->in6p_ppcb = 0;
- soisdisconnected(so);
- in6_pcbdetach(in6p);
- }
-#endif
+ inp->inp_ppcb = NULL;
+ soisdisconnected(so);
+ in_pcbdetach(inp);
return ((struct dccpcb *)0);
}
@@ -1722,69 +1604,33 @@ dccp_close(struct dccpcb *dp)
int
dccp_attach(struct socket *so, int proto)
{
- struct inpcb *inp = 0;
- struct in6pcb *in6p = 0;
+ struct inpcb *inp = NULL;
struct dccpcb *dp;
- int s, family, error = 0;
+ int s, error = 0;
DCCP_DEBUG((LOG_INFO, "Entering dccp_attach(proto=%d)!\n", proto));
INP_INFO_WLOCK(&dccpbinfo);
s = splsoftnet();
sosetlock(so);
- family = so->so_proto->pr_domain->dom_family;
- switch (family) {
- case PF_INET:
- inp = sotoinpcb(so);
- if (inp != 0) {
- error = EINVAL;
- goto out;
- }
- error = soreserve(so, dccp_sendspace, dccp_recvspace);
- if (error)
- goto out;
- error = in_pcballoc(so, &dccpbtable);
- if (error)
- goto out;
- inp = sotoinpcb(so);
- break;
-#if defined(INET6)
- case PF_INET6:
- in6p = sotoin6pcb(so);
- if (in6p != 0) {
- error = EINVAL;
- goto out;
- }
- error = soreserve(so, dccp_sendspace, dccp_recvspace);
- if (error)
- goto out;
- error = in6_pcballoc(so, &dccpbtable);
- if (error)
- goto out;
- in6p = sotoin6pcb(so);
- break;
-#endif
- default:
- error = EAFNOSUPPORT;
+ inp = sotoinpcb(so);
+ if (inp != 0) {
+ error = EINVAL;
goto out;
}
+ error = soreserve(so, dccp_sendspace, dccp_recvspace);
+ if (error)
+ goto out;
+ error = in_pcballoc(so, &dccpbtable);
+ if (error)
+ goto out;
+ inp = sotoinpcb(so);
- if (inp)
- dp = dccp_newdccpcb(PF_INET, (void *)inp);
- else if (in6p)
- dp = dccp_newdccpcb(PF_INET6, (void *)in6p);
- else
- dp = NULL;
-
+ dp = dccp_newdccpcb(inp->inp_af, inp);
if (dp == 0) {
int nofd = so->so_state & SS_NOFDREF;
so->so_state &= ~SS_NOFDREF;
-#if defined(INET6)
- if (proto == PF_INET6) {
- in6_pcbdetach(in6p);
- } else
-#endif
- in_pcbdetach(inp);
+ in_pcbdetach(inp);
so->so_state |= nofd;
error = ENOBUFS;
goto out;
@@ -1924,33 +1770,17 @@ dccp_doconnect(struct socket *so, struct
struct lwp *l, int isipv6)
{
struct inpcb *inp;
-#ifdef INET6
- struct in6pcb *in6p;
-#endif
int error = 0;
DCCP_DEBUG((LOG_INFO, "Entering dccp_doconnect!\n"));
-#if defined(INET6)
- if (isipv6) {
- in6p = sotoin6pcb(so);
- inp = 0;
- } else
-#endif
- {
- inp = sotoinpcb(so);
- in6p = 0;
- }
+ inp = sotoinpcb(so);
-#if !defined(__NetBSD__) || !defined(INET6)
if (inp->inp_lport == 0) {
-#else
- if (isipv6 ? in6p->in6p_lport == 0 : inp->inp_lport == 0) {
-#endif
#ifdef INET6
if (isipv6) {
DCCP_DEBUG((LOG_INFO, "Running in6_pcbbind!\n"));
- error = in6_pcbbind(in6p, NULL, l);
+ error = in6_pcbbind(inp, NULL, l);
} else
#endif /* INET6 */
{
@@ -1964,7 +1794,7 @@ dccp_doconnect(struct socket *so, struct
#ifdef INET6
if (isipv6) {
- error = in6_pcbconnect(in6p, (struct sockaddr_in6 *)nam, l);
+ error = in6_pcbconnect(inp, (struct sockaddr_in6 *)nam, l);
DCCP_DEBUG((LOG_INFO, "in6_pcbconnect=%d\n",error));
} else
#endif
@@ -1986,26 +1816,14 @@ int
dccp_detach(struct socket *so)
{
struct inpcb *inp;
- struct in6pcb *in6p;
struct dccpcb *dp;
DCCP_DEBUG((LOG_INFO, "Entering dccp_detach!\n"));
-#ifdef INET6
- if (so->so_proto->pr_domain->dom_family == AF_INET6) {
- in6p = sotoin6pcb(so);
- if (in6p == 0) {
- return EINVAL;
- }
- dp = (struct dccpcb *)in6p->in6p_ppcb;
- } else
-#endif
- {
- inp = sotoinpcb(so);
- if (inp == 0) {
- return EINVAL;
- }
- dp = (struct dccpcb *)inp->inp_ppcb;
+ inp = sotoinpcb(so);
+ if (inp == NULL) {
+ return EINVAL;
}
+ dp = inp->inp_ppcb;
if (! dccp_disconnect2(dp)) {
INP_UNLOCK(inp);
}
@@ -2021,7 +1839,6 @@ int
dccp_disconnect(struct socket *so)
{
struct inpcb *inp;
- struct in6pcb *in6p;
struct dccpcb *dp;
DCCP_DEBUG((LOG_INFO, "Entering dccp_disconnect!\n"));
@@ -2041,23 +1858,12 @@ dccp_disconnect(struct socket *so)
dp = (struct dccpcb *)inp->inp_ppcb;
#else /* NetBSD */
-#ifdef INET6
- if (so->so_proto->pr_domain->dom_family == AF_INET6) {
- in6p = sotoin6pcb(so);
- if (in6p == 0) {
- INP_INFO_WUNLOCK(&dccpbinfo);
- return EINVAL;
- }
- dp = (struct dccpcb *)in6p->in6p_ppcb;
- } else
-#endif
- {
- inp = sotoinpcb(so);
- if (inp == 0) {
- return EINVAL;
- }
- dp = (struct dccpcb *)inp->inp_ppcb;
+ inp = sotoinpcb(so);
+ if (inp == NULL) {
+ INP_INFO_WUNLOCK(&dccpbinfo);
+ return EINVAL;
}
+ dp = inp->inp_ppcb;
#endif
if (!dccp_disconnect2(dp)) {
INP_UNLOCK(inp);
@@ -2124,27 +1930,15 @@ dccp_send(struct socket *so, struct mbuf
isipv6 = addr && addr->sa_family == AF_INET6;
#endif
-#if defined(INET6)
- if (so->so_proto->pr_domain->dom_family == AF_INET6) {
- struct in6pcb *in6p;
- in6p = sotoin6pcb(so);
- if (in6p == 0) {
- error = EINVAL;
- goto release;
- }
- dp = (struct dccpcb *)in6p->in6p_ppcb;
- } else
-#endif
- {
- INP_INFO_WLOCK(&dccpbinfo);
- inp = sotoinpcb(so);
- if (inp == 0) {
- error = EINVAL;
- goto release;
- }
- INP_LOCK(inp);
- dp = (struct dccpcb *)inp->inp_ppcb;
+ INP_INFO_WLOCK(&dccpbinfo);
+ inp = sotoinpcb(so);
+ if (inp == NULL) {
+ error = EINVAL;
+ goto release;
}
+ INP_LOCK(inp);
+ dp = inp->inp_ppcb;
+
if (dp->state != DCCPS_ESTAB) {
DCCP_DEBUG((LOG_INFO, "We have no established connection!\n"));
}
@@ -2289,7 +2083,6 @@ struct dccpcb *
dccp_newdccpcb(int family, void *aux)
{
struct inpcb *inp;
- struct in6pcb *in6p;
struct dccpcb *dp;
DCCP_DEBUG((LOG_INFO, "Creating a new dccpcb!\n"));
@@ -2332,18 +2125,15 @@ dccp_newdccpcb(int family, void *aux)
dp->pktlenidx = 0;
dp->pktcnt = 0;
+ inp = (struct inpcb *)aux;
+ dp->d_inpcb = inp;
+ inp->inp_ppcb = dp;
switch (family) {
case PF_INET:
- inp = (struct inpcb *)aux;
- dp->d_inpcb = inp;
inp->inp_ip.ip_ttl = ip_defttl;
- inp->inp_ppcb = dp;
break;
case PF_INET6:
- in6p = (struct in6pcb *)aux;
- dp->d_in6pcb = in6p;
- in6p->in6p_ip6.ip6_hlim = in6_selecthlim_rt(in6p);
- in6p->in6p_ppcb = dp;
+ inp->inp_ip6.ip6_hlim = in6_selecthlim_rt(inp);
break;
}
Index: src/sys/netinet/dccp_var.h
diff -u src/sys/netinet/dccp_var.h:1.6 src/sys/netinet/dccp_var.h:1.7
--- src/sys/netinet/dccp_var.h:1.6 Sun Nov 7 20:31:09 2021
+++ src/sys/netinet/dccp_var.h Fri Oct 28 05:20:08 2022
@@ -1,5 +1,5 @@
/* $KAME: dccp_var.h,v 1.29 2005/11/03 14:59:28 nishida Exp $ */
-/* $NetBSD: dccp_var.h,v 1.6 2021/11/07 20:31:09 andvar Exp $ */
+/* $NetBSD: dccp_var.h,v 1.7 2022/10/28 05:20:08 ozaki-r Exp $ */
/*
* Copyright (c) 2003 Joacim H�ggmark, Magnus Erixzon, Nils-Erik Mattsson
@@ -96,7 +96,6 @@ struct dccpcb {
(in each direction) */
void *cc_state[2];
struct inpcb *d_inpcb; /* Pointer back to Internet PCB */
- struct in6pcb *d_in6pcb;
u_int32_t d_maxseg; /* Maximum segment size */
char options[DCCP_MAX_OPTIONS];
u_int8_t optlen;
@@ -153,14 +152,7 @@ struct xdccpcb {
#endif
#define intodccpcb(ip) ((struct dccpcb *)((ip)->inp_ppcb))
-#define in6todccpcb(ip) ((struct dccpcb *)((ip)->in6p_ppcb))
-
-#ifdef __NetBSD__
-#define dptosocket(dp) (((dp)->d_inpcb) ? (dp)->d_inpcb->inp_socket : \
- (((dp)->d_in6pcb) ? (dp)->d_in6pcb->in6p_socket : NULL))
-#else
#define dptosocket(dp) ((dp)->d_inpcb->inp_socket)
-#endif
struct dccpstat {
u_long dccps_connattempt; /* Initiated connections */
Index: src/sys/netinet/sctp_pcb.h
diff -u src/sys/netinet/sctp_pcb.h:1.5 src/sys/netinet/sctp_pcb.h:1.6
--- src/sys/netinet/sctp_pcb.h:1.5 Tue May 24 20:50:20 2022
+++ src/sys/netinet/sctp_pcb.h Fri Oct 28 05:20:08 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.5 2022/05/24 20:50:20 andvar Exp $ */
+/* $NetBSD: sctp_pcb.h,v 1.6 2022/10/28 05:20:08 ozaki-r Exp $ */
#ifndef __SCTP_PCB_H__
#define __SCTP_PCB_H__
@@ -41,6 +41,7 @@
* we would not allocate enough for Net/Open BSD :-<
*/
#include <net/if.h>
+#include <netinet/in_pcb.h>
#include <netinet/ip6.h>
#include <netinet6/ip6_var.h>
#include <netinet6/ip6protosw.h>
@@ -287,7 +288,7 @@ struct sctp_inpcb {
*/
union {
struct inpcb inp;
- char align[(sizeof(struct in6pcb) + SCTP_ALIGNM1) &
+ char align[(sizeof(struct inpcb) + SCTP_ALIGNM1) &
~SCTP_ALIGNM1];
} ip_inp;
LIST_ENTRY(sctp_inpcb) sctp_list; /* lists all endpoints */
@@ -751,5 +752,41 @@ sctp_initiate_iterator(asoc_func af, uin
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
+#endif
+#ifndef in6p_flags
+#define in6p_flags 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
+#endif
+#ifndef inpcb_hdr
+#define inpcb_hdr inpcb
+#endif
+#ifndef sp_inph
+#define sp_inph sp_inp
+#endif
+#endif
+
#endif /* _KERNEL */
#endif /* !__SCTP_PCB_H__ */
Index: src/sys/netinet6/dccp6_usrreq.c
diff -u src/sys/netinet6/dccp6_usrreq.c:1.12 src/sys/netinet6/dccp6_usrreq.c:1.13
--- src/sys/netinet6/dccp6_usrreq.c:1.12 Sat Sep 15 13:33:15 2018
+++ src/sys/netinet6/dccp6_usrreq.c Fri Oct 28 05:20:08 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.12 2018/09/15 13:33:15 rjs Exp $ */
+/* $NetBSD: dccp6_usrreq.c,v 1.13 2022/10/28 05:20:08 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.12 2018/09/15 13:33:15 rjs Exp $");
+__KERNEL_RCSID(0, "$NetBSD: dccp6_usrreq.c,v 1.13 2022/10/28 05:20:08 ozaki-r Exp $");
#ifdef _KERNEL_OPT
#include "opt_inet.h"
@@ -114,30 +114,30 @@ dccp6_ctlinput(int cmd, const struct soc
int
dccp6_bind(struct socket *so, struct sockaddr *nam, struct lwp *td)
{
- struct in6pcb *in6p;
+ struct inpcb *inp;
int error;
- struct sockaddr_in6 *sin6p = (struct sockaddr_in6 *)nam;
+ struct sockaddr_in6 *sinp = (struct sockaddr_in6 *)nam;
DCCP_DEBUG((LOG_INFO, "Entering dccp6_bind!\n"));
INP_INFO_WLOCK(&dccpbinfo);
- in6p = sotoin6pcb(so);
- if (in6p == 0) {
+ inp = sotoinpcb(so);
+ if (inp == 0) {
INP_INFO_WUNLOCK(&dccpbinfo);
- DCCP_DEBUG((LOG_INFO, "dccp6_bind: in6p == 0!\n"));
+ DCCP_DEBUG((LOG_INFO, "dccp6_bind: inp == 0!\n"));
return EINVAL;
}
/* Do not bind to multicast addresses! */
- if (sin6p->sin6_family == AF_INET6 &&
- IN6_IS_ADDR_MULTICAST(&sin6p->sin6_addr)) {
+ if (sinp->sin6_family == AF_INET6 &&
+ IN6_IS_ADDR_MULTICAST(&sinp->sin6_addr)) {
INP_INFO_WUNLOCK(&dccpbinfo);
return EAFNOSUPPORT;
}
INP_LOCK(inp);
- in6todccpcb(in6p)->inp_vflag &= ~INP_IPV4;
- in6todccpcb(in6p)->inp_vflag |= INP_IPV6;
+ intodccpcb(inp)->inp_vflag &= ~INP_IPV4;
+ intodccpcb(inp)->inp_vflag |= INP_IPV6;
- error = in6_pcbbind(in6p, sin6p, td);
+ error = in6_pcbbind(inp, sinp, td);
INP_UNLOCK(inp);
INP_INFO_WUNLOCK(&dccpbinfo);
return error;
@@ -146,7 +146,7 @@ dccp6_bind(struct socket *so, struct soc
int
dccp6_connect(struct socket *so, struct sockaddr *nam, struct lwp *l)
{
- struct in6pcb *in6p;
+ struct inpcb *inp;
struct dccpcb *dp;
int error;
struct sockaddr_in6 *sin6;
@@ -162,7 +162,7 @@ dccp6_connect(struct socket *so, struct
return EINVAL;
}
INP_LOCK(inp);
- if (inp->inp_faddr.s_addr != INADDR_ANY) {
+ if (inp->inp_faddr6.s_addr != INADDR_ANY) {
INP_UNLOCK(inp);
INP_INFO_WUNLOCK(&dccpbinfo);
return EISCONN;
@@ -170,15 +170,15 @@ dccp6_connect(struct socket *so, struct
dp = (struct dccpcb *)inp->inp_ppcb;
#else
- in6p = sotoin6pcb(so);
- if (in6p == 0) {
+ inp = sotoinpcb(so);
+ if (inp == 0) {
return EINVAL;
}
- if (!IN6_IS_ADDR_UNSPECIFIED(&in6p->in6p_faddr)) {
+ if (!IN6_IS_ADDR_UNSPECIFIED(&inp->inp_faddr6)) {
return EISCONN;
}
- dp = (struct dccpcb *)in6p->in6p_ppcb;
+ dp = (struct dccpcb *)inp->inp_ppcb;
#endif
if (dp->state == DCCPS_ESTAB) {
DCCP_DEBUG((LOG_INFO, "Why are we in connect when we already have a established connection?\n"));
@@ -232,24 +232,24 @@ bad:
int
dccp6_listen(struct socket *so, struct lwp *l)
{
- struct in6pcb *in6p;
+ struct inpcb *inp;
struct dccpcb *dp;
int error = 0;
DCCP_DEBUG((LOG_INFO, "Entering dccp6_listen!\n"));
INP_INFO_RLOCK(&dccpbinfo);
- in6p = sotoin6pcb(so);
- if (in6p == 0) {
+ inp = sotoinpcb(so);
+ if (inp == 0) {
INP_INFO_RUNLOCK(&dccpbinfo);
return EINVAL;
}
INP_LOCK(inp);
INP_INFO_RUNLOCK(&dccpbinfo);
- dp = in6todccpcb(in6p);
- DCCP_DEBUG((LOG_INFO, "Checking in6p->in6p_lport!\n"));
- if (in6p->in6p_lport == 0) {
- error = in6_pcbbind(in6p, NULL, l);
+ dp = intodccpcb(inp);
+ DCCP_DEBUG((LOG_INFO, "Checking inp->inp_lport!\n"));
+ if (inp->inp_lport == 0) {
+ error = in6_pcbbind(inp, NULL, l);
}
if (error == 0) {
dp->state = DCCPS_LISTEN;
@@ -263,7 +263,7 @@ dccp6_listen(struct socket *so, struct l
int
dccp6_accept(struct socket *so, struct sockaddr *nam)
{
- struct in6pcb *in6p = NULL;
+ struct inpcb *inp = NULL;
int error = 0;
DCCP_DEBUG((LOG_INFO, "Entering dccp6_accept!\n"));
@@ -276,14 +276,14 @@ dccp6_accept(struct socket *so, struct s
}
INP_INFO_RLOCK(&dccpbinfo);
- in6p = sotoin6pcb(so);
- if (in6p == 0) {
+ inp = sotoinpcb(so);
+ if (inp == 0) {
INP_INFO_RUNLOCK(&dccpbinfo);
return EINVAL;
}
INP_LOCK(inp);
INP_INFO_RUNLOCK(&dccpbinfo);
- in6_setpeeraddr(in6p, (struct sockaddr_in6 *)nam);
+ in6_setpeeraddr(inp, (struct sockaddr_in6 *)nam);
INP_UNLOCK(inp);
return error;
@@ -380,7 +380,7 @@ dccp6_peeraddr(struct socket *so, struct
KASSERT(sotoinpcb(so) != NULL);
KASSERT(nam != NULL);
- in6_setpeeraddr(sotoin6pcb(so), (struct sockaddr_in6 *)nam);
+ in6_setpeeraddr(sotoinpcb(so), (struct sockaddr_in6 *)nam);
return 0;
}
@@ -391,7 +391,7 @@ dccp6_sockaddr(struct socket *so, struct
KASSERT(sotoinpcb(so) != NULL);
KASSERT(nam != NULL);
- in6_setsockaddr(sotoin6pcb(so), (struct sockaddr_in6 *)nam);
+ in6_setsockaddr(sotoinpcb(so), (struct sockaddr_in6 *)nam);
return 0;
}