Signed-off-by: Charles Myers <charles.my...@spirent.com>
---
 Makefile                             | 27 ++++++++++++++++++-
 bsd/net.cc                           | 23 +++++++++++++++-
 bsd/porting/netport.h                |  4 +++
 bsd/sys/dev/xen/netfront/netfront.cc |  4 +++
 conf/base.mk                         |  5 ++++
 include/api/netinet/in.h             | 52 +++---------------------------------
 6 files changed, 64 insertions(+), 51 deletions(-)

diff --git a/Makefile b/Makefile
index d5b6fda..317e727 100644
--- a/Makefile
+++ b/Makefile
@@ -347,7 +347,7 @@ $(out)/bsd/%.o: INCLUDES += -isystem bsd/
 # for machine/
 $(out)/bsd/%.o: INCLUDES += -isystem bsd/$(arch)
 
-configuration-defines = conf-preempt conf-debug_memory conf-logger_debug
+configuration-defines = conf-preempt conf-debug_memory conf-logger_debug 
conf-INET6
 
 configuration = $(foreach cf,$(configuration-defines), \
                       -D$(cf:conf-%=CONF_%)=$($(cf)))
@@ -611,6 +611,31 @@ bsd += bsd/sys/netinet/cc/cc_cubic.o
 bsd += bsd/sys/netinet/cc/cc_htcp.o
 bsd += bsd/sys/netinet/cc/cc_newreno.o
 bsd += bsd/sys/netinet/arpcache.o
+ifeq ($(conf-INET6), 1)
+bsd += bsd/sys/netinet6/dest6.o
+bsd += bsd/sys/netinet6/frag6.o
+bsd += bsd/sys/netinet6/icmp6.o
+bsd += bsd/sys/netinet6/in6.o
+bsd += bsd/sys/netinet6/in6_cksum.o
+bsd += bsd/sys/netinet6/in6_ifattach.o
+bsd += bsd/sys/netinet6/in6_mcast.o
+bsd += bsd/sys/netinet6/in6_pcb.o
+bsd += bsd/sys/netinet6/in6_proto.o
+bsd += bsd/sys/netinet6/in6_rmx.o
+bsd += bsd/sys/netinet6/in6_src.o
+bsd += bsd/sys/netinet6/ip6_forward.o
+bsd += bsd/sys/netinet6/ip6_id.o
+bsd += bsd/sys/netinet6/ip6_input.o
+bsd += bsd/sys/netinet6/ip6_output.o
+bsd += bsd/sys/netinet6/mld6.o
+bsd += bsd/sys/netinet6/nd6.o
+bsd += bsd/sys/netinet6/nd6_nbr.o
+bsd += bsd/sys/netinet6/nd6_rtr.o
+bsd += bsd/sys/netinet6/raw_ip6.o
+bsd += bsd/sys/netinet6/route6.o
+bsd += bsd/sys/netinet6/scope6.o
+bsd += bsd/sys/netinet6/udp6_usrreq.o
+endif
 bsd += bsd/sys/xdr/xdr.o
 bsd += bsd/sys/xdr/xdr_array.o
 bsd += bsd/sys/xdr/xdr_mem.o
diff --git a/bsd/net.cc b/bsd/net.cc
index f548e09..3fe334a 100644
--- a/bsd/net.cc
+++ b/bsd/net.cc
@@ -24,6 +24,11 @@
 #include <bsd/sys/net/ethernet.h>
 #include <bsd/sys/net/route.h>
 #include <bsd/sys/compat/linux/linux_netlink.h>
+#ifdef INET6
+#include <bsd/sys/netinet/icmp6.h>
+#include <bsd/sys/netinet6/in6.h>
+#include <bsd/sys/netinet6/mld6.h>
+#endif
 
 /* Generation of ip ids */
 void ip_initid(void);
@@ -31,6 +36,10 @@ void ip_initid(void);
 extern "C" {
     /* AF_INET */
     extern  struct domain inetdomain;
+#ifdef INET6
+    /* AF_INET6 */
+    extern  struct domain inet6domain;
+#endif
     /* AF_ROUTE */
     extern  struct domain routedomain;
     /* AF_NETLINK */
@@ -55,12 +64,20 @@ void net_init(void)
     vnet_pfil_init();
     domaininit(NULL);
     OSV_DOMAIN_SET(inet);
+#ifdef INET6
+    OSV_DOMAIN_SET(inet6);
+#endif
     OSV_DOMAIN_SET(route);
     OSV_DOMAIN_SET(netlink);
     rts_init();
     route_init();
     vnet_route_init();
     netlink_init();
+#ifdef INET6
+    ip6_init2(NULL);
+    mld_init(NULL);
+    vnet_mld_init(NULL);
+#endif
     ipport_tick_init(NULL);
     arp_init();
     domainfinalize(NULL);
@@ -68,9 +85,13 @@ void net_init(void)
     if_attachdomain(NULL);
     vnet_loif_init();
 
+    /* Adding IPv4 address before starting the loopback interface
+     * cause the interface to be brought up without IPv6 support.
+     */
+
     /* Start the loopback device */
-    osv::start_if("lo0", "127.0.0.1", "255.0.0.0");
     osv::ifup("lo0");
+    osv::start_if("lo0", "127.0.0.1", "255.0.0.0");
 
     debug(" - done\n");
 }
