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.