as_ns () {
NAME=$1
NETNS=faucet-${NAME}
shift
sudo ip netns exec ${NETNS} $@
}
OVS
Table of Contents
Alias 快捷命令
1. 在 netns 中执行命令
2. 创建 netns
create_ns () {
NAME=$1
IP=$2
NETNS=faucet-${NAME}
sudo ip netns add ${NETNS}
sudo ip link add dev veth-${NAME} type veth peer name veth0 netns ${NETNS}
sudo ip link set dev veth-${NAME} up
as_ns ${NAME} ip link set dev lo up
[ -n "${IP}" ] && as_ns ${NAME} ip addr add dev veth0 ${IP}
as_ns ${NAME} ip link set dev veth0 up
}
3. 创建 tagged 接口
add_tagged_interface () {
NAME=$1
VLAN=$2
IP=$3
NETNS=faucet-${NAME}
as_ns ${NAME} ip link add link veth0 name veth0.${VLAN} type vlan id ${VLAN}
[ -n "${IP}" ] && as_ns ${NAME} ip addr add dev veth0.${VLAN} ${IP}
as_ns ${NAME} ip link set dev veth0.${VLAN} up
as_ns ${NAME} ip addr flush dev veth0
}
4. 清除 Linux netns 及 OVS 配置
cleanup () {
for NETNS in $(sudo ip netns list | grep "faucet-" | awk '{print $1}'); do
[ -n "${NETNS}" ] || continue
NAME=${NETNS#faucet-}
if [ -f "/run/dhclient-${NAME}.pid" ]; then
# Stop dhclient
sudo pkill -F "/run/dhclient-${NAME}.pid"
fi
if [ -f "/run/iperf3-${NAME}.pid" ]; then
# Stop iperf3
sudo pkill -F "/run/iperf3-${NAME}.pid"
fi
if [ -f "/run/bird-${NAME}.pid" ]; then
# Stop bird
sudo pkill -F "/run/bird-${NAME}.pid"
fi
# Remove netns and veth pair
sudo ip link delete veth-${NAME}
sudo ip netns delete ${NETNS}
done
for isl in $(ip -o link show | awk -F': ' '{print $2}' | grep -oE "^l-br[0-9](_[0-9]*)?-br[0-9](_[0-9]*)?"); do
# Delete inter-switch links
sudo ip link delete dev $isl 2>/dev/null || true
done
for DNSMASQ in /run/dnsmasq-vlan*.pid; do
[ -e "${DNSMASQ}" ] || continue
# Stop dnsmasq
sudo pkill -F "${DNSMASQ}"
done
# Remove faucet dataplane connection
sudo ip link delete veth-faucet 2>/dev/null || true
# Remove openvswitch bridges
sudo ovs-vsctl --if-exists del-br br0
sudo ovs-vsctl --if-exists del-br br1
sudo ovs-vsctl --if-exists del-br br2
sudo ovs-vsctl --if-exists del-br br3
}
5. 添加交换机之间内部连接
inter_switch_link () {
SW_A_NAME=$(echo $1 | cut -d ':' -f 1)
SW_A_PORT=$(echo $1 | cut -d ':' -f 2)
SW_B_NAME=$(echo $2 | cut -d ':' -f 1)
SW_B_PORT=$(echo $2 | cut -d ':' -f 2)
VETH_A=l-${SW_A_NAME}_${SW_A_PORT}-${SW_B_NAME}_${SW_B_PORT}
VETH_B=l-${SW_B_NAME}_${SW_B_PORT}-${SW_A_NAME}_${SW_A_PORT}
VETH_A=${VETH_A:0:15}
VETH_B=${VETH_B:0:15}
sudo ip link add dev ${VETH_A} type veth peer name ${VETH_B}
sudo ip link set dev ${VETH_A} up
sudo ip link set dev ${VETH_B} up
sudo ovs-vsctl add-port ${SW_A_NAME} ${VETH_A} \
-- set interface ${VETH_A} ofport_request=${SW_A_PORT}
sudo ovs-vsctl add-port ${SW_B_NAME} ${VETH_B} \
-- set interface ${VETH_B} ofport_request=${SW_B_PORT}
}
日志级别调整
1. 查看所有组件的日志级别
sudo ovs-appctl vlog/list
2. 调整某个特定模块特定Handler日志级别
sudo ovs-appctl vlog/list | grep vconn
3. 验证调整后级别
$ sudo ovs-appctl vlog/list | grep vconn
vconn OFF ERR DBG