diff --git a/bsd/porting/netport.h b/bsd/porting/netport.h
index a433370..c797f25 100644
--- a/bsd/porting/netport.h
+++ b/bsd/porting/netport.h
@@ -163,6 +163,10 @@ extern int tick;
     #define INET (1)
 #endif
 
+#if defined(CONF_INET6) && (CONF_INET6 != 0)
+    #define INET6 (1)
+#endif
+
 #ifdef _KERNEL
 
 #define panic(...) do { tprintf_e("bsd-panic", __VA_ARGS__); \
diff --git a/bsd/sys/dev/xen/netfront/netfront.cc 
b/bsd/sys/dev/xen/netfront/netfront.cc
index c2b40ac..c4b40ba 100644
--- a/bsd/sys/dev/xen/netfront/netfront.cc
+++ b/bsd/sys/dev/xen/netfront/netfront.cc
@@ -61,6 +61,10 @@ __FBSDID("$FreeBSD$");
 #include <bsd/sys/netinet/in_systm.h>
 #include <bsd/sys/netinet/in.h>
 #include <bsd/sys/netinet/ip.h>
+#ifdef INET6
+#include <bsd/sys/netinet6/in6.h>
+#include <bsd/sys/netinet/ip6.h>
+#endif
 #include <bsd/sys/netinet/if_ether.h>
 #if __FreeBSD_version >= 700000
 #include <bsd/sys/netinet/tcp.h>
diff --git a/conf/base.mk b/conf/base.mk
index dcf98cd..54cd163 100644
--- a/conf/base.mk
+++ b/conf/base.mk
@@ -9,3 +9,8 @@ conf-logger_debug=0
 # This macro controls the NDEBUG macro that is used to identify the debug
 # build variant in the code.
 conf-DEBUG_BUILD=0
+
+# Set to 1 to enable IPV6
+# This macro controls the FreeBSD INET6 macro defined in bsd/porting/netport.h
+conf-INET6=1
+
diff --git a/include/api/netinet/in.h b/include/api/netinet/in.h
index 18fa77f..1b6d3f3 100644
--- a/include/api/netinet/in.h
+++ b/include/api/netinet/in.h
@@ -157,62 +157,16 @@ struct ip6_mtuinfo
        uint32_t ip6m_mtu;
 };
 
-#define IPV6_ADDRFORM           1
-#define IPV6_2292PKTINFO        2
-#define IPV6_2292HOPOPTS        3
-#define IPV6_2292DSTOPTS        4
-#define IPV6_2292RTHDR          5
-#define IPV6_2292PKTOPTIONS     6
-#define IPV6_CHECKSUM           7
-#define IPV6_2292HOPLIMIT       8
-#define SCM_SRCRT               IPV6_RXSRCRT
-#define IPV6_NEXTHOP            9
-#define IPV6_AUTHHDR            10
-#define IPV6_UNICAST_HOPS       16
-#define IPV6_MULTICAST_IF       17
-#define IPV6_MULTICAST_HOPS     18
-#define IPV6_MULTICAST_LOOP     19
-#define IPV6_JOIN_GROUP         20
-#define IPV6_LEAVE_GROUP        21
-#define IPV6_ROUTER_ALERT       22
-#define IPV6_MTU_DISCOVER       23
-#define IPV6_MTU                24
-#define IPV6_RECVERR            25
-#define IPV6_V6ONLY             26
-#define IPV6_JOIN_ANYCAST       27
-#define IPV6_LEAVE_ANYCAST      28
-#define IPV6_IPSEC_POLICY       34
-#define IPV6_XFRM_POLICY        35
-
-#define IPV6_RECVPKTINFO        49
-#define IPV6_PKTINFO            50
-#define IPV6_RECVHOPLIMIT       51
-#define IPV6_HOPLIMIT           52
-#define IPV6_RECVHOPOPTS        53
-#define IPV6_HOPOPTS            54
-#define IPV6_RTHDRDSTOPTS       55
-#define IPV6_RECVRTHDR          56
-#define IPV6_RTHDR              57
-#define IPV6_RECVDSTOPTS        58
-#define IPV6_DSTOPTS            59
-
-#define IPV6_RECVTCLASS         66
-#define IPV6_TCLASS             67
-
-#define IPV6_ADD_MEMBERSHIP     IPV6_JOIN_GROUP
-#define IPV6_DROP_MEMBERSHIP    IPV6_LEAVE_GROUP
-#define IPV6_RXHOPOPTS          IPV6_HOPOPTS
-#define IPV6_RXDSTOPTS          IPV6_DSTOPTS
+#include <netinet6/__in6.h>
 
+#define SOL_IPV6        41
+#define SOL_ICMPV6      58
 
 #define IPV6_PMTUDISC_DONT      0
 #define IPV6_PMTUDISC_WANT      1
 #define IPV6_PMTUDISC_DO        2
 #define IPV6_PMTUDISC_PROBE     3
 
-#define SOL_IPV6        41
-#define SOL_ICMPV6      58
-
 #define IPV6_RTHDR_LOOSE        0
 #define IPV6_RTHDR_STRICT       1
 
-- 
2.7.4

-- 
You received this message because you are subscribed to the Google Groups "OSv 
Development" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to osv-dev+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to