Skip site navigation (1)Skip section navigation (2)
Date:      Mon, 18 May 2009 17:10:26 +0000 (UTC)
From:      Robert Watson <rwatson@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-projects@freebsd.org
Subject:   svn commit: r192310 - in projects/pnet/sys: net netatalk netinet netinet6 netipx netnatm
Message-ID:  <200905181710.n4IHAR63068296@svn.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: rwatson
Date: Mon May 18 17:10:26 2009
New Revision: 192310
URL: http://svn.freebsd.org/changeset/base/192310

Log:
  Update netisr2 consumers for new netisr2 interfaces -- queue limits,
  stats, and struct netisr_handler registration.

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/netipx/ipx_input.c
  projects/pnet/sys/netnatm/natm_proto.c

Modified: projects/pnet/sys/net/rtsock.c
==============================================================================
--- projects/pnet/sys/net/rtsock.c	Mon May 18 17:08:57 2009	(r192309)
+++ projects/pnet/sys/net/rtsock.c	Mon May 18 17:10:26 2009	(r192310)
@@ -92,11 +92,13 @@ MTX_SYSINIT(rtsock, &rtsock_mtx, "rtsock
 #define	RTSOCK_UNLOCK()	mtx_unlock(&rtsock_mtx)
 #define	RTSOCK_LOCK_ASSERT()	mtx_assert(&rtsock_mtx, MA_OWNED)
 
-static struct	ifqueue rtsintrq;
-
 SYSCTL_NODE(_net, OID_AUTO, route, CTLFLAG_RD, 0, "");
+
+#ifndef NETISR2
+static struct	ifqueue rtsintrq;
 SYSCTL_INT(_net_route, OID_AUTO, netisr_maxqlen, CTLFLAG_RW,
     &rtsintrq.ifq_maxlen, 0, "maximum routing socket dispatch queue length");
+#endif
 
 struct walkarg {
 	int	w_tmemsize;
@@ -121,19 +123,47 @@ static void	rt_getmetrics(const struct r
 			struct rt_metrics *out);
 static void	rt_dispatch(struct mbuf *, const struct sockaddr *);
 
+#ifdef NETISR2
+static struct netisr_handler rtsock_nh = {
+	.nh_name = "rtsock",
+	.nh_handler = rts_input,
+	.nh_proto = NETISR_ROUTE,
+	.nh_qlimit = 256,
+	.nh_policy = NETISR_POLICY_SOURCE,
+};
+
+static int
+sysctl_route_netisr_maxqlen(SYSCTL_HANDLER_ARGS)
+{
+	int error, qlimit;
+
+	netisr2_getqlimit(&rtsock_nh, &qlimit);
+	error = sysctl_handle_int(oidp, &qlimit, 0, req);
+        if (error || !req->newptr)
+                return (error);
+	if (qlimit < 1)
+		return (EINVAL);
+	return (netisr2_setqlimit(&rtsock_nh, qlimit));
+}
+SYSCTL_PROC(_net_route, OID_AUTO, netisr_maxqlen, CTLTYPE_INT|CTLFLAG_RW,
+    0, 0, sysctl_route_netisr_maxqlen, "I",
+    "maximum routing socket dispatch queue length");
+#endif
+
 static void
 rts_init(void)
 {
 	int tmp;
 
+#ifdef NETISR2
+	if (TUNABLE_INT_FETCH("net.route.netisr_maxqlen", &tmp))
+		rtsock_nh.nh_qlimit = tmp;
+	netisr2_register(&rtsock_nh);
+#else
+	mtx_init(&rtsintrq.ifq_mtx, "rts_inq", NULL, MTX_DEF);
 	rtsintrq.ifq_maxlen = 256;
 	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
 }
@@ -1231,11 +1261,7 @@ 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	Mon May 18 17:08:57 2009	(r192309)
+++ projects/pnet/sys/netatalk/ddp_usrreq.c	Mon May 18 17:10:26 2009	(r192310)
@@ -1,5 +1,5 @@
 /*-
- * Copyright (c) 2004-2005 Robert N. M. Watson
+ * Copyright (c) 2004-2009 Robert N. M. Watson
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -73,7 +73,34 @@
 static u_long	ddp_sendspace = DDP_MAXSZ; /* Max ddp size + 1 (ddp_type) */
 static u_long	ddp_recvspace = 10 * (587 + sizeof(struct sockaddr_at));
 
+#ifdef NETISR2
+static const struct netisr_handler atalk1_nh = {
+	.nh_name = "atalk1",
+	.nh_handler = at1intr,
+	.nh_proto = NETISR_ATALK1,
+	.nh_qlimit = IFQ_MAXLEN,
+	.nh_policy = NETISR_POLICY_SOURCE,
+};
+
+static const struct netisr_handler atalk2_nh = {
+	.nh_name = "atalk2",
+	.nh_handler = at2intr,
+	.nh_proto = NETISR_ATALK2,
+	.nh_qlimit = IFQ_MAXLEN,
+	.nh_policy = NETISR_POLICY_SOURCE,
+};
+
+static const struct netisr_handler aarp_nh = {
+	.nh_name = "aarp",
+	.nh_handler = aarpintr,
+	.nh_proto = NETISR_AARP,
+	.nh_qlimit = IFQ_MAXLEN,
+	.nh_policy = NETISR_POLICY_SOURCE,
+};
+#else
 static struct ifqueue atintrq1, atintrq2, aarpintrq;
+#endif
+
 
 static int
 ddp_attach(struct socket *so, int proto, struct thread *td)
@@ -259,21 +286,18 @@ void 
 ddp_init(void)
 {
 
+	DDP_LIST_LOCK_INIT();
+#ifdef NETISR2
+	netisr2_register(&atalk1_nh);
+	netisr2_register(&atalk2_nh);
+	netisr2_register(&aarp_nh);
+#else
 	atintrq1.ifq_maxlen = IFQ_MAXLEN;
 	atintrq2.ifq_maxlen = IFQ_MAXLEN;
 	aarpintrq.ifq_maxlen = IFQ_MAXLEN;
 	mtx_init(&atintrq1.ifq_mtx, "at1_inq", NULL, MTX_DEF);
 	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);

Modified: projects/pnet/sys/netinet/if_ether.c
==============================================================================
--- projects/pnet/sys/netinet/if_ether.c	Mon May 18 17:08:57 2009	(r192309)
+++ projects/pnet/sys/netinet/if_ether.c	Mon May 18 17:10:26 2009	(r192310)
@@ -98,8 +98,6 @@ static int	arp_proxyall;
 SYSCTL_V_INT(V_NET, vnet_inet, _net_link_ether_inet, OID_AUTO, max_age,
     CTLFLAG_RW, arpt_keep, 0, "ARP entry lifetime in seconds");
 
-static struct	ifqueue arpintrq;
-
 SYSCTL_V_INT(V_NET, vnet_inet, _net_link_ether_inet, OID_AUTO, maxtries,
 	CTLFLAG_RW, arp_maxtries, 0,
 	"ARP resolution attempts before returning error");
@@ -120,6 +118,18 @@ static void	arptimer(void *);
 static void	in_arpinput(struct mbuf *);
 #endif
 
+#ifdef NETISR2
+static const struct netisr_handler arp_nh = {
+	.nh_name = "arp",
+	.nh_handler = arpintr,
+	.nh_proto = NETISR_ARP,
+	.nh_qlimit = 50,
+	.nh_policy = NETISR_POLICY_SOURCE,
+};
+#else
+static struct	ifqueue arpintrq;
+#endif
+
 #ifndef VIMAGE_GLOBALS
 static const vnet_modinfo_t vnet_arp_modinfo = {
 	.vmi_id		= VNET_MOD_ARP,
@@ -823,11 +833,11 @@ arp_init(void)
 	arp_iattach(NULL);
 #endif
 
-	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);
+	netisr2_register(&arp_nh);
 #else
+	arpintrq.ifq_maxlen = 50;
+	mtx_init(&arpintrq.ifq_mtx, "arp_inq", NULL, MTX_DEF);
 	netisr_register(NETISR_ARP, arpintr, &arpintrq, 0);
 #endif
 }

Modified: projects/pnet/sys/netinet/igmp.c
==============================================================================
--- projects/pnet/sys/netinet/igmp.c	Mon May 18 17:08:57 2009	(r192309)
+++ projects/pnet/sys/netinet/igmp.c	Mon May 18 17:10:26 2009	(r192310)
@@ -151,6 +151,21 @@ static int	vnet_igmp_iattach(const void 
 static int	vnet_igmp_idetach(const void *);
 #endif /* VIMAGE */
 
+#ifdef NETISR2
+static const struct netisr_handler igmp_nh = {
+	.nh_name = "igmp",
+	.nh_handler = igmp_intr,
+	.nh_proto = NETISR_IGMP,
+	.nh_qlimit = IFQ_MAXLEN,
+	.nh_policy = NETISR_POLICY_SOURCE,
+};
+#else
+/*
+ * Global netisr output queue.
+ */
+struct ifqueue		 igmpoq;
+#endif
+
 /*
  * System-wide globals.
  *
@@ -197,11 +212,6 @@ struct mbuf		*m_raopt;		 /* Router Alert
 MALLOC_DEFINE(M_IGMP, "igmp", "igmp state");
 
 /*
- * Global netisr output queue.
- */
-struct ifqueue		 igmpoq;
-
-/*
  * VIMAGE-wide globals.
  *
  * The IGMPv3 timers themselves need to run per-image, however,
@@ -3545,15 +3555,13 @@ igmp_sysinit(void)
 
 	IGMP_LOCK_INIT();
 
-	mtx_init(&igmpoq.ifq_mtx, "igmpoq_mtx", NULL, MTX_DEF);
-	IFQ_SET_MAXLEN(&igmpoq, IFQ_MAXLEN);
-
 	m_raopt = igmp_ra_alloc();
 
 #ifdef NETISR2
-	netisr2_register(NETISR_IGMP, "igmp", igmp_intr, NULL, NULL,
-	    IFQ_MAXLEN);
+	netisr2_register(&igmp_nh);
 #else
+	mtx_init(&igmpoq.ifq_mtx, "igmpoq_mtx", NULL, MTX_DEF);
+	IFQ_SET_MAXLEN(&igmpoq, IFQ_MAXLEN);
 	netisr_register(NETISR_IGMP, igmp_intr, &igmpoq, 0);
 #endif
 }
@@ -3565,11 +3573,11 @@ igmp_sysuninit(void)
 	CTR1(KTR_IGMPV3, "%s: tearing down", __func__);
 
 #ifdef NETISR2
-	netisr2_unregister(NETISR_IGMP);
+	netisr2_unregister(&igmp_nh);
 #else
 	netisr_unregister(NETISR_IGMP);
-#endif
 	mtx_destroy(&igmpoq.ifq_mtx);
+#endif
 
 	m_free(m_raopt);
 	m_raopt = NULL;

Modified: projects/pnet/sys/netinet/ip_divert.c
==============================================================================
--- projects/pnet/sys/netinet/ip_divert.c	Mon May 18 17:08:57 2009	(r192309)
+++ projects/pnet/sys/netinet/ip_divert.c	Mon May 18 17:10:26 2009	(r192310)
@@ -471,7 +471,7 @@ div_output(struct socket *so, struct mbu
 #endif
 		/* Send packet to input processing via netisr */
 #ifdef NETISR2
-		netisr2_queue(NETISR_IP, (uintptr_t)so, m);
+		netisr2_queue_src(NETISR_IP, (uintptr_t)so, m);
 #else
 		netisr_queue(NETISR_IP, m);
 #endif

Modified: projects/pnet/sys/netinet/ip_input.c
==============================================================================
--- projects/pnet/sys/netinet/ip_input.c	Mon May 18 17:08:57 2009	(r192309)
+++ projects/pnet/sys/netinet/ip_input.c	Mon May 18 17:10:26 2009	(r192310)
@@ -166,18 +166,29 @@ SYSCTL_V_INT(V_NET, vnet_inet, _net_inet
 
 struct pfil_head inet_pfil_hook;	/* Packet filter hooks */
 
+#ifdef NETISR2
+static struct netisr_handler ip_nh = {
+	.nh_name = "ip",
+	.nh_handler = ip_input,
+	.nh_proto = NETISR_IP,
+	.nh_qlimit = IFQ_MAXLEN,
+	.nh_policy = NETISR_POLICY_FLOW,
+};
+#else
 static struct	ifqueue ipintrq;
 static int	ipqmaxlen = IFQ_MAXLEN;
 
-extern	struct domain inetdomain;
-extern	struct protosw inetsw[];
-u_char	ip_protox[IPPROTO_MAX];
-
 SYSCTL_INT(_net_inet_ip, IPCTL_INTRQMAXLEN, intr_queue_maxlen, CTLFLAG_RW,
     &ipintrq.ifq_maxlen, 0, "Maximum size of the IP input queue");
 SYSCTL_INT(_net_inet_ip, IPCTL_INTRQDROPS, intr_queue_drops, CTLFLAG_RD,
     &ipintrq.ifq_drops, 0,
     "Number of packets dropped from the IP input queue");
+#endif
+
+extern	struct domain inetdomain;
+extern	struct protosw inetsw[];
+u_char	ip_protox[IPPROTO_MAX];
+
 
 SYSCTL_V_STRUCT(V_NET, vnet_inet, _net_inet_ip, IPCTL_STATS, stats, CTLFLAG_RW,
     ipstat, ipstat, "IP statistics (struct ipstat, netinet/ip_var.h)");
@@ -250,6 +261,46 @@ static void vnet_inet_register()
 SYSINIT(inet, SI_SUB_PROTO_BEGIN, SI_ORDER_FIRST, vnet_inet_register, 0);
 #endif
 
+#ifdef NETISR2
+static int
+sysctl_netinet_intr_queue_maxlen(SYSCTL_HANDLER_ARGS)
+{
+	int error, qlimit;
+
+	netisr2_getqlimit(&ip_nh, &qlimit);
+	error = sysctl_handle_int(oidp, &qlimit, 0, req);
+	if (error || !req->newptr)
+		return (error);
+	if (qlimit < 1)
+		return (EINVAL);
+	return (netisr2_setqlimit(&ip_nh, qlimit));
+}
+SYSCTL_PROC(_net_inet_ip, IPCTL_INTRQMAXLEN, intr_queue_maxlen,
+    CTLTYPE_INT|CTLFLAG_RW, 0, 0, sysctl_netinet_intr_queue_maxlen, "I",
+    "Maximum size of the IP input queue");
+
+static int
+sysctl_netinet_intr_queue_drops(SYSCTL_HANDLER_ARGS)
+{
+	u_int64_t qdrops_long;
+	int error, qdrops;
+
+	netisr2_getqdrops(&ip_nh, &qdrops_long);
+	qdrops = qdrops_long;
+	error = sysctl_handle_int(oidp, &qdrops, 0, req);
+	if (error || !req->newptr)
+		return (error);
+	if (qdrops != 0)
+		return (EINVAL);
+	netisr2_clearqdrops(&ip_nh);
+	return (0);
+
+}
+SYSCTL_PROC(_net_inet_ip, IPCTL_INTRQDROPS, intr_queue_drops,
+    CTLTYPE_INT|CTLFLAG_RD, 0, 0, sysctl_netinet_intr_queue_drops, "I",
+    "Number of packets dropped from the IP input queue");
+#endif
+
 /*
  * IP initialization: fill in IP protocol switch table.
  * All protocols not implemented in kernel go to raw IP protocol handler.
@@ -348,14 +399,13 @@ ip_init(void)
 
 	/* Initialize various other remaining things. */
 	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);
+	netisr2_register(&ip_nh);
 #else
+	ipintrq.ifq_maxlen = ipqmaxlen;
+	mtx_init(&ipintrq.ifq_mtx, "ip_inq", NULL, MTX_DEF);
 	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	Mon May 18 17:08:57 2009	(r192309)
+++ projects/pnet/sys/netinet6/ip6_input.c	Mon May 18 17:10:26 2009	(r192310)
@@ -122,7 +122,18 @@ __FBSDID("$FreeBSD$");
 extern struct domain inet6domain;
 
 u_char ip6_protox[IPPROTO_MAX];
+
+#ifdef NETISR2
+static struct netisr_handler ip6_nh = {
+	.nh_name = "ip6",
+	.nh_handler = ip6_input,
+	.nh_proto = NETISR_IPV6,
+	.nh_qlimit = IFQ_MAXLEN,
+	.nh_policy = NETISR_POLICY_FLOW,
+};
+#else
 static struct ifqueue ip6intrq;
+#endif
 
 #ifndef VIMAGE
 #ifndef VIMAGE_GLOBALS
@@ -297,12 +308,12 @@ ip6_init(void)
 		printf("%s: WARNING: unable to register pfil hook, "
 			"error %d\n", __func__, i);
 
-	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);
+	ip6_nh.nh_qlimit = V_ip6qmaxlen;
+	netisr2_register(&ip6_nh);
 #else
+	ip6intrq.ifq_maxlen = V_ip6qmaxlen; /* XXX */
+	mtx_init(&ip6intrq.ifq_mtx, "ip6_inq", NULL, MTX_DEF);
 	netisr_register(NETISR_IPV6, ip6_input, &ip6intrq, 0);
 #endif
 }

