#!/bin/bash

if [ "CHK$1" == "CHK" ];then
    echo 'Need argument: bond, br, brv, vlan, dummy, vxlan, veth, vrf, sriov,'
    echo 'rm'
    exit 1
fi

function create_nics {
    sudo ip netns add tmp
    sudo ip link add eth1 type veth peer name eth1.ep
    sudo ip link add eth2 type veth peer name eth2.ep
    sudo ip link set eth1.ep netns tmp
    sudo ip link set eth2.ep netns tmp
    sudo ip netns exec tmp ip link set eth1.ep up
    sudo ip netns exec tmp ip link set eth2.ep up
}

if [ "CHK$1" == "CHKbond" ];then
    create_nics
    sudo ip link add bond99 type bond
    sudo ip link set eth1 master bond99
    sudo ip link set eth2 master bond99
    sudo ip link set eth1 up
    sudo ip link set eth2 up
    sudo ip link set bond99 up
elif [ "CHK$1" == "CHKbr" ];then
    create_nics
    sudo ip link add br0 type bridge
    sudo ip link set eth1 master br0
    sudo ip link set eth2 master br0
    sudo ip link set eth1 up
    sudo ip link set eth2 up
    sudo ip link set br0 up
elif [ "CHK$1" == "CHKbrv" ];then
    create_nics
    sudo ip link add br0 type bridge
    sudo ip link set eth1 master br0
    sudo ip link set eth2 master br0
    sudo ip link set eth1 up
    sudo ip link set eth2 up
    sudo ip link set br0 up
    sudo bridge vlan add vid 10 pvid untagged dev eth1
    sudo bridge vlan add vid 2-4094 dev eth2
    sudo ip link set br0 type bridge vlan_filtering 1
elif [ "CHK$1" == "CHKvlan" ];then
    create_nics
    sudo modprobe 8021q
    sudo ip link set eth1 up
    sudo ip link set eth2 up
    sudo ip link add link eth1 name eth1.101 type vlan id 101
elif [ "CHK$1" == "CHKdummy" ];then
    sudo ip link add dummy1 type dummy
    sudo ip link set dummy1 up
elif [ "CHK$1" == "CHKvxlan" ];then
    create_nics
    sudo ip link add vxlan0 type vxlan id 101 dstport 4789 dev eth1 \
        local 1.1.1.1 remote 8.8.8.8
    sudo ip link set vxlan0 up
elif [ "CHK$1" == "CHKveth" ];then
    create_nics
elif [ "CHK$1" == "CHKvrf" ];then
    create_nics
    sudo ip link add vrf0 type vrf table 10
    sudo ip link set vrf0 up
    sudo ip link set dev eth1 master vrf0
    sudo ip link set eth1 up
elif [ "CHK$1" == "CHKsriov" ];then
    sudo modprobe netdevsim
    echo '1 1' | sudo tee /sys/bus/netdevsim/new_device
    sleep 5
    sudo ip link set eni1np1 name eth1
    echo 2 | sudo tee /sys/class/net/eth1/device/sriov_numvfs
    sudo ip link set eth1 vf 0 vlan 100 mac 36:f7:09:ef:95:f0
    sudo ip link set eth1 vf 1 mac 36:f7:09:ef:95:f1
    sudo ip link set eth1 up
elif [ "CHK$1" == "CHKtun" ];then
    sudo ip tuntap add name tun1 mode tap \
        user 1001 group 0 multi_queue vnet_hdr
elif [ "CHK$1" == "CHKmacvlan" ];then
    create_nics
    sudo ip link add mac0 link eth1 type macvlan mode source
    sudo ip link set link dev mac0 type macvlan macaddr add 00:11:11:11:11:11
    sudo ip link set link dev mac0 type macvlan macaddr add 00:22:22:22:22:22
    sudo ip link set eth1 up
    sudo ip link set mac0 up
elif [ "CHK$1" == "CHKmacvtap" ];then
    create_nics
    sudo ip link add macvtap0 link eth1 type macvtap mode source
    sudo ip link set link dev macvtap0 type macvtap macaddr add 00:11:11:11:11:11
    sudo ip link set link dev macvtap0 type macvtap macaddr add 00:22:22:22:22:22
    sudo ip link set eth1 up
    sudo ip link set macvtap0 up
elif [ "CHK$1" == "CHKrule" ];then
    create_nics
    sudo ip rule add from 192.0.2.1 to 192.0.2.2 tos 10 protocol kernel table 100 iif eth1 oif eth2
elif [ "CHK$1" == "CHKrm" ];then
    sudo ip link del mac0
    sudo ip link del macvtap0
    sudo ip link del br0
    sudo ip link del bond99
    sudo ip link del dummy1
    sudo ip link del vxlan0
    sudo ip link del eth1
    sudo ip link del eth2
    sudo ip link del vrf0
    sudo ip netns del tmp
    sudo ip link del tun1
    sudo ip rule del from 192.0.2.1 to 192.0.2.2 tos 10 protocol kernel table 100 iif eth1 oif eth2
    sudo modprobe -r netdevsim
fi
