2015年12月15日火曜日

Contrailのmulticast treeを表示するプログラム

ContrailはBUMトラフィックを処理するときに、特定のノードが大量のコピーをして付加が増えないようにツリーを作ります。
このとき、1つのvrouterは最大4台のvRouterへトラフィックをコピーします。
実際のツリーを確認するには、コマンドラインかIntrospectで確認できるのですが、複数のvRouterにアクセスしなければ確認できないので面倒です。
例えばコマンドラインの場合、以下の手順で確認できます。
1)VNIからNextHop IDを確認
root@contrail-05:~# vxlan --get 2008
VXLAN Table

 VNID    NextHop
----------------
   2008    183

2) NextHopからVRF IDを確認
root@contrail-05:~# nh --get 183
Id:183        Type:Vrf_Translate  Fmly: AF_INET  Flags:Valid, Vxlan, Unicast Flood,   Rid:0  Ref_cnt:2 Vrf:2005
              Vrf:2005

3) VRF IDからMACリストを確認
root@contrail-05:~# rt --dump 2005 --family bridge
Kernel L2 Bridge table 0/2005

Flags: L=Label Valid, Df=DHCP flood

Index     DestMac                          Flags       Label/VNID      Nexthop
170652     0:44:44:0:0:12                                       -          1
249441     a0:36:9f:74:88:d8                  Df                -          3
315393     0:0:5e:0:1:0                       Df                -          3
404400     0:22:22:0:0:12                                       -          1
540752     ff:ff:ff:ff:ff:ff                 LDf             2008        203
656836     2:d2:2f:ef:ae:93                  LDf               27        792
797245     2:b:eb:af:7:f5                    LDf               24        397

4) ff:ff:ff:ff:ff:ff のNextHopを確認し、Sub NHを確認していく。
root@contrail-05:~# nh --get 203
Id:203        Type:Composite  Fmly:AF_BRIDGE  Flags:Valid, Multicast, L2,   Rid:0  Ref_cnt:4 Vrf:2005
              Sub NH(label): 209(0) 204(0) 200(0)

今回作ったプログラムはVNIとvRouterのアドレスを入れれば自動的にBUMを複製するリストを出します。 
プログラムはこちら
必要なライブラリは argparse, sys, xmldict, urllib2です。

使い方はpython bumtreedisp.py -t <vRouterアドレス> -v <VNI>です。
以下のように出力します。
root@console:~# python bumtreedisp.py -t 172.27.113.207 -v 2008
### Host 172.27.113.207 VNI 2008 BUM Tree ###
---- TAP interfaces ----
TAP:tapd22fefae-93  MAC:02:d2:2f:ef:ae:93
---- Tunnel interfaces ----
SIP:192.168.21.1    DIP:10.84.50.5      Encap:MPLSoUDP
SIP:192.168.21.1    DIP:192.168.22.1    Encap:MPLSoUDP※まだ作り途中のため、エラーハンドリングなどが入っていません。
※今後もアップデート予定です。
※2015/12/16出力を調整
※2016/2/8 importしているライブラリをContrailが使用しているxmltodictに変更。合わせてコードを少しきれいにした。 ※2016/3/30 一応αをとった

0 件のコメント:

コメントを投稿