仮想ネットワーク DSL は、Trema で書いたコントローラを仮想的に実行できる仮想ネットワークの構成を定義するのに使われます。今回は、この DSL で記述できる主なことを紹介します。
vswitch
仮想的な OpenFlow スイッチです。
vswitch("switch000") { datapath_id 0xabc ip "127.0.0.1" }
- vswitch() の引数: スイッチの名前。省略した場合は、datapath_id が名前として使われます。
- datapath_id (dpid): スイッチを一意に決める ID。必須です。
- ip: vswitch の接続先 (コントローラの IP アドレス)。デフォルトは localhost です。
名前を省略した場合は次のように短く書けます。
# どちらも名前は "0xabc" vswitch { datapath_id 0xabc } vswitch { dpid 0xabc }
vhost
仮想ホストです。
vhost("host01") { promisc "on" ip "192.168.100.1" netmask "255.255.0.0" mac "00:00:00:01:00:01" }
- vhost() の引数: ホストにつける名前。省略した場合は IP アドレスが名前として使われます。
- promisc: 仮想ホストの受信モード。”on” を指定すると全てのパケットを受信します。デフォルトは “off”。
- ip: 仮想ホストの IP アドレス。省略時は、192.168.0.1 から順番に割り振られます。
- netmask: 仮想ホストのネットマスク。省略時は、255.255.255.0。
- mac: 仮想ホストの物理アドレス。省略時は、00:00:00:01:00:01 から順番に割り振られます。
名前を省略した場合は次のように短く書けます。
# 名前は "192.168.0.100" vhost { ip "192.168.0.100" }
link
ホストとスイッチをつなぐ仮想リンクの設定です。
link "name1", "name2"
- name1, name2: vswitch/vhost で指定した名前または実際のインターフェース名 (eth0 等)。順番に意味はありません。
link でつなぐパターンは次の 3 通りです。
# 仮想スイッチと仮想スイッチ。 link "vswitch-name1", "vswitch-name2" # 仮想スイッチと仮想ホスト link "vswitch-name1", "vhost-name1" # 仮想スイッチとインターフェース link "vswitch-name1", "eth0"
その他
DSL 内には任意の ruby の文が書けます。大量のスイッチを一定の規則でつなげる場合など、Ruby のループが使えるので便利です。
# 10 個の vswitch を作成して、それをフルメッシュのトポロジにする例 1.upto( 10 ).each do | sw | vswitch { dpid sw } 1.upto( sw - 1 ).each do | peer | link sw.to_hex, peer.to_hex end end