This patch series adds IPv6 support to OSv.

The first 5 parts of the series should have no impact on existing
OSv code.  The rest of the patches starting from the net channel
changes do impact existing code.

All parts should compile and test without issues, but IPv6 is only
enabled with the last patch in the series.

The IPv6 support is optional and can be enabled/disabled using the
conf-INET6 option in the conf/base.mk file.

Currently there are 2 known remaining issues left which are due to
limitations of the FreeBSD 9.0 IPv6 code which this code is base off of.

1. The NDP code is not thread safe
   The FreeBSD 9.0 IPv6 code is not MPSAFE and expects callouts to run
   with the giant lock and uses splnet() to ensure thread safety.
   Unfortunatley OSv does not support these mechanisms and it is pretty
   tricky to modify the FreeBSD 9.0 IPv6 code to make it thread safe
   without them due to multiple locks required in the NDP code.

2. IPv6 MAC cache entries can expire causing extra neighbor solicits
   This does not occur when using TCP sockets which keep the cache
   entry active using ND6_HINT() but can occur for UDP or raw IP.

These issues appear to be fixed in FreeBSD 11, however back porting these
fixes is pretty involved and impacts a lot of the existing FreeBSD
code not only IPv6.

IPv6 Stateless Autoconfiguration is enabled, but has not been tested yet.

DHCPv6 is not supported yet.

Static IPv6 addresses may be configured using command line arguments:

./scripts/run.py  --execute \
    "--ip=eth0,2001:1:1::501,64 --defaultgw=2001:1:1::1 \
     /tools/iperf -s -V -B ::"

or using cloud-init network version 1 yaml which is also added with
this patch series:

#cloud-config
network:
    version: 1
    config:
    - type: physical
      name: eth0
      subnets:
          - type: static
            address: 2001:1:1::501/64

