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