From bedbd47e6a2e264e831d37bed07974e0f151a433 Mon Sep 17 00:00:00 2001 From: Mike Smith Date: Tue, 8 Jan 2002 10:34:03 +0000 Subject: [PATCH] Initialise the intrq_present fields at runtime, not link time. This allows us to load protocols at runtime, and avoids the use of common variables. Also fix the ip6_intrq assignment so that it works at all. --- sys/net/intrq.c | 20 ++++++++++---------- sys/net/intrq.h | 9 +++++++++ sys/netatm/atm_subr.c | 4 ++-- sys/netinet/ip_input.c | 2 +- sys/netinet6/ip6_input.c | 2 +- sys/netipx/ipx_input.c | 2 +- sys/netnatm/natm_proto.c | 3 +-- sys/netns/ns_input.c | 3 +-- 8 files changed, 26 insertions(+), 19 deletions(-) diff --git a/sys/net/intrq.c b/sys/net/intrq.c index 89f9159ae81..bae00e471c4 100644 --- a/sys/net/intrq.c +++ b/sys/net/intrq.c @@ -41,17 +41,17 @@ /* * If the appropriate intrq_present variable is zero, don't use * the queue (as it'll never get processed). - * When defined, each of the network stacks declares their own - * *intrq_present variable to be non-zero. + * Each of the active network stacks sets their own + * *intrq_present variable non-zero. */ -const int atintrq1_present; -const int atintrq2_present; -const int atmintrq_present; -const int ipintrq_present; -const int ip6intrq_present; -const int ipxintrq_present; -const int natmintrq_present; -const int nsintrq_present; +int atintrq1_present; +int atintrq2_present; +int atmintrq_present; +int ipintrq_present; +int ip6intrq_present; +int ipxintrq_present; +int natmintrq_present; +int nsintrq_present; struct ifqueue atintrq1; struct ifqueue atintrq2; diff --git a/sys/net/intrq.h b/sys/net/intrq.h index c17cafd4ddc..6316be0c002 100644 --- a/sys/net/intrq.h +++ b/sys/net/intrq.h @@ -30,6 +30,15 @@ #define _NET_INTRQ_H_ #ifdef _KERNEL +extern int atintrq1_present; +extern int atintrq2_present; +extern int atmintrq_present; +extern int ipintrq_present; +extern int ip6intrq_present; +extern int ipxintrq_present; +extern int natmintrq_present; +extern int nsintrq_present; + extern int family_enqueue __P((sa_family_t, struct mbuf *)); #endif diff --git a/sys/netatm/atm_subr.c b/sys/netatm/atm_subr.c index 25003e63ad2..871d299b656 100644 --- a/sys/netatm/atm_subr.c +++ b/sys/netatm/atm_subr.c @@ -79,7 +79,6 @@ int atm_dev_print = 0; int atm_print_data = 0; int atm_version = ATM_VERSION; struct timeval atm_debugtime = {0, 0}; -const int atmintrq_present = 1; struct sp_info atm_attributes_pool = { "atm attributes pool", /* si_name */ @@ -133,9 +132,10 @@ atm_initialize() return; atm_init = 1; - atm_intrq.ifq_maxlen = ATM_INTRQ_MAX; mtx_init(&atm_intrq.ifq_mtx, "atm_inq", MTX_DEF); + atmintrq_present = 1; + #ifdef sgi atm_intr_index = register_isr(atm_intr); #endif diff --git a/sys/netinet/ip_input.c b/sys/netinet/ip_input.c index c75cd1b4331..dec4d94d02c 100644 --- a/sys/netinet/ip_input.c +++ b/sys/netinet/ip_input.c @@ -171,7 +171,6 @@ SYSCTL_STRUCT(_net_inet_ip, IPCTL_STATS, stats, CTLFLAG_RW, static TAILQ_HEAD(ipqhead, ipq) ipq[IPREASS_NHASH]; static int nipq = 0; /* total # of reass queues */ static int maxnipq; -const int ipintrq_present = 1; #ifdef IPCTL_DEFMTU SYSCTL_INT(_net_inet_ip, IPCTL_DEFMTU, mtu, CTLFLAG_RW, @@ -255,6 +254,7 @@ ip_init() #endif ipintrq.ifq_maxlen = ipqmaxlen; mtx_init(&ipintrq.ifq_mtx, "ip_inq", MTX_DEF); + ipintrq_present = 1; register_netisr(NETISR_IP, ipintr); } diff --git a/sys/netinet6/ip6_input.c b/sys/netinet6/ip6_input.c index 77557f3e345..cfee62b84d5 100644 --- a/sys/netinet6/ip6_input.c +++ b/sys/netinet6/ip6_input.c @@ -135,7 +135,6 @@ extern struct callout in6_tmpaddrtimer_ch; int ip6_forward_srcrt; /* XXX */ int ip6_sourcecheck; /* XXX */ int ip6_sourcecheck_interval; /* XXX */ -const int int6intrq_present = 1; int ip6_ours_check_algorithm; @@ -183,6 +182,7 @@ ip6_init() ip6_protox[pr->pr_protocol] = pr - inet6sw; ip6intrq.ifq_maxlen = ip6qmaxlen; mtx_init(&ip6intrq.ifq_mtx, "ip6_inq", MTX_DEF); + ip6intrq_present = 1; register_netisr(NETISR_IPV6, ip6intr); nd6_init(); frag6_init(); diff --git a/sys/netipx/ipx_input.c b/sys/netipx/ipx_input.c index ed78acf6234..d912bdcec15 100644 --- a/sys/netipx/ipx_input.c +++ b/sys/netipx/ipx_input.c @@ -89,7 +89,6 @@ struct ipxpcb ipxrawpcb; static int ipxqmaxlen = IFQ_MAXLEN; long ipx_pexseq; -const int ipxintrq_present = 1; static int ipx_do_route(struct ipx_addr *src, struct route *ro); static void ipx_undo_route(struct route *ro); @@ -108,6 +107,7 @@ ipx_init() read_random(&ipx_pexseq, sizeof ipx_pexseq); ipxintrq.ifq_maxlen = ipxqmaxlen; mtx_init(&ipxintrq.ifq_mtx, "ipx_inq", MTX_DEF); + ipxintrq_present = 1; ipxpcb.ipxp_next = ipxpcb.ipxp_prev = &ipxpcb; ipxrawpcb.ipxp_next = ipxrawpcb.ipxp_prev = &ipxrawpcb; diff --git a/sys/netnatm/natm_proto.c b/sys/netnatm/natm_proto.c index ef657f1014b..3843f81604f 100644 --- a/sys/netnatm/natm_proto.c +++ b/sys/netnatm/natm_proto.c @@ -114,8 +114,6 @@ u_int natm_sookcnt = 0; /* # mbufs ok */ u_int natm_sookbytes = 0; /* # of bytes ok */ #endif -const int natmintrq_present = 1; - void natm_init() @@ -124,6 +122,7 @@ void natm_init() bzero(&natmintrq, sizeof(natmintrq)); natmintrq.ifq_maxlen = natmqmaxlen; mtx_init(&natmintrq.ifq_mtx, "natm_inq", MTX_DEF); + natmintrq_present = 1; } diff --git a/sys/netns/ns_input.c b/sys/netns/ns_input.c index 4d26a9de238..70065404f43 100644 --- a/sys/netns/ns_input.c +++ b/sys/netns/ns_input.c @@ -79,8 +79,6 @@ int nsqmaxlen = IFQ_MAXLEN; int idpcksum = 1; long ns_pexseq; -const int nsintrq_present = 1; - ns_init() { extern struct timeval time; @@ -91,6 +89,7 @@ ns_init() nsrawpcb.nsp_next = nsrawpcb.nsp_prev = &nsrawpcb; nsintrq.ifq_maxlen = nsqmaxlen; mtx_init(&nsintrq.ifq_mtx, "ns_inq", MTX_DEF); + nsintrq_present = 1; ns_pexseq = time.tv_usec; ns_netmask.sns_len = 6; ns_netmask.sns_addr.x_net = ns_broadnet;