Charles Myers (16):
  bsd: Added unmodified IPv6 .h files from FreeBSD 9.0
  bsd: Added unmodified IPv6 .c files from FreeBSD 9.0
  bsd: Renamed IPv6 files from *.c to *.cc
  bsd: Modify FreeBSD IPv6 .h files for OSv
  bsd: Modify FreeBSD IPv6 .cc files for OSv
  bsd: Added IPv6 net channel support
  bsd: Modifications to shared IPv4/IPv6 code (eth,tcp,udp) for IPv6
  bsd: OSv API support for IPv6
  bsd: Added partial Linux NETLINK socket support
  libc: Fix if_indextoname(), if_nametoindex()
  libc: Add IPv6 support to getifaddrs(), if_nameindex() using NETLINK
    socket
  bsd: Fix SIOCSIFNAME when using linux compatiblity socket
  bsd: linux socket support for IPv6, IP_PKTINFO, IPV6_PKTINFO,
    SCM_TIMESTAMP
  cloud-init: Added support for Network v1 and ConfigDrive data source
  bsd: Added unit tests for IPv6 TCP, IP_PKTINFO, IPV6_PKTINFO,
    SCM_TIMESTAMP
  bsd: Added conf-INET6 option to enable IPv6 support

 Makefile                              |   29 +-
 bsd/net.cc                            |   28 +-
 bsd/porting/netport.h                 |    4 +
 bsd/porting/networking.cc             |  178 +-
 bsd/porting/networking.hh             |    8 +
 bsd/porting/route.cc                  |   86 +-
 bsd/sys/compat/linux/linux.h          |   12 +-
 bsd/sys/compat/linux/linux_ioctl.cc   |   37 +-
 bsd/sys/compat/linux/linux_netlink.cc |  904 +++++++++
 bsd/sys/compat/linux/linux_netlink.h  |  175 ++
 bsd/sys/compat/linux/linux_socket.cc  |  731 ++++++--
 bsd/sys/compat/linux/linux_socket.h   |  102 +-
 bsd/sys/dev/xen/netfront/netfront.cc  |    4 +
 bsd/sys/kern/sys_socket.cc            |    1 +
 bsd/sys/kern/uipc_sockbuf.cc          |    1 +
 bsd/sys/kern/uipc_socket.cc           |    1 +
 bsd/sys/kern/uipc_syscalls.cc         |   45 +-
 bsd/sys/kern/uipc_syscalls_wrap.cc    |    6 +-
 bsd/sys/net/if.cc                     |   15 +
 bsd/sys/net/if_ethersubr.cc           |    5 +-
 bsd/sys/net/if_llatbl.cc              |   47 +-
 bsd/sys/net/if_llatbl.h               |   13 +
 bsd/sys/net/if_var.h                  |   14 +-
 bsd/sys/net/netisr.h                  |    1 +
 bsd/sys/net/routecache.hh             |    1 +
 bsd/sys/netinet/icmp6.h               |  760 ++++++++
 bsd/sys/netinet/in.cc                 |   10 +
 bsd/sys/netinet/in.h                  |    1 +
 bsd/sys/netinet/ip6.h                 |  267 +++
 bsd/sys/netinet/tcp_input.cc          |  509 ++++-
 bsd/sys/netinet/tcp_lro.cc            |    4 +-
 bsd/sys/netinet/tcp_lro.h             |   15 +-
 bsd/sys/netinet/tcp_reass.cc          |    4 +-
 bsd/sys/netinet/tcp_subr.cc           |    6 +-
 bsd/sys/netinet/tcp_syncache.cc       |    3 +-
 bsd/sys/netinet/tcp_usrreq.cc         |   62 +-
 bsd/sys/netinet/udp_usrreq.cc         |    2 +-
 bsd/sys/netinet6/dest6.cc             |  123 ++
 bsd/sys/netinet6/frag6.cc             |  793 ++++++++
 bsd/sys/netinet6/icmp6.cc             | 2942 +++++++++++++++++++++++++++++
 bsd/sys/netinet6/in6.cc               | 2791 +++++++++++++++++++++++++++
 bsd/sys/netinet6/in6.h                |  125 +-
 bsd/sys/netinet6/in6_cksum.cc         |  359 ++++
 bsd/sys/netinet6/in6_ifattach.cc      |  968 ++++++++++
 bsd/sys/netinet6/in6_ifattach.h       |   45 +
 bsd/sys/netinet6/in6_mcast.cc         | 2833 ++++++++++++++++++++++++++++
 bsd/sys/netinet6/in6_pcb.cc           | 1153 ++++++++++++
 bsd/sys/netinet6/in6_pcb.h            |  124 ++
 bsd/sys/netinet6/in6_proto.cc         |  627 +++++++
 bsd/sys/netinet6/in6_rmx.cc           |  338 ++++
 bsd/sys/netinet6/in6_src.cc           | 1154 ++++++++++++
 bsd/sys/netinet6/in6_var.h            |  898 +++++++++
 bsd/sys/netinet6/ip6_forward.cc       |  681 +++++++
 bsd/sys/netinet6/ip6_id.cc            |  273 +++
 bsd/sys/netinet6/ip6_input.cc         | 1891 +++++++++++++++++++
 bsd/sys/netinet6/ip6_ipsec.cc         |  391 ++++
 bsd/sys/netinet6/ip6_ipsec.h          |   43 +
 bsd/sys/netinet6/ip6_mroute.cc        | 2064 ++++++++++++++++++++
 bsd/sys/netinet6/ip6_mroute.h         |  270 +++
 bsd/sys/netinet6/ip6_output.cc        | 3077 ++++++++++++++++++++++++++++++
 bsd/sys/netinet6/ip6_var.h            |  456 +++++
 bsd/sys/netinet6/ip6protosw.h         |  148 ++
 bsd/sys/netinet6/mld6.cc              | 3325 +++++++++++++++++++++++++++++++++
 bsd/sys/netinet6/mld6.h               |  119 ++
 bsd/sys/netinet6/mld6_var.h           |  164 ++
 bsd/sys/netinet6/nd6.cc               | 2408 ++++++++++++++++++++++++
 bsd/sys/netinet6/nd6.h                |  455 +++++
 bsd/sys/netinet6/nd6_nbr.cc           | 1587 ++++++++++++++++
 bsd/sys/netinet6/nd6_rtr.cc           | 2212 ++++++++++++++++++++++
 bsd/sys/netinet6/pim6.h               |   69 +
 bsd/sys/netinet6/pim6_var.h           |   68 +
 bsd/sys/netinet6/raw_ip6.cc           |  924 +++++++++
 bsd/sys/netinet6/raw_ip6.h            |   55 +
 bsd/sys/netinet6/route6.cc            |  110 ++
 bsd/sys/netinet6/scope6.cc            |  506 +++++
 bsd/sys/netinet6/scope6_var.h         |   60 +
 bsd/sys/netinet6/send.cc              |  367 ++++
 bsd/sys/netinet6/send.h               |   45 +
 bsd/sys/netinet6/tcp6_var.h           |   83 +
 bsd/sys/netinet6/udp6_usrreq.cc       | 1165 ++++++++++++
 bsd/sys/netinet6/udp6_var.h           |   75 +
 bsd/sys/sys/socketvar.h               |    3 +-
 bsd/uipc_syscalls.h                   |    4 +-
 conf/base.mk                          |    5 +
 core/net_channel.cc                   |  183 +-
 drivers/virtio-net.cc                 |    2 +-
 drivers/vmxnet3.cc                    |    2 +-
 include/api/netinet/__icmp6.h         |   11 +
 include/api/netinet/in.h              |   52 +-
 include/api/netinet6/__in6.h          |   70 +
 include/osv/net_channel.hh            |   77 +-
 libc/network/getifaddrs.c             |  392 ++--
 libc/network/if_indextoname.c         |    2 +-
 libc/network/if_nameindex.c           |  136 +-
 libc/network/if_nametoindex.c         |    2 +-
 libc/network/netlink.c                |   66 +
 libc/network/netlink.h                |   94 +
 loader.cc                             |   76 +-
 modules/cloud-init/Makefile           |    2 +-
 modules/cloud-init/main.cc            |   77 +-
 modules/cloud-init/network-module.cc  |  369 ++++
 modules/cloud-init/network-module.hh  |   43 +
 modules/tests/Makefile                |   16 +-
 tests/tst-pktinfo.cc                  |  245 +++
 tests/tst-socket-timestamp.cc         |  162 ++
 tests/tst-tcp-v6.cc                   |  240 ++-
 106 files changed, 43912 insertions(+), 874 deletions(-)
 create mode 100644 bsd/sys/compat/linux/linux_netlink.cc
 create mode 100644 bsd/sys/compat/linux/linux_netlink.h
 create mode 100644 bsd/sys/netinet/icmp6.h
 create mode 100644 bsd/sys/netinet/ip6.h
 create mode 100644 bsd/sys/netinet6/dest6.cc
 create mode 100644 bsd/sys/netinet6/frag6.cc
 create mode 100644 bsd/sys/netinet6/icmp6.cc
 create mode 100644 bsd/sys/netinet6/in6.cc
 create mode 100644 bsd/sys/netinet6/in6_cksum.cc
 create mode 100644 bsd/sys/netinet6/in6_ifattach.cc
 create mode 100644 bsd/sys/netinet6/in6_ifattach.h
 create mode 100644 bsd/sys/netinet6/in6_mcast.cc
 create mode 100644 bsd/sys/netinet6/in6_pcb.cc
 create mode 100644 bsd/sys/netinet6/in6_pcb.h
 create mode 100644 bsd/sys/netinet6/in6_proto.cc
 create mode 100644 bsd/sys/netinet6/in6_rmx.cc
 create mode 100644 bsd/sys/netinet6/in6_src.cc
 create mode 100644 bsd/sys/netinet6/in6_var.h
 create mode 100644 bsd/sys/netinet6/ip6_forward.cc
 create mode 100644 bsd/sys/netinet6/ip6_id.cc
 create mode 100644 bsd/sys/netinet6/ip6_input.cc
 create mode 100644 bsd/sys/netinet6/ip6_ipsec.cc
 create mode 100644 bsd/sys/netinet6/ip6_ipsec.h
 create mode 100644 bsd/sys/netinet6/ip6_mroute.cc
 create mode 100644 bsd/sys/netinet6/ip6_mroute.h
 create mode 100644 bsd/sys/netinet6/ip6_output.cc
 create mode 100644 bsd/sys/netinet6/ip6_var.h
 create mode 100644 bsd/sys/netinet6/ip6protosw.h
 create mode 100644 bsd/sys/netinet6/mld6.cc
 create mode 100644 bsd/sys/netinet6/mld6.h
 create mode 100644 bsd/sys/netinet6/mld6_var.h
 create mode 100644 bsd/sys/netinet6/nd6.cc
 create mode 100644 bsd/sys/netinet6/nd6.h
 create mode 100644 bsd/sys/netinet6/nd6_nbr.cc
 create mode 100644 bsd/sys/netinet6/nd6_rtr.cc
 create mode 100644 bsd/sys/netinet6/pim6.h
 create mode 100644 bsd/sys/netinet6/pim6_var.h
 create mode 100644 bsd/sys/netinet6/raw_ip6.cc
 create mode 100644 bsd/sys/netinet6/raw_ip6.h
 create mode 100644 bsd/sys/netinet6/route6.cc
 create mode 100644 bsd/sys/netinet6/scope6.cc
 create mode 100644 bsd/sys/netinet6/scope6_var.h
 create mode 100644 bsd/sys/netinet6/send.cc
 create mode 100644 bsd/sys/netinet6/send.h
 create mode 100644 bsd/sys/netinet6/tcp6_var.h
 create mode 100644 bsd/sys/netinet6/udp6_usrreq.cc
 create mode 100644 bsd/sys/netinet6/udp6_var.h
 create mode 100644 include/api/netinet/__icmp6.h
 create mode 100644 include/api/netinet6/__in6.h
 create mode 100644 libc/network/netlink.c
 create mode 100644 libc/network/netlink.h
 create mode 100644 modules/cloud-init/network-module.cc
 create mode 100644 modules/cloud-init/network-module.hh
 create mode 100644 tests/tst-pktinfo.cc
 create mode 100644 tests/tst-socket-timestamp.cc

-- 
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