svn commit: r192191 - in projects/pnet/sys: net netatalk netinet netinet6 netipsec netipx netnatm

Robert Watson rwatson at FreeBSD.org
Sat May 16 06:57:26 UTC 2009


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);


More information about the svn-src-projects mailing list