Module Name: src Committed By: knakahara Date: Tue Jan 26 05:58:06 UTC 2016
Modified Files: src/sys/net: if_stf.c if_stf.h src/sys/netinet: in_gif.c ip_encap.c ip_encap.h ip_mroute.c src/sys/netinet6: in6_gif.c src/sys/netipsec: xform_ipip.c Log Message: implement encapsw instead of protosw and uniform prototype. suggested and advised by riastradh@n.o, thanks. BTW, It seems in_stf_input() had bugs... To generate a diff of this commit: cvs rdiff -u -r1.85 -r1.86 src/sys/net/if_stf.c cvs rdiff -u -r1.4 -r1.5 src/sys/net/if_stf.h cvs rdiff -u -r1.73 -r1.74 src/sys/netinet/in_gif.c cvs rdiff -u -r1.50 -r1.51 src/sys/netinet/ip_encap.c cvs rdiff -u -r1.15 -r1.16 src/sys/netinet/ip_encap.h cvs rdiff -u -r1.136 -r1.137 src/sys/netinet/ip_mroute.c cvs rdiff -u -r1.70 -r1.71 src/sys/netinet6/in6_gif.c cvs rdiff -u -r1.35 -r1.36 src/sys/netipsec/xform_ipip.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/net/if_stf.c diff -u src/sys/net/if_stf.c:1.85 src/sys/net/if_stf.c:1.86 --- src/sys/net/if_stf.c:1.85 Fri Jan 22 23:27:12 2016 +++ src/sys/net/if_stf.c Tue Jan 26 05:58:05 2016 @@ -1,4 +1,4 @@ -/* $NetBSD: if_stf.c,v 1.85 2016/01/22 23:27:12 riastradh Exp $ */ +/* $NetBSD: if_stf.c,v 1.86 2016/01/26 05:58:05 knakahara Exp $ */ /* $KAME: if_stf.c,v 1.62 2001/06/07 22:32:16 itojun Exp $ */ /* @@ -75,7 +75,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: if_stf.c,v 1.85 2016/01/22 23:27:12 riastradh Exp $"); +__KERNEL_RCSID(0, "$NetBSD: if_stf.c,v 1.86 2016/01/26 05:58:05 knakahara Exp $"); #ifdef _KERNEL_OPT #include "opt_inet.h" @@ -93,7 +93,6 @@ __KERNEL_RCSID(0, "$NetBSD: if_stf.c,v 1 #include <sys/errno.h> #include <sys/ioctl.h> #include <sys/proc.h> -#include <sys/protosw.h> #include <sys/queue.h> #include <sys/syslog.h> @@ -158,16 +157,12 @@ static int ip_gif_ttl = 40; /*XXX*/ extern struct domain inetdomain; -static const struct protosw in_stf_protosw = +static const struct encapsw in_stf_encapsw = { - .pr_type = SOCK_RAW, - .pr_domain = &inetdomain, - .pr_protocol = IPPROTO_IPV6, - .pr_flags = PR_ATOMIC|PR_ADDR, - .pr_input = in_stf_input, - .pr_ctlinput = NULL, - .pr_ctloutput = rip_ctloutput, - .pr_usrreqs = &rip_usrreqs, + .encapsw6 = { + .pr_input = in_stf_input, + .pr_ctlinput = NULL, + } }; static int stf_encapcheck(struct mbuf *, int, int, void *); @@ -206,7 +201,7 @@ stf_clone_create(struct if_clone *ifc, i if_initname(&sc->sc_if, ifc->ifc_name, unit); sc->encap_cookie = encap_attach_func(AF_INET, IPPROTO_IPV6, - stf_encapcheck, &in_stf_protosw, sc); + stf_encapcheck, &in_stf_encapsw, sc); if (sc->encap_cookie == NULL) { printf("%s: unable to attach encap\n", if_name(&sc->sc_if)); free(sc, M_DEVBUF); @@ -557,26 +552,22 @@ stf_checkaddr6(struct stf_softc *sc, con return 0; } -void -in_stf_input(struct mbuf *m, ...) +int +in_stf_input(struct mbuf **mp, int *offp, int proto) { - int s, off, proto; + int s; struct stf_softc *sc; struct ip *ip; struct ip6_hdr *ip6; uint8_t otos, itos; struct ifnet *ifp; size_t pktlen; - va_list ap; - - va_start(ap, m); - off = va_arg(ap, int); - proto = va_arg(ap, int); - va_end(ap); + int off = *offp; + struct mbuf *m = *mp; if (proto != IPPROTO_IPV6) { m_freem(m); - return; + return IPPROTO_DONE; } ip = mtod(m, struct ip *); @@ -585,7 +576,7 @@ in_stf_input(struct mbuf *m, ...) if (sc == NULL || (sc->sc_if.if_flags & IFF_UP) == 0) { m_freem(m); - return; + return IPPROTO_DONE; } ifp = &sc->sc_if; @@ -597,7 +588,7 @@ in_stf_input(struct mbuf *m, ...) if (stf_checkaddr4(sc, &ip->ip_dst, NULL) < 0 || stf_checkaddr4(sc, &ip->ip_src, m->m_pkthdr.rcvif) < 0) { m_freem(m); - return; + return IPPROTO_DONE; } otos = ip->ip_tos; @@ -606,7 +597,7 @@ in_stf_input(struct mbuf *m, ...) if (m->m_len < sizeof(*ip6)) { m = m_pullup(m, sizeof(*ip6)); if (!m) - return; + return IPPROTO_DONE; } ip6 = mtod(m, struct ip6_hdr *); @@ -617,7 +608,7 @@ in_stf_input(struct mbuf *m, ...) if (stf_checkaddr6(sc, &ip6->ip6_dst, NULL) < 0 || stf_checkaddr6(sc, &ip6->ip6_src, m->m_pkthdr.rcvif) < 0) { m_freem(m); - return; + return IPPROTO_DONE; } itos = (ntohl(ip6->ip6_flow) >> 20) & 0xff; @@ -648,6 +639,8 @@ in_stf_input(struct mbuf *m, ...) m_freem(m); } splx(s); + + return IPPROTO_DONE; } /* ARGSUSED */ Index: src/sys/net/if_stf.h diff -u src/sys/net/if_stf.h:1.4 src/sys/net/if_stf.h:1.5 --- src/sys/net/if_stf.h:1.4 Sun Dec 11 23:05:25 2005 +++ src/sys/net/if_stf.h Tue Jan 26 05:58:05 2016 @@ -1,4 +1,4 @@ -/* $NetBSD: if_stf.h,v 1.4 2005/12/11 23:05:25 thorpej Exp $ */ +/* $NetBSD: if_stf.h,v 1.5 2016/01/26 05:58:05 knakahara Exp $ */ /* $KAME: if_stf.h,v 1.3 2000/03/25 07:23:33 sumikawa Exp $ */ /* @@ -37,6 +37,6 @@ #define STF_MTU_MIN (1280) /* Minimum MTU */ #define STF_MTU_MAX (8192) /* Maximum MTU */ -void in_stf_input(struct mbuf *, ...); +int in_stf_input(struct mbuf **, int *, int); #endif /* !_NET_IF_STF_H_ */ Index: src/sys/netinet/in_gif.c diff -u src/sys/netinet/in_gif.c:1.73 src/sys/netinet/in_gif.c:1.74 --- src/sys/netinet/in_gif.c:1.73 Sat Jan 23 14:48:55 2016 +++ src/sys/netinet/in_gif.c Tue Jan 26 05:58:05 2016 @@ -1,4 +1,4 @@ -/* $NetBSD: in_gif.c,v 1.73 2016/01/23 14:48:55 riastradh Exp $ */ +/* $NetBSD: in_gif.c,v 1.74 2016/01/26 05:58:05 knakahara Exp $ */ /* $KAME: in_gif.c,v 1.66 2001/07/29 04:46:09 itojun Exp $ */ /* @@ -31,7 +31,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: in_gif.c,v 1.73 2016/01/23 14:48:55 riastradh Exp $"); +__KERNEL_RCSID(0, "$NetBSD: in_gif.c,v 1.74 2016/01/26 05:58:05 knakahara Exp $"); #ifdef _KERNEL_OPT #include "opt_inet.h" @@ -45,7 +45,6 @@ __KERNEL_RCSID(0, "$NetBSD: in_gif.c,v 1 #include <sys/errno.h> #include <sys/ioctl.h> #include <sys/syslog.h> -#include <sys/protosw.h> #include <sys/kernel.h> #include <net/if.h> @@ -79,15 +78,11 @@ int ip_gif_ttl = GIF_TTL; int ip_gif_ttl = 0; #endif -static const struct protosw in_gif_protosw = { - .pr_type = SOCK_RAW, - .pr_domain = &inetdomain, - .pr_protocol = 0 /* IPPROTO_IPV[46] */, - .pr_flags = PR_ATOMIC|PR_ADDR, - .pr_input = in_gif_input, - .pr_ctlinput = NULL, - .pr_ctloutput = rip_ctloutput, - .pr_usrreqs = &rip_usrreqs, +static const struct encapsw in_gif_encapsw = { + .encapsw4 = { + .pr_input = in_gif_input, + .pr_ctlinput = NULL, + } }; int @@ -381,10 +376,10 @@ in_gif_attach(struct gif_softc *sc) return EINVAL; sc->encap_cookie4 = encap_attach(AF_INET, -1, sc->gif_psrc, (struct sockaddr *)&mask4, sc->gif_pdst, (struct sockaddr *)&mask4, - (const struct protosw *)&in_gif_protosw, sc); + &in_gif_encapsw, sc); #else sc->encap_cookie4 = encap_attach_func(AF_INET, -1, gif_encapcheck, - &in_gif_protosw, sc); + &in_gif_encapsw, sc); #endif if (sc->encap_cookie4 == NULL) return EEXIST; Index: src/sys/netinet/ip_encap.c diff -u src/sys/netinet/ip_encap.c:1.50 src/sys/netinet/ip_encap.c:1.51 --- src/sys/netinet/ip_encap.c:1.50 Fri Jan 22 23:27:12 2016 +++ src/sys/netinet/ip_encap.c Tue Jan 26 05:58:05 2016 @@ -1,4 +1,4 @@ -/* $NetBSD: ip_encap.c,v 1.50 2016/01/22 23:27:12 riastradh Exp $ */ +/* $NetBSD: ip_encap.c,v 1.51 2016/01/26 05:58:05 knakahara Exp $ */ /* $KAME: ip_encap.c,v 1.73 2001/10/02 08:30:58 itojun Exp $ */ /* @@ -67,7 +67,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: ip_encap.c,v 1.50 2016/01/22 23:27:12 riastradh Exp $"); +__KERNEL_RCSID(0, "$NetBSD: ip_encap.c,v 1.51 2016/01/26 05:58:05 knakahara Exp $"); #ifdef _KERNEL_OPT #include "opt_mrouting.h" @@ -80,7 +80,6 @@ __KERNEL_RCSID(0, "$NetBSD: ip_encap.c,v #include <sys/sockio.h> #include <sys/mbuf.h> #include <sys/errno.h> -#include <sys/protosw.h> #include <sys/queue.h> #include <sys/kmem.h> @@ -99,7 +98,7 @@ __KERNEL_RCSID(0, "$NetBSD: ip_encap.c,v #ifdef INET6 #include <netinet/ip6.h> #include <netinet6/ip6_var.h> -#include <netinet6/ip6protosw.h> +#include <netinet6/ip6protosw.h> /* for struct ip6ctlparam */ #include <netinet6/in6_var.h> #include <netinet6/in6_pcb.h> #include <netinet/icmp6.h> @@ -240,7 +239,7 @@ encap4_input(struct mbuf *m, ...) { int off, proto; va_list ap; - const struct protosw *psw; + const struct encapsw *esw; struct encaptab *match; va_start(ap, m); @@ -252,10 +251,10 @@ encap4_input(struct mbuf *m, ...) if (match) { /* found a match, "match" has the best one */ - psw = match->psw; - if (psw && psw->pr_input) { + esw = match->esw; + if (esw && esw->encapsw4.pr_input) { encap_fillarg(m, match); - (*psw->pr_input)(m, off, proto); + (*esw->encapsw4.pr_input)(m, off, proto); } else m_freem(m); return; @@ -329,17 +328,17 @@ int encap6_input(struct mbuf **mp, int *offp, int proto) { struct mbuf *m = *mp; - const struct ip6protosw *psw; + const struct encapsw *esw; struct encaptab *match; match = encap6_lookup(m, *offp, proto, INBOUND); if (match) { /* found a match */ - psw = (const struct ip6protosw *)match->psw; - if (psw && psw->pr_input) { + esw = match->esw; + if (esw && esw->encapsw6.pr_input) { encap_fillarg(m, match); - return (*psw->pr_input)(mp, offp, proto); + return (*esw->encapsw6.pr_input)(mp, offp, proto); } else { m_freem(m); return IPPROTO_DONE; @@ -431,7 +430,7 @@ const struct encaptab * encap_attach(int af, int proto, const struct sockaddr *sp, const struct sockaddr *sm, const struct sockaddr *dp, const struct sockaddr *dm, - const struct protosw *psw, void *arg) + const struct encapsw *esw, void *arg) { struct encaptab *ep; int error; @@ -534,7 +533,7 @@ encap_attach(int af, int proto, memcpy(ep->srcmask, sm, sp->sa_len); memcpy(ep->dst, dp, dp->sa_len); memcpy(ep->dstmask, dm, dp->sa_len); - ep->psw = psw; + ep->esw = esw; ep->arg = arg; error = encap_add(ep); @@ -560,7 +559,7 @@ fail: const struct encaptab * encap_attach_func(int af, int proto, int (*func)(struct mbuf *, int, int, void *), - const struct protosw *psw, void *arg) + const struct encapsw *esw, void *arg) { struct encaptab *ep; int error; @@ -587,7 +586,7 @@ encap_attach_func(int af, int proto, ep->af = af; ep->proto = proto; ep->func = func; - ep->psw = psw; + ep->esw = esw; ep->arg = arg; error = encap_add(ep); @@ -616,7 +615,7 @@ encap6_ctlinput(int cmd, const struct so struct ip6ctlparam *ip6cp = NULL; int nxt; struct encaptab *ep; - const struct ip6protosw *psw; + const struct encapsw *esw; if (sa->sa_family != AF_INET6 || sa->sa_len != sizeof(struct sockaddr_in6)) @@ -675,9 +674,10 @@ encap6_ctlinput(int cmd, const struct so /* should optimize by looking at address pairs */ /* XXX need to pass ep->arg or ep itself to listeners */ - psw = (const struct ip6protosw *)ep->psw; - if (psw && psw->pr_ctlinput) - (*psw->pr_ctlinput)(cmd, sa, d); + esw = ep->esw; + if (esw && esw->encapsw6.pr_ctlinput) { + (*esw->encapsw6.pr_ctlinput)(cmd, sa, d); + } } rip6_ctlinput(cmd, sa, d0); Index: src/sys/netinet/ip_encap.h diff -u src/sys/netinet/ip_encap.h:1.15 src/sys/netinet/ip_encap.h:1.16 --- src/sys/netinet/ip_encap.h:1.15 Fri Jan 22 23:27:12 2016 +++ src/sys/netinet/ip_encap.h Tue Jan 26 05:58:05 2016 @@ -1,4 +1,4 @@ -/* $NetBSD: ip_encap.h,v 1.15 2016/01/22 23:27:12 riastradh Exp $ */ +/* $NetBSD: ip_encap.h,v 1.16 2016/01/26 05:58:05 knakahara Exp $ */ /* $KAME: ip_encap.h,v 1.7 2000/03/25 07:23:37 sumikawa Exp $ */ /* @@ -39,6 +39,26 @@ #include <net/radix.h> #endif +struct encapsw { + union { + struct encapsw4 { + void (*pr_input) /* input to protocol (from below) */ + (struct mbuf *, ...); + void *(*pr_ctlinput) /* control input (from below) */ + (int, const struct sockaddr *, void *); + } _encapsw4; + struct encapsw6 { + int (*pr_input) /* input to protocol (from below) */ + (struct mbuf **, int *, int); + void *(*pr_ctlinput) /* control input (from below) */ + (int, const struct sockaddr *, void *); + } _encapsw6; + } encapsw46; +}; + +#define encapsw4 encapsw46._encapsw4 +#define encapsw6 encapsw46._encapsw6 + struct encaptab { struct radix_node nodes[2]; LIST_ENTRY(encaptab) chain; @@ -51,7 +71,7 @@ struct encaptab { struct sockaddr *dst; /* remote addr */ struct sockaddr *dstmask; int (*func) (struct mbuf *, int, int, void *); - const struct protosw *psw; /* only pr_input will be used */ + const struct encapsw *esw; void *arg; /* passed via PACKET_TAG_ENCAP */ }; @@ -78,10 +98,10 @@ void encap4_input(struct mbuf *, ...); int encap6_input(struct mbuf **, int *, int); const struct encaptab *encap_attach(int, int, const struct sockaddr *, const struct sockaddr *, const struct sockaddr *, - const struct sockaddr *, const struct protosw *, void *); + const struct sockaddr *, const struct encapsw *, void *); const struct encaptab *encap_attach_func(int, int, int (*)(struct mbuf *, int, int, void *), - const struct protosw *, void *); + const struct encapsw *, void *); void *encap6_ctlinput(int, const struct sockaddr *, void *); int encap_detach(const struct encaptab *); void *encap_getarg(struct mbuf *); Index: src/sys/netinet/ip_mroute.c diff -u src/sys/netinet/ip_mroute.c:1.136 src/sys/netinet/ip_mroute.c:1.137 --- src/sys/netinet/ip_mroute.c:1.136 Fri Jan 22 23:27:12 2016 +++ src/sys/netinet/ip_mroute.c Tue Jan 26 05:58:05 2016 @@ -1,4 +1,4 @@ -/* $NetBSD: ip_mroute.c,v 1.136 2016/01/22 23:27:12 riastradh Exp $ */ +/* $NetBSD: ip_mroute.c,v 1.137 2016/01/26 05:58:05 knakahara Exp $ */ /* * Copyright (c) 1992, 1993 @@ -93,7 +93,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: ip_mroute.c,v 1.136 2016/01/22 23:27:12 riastradh Exp $"); +__KERNEL_RCSID(0, "$NetBSD: ip_mroute.c,v 1.137 2016/01/26 05:58:05 knakahara Exp $"); #ifdef _KERNEL_OPT #include "opt_inet.h" @@ -193,14 +193,11 @@ extern int rsvp_on; static void vif_input(struct mbuf *, ...); static int vif_encapcheck(struct mbuf *, int, int, void *); -static const struct protosw vif_protosw = { - .pr_type = SOCK_RAW, - .pr_domain = &inetdomain, - .pr_protocol = IPPROTO_IPV4, - .pr_flags = PR_ATOMIC|PR_ADDR, - .pr_input = vif_input, - .pr_ctloutput = rip_ctloutput, - .pr_usrreqs = &rip_usrreqs, +static const struct encapsw vif_encapsw = { + .encapsw4 = { + .pr_input = vif_input, + .pr_ctlinput = NULL, + } }; #define EXPIRE_TIMEOUT (hz / 4) /* 4x / second */ @@ -837,7 +834,7 @@ add_vif(struct vifctl *vifcp) * function to check, and this is not supported yet. */ vifp->v_encap_cookie = encap_attach_func(AF_INET, IPPROTO_IPV4, - vif_encapcheck, &vif_protosw, vifp); + vif_encapcheck, &vif_encapsw, vifp); if (!vifp->v_encap_cookie) return (EINVAL); Index: src/sys/netinet6/in6_gif.c diff -u src/sys/netinet6/in6_gif.c:1.70 src/sys/netinet6/in6_gif.c:1.71 --- src/sys/netinet6/in6_gif.c:1.70 Sat Jan 23 14:48:55 2016 +++ src/sys/netinet6/in6_gif.c Tue Jan 26 05:58:05 2016 @@ -1,4 +1,4 @@ -/* $NetBSD: in6_gif.c,v 1.70 2016/01/23 14:48:55 riastradh Exp $ */ +/* $NetBSD: in6_gif.c,v 1.71 2016/01/26 05:58:05 knakahara Exp $ */ /* $KAME: in6_gif.c,v 1.62 2001/07/29 04:27:25 itojun Exp $ */ /* @@ -31,7 +31,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: in6_gif.c,v 1.70 2016/01/23 14:48:55 riastradh Exp $"); +__KERNEL_RCSID(0, "$NetBSD: in6_gif.c,v 1.71 2016/01/26 05:58:05 knakahara Exp $"); #ifdef _KERNEL_OPT #include "opt_inet.h" @@ -46,7 +46,6 @@ __KERNEL_RCSID(0, "$NetBSD: in6_gif.c,v #include <sys/ioctl.h> #include <sys/queue.h> #include <sys/syslog.h> -#include <sys/protosw.h> #include <sys/kernel.h> #include <net/if.h> @@ -65,7 +64,7 @@ __KERNEL_RCSID(0, "$NetBSD: in6_gif.c,v #include <netinet6/in6_gif.h> #include <netinet6/in6_var.h> #endif -#include <netinet6/ip6protosw.h> +#include <netinet6/ip6protosw.h> /* for struct ip6ctlparam */ #include <netinet/ip_ecn.h> #include <net/if_gif.h> @@ -79,7 +78,7 @@ int ip6_gif_hlim = GIF_HLIM; extern LIST_HEAD(, gif_softc) gif_softc_list; -static const struct ip6protosw in6_gif_protosw; +static const struct encapsw in6_gif_encapsw; /* * family - family of the packet to be encapsulate. @@ -374,10 +373,10 @@ in6_gif_attach(struct gif_softc *sc) return EINVAL; sc->encap_cookie6 = encap_attach(AF_INET6, -1, sc->gif_psrc, (struct sockaddr *)&mask6, sc->gif_pdst, (struct sockaddr *)&mask6, - (const void *)&in6_gif_protosw, sc); + (const void *)&in6_gif_encapsw, sc); #else sc->encap_cookie6 = encap_attach_func(AF_INET6, -1, gif_encapcheck, - (struct protosw *)&in6_gif_protosw, sc); + &in6_gif_encapsw, sc); #endif if (sc->encap_cookie6 == NULL) return EEXIST; @@ -451,20 +450,11 @@ in6_gif_ctlinput(int cmd, const struct s } PR_WRAP_CTLINPUT(in6_gif_ctlinput) -PR_WRAP_CTLOUTPUT(rip6_ctloutput) - #define in6_gif_ctlinput in6_gif_ctlinput_wrapper -#define rip6_ctloutput rip6_ctloutput_wrapper - -extern struct domain inet6domain; -static const struct ip6protosw in6_gif_protosw = { - .pr_type = SOCK_RAW, - .pr_domain = &inet6domain, - .pr_protocol = 0 /* IPPROTO_IPV[46] */, - .pr_flags = PR_ATOMIC | PR_ADDR, - .pr_input = in6_gif_input, - .pr_ctlinput = in6_gif_ctlinput, - .pr_ctloutput = rip6_ctloutput, - .pr_usrreqs = &rip6_usrreqs, +static const struct encapsw in6_gif_encapsw = { + .encapsw6 = { + .pr_input = in6_gif_input, + .pr_ctlinput = in6_gif_ctlinput, + } }; Index: src/sys/netipsec/xform_ipip.c diff -u src/sys/netipsec/xform_ipip.c:1.35 src/sys/netipsec/xform_ipip.c:1.36 --- src/sys/netipsec/xform_ipip.c:1.35 Fri Jan 22 23:27:12 2016 +++ src/sys/netipsec/xform_ipip.c Tue Jan 26 05:58:06 2016 @@ -1,4 +1,4 @@ -/* $NetBSD: xform_ipip.c,v 1.35 2016/01/22 23:27:12 riastradh Exp $ */ +/* $NetBSD: xform_ipip.c,v 1.36 2016/01/26 05:58:06 knakahara Exp $ */ /* $FreeBSD: src/sys/netipsec/xform_ipip.c,v 1.3.2.1 2003/01/24 05:11:36 sam Exp $ */ /* $OpenBSD: ip_ipip.c,v 1.25 2002/06/10 18:04:55 itojun Exp $ */ @@ -39,7 +39,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: xform_ipip.c,v 1.35 2016/01/22 23:27:12 riastradh Exp $"); +__KERNEL_RCSID(0, "$NetBSD: xform_ipip.c,v 1.36 2016/01/26 05:58:06 knakahara Exp $"); /* * IP-inside-IP processing @@ -682,43 +682,19 @@ static struct xformsw ipe4_xformsw = { }; #ifdef INET -PR_WRAP_CTLOUTPUT(rip_ctloutput) -#define rip_ctloutput rip_ctloutput_wrapper - -extern struct domain inetdomain; -static struct ipprotosw ipe4_protosw = { - .pr_type = SOCK_RAW, - .pr_domain = &inetdomain, - .pr_protocol = IPPROTO_IPV4, - .pr_flags = PR_ATOMIC|PR_ADDR|PR_LASTHDR, - .pr_input = ip4_input, - .pr_ctlinput = 0, - .pr_ctloutput = rip_ctloutput, - .pr_usrreqs = &rip_usrreqs, - .pr_init = 0, - .pr_fasttimo = 0, - .pr_slowtimo = 0, - .pr_drain = 0, +static struct encapsw ipe4_encapsw = { + .encapsw4 = { + .pr_input = ip4_input, + .pr_ctlinput = NULL, + } }; #endif #ifdef INET6 -PR_WRAP_CTLOUTPUT(rip6_ctloutput) -#define rip6_ctloutput rip6_ctloutput_wrapper - -extern struct domain inet6domain; -static struct ip6protosw ipe4_protosw6 = { - .pr_type = SOCK_RAW, - .pr_domain = &inet6domain, - .pr_protocol = IPPROTO_IPV6, - .pr_flags = PR_ATOMIC|PR_ADDR|PR_LASTHDR, - .pr_input = ip4_input6, - .pr_ctlinput = 0, - .pr_ctloutput = rip6_ctloutput, - .pr_usrreqs = &rip6_usrreqs, - .pr_init = 0, - .pr_fasttimo = 0, - .pr_slowtimo = 0, - .pr_drain = 0, +static struct encapsw ipe4_encapsw6 = { + .encapsw6 = { + .pr_input = ip4_input6, + .pr_ctlinput = NULL, + } }; #endif @@ -752,11 +728,11 @@ ipe4_attach(void) /* XXX save return cookie for detach on module remove */ #ifdef INET (void) encap_attach_func(AF_INET, -1, - ipe4_encapcheck, (struct protosw*) &ipe4_protosw, NULL); + ipe4_encapcheck, &ipe4_encapsw, NULL); #endif #ifdef INET6 (void) encap_attach_func(AF_INET6, -1, - ipe4_encapcheck, (struct protosw*) &ipe4_protosw6, NULL); + ipe4_encapcheck, &ipe4_encapsw6, NULL); #endif }