SnapRoute 概要
Appleの巨大データセンター内で、Apple Store, iTunes, Siri, Map 等々のトラフィックをハンドルするために内製されていた、WhiteBox Switch上で動作する L2/L3 Network Stack が "SnapRoute" として独立、オープンソースとして公開された。なお、SnapRouteが企業名、FlexSwitchが製品名、OpenSnapRouteがオープンソースとしての名前?と思われる。
動作環境:(Source Codeから推定)
- 対応ASIC
- Broadcom Trident II
- Mellanox Spectrum Ethernet Switch IC
- 対応WhiteBoxスイッチ
- Celestica Redstone XP (48x10Gbps + 6x40Gbps)
- Accton AS5712-54X (48x10Gbps + 6x40Gbps)
- OCP Facebook Wedge (16x40Gbps)
- Mellanox SN2700 (32x100Gbps)
Cavium, Barefoot もドキュメントに記載されているため、将来対応予定と予想
Source Codeやドキュメントの場所:
- SnapRoute
- Source Code
- モジュール毎にレポジトリを分けて公開
- https://github.com/OpenSnaproute
- ドキュメント
インストール環境
- Windows 10
- VirtualBox for Windows
- Vagrant for Windows
Hyper-V が有効になっている場合、VirtualBox で VT-x を使う事ができず、vagrant up した時にエラーとなり起動できません。必ず無効にしてある事を確認してから作業を進めてください。
インストール手順
- VirtualBox のインストール
- Vagrant のインストール
- Vagrant.exe へのパスを環境変数に設定(必要に応じて)
C:\HashiCorp\Vagrant\bin
- 作業フォルダを作成(任意の場所)
c:/Workspace/vagrant/srBox/
- FlexSwitchのファイルを保存
- https://github.com/OpenSnaproute/vagrantFlexSwitch
- Vagrantfile
- snaproute.box
- Git LFS を使っているため、
git lfs pull
が必要。 - 参考:http://www.slideshare.net/hibiki443/git-git-lfs-60951449
- Git LFS を使っているため、
- vagrant box の追加および起動
- vagrant box add SnapRoute112 snaproute.box
- vagrant up
- ssh でログイン(Tera Termで試しました)
- Host: localhost, Port: 2222
- UserID/Password = vagrant/vagrant
動作確認
インターフェースの確認
SSHでログイン後 ip a
で確認すると、eth0 / eth1 の2つのインターフェースが確認できます。
vagrant@vagrant-ubuntu-trusty-64:~$ ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether 08:00:27:8f:dc:e2 brd ff:ff:ff:ff:ff:ff
inet 10.0.2.15/24 brd 10.0.2.255 scope global eth0
valid_lft forever preferred_lft forever
inet6 fe80::a00:27ff:fe8f:dce2/64 scope link
valid_lft forever preferred_lft forever
3: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether 08:00:27:98:93:ad brd ff:ff:ff:ff:ff:ff
inet 192.168.10.9/24 brd 192.168.10.255 scope global eth1
valid_lft forever preferred_lft forever
inet6 2408:82:3fff:9b6:a00:27ff:fe98:93ad/64 scope global dynamic
valid_lft 2591886sec preferred_lft 604686sec
inet6 fe80::a00:27ff:fe98:93ad/64 scope link
valid_lft forever preferred_lft forever
4: dummy0: <BROADCAST,NOARP> mtu 1500 qdisc noop state DOWN group default
link/ether 8e:61:00:a9:32:5e brd ff:ff:ff:ff:ff:ff
利用可能なREST APIの表示
http://<vagrant-box-ip-addr>:8080/api-docs/
で利用可能なAPIが表示されます。
例: http://192.168.10.9:8080/api-docs/
REST APIの利用
- サンプル:Loopback Intefaceの追加・確認
$ curl -H "Content-Type: application/json" -d '{"Name":"lo1", "Type":"Loopback"}' \
> http://localhost:8080/public/v1/config/LogicalIntf
{"ObjectId":"d34c77af-d9cd-48c0-7bf6-5c46acb77290","Error":""}
$ curl -H "Content-Type: application/json" \
> 'http://localhost:8080/public/v1/config/LogicalIntfs' | python -m json.tool
{
"CurrentMarker": 0,
"MoreExist": false,
"NextMarker": 0,
"ObjCount": 1,
"Objects": [
{
"Object": {
"Name": "lo1",
"Type": "Loopback"
},
"ObjectId": "d34c77af-d9cd-48c0-7bf6-5c46acb77290"
}
]
}
- サンプル:System Statusの取得
$ curl -X GET -H "Content-Type: application/json" "http://localhost:8080/public/v1/state/SystemStatus" | python -m json.tool
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 3160 0 3160 0 0 105k 0 --:--:-- --:--:-- --:--:-- 106k
{
"Object": {
"FlexDaemons": [
{
"Enable": true,
"KeepAlive": "Received 2 keepalives",
"Name": "fMgrd",
"Reason": "None",
"RestartCount": 0,
"RestartReason": "",
"RestartTime": "",
"StartTime": "2016-07-03 12:09:43.574148537 +0000 UTC",
"State": "up"
},
{
"Enable": true,
"KeepAlive": "Received 2 keepalives",
"Name": "confd",
"Reason": "None",
"RestartCount": 0,
"RestartReason": "",
"RestartTime": "",
"StartTime": "2016-07-03 12:09:44.27881753 +0000 UTC",
"State": "up"
},
... 省略 ...
{
"Enable": true,
"KeepAlive": "Received 2 keepalives",
"Name": "asicd",
"Reason": "None",
"RestartCount": 0,
"RestartReason": "",
"RestartTime": "",
"StartTime": "2016-07-03 12:09:43.27777507 +0000 UTC",
"State": "up"
}
],
"Name": "vagrant-ubuntu-trusty-64",
"NumActionCalls": "Total 0 Success 0",
"NumCreateCalls": "Total 6 Success 3",
"NumDeleteCalls": "Total 0 Success 0",
"NumGetCalls": "Total 39 Success 21",
"NumUpdateCalls": "Total 0 Success 0",
"Ready": true,
"Reason": "None",
"UpTime": "2h50m30.840160721s"
},
"ObjectId": ""
}
参考リンク
- 英語)Founder CEO の Jason Forrester による BLOG:http://www.snaproute.com/our-story/
- 英語)紹介記事:http://www.recode.net/2016/6/21/11981416/apple-snaproute-project-mcqueen
以上