fixing pep8 problems for test verify tox job
[integration/test.git] / csit / suites / groupbasedpolicy / common_scripts / ovswork.sh
1 #!/usr/bin/env bash
2 set -e
3
4 BRIDGE=$1
5 GUEST_ID=$2
6 IPADDR=$3
7 BROADCAST=$4
8 GWADDR=$5
9 MAC=$6
10 GUESTNAME=$7
11 VLANTAG=$8
12
13 [ "$IPADDR" ] || {
14     echo "Syntax:"
15     echo "pipework <bridge> <guest-id> <ipaddr>/<subnet> <broadcast> <gateway> <mac> <guestname> [vlan tag]"
16     exit 1
17 }
18
19 # Step 1: Find the guest (for now, we only support LXC containers)
20 while read dev mnt fstype options dump fsck
21 do
22     [ "$fstype" != "cgroup" ] && continue
23     echo $options | grep -qw devices || continue
24     CGROUPMNT=$mnt
25 done < /proc/mounts
26
27 [ "$CGROUPMNT" ] || {
28     echo "Could not locate cgroup mount point."
29     exit 1
30 }
31
32 N=$(find "$CGROUPMNT" -name "$GUEST_ID*" | wc -l)
33 case "$N" in
34     0)
35     echo "Could not find any container matching $GUEST_ID"
36     exit 1
37     ;;
38     1)
39     true
40     ;;
41     *)
42     echo "Found more than one container matching $GUEST_ID"
43     exit 1
44     ;;
45 esac
46
47 NSPID=$(head -n 1 $(find "$CGROUPMNT" -name "$GUEST_ID*" | head -n 1)/tasks)
48 [ "$NSPID" ] || {
49     echo "Could not find a process inside container $GUEST_ID"
50     exit 1
51 }
52
53 # Step 2: Prepare the working directory
54 sudo mkdir -p /var/run/netns
55 sudo rm -f /var/run/netns/$NSPID
56 sudo ln -s /proc/$NSPID/ns/net /var/run/netns/$NSPID
57
58 # Step 3: Creating virtual interfaces
59 LOCAL_IFNAME=vethl-$GUESTNAME #$NSPID
60 GUEST_IFNAME=vethg-$GUESTNAME #$NSPID
61 sudo ip link add name $LOCAL_IFNAME type veth peer name $GUEST_IFNAME
62 sudo ip link set $LOCAL_IFNAME up
63
64 # Step 4: Adding the virtual interface to the bridge
65 sudo ip link set $GUEST_IFNAME netns $NSPID
66 if [ "$VLANTAG" ]
67 then
68     sudo ovs-vsctl add-port $BRIDGE $LOCAL_IFNAME tag=$VLANTAG
69     echo $LOCAL_IFNAME
70 else
71     sudo ovs-vsctl add-port $BRIDGE $LOCAL_IFNAME
72     echo $LOCAL_IFNAME
73 fi
74
75 # Step 5: Configure networking within the container
76 sudo ip netns exec $NSPID ip link set $GUEST_IFNAME name eth0
77 sudo ip netns exec $NSPID ip addr add $IPADDR broadcast $BROADCAST dev eth0
78 sudo ip netns exec $NSPID ifconfig eth0 hw ether $MAC
79 sudo ip netns exec $NSPID ip addr add 127.0.0.1 dev lo
80 sudo ip netns exec $NSPID ip link set eth0 up
81 sudo ip netns exec $NSPID ip link set lo up
82 sudo ip netns exec $NSPID ip route add default via $GWADDR
83