DSL に書けること

仮想ネットワーク 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

 

Tagged

Leave a Reply