diff options
Diffstat (limited to 'examples/docker/utils.sh')
-rwxr-xr-x | examples/docker/utils.sh | 88 |
1 files changed, 74 insertions, 14 deletions
diff --git a/examples/docker/utils.sh b/examples/docker/utils.sh index 91e18a6b6..6c90e88c4 100755 --- a/examples/docker/utils.sh +++ b/examples/docker/utils.sh @@ -4,12 +4,19 @@ # # $1 - container name # $2 - image name +# $3 - cpu allocation (default = 1.0) # function create_container { container_name=$1 image_name=$2 - echo "Creating $container_name from $image_name" - docker run -dt --privileged --name=$container_name $image_name + if [ -z "$3" ] + then + cpu="1.0" + else + cpu=$3 + fi + echo "Creating $container_name from $image_name, cpu allocation: $cpu" + docker run -dt --cpus=${cpu} --privileged --name=${container_name} ${image_name} /bin/bash } # Starts container @@ -26,15 +33,67 @@ function start_container { echo "Starting container $container_name" # Remove namespace if it was present - ip netns del $container_name + ip netns del ${container_name} 2> /dev/null # Start container - docker start $container_name + docker start ${container_name} # Make container's network namespaces accessible using ip netns - pid=$(docker inspect -f '{{.State.Pid}}' $container_name) - ln -s /proc/$pid/ns/net /var/run/netns/$container_name - echo "Container $container_name started sucessfully (pid=$pid)" + pid=$(docker inspect -f '{{.State.Pid}}' ${container_name}) + sudo mkdir -p /var/run/netns + sudo ln -sf /proc/${pid}/ns/net /var/run/netns/${container_name} + echo "Container $container_name started successfully (pid=$pid)" +} + +# Starts vpp in container +# +# $1 - container name +# +function start_vpp_in_container { + container=$1 + echo "Starting vpp in $container" + + # Start VPP in container + sudo docker exec -d ${container} ./vpp/start.sh + result="stopped" + echo -e "Waiting for vpp in ${container} to start\n" + while [ "$result" != "started" ] + do + found=`sudo docker exec ${container} vppctl sh int 2> /dev/null |grep "local0"` + if [[ ${found} = *"local0"* ]]; then + result="started" + fi + echo -ne "." + sleep 1 + done + + echo -e "\nVPP in $container started successfully" +} + +# Starts vpp in container +# +# $1 - container name +# +function start_hc_in_container { + container=$1 + echo "Starting hc in $container" + + # Start HC in container + sudo docker exec -d ${container} ./honeycomb/start.sh + match="Honeycomb started successfully!" + result="stopped" + echo "Waiting for hc in ${container} to start" + while [ "$result" != "started" ] + do + found=`sudo docker exec ${container} tail /var/log/honeycomb/honeycomb.log 2> /dev/null | grep "${match}"` + + if [[ ${found} = *"${match}"* ]]; then + result="started" + fi + echo -ne "." + sleep 1 + done + echo -e "\nHC in $container started successfully" } # Links two containers using a veth pair. @@ -49,19 +108,20 @@ function create_link { if1=$2 if2=$3 container2=$4 - echo "Creating link from $container1($if1) to $container2($if2)" - ip link add $if1 type veth peer name $if2 + echo -ne "Creating link from $container1($if1) to $container2($if2)" + ip link add ${if1} type veth peer name ${if2} # Move veth endpoints to corresponding namespaces - ip link set $if1 netns $container1 - ip link set $if2 netns $container2 + ip link set ${if1} netns ${container1} + ip link set ${if2} netns ${container2} # Bring interfaces up - ip netns exec $container1 ip link set $if1 up - ip netns exec $container2 ip link set $if2 up + ip netns exec ${container1} ip link set ${if1} up + ip netns exec ${container2} ip link set ${if2} up # Set interfaces mtu to 9000 to match default VPP mtu values ip netns exec ${container1} ifconfig ${if1} mtu 9000 ip netns exec ${container2} ifconfig ${if2} mtu 9000 - echo "Link created successfully" + + echo " -> done." } |