sonic-buildimage/platform/vs/create_vnet.sh
lguohan 86bc8aec5f
[vs]: dynamically create front panel ports in vs docker (#4499)
currently, vs docker always create 32 front panel ports.

when vs docker starts, it first detects the peer links
in the namespace and then setup equal number of front panel
interfaces as the peer links.

Signed-off-by: Guohan Lu <lguohan@gmail.com>
2020-04-30 12:50:59 -07:00

59 lines
1.1 KiB
Bash
Executable File

#!/bin/bash -e
usage() {
echo "Usage: $0 [-n <int>] swname" 1>&2
exit 1
}
SERVERS=2
while getopts ":n:" opt; do
case $opt in
n)
SERVERS=$((OPTARG))
;;
*)
usage
;;
esac
done
shift $((OPTIND-1))
SWNAME=$1
pid=$(docker inspect --format '{{.State.Pid}}' $SWNAME)
echo Seting up servers
for srv in `seq 0 $((SERVERS-1))`; do
SRV="$SWNAME-srv$srv"
NSS="ip netns exec $SRV"
ip netns add $SRV
$NSS ip addr add 127.0.0.1/8 dev lo
$NSS ip addr add ::1/128 dev lo
$NSS ip link set dev lo up
# add virtual link between neighbor and the virtual switch docker
IF="eth$((srv+1))"
ip link add ${SRV}eth0 type veth peer name $SWNAME-$IF
ip link set ${SRV}eth0 netns $SRV
ip link set $SWNAME-$IF netns ${pid}
nsenter -t $pid -n ip link set dev $SWNAME-$IF name $IF
echo "Bring ${SRV}eth0 up"
$NSS ip link set dev ${SRV}eth0 name eth0
$NSS ip link set dev eth0 up
echo "Bring $IF up in the virtual switch docker"
nsenter -t $pid -n ip link set dev $IF up
done