From owner-p4-projects@FreeBSD.ORG Fri Jun 6 21:04:12 2008 Return-Path: Delivered-To: p4-projects@freebsd.org Received: by hub.freebsd.org (Postfix, from userid 32767) id A26FF1065683; Fri, 6 Jun 2008 21:04:12 +0000 (UTC) Delivered-To: perforce@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 622F7106567F for ; Fri, 6 Jun 2008 21:04:12 +0000 (UTC) (envelope-from julian@freebsd.org) Received: from repoman.freebsd.org (repoman.freebsd.org [IPv6:2001:4f8:fff6::29]) by mx1.freebsd.org (Postfix) with ESMTP id 600828FC16 for ; Fri, 6 Jun 2008 21:04:12 +0000 (UTC) (envelope-from julian@freebsd.org) Received: from repoman.freebsd.org (localhost [127.0.0.1]) by repoman.freebsd.org (8.14.1/8.14.1) with ESMTP id m56L4C9B098765 for ; Fri, 6 Jun 2008 21:04:12 GMT (envelope-from julian@freebsd.org) Received: (from perforce@localhost) by repoman.freebsd.org (8.14.1/8.14.1/Submit) id m56L4Ccp098763 for perforce@freebsd.org; Fri, 6 Jun 2008 21:04:12 GMT (envelope-from julian@freebsd.org) Date: Fri, 6 Jun 2008 21:04:12 GMT Message-Id: <200806062104.m56L4Ccp098763@repoman.freebsd.org> X-Authentication-Warning: repoman.freebsd.org: perforce set sender to julian@freebsd.org using -f From: Julian Elischer To: Perforce Change Reviews Cc: Subject: PERFORCE change 143054 for review X-BeenThere: p4-projects@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: p4 projects tree changes List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 06 Jun 2008 21:04:12 -0000 http://perforce.freebsd.org/chv.cgi?CH=143054 Change 143054 by julian@julian_trafmon1 on 2008/06/06 21:03:57 Phew! Affected files ... .. //depot/projects/vimage-commit/V_#2 edit Differences ... ==== //depot/projects/vimage-commit/V_#2 (text+ko) ==== @@ -12667,14 +12667,6 @@ #include #include -@@ -52,6 +55,7 @@ - #include - #include - #include -+#include - #include - #include - @@ -61,6 +65,7 @@ int dest6_input(struct mbuf **mp, int *offp, int proto) @@ -12714,27 +12706,7 @@ #include #include -@@ -50,6 +54,7 @@ - #include - #include - #include -+#include - #include - #include - #include /* for ECN definitions */ -@@ -72,9 +77,11 @@ - /* - * These fields all protected by ip6qlock. - */ -+#ifndef VIMAGE - static u_int frag6_nfragpackets; - static u_int frag6_nfrags; - static struct ip6q ip6q; /* ip6 reassemble queue */ -+#endif - - #define IP6Q_LOCK_INIT() mtx_init(&ip6qlock, "ip6qlock", NULL, MTX_DEF); - #define IP6Q_LOCK() mtx_lock(&ip6qlock) -@@ -90,23 +97,28 @@ +@@ -90,23 +97,25 @@ static void frag6_change(void *tag) { @@ -12753,19 +12725,14 @@ - ip6_maxfragpackets = nmbclusters / 4; - ip6_maxfrags = nmbclusters / 4; -+ V_ip6q.ip6q_next = V_ip6q.ip6q_prev = &V_ip6q; + V_ip6_maxfragpackets = nmbclusters / 4; + V_ip6_maxfrags = nmbclusters / 4; -+#ifdef VIMAGE -+ if (!IS_DEFAULT_VNET(curvnet)) -+ return; -+#endif EVENTHANDLER_REGISTER(nmbclusters_change, frag6_change, NULL, EVENTHANDLER_PRI_ANY); IP6Q_LOCK_INIT(); -- -- ip6q.ip6q_next = ip6q.ip6q_prev = &ip6q; + + ip6q.ip6q_next = ip6q.ip6q_prev = &ip6q; } /* @@ -12910,12 +12877,11 @@ } /* -@@ -688,13 +702,15 @@ +@@ -688,13 +702,14 @@ #endif IP6Q_LOCK(); - q6 = ip6q.ip6q_next; -+ VNET_ITERLOOP_BEGIN() + INIT_VNET_INET6(curvnet); + q6 = V_ip6q.ip6q_next; if (q6) @@ -12929,7 +12895,7 @@ /* XXX in6_ifstat_inc(ifp, ifs6_reass_fail) */ frag6_freef(q6->ip6q_prev); } -@@ -704,12 +720,13 @@ +@@ -704,12 +720,12 @@ * (due to the limit being lowered), drain off * enough to get down to the new limit. */ @@ -12943,7 +12909,6 @@ - frag6_freef(ip6q.ip6q_prev); + frag6_freef(V_ip6q.ip6q_prev); } -+ VNET_ITERLOOP_END() IP6Q_UNLOCK(); #if 0 @@ -12960,13 +12925,12 @@ } if (ipsrcchk_rt.ro_rt) { RTFREE(ipsrcchk_rt.ro_rt); -@@ -738,10 +755,13 @@ +@@ -738,10 +755,11 @@ if (IP6Q_TRYLOCK() == 0) return; - while (ip6q.ip6q_next != &ip6q) { - ip6stat.ip6s_fragdropped++; -+ VNET_ITERLOOP_BEGIN() + INIT_VNET_INET6(curvnet); + while (V_ip6q.ip6q_next != &V_ip6q) { + V_ip6stat.ip6s_fragdropped++; @@ -12974,7 +12938,6 @@ - frag6_freef(ip6q.ip6q_next); + frag6_freef(V_ip6q.ip6q_next); } -+ VNET_ITERLOOP_END() IP6Q_UNLOCK(); } Index: sys/netinet6/icmp6.c @@ -12989,45 +12952,26 @@ #include #include -@@ -81,18 +82,22 @@ +@@ -81,18 +82,19 @@ #include #include #include +#include -+#include #include #include #include #include -+#include #include #include #include #include #include #include -+#include #include #include #include -@@ -112,10 +117,14 @@ - - extern struct inpcbinfo ripcbinfo; - extern struct inpcbhead ripcb; -+#ifndef VIMAGE - extern int icmp6errppslim; --static int icmp6errpps_count = 0; -+static int icmp6errpps_count; -+#endif /* !VIMAGE */ - static struct timeval icmp6errppslim_last; -+#ifndef VIMAGE - extern int icmp6_nodeinfo; -+#endif /* !VIMAGE */ - - static void icmp6_errcount(struct icmp6errstat *, int, int); - static int icmp6_rip6_input(struct mbuf **, int); @@ -135,6 +144,8 @@ void icmp6_init(void) @@ -13111,7 +13055,7 @@ icmp6_input(struct mbuf **mp, int *offp, int proto) { + INIT_VNET_INET6(curvnet); -+ /* XXX this bellow is WRONG - MARKO */ ++ /* XXX this below is WRONG - MARKO */ + INIT_VPROCG(TD_TO_VPROCG(curthread)); struct mbuf *m = *mp, *n; struct ip6_hdr *ip6, *nip6; @@ -13580,14 +13524,6 @@ #include #include #include -@@ -92,6 +95,7 @@ - #include - - #include -+#include - #include - #include - #include @@ -230,6 +234,7 @@ void in6_ifremloop(struct ifaddr *ifa) @@ -13782,36 +13718,6 @@ #include #include -@@ -57,6 +58,7 @@ - #endif - #include - #ifdef INET6 -+#include - #include - #include - #include -@@ -74,12 +76,15 @@ - struct ifnet *); - - extern struct domain inet6domain; --struct ip6protosw in6_gif_protosw = --{ SOCK_RAW, &inet6domain, 0/* IPPROTO_IPV[46] */, PR_ATOMIC|PR_ADDR, -- in6_gif_input, rip6_output, 0, rip6_ctloutput, -- 0, -- 0, 0, 0, 0, -- &rip6_usrreqs -+struct ip6protosw in6_gif_protosw = { -+ .pr_type = SOCK_RAW, -+ .pr_domain = &inet6domain, -+ .pr_protocol = 0/* IPPROTO_IPV[46] */, -+ .pr_flags = PR_ATOMIC|PR_ADDR, -+ .pr_input = in6_gif_input, -+ .pr_output = rip6_output, -+ .pr_ctloutput = rip6_ctloutput, -+ .pr_usrreqs = &rip6_usrreqs - }; - - int @@ -87,6 +92,7 @@ int family, /* family of the packet to be encapsulate */ struct mbuf *m) @@ -13876,26 +13782,23 @@ #include #include #include -@@ -40,18 +42,22 @@ +@@ -40,18 +42,19 @@ #include #include #include +#include -+#include #include #include #include #include -+#include #include #include #include #include #include -+#include #include #include #include @@ -13903,23 +13806,18 @@ #include #include --unsigned long in6_maxmtu = 0; -- --#ifdef IP6_AUTO_LINKLOCAL --int ip6_auto_linklocal = IP6_AUTO_LINKLOCAL; --#else --int ip6_auto_linklocal = 1; /* enable by default */ --#endif -- -+#ifndef VIMAGE -+unsigned long in6_maxmtu; -+int ip6_auto_linklocal; + unsigned long in6_maxmtu = 0; + + #ifdef IP6_AUTO_LINKLOCAL + int ip6_auto_linklocal = IP6_AUTO_LINKLOCAL; + #else + int ip6_auto_linklocal = 1; /* enable by default */ + #endif + struct callout in6_tmpaddrtimer_ch; -- -+extern struct inpcbinfo ripcbinfo; + extern struct inpcbinfo udbinfo; --extern struct inpcbinfo ripcbinfo; -+#endif + extern struct inpcbinfo ripcbinfo; static int get_rand_ifid(struct ifnet *, struct in6_addr *); static int generate_tmp_ifid(u_int8_t *, const u_int8_t *, u_int8_t *); @@ -14115,7 +14013,7 @@ #include #include -@@ -82,19 +83,24 @@ +@@ -82,19 +83,21 @@ #include #include #include @@ -14123,12 +14021,10 @@ #include -+#include #include #include #include -+#include #include #include #include @@ -14136,7 +14032,6 @@ #include #include + -+#include #include #include #include @@ -14222,169 +14117,13 @@ #include #include -@@ -87,6 +89,7 @@ - #ifdef RADIX_MPATH - #include - #endif -+#include +@@ -454,124 +450,142 @@ - #include - #include -@@ -95,6 +98,7 @@ - #include - #include - #include -+#include - #include - #include - -@@ -144,6 +148,9 @@ - .pr_domain = &inet6domain, - .pr_protocol = IPPROTO_IPV6, - .pr_init = ip6_init, -+#ifdef VIMAGE -+ .pr_destroy = ip6_destroy, -+#endif - .pr_slowtimo = frag6_slowtimo, - .pr_drain = frag6_drain, - .pr_usrreqs = &nousrreqs, -@@ -344,26 +351,10 @@ - }; - - extern int in6_inithead(void **, int); -- --struct domain inet6domain = { -- .dom_family = AF_INET6, -- .dom_name = "internet6", -- .dom_protosw = (struct protosw *)inet6sw, -- .dom_protoswNPROTOSW = (struct protosw *) -- &inet6sw[sizeof(inet6sw)/sizeof(inet6sw[0])], --#ifdef RADIX_MPATH -- .dom_rtattach = rn6_mpath_inithead, --#else -- .dom_rtattach = in6_inithead, -+#ifdef VIMAGE -+extern int in6_detachhead(void **, int); - #endif -- .dom_rtoffset = offsetof(struct sockaddr_in6, sin6_addr) << 3, -- .dom_maxrtkey = sizeof(struct sockaddr_in6), -- .dom_ifattach = in6_domifattach, -- .dom_ifdetach = in6_domifdetach --}; - --DOMAIN_SET(inet6); -- - /* - * Internet configuration info - */ -@@ -379,29 +370,31 @@ - #define IPV6_SENDREDIRECTS 1 - #endif - --int ip6_forwarding = IPV6FORWARDING; /* act as router? */ --int ip6_sendredirects = IPV6_SENDREDIRECTS; --int ip6_defhlim = IPV6_DEFHLIM; --int ip6_defmcasthlim = IPV6_DEFAULT_MULTICAST_HOPS; --int ip6_accept_rtadv = 0; /* "IPV6FORWARDING ? 0 : 1" is dangerous */ -+#ifndef VIMAGE -+int ip6_forwarding; /* act as router? */ -+int ip6_sendredirects; -+int ip6_defhlim; -+int ip6_defmcasthlim; -+int ip6_accept_rtadv; /* "IPV6FORWARDING ? 0 : 1" is dangerous */ - int ip6_maxfragpackets; /* initialized in frag6.c:frag6_init() */ --int ip6_maxfrags; /* initialized in frag6.c:frag6_init() */ --int ip6_log_interval = 5; --int ip6_hdrnestlimit = 15; /* How many header options will we process? */ --int ip6_dad_count = 1; /* DupAddrDetectionTransmits */ --int ip6_auto_flowlabel = 1; --int ip6_gif_hlim = 0; --int ip6_use_deprecated = 1; /* allow deprecated addr (RFC2462 5.5.4) */ --int ip6_rr_prune = 5; /* router renumbering prefix -+int ip6_maxfrags; /* initialized in frag6.c:frag6_init() */ -+int ip6_log_interval; -+int ip6_hdrnestlimit; /* How many header options will we process? */ -+int ip6_dad_count; /* DupAddrDetectionTransmits */ -+int ip6_auto_flowlabel; -+int ip6_gif_hlim = 0; -+int ip6_use_deprecated; /* allow deprecated addr (RFC2462 5.5.4) */ -+int ip6_rr_prune; /* router renumbering prefix - * walk list every 5 sec. */ --int ip6_mcast_pmtu = 0; /* enable pMTU discovery for multicast? */ --int ip6_v6only = 1; -+int ip6_mcast_pmtu; /* enable pMTU discovery for multicast? */ -+int ip6_v6only; - --int ip6_keepfaith = 0; --time_t ip6_log_time = (time_t)0L; -+int ip6_keepfaith; -+time_t ip6_log_time; - #ifdef IPSTEALTH --int ip6stealth = 0; -+int ip6stealth; - #endif -+#endif /* !VIMAGE */ - - /* icmp6 */ - /* -@@ -409,8 +402,10 @@ - * XXX: what if we don't define INET? Should we define pmtu6_expire - * or so? (jinmei@kame.net 19990310) - */ --int pmtu_expire = 60*10; --int pmtu_probe = 60*2; -+#ifndef VIMAGE -+int pmtu_expire; -+int pmtu_probe; -+#endif - - /* raw IP6 parameters */ - /* -@@ -419,20 +414,21 @@ - #define RIPV6SNDQ 8192 - #define RIPV6RCVQ 8192 - --u_long rip6_sendspace = RIPV6SNDQ; --u_long rip6_recvspace = RIPV6RCVQ; -+#ifndef VIMAGE -+u_long rip6_sendspace; -+u_long rip6_recvspace; - - /* ICMPV6 parameters */ --int icmp6_rediraccept = 1; /* accept and process redirects */ --int icmp6_redirtimeout = 10 * 60; /* 10 minutes */ --int icmp6errppslim = 100; /* 100pps */ -+int icmp6_rediraccept; /* accept and process redirects */ -+int icmp6_redirtimeout; -+int icmp6errppslim; - /* control how to respond to NI queries */ --int icmp6_nodeinfo = (ICMP6_NODEINFO_FQDNOK|ICMP6_NODEINFO_NODEADDROK); -+int icmp6_nodeinfo; - - /* UDP on IP6 parameters */ --int udp6_sendspace = 9216; /* really max datagram size */ --int udp6_recvspace = 40 * (1024 + sizeof(struct sockaddr_in6)); -- /* 40 1K datagrams */ -+int udp6_sendspace; /* really max datagram size */ -+int udp6_recvspace; -+#endif /* !VIMAGE */ - - /* - * sysctl related items. -@@ -454,124 +450,201 @@ - /* net.inet6.ip6 */ static int -+#ifdef VIMAGE -+sysctl_ip6_temppltime(SYSCTL_HANDLER_V_ARGS) -+#else sysctl_ip6_temppltime(SYSCTL_HANDLER_ARGS) -+#endif { + INIT_VNET_INET6(curvnet); -+#ifdef VIMAGE -+ SYSCTL_RESOLVE_V_ARG1(); -+#endif int error = 0; int old; @@ -14406,16 +14145,9 @@ } static int -+#ifdef VIMAGE -+sysctl_ip6_tempvltime(SYSCTL_HANDLER_V_ARGS) -+#else sysctl_ip6_tempvltime(SYSCTL_HANDLER_ARGS) -+#endif { + INIT_VNET_INET6(curvnet); -+#ifdef VIMAGE -+ SYSCTL_RESOLVE_V_ARG1(); -+#endif int error = 0; int old; @@ -14598,48 +14330,6 @@ +SYSCTL_V_INT(V_NET, vnet_inet6, _net_inet6_icmp6, ICMPV6CTL_ND6_DEBUG, + nd6_debug, CTLFLAG_RW, nd6_debug, 0, ""); + -+static void -+ip6_dom_init(void) -+{ -+ INIT_VNET_INET6(curvnet); -+ -+ V_ip6_forwarding = IPV6FORWARDING; -+ V_ip6_sendredirects = IPV6_SENDREDIRECTS; -+ V_ip6_defhlim = IPV6_DEFHLIM; -+ V_ip6_defmcasthlim = IPV6_DEFAULT_MULTICAST_HOPS; -+ V_ip6_accept_rtadv = 0; -+ V_ip6_log_interval = 5; -+ V_ip6_hdrnestlimit = 15; -+ V_ip6_dad_count = 1; -+ V_ip6_auto_flowlabel = 1; -+ V_ip6_use_deprecated = 1; -+ V_ip6_rr_prune = 5; -+ V_ip6_mcast_pmtu = 0; -+ V_ip6_v6only = 1; -+ V_ip6_keepfaith = 0; -+ V_ip6_log_time = (time_t)0L; -+#ifdef IPSTEALTH -+ V_ip6stealth = 0; -+#endif -+ V_pmtu_expire = 60*10; -+ V_pmtu_probe = 60*2; -+ V_rip6_sendspace = RIPV6SNDQ; -+ V_rip6_recvspace = RIPV6RCVQ; -+ -+ /* ICMPV6 parameters */ -+ V_icmp6_rediraccept = 1; -+ V_icmp6_redirtimeout = 10 * 60; /* 10 minutes */ -+ V_icmp6errppslim = 100; /* 100pps */ -+ /* control how to respond to NI queries */ -+ V_icmp6_nodeinfo = (ICMP6_NODEINFO_FQDNOK|ICMP6_NODEINFO_NODEADDROK); -+ -+ /* UDP on IP6 parameters */ -+ V_udp6_sendspace = 9216; /* really max datagram size */ -+ V_udp6_recvspace = 40 * (1024 + sizeof(struct sockaddr_in6)); -+ /* 40 1K datagrams */ -+ -+} -+ +struct domain inet6domain = { + .dom_family = AF_INET6, + .dom_name = "internet6", @@ -14647,9 +14337,6 @@ + .dom_protoswNPROTOSW = (struct protosw *) + &inet6sw[sizeof(inet6sw)/sizeof(inet6sw[0])], + .dom_rtattach = in6_inithead, -+#ifdef VIMAGE -+ .dom_rtdetach = in6_detachhead, -+#endif + .dom_rtoffset = offsetof(struct sockaddr_in6, sin6_addr) << 3, + .dom_maxrtkey = sizeof(struct sockaddr_in6), + .dom_ifattach = in6_domifattach, @@ -14671,44 +14358,27 @@ #include #include #include -@@ -85,13 +87,17 @@ +@@ -85,13 +87,14 @@ #include #include #include +#include -+#include #include #include #include #include #include -+#include -+ #include #include -@@ -104,6 +110,9 @@ - #include - - extern int in6_inithead(void **head, int off); -+#ifdef VIMAGE -+extern int in6_detachhead(void **head, int off); -+#endif - - #define RTPRF_OURS RTF_PROTO3 /* set on routes we manage */ - -@@ -321,20 +330,25 @@ +@@ -321,20 +330,23 @@ } #define RTQ_TIMEOUT 60*10 /* run no less than once every ten minutes */ --static int rtq_timeout = RTQ_TIMEOUT; --static struct callout rtq_timer; -+#ifndef VIMAGE -+static int rtq_timeout6; -+static struct callout rtq_timer6; -+#endif + static int rtq_timeout = RTQ_TIMEOUT; + static struct callout rtq_timer; static void in6_rtqtimo(void *rock) @@ -14748,16 +14418,6 @@ } /* -@@ -380,7 +395,9 @@ - struct radix_node_head *rnh; - time_t nextstop; - }; -+#ifndef VIMAGE - static struct callout rtq_mtutimer; -+#endif - - static int - in6_mtuexpire(struct radix_node *rn, void *rock) @@ -409,7 +426,10 @@ static void in6_mtutimo(void *rock) @@ -14797,7 +14457,7 @@ struct radix_node_head *rnh; if (!rn_inithead(head, offsetof(struct sockaddr_in6, sin6_addr) << 3)) -@@ -465,13 +488,26 @@ +@@ -465,13 +488,14 @@ if (off == 0) /* See above */ return 1; /* only do the rest for the real thing */ @@ -14811,23 +14471,11 @@ - callout_init(&rtq_mtutimer, CALLOUT_MPSAFE); - in6_mtutimo(rnh); /* kick off timeout first time */ + callout_init(&V_rtq_timer6, CALLOUT_MPSAFE); ++ in6_rtqtimo(rnh); /* kick off timeout first time */ + callout_init(&V_rtq_mtutimer, CALLOUT_MPSAFE); -+ in6_rtqtimo(curvnet); /* kick off timeout first time */ -+ in6_mtutimo(curvnet); /* kick off timeout first time */ -+ return 1; -+} -+ -+#ifdef VIMAGE -+int -+in6_detachhead(void **head, int off) -+{ -+ INIT_VNET_INET6(curvnet); -+ -+ callout_drain(&V_rtq_timer6); -+ callout_drain(&V_rtq_mtutimer); ++ in6_mtutimo(rnh); /* kick off timeout first time */ return 1; } -+#endif Index: sys/netinet6/in6_src.c =========================================================================== --- sys/netinet6/in6_src.c 2008/06/02 18:20:02 #48 @@ -14840,42 +14488,27 @@ #include #include -@@ -82,18 +83,23 @@ +@@ -82,18 +83,20 @@ #include #include #include +#include -+#include #include #include #ifdef RADIX_MPATH #include #endif -+#include #include #include #include #include #include + -+#include #include #include #include -@@ -115,9 +121,11 @@ - #define ADDRSEL_XUNLOCK() sx_xunlock(&addrsel_sxlock) - - #define ADDR_LABEL_NOTAPP (-1) -+#ifndef VIMAGE - struct in6_addrpolicy defaultaddrpolicy; - - int ip6_prefer_tempaddr = 0; -+#endif - - static int selectroute __P((struct sockaddr_in6 *, struct ip6_pktopts *, - struct ip6_moptions *, struct route_in6 *, struct ifnet **, @@ -142,9 +150,9 @@ * an entry to the caller for later use. */ @@ -15022,12 +14655,12 @@ lastport = &pcbinfo->ipi_lastport; } /* -@@ -851,26 +864,34 @@ +@@ -851,26 +864,28 @@ void addrsel_policy_init(void) { -- ADDRSEL_LOCK_INIT(); -- ADDRSEL_SXLOCK_INIT(); + ADDRSEL_LOCK_INIT(); + ADDRSEL_SXLOCK_INIT(); + INIT_VNET_INET6(curvnet); init_policy_queue(); @@ -15037,14 +14670,6 @@ - defaultaddrpolicy.label = ADDR_LABEL_NOTAPP; + bzero(&V_defaultaddrpolicy, sizeof(V_defaultaddrpolicy)); + V_defaultaddrpolicy.label = ADDR_LABEL_NOTAPP; -+ -+#ifdef VIMAGE -+ if (!IS_DEFAULT_VNET(curvnet)) -+ return; -+#endif -+ -+ ADDRSEL_LOCK_INIT(); -+ ADDRSEL_SXLOCK_INIT(); } static struct in6_addrpolicy * @@ -15066,13 +14691,10 @@ struct in6_addrpolicy ape_policy; }; --TAILQ_HEAD(addrsel_policyhead, addrsel_policyent); -+#ifndef VIMAGE -+TAILQ_HEAD(, addrsel_policyent) addrsel_policytab; -+#endif + TAILQ_HEAD(addrsel_policyhead, addrsel_policyent); + + struct addrsel_policyhead addrsel_policytab; --struct addrsel_policyhead addrsel_policytab; -- static void init_policy_queue(void) { @@ -15161,22 +14783,6 @@ matchlen = 0; pol = &pent->ape_policy; -Index: sys/netinet6/in6_var.h -=========================================================================== ---- sys/netinet6/in6_var.h 2008/06/02 18:20:02 #25 -+++ sys/netinet6/in6_var.h 2008/06/02 18:20:02 -@@ -470,9 +470,11 @@ - #endif - - #ifdef _KERNEL -+#ifndef VIMAGE - extern struct in6_ifaddr *in6_ifaddr; - - extern struct icmp6stat icmp6stat; -+#endif - #define in6_ifstat_inc(ifp, tag) \ - do { \ - if (ifp) \ Index: sys/netinet6/ip6_forward.c =========================================================================== --- sys/netinet6/ip6_forward.c 2008/06/02 18:20:02 #31 @@ -15197,29 +14803,6 @@ #include #include -@@ -58,6 +60,7 @@ - #include - #include - #include -+#include - #include - #include - #include -@@ -71,11 +74,14 @@ - #include - #include - #include -+#include - #endif /* IPSEC */ - - #include - -+#ifndef VIMAGE - struct route_in6 ip6_forward_rt; -+#endif - - /* - * Forward a packet. If some error occurs return the sender @@ -92,6 +98,7 @@ void ip6_forward(struct mbuf *m, int srcrt) @@ -15461,117 +15044,22 @@ #include #include -@@ -80,13 +81,16 @@ +@@ -80,13 +81,14 @@ #include #include #include +#include -+#include #include #include #include #include #include #include -+#include #include #include -@@ -95,10 +99,13 @@ - #include - #endif /* INET */ - #include -+#include - #include - #include - #include - #include -+ -+#include - #include - #include - #include -@@ -115,6 +122,7 @@ - - u_char ip6_protox[IPPROTO_MAX]; - static struct ifqueue ip6intrq; -+#ifndef VIMAGE - static int ip6qmaxlen = IFQ_MAXLEN; - struct in6_ifaddr *in6_ifaddr; - -@@ -125,10 +133,13 @@ - int ip6_sourcecheck_interval; /* XXX */ - - int ip6_ours_check_algorithm; -+#endif /* !VIMAGE */ - - struct pfil_head inet6_pfil_hook; - -+#ifndef VIMAGE - struct ip6stat ip6stat; -+#endif - - static void ip6_init2(void *); - static struct ip6aux *ip6_setdstifaddr(struct mbuf *, struct in6_ifaddr *); -@@ -137,6 +148,19 @@ - static struct mbuf *ip6_pullexthdr(struct mbuf *, size_t, int); - #endif - -+#ifdef VIMAGE -+static void vnet_inet6_register(void); -+ -+VNET_MOD_DECLARE(INET6, inet6, NULL, NULL, INET, NULL) -+ -+static void vnet_inet6_register() -+{ -+ vnet_mod_register(&vnet_inet6_modinfo); -+} -+ -+SYSINIT(inet6, SI_SUB_PROTO_BEGIN, SI_ORDER_FIRST, vnet_inet6_register, 0); -+#endif /* VIMAGE */ -+ - /* - * IP6 initialization: fill in IP6 protocol switch table. - * All protocols not implemented in kernel go to raw IP6 protocol handler. -@@ -144,9 +168,36 @@ - void - ip6_init(void) - { -+ INIT_VNET_INET6(curvnet); - struct ip6protosw *pr; - int i; - -+ V_ip6_prefer_tempaddr = 0; -+ -+ V_ip6qmaxlen = IFQ_MAXLEN; -+ V_ip6_forward_srcrt = 0; /* XXX */ -+ V_ip6_sourcecheck = 0; /* XXX */ -+ V_ip6_sourcecheck_interval = 0; /* XXX */ -+ -+ V_ip6_ours_check_algorithm = 0; -+ -+#ifdef IP6_AUTO_LINKLOCAL -+ V_ip6_auto_linklocal = IP6_AUTO_LINKLOCAL; -+#else -+ V_ip6_auto_linklocal = 1; /* enable by default */ -+#endif -+ -+ scope6_init(); -+ addrsel_policy_init(); -+ nd6_init(); -+ frag6_init(); -+ -+#ifdef VIMAGE -+ /* Skip global initialization stuff for non-default instances. */ -+ if (!IS_DEFAULT_VNET(curvnet)) -+ return; -+#endif -+ - #ifdef DIAGNOSTIC - if (sizeof(struct protosw) != sizeof(struct ip6protosw)) - panic("sizeof(protosw) != sizeof(ip6protosw)"); -@@ -178,41 +229,53 @@ +@@ -178,41 +229,44 @@ printf("%s: WARNING: unable to register pfil hook, " "error %d\n", __func__, i); @@ -15579,24 +15067,13 @@ + ip6intrq.ifq_maxlen = V_ip6qmaxlen; mtx_init(&ip6intrq.ifq_mtx, "ip6_inq", NULL, MTX_DEF); netisr_register(NETISR_IPV6, ip6_input, &ip6intrq, 0); -- scope6_init(); -- addrsel_policy_init(); -- nd6_init(); -- frag6_init(); + scope6_init(); + addrsel_policy_init(); + nd6_init(); + frag6_init(); - ip6_desync_factor = arc4random() % MAX_TEMP_DESYNC_FACTOR; + V_ip6_desync_factor = arc4random() % MAX_TEMP_DESYNC_FACTOR; -+} -+ -+#ifdef VIMAGE -+void -+ip6_destroy() -+{ -+ INIT_VNET_INET6(curvnet); -+ -+ nd6_destroy(); -+ callout_drain(&V_in6_tmpaddrtimer_ch); } -+#endif static void ip6_init2(void *dummy) @@ -15626,9 +15103,7 @@ /* This must be after route_init(), which is now SI_ORDER_THIRD */ SYSINIT(netinet6init2, SI_SUB_PROTO_DOMAIN, SI_ORDER_MIDDLE, ip6_init2, NULL); -+#ifndef VIMAGE extern struct route_in6 ip6_forward_rt; -+#endif void ip6_input(struct mbuf *m) @@ -16116,22 +15591,6 @@ #include #include -@@ -61,6 +63,7 @@ - #include - #include - #include -+#include - #ifdef IPSEC_DEBUG - #include - #else -@@ -68,6 +71,7 @@ - #endif - #endif /*IPSEC*/ - >>> TRUNCATED FOR MAIL (1000 lines) <<<