connectVSwitchToVSwitch() { local switch1="$1" local link="$2" local switch2="$3"
sudo ip link add name "${link}-0" type veth peer name "${link}-1"
sudo ip link set "${link}-0" up sudo ovs-vsctl add-port "$switch1" "${link}-0"
sudo ip link set "${link}-1" up sudo ovs-vsctl add-port "$switch2" "${link}-1" }
connectVHostToVSwitch() { local host="$1" local link="$2" local switch="$3" local opt="$4"
sudo ip link add name "${link}" type veth peer name "${link}-1"
sudo ip link set "${link}-1" netns "$host" sudo ip netns exec "$host" ip link set "${link}-1" name "${link}" sudo ip netns exec "$host" ifconfig "${link}" up
sudo ip link set "${link}" up sudo ovs-vsctl add-port "$switch" "${link}" $opt }
deleteVHost() {
local host
for host in "$@"; do
sudo ip netns delete "$host"
done
}
deleteVSwitch() {
local switch
for switch in "$@"; do
sudo ovs-vsctl del-br "$switch"
done
}
deleteVLink() {
local link
for link in "$@"; do
sudo ip link delete "$link"
sudo ip link delete "${link}-0"
sudo ip link delete "${link}-1"
done
}
addVHost() {
local host="$1"
sudo ip netns add "$host"
sudo ip netns exec "$host" ifconfig lo 127.0.0.1
}
addVSwitch() {
local switch="$1"
sudo ovs-vsctl add-br "$switch"
}
setupVSwitchAsOpenFlowSwitch() {
local switch="$1"
local datapath_id="$2"
if [ "$datapath_id" != "" ]; then
sudo ovs-vsctl set bridge "$switch" other-config:datapath-id=`printf \"%016x\" $datapath_id`
fi
sudo ovs-vsctl set-fail-mode "$switch" secure
sudo ovs-vsctl set-controller "$switch" tcp:127.0.0.1 -- \
set controller "$switch" connection-mode=out-of-band -- \
set controller "$switch" inactivity-probe=180 -- \
set controller "$switch" controller-rate-limit=40000 -- \
set controller "$switch" controller-burst-limit=20000
}
addOFSwitch() {
addVSwitch "$1"
setupVSwitchAsOpenFlowSwitch "$1" "$2"
}
connectVSwitchToVSwitch() {
local switch1="$1"
local link="$2"
local switch2="$3"
sudo ip link add name "${link}-0" type veth peer name "${link}-1"
sudo ip link set "${link}-0" up
sudo ovs-vsctl add-port "$switch1" "${link}-0"
sudo ip link set "${link}-1" up
sudo ovs-vsctl add-port "$switch2" "${link}-1"
}
connectVHostToVSwitch() {
local host="$1"
local link="$2"
local switch="$3"
local opt="$4"
sudo ip link add name "${link}" type veth peer name "${link}-1"
sudo ip link set "${link}-1" netns "$host"
sudo ip netns exec "$host" ip link set "${link}-1" name "${link}"
sudo ip netns exec "$host" ifconfig "${link}" up
sudo ip link set "${link}" up
sudo ovs-vsctl add-port "$switch" "${link}" $opt
}
vhostExec() {
sudo ip netns exec "$@"
}
OpenFlow スイッチとしてのオプションは、Trema が内部的に使っているユーザースペース版 Open vSwitch の起動オプションを参考にしています。 『OpenFlow実践入門』(初版 P.195) 「仮想スイッチ」に記載されているコマンドラインオプションを参考にさせていただきました。
vswitch を複数書くときにそれぞれに同じ IP アドレスを書くのは保守性に欠けます。仮想ネットワーク設定ファイルが実は ruby のプログラムであることを利用して関数化してみてはどうでしょう。
def config_vswitch( name, dpid )
vswitch("#{ name }") {
datapath_id "#{ dpid }"
ip "192.168.83.156"
}
end
config_vswitch "switch1", "0x1"
config_vswitch "switch2", "0x2"
config_vswitch "switch3", "0x3"
もっと?
def config_vswitch( name, dpid )
vswitch("#{ name }") {
datapath_id "#{ dpid }"
ip "192.168.83.156"
}
end
1.upto(3) do | each |
config_vswitch "switch#{ each }", "#{ each }"
end
The datapath_id field uniquely identifies a datapath. The lower 48 bits are intended for the switch MAC address, while the top 16 bits are up to the implementer.
直訳: datapath_id フィールドは、データパスを一意に識別します。下位48ビットはスイッチの MAC アドレスを用いることを意図しているが、上位16ビットは実装者にまかせる。
最近のコメント