Modified: projects/pnet/sys/netipx/ipx_input.c
==============================================================================
--- projects/pnet/sys/netipx/ipx_input.c	Mon May 18 17:08:57 2009	(r192309)
+++ projects/pnet/sys/netipx/ipx_input.c	Mon May 18 17:10:26 2009	(r192310)
@@ -122,8 +122,18 @@ struct mtx		ipxpcb_list_mtx;
 struct ipxpcbhead	ipxpcb_list;
 struct ipxpcbhead	ipxrawpcb_list;
 
+#ifdef NETISR2
+static const struct netisr_handler ipx_nh = {
+	.nh_name = "ipx",
+	.nh_handler = ipxintr,
+	.nh_proto = NETISR_IPX,
+	.nh_qlimit = IFQ_MAXLEN,
+	.nh_policy = NETISR_POLICY_SOURCE,
+};
+#else
 static int ipxqmaxlen = IFQ_MAXLEN;
 static	struct ifqueue ipxintrq;
+#endif
 
 long	ipx_pexseq;		/* Locked with ipxpcb_list_mtx. */
 
@@ -154,11 +164,12 @@ ipx_init(void)
 	ipx_hostmask.sipx_addr.x_net = ipx_broadnet;
 	ipx_hostmask.sipx_addr.x_host = ipx_broadhost;
 
