#!/bin/bash # Licensed under the Apache License, Version 2.0 (the "License"); you may # not use this file except in compliance with the License. You may obtain # a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, WITHOUT # WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the # License for the specific language governing permissions and limitations # under the License. bind_port() { PORT_ID=$1 IFNAME=$2 ENDPOINT_ID=$3 MAC_ADDRESS=$4 NET_ID=$5 echo "plugging veth $IFNAME (Neutron port $PORT_ID)..." # create a linux bridge br_name="brq"${NET_ID:0:11} ip link show $br_name if [ $? -ne 0 ]; then echo "Bridge $br_name does not exist, create it" ip link add name $br_name type bridge echo 0 > /sys/devices/virtual/net/$br_name/bridge/forward_delay echo 0 > /sys/devices/virtual/net/$br_name/bridge/stp_state ip link set $br_name up else echo "Bridge $br_name exists" fi # connect the veth outside to linux bridge ip link set dev $IFNAME master $br_name ip link set $IFNAME up } unbind_port() { PORT_ID=$1 IFNAME=$2 ENDPOINT_ID=$3 MAC_ADDRESS=$4 VIF_DETAILs=$5 NET_ID=$6 echo "unplugging veth $IFNAME..." br_name="brq"${NET_ID:0:11} ip link set dev $IFNAME nomaster } case $1 in "bind") shift bind_port "$@" exit 0 ;; "unbind") shift unbind_port "$@" exit 0 ;; *) echo >&2 "$0: Invalid command $1." exit 1 ;; esac