PERFORCE change 125967 for review
Ana Kukec
anchie at FreeBSD.org
Sun Sep 2 05:48:22 PDT 2007
http://perforce.freebsd.org/chv.cgi?CH=125967
Change 125967 by anchie at anchie_malimis on 2007/09/02 12:47:25
Virtualization of netinet6 integer variables.
Affected files ...
.. //depot/projects/vimage/src/sys/net/if_faith.c#2 edit
.. //depot/projects/vimage/src/sys/netinet/in_pcb.c#14 edit
.. //depot/projects/vimage/src/sys/netinet/tcp_input.c#21 edit
.. //depot/projects/vimage/src/sys/netinet6/frag6.c#9 edit
.. //depot/projects/vimage/src/sys/netinet6/icmp6.c#13 edit
.. //depot/projects/vimage/src/sys/netinet6/in6.c#11 edit
.. //depot/projects/vimage/src/sys/netinet6/in6_proto.c#11 edit
.. //depot/projects/vimage/src/sys/netinet6/in6_src.c#12 edit
.. //depot/projects/vimage/src/sys/netinet6/ip6_forward.c#9 edit
.. //depot/projects/vimage/src/sys/netinet6/ip6_input.c#20 edit
.. //depot/projects/vimage/src/sys/netinet6/ip6_mroute.c#8 edit
.. //depot/projects/vimage/src/sys/netinet6/ip6_output.c#10 edit
.. //depot/projects/vimage/src/sys/netinet6/ip6_var.h#7 edit
.. //depot/projects/vimage/src/sys/netinet6/nd6.c#17 edit
.. //depot/projects/vimage/src/sys/netinet6/nd6_nbr.c#9 edit
.. //depot/projects/vimage/src/sys/netinet6/nd6_rtr.c#7 edit
.. //depot/projects/vimage/src/sys/netinet6/sctp6_usrreq.c#17 edit
.. //depot/projects/vimage/src/sys/netinet6/vinet6.h#10 edit
.. //depot/projects/vimage/src/sys/netipsec/ipsec_input.c#9 edit
Differences ...
==== //depot/projects/vimage/src/sys/net/if_faith.c#2 (text+ko) ====
@@ -41,6 +41,7 @@
*/
#include "opt_inet.h"
#include "opt_inet6.h"
+#include "opt_vimage.h"
#include <sys/param.h>
#include <sys/systm.h>
@@ -54,6 +55,7 @@
#include <sys/queue.h>
#include <sys/types.h>
#include <sys/malloc.h>
+#include <sys/vimage.h>
#include <net/if.h>
#include <net/if_clone.h>
@@ -76,6 +78,7 @@
#include <netinet6/in6_var.h>
#include <netinet/ip6.h>
#include <netinet6/ip6_var.h>
+#include <netinet6/vinet6.h>
#endif
#define FAITHNAME "faith"
@@ -323,11 +326,12 @@
faithprefix(in6)
struct in6_addr *in6;
{
+ INIT_VNET_INET6(curvnet);
struct rtentry *rt;
struct sockaddr_in6 sin6;
int ret;
- if (ip6_keepfaith == 0)
+ if (V_ip6_keepfaith == 0)
return 0;
bzero(&sin6, sizeof(sin6));
==== //depot/projects/vimage/src/sys/netinet/in_pcb.c#14 (text+ko) ====
@@ -75,6 +75,7 @@
#ifdef INET6
#include <netinet/ip6.h>
#include <netinet6/ip6_var.h>
+#include <netinet6/vinet6.h>
#endif /* INET6 */
@@ -194,6 +195,7 @@
int
in_pcballoc(struct socket *so, struct inpcbinfo *pcbinfo)
{
+ INIT_VNET_INET6(curvnet);
struct inpcb *inp;
int error;
@@ -222,7 +224,7 @@
#ifdef INET6
if (INP_SOCKAF(so) == AF_INET6) {
inp->inp_vflag |= INP_IPV6PROTO;
- if (ip6_v6only)
+ if (V_ip6_v6only)
inp->inp_flags |= IN6P_IPV6_V6ONLY;
}
#endif
@@ -230,7 +232,7 @@
pcbinfo->ipi_count++;
so->so_pcb = (caddr_t)inp;
#ifdef INET6
- if (ip6_auto_flowlabel)
+ if (V_ip6_auto_flowlabel)
inp->inp_flags |= IN6P_AUTOFLOWLABEL;
#endif
INP_LOCK(inp);
==== //depot/projects/vimage/src/sys/netinet/tcp_input.c#21 (text+ko) ====
@@ -762,7 +762,7 @@
* handling - worse, they are not exactly the same.
* I believe 5.5.4 is the best one, so we follow 5.5.4.
*/
- if (isipv6 && !ip6_use_deprecated) {
+ if (isipv6 && !V_ip6_use_deprecated) {
struct in6_ifaddr *ia6;
if ((ia6 = ip6_getdstifaddr(m)) &&
==== //depot/projects/vimage/src/sys/netinet6/frag6.c#9 (text+ko) ====
@@ -95,9 +95,10 @@
static void
frag6_change(void *tag)
{
+ INIT_VNET_INET6(curvnet);
- ip6_maxfragpackets = nmbclusters / 4;
- ip6_maxfrags = nmbclusters / 4;
+ V_ip6_maxfragpackets = nmbclusters / 4;
+ V_ip6_maxfrags = nmbclusters / 4;
}
void
@@ -111,8 +112,8 @@
if (!IS_DEFAULT_VNET(curvnet))
return;
#endif
- ip6_maxfragpackets = nmbclusters / 4;
- ip6_maxfrags = nmbclusters / 4;
+ V_ip6_maxfragpackets = nmbclusters / 4;
+ V_ip6_maxfrags = nmbclusters / 4;
EVENTHANDLER_REGISTER(nmbclusters_change,
frag6_change, NULL, EVENTHANDLER_PRI_ANY);
@@ -227,9 +228,9 @@
* If maxfrag is 0, never accept fragments.
* If maxfrag is -1, accept all fragments without limitation.
*/
- if (ip6_maxfrags < 0)
+ if (V_ip6_maxfrags < 0)
;
- else if (V_frag6_nfrags >= (u_int)ip6_maxfrags)
+ else if (V_frag6_nfrags >= (u_int)V_ip6_maxfrags)
goto dropfrag;
for (q6 = V_ip6q.ip6q_next; q6 != &V_ip6q; q6 = q6->ip6q_next)
@@ -251,9 +252,9 @@
* If maxfragpackets is -1, accept all fragments without
* limitation.
*/
- if (ip6_maxfragpackets < 0)
+ if (V_ip6_maxfragpackets < 0)
;
- else if (V_frag6_nfragpackets >= (u_int)ip6_maxfragpackets)
+ else if (V_frag6_nfragpackets >= (u_int)V_ip6_maxfragpackets)
goto dropfrag;
V_frag6_nfragpackets++;
q6 = (struct ip6q *)malloc(sizeof(struct ip6q), M_FTABLE,
@@ -718,7 +719,7 @@
* (due to the limit being lowered), drain off
* enough to get down to the new limit.
*/
- while (V_frag6_nfragpackets > (u_int)ip6_maxfragpackets &&
+ while (V_frag6_nfragpackets > (u_int)V_ip6_maxfragpackets &&
V_ip6q.ip6q_prev) {
V_ip6stat.ip6s_fragoverflow++;
/* XXX in6_ifstat_inc(ifp, ifs6_reass_fail) */
==== //depot/projects/vimage/src/sys/netinet6/icmp6.c#13 (text+ko) ====
@@ -111,12 +111,10 @@
extern struct domain inet6domain;
-#ifndef VIMAGE
struct icmp6stat icmp6stat;
extern struct inpcbinfo ripcbinfo;
extern struct inpcbhead ripcb;
-#endif
extern int icmp6errppslim;
static int icmp6errpps_count = 0;
static struct timeval icmp6errppslim_last;
@@ -140,6 +138,7 @@
void
icmp6_init(void)
{
+ icmp6errpps_count = 0;
mld6_init();
}
@@ -2037,6 +2036,7 @@
void
icmp6_reflect(struct mbuf *m, size_t off)
{
+ INIT_VNET_INET6(curvnet);
struct ip6_hdr *ip6;
struct icmp6_hdr *icmp6;
struct in6_ifaddr *ia;
@@ -2169,7 +2169,7 @@
/* XXX: This may not be the outgoing interface */
ip6->ip6_hlim = ND_IFINFO(m->m_pkthdr.rcvif)->chlim;
} else
- ip6->ip6_hlim = ip6_defhlim;
+ ip6->ip6_hlim = V_ip6_defhlim;
icmp6->icmp6_cksum = 0;
icmp6->icmp6_cksum = in6_cksum(m, IPPROTO_ICMPV6,
@@ -2243,7 +2243,7 @@
return;
/* XXX if we are router, we don't update route by icmp6 redirect */
- if (ip6_forwarding)
+ if (V_ip6_forwarding)
goto freeit;
if (!icmp6_rediraccept)
goto freeit;
@@ -2440,7 +2440,7 @@
icmp6_errcount(&V_icmp6stat.icp6s_outerrhist, ND_REDIRECT, 0);
/* if we are not router, we don't send icmp6 redirect */
- if (!ip6_forwarding)
+ if (!V_ip6_forwarding)
goto fail;
/* sanity check */
==== //depot/projects/vimage/src/sys/netinet6/in6.c#11 (text+ko) ====
@@ -2050,6 +2050,7 @@
struct in6_ifaddr *
in6_ifawithifp(struct ifnet *ifp, struct in6_addr *dst)
{
+ INIT_VNET_INET6(curvnet);
int dst_scope = in6_addrscope(dst), blen = -1, tlen;
struct ifaddr *ifa;
struct in6_ifaddr *besta = 0;
@@ -2073,7 +2074,7 @@
if (((struct in6_ifaddr *)ifa)->ia6_flags & IN6_IFF_DETACHED)
continue;
if (((struct in6_ifaddr *)ifa)->ia6_flags & IN6_IFF_DEPRECATED) {
- if (ip6_use_deprecated)
+ if (V_ip6_use_deprecated)
dep[0] = (struct in6_ifaddr *)ifa;
continue;
}
@@ -2107,7 +2108,7 @@
if (((struct in6_ifaddr *)ifa)->ia6_flags & IN6_IFF_DETACHED)
continue;
if (((struct in6_ifaddr *)ifa)->ia6_flags & IN6_IFF_DEPRECATED) {
- if (ip6_use_deprecated)
+ if (V_ip6_use_deprecated)
dep[1] = (struct in6_ifaddr *)ifa;
continue;
}
==== //depot/projects/vimage/src/sys/netinet6/in6_proto.c#11 (text+ko) ====
@@ -83,6 +83,7 @@
#include <net/if.h>
#include <net/radix.h>
#include <net/route.h>
+#include <net/if_gif.h>
#include <netinet/in.h>
#include <netinet/in_systm.h>
@@ -348,6 +349,12 @@
extern int in6_detachhead(void **, int);
#endif
+static void
+ip6_test_init(void)
+{
+ printf("---> ip6_test_init() \n");
+}
+
struct domain inet6domain = {
.dom_family = AF_INET6,
.dom_name = "internet6",
@@ -361,7 +368,10 @@
.dom_rtoffset = offsetof(struct sockaddr_in6, sin6_addr) << 3,
.dom_maxrtkey = sizeof(struct sockaddr_in6),
.dom_ifattach = in6_domifattach,
- .dom_ifdetach = in6_domifdetach
+ .dom_ifdetach = in6_domifdetach,
+#ifdef VIMAGE
+ .dom_init = ip6_test_init
+#endif
};
DOMAIN_SET(inet6);
@@ -369,6 +379,7 @@
/*
* Internet configuration info
*/
+#ifndef VIMAGE
#ifndef IPV6FORWARDING
#ifdef GATEWAY6
#define IPV6FORWARDING 1 /* forward IP6 packets not for us */
@@ -404,6 +415,7 @@
#ifdef IPSTEALTH
int ip6stealth = 0;
#endif
+#endif /* !VIMAGE */
/* icmp6 */
/*
@@ -492,38 +504,38 @@
return (error);
}
-SYSCTL_INT(_net_inet6_ip6, IPV6CTL_FORWARDING,
- forwarding, CTLFLAG_RW, &ip6_forwarding, 0, "");
-SYSCTL_INT(_net_inet6_ip6, IPV6CTL_SENDREDIRECTS,
- redirect, CTLFLAG_RW, &ip6_sendredirects, 0, "");
-SYSCTL_INT(_net_inet6_ip6, IPV6CTL_DEFHLIM,
- hlim, CTLFLAG_RW, &ip6_defhlim, 0, "");
+SYSCTL_V_INT(V_NET, vnet_inet6, _net_inet6_ip6, IPV6CTL_FORWARDING,
+ forwarding, CTLFLAG_RW, ip6_forwarding, 0, "");
+SYSCTL_V_INT(V_NET, vnet_inet6, _net_inet6_ip6, IPV6CTL_SENDREDIRECTS,
+ redirect, CTLFLAG_RW, ip6_sendredirects, 0, "");
+SYSCTL_V_INT(V_NET, vnet_inet6, _net_inet6_ip6, IPV6CTL_DEFHLIM,
+ hlim, CTLFLAG_RW, ip6_defhlim, 0, "");
SYSCTL_V_STRUCT(V_NET, vnet_inet6, _net_inet6_ip6, IPV6CTL_STATS, stats,
CTLFLAG_RD, ip6stat, ip6stat, "");
-SYSCTL_INT(_net_inet6_ip6, IPV6CTL_MAXFRAGPACKETS,
- maxfragpackets, CTLFLAG_RW, &ip6_maxfragpackets, 0, "");
-SYSCTL_INT(_net_inet6_ip6, IPV6CTL_ACCEPT_RTADV,
- accept_rtadv, CTLFLAG_RW, &ip6_accept_rtadv, 0, "");
-SYSCTL_INT(_net_inet6_ip6, IPV6CTL_KEEPFAITH,
- keepfaith, CTLFLAG_RW, &ip6_keepfaith, 0, "");
-SYSCTL_INT(_net_inet6_ip6, IPV6CTL_LOG_INTERVAL,
- log_interval, CTLFLAG_RW, &ip6_log_interval, 0, "");
-SYSCTL_INT(_net_inet6_ip6, IPV6CTL_HDRNESTLIMIT,
- hdrnestlimit, CTLFLAG_RW, &ip6_hdrnestlimit, 0, "");
-SYSCTL_INT(_net_inet6_ip6, IPV6CTL_DAD_COUNT,
- dad_count, CTLFLAG_RW, &ip6_dad_count, 0, "");
-SYSCTL_INT(_net_inet6_ip6, IPV6CTL_AUTO_FLOWLABEL,
- auto_flowlabel, CTLFLAG_RW, &ip6_auto_flowlabel, 0, "");
-SYSCTL_INT(_net_inet6_ip6, IPV6CTL_DEFMCASTHLIM,
- defmcasthlim, CTLFLAG_RW, &ip6_defmcasthlim, 0, "");
-SYSCTL_INT(_net_inet6_ip6, IPV6CTL_GIF_HLIM,
- gifhlim, CTLFLAG_RW, &ip6_gif_hlim, 0, "");
+SYSCTL_V_INT(V_NET, vnet_inet6, _net_inet6_ip6, IPV6CTL_MAXFRAGPACKETS,
+ maxfragpackets, CTLFLAG_RW, ip6_maxfragpackets, 0, "");
+SYSCTL_V_INT(V_NET, vnet_inet6, _net_inet6_ip6, IPV6CTL_ACCEPT_RTADV,
+ accept_rtadv, CTLFLAG_RW, ip6_accept_rtadv, 0, "");
+SYSCTL_V_INT(V_NET, vnet_inet6, _net_inet6_ip6, IPV6CTL_KEEPFAITH,
+ keepfaith, CTLFLAG_RW, ip6_keepfaith, 0, "");
+SYSCTL_V_INT(V_NET, vnet_inet6, _net_inet6_ip6, IPV6CTL_LOG_INTERVAL,
+ log_interval, CTLFLAG_RW, ip6_log_interval, 0, "");
+SYSCTL_V_INT(V_NET, vnet_inet6, _net_inet6_ip6, IPV6CTL_HDRNESTLIMIT,
+ hdrnestlimit, CTLFLAG_RW, ip6_hdrnestlimit, 0, "");
+SYSCTL_V_INT(V_NET, vnet_inet6, _net_inet6_ip6, IPV6CTL_DAD_COUNT,
+ dad_count, CTLFLAG_RW, ip6_dad_count, 0, "");
+SYSCTL_V_INT(V_NET, vnet_inet6, _net_inet6_ip6, IPV6CTL_AUTO_FLOWLABEL,
+ auto_flowlabel, CTLFLAG_RW, ip6_auto_flowlabel, 0, "");
+SYSCTL_V_INT(V_NET, vnet_inet6, _net_inet6_ip6, IPV6CTL_DEFMCASTHLIM,
+ defmcasthlim, CTLFLAG_RW, ip6_defmcasthlim, 0, "");
+SYSCTL_V_INT(V_NET, vnet_gif, _net_inet6_ip6, IPV6CTL_GIF_HLIM,
+ gifhlim, CTLFLAG_RW, ip6_gif_hlim, 0, "");
SYSCTL_STRING(_net_inet6_ip6, IPV6CTL_KAME_VERSION,
kame_version, CTLFLAG_RD, __KAME_VERSION, 0, "");
-SYSCTL_INT(_net_inet6_ip6, IPV6CTL_USE_DEPRECATED,
- use_deprecated, CTLFLAG_RW, &ip6_use_deprecated, 0, "");
-SYSCTL_INT(_net_inet6_ip6, IPV6CTL_RR_PRUNE,
- rr_prune, CTLFLAG_RW, &ip6_rr_prune, 0, "");
+SYSCTL_V_INT(V_NET, vnet_inet6, _net_inet6_ip6, IPV6CTL_USE_DEPRECATED,
+ use_deprecated, CTLFLAG_RW, ip6_use_deprecated, 0, "");
+SYSCTL_V_INT(V_NET, vnet_inet6, _net_inet6_ip6, IPV6CTL_RR_PRUNE,
+ rr_prune, CTLFLAG_RW, ip6_rr_prune, 0, "");
SYSCTL_INT(_net_inet6_ip6, IPV6CTL_USETEMPADDR,
use_tempaddr, CTLFLAG_RW, &ip6_use_tempaddr, 0, "");
SYSCTL_OID(_net_inet6_ip6, IPV6CTL_TEMPPLTIME, temppltime,
@@ -532,8 +544,8 @@
SYSCTL_OID(_net_inet6_ip6, IPV6CTL_TEMPVLTIME, tempvltime,
CTLTYPE_INT|CTLFLAG_RW, &ip6_temp_valid_lifetime, 0,
sysctl_ip6_tempvltime, "I", "");
-SYSCTL_INT(_net_inet6_ip6, IPV6CTL_V6ONLY,
- v6only, CTLFLAG_RW, &ip6_v6only, 0, "");
+SYSCTL_V_INT(V_NET, vnet_inet6, _net_inet6_ip6, IPV6CTL_V6ONLY,
+ v6only, CTLFLAG_RW, ip6_v6only, 0, "");
#ifndef VIMAGE
TUNABLE_INT("net.inet6.ip6.auto_linklocal", &ip6_auto_linklocal);
#endif
@@ -545,13 +557,13 @@
prefer_tempaddr, CTLFLAG_RW, &ip6_prefer_tempaddr, 0, "");
SYSCTL_INT(_net_inet6_ip6, IPV6CTL_USE_DEFAULTZONE,
use_defaultzone, CTLFLAG_RW, &ip6_use_defzone, 0,"");
-SYSCTL_INT(_net_inet6_ip6, IPV6CTL_MAXFRAGS,
- maxfrags, CTLFLAG_RW, &ip6_maxfrags, 0, "");
-SYSCTL_INT(_net_inet6_ip6, IPV6CTL_MCAST_PMTU,
- mcast_pmtu, CTLFLAG_RW, &ip6_mcast_pmtu, 0, "");
+SYSCTL_V_INT(V_NET, vnet_inet6, _net_inet6_ip6, IPV6CTL_MAXFRAGS,
+ maxfrags, CTLFLAG_RW, ip6_maxfrags, 0, "");
+SYSCTL_V_INT(V_NET, vnet_inet6, _net_inet6_ip6, IPV6CTL_MCAST_PMTU,
+ mcast_pmtu, CTLFLAG_RW, ip6_mcast_pmtu, 0, "");
#ifdef IPSTEALTH
-SYSCTL_INT(_net_inet6_ip6, IPV6CTL_STEALTH, stealth, CTLFLAG_RW,
- &ip6stealth, 0, "");
+SYSCTL_V_INT(V_NET, vnet_inet6, _net_inet6_ip6, IPV6CTL_STEALTH, stealth, CTLFLAG_RW,
+ ip6stealth, 0, "");
#endif
/* net.inet6.icmp6 */
==== //depot/projects/vimage/src/sys/netinet6/in6_src.c#12 (text+ko) ====
@@ -281,7 +281,7 @@
(IN6_IFF_NOTREADY | IN6_IFF_ANYCAST | IN6_IFF_DETACHED))) {
continue;
}
- if (!ip6_use_deprecated && IFA6_IS_DEPRECATED(ia))
+ if (!V_ip6_use_deprecated && IFA6_IS_DEPRECATED(ia))
continue;
/* Rule 1: Prefer same address */
@@ -719,6 +719,7 @@
int
in6_selecthlim(struct in6pcb *in6p, struct ifnet *ifp)
{
+ INIT_VNET_INET6(curvnet);
if (in6p && in6p->in6p_hops >= 0)
return (in6p->in6p_hops);
@@ -739,9 +740,9 @@
if (lifp)
return (ND_IFINFO(lifp)->chlim);
} else
- return (ip6_defhlim);
+ return (V_ip6_defhlim);
}
- return (ip6_defhlim);
+ return (V_ip6_defhlim);
}
/*
==== //depot/projects/vimage/src/sys/netinet6/ip6_forward.c#9 (text+ko) ====
@@ -140,8 +140,8 @@
IN6_IS_ADDR_UNSPECIFIED(&ip6->ip6_src)) {
V_ip6stat.ip6s_cantforward++;
/* XXX in6_ifstat_inc(rt->rt_ifp, ifs6_in_discard) */
- if (ip6_log_time + ip6_log_interval < time_second) {
- ip6_log_time = time_second;
+ if (V_ip6_log_time + V_ip6_log_interval < time_second) {
+ V_ip6_log_time = time_second;
log(LOG_DEBUG,
"cannot forward "
"from %s to %s nxt %d received on %s\n",
@@ -155,7 +155,7 @@
}
#ifdef IPSTEALTH
- if (!ip6stealth) {
+ if (!V_ip6stealth) {
#endif
if (ip6->ip6_hlim <= IPV6_HLIMDEC) {
/* XXX in6_ifstat_inc(rt->rt_ifp, ifs6_in_discard) */
@@ -442,8 +442,8 @@
V_ip6stat.ip6s_badscope++;
in6_ifstat_inc(rt->rt_ifp, ifs6_in_discard);
- if (ip6_log_time + ip6_log_interval < time_second) {
- ip6_log_time = time_second;
+ if (V_ip6_log_time + V_ip6_log_interval < time_second) {
+ V_ip6_log_time = time_second;
log(LOG_DEBUG,
"cannot forward "
"src %s, dst %s, nxt %d, rcvif %s, outif %s\n",
@@ -529,7 +529,7 @@
* Also, don't send redirect if forwarding using a route
* modified by a redirect.
*/
- if (ip6_sendredirects && rt->rt_ifp == m->m_pkthdr.rcvif && !srcrt &&
+ if (V_ip6_sendredirects && rt->rt_ifp == m->m_pkthdr.rcvif && !srcrt &&
#ifdef IPSEC
!ipsecrt &&
#endif /* IPSEC */
==== //depot/projects/vimage/src/sys/netinet6/ip6_input.c#20 (text+ko) ====
@@ -88,6 +88,7 @@
#include <net/route.h>
#include <net/netisr.h>
#include <net/pfil.h>
+#include <net/if_gif.h>
#include <netinet/in.h>
#include <netinet/in_systm.h>
@@ -158,6 +159,20 @@
SYSINIT(inet6, SI_SUB_PROTO_BEGIN, SI_ORDER_FIRST, vnet_inet6_register, 0);
#endif /* VIMAGE */
+#ifdef VIMAGE
+#ifndef IPV6FORWARDING
+#ifdef GATEWAY6
+#define IPV6FORWARDING 1 /* forward IP6 packets not for us */
+#else
+#define IPV6FORWARDING 0 /* don't forward IP6 packets not for us */
+#endif /* !GATEWAY6 */
+#endif /* !IPV6FORWARDING */
+
+#ifndef IPV6_SENDREDIRECTS
+#define IPV6_SENDREDIRECTS 1
+#endif
+#endif /* !VIMAGE */
+
/*
* IP6 initialization: fill in IP6 protocol switch table.
* All protocols not implemented in kernel go to raw IP6 protocol handler.
@@ -165,10 +180,36 @@
void
ip6_init(void)
{
+ printf("---> ip6_init() \n");
INIT_VNET_INET6(curvnet);
+ INIT_VNET_GIF(curvnet);
struct ip6protosw *pr;
int i;
+ V_ip6_forwarding = IPV6FORWARDING; /* act as router? */
+ V_ip6_sendredirects = IPV6_SENDREDIRECTS;
+ V_ip6_defhlim = IPV6_DEFHLIM;
+ V_ip6_defmcasthlim = IPV6_DEFAULT_MULTICAST_HOPS;
+ V_ip6_accept_rtadv = 0; /* "IPV6FORWARDING ? 0 : 1" is dangerous */
+ V_ip6_maxfragpackets = 0; /* initialized in frag6.c:frag6_init() */
+ V_ip6_maxfrags = 0; /* initialized in frag6.c:frag6_init() */
+ V_ip6_log_interval = 5;
+ V_ip6_hdrnestlimit = 15; /* How many header options will we process? */
+ V_ip6_dad_count = 1; /* DupAddrDetectionTransmits */
+ V_ip6_auto_flowlabel = 1;
+ V_ip6_gif_hlim = 0;
+ V_ip6_use_deprecated = 1; /* allow deprecated addr (RFC2462 5.5.4) */
+ V_ip6_rr_prune = 5; /* router renumbering prefix
+ * walk list every 5 sec. */
+ V_ip6_mcast_pmtu = 0; /* enable pMTU discovery for multicast? */
+ V_ip6_v6only = 1;
+
+ V_ip6_keepfaith = 0;
+ V_ip6_log_time = (time_t)0L;
+ #ifdef IPSTEALTH
+ V_ip6stealth = 0;
+ #endif
+
#ifdef IP6_AUTO_LINKLOCAL
V_ip6_auto_linklocal = IP6_AUTO_LINKLOCAL;
#else
@@ -609,7 +650,7 @@
/*
* FAITH (Firewall Aided Internet Translator)
*/
- if (ip6_keepfaith) {
+ if (V_ip6_keepfaith) {
if (V_ip6_forward_rt.ro_rt && V_ip6_forward_rt.ro_rt->rt_ifp
&& V_ip6_forward_rt.ro_rt->rt_ifp->if_type == IFT_FAITH) {
/* XXX do we need more sanity checks? */
@@ -623,7 +664,7 @@
* Now there is no reason to process the packet if it's not our own
* and we're not a router.
*/
- if (!ip6_forwarding) {
+ if (!V_ip6_forwarding) {
V_ip6stat.ip6s_cantforward++;
in6_ifstat_inc(m->m_pkthdr.rcvif, ifs6_in_discard);
goto bad;
@@ -709,7 +750,7 @@
* case we should pass the packet to the multicast routing
* daemon.
*/
- if (rtalert != ~0 && ip6_forwarding) {
+ if (rtalert != ~0 && V_ip6_forwarding) {
switch (rtalert) {
case IP6OPT_RTALERT_MLD:
ours = 1;
@@ -797,7 +838,7 @@
nest = 0;
while (nxt != IPPROTO_DONE) {
- if (ip6_hdrnestlimit && (++nest > ip6_hdrnestlimit)) {
+ if (V_ip6_hdrnestlimit && (++nest > V_ip6_hdrnestlimit)) {
V_ip6stat.ip6s_toomanyhdr++;
goto bad;
}
@@ -1096,6 +1137,7 @@
void
ip6_savecontrol(struct inpcb *in6p, struct mbuf *m, struct mbuf **mp)
{
+ printf("---> tcp6_input() \n");
#define IS2292(x, y) ((in6p->in6p_flags & IN6P_RFC2292) ? (x) : (y))
struct ip6_hdr *ip6 = mtod(m, struct ip6_hdr *);
==== //depot/projects/vimage/src/sys/netinet6/ip6_mroute.c#8 (text+ko) ====
@@ -1039,8 +1039,8 @@
*/
if (IN6_IS_ADDR_UNSPECIFIED(&ip6->ip6_src)) {
V_ip6stat.ip6s_cantforward++;
- if (ip6_log_time + ip6_log_interval < time_second) {
- ip6_log_time = time_second;
+ if (V_ip6_log_time + V_ip6_log_interval < time_second) {
+ V_ip6_log_time = time_second;
log(LOG_DEBUG,
"cannot forward "
"from %s to %s nxt %d received on %s\n",
@@ -1510,6 +1510,7 @@
static void
phyint_send(struct ip6_hdr *ip6, struct mif6 *mifp, struct mbuf *m)
{
+ INIT_VNET_INET6(curvnet);
struct mbuf *mb_copy;
struct ifnet *ifp = mifp->m6_ifp;
int error = 0;
@@ -1599,7 +1600,7 @@
* various router may notify pMTU in multicast, which can be
* a DDoS to a router
*/
- if (ip6_mcast_pmtu)
+ if (V_ip6_mcast_pmtu)
icmp6_error(mb_copy, ICMP6_PACKET_TOO_BIG, 0, linkmtu);
else {
#ifdef MRT6DEBUG
==== //depot/projects/vimage/src/sys/netinet6/ip6_output.c#10 (text+ko) ====
@@ -522,7 +522,7 @@
if (im6o != NULL)
ip6->ip6_hlim = im6o->im6o_multicast_hlim;
else
- ip6->ip6_hlim = ip6_defmcasthlim;
+ ip6->ip6_hlim = V_ip6_defmcasthlim;
}
#ifdef IPSEC
@@ -2414,6 +2414,7 @@
ip6_setmoptions(int optname, struct ip6_moptions **im6op, struct mbuf *m)
{
INIT_VNET_NET(curvnet);
+ INIT_VNET_INET6(curvnet);
int error = 0;
u_int loop, ifindex;
struct ipv6_mreq *mreq;
@@ -2435,7 +2436,7 @@
return (ENOBUFS);
*im6op = im6o;
im6o->im6o_multicast_ifp = NULL;
- im6o->im6o_multicast_hlim = ip6_defmcasthlim;
+ im6o->im6o_multicast_hlim = V_ip6_defmcasthlim;
im6o->im6o_multicast_loop = IPV6_DEFAULT_MULTICAST_LOOP;
LIST_INIT(&im6o->im6o_memberships);
}
@@ -2477,7 +2478,7 @@
if (optval < -1 || optval >= 256)
error = EINVAL;
else if (optval == -1)
- im6o->im6o_multicast_hlim = ip6_defmcasthlim;
+ im6o->im6o_multicast_hlim = V_ip6_defmcasthlim;
else
im6o->im6o_multicast_hlim = optval;
break;
@@ -2700,7 +2701,7 @@
* If all options have default values, no need to keep the mbuf.
*/
if (im6o->im6o_multicast_ifp == NULL &&
- im6o->im6o_multicast_hlim == ip6_defmcasthlim &&
+ im6o->im6o_multicast_hlim == V_ip6_defmcasthlim &&
im6o->im6o_multicast_loop == IPV6_DEFAULT_MULTICAST_LOOP &&
im6o->im6o_memberships.lh_first == NULL) {
free(*im6op, M_IP6MOPTS);
@@ -2716,6 +2717,7 @@
static int
ip6_getmoptions(int optname, struct ip6_moptions *im6o, struct mbuf **mp)
{
+ INIT_VNET_INET6(curvnet);
u_int *hlim, *loop, *ifindex;
*mp = m_get(M_TRYWAIT, MT_HEADER); /* XXX */
@@ -2735,7 +2737,7 @@
hlim = mtod(*mp, u_int *);
(*mp)->m_len = sizeof(u_int);
if (im6o == NULL)
- *hlim = ip6_defmcasthlim;
+ *hlim = V_ip6_defmcasthlim;
else
*hlim = im6o->im6o_multicast_hlim;
return (0);
@@ -2744,7 +2746,7 @@
loop = mtod(*mp, u_int *);
(*mp)->m_len = sizeof(u_int);
if (im6o == NULL)
- *loop = ip6_defmcasthlim;
+ *loop = V_ip6_defmcasthlim;
else
*loop = im6o->im6o_multicast_loop;
return (0);
==== //depot/projects/vimage/src/sys/netinet6/ip6_var.h#7 (text+ko) ====
@@ -280,24 +280,29 @@
#ifndef VIMAGE
extern struct ip6stat ip6stat; /* statistics */
-#endif
extern int ip6_defhlim; /* default hop limit */
extern int ip6_defmcasthlim; /* default multicast hop limit */
extern int ip6_forwarding; /* act as router? */
+#endif
extern int ip6_forward_srcrt; /* forward src-routed? */
+#ifndef VIMAGE
extern int ip6_gif_hlim; /* Hop limit for gif encap packet */
extern int ip6_use_deprecated; /* allow deprecated addr as source */
extern int ip6_rr_prune; /* router renumbering prefix
* walk list every 5 sec. */
extern int ip6_mcast_pmtu; /* enable pMTU discovery for multicast? */
extern int ip6_v6only;
+#endif
extern struct socket *ip6_mrouter; /* multicast routing daemon */
+#ifndef VIMAGE
extern int ip6_sendredirects; /* send IP redirects when forwarding? */
extern int ip6_maxfragpackets; /* Maximum packets in reassembly queue */
extern int ip6_maxfrags; /* Maximum fragments in reassembly queue */
+#endif
extern int ip6_sourcecheck; /* Verify source interface */
extern int ip6_sourcecheck_interval; /* Interval between log messages */
+#ifndef VIMAGE
extern int ip6_accept_rtadv; /* Acts as a host not a router */
extern int ip6_keepfaith; /* Firewall Aided Internet Translator */
extern int ip6_log_interval;
@@ -306,6 +311,7 @@
extern int ip6_dad_count; /* DupAddrDetectionTransmits */
extern int ip6_auto_flowlabel;
+#endif
extern int ip6_auto_linklocal;
extern int ip6_anonportmin; /* minimum ephemeral port */
==== //depot/projects/vimage/src/sys/netinet6/nd6.c#17 (text+ko) ====
@@ -800,7 +800,7 @@
if (V_nd6_defifindex == ifp->if_index)
nd6_setdefaultiface(0);
- if (!ip6_forwarding && ip6_accept_rtadv) { /* XXX: too restrictive? */
+ if (!V_ip6_forwarding && V_ip6_accept_rtadv) { /* XXX: too restrictive? */
/* refresh default router list */
defrouter_select();
}
@@ -995,7 +995,7 @@
* XXX: we restrict the condition to hosts, because routers usually do
* not have the "default router list".
*/
- if (!ip6_forwarding && TAILQ_FIRST(&V_nd_defrouter) == NULL &&
+ if (!V_ip6_forwarding && TAILQ_FIRST(&V_nd_defrouter) == NULL &&
V_nd6_defifindex == ifp->if_index) {
return (1);
}
@@ -1034,6 +1034,7 @@
static struct llinfo_nd6 *
nd6_free(struct rtentry *rt, int gc)
{
+ INIT_VNET_INET6(curvnet);
struct llinfo_nd6 *ln = (struct llinfo_nd6 *)rt->rt_llinfo, *next;
struct in6_addr in6 = ((struct sockaddr_in6 *)rt_key(rt))->sin6_addr;
struct nd_defrouter *dr;
@@ -1046,7 +1047,7 @@
/* cancel timer */
nd6_llinfo_settimer(ln, -1);
- if (!ip6_forwarding) {
+ if (!V_ip6_forwarding) {
int s;
s = splnet();
dr = defrouter_lookup(&((struct sockaddr_in6 *)rt_key(rt))->sin6_addr,
@@ -1677,6 +1678,7 @@
nd6_cache_lladdr(struct ifnet *ifp, struct in6_addr *from, char *lladdr,
int lladdrlen, int type, int code)
{
+ INIT_VNET_INET6(curvnet);
struct rtentry *rt = NULL;
struct llinfo_nd6 *ln = NULL;
int is_newentry;
@@ -1900,7 +1902,7 @@
* for those are not autoconfigured hosts, we explicitly avoid such
* cases for safety.
*/
- if (do_update && ln->ln_router && !ip6_forwarding && ip6_accept_rtadv)
+ if (do_update && ln->ln_router && !V_ip6_forwarding && V_ip6_accept_rtadv)
defrouter_select();
return rt;
==== //depot/projects/vimage/src/sys/netinet6/nd6_nbr.c#9 (text+ko) ====
@@ -304,7 +304,7 @@
goto bad;
nd6_na_output(ifp, &in6_all, &taddr6,
((anycast || proxy || !tlladdr) ? 0 : ND_NA_FLAG_OVERRIDE) |
- (ip6_forwarding ? ND_NA_FLAG_ROUTER : 0),
+ (V_ip6_forwarding ? ND_NA_FLAG_ROUTER : 0),
tlladdr, (struct sockaddr *)proxydl);
goto freeit;
}
@@ -314,7 +314,7 @@
nd6_na_output(ifp, &saddr6, &taddr6,
((anycast || proxy || !tlladdr) ? 0 : ND_NA_FLAG_OVERRIDE) |
- (ip6_forwarding ? ND_NA_FLAG_ROUTER : 0) | ND_NA_FLAG_SOLICITED,
+ (V_ip6_forwarding ? ND_NA_FLAG_ROUTER : 0) | ND_NA_FLAG_SOLICITED,
tlladdr, (struct sockaddr *)proxydl);
freeit:
m_freem(m);
@@ -802,7 +802,7 @@
dr = defrouter_lookup(in6, ifp);
if (dr)
defrtrlist_del(dr);
- else if (!ip6_forwarding) {
+ else if (!V_ip6_forwarding) {
/*
* Even if the neighbor is not in the default
* router list, the neighbor may be used
@@ -1132,7 +1132,7 @@
ia->ia6_flags &= ~IN6_IFF_TENTATIVE;
return;
}
- if (!ip6_dad_count) {
+ if (!V_ip6_dad_count) {
ia->ia6_flags &= ~IN6_IFF_TENTATIVE;
return;
}
@@ -1172,7 +1172,7 @@
*/
dp->dad_ifa = ifa;
IFAREF(ifa); /* just for safety */
- dp->dad_count = ip6_dad_count;
+ dp->dad_count = V_ip6_dad_count;
dp->dad_ns_icount = dp->dad_na_icount = 0;
dp->dad_ns_ocount = dp->dad_ns_tcount = 0;
if (delay == 0) {
==== //depot/projects/vimage/src/sys/netinet6/nd6_rtr.c#7 (text+ko) ====
@@ -133,7 +133,7 @@
char ip6bufs[INET6_ADDRSTRLEN], ip6bufd[INET6_ADDRSTRLEN];
/* If I'm not a router, ignore it. */
- if (ip6_accept_rtadv != 0 || ip6_forwarding != 1)
+ if (V_ip6_accept_rtadv != 0 || V_ip6_forwarding != 1)
goto freeit;
/* Sanity checks */
@@ -223,7 +223,7 @@
* the system-wide variable allows the acceptance, and
* per-interface variable allows RAs on the receiving interface.
*/
- if (ip6_accept_rtadv == 0)
+ if (V_ip6_accept_rtadv == 0)
goto freeit;
if (!(ndi->flags & ND6_IFF_ACCEPT_RTADV))
goto freeit;
@@ -561,7 +561,7 @@
* Flush all the routing table entries that use the router
* as a next hop.
*/
- if (!ip6_forwarding && ip6_accept_rtadv) /* XXX: better condition? */
+ if (!V_ip6_forwarding && V_ip6_accept_rtadv) /* XXX: better condition? */
rt6_flush(&dr->rtaddr, dr->ifp);
if (dr->installed) {
@@ -627,10 +627,10 @@
* if the node is not an autoconfigured host, we explicitly exclude
* such cases here for safety.
*/
- if (ip6_forwarding || !ip6_accept_rtadv) {
+ if (V_ip6_forwarding || !V_ip6_accept_rtadv) {
nd6log((LOG_WARNING,
"defrouter_select: called unexpectedly (forwarding=%d, "
- "accept_rtadv=%d)\n", ip6_forwarding, ip6_accept_rtadv));
+ "accept_rtadv=%d)\n", V_ip6_forwarding, V_ip6_accept_rtadv));
splx(s);
return;
}
==== //depot/projects/vimage/src/sys/netinet6/sctp6_usrreq.c#17 (text+ko) ====
@@ -31,14 +31,17 @@
#include <sys/cdefs.h>
__FBSDID("$FreeBSD: src/sys/netinet6/sctp6_usrreq.c,v 1.38 2007/08/27 05:19:48 rrs Exp $");
+#include "opt_vimage.h"
#include <netinet/sctp_os.h>
#include <sys/proc.h>
+#include <sys/vimage.h>
#include <netinet/sctp_pcb.h>
#include <netinet/sctp_header.h>
#include <netinet/sctp_var.h>
#if defined(INET6)
#include <netinet6/sctp6_var.h>
+#include <netinet6/vinet6.h>
#endif
#include <netinet/sctp_sysctl.h>
#include <netinet/sctp_output.h>
@@ -664,6 +667,7 @@
sctp6_send(struct socket *so, int flags, struct mbuf *m, struct sockaddr *addr,
struct mbuf *control, struct thread *p)
{
+ INIT_VNET_INET6(curvnet);
struct sctp_inpcb *inp;
struct inpcb *in_inp;
struct in6pcb *inp6;
@@ -720,7 +724,7 @@
}
}
if (IN6_IS_ADDR_V4MAPPED(&sin6->sin6_addr)) {
- if (!ip6_v6only) {
+ if (!V_ip6_v6only) {
struct sockaddr_in sin;
/* convert v4-mapped into v4 addr and send */
@@ -776,6 +780,7 @@
static int
sctp6_connect(struct socket *so, struct sockaddr *addr, struct thread *p)
{
+ INIT_VNET_INET6(curvnet);
uint32_t vrf_id;
int error = 0;
struct sctp_inpcb *inp;
@@ -851,7 +856,7 @@
}
}
if (IN6_IS_ADDR_V4MAPPED(&sin6->sin6_addr)) {
- if (!ip6_v6only) {
+ if (!V_ip6_v6only) {
/* convert v4-mapped into v4 addr */
in6_sin6_2_sin((struct sockaddr_in *)&ss, sin6);
addr = (struct sockaddr *)&ss;
==== //depot/projects/vimage/src/sys/netinet6/vinet6.h#10 (text+ko) ====
@@ -90,6 +90,29 @@
TAILQ_HEAD(, dadq) _dadq;
int _dad_init;
+
+ //int _icmp6errppslim;
+ //int _icmp6errpps_count;
+ //int _icmp6_nodeinfo;
+
+ int _ip6_forwarding;
+ int _ip6_sendredirects;
+ int _ip6_defhlim;
+ int _ip6_defmcasthlim;
+ int _ip6_accept_rtadv;
+ int _ip6_maxfragpackets;
+ int _ip6_maxfrags;
+ int _ip6_log_interval;
+ int _ip6_hdrnestlimit;
+ int _ip6_dad_count;
+ int _ip6_auto_flowlabel;
+ int _ip6_use_deprecated;
+ int _ip6_rr_prune;
+ int _ip6_mcast_pmtu;
+ int _ip6_v6only;
+ int _ip6_keepfaith;
+ int _ip6stealth;
+ time_t _ip6_log_time;
};
#endif
@@ -134,4 +157,27 @@
#define V_dadq VNET_INET6(dadq)
#define V_dad_init VNET_INET6(dad_init)
+//#define V_icmp6errppslim VNET_INET6(icmp6errppslim)
+//#define V_icmp6errpps_count VNET_INET6(icmp6errpps_count)
+//#define V_icmp6_nodeinfo VNET_INET6(icmp6_nodeinfo)
+
+#define V_ip6_forwarding VNET_INET6(ip6_forwarding)
+#define V_ip6_sendredirects VNET_INET6(ip6_sendredirects)
+#define V_ip6_defhlim VNET_INET6(ip6_defhlim)
+#define V_ip6_defmcasthlim VNET_INET6(ip6_defmcasthlim)
+#define V_ip6_accept_rtadv VNET_INET6(ip6_accept_rtadv)
+#define V_ip6_maxfragpackets VNET_INET6(ip6_maxfragpackets)
+#define V_ip6_maxfrags VNET_INET6(ip6_maxfrags)
+#define V_ip6_log_interval VNET_INET6(ip6_log_interval)
+#define V_ip6_hdrnestlimit VNET_INET6(ip6_hdrnestlimit)
>>> TRUNCATED FOR MAIL (1000 lines) <<<
More information about the p4-projects
mailing list