-	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);
+	ipx_nh.nh_qlimit = ipxqmaxlen;
+	netisr2_register(&ipx_nh);
 #else
+	ipxintrq.ifq_maxlen = ipxqmaxlen;
+	mtx_init(&ipxintrq.ifq_mtx, "ipx_inq", NULL, MTX_DEF);
 	netisr_register(NETISR_IPX, ipxintr, &ipxintrq, 0);
 #endif
 }

Modified: projects/pnet/sys/netnatm/natm_proto.c
==============================================================================
--- projects/pnet/sys/netnatm/natm_proto.c	Mon May 18 17:08:57 2009	(r192309)
+++ projects/pnet/sys/netnatm/natm_proto.c	Mon May 18 17:10:26 2009	(r192310)
@@ -91,8 +91,19 @@ static struct domain natmdomain = {
 	.dom_protoswNPROTOSW =	&natmsw[sizeof(natmsw)/sizeof(natmsw[0])],
 };
 
+#ifdef NETISR2
+static struct netisr_handler natm_nh = {
+	.nh_name = "natm",
+	.nh_handler = natmintr,
+	.nh_proto = NETISR_NATM,
+	.nh_qlimit = 1000 /* IFQ_MAXLEN */,
+	.nh_policy = NETISR_POLICY_SOURCE,
+};
+#else
 static int natmqmaxlen = 1000 /* IFQ_MAXLEN */;	/* max # of packets on queue */
 static struct ifqueue natmintrq;
+#endif
+
 #ifdef NATM_STAT
 u_int natm_sodropcnt;		/* # mbufs dropped due to full sb */
 u_int natm_sodropbytes;		/* # of bytes dropped */
@@ -104,14 +115,13 @@ static void
 natm_init(void)
 {
 	LIST_INIT(&natm_pcbs);
-	bzero(&natmintrq, sizeof(natmintrq));
-	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);
+	netisr2_register(&natm_nh);
 #else
+	bzero(&natmintrq, sizeof(natmintrq));
+	natmintrq.ifq_maxlen = natmqmaxlen;
+	mtx_init(&natmintrq.ifq_mtx, "natm_inq", NULL, MTX_DEF);
 	netisr_register(NETISR_NATM, natmintr, &natmintrq, 0);
 #endif
 }



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200905181710.n4IHAR63068296>