Date: Sat, 16 May 2009 06:57:25 +0000 (UTC) From: Robert Watson <rwatson@FreeBSD.org> To: src-committers@freebsd.org, svn-src-projects@freebsd.org Subject: svn commit: r192191 - in projects/pnet/sys: net netatalk netinet netinet6 netipsec netipx netnatm Message-ID: <200905160657.n4G6vPWV047569@svn.freebsd.org>
next in thread | raw e-mail | index | archive | help
Author: rwatson Date: Sat May 16 06:57:24 2009 New Revision: 192191 URL: http://svn.freebsd.org/changeset/base/192191 Log: Allow netisr2 to be used wherever netisr is used, subject to options NETISR2. In most cases, rely on existing ifnet ordering, or driver- provided flow IDs, but for IP divert sockets use the sending socket, and IPSEC use the security association for ordering. No custom protocol handlers are registered. Modified: projects/pnet/sys/net/rtsock.c projects/pnet/sys/netatalk/ddp_usrreq.c projects/pnet/sys/netinet/if_ether.c projects/pnet/sys/netinet/igmp.c projects/pnet/sys/netinet/ip_divert.c projects/pnet/sys/netinet/ip_input.c projects/pnet/sys/netinet6/ip6_input.c projects/pnet/sys/netinet6/ip6_output.c projects/pnet/sys/netipsec/ipsec_input.c projects/pnet/sys/netipx/ipx_input.c projects/pnet/sys/netnatm/natm_proto.c Modified: projects/pnet/sys/net/rtsock.c ============================================================================== --- projects/pnet/sys/net/rtsock.c Sat May 16 06:49:05 2009 (r192190) +++ projects/pnet/sys/net/rtsock.c Sat May 16 06:57:24 2009 (r192191) @@ -34,6 +34,7 @@ #include "opt_route.h" #include "opt_inet.h" #include "opt_inet6.h" +#include "opt_netisr.h" #include <sys/param.h> #include <sys/domain.h> @@ -57,6 +58,7 @@ #include <net/if_dl.h> #include <net/if_llatbl.h> #include <net/netisr.h> +#include <net/netisr2.h> #include <net/raw_cb.h> #include <net/route.h> #include <net/vnet.h> @@ -128,7 +130,12 @@ rts_init(void) if (TUNABLE_INT_FETCH("net.route.netisr_maxqlen", &tmp)) rtsintrq.ifq_maxlen = tmp; mtx_init(&rtsintrq.ifq_mtx, "rts_inq", NULL, MTX_DEF); +#ifdef NETISR2 + netisr2_register(NETISR_ROUTE, "route", rts_input, NULL, NULL, + rtsintrq.ifq_maxlen); +#else netisr_register(NETISR_ROUTE, rts_input, &rtsintrq, 0); +#endif } SYSINIT(rtsock, SI_SUB_PROTO_DOMAIN, SI_ORDER_THIRD, rts_init, 0); @@ -1224,7 +1231,11 @@ rt_dispatch(struct mbuf *m, const struct *(unsigned short *)(tag + 1) = sa->sa_family; m_tag_prepend(m, tag); } +#ifdef NETISR2 + netisr2_queue(NETISR_ROUTE, 0, m); /* mbuf is free'd on failure. */ +#else netisr_queue(NETISR_ROUTE, m); /* mbuf is free'd on failure. */ +#endif } /* Modified: projects/pnet/sys/netatalk/ddp_usrreq.c ============================================================================== --- projects/pnet/sys/netatalk/ddp_usrreq.c Sat May 16 06:49:05 2009 (r192190) +++ projects/pnet/sys/netatalk/ddp_usrreq.c Sat May 16 06:57:24 2009 (r192191) @@ -50,6 +50,8 @@ * $FreeBSD$ */ +#include "opt_netisr.h" + #include <sys/param.h> #include <sys/systm.h> #include <sys/malloc.h> @@ -60,6 +62,7 @@ #include <net/if.h> #include <net/route.h> #include <net/netisr.h> +#include <net/netisr2.h> #include <netatalk/at.h> #include <netatalk/at_var.h> @@ -263,9 +266,18 @@ ddp_init(void) mtx_init(&atintrq2.ifq_mtx, "at2_inq", NULL, MTX_DEF); mtx_init(&aarpintrq.ifq_mtx, "aarp_inq", NULL, MTX_DEF); DDP_LIST_LOCK_INIT(); +#ifdef NETISR2 + netisr2_register(NETISR_ATALK1, "atalk1", at1intr, NULL, NULL, + IFQ_MAXLEN); + netisr2_register(NETISR_ATALK2, "atalk2", at2intr, NULL, NULL, + IFQ_MAXLEN); + netisr2_register(NETISR_AARP, "aarp", aarpintr, NULL, NULL, + IFQ_MAXLEN); +#else netisr_register(NETISR_ATALK1, at1intr, &atintrq1, 0); netisr_register(NETISR_ATALK2, at2intr, &atintrq2, 0); netisr_register(NETISR_AARP, aarpintr, &aarpintrq, 0); +#endif } #if 0 Modified: projects/pnet/sys/netinet/if_ether.c ============================================================================== --- projects/pnet/sys/netinet/if_ether.c Sat May 16 06:49:05 2009 (r192190) +++ projects/pnet/sys/netinet/if_ether.c Sat May 16 06:57:24 2009 (r192191) @@ -41,6 +41,7 @@ __FBSDID("$FreeBSD$"); #include "opt_inet.h" #include "opt_route.h" #include "opt_mac.h" +#include "opt_netisr.h" #include "opt_carp.h" #include <sys/param.h> @@ -60,6 +61,7 @@ __FBSDID("$FreeBSD$"); #include <net/if_types.h> #include <net/route.h> #include <net/netisr.h> +#include <net/netisr2.h> #include <net/if_llc.h> #include <net/ethernet.h> #include <net/vnet.h> @@ -823,6 +825,10 @@ arp_init(void) arpintrq.ifq_maxlen = 50; mtx_init(&arpintrq.ifq_mtx, "arp_inq", NULL, MTX_DEF); +#ifdef NETISR2 + netisr2_register(NETISR_ARP, "arp", arpintr, NULL, NULL, 50); +#else netisr_register(NETISR_ARP, arpintr, &arpintrq, 0); +#endif } SYSINIT(arp, SI_SUB_PROTO_DOMAIN, SI_ORDER_ANY, arp_init, 0); Modified: projects/pnet/sys/netinet/igmp.c ============================================================================== --- projects/pnet/sys/netinet/igmp.c Sat May 16 06:49:05 2009 (r192190) +++ projects/pnet/sys/netinet/igmp.c Sat May 16 06:57:24 2009 (r192191) @@ -51,6 +51,7 @@ __FBSDID("$FreeBSD$"); #include "opt_mac.h" +#include "opt_netisr.h" #include "opt_route.h" #include <sys/param.h> @@ -68,6 +69,7 @@ __FBSDID("$FreeBSD$"); #include <net/if.h> #include <net/netisr.h> +#include <net/netisr2.h> #include <net/route.h> #include <net/vnet.h> @@ -3548,7 +3550,12 @@ igmp_sysinit(void) m_raopt = igmp_ra_alloc(); +#ifdef NETISR2 + netisr2_register(NETISR_IGMP, "igmp", igmp_intr, NULL, NULL, + IFQ_MAXLEN); +#else netisr_register(NETISR_IGMP, igmp_intr, &igmpoq, 0); +#endif } static void @@ -3557,7 +3564,11 @@ igmp_sysuninit(void) CTR1(KTR_IGMPV3, "%s: tearing down", __func__); +#ifdef NETISR2 + netisr2_unregister(NETISR_IGMP); +#else netisr_unregister(NETISR_IGMP); +#endif mtx_destroy(&igmpoq.ifq_mtx); m_free(m_raopt); Modified: projects/pnet/sys/netinet/ip_divert.c ============================================================================== --- projects/pnet/sys/netinet/ip_divert.c Sat May 16 06:49:05 2009 (r192190) +++ projects/pnet/sys/netinet/ip_divert.c Sat May 16 06:57:24 2009 (r192191) @@ -42,6 +42,7 @@ __FBSDID("$FreeBSD$"); #error "IPDIVERT requires IPFIREWALL" #endif #endif +#include "opt_netisr.h" #include <sys/param.h> #include <sys/kernel.h> @@ -66,6 +67,7 @@ __FBSDID("$FreeBSD$"); #include <net/if.h> #include <net/netisr.h> +#include <net/netisr2.h> #include <net/route.h> #include <netinet/in.h> @@ -468,7 +470,11 @@ div_output(struct socket *so, struct mbu SOCK_UNLOCK(so); #endif /* Send packet to input processing via netisr */ +#ifdef NETISR2 + netisr2_queue(NETISR_IP, (uintptr_t)so, m); +#else netisr_queue(NETISR_IP, m); +#endif } return error; Modified: projects/pnet/sys/netinet/ip_input.c ============================================================================== --- projects/pnet/sys/netinet/ip_input.c Sat May 16 06:49:05 2009 (r192190) +++ projects/pnet/sys/netinet/ip_input.c Sat May 16 06:57:24 2009 (r192191) @@ -38,6 +38,7 @@ __FBSDID("$FreeBSD$"); #include "opt_ipsec.h" #include "opt_route.h" #include "opt_mac.h" +#include "opt_netisr.h" #include "opt_carp.h" #include <sys/param.h> @@ -63,6 +64,7 @@ __FBSDID("$FreeBSD$"); #include <net/if_dl.h> #include <net/route.h> #include <net/netisr.h> +#include <net/netisr2.h> #include <net/vnet.h> #include <net/flowtable.h> @@ -348,7 +350,11 @@ ip_init(void) IPQ_LOCK_INIT(); ipintrq.ifq_maxlen = ipqmaxlen; mtx_init(&ipintrq.ifq_mtx, "ip_inq", NULL, MTX_DEF); +#ifdef NETISR2 + netisr2_register(NETISR_IP, "ipv4", ip_input, NULL, NULL, ipqmaxlen); +#else netisr_register(NETISR_IP, ip_input, &ipintrq, 0); +#endif ip_ft = flowtable_alloc(ip_output_flowtable_size, FL_PCPU); } Modified: projects/pnet/sys/netinet6/ip6_input.c ============================================================================== --- projects/pnet/sys/netinet6/ip6_input.c Sat May 16 06:49:05 2009 (r192190) +++ projects/pnet/sys/netinet6/ip6_input.c Sat May 16 06:57:24 2009 (r192191) @@ -66,6 +66,7 @@ __FBSDID("$FreeBSD$"); #include "opt_inet.h" #include "opt_inet6.h" #include "opt_ipsec.h" +#include "opt_netisr.h" #include "opt_route.h" #include <sys/param.h> @@ -88,6 +89,7 @@ __FBSDID("$FreeBSD$"); #include <net/if_dl.h> #include <net/route.h> #include <net/netisr.h> +#include <net/netisr2.h> #include <net/pfil.h> #include <net/vnet.h> @@ -297,7 +299,12 @@ ip6_init(void) ip6intrq.ifq_maxlen = V_ip6qmaxlen; /* XXX */ mtx_init(&ip6intrq.ifq_mtx, "ip6_inq", NULL, MTX_DEF); +#ifdef NETISR2 + netisr2_register(NETISR_IPV6, "ipv4", ip6_input, NULL, NULL, + V_ip6qmaxlen); +#else netisr_register(NETISR_IPV6, ip6_input, &ip6intrq, 0); +#endif } static int Modified: projects/pnet/sys/netinet6/ip6_output.c ============================================================================== Modified: projects/pnet/sys/netipsec/ipsec_input.c ============================================================================== --- projects/pnet/sys/netipsec/ipsec_input.c Sat May 16 06:49:05 2009 (r192190) +++ projects/pnet/sys/netipsec/ipsec_input.c Sat May 16 06:57:24 2009 (r192191) @@ -44,6 +44,7 @@ #include "opt_inet6.h" #include "opt_ipsec.h" #include "opt_enc.h" +#include "opt_netisr.h" #include <sys/param.h> #include <sys/systm.h> @@ -60,6 +61,7 @@ #include <net/pfil.h> #include <net/route.h> #include <net/netisr.h> +#include <net/netisr2.h> #include <netinet/in.h> #include <netinet/in_systm.h> @@ -481,7 +483,15 @@ ipsec4_common_input_cb(struct mbuf *m, s /* * Re-dispatch via software interrupt. */ +#ifdef NETISR2 + /* + * XXXRW: Is this ordering sufficient? Perhaps should be + * m->m_pkthdr.rcvif? + */ + if ((error = netisr2_queue(NETISR_IP, (uintptr_t)sav, m))) { +#else if ((error = netisr_queue(NETISR_IP, m))) { +#endif IPSEC_ISTAT(sproto, V_espstat.esps_qfull, V_ahstat.ahs_qfull, V_ipcompstat.ipcomps_qfull); Modified: projects/pnet/sys/netipx/ipx_input.c ============================================================================== --- projects/pnet/sys/netipx/ipx_input.c Sat May 16 06:49:05 2009 (r192190) +++ projects/pnet/sys/netipx/ipx_input.c Sat May 16 06:57:24 2009 (r192191) @@ -62,6 +62,8 @@ * @(#)ipx_input.c */ +#include "opt_netisr.h" + #include <sys/cdefs.h> __FBSDID("$FreeBSD$"); @@ -77,6 +79,7 @@ __FBSDID("$FreeBSD$"); #include <net/if.h> #include <net/route.h> #include <net/netisr.h> +#include <net/netisr2.h> #include <netipx/ipx.h> #include <netipx/spx.h> @@ -153,7 +156,11 @@ ipx_init(void) ipxintrq.ifq_maxlen = ipxqmaxlen; mtx_init(&ipxintrq.ifq_mtx, "ipx_inq", NULL, MTX_DEF); +#ifdef NETISR2 + netisr2_register(NETISR_IPX, "ipx", ipxintr, NULL, NULL, ipxqmaxlen); +#else netisr_register(NETISR_IPX, ipxintr, &ipxintrq, 0); +#endif } /* Modified: projects/pnet/sys/netnatm/natm_proto.c ============================================================================== --- projects/pnet/sys/netnatm/natm_proto.c Sat May 16 06:49:05 2009 (r192190) +++ projects/pnet/sys/netnatm/natm_proto.c Sat May 16 06:57:24 2009 (r192191) @@ -35,6 +35,8 @@ * protocol layer for access to native mode ATM */ +#include "opt_netisr.h" + #include <sys/cdefs.h> __FBSDID("$FreeBSD$"); @@ -47,6 +49,7 @@ __FBSDID("$FreeBSD$"); #include <net/if.h> #include <net/netisr.h> +#include <net/netisr2.h> #include <netinet/in.h> @@ -105,7 +108,12 @@ natm_init(void) natmintrq.ifq_maxlen = natmqmaxlen; NATM_LOCK_INIT(); mtx_init(&natmintrq.ifq_mtx, "natm_inq", NULL, MTX_DEF); +#ifdef NETISR2 + netisr2_register(NETISR_NATM, "natm", natmintr, NULL, NULL, + natmqmaxlen); +#else netisr_register(NETISR_NATM, natmintr, &natmintrq, 0); +#endif } DOMAIN_SET(natm);
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200905160657.n4G6vPWV047569>