Guest User

Untitled

a guest
Jan 23rd, 2019
109
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.13 KB | None | 0 0
  1. #!/bin/bash -e
  2.  
  3. # ip netns add bar
  4. # export CNI_IFNAME='foo' CNI_CONTAINERID='bar' CNI_COMMAND='ADD'
  5. # echo '{ "deviceID": "0000:07:02.0" }' | /opt/cni/bin/vfioveth
  6.  
  7. CNI_CONF=$(</dev/stdin)
  8.  
  9. get_peer_name() {
  10. echo "$1-vdev"
  11. }
  12.  
  13. get_mac_with_vfpci() {
  14. local pf=$(readlink /sys/devices/pci*/*/$1/physfn | awk '{print substr($1,4)}')
  15. local pfName=$(ls /sys/devices/pci*/*/$pf/net/ | head -1)
  16. local idx=$(ls -l /sys/devices/pci*/*/$pf | awk -v vf=$1 'substr($11,4)==vf {print substr($9,7)}')
  17. local mac=$(ip link show dev $pfName | awk -v idx="$idx" '$1=="vf" && $2==idx {print substr($4,1,17)}')
  18. echo $mac
  19. }
  20.  
  21. add_pair_ns() {
  22. vfpci=$(echo $CNI_CONF | jq -r '.deviceID')
  23. mac=$(get_mac_with_vfpci $vfpci)
  24. peer=$(get_peer_name $CNI_IFNAME)
  25.  
  26. ip netns exec $CNI_CONTAINERID ip link add $CNI_IFNAME type veth peer name $peer
  27. ip netns exec $CNI_CONTAINERID ip link set $CNI_IFNAME addr $mac up
  28. ip netns exec $CNI_CONTAINERID ip link set $peer up
  29. }
  30.  
  31. delete_pair_ns() {
  32. ip netns exec $CNI_CONTAINERID ip link del $CNI_IFNAME
  33. }
  34.  
  35. case $CNI_COMMAND in
  36. ADD)
  37. add_pair_ns
  38. ;;
  39. DEL)
  40. delete_pair_ns
  41. ;;
  42. *)
  43. echo "CNI_COMMAND=[ADD|DEL] only supported"
  44. exit 1
  45. ;;
  46. esac
Add Comment
Please, Sign In to add comment