Sfoglia il codice sorgente

[CI] Use netns to simulate a client-server scenario

Signed-off-by: Andrea Barberio <insomniac@slackware.it>
Andrea Barberio 6 anni fa
parent
commit
94d3ef6d94
1 ha cambiato i file con 103 aggiunte e 0 eliminazioni
  1. 103 0
      .travis/setup-integ.sh

+ 103 - 0
.travis/setup-integ.sh

@@ -0,0 +1,103 @@
+#!/bin/bash
+set -exu
+
+if [ $UID -ne 0 ]
+then
+    # shellcheck disable=SC2068
+    sudo "$0" $@
+    exit $?
+fi
+
+IF_SERVER=coredhcp-server
+IF_CLIENT=coredhcp-client
+BRIDGE=coredhcp-bridge
+BR_SERVER="br-coredhcp-se"
+BR_CLIENT="br-coredhcp-cl"
+NETNS_SERVER=coredhcp-server
+NETNS_CLIENT=coredhcp-client
+
+CLEANUP=1
+
+nsexec_client() {
+    # shellcheck disable=SC2068
+    ip netns exec "${NETNS_CLIENT}" $@
+}
+
+nsexec_server() {
+    # shellcheck disable=SC2068
+    ip netns exec "${NETNS_SERVER}" $@
+}
+
+# clean-up
+if [ "${CLEANUP}" -ne 0 ]
+then
+    nsexec_client ip link del dev "${IF_CLIENT}" || true
+    nsexec_server ip link del dev "${IF_SERVER}" || true
+
+    nsexec_client ip link del dev "${IF_CLIENT}" || true
+    nsexec_server ip link del dev "${IF_SERVER}" || true
+
+    ip link del dev "${BRIDGE}" || true
+
+    ip netns del "${NETNS_CLIENT}" || true
+    ip netns del "${NETNS_SERVER}" || true
+fi
+
+# create veth interfaces and add them to the namespace
+ip netns add "${NETNS_CLIENT}"
+ip netns add "${NETNS_SERVER}"
+
+ip link add "${IF_CLIENT}" type veth peer name "${BR_CLIENT}"
+ip link add "${IF_SERVER}" type veth peer name "${BR_SERVER}"
+
+ip link set "${IF_CLIENT}" netns "${NETNS_CLIENT}"
+ip link set "${IF_SERVER}" netns "${NETNS_SERVER}"
+
+# configure networking on the veth interfaces
+nsexec_server ip addr add '2001:db8:2::10/64' dev "${IF_SERVER}"
+nsexec_server ip addr add '10.0.0.10/24' dev "${IF_SERVER}"
+nsexec_server ip link set lo up
+nsexec_server ip link set "${IF_SERVER}" up
+ip link set "${BR_SERVER}" up
+
+nsexec_client ip addr add '2001:db8:2::100/64' dev "${IF_CLIENT}"
+nsexec_client ip addr add '10.0.0.100/24' dev "${IF_CLIENT}"
+nsexec_client ip link set lo up
+nsexec_client ip link set "${IF_CLIENT}" up
+ip link set "${BR_CLIENT}" up
+
+# configure bridging
+ip link add name "${BRIDGE}" multicast on type bridge
+ip link set "${BRIDGE}" up
+
+ip link set "${BR_CLIENT}" master "${BRIDGE}"
+ip link set "${BR_SERVER}" master "${BRIDGE}"
+
+ip link set "${BR_CLIENT}" up
+ip link set "${BR_SERVER}" up
+
+ip addr add '2001:db8:2::ff/64' dev "${BRIDGE}"
+ip addr add '10.0.0.254/24' brd + dev "${BRIDGE}"
+
+# set up routes
+nsexec_client ip route add default \
+    via '2001:db8:2::ff'
+nsexec_server ip route add default \
+    via '2001:db8:2::ff'
+
+# enable neighbour proxying
+sysctl -w "net.ipv6.conf.${BRIDGE}.proxy_ndp=1"
+sysctl -w "net.ipv6.conf.${BRIDGE}.forwarding=1"
+sysctl -w "net.ipv6.conf.${BR_CLIENT}.proxy_ndp=1"
+sysctl -w "net.ipv6.conf.${BR_CLIENT}.forwarding=1"
+sysctl -w "net.ipv6.conf.${BR_SERVER}.proxy_ndp=1"
+sysctl -w "net.ipv6.conf.${BR_SERVER}.forwarding=1"
+ip -6 neigh add proxy '2001:db8:2::10' dev "${BRIDGE}"
+ip -6 neigh add proxy '2001:db8:2::100' dev "${BRIDGE}"
+ip -6 neigh add proxy 'ff01::1:2' dev "${BRIDGE}"
+
+# show what we did
+echo "## Client: ip addr list"
+nsexec_client ip addr list
+echo "## Server: ip addr list"
+nsexec_server ip addr list