Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #!/bin/bash -e
- # ip netns add bar
- # export CNI_IFNAME='foo' CNI_CONTAINERID='bar' CNI_COMMAND='ADD'
- # echo '{ "deviceID": "0000:07:02.0" }' | /opt/cni/bin/vfioveth
- CNI_CONF=$(</dev/stdin)
- get_peer_name() {
- echo "$1-vdev"
- }
- get_mac_with_vfpci() {
- local pf=$(readlink /sys/devices/pci*/*/$1/physfn | awk '{print substr($1,4)}')
- local pfName=$(ls /sys/devices/pci*/*/$pf/net/ | head -1)
- local idx=$(ls -l /sys/devices/pci*/*/$pf | awk -v vf=$1 'substr($11,4)==vf {print substr($9,7)}')
- local mac=$(ip link show dev $pfName | awk -v idx="$idx" '$1=="vf" && $2==idx {print substr($4,1,17)}')
- echo $mac
- }
- add_pair_ns() {
- vfpci=$(echo $CNI_CONF | jq -r '.deviceID')
- mac=$(get_mac_with_vfpci $vfpci)
- peer=$(get_peer_name $CNI_IFNAME)
- ip netns exec $CNI_CONTAINERID ip link add $CNI_IFNAME type veth peer name $peer
- ip netns exec $CNI_CONTAINERID ip link set $CNI_IFNAME addr $mac up
- ip netns exec $CNI_CONTAINERID ip link set $peer up
- }
- delete_pair_ns() {
- ip netns exec $CNI_CONTAINERID ip link del $CNI_IFNAME
- }
- case $CNI_COMMAND in
- ADD)
- add_pair_ns
- ;;
- DEL)
- delete_pair_ns
- ;;
- *)
- echo "CNI_COMMAND=[ADD|DEL] only supported"
- exit 1
- ;;
- esac
Add Comment
Please, Sign In to add comment