Juniper vSRX(15.1X) を VirtualBox で動かす (original : 2015/12/11)
この記事は某所で 2015/12/11
に書いたもののコピーです。
そのため 2017/05/13
時点ではやや古い情報も含まれています。
- Juniper さんの vSRX ダウンロード規約が変わっていそう (詳細は未確認)
.
概要
本項でやること
- KVM、VMware ESX 向けの 60 日間 trial 版が公開されている Juniper vSRX を VirtualBox に入れる
- 公式にはサポートされない手順なので、自己責任で
- JUNOS の基本的な操作は省略(ある程度知っている人向け)
環境情報
- ホスト: Windows7 + VirtualBox 4.3.18
- Juniper vSRX: JUNOS 15.1X49-D15.4
vSRX?
- Juniper SRX の 仮想版
- 以前は Firefly Perimeter として公開されていた
- DPDK 対応などの機能強化を果たして、ほぼ別物として名前も Firefly から vSRX になった
- 参考 2014年03月時点での Firefly Perimeter ロードマップなど
- version が 12.1X となっているものは Firefly で 15.1X となっているものは vSRX
- だが、最近は旧 Firefly も vSRX と呼ばれていたりして、ややこしい
手順
vSRX イメージファイル取得
- Trial 版ダウンロードページ | Juniper または ダウンロードページ | Juniper にアクセス
vSRX VMware Appliance with IDE virtual disk
を選択してmedia-srx-ffp-vsrx-vmdisk-15.1X49-D15.4.ide.ova
をダウンロード2015/11/23
現在の最新版
ovf 形式にファイル変換
- 取得したovaファイルを ovf 形式にする (以下例では VMwarePlayer などに同梱されている ovftool を使用)
>ovftool.exe media-srx-ffp-vsrx-vmdisk-15.1X49-D15.4.ide.ova \convert\media-srx-ffp-vsrx-vmdisk-15.1X49-D15.4.ide.ovf Opening OVA source: media-srx-ffp-vsrx-vmdisk-15.1X49-D15.4.ide.ova The manifest validates Opening OVF target: \convert\media-srx-ffp-vsrx-vmdisk-15.1X49-D15.4.ide.ovf Writing OVF package: \convert\media-srx-ffp-vsrx-vmdisk-15.1X49-D15.4.ide.ovf Transfer Completed Source is signed but could not verify certificate (possibly self-signed) Completed successfully
media-srx-ffp-vsrx-vmdisk-15.1X49-D15.4.ide.ovf media-srx-ffp-vsrx-vmdisk-15.1X49-D15.4.ide-disk1.vmdk media-srx-ffp-vsrx-vmdisk-15.1X49-D15.4.ide.mf
変換したファイルに小細工(インポートエラーが出ないように)
media-srx-ffp-vsrx-vmdisk-15.1X49-D15.4.ide.mf
ファイルは別ディレクトリに除外しておくmedia-srx-ffp-vsrx-vmdisk-15.1X49-D15.4.ide.ovf
の line 82 を以下のように上書き編集(%iid%
->2
)
編集前
<Item ovf:configuration="4GvRAM"> <rasd:AllocationUnits>byte * 2^20</rasd:AllocationUnits> <rasd:Description>Memory Size</rasd:Description> <rasd:ElementName>Memory</rasd:ElementName> <rasd:InstanceID>%iid%</rasd:InstanceID> <rasd:ResourceType>4</rasd:ResourceType> <rasd:VirtualQuantity>4096</rasd:VirtualQuantity>
編集後
<Item ovf:configuration="4GvRAM"> <rasd:AllocationUnits>byte * 2^20</rasd:AllocationUnits> <rasd:Description>Memory Size</rasd:Description> <rasd:ElementName>Memory</rasd:ElementName> <rasd:InstanceID>2</rasd:InstanceID> <rasd:ResourceType>4</rasd:ResourceType> <rasd:VirtualQuantity>4096</rasd:VirtualQuantity>
VirtualBox に ovf をインポート
ファイル
->仮想マシンのインポート
で先の編集した ovf ファイルを指定
- 以降の画面キャプチャはインポート後の設定からとってきたもの
- どうやら
アダプタータイプ
は一回起動したあとは勝手に準仮想化ネットワーク(virtio-net)
にされるようだ アダプター 1
が JUNOS 側から見るとfxp0
(管理用ポート)になる
コンソール画面から初期設定
- 起動する
- 無事に起動できたら、コンソールログインして以下を設定する
# root password の設定(必須) set system root-authentication plain-text-password -> 対話型で入力 # ユーザ作成とパスワード設定 set system login user <username> class super-user set system login user <username> authentication plain-text-password # ssh 有効化 set system services ssh root-login deny set system services ssh protocol-version v2
- 必要に応じて、以下手順でデフォルトのファイアウォールモードからルータモード(いずれも俗称)に切り替える(要再起動)
ssh して状態確認
--- JUNOS 15.1X49-D15.4 built 2015-07-31 02:20:21 UTC kotetsu> kotetsu> show version Model: vSRX Junos: 15.1X49-D15.4 JUNOS Software Release [15.1X49-D15.4] kotetsu> show chassis hardware Hardware inventory: Item Version Part number Serial number Description Chassis 5028f7dddeb5 VSRX Midplane System IO Routing Engine VSRX RE FPC 0 Virtual FPC PIC 0 Virtual GE Power Supply 0 kotetsu> show system license License usage: Licenses Licenses Licenses Expiry Feature name used installed needed Virtual Appliance 1 1 0 59 days Licenses installed: License identifier: E420588955 License version: 4 Software Serial Number: 20150625 Customer ID: vSRX-JuniperEval Features: Virtual Appliance - Virtual Appliance count-down, Original validity: 60 days kotetsu> show configuration | display set set version 15.1X49-D15.4 set system root-authentication encrypted-password "$1$8FV6oxYf$H0vFbn4hEjZEwb748.JxK0" set system login user kotetsu uid 2000 set system login user kotetsu class super-user set system login user kotetsu authentication encrypted-password "$1$w/Ff6i9v$1wW4Wrt8Xy04P8ee63/Hb." set system services ssh root-login deny set system services ssh protocol-version v2 set system services web-management http interface fxp0.0 set system syslog user * any emergency set system syslog file messages any any set system syslog file messages authorization info set system syslog file interactive-commands interactive-commands any set system license autoupdate url https://ae1.juniper.net/junos/key_retrieval set security forwarding-options family mpls mode packet-based set interfaces fxp0 unit 0 family inet address 192.168.101.30/24
おわり
- インストールしただけなので別に…
bagpipe-bgp インストール~簡易動作確認 (original : 2015/11/08)
この記事は某所で 2015/11/08
に書いたもののコピーです。
そのため 2017/05/13
時点ではやや古い情報も含まれています。
概要
本項でやること
- bagpipe-bgp をインストールして軽く動作確認するところまでです
- 一般的に OpenStack Neutron と組み合わせて使うようですが、ここでは OpenStack は登場しません
- OSS で手軽に EVPN を試せそう、というのがモチベーションです
環境情報
$ uname -a Linux as65000-l1 3.19.0-25-generic #26~14.04.1-Ubuntu SMP Fri Jul 24 21:16:20 UTC 2015 x86_64 x86_64 x86_64 GNU/Linux $ cat /etc/lsb-release DISTRIB_ID=Ubuntu DISTRIB_RELEASE=14.04 DISTRIB_CODENAME=trusty DISTRIB_DESCRIPTION="Ubuntu 14.04.3 LTS"
手順
Python 各種パッケージインストール
必要なパッケージをインストール
- reauirements.txt を参照
OS パッケージで入れる例
$ sudo apt-get install python-daemon python-bottle python-netaddr python-pip
bagpipe-bgp インストール
- 公式の Installation に従う
$ cd $ git clone https://github.com/Orange-OpenSource/bagpipe-bgp.git $ cd bagpipe-bgp/ $ git show commit 216fee45fba40663dfd9b48bb31be74f5513f684 Author: Thomas Morin <thomas.morin@orange.com> Date: Fri Aug 28 17:00:53 2015 +0200 devstack plugin fix (dumb omission of "then" in a bash statement...) $ sudo python setup.py install $ ls -al /usr/local/bin/bagpipe-* -rwxr-xr-x 1 root root 175 Nov 8 01:28 /usr/local/bin/bagpipe-bgp -rwxr-xr-x 1 root root 177 Nov 8 01:28 /usr/local/bin/bagpipe-bgp-cleanup -rwxr-xr-x 1 root root 157 Nov 8 01:28 /usr/local/bin/bagpipe-fakerr -rwxr-xr-x 1 root root 168 Nov 8 01:28 /usr/local/bin/bagpipe-looking-glass -rwxr-xr-x 1 root root 166 Nov 8 01:28 /usr/local/bin/bagpipe-rest-attach $ bagpipe-bgp --help Usage: bagpipe-bgp [options] (see --help) Options: -h, --help show this help message and exit --config-file=CONFIGFILE Set BGP component configuration file path --log-file=LOGFILE Set logging configuration file path --no-daemon Do not daemonize
bagpipe-bgp service 登録(~自動起動設定)
$ cd bagpipe-bgp/ $ ./install_bagpipe_bgp.sh *** WARNING: This script must be run as root *** $ sudo ./install_bagpipe_bgp.sh $ sudo service bagpipe-bgp status BGP component is running.
- 自動起動したい場合は、サンプルが同梱されているので、これを配置すればよかろう(ここでは未実施)
$ ls -al bagpipe-bgp/etc/init.d/ total 16 drwxrwxr-x 2 kotetsu kotetsu 4096 Nov 8 01:25 . drwxrwxr-x 3 kotetsu kotetsu 4096 Nov 8 01:25 .. -rwxrwxr-x 1 kotetsu kotetsu 2518 Nov 8 01:25 bagpipe-bgp -rwxrwxr-x 1 kotetsu kotetsu 1545 Nov 8 01:25 bagpipe-fakerr
bagpipe-bgp 設定ファイルの編集
メイン設定ファイル (/etc/bagpipe-bgp/bgp.conf)
/etc/bagpipe-bgp/bgp.conf
- ネットワーク環境に合わせて
[BGP]
の項目を編集- iBGP しか使えないことに注意
$ ls -al /etc/bagpipe-bgp/ total 24 drwxr-xr-x 2 root root 4096 Nov 8 01:57 . drwxr-xr-x 83 root root 4096 Nov 8 01:57 .. -rw-r--r-- 1 root root 3099 Nov 8 01:57 bgp.conf -rw-rw-r-- 1 root root 3099 Nov 8 01:25 bgp.conf.template -rw-r--r-- 1 root root 1615 Nov 8 01:57 log.conf -rw-rw-r-- 1 root root 1615 Nov 8 01:25 log.conf.template $ cat /etc/bagpipe-bgp/bgp.conf [BGP] local_address=10.0.1.2 peers=10.0.1.1 my_as=65000 enable_rtc=False (略) $ diff /etc/bagpipe-bgp/bgp.conf /etc/bagpipe-bgp/bgp.conf.template 2,5c2,5 < local_address=10.0.1.2 < peers=10.0.1.1 < my_as=65000 < enable_rtc=False --- > local_address=192.168.100.177 > peers=192.168.0.101 > my_as=64512 > enable_rtc=True
log 出力設定ファイル (/etc/bagpipe-bgp/log.conf)
/etc/bagpipe-bgp/log.conf
[logger_engine]
だけ出力レベルを WARNING からDEBUG
に変更(様子を観察するため)- デフォルトでは
/var/log/bagpipe-bgp/bagpipe-bgp.log
に出力される
$ cat /etc/bagpipe-bgp/log.conf (略) [logger_engine] level=DEBUG propagate=0 qualname=bagpipe.bgp.engine handlers=rotatingFile parent=bgp (略) $ diff /etc/bagpipe-bgp/log.conf /etc/bagpipe-bgp/log.conf.template 25c25 < level=DEBUG --- > level=WARNING
bagpipe-bgp 起動~状態確認
ここからの例では起動の前に、適当な iBGP neighbor を用意しておきます。
起動
service
で普通に扱うだけ- 要 root 権限
$ sudo service bagpipe-bgp start Starting BGP component... $ sudo service bagpipe-bgp restart Restarting BGP component... stopping.........starting $ sudo service bagpipe-bgp status BGP component is running.
ログ確認
- デフォルトのログ設定ではさほど出力されないが、前述の通り
[logger_engine]
の level を DEBUG に変えたので、やたら出ている
$ more /var/log/bagpipe-bgp/bagpipe-bgp.log 2015-11-08 12:18:41,772 BGP-10.0.1.1 bagpipe.bgp.engine.exabgp_peer_worker.10-0-1-1 INFO Re-initiating 2015-11-08 12:18:41,773 BGP-10.0.1.1 bagpipe.bgp.engine.exabgp_peer_worker.10-0-1-1 INFO Worker BGP-10.0.1.1 BGP FSM transitioned from 'OpenSent' to 'Idle' state 2015-11-08 12:18:41,773 BGP-10.0.1.1 bagpipe.bgp.engine.bgp_manager DEBUG push cleanup event for worker BGP-10.0.1.1 to RouteTableManager 2015-11-08 12:18:41,773 RouteTableManager bagpipe.bgp.engine.route_table_manager DEBUG RouteTableManager received event WorkerCleanupEvent:BGP-10.0.1.1 2015-11-08 12:18:41,774 RouteTableManager bagpipe.bgp.engine.route_table_manager INFO Cleanup for worker BGP-10.0.1.1 2015-11-08 12:18:41,774 RouteTableManager bagpipe.bgp.engine.route_table_manager INFO (we had no trace of Worker BGP-10.0.1.1 in _source2entries) 2015-11-08 12:18:41,774 RouteTableManager bagpipe.bgp.engine.route_table_manager DEBUG RouteTableManager queue size: 0 2015-11-08 12:18:41,774 RouteTableManager bagpipe.bgp.engine.route_table_manager DEBUG RouteTableManager waiting on queue 2015-11-08 12:18:51,788 BGP-10.0.1.1 bagpipe.bgp.engine.exabgp_peer_worker.10-0-1-1 INFO Worker BGP-10.0.1.1 BGP FSM transitioned from 'Idle' to 'Connect' state 2015-11-08 12:18:51,788 BGP-10.0.1.1 bagpipe.bgp.engine.exabgp_peer_worker.10-0-1-1 DEBUG Initiate ExaBGP connection to 10.0.1.1 from 10.0.1.2 2015-11-08 12:18:51,790 BGP-10.0.1.1 bagpipe.bgp.engine.exabgp_peer_worker.10-0-1-1 DEBUG Instantiate ExaBGP Protocol 2015-11-08 12:18:51,791 BGP-10.0.1.1 bagpipe.bgp.engine.exabgp_peer_worker.10-0-1-1 DEBUG Send open: [OPEN version=4 asn=65000 hold_time=180 router_id=10.0.1.2 capabilities=[Multiprotocol IPv4 mpls-vpn L2VPN evpn, 4Bytes AS 65000]] 2015-11-08 12:18:51,792 BGP-10.0.1.1 bagpipe.bgp.engine.exabgp_peer_worker.10-0-1-1 INFO Worker BGP-10.0.1.1 BGP FSM transitioned from 'Connect' to 'OpenSent' state 2015-11-08 12:18:51,792 BGP-10.0.1.1 bagpipe.bgp.engine.exabgp_peer_worker.10-0-1-1 DEBUG Wait for open... 2015-11-08 12:18:51,793 BGP-10.0.1.1 bagpipe.bgp.engine.exabgp_peer_worker.10-0-1-1 DEBUG Read message: OPEN version=4 asn=65000 hold_time=90 router_id=192.168.101.170 capabilities=[Multiprotocol L2VPN evpn, Route Refresh, 4Bytes AS 65000] 2015-11-08 12:18:51,793 BGP-10.0.1.1 bagpipe.bgp.engine.exabgp_peer_worker.10-0-1-1 INFO changing thread name from BGP-10.0.1.1 to BGP-x192.168.101.170, based on the router-id advertized in Open (different from peerAddress == 10.0.1.1) 2015-11-08 12:18:51,793 BGP-10.0.1.1/192.168.101.170 bagpipe.bgp.engine.exabgp_peer_worker.10-0-1-1 WARNING Peer does not advertise (IPv4,mpls-vpn) capability 2015-11-08 12:18:51,794 BGP-10.0.1.1/192.168.101.170 bagpipe.bgp.engine.exabgp_peer_worker.10-0-1-1 INFO Family (L2VPN,evpn) successfully negotiated with peer 10.0.1.1 2015-11-08 12:18:51,795 BGP-10.0.1.1/192.168.101.170 bagpipe.bgp.engine.exabgp_peer_worker.10-0-1-1 WARNING Peer does not advertise (IPv4,rtc) capability 2015-11-08 12:18:51,795 BGP-10.0.1.1/192.168.101.170 bagpipe.bgp.engine.exabgp_peer_worker.10-0-1-1 INFO Worker BGP-10.0.1.1/192.168.101.170 BGP FSM transitioned from 'OpenSent' to 'OpenConfirm' state 2015-11-08 12:18:51,795 BGP-10.0.1.1/192.168.101.170 bagpipe.bgp.engine.exabgp_peer_worker.10-0-1-1 DEBUG Init sendKA timer (30s) 2015-11-08 12:18:51,796 BGP-10.0.1.1/192.168.101.170 bagpipe.bgp.engine.exabgp_peer_worker.10-0-1-1 DEBUG Init Keepalive reception timer (90s) 2015-11-08 12:18:51,797 BGP-10.0.1.1/192.168.101.170 bagpipe.bgp.engine.exabgp_peer_worker.10-0-1-1 DEBUG Sending 19 bytes on socket to peer 10.0.1.1 2015-11-08 12:18:51,797 BGP-10.0.1.1/192.168.101.170:receiveLoop bagpipe.bgp.engine.exabgp_peer_worker.10-0-1-1 INFO Start receive loop 2015-11-08 12:18:51,798 BGP-10.0.1.1/192.168.101.170:receiveLoop bagpipe.bgp.engine.exabgp_peer_worker.10-0-1-1 INFO Worker BGP-10.0.1.1/192.168.101.170 BGP FSM transitioned from 'OpenConfirm' to 'Established' state 2015-11-08 12:18:51,798 BGP-10.0.1.1/192.168.101.170:receiveLoop bagpipe.bgp.engine.worker INFO Subscribe: Subscription [L2VPN/evpn,*] by BGP-10.0.1.1/192.168.101.170 2015-11-08 12:18:51,799 BGP-10.0.1.1/192.168.101.170:receiveLoop bagpipe.bgp.engine.bgp_manager DEBUG bagpipe.bgp.engine.bgp_manager.Manager method _routeEventSubscribe called with arguments (Subscription [L2VPN/evpn,*] by BGP-10.0.1.1/192.168.101.170,) {} 2015-11-08 12:18:51,799 RouteTableManager bagpipe.bgp.engine.route_table_manager DEBUG RouteTableManager received event Subscription [L2VPN/evpn,*] by BGP-10.0.1.1/192.168.101.170 2015-11-08 12:18:51,799 RouteTableManager bagpipe.bgp.engine.route_table_manager INFO workerSubscribes: Subscription [L2VPN/evpn,*] by BGP-10.0.1.1/192.168.101.170 2015-11-08 12:18:51,800 RouteTableManager bagpipe.bgp.engine.route_table_manager DEBUG RouteTableManager queue size: 0 2015-11-08 12:18:51,800 RouteTableManager bagpipe.bgp.engine.route_table_manager DEBUG RouteTableManager waiting on queue 2015-11-08 12:18:51,800 BGP-10.0.1.1/192.168.101.170 bagpipe.bgp.engine.exabgp_peer_worker.10-0-1-1 DEBUG Keepalive received 2015-11-08 12:18:51,801 BGP-10.0.1.1/192.168.101.170 bagpipe.bgp.engine.exabgp_peer_worker.10-0-1-1 DEBUG Init Keepalive reception timer (90s) 2015-11-08 12:18:51,800 BGP-10.0.1.1/192.168.101.170:receiveLoop bagpipe.bgp.engine.exabgp_peer_worker.10-0-1-1 DEBUG Received message: KEEPALIVE 2015-11-08 12:19:21,797 BGP-10.0.1.1/192.168.101.170:sendKATimer bagpipe.bgp.engine.exabgp_peer_worker.10-0-1-1 DEBUG Trigger send KeepAlive 2015-11-08 12:19:21,798 BGP-10.0.1.1/192.168.101.170 bagpipe.bgp.engine.exabgp_peer_worker.10-0-1-1 DEBUG Sending 19 bytes on socket to peer 10.0.1.1 2015-11-08 12:19:21,798 BGP-10.0.1.1/192.168.101.170:sendKATimer bagpipe.bgp.engine.exabgp_peer_worker.10-0-1-1 DEBUG Init sendKA timer (30s) 2015-11-08 12:19:21,800 BGP-10.0.1.1/192.168.101.170:receiveLoop bagpipe.bgp.engine.exabgp_peer_worker.10-0-1-1 DEBUG Received message: KEEPALIVE 2015-11-08 12:19:21,800 BGP-10.0.1.1/192.168.101.170 bagpipe.bgp.engine.exabgp_peer_worker.10-0-1-1 DEBUG Keepalive received 2015-11-08 12:19:21,800 BGP-10.0.1.1/192.168.101.170 bagpipe.bgp.engine.exabgp_peer_worker.10-0-1-1 DEBUG Init Keepalive reception timer (90s)
状態確認(bagpipe-looking-glass)
$ bagpipe-looking-glass bgp peers 10.0.1.1 protocol: state: Established hold_time: 90 last_transition_time: 2015-11-08 12:18:51 previous_state: (OpenConfirm) name: BGP-10.0.1.1/192.168.101.170 rtc: active: False enabled: False as_info: peer: 65000 local: 65000 internals: event queue length: 0 subscriptions: * match:L2VPN/evpn,* peeringAddresses: peerAddress: 10.0.1.1 localAddress: 10.0.1.2 routes: (...) active_families: * (L2VPN, evpn) logs: (...)
- bagpipe は Openstack Neutron components あたりとの連携して使うのが一般的のようで RESTAPI 制御も可能
- 適当に別のノードから突いた一例
$ curl -s http://192.168.101.171:8082/looking-glass/bgp/peers/10.0.1.1 | python -m json.tool
{ "active_families": [ "(L2VPN, evpn)" ], "as_info": { "local": 65000, "peer": 65000 }, "internals": { "event queue length": 0, "subscriptions": [ "match:L2VPN/evpn,*" ] }, "logs": { "href": "http://192.168.101.171:8082/looking-glass/bgp/peers/10.0.1.1/logs" }, "name": "BGP-10.0.1.1/192.168.101.170", "peeringAddresses": { "localAddress": "10.0.1.2", "peerAddress": "10.0.1.1" }, "protocol": { "hold_time": 90, "last_transition_time": "2015-11-08 12:18:51", "previous_state": "(OpenConfirm)", "state": "Established" }, "routes": { "href": "http://192.168.101.171:8082/looking-glass/bgp/peers/10.0.1.1/routes" }, "rtc": { "active": false, "enabled": false } }
おわり
- インストールしただけなので、特に…
GoBGP インストール~簡易動作確認 (original : 2015/11/08)
この記事は某所で 2015/11/08
に書いたもののコピーです。
そのため 2017/05/13
時点ではやや古い情報も含まれています。
概要
本項でやること
- gobgp をインストール~起動~適当なノードとiBGP Peeringするところまでです
- gobgp 公式 Getting started に従います
環境情報
$ uname -a Linux as65000-s1 3.19.0-25-generic #26~14.04.1-Ubuntu SMP Fri Jul 24 21:16:20 UTC 2015 x86_64 x86_64 x86_64 GNU/Linux $ uname -r 3.19.0-25-generic $ cat /etc/lsb-release DISTRIB_ID=Ubuntu DISTRIB_RELEASE=14.04 DISTRIB_CODENAME=trusty DISTRIB_DESCRIPTION="Ubuntu 14.04.3 LTS"
構築手順
Go インストール
- 公式 Getting Started に従いインストール
$ wget --no-check-certificate https://storage.googleapis.com/golang/go1.5.1.linux-amd64.tar.gz $ ls -al total 76060 drwxrwxr-x 2 kotetsu kotetsu 4096 Nov 7 20:53 . drwxr-xr-x 5 kotetsu kotetsu 4096 Nov 7 20:49 .. -rw-rw-r-- 1 kotetsu kotetsu 77875767 Sep 9 13:20 go1.5.1.linux-amd64.tar.gz $ sudo tar -C /usr/local -xzf go1.5.1.linux-amd64.tar.gz $ ls -al /usr/local/go/ total 136 drwxr-xr-x 11 root root 4096 Sep 9 10:37 . drwxr-xr-x 11 root root 4096 Nov 7 20:57 .. drwxr-xr-x 2 root root 4096 Sep 9 10:24 api -rw-r--r-- 1 root root 21146 Sep 9 10:24 AUTHORS drwxr-xr-x 2 root root 4096 Sep 9 10:37 bin drwxr-xr-x 4 root root 4096 Sep 9 10:37 blog -rw-r--r-- 1 root root 1107 Sep 9 10:24 CONTRIBUTING.md -rw-r--r-- 1 root root 28953 Sep 9 10:24 CONTRIBUTORS drwxr-xr-x 8 root root 4096 Sep 9 10:24 doc -rw-r--r-- 1 root root 1150 Sep 9 10:24 favicon.ico drwxr-xr-x 3 root root 4096 Sep 9 10:24 lib -rw-r--r-- 1 root root 1479 Sep 9 10:24 LICENSE drwxr-xr-x 13 root root 4096 Sep 9 10:37 misc -rw-r--r-- 1 root root 1303 Sep 9 10:24 PATENTS drwxr-xr-x 7 root root 4096 Sep 9 10:37 pkg -rw-r--r-- 1 root root 1519 Sep 9 10:24 README.md -rw-r--r-- 1 root root 26 Sep 9 10:24 robots.txt drwxr-xr-x 43 root root 4096 Sep 9 10:24 src drwxr-xr-x 16 root root 12288 Sep 9 10:36 test -rw-r--r-- 1 root root 7 Sep 9 10:24 VERSION $ mkdir $HOME/go $ echo 'export GOPATH=$HOME/go' >> $HOME/.profile $ echo 'export PATH=$PATH:/usr/local/go/bin:$GOPATH/bin' >> $HOME/.profile $ source $HOME/.profile $ env | grep PATH PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/usr/local/go/bin:/usr/local/go/bin:/usr/local/go/bin:/home/kotetsu/go/bin GOPATH=/home/kotetsu/go $ go version go version go1.5.1 linux/amd64
gobgp インストール
- インストールに使う
go get
コマンドに必要なパッケージを適宜インストール GoGetTools
$ sudo apt-get update $ sudo apt-get install git mercurial
- gobgp Getting started に従いインストール
$ go get github.com/osrg/gobgp/gobgpd warning: code.google.com is shutting down; import path code.google.com/p/go-uuid/uuid will stop working $ go get github.com/osrg/gobgp/gobgp $ ls -al ~/go/bin/ total 29056 drwxrwxr-x 2 kotetsu kotetsu 4096 Nov 7 21:43 . drwxrwxr-x 5 kotetsu kotetsu 4096 Nov 7 21:36 .. -rwxr-xr-x 1 kotetsu kotetsu 13801080 Nov 7 21:43 gobgp -rwxr-xr-x 1 kotetsu kotetsu 15939792 Nov 7 21:36 gobgpd
gobgpd.conf 作成
- 適当なディレクトリに config ファイルを作成して、適当な設定を書き込む
- 以下例では iBGP しか設定していないが、eBGP も動く
$ mkdir ~/gobgp $ touch ~/gobgp/gobgpd.conf $ cat ~/gobgp/gobgpd.conf [Global] [Global.GlobalConfig] As = 65000 RouterId = "192.168.101.170" [Neighbors] [[Neighbors.NeighborList]] [Neighbors.NeighborList.NeighborConfig] NeighborAddress = "10.0.1.2" PeerAs = 65000 [Neighbors.NeighborList.AfiSafis] [[Neighbors.NeighborList.AfiSafis.AfiSafiList]] AfiSafiName = "l2vpn-evpn" [[Neighbors.NeighborList]] [Neighbors.NeighborList.NeighborConfig] NeighborAddress = "10.0.2.2" PeerAs = 65000 [Neighbors.NeighborList.AfiSafis] [[Neighbors.NeighborList.AfiSafis.AfiSafiList]] AfiSafiName = "l2vpn-evpn"
gobgpd 起動
- root 権限で実行しないと、IP アドレス bind に失敗する
- デフォルトではフォアグラウンドで動く
$ gobgpd -f ~/gobgp/gobgpd.conf {"level":"info","msg":"gobgpd started","time":"2015-11-07T22:11:54+09:00"} {"level":"info","msg":"finished reading the config file","time":"2015-11-07T22:11:54+09:00"} {"level":"info","msg":"listen tcp4 :179: bind: permission denied","time":"2015-11-07T22:11:54+09:00"} {"level":"info","msg":"listen tcp6 :179: bind: permission denied","time":"2015-11-07T22:11:54+09:00"} {"level":"fatal","msg":"can't listen either v4 and v6","time":"2015-11-07T22:11:54+09:00"} $ sudo cat /etc/sudoers | grep Defaults Defaults env_reset Defaults mail_badpass Defaults secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin" Defaults exempt_group="kotetsu" $ sudo -E gobgpd -f ~/gobgp/gobgpd.conf & [1] 8242 kotetsu@as65000-1:~$ {"level":"info","msg":"gobgpd started","time":"2015-11-07T22:28:37+09:00"} {"level":"info","msg":"finished reading the config file","time":"2015-11-07T22:28:37+09:00"} {"level":"info","msg":"Peer 10.0.1.2 is added","time":"2015-11-07T22:28:37+09:00"} {"level":"info","msg":"Peer 10.0.2.2 is added","time":"2015-11-07T22:28:37+09:00"} $ ps au | grep [g]o root 8242 0.0 0.8 64956 4052 pts/1 S Nov07 0:00 sudo -E gobgpd -f /home/kotetsu/gobgp/gobgpd.conf root 8243 0.0 2.1 139396 11004 pts/1 Sl Nov07 0:01 gobgpd -f /home/kotetsu/gobgp/gobgpd.conf $ gobgp neighbor --help Usage: gobgp neighbor [flags] Flags: -a, --address-family="": address family -t, --transport="": specifying a transport protocol Global Flags: --bash-cmpl-file="gobgp_completion.bash": bash cmpl filename -d, --debug[=false]: use debug -c, --gen-cmpl[=false]: generate completion file -u, --host="127.0.0.1": host -j, --json[=false]: use json format to output format -p, --port=8080: port -q, --quiet[=false]: use quiet
動作確認
適当な neighbor を用意して、動作確認(勿論 gobgp 同士でも可能)
- neighbor の Peer 確立、切断時などにはデフォルトでは標準出力に以下のような出力
{"Key":"10.0.1.2","Reason":"Peer closed the session","State":6,"Topic":"Peer","level":"info","msg":"Peer Down","time":"2015-11-08T12:18:41+09:00"} {"Key":"10.0.1.2","Topic":"Peer","level":"warning","msg":"Closed an accepted connection","time":"2015-11-08T12:18:41+09:00"} {"Key":"10.0.1.2","State":5,"Topic":"Peer","level":"info","msg":"Peer Up","time":"2015-11-08T12:18:51+09:00"}
gobgp
各種コマンドで状態確認可能- 以下公式のドキュメント
$ gobgp neighbor Peer AS Up/Down State |#Advertised Received Accepted 10.0.1.2 65000 02:07:33 Establ | 0 0 0 10.0.2.2 65000 never Active | 0 0 0 $ gobgp neighbor 10.0.1.2 BGP neighbor is 10.0.1.2, remote AS 65000 BGP version 4, remote router ID 10.0.1.2 BGP state = BGP_FSM_ESTABLISHED, up for 02:07:40 BGP OutQ = 0, Flops = 0 Hold time is 0, keepalive interval is 30 seconds Configured hold time is 90, keepalive interval is 30 seconds Neighbor capabilities: BGP_CAP_MULTIPROTOCOL: RF_EVPN: advertised and received RF_IPv4_VPN: received RF_RTC_UC: received BGP_CAP_ROUTE_REFRESH: advertised BGP_CAP_FOUR_OCTET_AS_NUMBER: advertised and received Message statistics: Sent Rcvd Opens: 20 20 Notifications: 0 0 Updates: 0 0 Keepalives: 392 392 Route Refesh: 0 0 Discarded: 0 0 Total: 412 412 Route statistics: Advertised: 0 Received: 0 Accepted: 0
おまけ CLI's tab 補完(bash 用) 導入
- 'gobgp' 各種コマンドを Tab 補完できるようになるので、入れておくと便利
$ cd ~/gobgp $ wget https://raw.githubusercontent.com/osrg/gobgp/master/tools/completion/gobgp-completion.bash $ ls -al total 56 drwxrwxr-x 2 kotetsu kotetsu 4096 Nov 7 23:32 . drwxr-xr-x 6 kotetsu kotetsu 4096 Nov 7 22:07 .. -rw-rw-r-- 1 kotetsu kotetsu 41832 Nov 7 23:32 gobgp-completion.bash -rw-rw-r-- 1 kotetsu kotetsu 354 Nov 7 22:10 gobgpd.conf $ source ~/gobgp/gobgp-completion.bash
おわり
- インストールしただけなので別に…
Arista EOS の python コード読み始め (original : 2015/05/06)
この記事は某所で 2015/05/06
に書いたもののコピーです。
そのため 2017/05/13
時点ではやや古い情報も含まれています。
概要
本項でやること
EOS の読んでおきたいコードをメインに、ディレクトリ構造を追いました。本項単体では何も得られない僕向けの内容です。マニュアルで得られない情報をコードやコメントから読み取るのって、楽しいんですよね(死んだ魚の目)。
以下のようなことをやるための前戯の意味もあります。
- 自分だけの CLI コマンドを実装( Understanding EOS CLI implementation 参照)
- EOS を介さずに sysdb を直接突く (後述)
- RPM をインストールして EOS の extension として動かして機能拡張( Packaging and installing EOS extensions 参照)
sysdb に関しては、直接突くための SDK が公式で公開されているのですが、EOS 側にインストール必要な rpm が Guest アカウントでは Download 権限がなかったです(2015/05/03 時点)。
そこで EOS の python コードを読めば(その中で sysdb を呼び出している筈なので)、SDK がなくても突けるのではないかと考えました(未施行)。
Arista EOS?
Arista EOS 自体については、以下の本をオススメしときますね。
Arista Warrior: A Real-World Guide to Understanding Arista Switches and EOS
- 作者: Gary A. Donahue
- 出版社/メーカー: O'Reilly Media
- 発売日: 2012/10/27
- メディア: ペーパーバック
- この商品を含むブログを見る
環境
2015/04 にリリースされたばかりの 4.15.0F が、vEOS にも早速来ていました。ウヒョー!
- Aboot-veos:Aboot-veos-2.1.0
- OS:vEOS-4.15.0F
- CPU:1core
- Memory:1024MB
サマリ
path | 内容 |
---|---|
/mnt/flash | OS ファイルや startup-config ファイルが配置されているディレクトリ |
/mnt/flash/.extensions | extension として読み込ませる rpm を配置するディレクトリ |
/usr/bin/[A-Z]* | Arista 固有 agent 群 |
/usr/lib/python2.7/site-packages/*.py | EOS コア系処理 |
/usr/lib/python2.7/site-packages/SysdbPlugin/*.py | Sysdb 構成 |
/usr/lib/python2.7/site-packages/CliPlugin/*.py | EOS CLI コマンドの定義をしている python スクリプト群 |
/usr/lib/python2.7/site-packages/MlagPlugin/*.py | MLAG 関係の sysdb 読み書きをしている python スクリプト群 |
なので /usr/lib/python2.7/site-packages/
配下を固めて手元に持ってきて、適当なエディタにぶち込んで読んでます。
詳細
EOS CLI から bash に降りる
こんな感じで。
veos-dev[20150505_22:12:16]>en veos-dev[20150505_22:12:25]#bash Arista Networks EOS shell [kotetsu@veos-dev ~]$
root 化が必要な時には。
[kotetsu@veos-dev ~]$ sudo -s bash-4.1#
OS コマンドで構成情報を探る
[kotetsu@veos-dev ~]$ uname -a Linux veos-dev 3.4.43.Ar-2374134.4150F #1 SMP PREEMPT Thu Apr 9 14:38:10 PDT 2015 x86_64 x86_64 x86_64 GNU/Linux [kotetsu@veos-dev ~]$
いつも思うのですが memory 1GB だといっぱいいっぱいなので、2GBくらい割当てた方が良いかもです。
[kotetsu@veos-dev ~]$ free total used free shared buffers cached Mem: 996096 957036 39060 0 9724 370736 -/+ buffers/cache: 576576 419520 Swap: 0 0 0 [kotetsu@veos-dev ~]$
Arista 独自のプロセスは大文字で始まるものが多いみたいです。
[kotetsu@veos-dev ~]$ ps -ef UID PID PPID C STIME TTY TIME CMD root 1 0 0 22:09 ? 00:00:01 /sbin/init root 2 0 0 22:09 ? 00:00:00 [kthreadd] root 3 2 0 22:09 ? 00:00:00 [ksoftirqd/0] root 4 2 0 22:09 ? 00:00:00 [kworker/0:0] root 6 2 0 22:09 ? 00:00:00 [migration/0] root 8 2 0 22:09 ? 00:00:00 [khelper] root 9 2 0 22:09 ? 00:00:00 [netns] root 166 2 0 22:09 ? 00:00:00 [sync_supers] root 168 2 0 22:09 ? 00:00:00 [bdi-default] root 170 2 0 22:09 ? 00:00:00 [kblockd] root 177 2 0 22:09 ? 00:00:00 [ata_sff] root 187 2 0 22:09 ? 00:00:00 [khubd] root 210 2 0 22:09 ? 00:00:00 [dst_gc_task] root 295 2 0 22:09 ? 00:00:00 [arp_cache-prd] root 296 2 0 22:09 ? 00:00:00 [icmp_unreachabl] root 297 2 0 22:09 ? 00:00:00 [rpciod] root 300 2 0 22:09 ? 00:00:00 [ecc_log_wq] root 309 2 0 22:09 ? 00:00:00 [khungtaskd] root 310 2 0 22:09 ? 00:00:00 [khungtaskd2] root 314 2 0 22:09 ? 00:00:02 [kswapd0] root 315 2 0 22:09 ? 00:00:00 [fsnotify_mark] root 316 2 0 22:09 ? 00:00:00 [nfsiod] root 317 2 0 22:09 ? 00:00:00 [crypto] root 323 2 0 22:09 ? 00:00:00 [pcielwd] root 362 2 0 22:09 ? 00:00:00 [scsi_eh_0] root 365 2 0 22:09 ? 00:00:00 [scsi_eh_1] root 368 2 0 22:09 ? 00:00:00 [kworker/u:2] root 369 2 0 22:09 ? 00:00:00 [kworker/u:3] root 433 2 0 22:09 ? 00:00:00 [edac-poller] root 465 2 0 22:09 ? 00:00:00 [ndisc_cache-prd] root 469 2 0 22:09 ? 00:00:00 [deferwq] root 605 2 2 22:09 ? 00:00:08 [loop0] root 617 2 0 22:09 ? 00:00:00 [flush-8:0] root 886 1 0 22:09 ? 00:00:00 /sbin/udevd -d root 1006 2 0 22:09 ? 00:00:01 [kworker/0:2] root 1216 1 0 22:09 ? 00:00:00 python /usr/bin/inotifyrun -c pax -x sv4cpio -O -w -f /mnt/flash/persist/local.new . && root 1218 1216 0 22:09 pts/0 00:00:00 inotifywait -m -r -e modify -e create -e delete -e attrib -e move . root 1228 1 0 22:09 ? 00:00:00 python /usr/bin/inotifyrun -c pax -x sv4cpio -O -w -f /mnt/flash/persist/sys.new . && mv root 1229 1228 0 22:09 pts/1 00:00:00 inotifywait -m -r -e modify -e create -e delete -e attrib -e move . root 1241 1 0 22:09 ? 00:00:00 python /usr/bin/inotifyrun -c shred --exact --iterations=1 /mnt/flash/persist/secure; pa root 1243 1241 0 22:09 pts/2 00:00:00 inotifywait -m -r -e modify -e create -e delete -e attrib -e move . root 1249 2 0 22:09 ? 00:00:00 [watchdog/0] root 1343 1 0 22:09 ? 00:00:00 watchdog root 1344 1343 0 22:09 ? 00:00:00 wdog-cld root 1400 1 0 22:09 ? 00:00:00 /usr/bin/EosOomAdjust root 1404 1 0 22:09 ? 00:00:00 /usr/sbin/mcelog --daemon --no-syslog --logfile /var/log/mcelog root 1415 2 0 22:09 ? 00:00:00 [kbfd_v4v6_rx] root 1416 2 0 22:09 ? 00:00:00 [kbfd_v4v6_echo] root 1417 2 0 22:09 ? 00:00:00 [kbfd_tx] root 1418 2 0 22:09 ? 00:00:00 [kbfd_rx_expire] root 1419 2 0 22:09 ? 00:00:00 [kbfd_tx_reset] root 1420 2 0 22:09 ? 00:00:00 [kbfd_echo_tx] root 1421 2 0 22:09 ? 00:00:00 [kbfd_echo_rx_ex] root 1422 2 0 22:09 ? 00:00:00 [kbfd_echo_tx_re] root 1423 2 0 22:09 ? 00:00:00 [kbfd_echo_exp_r] root 1462 1 0 22:09 ? 00:00:00 crond root 1516 1 0 22:10 ? 00:00:00 netnsd-watcher -d -i --dlopen -p -f -l libLoadDynamicLibs.so procmgr libProcMgrSetup.s root 1518 1516 0 22:10 ? 00:00:00 netnsd-server -d -i --dlopen -p -f -l libLoadDynamicLibs.so procmgr libProcMgrSetup.s root 1526 1 0 22:10 ? 00:00:00 ProcMgr-mast -d -i --dlopen -p -f -l libLoadDynamicLibs.so procmgr libProcMgrSetup.s root 1527 1526 0 22:10 ? 00:00:01 ProcMgr-work -d -i --dlopen -p -f -l libLoadDynamicLibs.so procmgr libProcMgrSetup.s root 1528 1527 2 22:10 ? 00:00:08 Sysdb -d -i --dlopen -p -f -l libLoadDynamicLibs.so procmgr libProcMgrSetup.s root 1530 1527 0 22:10 ? 00:00:00 Fru -d -i --dlopen -p -f -l libLoadDynamicLibs.so procmgr libProcMgrSetup.s root 1531 1527 0 22:10 ? 00:00:01 Launcher -d -i --dlopen -p -f -l libLoadDynamicLibs.so procmgr libProcMgrSetup.s root 1630 1527 0 22:10 ? 00:00:00 netns --dlopen procmgr /usr/bin/Lldp root 1631 1527 0 22:10 ? 00:00:00 netns --dlopen procmgr /usr/bin/LacpTxAgent root 1632 1527 0 22:10 ? 00:00:00 netns --dlopen procmgr /usr/bin/PortSec root 1633 1527 0 22:10 ? 00:00:00 netns --dlopen procmgr /usr/bin/Bfd root 1634 1527 0 22:10 ? 00:00:00 netns --dlopen procmgr /usr/bin/Ipv6RouterAdvt root 1636 1518 0 22:10 ? 00:00:00 netnsd-session -d -i --dlopen -p -f -l libLoadDynamicLibs.so procmgr libProcMgrSetup.s root 1637 1636 0 22:10 ? 00:00:00 Lldp -d -i --dlopen -p -f -l libLoadDynamicLibs.so procmgr libProcMgrSetup.s root 1639 1527 0 22:10 ? 00:00:01 SuperServer -d -i --dlopen -p -f -l libLoadDynamicLibs.so procmgr libProcMgrSetup.s root 1640 1527 0 22:10 ? 00:00:00 netns --dlopen procmgr /usr/bin/PimReg root 1641 1518 0 22:10 ? 00:00:00 netnsd-session -d -i --dlopen -p -f -l libLoadDynamicLibs.so procmgr libProcMgrSetup.s root 1643 1518 0 22:10 ? 00:00:00 netnsd-session -d -i --dlopen -p -f -l libLoadDynamicLibs.so procmgr libProcMgrSetup.s root 1644 1641 0 22:10 ? 00:00:00 PortSec -d -i --dlopen -p -f -l libLoadDynamicLibs.so procmgr libProcMgrSetup.s root 1645 1527 0 22:10 ? 00:00:00 netns --dlopen procmgr /usr/bin/Ira root 1646 1527 0 22:10 ? 00:00:00 netns --dlopen procmgr /usr/bin/LedPolicy root 1647 1518 0 22:10 ? 00:00:00 netnsd-session -d -i --dlopen -p -f -l libLoadDynamicLibs.so procmgr libProcMgrSetup.s root 1648 1518 0 22:10 ? 00:00:00 netnsd-session -d -i --dlopen -p -f -l libLoadDynamicLibs.so procmgr libProcMgrSetup.s root 1649 1643 0 22:10 ? 00:00:00 LacpTxAgent -d -i --dlopen -p -f -l libLoadDynamicLibs.so procmgr libProcMgrSetup.s root 1651 1647 0 22:10 ? 00:00:00 Bfd -d -i --dlopen -p -f -l libLoadDynamicLibs.so procmgr libProcMgrSetup.s root 1653 1518 0 22:10 ? 00:00:00 netnsd-session -d -i --dlopen -p -f -l libLoadDynamicLibs.so procmgr libProcMgrSetup.s root 1655 1527 0 22:10 ? 00:00:00 netns --dlopen procmgr /usr/bin/KernelMfib root 1656 1527 0 22:10 ? 00:00:00 EventMon -d -i --dlopen -p -f -l libLoadDynamicLibs.so procmgr libProcMgrSetup.s root 1657 1527 0 22:10 ? 00:00:00 netns --dlopen procmgr /usr/bin/AgentMonitor root 1659 1648 0 22:10 ? 00:00:00 Ipv6RouterAd -d -i --dlopen -p -f -l libLoadDynamicLibs.so procmgr libProcMgrSetup.s root 1660 1653 0 22:10 ? 00:00:00 PimReg -d -i --dlopen -p -f -l libLoadDynamicLibs.so procmgr libProcMgrSetup.s root 1663 1518 0 22:10 ? 00:00:00 netnsd-session -d -i --dlopen -p -f -l libLoadDynamicLibs.so procmgr libProcMgrSetup.s root 1664 1518 0 22:10 ? 00:00:00 netnsd-session -d -i --dlopen -p -f -l libLoadDynamicLibs.so procmgr libProcMgrSetup.s root 1665 1527 0 22:10 ? 00:00:00 netns --dlopen procmgr /usr/bin/Msdp root 1667 1527 0 22:10 ? 00:00:00 netns --dlopen procmgr /usr/bin/Fhrp root 1668 1527 0 22:10 ? 00:00:00 Aaa -d -i --dlopen -p -f -l libLoadDynamicLibs.so procmgr libProcMgrSetup.s root 1669 1663 0 22:10 ? 00:00:00 Ira -d -i --dlopen -p -f -l libLoadDynamicLibs.so procmgr libProcMgrSetup.s root 1670 1518 0 22:10 ? 00:00:00 netnsd-session -d -i --dlopen -p -f -l libLoadDynamicLibs.so procmgr libProcMgrSetup.s root 1671 1664 0 22:10 ? 00:00:00 LedPolicy -d -i --dlopen -p -f -l libLoadDynamicLibs.so procmgr libProcMgrSetup.s root 1672 1670 0 22:10 ? 00:00:00 KernelMfib -d -i --dlopen -p -f -l libLoadDynamicLibs.so procmgr libProcMgrSetup.s root 1674 1527 0 22:10 ? 00:00:00 netns --dlopen procmgr /usr/bin/StpTopology root 1676 1518 0 22:10 ? 00:00:00 netnsd-session -d -i --dlopen -p -f -l libLoadDynamicLibs.so procmgr libProcMgrSetup.s root 1678 1527 0 22:10 ? 00:00:00 netns --dlopen procmgr /usr/bin/PowerManager root 1681 1518 0 22:10 ? 00:00:00 netnsd-session -d -i --dlopen -p -f -l libLoadDynamicLibs.so procmgr libProcMgrSetup.s root 1683 1676 0 22:10 ? 00:00:02 AgentMonitor -d -i --dlopen -p -f -l libLoadDynamicLibs.so procmgr libProcMgrSetup.s root 1685 1518 0 22:10 ? 00:00:00 netnsd-session -d -i --dlopen -p -f -l libLoadDynamicLibs.so procmgr libProcMgrSetup.s root 1687 1681 0 22:10 ? 00:00:00 Msdp -d -i --dlopen -p -f -l libLoadDynamicLibs.so procmgr libProcMgrSetup.s root 1688 1518 0 22:10 ? 00:00:00 netnsd-session -d -i --dlopen -p -f -l libLoadDynamicLibs.so procmgr libProcMgrSetup.s root 1689 1527 0 22:10 ? 00:00:00 netns --dlopen procmgr /usr/bin/Mpls root 1691 1685 0 22:10 ? 00:00:00 StpTopology -d -i --dlopen -p -f -l libLoadDynamicLibs.so procmgr libProcMgrSetup.s root 1692 1518 0 22:10 ? 00:00:00 netnsd-session -d -i --dlopen -p -f -l libLoadDynamicLibs.so procmgr libProcMgrSetup.s root 1693 1688 0 22:10 ? 00:00:00 Fhrp -d -i --dlopen -p -f -l libLoadDynamicLibs.so procmgr libProcMgrSetup.s root 1694 1692 0 22:10 ? 00:00:00 PowerManager -d -i --dlopen -p -f -l libLoadDynamicLibs.so procmgr libProcMgrSetup.s root 1695 1527 0 22:10 ? 00:00:00 netns --dlopen procmgr /usr/bin/Dot1x root 1696 1527 0 22:10 ? 00:00:00 netns --dlopen procmgr /usr/bin/Stp root 1698 1527 0 22:10 ? 00:00:00 netns --dlopen procmgr /usr/bin/IgmpHostProxy root 1699 1527 0 22:10 ? 00:00:00 netns --dlopen procmgr /usr/bin/Acl root 1701 1518 0 22:10 ? 00:00:00 netnsd-session -d -i --dlopen -p -f -l libLoadDynamicLibs.so procmgr libProcMgrSetup.s root 1702 1518 0 22:10 ? 00:00:00 netnsd-session -d -i --dlopen -p -f -l libLoadDynamicLibs.so procmgr libProcMgrSetup.s root 1703 1518 0 22:10 ? 00:00:00 netnsd-session -d -i --dlopen -p -f -l libLoadDynamicLibs.so procmgr libProcMgrSetup.s root 1704 1527 0 22:10 ? 00:00:00 netns --dlopen procmgr /usr/bin/PimBsr root 1705 1702 0 22:10 ? 00:00:00 Mpls -d -i --dlopen -p -f -l libLoadDynamicLibs.so procmgr libProcMgrSetup.s root 1706 1701 0 22:10 ? 00:00:00 Dot1x -d -i --dlopen -p -f -l libLoadDynamicLibs.so procmgr libProcMgrSetup.s root 1707 1527 0 22:10 ? 00:00:00 netns --dlopen procmgr /usr/bin/Thermostat root 1708 1527 0 22:10 ? 00:00:00 netns --dlopen procmgr /usr/bin/Arp root 1709 1703 0 22:10 ? 00:00:00 Stp -d -i --dlopen -p -f -l libLoadDynamicLibs.so procmgr libProcMgrSetup.s root 1710 1527 0 22:10 ? 00:00:00 netns --dlopen procmgr /usr/bin/Qos root 1711 1527 0 22:10 ? 00:00:00 netns --dlopen procmgr /usr/bin/Pim root 1712 1527 0 22:10 ? 00:00:00 netns --dlopen procmgr /usr/bin/LoopProtect root 1715 1527 0 22:10 ? 00:00:00 netns --dlopen procmgr /usr/bin/Mirroring root 1716 1527 0 22:10 ? 00:00:00 netns --dlopen procmgr /usr/bin/NetworkTopology root 1717 1527 0 22:10 ? 00:00:00 netns --dlopen procmgr /usr/bin/Ebra root 1718 1527 0 22:10 ? 00:00:00 netns --dlopen procmgr /usr/bin/KernelFib root 1720 1527 0 22:10 ? 00:00:00 netns --dlopen procmgr /usr/bin/TopoAgent root 1721 1518 0 22:10 ? 00:00:00 netnsd-session -d -i --dlopen -p -f -l libLoadDynamicLibs.so procmgr libProcMgrSetup.s root 1722 1721 0 22:10 ? 00:00:00 IgmpHostProx -d -i --dlopen -p -f -l libLoadDynamicLibs.so procmgr libProcMgrSetup.s root 1723 1518 0 22:10 ? 00:00:00 netnsd-session -d -i --dlopen -p -f -l libLoadDynamicLibs.so procmgr libProcMgrSetup.s root 1724 1527 0 22:10 ? 00:00:00 IgmpSnooping -d -i --dlopen -p -f -l libLoadDynamicLibs.so procmgr libProcMgrSetup.s root 1725 1518 0 22:10 ? 00:00:00 netnsd-session -d -i --dlopen -p -f -l libLoadDynamicLibs.so procmgr libProcMgrSetup.s root 1726 1518 0 22:10 ? 00:00:00 netnsd-session -d -i --dlopen -p -f -l libLoadDynamicLibs.so procmgr libProcMgrSetup.s root 1727 1518 0 22:10 ? 00:00:00 netnsd-session -d -i --dlopen -p -f -l libLoadDynamicLibs.so procmgr libProcMgrSetup.s root 1728 1518 0 22:10 ? 00:00:00 netnsd-session -d -i --dlopen -p -f -l libLoadDynamicLibs.so procmgr libProcMgrSetup.s root 1729 1518 0 22:10 ? 00:00:00 netnsd-session -d -i --dlopen -p -f -l libLoadDynamicLibs.so procmgr libProcMgrSetup.s root 1730 1725 0 22:10 ? 00:00:00 Thermostat -d -i --dlopen -p -f -l libLoadDynamicLibs.so procmgr libProcMgrSetup.s root 1731 1726 0 22:10 ? 00:00:00 PimBsr -d -i --dlopen -p -f -l libLoadDynamicLibs.so procmgr libProcMgrSetup.s root 1732 1727 0 22:10 ? 00:00:00 Pim -d -i --dlopen -p -f -l libLoadDynamicLibs.so procmgr libProcMgrSetup.s root 1733 1723 0 22:10 ? 00:00:00 Acl -d -i --dlopen -p -f -l libLoadDynamicLibs.so procmgr libProcMgrSetup.s root 1734 1728 0 22:10 ? 00:00:00 Arp -d -i --dlopen -p -f -l libLoadDynamicLibs.so procmgr libProcMgrSetup.s root 1735 1527 0 22:10 ? 00:00:00 netns --dlopen procmgr /usr/bin/Igmp root 1736 1729 0 22:10 ? 00:00:00 LoopProtect -d -i --dlopen -p -f -l libLoadDynamicLibs.so procmgr libProcMgrSetup.s root 1737 1518 0 22:10 ? 00:00:00 netnsd-session -d -i --dlopen -p -f -l libLoadDynamicLibs.so procmgr libProcMgrSetup.s root 1738 1518 0 22:10 ? 00:00:00 netnsd-session -d -i --dlopen -p -f -l libLoadDynamicLibs.so procmgr libProcMgrSetup.s root 1739 1738 0 22:10 ? 00:00:00 NetworkTopol -d -i --dlopen -p -f -l libLoadDynamicLibs.so procmgr libProcMgrSetup.s root 1740 1518 0 22:10 ? 00:00:00 netnsd-session -d -i --dlopen -p -f -l libLoadDynamicLibs.so procmgr libProcMgrSetup.s root 1741 1740 0 22:10 ? 00:00:00 Qos -d -i --dlopen -p -f -l libLoadDynamicLibs.so procmgr libProcMgrSetup.s root 1743 1737 0 22:10 ? 00:00:00 Mirroring -d -i --dlopen -p -f -l libLoadDynamicLibs.so procmgr libProcMgrSetup.s root 1744 1518 0 22:10 ? 00:00:00 netnsd-session -d -i --dlopen -p -f -l libLoadDynamicLibs.so procmgr libProcMgrSetup.s root 1745 1518 0 22:10 ? 00:00:00 netnsd-session -d -i --dlopen -p -f -l libLoadDynamicLibs.so procmgr libProcMgrSetup.s root 1747 1518 0 22:10 ? 00:00:00 netnsd-session -d -i --dlopen -p -f -l libLoadDynamicLibs.so procmgr libProcMgrSetup.s root 1748 1744 0 22:10 ? 00:00:00 Ebra -d -i --dlopen -p -f -l libLoadDynamicLibs.so procmgr libProcMgrSetup.s root 1749 1745 0 22:10 ? 00:00:00 KernelFib -d -i --dlopen -p -f -l libLoadDynamicLibs.so procmgr libProcMgrSetup.s root 1751 1518 0 22:10 ? 00:00:00 netnsd-session -d -i --dlopen -p -f -l libLoadDynamicLibs.so procmgr libProcMgrSetup.s root 1752 1751 0 22:10 ? 00:00:00 Igmp -d -i --dlopen -p -f -l libLoadDynamicLibs.so procmgr libProcMgrSetup.s root 1753 1747 0 22:10 ? 00:00:00 TopoAgent -d -i --dlopen -p -f -l libLoadDynamicLibs.so procmgr libProcMgrSetup.s root 1758 1527 0 22:10 ? 00:00:00 PhyEthtool -d -i --dlopen -p -f -l libLoadDynamicLibs.so procmgr libProcMgrSetup.s root 1963 1 0 22:10 ? 00:00:00 /sbin/rsyslogd -i /var/run/syslogd.pid -c 5 root 2209 1 0 22:10 ? 00:00:00 /usr/sbin/sshd root 2275 1 0 22:10 ? 00:00:00 /usr/bin/conlogd root 2277 2275 0 22:10 ? 00:00:00 sh -c /usr/bin/tail -n 0 --retry --follow=name --pid=2275 /var/log/eos-console | sed 's/ root 2278 2277 0 22:10 ? 00:00:00 /usr/bin/tail -n 0 --retry --follow=name --pid=2275 /var/log/eos-console root 2279 2277 0 22:10 ? 00:00:00 sed s/\(.*\)/\1\r/ root 2296 1 0 22:10 tty1 00:00:00 /sbin/mingetty /dev/tty1 root 2298 1 0 22:10 tty2 00:00:00 /sbin/mingetty /dev/tty2 root 2302 1 0 22:10 tty3 00:00:00 /sbin/mingetty /dev/tty3 root 2304 1 0 22:10 tty4 00:00:00 /sbin/mingetty /dev/tty4 root 2307 1 0 22:10 tty5 00:00:00 /sbin/mingetty /dev/tty5 root 2309 1 0 22:10 tty6 00:00:00 /sbin/mingetty /dev/tty6 root 2365 1527 2 22:11 ? 00:00:05 /usr/sbin/ribd -N root 2377 1527 1 22:11 ? 00:00:04 FastClid -d -i --dlopen -p -f -l libLoadDynamicLibs.so procmgr libProcMgrSetup.s root 2415 886 0 22:11 ? 00:00:00 /sbin/udevd -d root 2416 886 0 22:11 ? 00:00:00 /sbin/udevd -d root 2418 1527 0 22:11 ? 00:00:02 Etba -d -i --dlopen -p -f -l libLoadDynamicLibs.so procmgr libProcMgrSetup.s root 2425 1527 0 22:11 ? 00:00:01 Lag+LacpAgen -d -i --dlopen -p -f -l libLoadDynamicLibs.so procmgr libProcMgrSetup.s root 2428 1527 0 22:11 ? 00:00:00 netns --dlopen procmgr /usr/bin/Pimsm root 2430 1518 0 22:11 ? 00:00:00 netnsd-session -d -i --dlopen -p -f -l libLoadDynamicLibs.so procmgr libProcMgrSetup.s root 2431 2430 0 22:11 ? 00:00:00 Pimsm -d -i --dlopen -p -f -l libLoadDynamicLibs.so procmgr libProcMgrSetup.s root 2487 1527 2 22:11 ? 00:00:05 CliSessionMg -d -i --dlopen -p -f -l libLoadDynamicLibs.so procmgr libProcMgrSetup.s root 2520 2209 0 22:12 ? 00:00:00 sshd: kotetsu [priv] kotetsu 2539 2520 0 22:12 ? 00:00:00 sshd: kotetsu@pts/3 kotetsu 2542 2539 0 22:12 pts/3 00:00:00 FastCli root 2545 2377 0 22:12 pts/4 00:00:00 FastClid -d -i --dlopen -p -f -l libLoadDynamicLibs.so procmgr libProcMgrSetup.s kotetsu 2549 2545 0 22:12 pts/4 00:00:01 Cli [interac -d -i --dlopen -p -f -l libLoadDynamicLibs.so procmgr libProcMgrSetup.s kotetsu 2565 2549 0 22:12 pts/4 00:00:00 /bin/bash -l root 2859 2 0 22:14 ? 00:00:00 [kworker/0:1] root 2980 1 0 22:15 ttyS0 00:00:00 /sbin/mingetty --noclear /dev/ttyS0 kotetsu 2986 2565 0 22:15 pts/4 00:00:00 ps -ef [kotetsu@veos-dev ~]$
ディレクトリ探索
[kotetsu@veos-dev ~]$ ls -alh /mnt/flash total 448M drwxrwx--- 6 root eosadmin 4.0K May 5 22:09 . drwxr-xr-x 3 root root 100 May 5 22:09 .. -r-xr-x--- 1 root eosadmin 224M May 3 15:48 .boot-image.swi drwxrwx--- 2 root eosadmin 4.0K May 3 15:48 .extensions -rwxrwx--- 1 root eosadmin 24 Apr 20 18:40 boot-config drwxrwx--- 2 root eosadmin 4.0K May 3 15:48 debug drwxrwx--- 2 root eosadmin 4.0K May 5 22:10 persist drwxrwx--- 3 root eosadmin 4.0K May 3 15:54 schedule -rwxrwx--- 1 root eosadmin 466 May 4 23:36 startup-config -rwxrwx--- 1 root eosadmin 224M Apr 20 18:40 vEOS-lab.swi
[kotetsu@veos-dev ~]$ which Cli /usr/bin/Cli [kotetsu@veos-dev ~]$ [kotetsu@veos-dev ~]$ ls -alh /usr/bin/[A-Z]* -rwxr-xr-x 1 root root 148 Apr 16 01:53 /usr/bin/Aaa -rwxr-xr-x 1 root root 528 Apr 16 01:53 /usr/bin/AaaFlushAccounting -rwxr-xr-x 1 root root 2.5K Apr 16 01:53 /usr/bin/AaaSetRootPassword lrwxrwxrwx 1 root root 24 Apr 21 01:39 /usr/bin/Acl -> /usr/lib/libAclLoader.so lrwxrwxrwx 1 root root 33 Apr 21 01:39 /usr/bin/AgentMonitor -> /usr/lib/libAgentMonitorLoader.so -rwxr-xr-x 1 root root 1.4K Apr 16 04:18 /usr/bin/AleFibCliDiffUtil -rwxr-xr-x 1 root root 3.9K Apr 10 17:09 /usr/bin/ArSchedule lrwxrwxrwx 1 root root 24 Apr 21 01:39 /usr/bin/Arp -> /usr/lib/libArpLoader.so lrwxrwxrwx 1 root root 34 Apr 21 01:39 /usr/bin/ArpInspection -> /usr/lib/libArpInspectionLoader.so lrwxrwxrwx 1 root root 24 Apr 21 01:39 /usr/bin/Bfd -> /usr/lib/libBfdLoader.so -rwxr-xr-x 1 root root 156 Apr 10 17:31 /usr/bin/BootMgr lrwxrwxrwx 1 root root 24 Apr 21 01:39 /usr/bin/Cdp -> /usr/lib/libCdpLoader.so -rwxr-xr-x 1 root root 3.1K Apr 10 17:18 /usr/bin/Cli -rwxr-xr-x 1 root root 400 Apr 10 17:18 /usr/bin/CliSessionMgr -rwxr-xr-x 1 root root 2.9K Apr 10 17:09 /usr/bin/CombineHeapDumps -rwxr-xr-x 1 root root 1.8K Apr 10 17:18 /usr/bin/ConfigureReplace lrwxrwxrwx 1 root root 42 Apr 21 01:39 /usr/bin/ControllerDebugClient -> /usr/lib/libControllerDebugClientLoader.so lrwxrwxrwx 1 root root 42 Apr 21 01:39 /usr/bin/ControllerDebugServer -> /usr/lib/libControllerDebugServerLoader.so -rwxr-xr-x 1 root root 15K Apr 10 18:43 /usr/bin/ControllerOob -rwxr-xr-x 1 root root 38K Apr 10 18:39 /usr/bin/ControllerRegistrationAgent -rwxr-xr-x 1 root root 7.6K Apr 10 18:43 /usr/bin/Controllerdb lrwxrwxrwx 1 root root 31 Apr 21 01:39 /usr/bin/CpuComplex -> /usr/lib/libCpuComplexLoader.so -rwxr-xr-x 1 root root 2.2K Apr 10 17:18 /usr/bin/CreateCleanConfig -rwxr-xr-x 1 root root 288 Apr 16 02:25 /usr/bin/Dcbx -rwxr-xr-x 1 root root 9.2K Apr 16 02:11 /usr/bin/DebugSwitchover lrwxrwxrwx 1 root root 30 Apr 21 01:39 /usr/bin/DhcpRelay -> /usr/lib/libDhcpRelayLoader.so -rwxr-xr-x 1 root root 3.1K Apr 10 17:25 /usr/bin/DiskUsageWatch lrwxrwxrwx 1 root root 26 Apr 21 01:39 /usr/bin/Dot1x -> /usr/lib/libDot1xLoader.so -rwxr-xr-x 1 root root 59K Apr 10 17:02 /usr/bin/DumpDb lrwxrwxrwx 1 root root 25 Apr 21 01:39 /usr/bin/Ebra -> /usr/lib/libEbraLoader.so -rwxr-xr-x 1 root root 1.1K Apr 16 02:11 /usr/bin/ElectionMgr -rwxr-xr-x 1 root root 7.5K Apr 18 19:04 /usr/bin/EosCoredumpControl -rwxr-xr-x 1 root root 2.4K Apr 10 17:09 /usr/bin/EosEntityTreeMonitor -rwxr-xr-x 1 root root 8.6K Apr 10 18:35 /usr/bin/EosInit -rwxr-xr-x 1 root root 3.5K Apr 18 19:04 /usr/bin/EosInitReport -rwxr-xr-x 1 root root 174 Apr 18 19:04 /usr/bin/EosMemUsage -rwxr-xr-x 1 root root 17K Apr 18 19:04 /usr/bin/EosOomAdjust -rwxr-xr-x 1 root root 15K Apr 18 19:04 /usr/bin/EosSsdDutArchiveFilesTest.py -rwxr-xr-x 1 root root 170 Apr 10 17:44 /usr/bin/Etba lrwxrwxrwx 1 root root 29 Apr 21 01:39 /usr/bin/EventMgr -> /usr/lib/libEventMgrLoader.so -rwxr-xr-x 1 root root 168 Apr 10 17:35 /usr/bin/EventMon lrwxrwxrwx 1 root root 32 Apr 21 01:39 /usr/bin/FanDetector -> /usr/lib/libFanDetectorLoader.so -rwxr-xr-x 1 root root 3.8K Apr 10 17:18 /usr/bin/FastCli -rwxr-xr-x 1 root root 2.3K Apr 10 17:18 /usr/bin/FastClid lrwxrwxrwx 1 root root 29 Apr 21 01:39 /usr/bin/FastServerFailover -> /usr/lib/libFsfAgentLoader.so -rwxr-xr-x 1 root root 2.3K Apr 18 19:04 /usr/bin/FetchLogs lrwxrwxrwx 1 root root 25 Apr 21 01:39 /usr/bin/Fhrp -> /usr/lib/libFhrpLoader.so -rwxr-xr-x 1 root root 530 Apr 16 02:11 /usr/bin/FileReplicator -rwxr-xr-x 1 root root 1.7K Apr 10 17:36 /usr/bin/Fru -rwxr-xr-x 1 root root 303 Apr 10 19:12 /usr/bin/GpioLed -rwxr-xr-x 1 root root 237 Apr 16 02:19 /usr/bin/HadoopTracer lrwxrwxrwx 1 root root 24 Apr 21 01:39 /usr/bin/Hsc -> /usr/lib/libHscLoader.so lrwxrwxrwx 1 root root 30 Apr 21 01:39 /usr/bin/Igmp -> /usr/lib/libIgmpAgentLoader.so lrwxrwxrwx 1 root root 34 Apr 21 01:39 /usr/bin/IgmpHostProxy -> /usr/lib/libIgmpHostProxyLoader.so -rwxr-xr-x 1 root root 335 Apr 10 18:07 /usr/bin/IgmpSnooping -rwxr-xr-x 1 root root 2.0K Apr 10 17:36 /usr/bin/InstallExtension -rwxr-xr-x 1 root root 3.3K Apr 10 17:09 /usr/bin/InterpretHeapDump lrwxrwxrwx 1 root root 31 Apr 21 01:39 /usr/bin/Ipv6RouterAdvt -> /usr/lib/libRouterAdvtLoader.so lrwxrwxrwx 1 root root 24 Apr 21 01:39 /usr/bin/Ira -> /usr/lib/libIraLoader.so lrwxrwxrwx 1 root root 30 Apr 21 01:39 /usr/bin/KernelFib -> /usr/lib/libKernelFibLoader.so lrwxrwxrwx 1 root root 31 Apr 21 01:39 /usr/bin/KernelMfib -> /usr/lib/libKernelMfibLoader.so lrwxrwxrwx 1 root root 32 Apr 21 01:39 /usr/bin/LacpTxAgent -> /usr/lib/libLacpTxAgentLoader.so -rwxr-xr-x 1 root root 3.5K Apr 10 17:51 /usr/bin/LacpduSendRequest.py -rwxr-xr-x 1 root root 731 Apr 10 17:51 /usr/bin/Lag -rwxr-xr-x 1 root root 158 Apr 10 17:31 /usr/bin/Launcher lrwxrwxrwx 1 root root 30 Apr 21 01:39 /usr/bin/LedPolicy -> /usr/lib/libLedPolicyLoader.so lrwxrwxrwx 1 root root 37 Apr 21 01:39 /usr/bin/LinuxBridge -> /usr/lib/libLinuxBridgeAgentLoader.so lrwxrwxrwx 1 root root 25 Apr 21 01:39 /usr/bin/Lldp -> /usr/lib/libLldpLoader.so -rwxr-xr-x 1 root root 9.9K Apr 10 18:35 /usr/bin/LoadConfig -rwxr-xr-x 1 root root 655 Apr 10 17:36 /usr/bin/LoadExtensionStatus -rwxr-xr-x 1 root root 745 Apr 10 17:36 /usr/bin/LoadExtensions lrwxrwxrwx 1 root root 32 Apr 21 01:39 /usr/bin/LoopProtect -> /usr/lib/libLoopProtectLoader.so lrwxrwxrwx 1 root root 37 Apr 21 01:39 /usr/bin/ManagementActive -> /usr/lib/libManagementActiveLoader.so -rwxr-xr-x 1 root root 272 Apr 10 17:39 /usr/bin/Mdio lrwxrwxrwx 1 root root 30 Apr 21 01:39 /usr/bin/Mirroring -> /usr/lib/libMirroringLoader.so -rwxr-xr-x 1 root root 350 Apr 10 18:14 /usr/bin/Mlag -rwxr-xr-x 1 root root 3.8K Apr 10 18:14 /usr/bin/MlagFileTransfer -rwxr-xr-x 1 root root 374 Apr 10 18:14 /usr/bin/MlagTunnel lrwxrwxrwx 1 root root 34 Apr 21 01:39 /usr/bin/ModularSystem -> /usr/lib/libModularSystemLoader.so lrwxrwxrwx 1 root root 25 Apr 21 01:39 /usr/bin/Mpls -> /usr/lib/libMplsLoader.so lrwxrwxrwx 1 root root 25 Apr 21 01:39 /usr/bin/Msdp -> /usr/lib/libMsdpLoader.so lrwxrwxrwx 1 root root 25 Apr 21 01:39 /usr/bin/Msrp -> /usr/lib/libMsrpLoader.so lrwxrwxrwx 1 root root 25 Apr 21 01:39 /usr/bin/Mvrp -> /usr/lib/libMvrpLoader.so lrwxrwxrwx 1 root root 41 Apr 21 01:39 /usr/bin/NetworkTopology -> /usr/lib/libNetworkTopologyAgentLoader.so lrwxrwxrwx 1 root root 51 Apr 21 01:39 /usr/bin/NetworkTopologyAggregator -> /usr/lib/libNetworkTopologyAggregatorAgentLoader.so -rwxr-xr-x 1 root root 190 Apr 16 04:22 /usr/bin/NorCalInit lrwxrwxrwx 1 root root 35 Apr 21 01:39 /usr/bin/ObjectTracking -> /usr/lib/libObjectTrackingLoader.so lrwxrwxrwx 1 root root 29 Apr 21 01:39 /usr/bin/OpenFlow -> /usr/lib/libOpenFlowLoader.so lrwxrwxrwx 1 root root 35 Apr 21 01:39 /usr/bin/OpenStack -> /usr/lib/libOpenStackAgentLoader.so -rwxr-xr-x 1 root root 234 Apr 16 02:43 /usr/bin/OpenStackPoller lrwxrwxrwx 1 root root 27 Apr 21 01:39 /usr/bin/PciBus -> /usr/lib/libPciBusLoader.so lrwxrwxrwx 1 root root 27 Apr 21 01:39 /usr/bin/PcieNt -> /usr/lib/libPcieNtLoader.so -rwxr-xr-x 1 root root 162 Apr 16 01:51 /usr/bin/PhyEthtool -rwxr-xr-x 1 root root 3.8K Apr 16 01:51 /usr/bin/PhyEthtoolConfig lrwxrwxrwx 1 root root 28 Apr 21 01:39 /usr/bin/Picasso -> /usr/lib/libPicassoLoader.so -rwxr-xr-x 1 root root 18K Apr 10 17:49 /usr/bin/PicassoSummer lrwxrwxrwx 1 root root 29 Apr 21 01:39 /usr/bin/Pim -> /usr/lib/libPimAgentLoader.so lrwxrwxrwx 1 root root 27 Apr 21 01:39 /usr/bin/PimBsr -> /usr/lib/libPimBsrLoader.so lrwxrwxrwx 1 root root 32 Apr 21 01:39 /usr/bin/PimReg -> /usr/lib/libPimRegAgentLoader.so lrwxrwxrwx 1 root root 31 Apr 21 01:39 /usr/bin/Pimsm -> /usr/lib/libPimsmAgentLoader.so -rwxr-xr-x 1 root root 190K Apr 10 08:21 /usr/bin/PlxCm_dbg -rwxr-xr-x 1 root root 87K Apr 10 08:21 /usr/bin/PlxEep_dbg -rwxr-xr-x 1 root root 23K Apr 10 08:21 /usr/bin/PlxEeprom.py -rwxr-xr-x 1 root root 7.1K Apr 10 08:21 /usr/bin/Plx_load -rwxr-xr-x 1 root root 3.4K Apr 10 08:21 /usr/bin/Plx_unload lrwxrwxrwx 1 root root 26 Apr 21 01:39 /usr/bin/PmbusPowerSupply -> /usr/lib/libPmbusLoader.so lrwxrwxrwx 1 root root 28 Apr 21 01:39 /usr/bin/PortSec -> /usr/lib/libPortSecLoader.so -rwxr-xr-x 1 root root 1.6K Apr 16 04:22 /usr/bin/Post lrwxrwxrwx 1 root root 33 Apr 21 01:39 /usr/bin/PowerManager -> /usr/lib/libPowerManagerLoader.so lrwxrwxrwx 1 root root 40 Apr 21 01:39 /usr/bin/PowerSupplyDetector -> /usr/lib/libPowerSupplyDetectorLoader.so lrwxrwxrwx 1 root root 42 Apr 21 01:39 /usr/bin/PowerSupplyFixed -> /usr/lib/libPowerSupplyFixedAgentLoader.so -rwxr-xr-x 1 root root 49 Apr 10 17:11 /usr/bin/ProcMgr lrwxrwxrwx 1 root root 28 Apr 21 01:39 /usr/bin/Psmi144PowerSupply -> /usr/lib/libPsmi144Loader.so lrwxrwxrwx 1 root root 27 Apr 21 01:39 /usr/bin/Psmi20PowerSupply -> /usr/lib/libPsmi20Loader.so lrwxrwxrwx 1 root root 29 Apr 21 01:39 /usr/bin/Ptp -> /usr/lib/libPtpAgentLoader.so lrwxrwxrwx 1 root root 32 Apr 21 01:39 /usr/bin/PtpTimeSync -> /usr/lib/libPtpTimeSyncLoader.so lrwxrwxrwx 1 root root 24 Apr 21 01:39 /usr/bin/Qos -> /usr/lib/libQosLoader.so lrwxrwxrwx 1 root root 40 Apr 21 01:39 /usr/bin/ReachabilityMonitor -> /usr/lib/libReachabilityMonitorLoader.so -rwxr-xr-x 1 root root 788 Apr 10 18:26 /usr/bin/Rib -rwxr-xr-x 1 root root 2.8K Apr 10 18:26 /usr/bin/RibdMemoryMonitor -rwxr-xr-x 1 root root 1.6K Apr 10 18:26 /usr/bin/RibdShowTech -rwxr-xr-x 1 root root 4.3K Apr 10 18:26 /usr/bin/RibdSupport -rwxr-xr-x 1 root root 1.6K Apr 16 01:53 /usr/bin/RunCli lrwxrwxrwx 1 root root 29 Apr 21 01:39 /usr/bin/ScdAgent -> /usr/lib/libScdAgentLoader.so -rwxr-xr-x 1 root root 1.1K Apr 10 17:18 /usr/bin/SessionCli -rwxr-xr-x 1 root root 3.9K Apr 10 07:42 /usr/bin/SetupEosDisk lrwxrwxrwx 1 root root 26 Apr 21 01:39 /usr/bin/Sflow -> /usr/lib/libSflowLoader.so -rwxr-xr-x 1 root root 176 Apr 16 02:11 /usr/bin/ShredRecursive -rwxr-xr-x 1 root root 277 Apr 10 17:39 /usr/bin/Smbus -rwxr-xr-x 1 root root 228 Apr 16 02:01 /usr/bin/Snmp lrwxrwxrwx 1 root root 24 Apr 21 01:39 /usr/bin/Sol -> /usr/lib/libSolLoader.so lrwxrwxrwx 1 root root 32 Apr 21 01:39 /usr/bin/StandbyCpld -> /usr/lib/libStandbyCpldLoader.so lrwxrwxrwx 1 root root 29 Apr 21 01:39 /usr/bin/Stp -> /usr/lib/libStpAgentLoader.so lrwxrwxrwx 1 root root 37 Apr 21 01:39 /usr/bin/StpTopology -> /usr/lib/libStpTopologyAgentLoader.so -rwxr-xr-x 1 root root 498 Apr 10 17:32 /usr/bin/SuperServer -rwxr-xr-x 1 root root 1.1K Apr 10 17:15 /usr/bin/Sysdb -rwxr-xr-x 1 root root 1.9K Apr 10 18:35 /usr/bin/SysdbInit lrwxrwxrwx 1 root root 27 Apr 21 01:39 /usr/bin/SysdbMonitor -> /usr/lib/libSysdbMonitor.so -rwxr-xr-x 1 root root 167 Apr 10 17:15 /usr/bin/SysdbProxy -rwxr-xr-x 1 root root 12K Apr 10 17:25 /usr/bin/TapCat lrwxrwxrwx 1 root root 31 Apr 21 01:39 /usr/bin/Thermostat -> /usr/lib/libThermostatLoader.so lrwxrwxrwx 1 root root 25 Apr 21 01:39 /usr/bin/TopoAgent -> /usr/lib/libTopoLoader.so -rwxr-xr-x 1 root root 1.9K Apr 10 17:36 /usr/bin/UninstallExtension -rwxr-xr-x 1 root root 188 Apr 16 04:22 /usr/bin/UpdateUcd -rwxr-xr-x 1 root root 156 Apr 16 01:50 /usr/bin/Vm lrwxrwxrwx 1 root root 29 Apr 21 01:39 /usr/bin/VmTracer -> /usr/lib/libVmTracerLoader.so -rwxr-xr-x 1 root root 1.3K Apr 16 02:21 /usr/bin/VmTracerEventHandler lrwxrwxrwx 1 root root 26 Apr 21 01:39 /usr/bin/Vxlan -> /usr/lib/libVxlanLoader.so lrwxrwxrwx 1 root root 32 Apr 21 01:39 /usr/bin/VxlanController -> /usr/lib/libVxlanCntrlrLoader.so lrwxrwxrwx 1 root root 31 Apr 21 01:39 /usr/bin/VxlanSwFwd -> /usr/lib/libVxlanSwFwdLoader.so -rwxr-xr-x 1 root root 804 Apr 18 06:18 /usr/bin/Xmpp -rwxr-xr-x 1 root root 2.8K Apr 18 06:18 /usr/bin/XmppCli -rwxr-xr-x 1 root root 389 Apr 16 02:21 /usr/bin/ZeroTouch [kotetsu@veos-dev ~]$
bash-4.1# ls -alh /usr/lib/python2.7/site-packages/*.py -rw-r--r-- 1 root root 63K Apr 16 01:53 /usr/lib/python2.7/site-packages/Aaa.py -rw-r--r-- 1 root root 7.6K Apr 16 01:53 /usr/lib/python2.7/site-packages/AaaApi.py -rw-r--r-- 1 root root 24K Apr 16 01:53 /usr/lib/python2.7/site-packages/AaaCliLib.py -rw-r--r-- 1 root root 876 Apr 16 01:53 /usr/lib/python2.7/site-packages/AaaDefs.py -rw-r--r-- 1 root root 26K Apr 16 01:53 /usr/lib/python2.7/site-packages/AaaPluginLib.py -rw-r--r-- 1 root root 175 Apr 10 17:58 /usr/lib/python2.7/site-packages/Acl.py -rw-r--r-- 1 root root 32K Apr 10 17:58 /usr/lib/python2.7/site-packages/AclCliLib.py -rw-r--r-- 1 root root 18K Apr 10 17:58 /usr/lib/python2.7/site-packages/AclLib.py -rw-r--r-- 1 root root 23K Apr 10 17:14 /usr/lib/python2.7/site-packages/Agent.py -rw-r--r-- 1 root root 2.9K Apr 10 17:32 /usr/lib/python2.7/site-packages/AgentCliHelper.py -rw-r--r-- 1 root root 6.0K Apr 10 17:14 /usr/lib/python2.7/site-packages/AgentCommandRequest.py -rw-r--r-- 1 root root 7.0K Apr 10 17:14 /usr/lib/python2.7/site-packages/AgentPing.py -rw-r--r-- 1 root root 2.1K Apr 10 17:09 /usr/lib/python2.7/site-packages/AgentSocketHandler.py -rw-r--r-- 1 root root 799 Apr 10 17:14 /usr/lib/python2.7/site-packages/AgentTerminate.py -rw-r--r-- 1 root root 3.6K Apr 16 04:18 /usr/lib/python2.7/site-packages/AleFibCliDiffUtilLib.py -rw-r--r-- 1 root root 2.8K Apr 16 04:22 /usr/lib/python2.7/site-packages/AltaVoltageRailAdj.py -rw-r--r-- 1 root root 16K Apr 10 17:29 /usr/lib/python2.7/site-packages/ArHal.py -rw-r--r-- 1 root root 11K Apr 10 17:27 /usr/lib/python2.7/site-packages/Aresolve.py -rw-r--r-- 1 root root 20K Apr 10 17:09 /usr/lib/python2.7/site-packages/Ark.py -rw-r--r-- 1 root root 2.9K Apr 10 17:25 /usr/lib/python2.7/site-packages/ArnetModel.py -rw-r--r-- 1 root root 170 Apr 16 01:43 /usr/lib/python2.7/site-packages/ArpAgent.py -rw-r--r-- 1 root root 301 Apr 16 01:43 /usr/lib/python2.7/site-packages/ArpLib.py -rw-r--r-- 1 root root 241 Apr 10 18:42 /usr/lib/python2.7/site-packages/Arsys.py -rw-r--r-- 1 root root 289 Apr 10 18:42 /usr/lib/python2.7/site-packages/ArsysNames.py -rw-r--r-- 1 root root 1.4K Apr 10 17:41 /usr/lib/python2.7/site-packages/Artist.py -rw-r--r-- 1 root root 4.1K Apr 10 07:26 /usr/lib/python2.7/site-packages/Assert.py -rw-r--r-- 1 root root 96K Apr 10 17:18 /usr/lib/python2.7/site-packages/BasicCli.py -rw-r--r-- 1 root root 274 Apr 10 17:57 /usr/lib/python2.7/site-packages/BfdAgent.py -rw-r--r-- 1 root root 2.1K Apr 10 17:57 /usr/lib/python2.7/site-packages/BfdLib.py -rw-r--r-- 1 root root 3.3K Apr 16 02:38 /usr/lib/python2.7/site-packages/BgpLib.py -rw-r--r-- 1 root root 7.8K Apr 16 02:38 /usr/lib/python2.7/site-packages/BgpLogMsgs.py -rw-r--r-- 1 root root 4.4K Apr 10 17:36 /usr/lib/python2.7/site-packages/BogusFdl.py -rw-r--r-- 1 root root 2.7K Apr 10 17:31 /usr/lib/python2.7/site-packages/BootMgr.py -rw-r--r-- 1 root root 1.6K Apr 10 17:09 /usr/lib/python2.7/site-packages/Bunch.py -rw-r--r-- 1 root root 2.8K Apr 10 17:57 /usr/lib/python2.7/site-packages/BusUtilCommon.py -rw-r--r-- 1 root root 12K Apr 16 01:57 /usr/lib/python2.7/site-packages/CapiAaa.py -rw-r--r-- 1 root root 5.1K Apr 10 17:18 /usr/lib/python2.7/site-packages/CapiCliCommon.py -rw-r--r-- 1 root root 5.0K Apr 16 01:57 /usr/lib/python2.7/site-packages/CapiConstants.py -rw-r--r-- 1 root root 11K Apr 16 01:57 /usr/lib/python2.7/site-packages/CapiJsonCli.py -rw-r--r-- 1 root root 11K Apr 16 01:57 /usr/lib/python2.7/site-packages/CapiJsonRpcBase.py -rw-r--r-- 1 root root 11K Apr 16 01:57 /usr/lib/python2.7/site-packages/CapiRequestContext.py -rw-r--r-- 1 root root 9.5K Apr 16 01:57 /usr/lib/python2.7/site-packages/CapiSsl.py -rw-r--r-- 1 root root 7.4K Apr 16 01:57 /usr/lib/python2.7/site-packages/CapiUwsgiServer.py -rw-r--r-- 1 root root 3.8K Apr 10 17:13 /usr/lib/python2.7/site-packages/Cell.py -rw-r--r-- 1 root root 972 Apr 10 17:36 /usr/lib/python2.7/site-packages/CheckFdlsLib.py -rw-r--r-- 1 root root 12K Apr 16 04:22 /usr/lib/python2.7/site-packages/Chl822XConfigTool.py -rw-r--r-- 1 root root 48K Apr 10 17:18 /usr/lib/python2.7/site-packages/Cli.py -rw-r--r-- 1 root root 4.6K Apr 10 17:18 /usr/lib/python2.7/site-packages/CliAaa.py -rw-r--r-- 1 root root 29K Apr 10 17:18 /usr/lib/python2.7/site-packages/CliApi.py -rw-r--r-- 1 root root 6.3K Apr 10 17:18 /usr/lib/python2.7/site-packages/CliCommon.py -rw-r--r-- 1 root root 960 Apr 10 17:18 /usr/lib/python2.7/site-packages/CliExtensions.py -rw-r--r-- 1 root root 667 Apr 10 17:18 /usr/lib/python2.7/site-packages/CliInputWrapper.py -rw-r--r-- 1 root root 49K Apr 10 17:18 /usr/lib/python2.7/site-packages/CliModel.py -rw-r--r-- 1 root root 22K Apr 10 17:18 /usr/lib/python2.7/site-packages/CliParser.py -rw-r--r-- 1 root root 11K Apr 10 17:18 /usr/lib/python2.7/site-packages/CliParserCommandClass.py -rw-r--r-- 1 root root 222 Apr 10 17:18 /usr/lib/python2.7/site-packages/CliProg.py -rw-r--r-- 1 root root 4.2K Apr 10 17:18 /usr/lib/python2.7/site-packages/CliRangeExpansion.py -rw-r--r-- 1 root root 66K Apr 10 17:18 /usr/lib/python2.7/site-packages/CliRule.py -rw-r--r-- 1 root root 40K Apr 10 17:18 /usr/lib/python2.7/site-packages/CliSave.py -rw-r--r-- 1 root root 7.9K Apr 16 01:53 /usr/lib/python2.7/site-packages/CliSchedulerLib.py -rw-r--r-- 1 root root 52K Apr 10 17:17 /usr/lib/python2.7/site-packages/CliSession.py -rw-r--r-- 1 root root 374 Apr 10 17:18 /usr/lib/python2.7/site-packages/CliSessionMgrName.py -rw-r--r-- 1 root root 1.1K Apr 10 17:17 /usr/lib/python2.7/site-packages/CliSessionOnCommit.py -rw-r--r-- 1 root root 1.5K Apr 10 17:18 /usr/lib/python2.7/site-packages/CmdExtension.py -rw-r--r-- 1 root root 17K Apr 10 17:17 /usr/lib/python2.7/site-packages/ConfigMount.py -rw-r--r-- 1 root root 6.6K Apr 10 17:18 /usr/lib/python2.7/site-packages/ConfigSessionCommon.py -rw-r--r-- 1 root root 173 Apr 10 18:56 /usr/lib/python2.7/site-packages/ControllerDebugClientAgent.py -rw-r--r-- 1 root root 173 Apr 10 18:56 /usr/lib/python2.7/site-packages/ControllerDebugServerAgent.py -rw-r--r-- 1 root root 16K Apr 10 18:03 /usr/lib/python2.7/site-packages/ControllerHeartbeatLib.py -rw-r--r-- 1 root root 18K Apr 10 18:03 /usr/lib/python2.7/site-packages/ControllerMessageLib.py -rw-r--r-- 1 root root 2.0K Apr 10 18:03 /usr/lib/python2.7/site-packages/ControllerModel.py -rw-r--r-- 1 root root 294 Apr 10 18:43 /usr/lib/python2.7/site-packages/ControllerOobAgent.py -rw-r--r-- 1 root root 199 Apr 10 18:39 /usr/lib/python2.7/site-packages/ControllerRegistration.py -rw-r--r-- 1 root root 4.3K Apr 10 18:43 /usr/lib/python2.7/site-packages/ControllerRegistry.py -rw-r--r-- 1 root root 2.1K Apr 10 18:03 /usr/lib/python2.7/site-packages/ControllerSslReactorLib.py -rw-r--r-- 1 root root 7.5K Apr 10 18:03 /usr/lib/python2.7/site-packages/Controller_pb2.py -rw-r--r-- 1 root root 293 Apr 10 18:43 /usr/lib/python2.7/site-packages/ControllerdbAgent.py -rw-r--r-- 1 root root 4.5K Apr 10 18:43 /usr/lib/python2.7/site-packages/ControllerdbEntityManager.py -rw-r--r-- 1 root root 371 Apr 10 17:48 /usr/lib/python2.7/site-packages/CpuComplex.py -rw-r--r-- 1 root root 4.8K Apr 10 17:18 /usr/lib/python2.7/site-packages/DateTimeRule.py -rw-r--r-- 1 root root 1.7K Apr 16 02:25 /usr/lib/python2.7/site-packages/Dcbx.py -rw-r--r-- 1 root root 1.8K Apr 16 02:25 /usr/lib/python2.7/site-packages/DcbxLib.py -rw-r--r-- 1 root root 1.3K Apr 16 02:25 /usr/lib/python2.7/site-packages/DcbxTypes.py -rw-r--r-- 1 root root 3.8K Apr 10 17:20 /usr/lib/python2.7/site-packages/Debug.py -rw-r--r-- 1 root root 6.1K Apr 16 02:11 /usr/lib/python2.7/site-packages/DebugSwitchoverLib.py -rw-r--r-- 1 root root 3.0K Apr 16 01:50 /usr/lib/python2.7/site-packages/DecapGroupModel.py -rw-r--r-- 1 root root 864 Apr 10 17:09 /usr/lib/python2.7/site-packages/DesCrypt.py -rw-r--r-- 1 root root 1.1K Apr 10 17:25 /usr/lib/python2.7/site-packages/DeviceNameLib.py -rw-r--r-- 1 root root 161 Apr 16 02:25 /usr/lib/python2.7/site-packages/DhcpRelayAgent.py -rw-r--r-- 1 root root 745 Apr 16 02:25 /usr/lib/python2.7/site-packages/DhcpRelayVrfCliLib.py -rw-r--r-- 1 root root 23K Apr 10 17:29 /usr/lib/python2.7/site-packages/DiagLib.py -rw-r--r-- 1 root root 4.4K Apr 10 17:29 /usr/lib/python2.7/site-packages/Diagnostics.py -rw-r--r-- 1 root root 20K Apr 10 17:29 /usr/lib/python2.7/site-packages/Diags.py -rw-r--r-- 1 root root 797 Apr 10 08:08 /usr/lib/python2.7/site-packages/DiagsTools.py -rw-r--r-- 1 root root 379 Apr 10 08:08 /usr/lib/python2.7/site-packages/DiagsToolsNames.py -rw-r--r-- 1 root root 1.3K Apr 16 02:02 /usr/lib/python2.7/site-packages/Dot1xLib.py -rw-r--r-- 1 root root 4.7K Apr 10 17:43 /usr/lib/python2.7/site-packages/EbraLib.py -rw-r--r-- 1 root root 452 Apr 10 17:43 /usr/lib/python2.7/site-packages/EbraLogMsgs.py -rw-r--r-- 1 root root 364 Apr 10 17:43 /usr/lib/python2.7/site-packages/EbraName.py -rw-r--r-- 1 root root 64K Apr 10 17:44 /usr/lib/python2.7/site-packages/EbraTestBridge.py -rw-r--r-- 1 root root 3.1K Apr 10 17:44 /usr/lib/python2.7/site-packages/EbraTestBridgeLib.py -rw-r--r-- 1 root root 1.8K Apr 10 17:44 /usr/lib/python2.7/site-packages/EbraTestBridgePort.py -rw-r--r-- 1 root root 3.1K Apr 10 17:54 /usr/lib/python2.7/site-packages/EcbDiagLib.py -rw-r--r-- 1 root root 38K Apr 16 02:11 /usr/lib/python2.7/site-packages/ElectionMgrAgent.py -rw-r--r-- 1 root root 3.9K Apr 16 01:53 /usr/lib/python2.7/site-packages/Email.py -rw-r--r-- 1 root root 3.4K Apr 10 17:28 /usr/lib/python2.7/site-packages/EntityMib.py -rw-r--r-- 1 root root 2.9K Apr 10 17:44 /usr/lib/python2.7/site-packages/EnvironmentUtils.py -rw-r--r-- 1 root root 7.3K Apr 10 07:42 /usr/lib/python2.7/site-packages/EosDisk.py -rw-r--r-- 1 root root 1.3K Apr 10 18:35 /usr/lib/python2.7/site-packages/EosInit.py -rw-r--r-- 1 root root 185 Apr 10 18:35 /usr/lib/python2.7/site-packages/EosInitLib.py -rw-r--r-- 1 root root 9.3K Apr 18 19:04 /usr/lib/python2.7/site-packages/EosLogUtil.py -rw-r--r-- 1 root root 6.6K Apr 10 07:42 /usr/lib/python2.7/site-packages/EosVersion.py -rw-r--r-- 1 root root 6.2K Apr 10 17:39 /usr/lib/python2.7/site-packages/Errdisable.py -rw-r--r-- 1 root root 615 Apr 10 17:39 /usr/lib/python2.7/site-packages/ErrdisableCliLib.py -rw-r--r-- 1 root root 480 Apr 10 17:39 /usr/lib/python2.7/site-packages/EthIntf.py -rw-r--r-- 1 root root 1.8K Apr 10 17:39 /usr/lib/python2.7/site-packages/EthIntfLib.py -rw-r--r-- 1 root root 2.2K Apr 10 17:43 /usr/lib/python2.7/site-packages/EthIntfUtil.py -rw-r--r-- 1 root root 6.5K Apr 10 17:25 /usr/lib/python2.7/site-packages/Ethernet.py -rw-r--r-- 1 root root 13K Apr 10 17:29 /usr/lib/python2.7/site-packages/Ethxmit.py -rw-r--r-- 1 root root 174 Apr 10 17:29 /usr/lib/python2.7/site-packages/EthxmitProg.py -rw-r--r-- 1 root root 639 Apr 10 17:55 /usr/lib/python2.7/site-packages/EventLib.py -rw-r--r-- 1 root root 180 Apr 10 17:55 /usr/lib/python2.7/site-packages/EventMgr.py -rw-r--r-- 1 root root 14K Apr 10 17:35 /usr/lib/python2.7/site-packages/EventMonAgent.py -rw-r--r-- 1 root root 1003 Apr 10 17:09 /usr/lib/python2.7/site-packages/ExecTimeout.py -rw-r--r-- 1 root root 8.2K Apr 10 17:20 /usr/lib/python2.7/site-packages/ExtEntity.py -rw-r--r-- 1 root root 30K Apr 10 17:36 /usr/lib/python2.7/site-packages/ExtensionMgrLib.py -rw-r--r-- 1 root root 926 Apr 10 17:44 /usr/lib/python2.7/site-packages/FanControllerDiagLib.py -rw-r--r-- 1 root root 2.7K Apr 10 17:09 /usr/lib/python2.7/site-packages/FastServUtil.py -rw-r--r-- 1 root root 8.4K Apr 10 17:32 /usr/lib/python2.7/site-packages/FaultInjectionCliHelper.py -rw-r--r-- 1 root root 11K Apr 10 17:36 /usr/lib/python2.7/site-packages/Fdl.py -rw-r--r-- 1 root root 13K Apr 10 18:42 /usr/lib/python2.7/site-packages/FdlIo.py -rw-r--r-- 1 root root 156 Apr 10 18:16 /usr/lib/python2.7/site-packages/FhrpAgent.py -rw-r--r-- 1 root root 592 Apr 10 18:16 /usr/lib/python2.7/site-packages/FhrpUtils.py -rw-r--r-- 1 root root 13K Apr 10 17:18 /usr/lib/python2.7/site-packages/FileCliUtil.py -rw-r--r-- 1 root root 6.5K Apr 16 02:11 /usr/lib/python2.7/site-packages/FileReplicationCmds.py -rw-r--r-- 1 root root 36K Apr 16 02:11 /usr/lib/python2.7/site-packages/FileReplicatorAgent.py -rw-r--r-- 1 root root 1.1K Apr 10 17:09 /usr/lib/python2.7/site-packages/FilteredDictView.py -rw-r--r-- 1 root root 2.4K Apr 16 01:53 /usr/lib/python2.7/site-packages/FirmwareRev.py -rw-r--r-- 1 root root 219 Apr 10 07:48 /usr/lib/python2.7/site-packages/FlashUtil.py -rw-r--r-- 1 root root 25K Apr 10 17:36 /usr/lib/python2.7/site-packages/FpgaUtil.py -rw-r--r-- 1 root root 1.6K Apr 10 17:41 /usr/lib/python2.7/site-packages/FrameBufferAgent.py -rw-r--r-- 1 root root 170 Apr 10 17:36 /usr/lib/python2.7/site-packages/FruAgent.py -rw-r--r-- 1 root root 249 Apr 10 17:36 /usr/lib/python2.7/site-packages/FruUtils.py -rw-r--r-- 1 root root 1012 Apr 10 17:09 /usr/lib/python2.7/site-packages/GenericReactor.py -rw-r--r-- 1 root root 1.3K Apr 10 17:36 /usr/lib/python2.7/site-packages/GenfdlLib.py -rw-r--r-- 1 root root 5.2K Apr 10 17:36 /usr/lib/python2.7/site-packages/GenprefdlLib.py -rw-r--r-- 1 root root 1.3K Apr 10 19:12 /usr/lib/python2.7/site-packages/GpioLedAgent.py -rw-r--r-- 1 root root 29K Apr 16 02:19 /usr/lib/python2.7/site-packages/HadoopRpc.py -rw-r--r-- 1 root root 86K Apr 16 02:19 /usr/lib/python2.7/site-packages/HadoopTracer.py -rw-r--r-- 1 root root 1.6K Apr 16 02:19 /usr/lib/python2.7/site-packages/HadoopTracerLogMsgs.py -rw-r--r-- 1 root root 4.7K Apr 10 17:25 /usr/lib/python2.7/site-packages/HostnameCli.py -rw-r--r-- 1 root root 275 Apr 17 10:42 /usr/lib/python2.7/site-packages/HscAgent.py -rw-r--r-- 1 root root 883 Apr 17 10:42 /usr/lib/python2.7/site-packages/HscCliLib.py -rw-r--r-- 1 root root 4.5K Apr 10 17:09 /usr/lib/python2.7/site-packages/HumanReadable.py -rw-r--r-- 1 root root 2.4K Apr 10 17:36 /usr/lib/python2.7/site-packages/HwLogging.py -rw-r--r-- 1 root root 2.9K Apr 10 17:29 /usr/lib/python2.7/site-packages/IProcUtil.py -rw-r--r-- 1 root root 715 Apr 10 17:25 /usr/lib/python2.7/site-packages/IanaAddressFamilyNumbers.py -rw-r--r-- 1 root root 3.8K Apr 10 17:25 /usr/lib/python2.7/site-packages/IanaMau.py -rw-r--r-- 1 root root 82K Apr 10 17:51 /usr/lib/python2.7/site-packages/IdpromLib.py -rw-r--r-- 1 root root 3.0K Apr 10 17:25 /usr/lib/python2.7/site-packages/IfLinkMonitor.py -rw-r--r-- 1 root root 156 Apr 10 18:57 /usr/lib/python2.7/site-packages/IgmpAgent.py -rw-r--r-- 1 root root 218 Apr 10 18:57 /usr/lib/python2.7/site-packages/IgmpLib.py -rw-r--r-- 1 root root 9.0K Apr 10 18:07 /usr/lib/python2.7/site-packages/IgmpSnoopingAgent.py -rw-r--r-- 1 root root 843 Apr 10 18:07 /usr/lib/python2.7/site-packages/IgmpSnoopingLib.py -rw-r--r-- 1 root root 387 Apr 10 17:34 /usr/lib/python2.7/site-packages/IntfModels.py -rw-r--r-- 1 root root 199 Apr 16 02:06 /usr/lib/python2.7/site-packages/IntfSnmpLib.py -rw-r--r-- 1 root root 14K Apr 10 17:09 /usr/lib/python2.7/site-packages/IpUtils.py -rw-r--r-- 1 root root 3.4K Apr 16 02:19 /usr/lib/python2.7/site-packages/IpcConnectionContext_pb2.py -rw-r--r-- 1 root root 166 Apr 16 01:53 /usr/lib/python2.7/site-packages/Ipv6RouterAdvtAgent.py -rw-r--r-- 1 root root 5.9K Apr 16 01:53 /usr/lib/python2.7/site-packages/Ipv6RouterAdvtLib.py -rw-r--r-- 1 root root 336 Apr 10 17:44 /usr/lib/python2.7/site-packages/IraAgent.py -rw-r--r-- 1 root root 3.5K Apr 10 17:44 /usr/lib/python2.7/site-packages/IraConsts.py -rw-r--r-- 1 root root 4.8K Apr 10 17:44 /usr/lib/python2.7/site-packages/IraIntfUtil.py -rw-r--r-- 1 root root 360 Apr 10 17:44 /usr/lib/python2.7/site-packages/IraLogMsgs.py -rw-r--r-- 1 root root 13K Apr 10 17:44 /usr/lib/python2.7/site-packages/IraVrfCliLib.py -rw-r--r-- 1 root root 29K Apr 16 02:19 /usr/lib/python2.7/site-packages/JobTrackerRpc.py -rw-r--r-- 1 root root 176 Apr 10 17:56 /usr/lib/python2.7/site-packages/KernelFibAgent.py -rw-r--r-- 1 root root 160 Apr 16 01:55 /usr/lib/python2.7/site-packages/KernelMfib.py -rw-r--r-- 1 root root 8.7K Apr 10 17:51 /usr/lib/python2.7/site-packages/LacpAgent.py -rw-r--r-- 1 root root 602 Apr 10 17:51 /usr/lib/python2.7/site-packages/LacpConstants.py -rw-r--r-- 1 root root 3.4K Apr 10 17:51 /usr/lib/python2.7/site-packages/LacpLib.py -rw-r--r-- 1 root root 3.5K Apr 10 17:51 /usr/lib/python2.7/site-packages/LacpduSendRequest.py -rw-r--r-- 1 root root 16K Apr 10 17:51 /usr/lib/python2.7/site-packages/LagAgent.py -rw-r--r-- 1 root root 363 Apr 10 17:51 /usr/lib/python2.7/site-packages/LagName.py -rw-r--r-- 1 root root 243 Apr 16 03:52 /usr/lib/python2.7/site-packages/LanzLib.py -rw-r--r-- 1 root root 62K Apr 10 17:31 /usr/lib/python2.7/site-packages/Launcher.py -rw-r--r-- 1 root root 1.4K Apr 10 17:31 /usr/lib/python2.7/site-packages/LauncherLib.py -rw-r--r-- 1 root root 6.3K Apr 10 17:31 /usr/lib/python2.7/site-packages/LauncherUtil.py -rw-r--r-- 1 root root 13K Apr 10 17:13 /usr/lib/python2.7/site-packages/LazyMount.py -rw-r--r-- 1 root root 1.1K Apr 10 17:29 /usr/lib/python2.7/site-packages/LegacyUtil.py -rw-r--r-- 1 root root 277 Apr 16 02:18 /usr/lib/python2.7/site-packages/LldpAgent.py -rw-r--r-- 1 root root 1.8K Apr 16 02:18 /usr/lib/python2.7/site-packages/LldpConstants.py -rw-r--r-- 1 root root 633 Apr 16 02:18 /usr/lib/python2.7/site-packages/LldpLib.py -rw-r--r-- 1 root root 1.5K Apr 16 02:18 /usr/lib/python2.7/site-packages/LldpTypes.py -rw-r--r-- 1 root root 5.5K Apr 10 17:36 /usr/lib/python2.7/site-packages/LoadExtensionStatus.py -rw-r--r-- 1 root root 4.8K Apr 10 17:36 /usr/lib/python2.7/site-packages/LoadExtensions.py -rw-r--r-- 1 root root 2.6K Apr 16 01:53 /usr/lib/python2.7/site-packages/LocalUserLib.py -rw-r--r-- 1 root root 1.4K Apr 10 17:09 /usr/lib/python2.7/site-packages/LogRepeater.py -rw-r--r-- 1 root root 12K Apr 16 01:56 /usr/lib/python2.7/site-packages/LoggingLib.py -rw-r--r-- 1 root root 160 Apr 10 17:18 /usr/lib/python2.7/site-packages/MaintenanceModeAgent.py -rw-r--r-- 1 root root 2.1K Apr 10 17:39 /usr/lib/python2.7/site-packages/MdioAgent.py -rw-r--r-- 1 root root 3.2K Apr 10 17:39 /usr/lib/python2.7/site-packages/MdioBlob.py -rw-r--r-- 1 root root 1019 Apr 10 17:39 /usr/lib/python2.7/site-packages/MdioClient.py -rw-r--r-- 1 root root 15K Apr 10 17:39 /usr/lib/python2.7/site-packages/MdioUtil.py -rw-r--r-- 1 root root 15K Apr 10 17:09 /usr/lib/python2.7/site-packages/MemTools.py -rw-r--r-- 1 root root 3.7K Apr 10 17:46 /usr/lib/python2.7/site-packages/MgmtSecuritySslStatusSm.py -rw-r--r-- 1 root root 161 Apr 10 18:12 /usr/lib/python2.7/site-packages/MirroringAgent.py -rw-r--r-- 1 root root 220 Apr 10 18:12 /usr/lib/python2.7/site-packages/MirroringLib.py -rw-r--r-- 1 root root 7.9K Apr 10 18:14 /usr/lib/python2.7/site-packages/MlagHeartbeatLib.py -rw-r--r-- 1 root root 3.5K Apr 10 18:14 /usr/lib/python2.7/site-packages/MlagShared.py -rw-r--r-- 1 root root 16K Apr 10 18:14 /usr/lib/python2.7/site-packages/MlagTunnel.py -rw-r--r-- 1 root root 4.3K Apr 10 18:42 /usr/lib/python2.7/site-packages/ModularSystemCardUtils.py -rw-r--r-- 1 root root 22K Apr 10 17:51 /usr/lib/python2.7/site-packages/MolexDiagLib.py -rw-r--r-- 1 root root 156 Apr 17 09:43 /usr/lib/python2.7/site-packages/MplsAgent.py -rw-r--r-- 1 root root 219 Apr 17 09:43 /usr/lib/python2.7/site-packages/MplsLib.py -rw-r--r-- 1 root root 753 Apr 16 01:52 /usr/lib/python2.7/site-packages/MrouteCliHelpers.py -rw-r--r-- 1 root root 1.1K Apr 10 18:07 /usr/lib/python2.7/site-packages/MrpCliLib.py -rw-r--r-- 1 root root 156 Apr 16 03:12 /usr/lib/python2.7/site-packages/MsdpAgent.py -rw-r--r-- 1 root root 5.4K Apr 10 18:09 /usr/lib/python2.7/site-packages/MsrpCliLib.py -rw-r--r-- 1 root root 702 Apr 10 18:09 /usr/lib/python2.7/site-packages/MsrpTypes.py -rw-r--r-- 1 root root 42K Apr 10 17:18 /usr/lib/python2.7/site-packages/MultiRangeRule.py -rw-r--r-- 1 root root 905 Apr 10 18:09 /usr/lib/python2.7/site-packages/MvrpCliLib.py -rw-r--r-- 1 root root 1.5K Apr 10 17:09 /usr/lib/python2.7/site-packages/Netns.py -rw-r--r-- 1 root root 207 Apr 10 07:26 /usr/lib/python2.7/site-packages/NetnsNames.py -rw-r--r-- 1 root root 299 Apr 10 19:22 /usr/lib/python2.7/site-packages/NetworkTopologyAgent.py -rw-r--r-- 1 root root 322 Apr 10 19:22 /usr/lib/python2.7/site-packages/NetworkTopologyAggregatorAgent.py -rw-r--r-- 1 root root 18K Apr 16 04:22 /usr/lib/python2.7/site-packages/NorCal.py -rw-r--r-- 1 root root 38K Apr 16 04:22 /usr/lib/python2.7/site-packages/NorCalInit.py -rw-r--r-- 1 root root 2.2K Apr 16 01:55 /usr/lib/python2.7/site-packages/NtpLib.py -rw-r--r-- 1 root root 166 Apr 10 17:48 /usr/lib/python2.7/site-packages/ObjectTrackingAgent.py -rw-r--r-- 1 root root 250 Apr 10 17:48 /usr/lib/python2.7/site-packages/ObjectTrackingLib.py -rw-r--r-- 1 root root 15K Apr 16 02:43 /usr/lib/python2.7/site-packages/OpenStackClientLite.py -rw-r--r-- 1 root root 23K Apr 16 02:43 /usr/lib/python2.7/site-packages/OpenStackPollerLib.py -rw-r--r-- 1 root root 14K Apr 17 10:42 /usr/lib/python2.7/site-packages/OvsdbServerBase.py -rw-r--r-- 1 root root 2.1K Apr 16 02:50 /usr/lib/python2.7/site-packages/PbrLib.py -rw-r--r-- 1 root root 13K Apr 10 17:29 /usr/lib/python2.7/site-packages/Pci.py -rw-r--r-- 1 root root 238 Apr 10 17:37 /usr/lib/python2.7/site-packages/PciBus.py -rw-r--r-- 1 root root 1.6K Apr 10 17:29 /usr/lib/python2.7/site-packages/PciUtil.py -rw-r--r-- 1 root root 1.7K Apr 10 17:39 /usr/lib/python2.7/site-packages/PcieGpioDiagLib.py -rw-r--r-- 1 root root 24K Apr 10 17:53 /usr/lib/python2.7/site-packages/PhyDiagLib.py -rw-r--r-- 1 root root 48K Apr 16 01:51 /usr/lib/python2.7/site-packages/PhyEthtool.py -rw-r--r-- 1 root root 3.6K Apr 10 17:53 /usr/lib/python2.7/site-packages/PhyFruLib.py -rw-r--r-- 1 root root 7.8K Apr 16 04:22 /usr/lib/python2.7/site-packages/PicassoInit.py -rw-r--r-- 1 root root 155 Apr 16 02:13 /usr/lib/python2.7/site-packages/PimAgent.py -rw-r--r-- 1 root root 158 Apr 16 02:25 /usr/lib/python2.7/site-packages/PimBsrAgent.py -rw-r--r-- 1 root root 21K Apr 16 02:25 /usr/lib/python2.7/site-packages/PimBsrModel.py -rw-r--r-- 1 root root 3.1K Apr 16 02:13 /usr/lib/python2.7/site-packages/PimCountersLib.py -rw-r--r-- 1 root root 216 Apr 16 02:13 /usr/lib/python2.7/site-packages/PimLib.py -rw-r--r-- 1 root root 24K Apr 16 02:13 /usr/lib/python2.7/site-packages/PimModel.py -rw-r--r-- 1 root root 23K Apr 16 02:13 /usr/lib/python2.7/site-packages/PimModelLib.py -rw-r--r-- 1 root root 178 Apr 16 03:01 /usr/lib/python2.7/site-packages/PimReg.py -rw-r--r-- 1 root root 2.2K Apr 16 03:01 /usr/lib/python2.7/site-packages/PimRegModel.py -rw-r--r-- 1 root root 177 Apr 16 02:52 /usr/lib/python2.7/site-packages/Pimsm.py -rw-r--r-- 1 root root 32K Apr 16 02:52 /usr/lib/python2.7/site-packages/PimsmModel.py -rw-r--r-- 1 root root 6.5K Apr 16 04:22 /usr/lib/python2.7/site-packages/PlxEepromUpgrade.py -rw-r--r-- 1 root root 3.7K Apr 16 04:22 /usr/lib/python2.7/site-packages/PlxNic.py -rw-r--r-- 1 root root 33K Apr 10 17:42 /usr/lib/python2.7/site-packages/PlxPex8600Lib.py -rw-r--r-- 1 root root 3.3K Apr 10 17:57 /usr/lib/python2.7/site-packages/PmbusConstants.py -rw-r--r-- 1 root root 246 Apr 10 17:57 /usr/lib/python2.7/site-packages/PmbusLib.py -rw-r--r-- 1 root root 1.5K Apr 10 18:02 /usr/lib/python2.7/site-packages/PolicyMap.py -rw-r--r-- 1 root root 2.3K Apr 10 17:54 /usr/lib/python2.7/site-packages/PowerDiagLib.py -rw-r--r-- 1 root root 361 Apr 10 17:54 /usr/lib/python2.7/site-packages/PowerManagerAgent.py -rw-r--r-- 1 root root 16K Apr 10 17:36 /usr/lib/python2.7/site-packages/Prefdl.py -rw-r--r-- 1 root root 135K Apr 10 17:11 /usr/lib/python2.7/site-packages/ProcMgr.py -rw-r--r-- 1 root root 974 Apr 10 17:11 /usr/lib/python2.7/site-packages/ProcMgrLib.py -rw-r--r-- 1 root root 5.0K Apr 10 17:09 /usr/lib/python2.7/site-packages/Profile.py -rw-r--r-- 1 root root 573 Apr 10 17:57 /usr/lib/python2.7/site-packages/PsmiConstants.py -rw-r--r-- 1 root root 23K Apr 10 17:29 /usr/lib/python2.7/site-packages/PsocLib.py -rw-r--r-- 1 root root 306 Apr 10 17:59 /usr/lib/python2.7/site-packages/Ptp.py -rw-r--r-- 1 root root 448 Apr 10 17:59 /usr/lib/python2.7/site-packages/PtpConstants.py -rw-r--r-- 1 root root 210 Apr 10 17:59 /usr/lib/python2.7/site-packages/PtpLib.py -rw-r--r-- 1 root root 1.6K Apr 10 17:25 /usr/lib/python2.7/site-packages/QTraceTestLib.py -rw-r--r-- 1 root root 43K Apr 16 03:39 /usr/lib/python2.7/site-packages/QosLib.py -rw-r--r-- 1 root root 2.2K Apr 16 03:39 /usr/lib/python2.7/site-packages/QosTypes.py -rw-r--r-- 1 root root 4.2K Apr 10 17:09 /usr/lib/python2.7/site-packages/QuickTrace.py -rw-r--r-- 1 root root 15K Apr 16 01:55 /usr/lib/python2.7/site-packages/Radius.py -rw-r--r-- 1 root root 1.2K Apr 16 01:55 /usr/lib/python2.7/site-packages/RadiusGroup.py -rw-r--r-- 1 root root 8.2K Apr 10 17:18 /usr/lib/python2.7/site-packages/RangeRule.py -rw-r--r-- 1 root root 2.3K Apr 10 17:25 /usr/lib/python2.7/site-packages/RecvMsgUtils.py -rw-r--r-- 1 root root 957 Apr 16 02:11 /usr/lib/python2.7/site-packages/RedSupLib.py -rw-r--r-- 1 root root 17K Apr 16 02:11 /usr/lib/python2.7/site-packages/RedSupQueryLib.py -rw-r--r-- 1 root root 8.4K Apr 10 17:18 /usr/lib/python2.7/site-packages/RegexParser.py -rw-r--r-- 1 root root 4.4K Apr 16 02:11 /usr/lib/python2.7/site-packages/ReloadCauseLib.py -rw-r--r-- 1 root root 170 Apr 10 18:26 /usr/lib/python2.7/site-packages/RibAgent.py -rw-r--r-- 1 root root 16K Apr 10 18:26 /usr/lib/python2.7/site-packages/RibCapiLib.py -rw-r--r-- 1 root root 6.1K Apr 10 18:26 /usr/lib/python2.7/site-packages/RibCliLib.py -rw-r--r-- 1 root root 74K Apr 10 18:26 /usr/lib/python2.7/site-packages/RibdDumpParser.py -rw-r--r-- 1 root root 23K Apr 16 01:58 /usr/lib/python2.7/site-packages/RouteMapLib.py -rw-r--r-- 1 root root 6.6K Apr 16 02:19 /usr/lib/python2.7/site-packages/RpcPayloadHeader_pb2.py -rw-r--r-- 1 root root 3.9K Apr 16 01:53 /usr/lib/python2.7/site-packages/RunCli.py -rw-r--r-- 1 root root 2.0K Apr 10 17:57 /usr/lib/python2.7/site-packages/ScdAgentStrings.py -rw-r--r-- 1 root root 598 Apr 10 17:57 /usr/lib/python2.7/site-packages/ScdAgentUtil.py -rw-r--r-- 1 root root 378 Apr 10 17:11 /usr/lib/python2.7/site-packages/ScdEmUtils.py -rw-r--r-- 1 root root 2.3K Apr 10 17:29 /usr/lib/python2.7/site-packages/ScdRegisters.py -rw-r--r-- 1 root root 3.0K Apr 10 18:59 /usr/lib/python2.7/site-packages/Schan.py -rw-r--r-- 1 root root 18K Apr 10 18:59 /usr/lib/python2.7/site-packages/SchanAccelLib.py -rw-r--r-- 1 root root 4.7K Apr 10 18:59 /usr/lib/python2.7/site-packages/SchanMsgLib.py -rw-r--r-- 1 root root 13K Apr 10 17:18 /usr/lib/python2.7/site-packages/SecretCli.py -rw-r--r-- 1 root root 8.7K Apr 10 17:09 /usr/lib/python2.7/site-packages/ServerAnchor.py -rw-r--r-- 1 root root 531 Apr 10 18:43 /usr/lib/python2.7/site-packages/ServiceAgentServiceLib.py -rw-r--r-- 1 root root 779 Apr 10 18:03 /usr/lib/python2.7/site-packages/ServicePluginContext.py -rw-r--r-- 1 root root 1.2K Apr 10 08:08 /usr/lib/python2.7/site-packages/SessionUrlHelper.py -rw-r--r-- 1 root root 6.7K Apr 10 17:18 /usr/lib/python2.7/site-packages/SessionUrlUtil.py -rw-r--r-- 1 root root 8.8K Apr 10 17:18 /usr/lib/python2.7/site-packages/SetRule.py -rw-r--r-- 1 root root 1.2K Apr 16 02:13 /usr/lib/python2.7/site-packages/SflowConst.py -rw-r--r-- 1 root root 9.5K Apr 16 02:13 /usr/lib/python2.7/site-packages/SflowUtil.py -rw-r--r-- 1 root root 161 Apr 16 02:13 /usr/lib/python2.7/site-packages/Sflowtool.py -rw-r--r-- 1 root root 1.2K Apr 10 17:18 /usr/lib/python2.7/site-packages/ShowRunOutputModel.py -rw-r--r-- 1 root root 9.3K Apr 16 04:22 /usr/lib/python2.7/site-packages/Si5338.py -rw-r--r-- 1 root root 2.1K Apr 10 17:09 /usr/lib/python2.7/site-packages/SimpleConfigFile.py -rw-r--r-- 1 root root 3.6K Apr 10 17:14 /usr/lib/python2.7/site-packages/SmashLazyMount.py -rw-r--r-- 1 root root 896 Apr 10 17:14 /usr/lib/python2.7/site-packages/SmashMount.py -rw-r--r-- 1 root root 447 Apr 10 17:14 /usr/lib/python2.7/site-packages/SmashUtils.py -rw-r--r-- 1 root root 1.2K Apr 10 17:39 /usr/lib/python2.7/site-packages/SmbusAgent.py -rw-r--r-- 1 root root 5.2K Apr 10 17:39 /usr/lib/python2.7/site-packages/SmbusClient.py -rw-r--r-- 1 root root 3.8K Apr 10 17:39 /usr/lib/python2.7/site-packages/SmbusDiagLib.py -rw-r--r-- 1 root root 47K Apr 10 17:39 /usr/lib/python2.7/site-packages/SmbusUtil.py -rw-r--r-- 1 root root 6.2K Apr 16 02:01 /usr/lib/python2.7/site-packages/Snmp.py -rw-r--r-- 1 root root 3.4K Apr 16 02:01 /usr/lib/python2.7/site-packages/SnmpCliRule.py -rw-r--r-- 1 root root 2.1K Apr 16 02:01 /usr/lib/python2.7/site-packages/SnmpCliUtil.py -rw-r--r-- 1 root root 590 Apr 16 02:01 /usr/lib/python2.7/site-packages/SnmpDebugUtils.py -rw-r--r-- 1 root root 3.3K Apr 16 02:01 /usr/lib/python2.7/site-packages/SnmpNotificationRegistrar.py -rw-r--r-- 1 root root 774 Apr 16 02:01 /usr/lib/python2.7/site-packages/SnmpObjectId.py -rw-r--r-- 1 root root 6.3K Apr 10 19:12 /usr/lib/python2.7/site-packages/Sol.py -rw-r--r-- 1 root root 12K Apr 10 19:12 /usr/lib/python2.7/site-packages/SolUtil.py -rw-r--r-- 1 root root 4.2K Apr 10 17:46 /usr/lib/python2.7/site-packages/SslCertKey.py -rw-r--r-- 1 root root 31K Apr 10 17:46 /usr/lib/python2.7/site-packages/SslReactor.py -rw-r--r-- 1 root root 18K Apr 10 17:13 /usr/lib/python2.7/site-packages/StageHelper.py -rw-r--r-- 1 root root 232 Apr 10 17:13 /usr/lib/python2.7/site-packages/StageMgr.py -rw-r--r-- 1 root root 17K Apr 10 18:04 /usr/lib/python2.7/site-packages/StpCliUtil.py -rw-r--r-- 1 root root 1.6K Apr 10 18:04 /usr/lib/python2.7/site-packages/StpConst.py -rw-r--r-- 1 root root 363 Apr 10 18:04 /usr/lib/python2.7/site-packages/StpName.py -rw-r--r-- 1 root root 873 Apr 10 18:04 /usr/lib/python2.7/site-packages/StpStableUtil.py -rw-r--r-- 1 root root 371 Apr 10 18:04 /usr/lib/python2.7/site-packages/StpTopologyName.py -rw-r--r-- 1 root root 3.8K Apr 10 17:09 /usr/lib/python2.7/site-packages/Strace.py -rw-r--r-- 1 root root 6.9K Apr 10 17:18 /usr/lib/python2.7/site-packages/StringRule.py -rw-r--r-- 1 root root 21K Apr 10 17:32 /usr/lib/python2.7/site-packages/SuperServer.py -rw-r--r-- 1 root root 291 Apr 10 17:32 /usr/lib/python2.7/site-packages/SuperServerAgent.py -rw-r--r-- 1 root root 9.5K Apr 10 17:14 /usr/lib/python2.7/site-packages/Switchover.py -rw-r--r-- 1 root root 5.9K Apr 16 01:53 /usr/lib/python2.7/site-packages/SysMgrLib.py -rw-r--r-- 1 root root 2.3K Apr 16 01:53 /usr/lib/python2.7/site-packages/SysMgrLogMsgs.py -rw-r--r-- 1 root root 271 Apr 16 02:03 /usr/lib/python2.7/site-packages/SysMgrSnmp.py -rw-r--r-- 1 root root 878 Apr 10 17:15 /usr/lib/python2.7/site-packages/SysdbAgent.py -rw-r--r-- 1 root root 14K Apr 10 17:15 /usr/lib/python2.7/site-packages/SysdbEntityManager.py -rw-r--r-- 1 root root 4.1K Apr 10 17:13 /usr/lib/python2.7/site-packages/SysdbUtil.py -rw-r--r-- 1 root root 37K Apr 10 17:09 /usr/lib/python2.7/site-packages/TableOutput.py -rw-r--r-- 1 root root 20K Apr 16 01:56 /usr/lib/python2.7/site-packages/Tacacs.py -rw-r--r-- 1 root root 738 Apr 16 01:56 /usr/lib/python2.7/site-packages/TacacsGroup.py -rw-r--r-- 1 root root 2.0K Apr 16 01:56 /usr/lib/python2.7/site-packages/TacacsLib.py -rw-r--r-- 1 root root 15K Apr 16 01:55 /usr/lib/python2.7/site-packages/TcpdumpLib.py -rw-r--r-- 1 root root 384 Apr 16 01:53 /usr/lib/python2.7/site-packages/Terminal.py -rw-r--r-- 1 root root 253 Apr 10 17:44 /usr/lib/python2.7/site-packages/ThermoMgrLib.py -rw-r--r-- 1 root root 369 Apr 10 17:43 /usr/lib/python2.7/site-packages/TopoAgentName.py -rw-r--r-- 1 root root 6.3K Apr 10 17:09 /usr/lib/python2.7/site-packages/TraceLogging.py -rw-r--r-- 1 root root 1.4K Apr 16 04:22 /usr/lib/python2.7/site-packages/UpdateCpld.py -rw-r--r-- 1 root root 1.3K Apr 16 04:22 /usr/lib/python2.7/site-packages/UpdatePex.py -rw-r--r-- 1 root root 3.7K Apr 16 04:22 /usr/lib/python2.7/site-packages/UpdateUcd.py -rw-r--r-- 1 root root 23K Apr 10 17:18 /usr/lib/python2.7/site-packages/Url.py -rw-r--r-- 1 root root 4.5K Apr 10 17:57 /usr/lib/python2.7/site-packages/UserFpgaUtil.py -rw-r--r-- 1 root root 5.7K Apr 10 17:18 /usr/lib/python2.7/site-packages/UtmpDump.py -rw-r--r-- 1 root root 1.2K Apr 10 17:43 /usr/lib/python2.7/site-packages/Vlan.py -rw-r--r-- 1 root root 2.3K Apr 16 01:50 /usr/lib/python2.7/site-packages/VmAgent.py -rw-r--r-- 1 root root 13K Apr 16 02:21 /usr/lib/python2.7/site-packages/VmTracerEventHandlerLib.py -rw-r--r-- 1 root root 2.2K Apr 10 17:25 /usr/lib/python2.7/site-packages/VrfIdMapTestLib.py -rw-r--r-- 1 root root 279 Apr 10 19:19 /usr/lib/python2.7/site-packages/VxlanAgent.py -rw-r--r-- 1 root root 270 Apr 10 19:06 /usr/lib/python2.7/site-packages/VxlanController.py -rw-r--r-- 1 root root 212 Apr 10 19:19 /usr/lib/python2.7/site-packages/VxlanLib.py -rw-r--r-- 1 root root 289 Apr 10 19:19 /usr/lib/python2.7/site-packages/VxlanSwFwdAgent.py -rw-r--r-- 1 root root 4.5K Apr 10 19:06 /usr/lib/python2.7/site-packages/VxlanVniLib.py -rw-r--r-- 1 root root 7.8K Apr 10 17:14 /usr/lib/python2.7/site-packages/WaitForWarmup.py -rw-r--r-- 1 root root 1.8K Apr 10 17:11 /usr/lib/python2.7/site-packages/Watchdog.py -rw-r--r-- 1 root root 705 Apr 16 03:50 /usr/lib/python2.7/site-packages/WbemLib.py -rw-r--r-- 1 root root 15K Apr 10 17:51 /usr/lib/python2.7/site-packages/XcvrCtrlDiag.py -rw-r--r-- 1 root root 7.9K Apr 10 17:51 /usr/lib/python2.7/site-packages/XcvrLaneMgrFdlHelper.py -rw-r--r-- 1 root root 1.8K Apr 10 17:51 /usr/lib/python2.7/site-packages/XcvrLib.py -rw-r--r-- 1 root root 54K Apr 18 06:18 /usr/lib/python2.7/site-packages/Xmpp.py -rw-r--r-- 1 root root 4.2K Apr 18 06:18 /usr/lib/python2.7/site-packages/XmppLogMsgs.py -rw-r--r-- 1 root root 2.3K Apr 18 06:18 /usr/lib/python2.7/site-packages/XmppModelNameReactor.py -rw-r--r-- 1 root root 17K Apr 18 06:18 /usr/lib/python2.7/site-packages/XmppMultiCli.py -rw-r--r-- 1 root root 4.8K Apr 16 02:21 /usr/lib/python2.7/site-packages/ZeroTouch.py -rw-r--r-- 1 root root 400 Apr 16 02:21 /usr/lib/python2.7/site-packages/ZeroTouchBlackList.py -rw-r--r-- 1 root root 730 Apr 10 08:22 /usr/lib/python2.7/site-packages/cpufabric.py -rw-r--r-- 1 root root 1.5K Apr 10 17:29 /usr/lib/python2.7/site-packages/diag_ctypes.py -rwxr-xr-x 1 root root 3.9K Apr 10 17:45 /usr/lib/python2.7/site-packages/dmamem.py -rw-r--r-- 1 root root 126 Aug 11 2010 /usr/lib/python2.7/site-packages/easy_install.py -rw-r--r-- 1 root root 325 Apr 10 17:11 /usr/lib/python2.7/site-packages/fastLoadSetup.py -rw-r--r-- 1 root root 17K Apr 16 01:55 /usr/lib/python2.7/site-packages/freeradiusclient.py -rw-r--r-- 1 root root 2.2K Apr 10 17:25 /usr/lib/python2.7/site-packages/if_ether_arista.py -rw-r--r-- 1 root root 203 Apr 10 18:42 /usr/lib/python2.7/site-packages/issh.py -rw-r--r-- 1 root root 9.2K Apr 16 01:56 /usr/lib/python2.7/site-packages/libtacplus.py -rw-r--r-- 1 root root 113K Apr 10 07:13 /usr/lib/python2.7/site-packages/libvirt.py -rwxr-xr-x 1 root root 7.8K Apr 10 17:49 /usr/lib/python2.7/site-packages/picasso.py -rw-r--r-- 1 root root 87K Aug 11 2010 /usr/lib/python2.7/site-packages/pkg_resources.py -rwxr-xr-x 1 root root 81K Oct 18 2010 /usr/lib/python2.7/site-packages/pyinotify.py -rw-r--r-- 1 root root 14K Apr 10 18:59 /usr/lib/python2.7/site-packages/schan_accel.py -rw-r--r-- 1 root root 3.7K Apr 10 08:08 /usr/lib/python2.7/site-packages/seeprom.py -rw-r--r-- 1 root root 2.4K Aug 11 2010 /usr/lib/python2.7/site-packages/site.py -rw-r--r-- 1 root root 30K Aug 6 2010 /usr/lib/python2.7/site-packages/snack.py -rw-r--r-- 1 root root 2.5K Aug 19 2009 /usr/lib/python2.7/site-packages/sqlitecachec.py
bash-4.1# ls -alh /usr/lib/python2.7/site-packages/CliPlugin/*.py -rw-r--r-- 1 root root 79K Apr 16 01:53 /usr/lib/python2.7/site-packages/CliPlugin/AaaCli.py -rw-r--r-- 1 root root 9.9K Apr 16 01:53 /usr/lib/python2.7/site-packages/CliPlugin/AaaModel.py -rw-r--r-- 1 root root 80K Apr 10 17:58 /usr/lib/python2.7/site-packages/CliPlugin/AclCli.py -rw-r--r-- 1 root root 13K Apr 10 17:58 /usr/lib/python2.7/site-packages/CliPlugin/AclCliModel.py -rw-r--r-- 1 root root 19K Apr 10 17:58 /usr/lib/python2.7/site-packages/CliPlugin/AclCliModelImpl.py -rw-r--r-- 1 root root 20K Apr 10 17:58 /usr/lib/python2.7/site-packages/CliPlugin/AclCliModelRender.py -rw-r--r-- 1 root root 29K Apr 10 17:58 /usr/lib/python2.7/site-packages/CliPlugin/AclCliRules.py -rw-r--r-- 1 root root 46K Apr 10 17:58 /usr/lib/python2.7/site-packages/CliPlugin/AclCmdChains.py -rw-r--r-- 1 root root 4.2K Apr 16 01:55 /usr/lib/python2.7/site-packages/CliPlugin/AgentPingCli.py -rw-r--r-- 1 root root 4.1K Apr 16 01:55 /usr/lib/python2.7/site-packages/CliPlugin/AgentResourceCli.py -rw-r--r-- 1 root root 3.8K Apr 16 01:53 /usr/lib/python2.7/site-packages/CliPlugin/AgentShutdownCli.py -rw-r--r-- 1 root root 1.7K Apr 16 04:18 /usr/lib/python2.7/site-packages/CliPlugin/AleCliLib.py -rw-r--r-- 1 root root 844 Apr 16 04:18 /usr/lib/python2.7/site-packages/CliPlugin/AleCounters.py -rw-r--r-- 1 root root 4.2K Apr 16 04:18 /usr/lib/python2.7/site-packages/CliPlugin/AleCpuFabric.py -rw-r--r-- 1 root root 13K Apr 16 04:18 /usr/lib/python2.7/site-packages/CliPlugin/AleFibCli.py -rw-r--r-- 1 root root 9.6K Apr 16 04:18 /usr/lib/python2.7/site-packages/CliPlugin/AleRouting.py -rw-r--r-- 1 root root 2.4K Apr 16 01:43 /usr/lib/python2.7/site-packages/CliPlugin/ArpCommon.py -rw-r--r-- 1 root root 1.6K Apr 10 17:35 /usr/lib/python2.7/site-packages/CliPlugin/ArpEventMonCli.py -rw-r--r-- 1 root root 34K Apr 16 02:56 /usr/lib/python2.7/site-packages/CliPlugin/ArpInspectionCli.py -rw-r--r-- 1 root root 9.7K Apr 16 02:56 /usr/lib/python2.7/site-packages/CliPlugin/ArpInspectionModels.py -rw-r--r-- 1 root root 9.1K Apr 16 01:43 /usr/lib/python2.7/site-packages/CliPlugin/ArpIp6Cli.py -rw-r--r-- 1 root root 8.7K Apr 16 01:43 /usr/lib/python2.7/site-packages/CliPlugin/ArpIpCli.py -rw-r--r-- 1 root root 5.2K Apr 16 01:43 /usr/lib/python2.7/site-packages/CliPlugin/ArpIpIntfCli.py -rw-r--r-- 1 root root 2.1K Apr 16 01:43 /usr/lib/python2.7/site-packages/CliPlugin/ArpModel.py -rw-r--r-- 1 root root 1022 Apr 16 01:43 /usr/lib/python2.7/site-packages/CliPlugin/ArpShowTechCli.py -rw-r--r-- 1 root root 15K Apr 10 17:37 /usr/lib/python2.7/site-packages/CliPlugin/AsuReloadCli.py -rw-r--r-- 1 root root 15K Apr 10 18:04 /usr/lib/python2.7/site-packages/CliPlugin/BackupIntfCli.py -rw-r--r-- 1 root root 2.7K Apr 16 01:53 /usr/lib/python2.7/site-packages/CliPlugin/Banner.py -rw-r--r-- 1 root root 8.3K Apr 10 19:12 /usr/lib/python2.7/site-packages/CliPlugin/BeaconLedCli.py -rw-r--r-- 1 root root 40K Apr 10 17:57 /usr/lib/python2.7/site-packages/CliPlugin/BfdCli.py -rw-r--r-- 1 root root 31K Apr 16 02:38 /usr/lib/python2.7/site-packages/CliPlugin/BgpCliModels.py -rw-r--r-- 1 root root 9.2K Apr 16 01:53 /usr/lib/python2.7/site-packages/CliPlugin/BootCli.py -rw-r--r-- 1 root root 47K Apr 10 17:43 /usr/lib/python2.7/site-packages/CliPlugin/BridgingCli.py -rw-r--r-- 1 root root 7.9K Apr 10 17:43 /usr/lib/python2.7/site-packages/CliPlugin/BridgingCliModel.py -rw-r--r-- 1 root root 446 Apr 10 17:44 /usr/lib/python2.7/site-packages/CliPlugin/BridgingEtbaCli.py -rw-r--r-- 1 root root 35K Apr 16 01:57 /usr/lib/python2.7/site-packages/CliPlugin/Capi.py -rw-r--r-- 1 root root 8.0K Apr 16 01:57 /usr/lib/python2.7/site-packages/CliPlugin/CapiModel.py -rw-r--r-- 1 root root 13K Apr 10 17:18 /usr/lib/python2.7/site-packages/CliPlugin/CliCli.py -rw-r--r-- 1 root root 837 Apr 10 17:18 /usr/lib/python2.7/site-packages/CliPlugin/CliCliModel.py -rw-r--r-- 1 root root 847 Apr 10 17:18 /usr/lib/python2.7/site-packages/CliPlugin/CliError.py -rw-r--r-- 1 root root 17K Apr 16 01:53 /usr/lib/python2.7/site-packages/CliPlugin/CliSchedulerCli.py -rw-r--r-- 1 root root 9.2K Apr 16 01:53 /usr/lib/python2.7/site-packages/CliPlugin/ClockCli.py -rw-r--r-- 1 root root 1.4K Apr 10 17:18 /usr/lib/python2.7/site-packages/CliPlugin/ConfigConvert.py -rw-r--r-- 1 root root 1.1K Apr 10 17:18 /usr/lib/python2.7/site-packages/CliPlugin/ConfigMgmtMode.py -rw-r--r-- 1 root root 26K Apr 10 08:08 /usr/lib/python2.7/site-packages/CliPlugin/ConfigSessionCli.py -rw-r--r-- 1 root root 5.3K Apr 10 08:08 /usr/lib/python2.7/site-packages/CliPlugin/ConfigSessionModel.py -rw-r--r-- 1 root root 2.2K Apr 16 01:53 /usr/lib/python2.7/site-packages/CliPlugin/Console.py -rw-r--r-- 1 root root 28K Apr 10 18:43 /usr/lib/python2.7/site-packages/CliPlugin/ControllerCli.py -rw-r--r-- 1 root root 44K Apr 10 18:56 /usr/lib/python2.7/site-packages/CliPlugin/ControllerDebugCli.py -rw-r--r-- 1 root root 1.6K Apr 10 18:56 /usr/lib/python2.7/site-packages/CliPlugin/ControllerDebugModel.py -rw-r--r-- 1 root root 19K Apr 10 18:39 /usr/lib/python2.7/site-packages/CliPlugin/ControllerRegistration.py -rw-r--r-- 1 root root 6.3K Apr 10 18:39 /usr/lib/python2.7/site-packages/CliPlugin/ControllerRegistrationModel.py -rw-r--r-- 1 root root 4.5K Apr 10 18:43 /usr/lib/python2.7/site-packages/CliPlugin/ControllerdbLib.py -rw-r--r-- 1 root root 8.4K Apr 10 18:43 /usr/lib/python2.7/site-packages/CliPlugin/ControllerdbModel.py -rw-r--r-- 1 root root 3.2K Apr 16 01:53 /usr/lib/python2.7/site-packages/CliPlugin/CoredumpControl.py -rw-r--r-- 1 root root 1.5K Apr 10 08:22 /usr/lib/python2.7/site-packages/CliPlugin/CpuFabricCli.py -rw-r--r-- 1 root root 3.1K Apr 10 17:31 /usr/lib/python2.7/site-packages/CliPlugin/DaemonAgentModel.py -rw-r--r-- 1 root root 16K Apr 16 02:25 /usr/lib/python2.7/site-packages/CliPlugin/DcbxCli.py -rw-r--r-- 1 root root 6.9K Apr 10 17:20 /usr/lib/python2.7/site-packages/CliPlugin/DebugMessageCli.py -rw-r--r-- 1 root root 1.4K Apr 10 18:56 /usr/lib/python2.7/site-packages/CliPlugin/DebugServiceCli.py -rw-r--r-- 1 root root 352 Apr 10 17:20 /usr/lib/python2.7/site-packages/CliPlugin/DebugShowTechCli.py -rw-r--r-- 1 root root 984 Apr 16 01:53 /usr/lib/python2.7/site-packages/CliPlugin/DebuggingCli.py -rw-r--r-- 1 root root 11K Apr 16 01:50 /usr/lib/python2.7/site-packages/CliPlugin/DecapGroupCli.py -rw-r--r-- 1 root root 25K Apr 16 02:25 /usr/lib/python2.7/site-packages/CliPlugin/DhcpRelayHelperCli.py -rw-r--r-- 1 root root 17K Apr 16 02:25 /usr/lib/python2.7/site-packages/CliPlugin/DhcpSnoopingCli.py -rw-r--r-- 1 root root 35K Apr 10 17:29 /usr/lib/python2.7/site-packages/CliPlugin/DiagCli.py -rw-r--r-- 1 root root 49K Apr 16 03:49 /usr/lib/python2.7/site-packages/CliPlugin/DirectFlowCli.py -rw-r--r-- 1 root root 8.8K Apr 16 03:49 /usr/lib/python2.7/site-packages/CliPlugin/DirectFlowCliLib.py -rw-r--r-- 1 root root 3.5K Apr 16 03:49 /usr/lib/python2.7/site-packages/CliPlugin/DirectFlowModel.py -rw-r--r-- 1 root root 8.1K Apr 10 17:18 /usr/lib/python2.7/site-packages/CliPlugin/DonkeyCli.py -rw-r--r-- 1 root root 24K Apr 16 02:02 /usr/lib/python2.7/site-packages/CliPlugin/Dot1xCli.py -rw-r--r-- 1 root root 8.1K Apr 16 02:02 /usr/lib/python2.7/site-packages/CliPlugin/Dot1xModel.py -rw-r--r-- 1 root root 6.6K Apr 10 17:43 /usr/lib/python2.7/site-packages/CliPlugin/EbraEthIntfCli.py -rw-r--r-- 1 root root 5.2K Apr 10 17:43 /usr/lib/python2.7/site-packages/CliPlugin/EbraEthIntfCliModel.py -rw-r--r-- 1 root root 955 Apr 10 17:43 /usr/lib/python2.7/site-packages/CliPlugin/EbraShowTechCli.py -rw-r--r-- 1 root root 1.8K Apr 16 02:10 /usr/lib/python2.7/site-packages/CliPlugin/EbraSnmpCli.py -rw-r--r-- 1 root root 8.0K Apr 16 01:53 /usr/lib/python2.7/site-packages/CliPlugin/EmailCli.py -rw-r--r-- 1 root root 24K Apr 10 17:44 /usr/lib/python2.7/site-packages/CliPlugin/EnvironmentCli.py -rw-r--r-- 1 root root 11K Apr 10 17:44 /usr/lib/python2.7/site-packages/CliPlugin/EnvironmentModels.py -rw-r--r-- 1 root root 22K Apr 10 17:39 /usr/lib/python2.7/site-packages/CliPlugin/ErrdisableCli.py -rw-r--r-- 1 root root 131K Apr 10 17:39 /usr/lib/python2.7/site-packages/CliPlugin/EthIntfCli.py -rw-r--r-- 1 root root 20K Apr 10 17:39 /usr/lib/python2.7/site-packages/CliPlugin/EthIntfModel.py -rw-r--r-- 1 root root 949 Apr 10 17:39 /usr/lib/python2.7/site-packages/CliPlugin/EthShowTechCli.py -rw-r--r-- 1 root root 15K Apr 10 17:55 /usr/lib/python2.7/site-packages/CliPlugin/EventCli.py -rw-r--r-- 1 root root 19K Apr 10 17:35 /usr/lib/python2.7/site-packages/CliPlugin/EventMonCli.py -rw-r--r-- 1 root root 12K Apr 10 17:36 /usr/lib/python2.7/site-packages/CliPlugin/ExtensionMgrCli.py -rw-r--r-- 1 root root 6.4K Apr 10 17:36 /usr/lib/python2.7/site-packages/CliPlugin/ExtensionMgrCliModel.py -rw-r--r-- 1 root root 1.1K Apr 10 17:32 /usr/lib/python2.7/site-packages/CliPlugin/FaultInjectionCli.py -rw-r--r-- 1 root root 98K Apr 10 18:16 /usr/lib/python2.7/site-packages/CliPlugin/FhrpCli.py -rw-r--r-- 1 root root 14K Apr 10 18:16 /usr/lib/python2.7/site-packages/CliPlugin/FhrpModels.py -rw-r--r-- 1 root root 49K Apr 10 17:35 /usr/lib/python2.7/site-packages/CliPlugin/FileCli.py -rw-r--r-- 1 root root 5.3K Apr 10 17:35 /usr/lib/python2.7/site-packages/CliPlugin/FileCliModels.py -rw-r--r-- 1 root root 11K Apr 10 17:36 /usr/lib/python2.7/site-packages/CliPlugin/FileSystemMountCli.py -rw-r--r-- 1 root root 27K Apr 10 17:36 /usr/lib/python2.7/site-packages/CliPlugin/FruCli.py -rw-r--r-- 1 root root 11K Apr 10 17:36 /usr/lib/python2.7/site-packages/CliPlugin/FruModel.py -rw-r--r-- 1 root root 14K Apr 16 02:24 /usr/lib/python2.7/site-packages/CliPlugin/FsfCli.py -rw-r--r-- 1 root root 2.2K Apr 16 02:24 /usr/lib/python2.7/site-packages/CliPlugin/FsfIntfCli.py -rw-r--r-- 1 root root 6.2K Apr 16 02:24 /usr/lib/python2.7/site-packages/CliPlugin/FsfModels.py -rw-r--r-- 1 root root 8.3K Apr 10 17:47 /usr/lib/python2.7/site-packages/CliPlugin/GatedBgpCli.py -rw-r--r-- 1 root root 2.0K Apr 10 18:02 /usr/lib/python2.7/site-packages/CliPlugin/GmpCli.py -rw-r--r-- 1 root root 54K Apr 16 02:19 /usr/lib/python2.7/site-packages/CliPlugin/HadoopTracerCli.py -rw-r--r-- 1 root root 44K Apr 16 02:19 /usr/lib/python2.7/site-packages/CliPlugin/HadoopTracerModel.py -rw-r--r-- 1 root root 33K Apr 17 10:42 /usr/lib/python2.7/site-packages/CliPlugin/HscCli.py -rw-r--r-- 1 root root 25K Apr 17 10:42 /usr/lib/python2.7/site-packages/CliPlugin/HscModel.py -rw-r--r-- 1 root root 64K Apr 10 18:57 /usr/lib/python2.7/site-packages/CliPlugin/IgmpCli.py -rw-r--r-- 1 root root 17K Apr 10 18:57 /usr/lib/python2.7/site-packages/CliPlugin/IgmpCliModel.py -rw-r--r-- 1 root root 23K Apr 16 02:35 /usr/lib/python2.7/site-packages/CliPlugin/IgmpHostProxyCli.py -rw-r--r-- 1 root root 7.3K Apr 16 02:35 /usr/lib/python2.7/site-packages/CliPlugin/IgmpHostProxyModel.py -rw-r--r-- 1 root root 438 Apr 16 02:35 /usr/lib/python2.7/site-packages/CliPlugin/IgmpHostProxyShowTechCli.py -rw-r--r-- 1 root root 7.3K Apr 10 18:07 /usr/lib/python2.7/site-packages/CliPlugin/IgmpProfileCli.py -rw-r--r-- 1 root root 495 Apr 10 18:57 /usr/lib/python2.7/site-packages/CliPlugin/IgmpShowTechCli.py -rw-r--r-- 1 root root 96K Apr 10 18:07 /usr/lib/python2.7/site-packages/CliPlugin/IgmpSnoopingCli.py -rw-r--r-- 1 root root 1.5K Apr 10 18:07 /usr/lib/python2.7/site-packages/CliPlugin/IgmpSnoopingDebugCli.py -rw-r--r-- 1 root root 6.7K Apr 10 18:07 /usr/lib/python2.7/site-packages/CliPlugin/IgmpSnoopingEtbaCli.py -rw-r--r-- 1 root root 1.8K Apr 10 18:07 /usr/lib/python2.7/site-packages/CliPlugin/IgmpSnoopingEventMonCli.py -rw-r--r-- 1 root root 1.2K Apr 10 18:07 /usr/lib/python2.7/site-packages/CliPlugin/IgmpSnoopingIntfJanitor.py -rw-r--r-- 1 root root 700 Apr 10 18:07 /usr/lib/python2.7/site-packages/CliPlugin/IgmpSnoopingShowTechCli.py -rw-r--r-- 1 root root 16K Apr 18 19:04 /usr/lib/python2.7/site-packages/CliPlugin/InstallCli.py -rw-r--r-- 1 root root 72K Apr 10 17:34 /usr/lib/python2.7/site-packages/CliPlugin/IntfCli.py -rw-r--r-- 1 root root 17K Apr 10 17:34 /usr/lib/python2.7/site-packages/CliPlugin/IntfModel.py -rw-r--r-- 1 root root 13K Apr 10 17:34 /usr/lib/python2.7/site-packages/CliPlugin/IntfRangeCli.py -rw-r--r-- 1 root root 429 Apr 10 17:34 /usr/lib/python2.7/site-packages/CliPlugin/IntfShowTechCli.py -rw-r--r-- 1 root root 4.1K Apr 16 02:06 /usr/lib/python2.7/site-packages/CliPlugin/IntfSnmpCli.py -rw-r--r-- 1 root root 5.0K Apr 10 17:25 /usr/lib/python2.7/site-packages/CliPlugin/Ip6Addr.py -rw-r--r-- 1 root root 36K Apr 16 01:53 /usr/lib/python2.7/site-packages/CliPlugin/Ip6RaCli.py -rw-r--r-- 1 root root 15K Apr 10 17:25 /usr/lib/python2.7/site-packages/CliPlugin/IpAddr.py -rw-r--r-- 1 root root 16K Apr 16 01:48 /usr/lib/python2.7/site-packages/CliPlugin/IpEth.py -rw-r--r-- 1 root root 6.5K Apr 10 17:25 /usr/lib/python2.7/site-packages/CliPlugin/IpGenAddr.py -rw-r--r-- 1 root root 849 Apr 10 17:44 /usr/lib/python2.7/site-packages/CliPlugin/IraCommonCli.py -rw-r--r-- 1 root root 2.3K Apr 10 17:44 /usr/lib/python2.7/site-packages/CliPlugin/IraEtbaCli.py -rw-r--r-- 1 root root 55K Apr 10 17:44 /usr/lib/python2.7/site-packages/CliPlugin/IraIp6Cli.py -rw-r--r-- 1 root root 24K Apr 10 17:44 /usr/lib/python2.7/site-packages/CliPlugin/IraIp6IntfCli.py -rw-r--r-- 1 root root 15K Apr 10 17:44 /usr/lib/python2.7/site-packages/CliPlugin/IraIp6Model.py -rw-r--r-- 1 root root 80K Apr 10 17:44 /usr/lib/python2.7/site-packages/CliPlugin/IraIpCli.py -rw-r--r-- 1 root root 34K Apr 10 17:44 /usr/lib/python2.7/site-packages/CliPlugin/IraIpIntfCli.py -rw-r--r-- 1 root root 13K Apr 10 17:44 /usr/lib/python2.7/site-packages/CliPlugin/IraIpModel.py -rw-r--r-- 1 root root 12K Apr 10 17:44 /usr/lib/python2.7/site-packages/CliPlugin/IraKernelIpCli.py -rw-r--r-- 1 root root 7.0K Apr 10 17:44 /usr/lib/python2.7/site-packages/CliPlugin/IraNexthopGroupModel.py -rw-r--r-- 1 root root 32K Apr 10 17:44 /usr/lib/python2.7/site-packages/CliPlugin/IraRouteCommon.py -rw-r--r-- 1 root root 1.2K Apr 10 17:44 /usr/lib/python2.7/site-packages/CliPlugin/IraShowTechCli.py -rw-r--r-- 1 root root 6.8K Apr 10 17:44 /usr/lib/python2.7/site-packages/CliPlugin/IraUrpfCli.py -rw-r--r-- 1 root root 26K Apr 10 17:44 /usr/lib/python2.7/site-packages/CliPlugin/IraVrfCli.py -rw-r--r-- 1 root root 4.7K Apr 10 17:56 /usr/lib/python2.7/site-packages/CliPlugin/KernelFibCli.py -rw-r--r-- 1 root root 87K Apr 10 17:51 /usr/lib/python2.7/site-packages/CliPlugin/LagCli.py -rw-r--r-- 1 root root 20K Apr 10 17:51 /usr/lib/python2.7/site-packages/CliPlugin/LagIntfCli.py -rw-r--r-- 1 root root 3.2K Apr 10 18:14 /usr/lib/python2.7/site-packages/CliPlugin/LagIntfMlagCli.py -rw-r--r-- 1 root root 4.3K Apr 10 17:51 /usr/lib/python2.7/site-packages/CliPlugin/LagIntfModel.py -rw-r--r-- 1 root root 656 Apr 10 17:51 /usr/lib/python2.7/site-packages/CliPlugin/LagShowTechCli.py -rw-r--r-- 1 root root 42K Apr 16 03:52 /usr/lib/python2.7/site-packages/CliPlugin/LanzCli.py -rw-r--r-- 1 root root 34K Apr 16 03:52 /usr/lib/python2.7/site-packages/CliPlugin/LanzCliModel.py -rw-r--r-- 1 root root 13K Apr 16 03:52 /usr/lib/python2.7/site-packages/CliPlugin/LanzIntfCli.py -rw-r--r-- 1 root root 15K Apr 10 17:31 /usr/lib/python2.7/site-packages/CliPlugin/LauncherDaemonCli.py -rw-r--r-- 1 root root 13K Apr 10 17:39 /usr/lib/python2.7/site-packages/CliPlugin/LinkFlapCli.py -rw-r--r-- 1 root root 9.2K Apr 16 02:18 /usr/lib/python2.7/site-packages/CliPlugin/LldpConfigCli.py -rw-r--r-- 1 root root 7.4K Apr 16 02:18 /usr/lib/python2.7/site-packages/CliPlugin/LldpModel.py -rw-r--r-- 1 root root 32K Apr 16 02:18 /usr/lib/python2.7/site-packages/CliPlugin/LldpStatusCli.py -rw-r--r-- 1 root root 551 Apr 10 17:18 /usr/lib/python2.7/site-packages/CliPlugin/LoadPlugins.py -rw-r--r-- 1 root root 59K Apr 16 01:56 /usr/lib/python2.7/site-packages/CliPlugin/LoggingCli.py -rw-r--r-- 1 root root 19K Apr 10 18:16 /usr/lib/python2.7/site-packages/CliPlugin/LoopProtectCli.py -rw-r--r-- 1 root root 11K Apr 10 18:16 /usr/lib/python2.7/site-packages/CliPlugin/LoopProtectModels.py -rw-r--r-- 1 root root 7.5K Apr 10 17:44 /usr/lib/python2.7/site-packages/CliPlugin/LoopbackIntfCli.py -rw-r--r-- 1 root root 927 Apr 10 17:25 /usr/lib/python2.7/site-packages/CliPlugin/MacAddr.py -rw-r--r-- 1 root root 1.5K Apr 10 17:35 /usr/lib/python2.7/site-packages/CliPlugin/MacEventMonCli.py -rw-r--r-- 1 root root 4.9K Apr 10 17:45 /usr/lib/python2.7/site-packages/CliPlugin/MacFlapCli.py -rw-r--r-- 1 root root 1.6K Apr 10 17:43 /usr/lib/python2.7/site-packages/CliPlugin/MacLearning.py -rw-r--r-- 1 root root 7.8K Apr 16 02:11 /usr/lib/python2.7/site-packages/CliPlugin/ManagementActiveIntfCli.py -rw-r--r-- 1 root root 8.9K Apr 10 18:00 /usr/lib/python2.7/site-packages/CliPlugin/McastBoundaryCli.py -rw-r--r-- 1 root root 2.6K Apr 16 01:53 /usr/lib/python2.7/site-packages/CliPlugin/MgmtDefaults.py -rw-r--r-- 1 root root 38K Apr 10 18:12 /usr/lib/python2.7/site-packages/CliPlugin/MirroringCli.py -rw-r--r-- 1 root root 7.0K Apr 10 18:12 /usr/lib/python2.7/site-packages/CliPlugin/MirroringModels.py -rw-r--r-- 1 root root 24K Apr 10 18:14 /usr/lib/python2.7/site-packages/CliPlugin/MlagConfigCli.py -rw-r--r-- 1 root root 18K Apr 10 18:14 /usr/lib/python2.7/site-packages/CliPlugin/MlagModel.py -rw-r--r-- 1 root root 19K Apr 10 18:14 /usr/lib/python2.7/site-packages/CliPlugin/MlagShowCli.py -rw-r--r-- 1 root root 2.6K Apr 10 18:14 /usr/lib/python2.7/site-packages/CliPlugin/MlagTunnelCli.py -rw-r--r-- 1 root root 1.3K Apr 10 18:14 /usr/lib/python2.7/site-packages/CliPlugin/MlagTunnelModel.py -rw-r--r-- 1 root root 3.0K Apr 16 02:54 /usr/lib/python2.7/site-packages/CliPlugin/MlagVrrpCli.py -rw-r--r-- 1 root root 731 Apr 16 02:54 /usr/lib/python2.7/site-packages/CliPlugin/MlagVrrpModels.py -rw-r--r-- 1 root root 17K Apr 10 18:14 /usr/lib/python2.7/site-packages/CliPlugin/MlagWarningCli.py -rw-r--r-- 1 root root 5.9K Apr 10 18:42 /usr/lib/python2.7/site-packages/CliPlugin/ModuleCli.py -rw-r--r-- 1 root root 1.7K Apr 10 17:36 /usr/lib/python2.7/site-packages/CliPlugin/ModuleIntfCli.py -rw-r--r-- 1 root root 3.5K Apr 10 18:42 /usr/lib/python2.7/site-packages/CliPlugin/ModuleModels.py -rw-r--r-- 1 root root 4.1K Apr 16 01:43 /usr/lib/python2.7/site-packages/CliPlugin/MonitoredNexthopCli.py -rw-r--r-- 1 root root 1.5K Apr 16 01:43 /usr/lib/python2.7/site-packages/CliPlugin/MonitoredNexthopModel.py -rw-r--r-- 1 root root 7.0K Apr 10 17:18 /usr/lib/python2.7/site-packages/CliPlugin/MoreCli.py -rw-r--r-- 1 root root 24K Apr 17 09:43 /usr/lib/python2.7/site-packages/CliPlugin/MplsCli.py -rw-r--r-- 1 root root 11K Apr 17 09:43 /usr/lib/python2.7/site-packages/CliPlugin/MplsModel.py -rw-r--r-- 1 root root 8.9K Apr 16 02:13 /usr/lib/python2.7/site-packages/CliPlugin/MribConfigCli.py -rw-r--r-- 1 root root 37K Apr 16 01:52 /usr/lib/python2.7/site-packages/CliPlugin/MrouteCli.py -rw-r--r-- 1 root root 2.1K Apr 16 01:52 /usr/lib/python2.7/site-packages/CliPlugin/MrouteEtbaCli.py -rw-r--r-- 1 root root 1.9K Apr 16 02:13 /usr/lib/python2.7/site-packages/CliPlugin/MrouteEventMonCli.py -rw-r--r-- 1 root root 414 Apr 16 01:52 /usr/lib/python2.7/site-packages/CliPlugin/MrouteShowTechCli.py -rw-r--r-- 1 root root 32K Apr 16 03:12 /usr/lib/python2.7/site-packages/CliPlugin/MsdpCli.py -rw-r--r-- 1 root root 48K Apr 10 18:09 /usr/lib/python2.7/site-packages/CliPlugin/MsrpCli.py -rw-r--r-- 1 root root 29K Apr 10 18:09 /usr/lib/python2.7/site-packages/CliPlugin/MsrpModels.py -rw-r--r-- 1 root root 3.0K Apr 10 18:09 /usr/lib/python2.7/site-packages/CliPlugin/MsrpStream.py -rw-r--r-- 1 root root 10K Apr 10 18:09 /usr/lib/python2.7/site-packages/CliPlugin/MvrpCli.py -rw-r--r-- 1 root root 12K Apr 10 18:09 /usr/lib/python2.7/site-packages/CliPlugin/MvrpModels.py -rw-r--r-- 1 root root 22K Apr 16 01:53 /usr/lib/python2.7/site-packages/CliPlugin/NetworkCli.py -rw-r--r-- 1 root root 35K Apr 16 01:55 /usr/lib/python2.7/site-packages/CliPlugin/NetworkToolsCli.py -rw-r--r-- 1 root root 3.6K Apr 10 19:22 /usr/lib/python2.7/site-packages/CliPlugin/NetworkTopology.py -rw-r--r-- 1 root root 6.5K Apr 10 19:22 /usr/lib/python2.7/site-packages/CliPlugin/NetworkTopologyModels.py -rw-r--r-- 1 root root 3.1K Apr 10 19:22 /usr/lib/python2.7/site-packages/CliPlugin/NetworkTopologyService.py -rw-r--r-- 1 root root 6.3K Apr 16 01:53 /usr/lib/python2.7/site-packages/CliPlugin/NetworkUrlCli.py -rw-r--r-- 1 root root 19K Apr 16 01:55 /usr/lib/python2.7/site-packages/CliPlugin/Ntp.py -rw-r--r-- 1 root root 9.1K Apr 16 02:25 /usr/lib/python2.7/site-packages/CliPlugin/OldDhcpRelayCli.py -rw-r--r-- 1 root root 46K Apr 16 03:48 /usr/lib/python2.7/site-packages/CliPlugin/OpenFlowCli.py -rw-r--r-- 1 root root 28K Apr 16 03:48 /usr/lib/python2.7/site-packages/CliPlugin/OpenFlowCliLib.py -rw-r--r-- 1 root root 34K Apr 16 03:48 /usr/lib/python2.7/site-packages/CliPlugin/OpenFlowModel.py -rw-r--r-- 1 root root 91K Apr 16 02:43 /usr/lib/python2.7/site-packages/CliPlugin/OpenStack.py -rw-r--r-- 1 root root 41K Apr 16 02:43 /usr/lib/python2.7/site-packages/CliPlugin/OpenStackModels.py -rw-r--r-- 1 root root 15K Apr 16 02:20 /usr/lib/python2.7/site-packages/CliPlugin/OspfCliModels.py -rw-r--r-- 1 root root 9.2K Apr 10 17:37 /usr/lib/python2.7/site-packages/CliPlugin/PciCli.py -rw-r--r-- 1 root root 4.2K Apr 10 17:41 /usr/lib/python2.7/site-packages/CliPlugin/PcieNtCli.py -rw-r--r-- 1 root root 2.4K Apr 10 18:14 /usr/lib/python2.7/site-packages/CliPlugin/PeerIntfCli.py -rw-r--r-- 1 root root 13K Apr 16 02:25 /usr/lib/python2.7/site-packages/CliPlugin/PfcCli.py -rw-r--r-- 1 root root 33K Apr 10 17:36 /usr/lib/python2.7/site-packages/CliPlugin/PhysicalIntfRule.py -rw-r--r-- 1 root root 28K Apr 16 02:25 /usr/lib/python2.7/site-packages/CliPlugin/PimBsrConfigCli.py -rw-r--r-- 1 root root 8.5K Apr 16 02:25 /usr/lib/python2.7/site-packages/CliPlugin/PimBsrShowCli.py -rw-r--r-- 1 root root 1.7K Apr 16 02:13 /usr/lib/python2.7/site-packages/CliPlugin/PimClearCli.py -rw-r--r-- 1 root root 27K Apr 16 02:13 /usr/lib/python2.7/site-packages/CliPlugin/PimCliLib.py -rw-r--r-- 1 root root 9.3K Apr 16 02:13 /usr/lib/python2.7/site-packages/CliPlugin/PimConfigCheckModel.py -rw-r--r-- 1 root root 14K Apr 16 02:13 /usr/lib/python2.7/site-packages/CliPlugin/PimConfigCli.py -rw-r--r-- 1 root root 870 Apr 16 02:13 /usr/lib/python2.7/site-packages/CliPlugin/PimIntfJanitor.py -rw-r--r-- 1 root root 5.8K Apr 16 03:01 /usr/lib/python2.7/site-packages/CliPlugin/PimRegConfigCheck.py -rw-r--r-- 1 root root 5.8K Apr 16 03:01 /usr/lib/python2.7/site-packages/CliPlugin/PimRegConfigCli.py -rw-r--r-- 1 root root 3.5K Apr 16 03:01 /usr/lib/python2.7/site-packages/CliPlugin/PimRegShowCli.py -rw-r--r-- 1 root root 12K Apr 16 02:13 /usr/lib/python2.7/site-packages/CliPlugin/PimShowCli.py -rw-r--r-- 1 root root 567 Apr 16 02:13 /usr/lib/python2.7/site-packages/CliPlugin/PimShowTechCli.py -rw-r--r-- 1 root root 3.8K Apr 16 02:52 /usr/lib/python2.7/site-packages/CliPlugin/PimsmCliClear.py -rw-r--r-- 1 root root 9.6K Apr 16 02:52 /usr/lib/python2.7/site-packages/CliPlugin/PimsmCliConfig.py -rw-r--r-- 1 root root 1.2K Apr 16 02:52 /usr/lib/python2.7/site-packages/CliPlugin/PimsmCliLib.py -rw-r--r-- 1 root root 26K Apr 16 02:52 /usr/lib/python2.7/site-packages/CliPlugin/PimsmCliShow.py -rw-r--r-- 1 root root 1.9K Apr 10 17:57 /usr/lib/python2.7/site-packages/CliPlugin/PmbusCli.py -rw-r--r-- 1 root root 63K Apr 10 18:02 /usr/lib/python2.7/site-packages/CliPlugin/PolicyMapCliLib.py -rw-r--r-- 1 root root 11K Apr 10 18:02 /usr/lib/python2.7/site-packages/CliPlugin/PolicyMapModel.py -rw-r--r-- 1 root root 20K Apr 10 18:02 /usr/lib/python2.7/site-packages/CliPlugin/PolicyMapModelImpl.py -rw-r--r-- 1 root root 19K Apr 10 17:45 /usr/lib/python2.7/site-packages/CliPlugin/PortSecCli.py -rw-r--r-- 1 root root 22K Apr 10 17:54 /usr/lib/python2.7/site-packages/CliPlugin/PowerCli.py -rw-r--r-- 1 root root 1.8K Apr 10 17:54 /usr/lib/python2.7/site-packages/CliPlugin/PowerDiagsCli.py -rw-r--r-- 1 root root 1.4K Apr 10 17:57 /usr/lib/python2.7/site-packages/CliPlugin/PsmiCli.py -rw-r--r-- 1 root root 84K Apr 10 17:59 /usr/lib/python2.7/site-packages/CliPlugin/PtpCli.py -rw-r--r-- 1 root root 609 Apr 10 17:59 /usr/lib/python2.7/site-packages/CliPlugin/PtpIntfJanitor.py -rw-r--r-- 1 root root 12K Apr 10 18:02 /usr/lib/python2.7/site-packages/CliPlugin/PtpTimeSyncCli.py -rw-r--r-- 1 root root 5.2K Apr 10 18:02 /usr/lib/python2.7/site-packages/CliPlugin/PtpTimeSyncModel.py -rw-r--r-- 1 root root 213K Apr 16 03:39 /usr/lib/python2.7/site-packages/CliPlugin/QosCli.py -rw-r--r-- 1 root root 24K Apr 16 03:39 /usr/lib/python2.7/site-packages/CliPlugin/QosCliLib.py -rw-r--r-- 1 root root 39K Apr 16 03:39 /usr/lib/python2.7/site-packages/CliPlugin/QosCliModel.py -rw-r--r-- 1 root root 2.5K Apr 16 03:44 /usr/lib/python2.7/site-packages/CliPlugin/QosSnmp.py -rw-r--r-- 1 root root 21K Apr 16 01:55 /usr/lib/python2.7/site-packages/CliPlugin/RadiusCli.py -rw-r--r-- 1 root root 66K Apr 16 02:50 /usr/lib/python2.7/site-packages/CliPlugin/ReachabilityMonitorCli.py -rw-r--r-- 1 root root 38K Apr 16 02:50 /usr/lib/python2.7/site-packages/CliPlugin/ReachabilityMonitorModel.py -rw-r--r-- 1 root root 17K Apr 16 02:11 /usr/lib/python2.7/site-packages/CliPlugin/RedSupCli.py -rw-r--r-- 1 root root 804 Apr 16 02:11 /usr/lib/python2.7/site-packages/CliPlugin/RedSupCliFormatSpec.py -rw-r--r-- 1 root root 2.2K Apr 16 02:11 /usr/lib/python2.7/site-packages/CliPlugin/RedSupFileCli.py -rw-r--r-- 1 root root 7.0K Apr 16 02:11 /usr/lib/python2.7/site-packages/CliPlugin/RedSupModels.py -rw-r--r-- 1 root root 5.1K Apr 10 17:36 /usr/lib/python2.7/site-packages/CliPlugin/ReloadCauseCli.py -rw-r--r-- 1 root root 17K Apr 10 17:36 /usr/lib/python2.7/site-packages/CliPlugin/ReloadCli.py -rw-r--r-- 1 root root 4.7K Apr 18 19:04 /usr/lib/python2.7/site-packages/CliPlugin/ReloadConfigSaveCli.py -rw-r--r-- 1 root root 2.4K Apr 16 02:11 /usr/lib/python2.7/site-packages/CliPlugin/ReloadElectionCli.py -rw-r--r-- 1 root root 5.1K Apr 16 02:11 /usr/lib/python2.7/site-packages/CliPlugin/ReloadFileSyncCli.py -rw-r--r-- 1 root root 4.7K Apr 10 18:26 /usr/lib/python2.7/site-packages/CliPlugin/RibIp6Cli.py -rw-r--r-- 1 root root 4.8K Apr 10 18:26 /usr/lib/python2.7/site-packages/CliPlugin/RibIpCli.py -rw-r--r-- 1 root root 5.0K Apr 10 18:26 /usr/lib/python2.7/site-packages/CliPlugin/RibShowTechCli.py -rw-r--r-- 1 root root 446 Apr 16 02:02 /usr/lib/python2.7/site-packages/CliPlugin/RipShowTechCli.py -rw-r--r-- 1 root root 3.3K Apr 10 17:25 /usr/lib/python2.7/site-packages/CliPlugin/RouteDistinguisher.py -rw-r--r-- 1 root root 1.3K Apr 10 17:35 /usr/lib/python2.7/site-packages/CliPlugin/RouteEventMonCli.py -rw-r--r-- 1 root root 106K Apr 16 01:58 /usr/lib/python2.7/site-packages/CliPlugin/RouteMapCli.py -rw-r--r-- 1 root root 19K Apr 16 01:58 /usr/lib/python2.7/site-packages/CliPlugin/RouteMapCliModels.py -rw-r--r-- 1 root root 190K Apr 16 02:38 /usr/lib/python2.7/site-packages/CliPlugin/RoutingBgpCli.py -rw-r--r-- 1 root root 68K Apr 16 02:38 /usr/lib/python2.7/site-packages/CliPlugin/RoutingBgpShowCli.py -rw-r--r-- 1 root root 1017 Apr 10 18:26 /usr/lib/python2.7/site-packages/CliPlugin/RoutingCommon.py -rw-r--r-- 1 root root 65K Apr 16 02:03 /usr/lib/python2.7/site-packages/CliPlugin/RoutingIsisCli.py -rw-r--r-- 1 root root 115K Apr 16 02:35 /usr/lib/python2.7/site-packages/CliPlugin/RoutingOspf3Cli.py -rw-r--r-- 1 root root 195K Apr 16 02:20 /usr/lib/python2.7/site-packages/CliPlugin/RoutingOspfCli.py -rw-r--r-- 1 root root 23K Apr 16 02:02 /usr/lib/python2.7/site-packages/CliPlugin/RoutingRipCli.py -rw-r--r-- 1 root root 2.4K Apr 16 03:24 /usr/lib/python2.7/site-packages/CliPlugin/RoutingSnmp.py -rw-r--r-- 1 root root 1.2K Apr 10 18:59 /usr/lib/python2.7/site-packages/CliPlugin/SchanAccelCli.py -rw-r--r-- 1 root root 2.1K Apr 10 17:18 /usr/lib/python2.7/site-packages/CliPlugin/SectionCliLib.py -rw-r--r-- 1 root root 8.0K Apr 10 17:46 /usr/lib/python2.7/site-packages/CliPlugin/Security.py -rw-r--r-- 1 root root 1.8K Apr 16 01:56 /usr/lib/python2.7/site-packages/CliPlugin/SendCli.py -rw-r--r-- 1 root root 15K Apr 10 17:18 /usr/lib/python2.7/site-packages/CliPlugin/SessionCli.py -rw-r--r-- 1 root root 29K Apr 16 02:13 /usr/lib/python2.7/site-packages/CliPlugin/SflowCli.py -rw-r--r-- 1 root root 1.5K Apr 16 02:13 /usr/lib/python2.7/site-packages/CliPlugin/SflowIntfJanitor.py -rw-r--r-- 1 root root 13K Apr 16 02:13 /usr/lib/python2.7/site-packages/CliPlugin/SflowModel.py -rw-r--r-- 1 root root 3.0K Apr 10 17:18 /usr/lib/python2.7/site-packages/CliPlugin/ShellCli.py -rw-r--r-- 1 root root 3.3K Apr 16 01:53 /usr/lib/python2.7/site-packages/CliPlugin/ShowProcesses.py -rw-r--r-- 1 root root 625 Apr 10 17:35 /usr/lib/python2.7/site-packages/CliPlugin/ShowRunModel.py -rw-r--r-- 1 root root 3.2K Apr 18 19:04 /usr/lib/python2.7/site-packages/CliPlugin/ShowTechSupportCmds.py -rw-r--r-- 1 root root 1.2K Apr 10 07:55 /usr/lib/python2.7/site-packages/CliPlugin/SmashCli.py -rw-r--r-- 1 root root 87K Apr 16 02:01 /usr/lib/python2.7/site-packages/CliPlugin/SnmpCli.py -rw-r--r-- 1 root root 46K Apr 16 01:53 /usr/lib/python2.7/site-packages/CliPlugin/Ssh.py -rw-r--r-- 1 root root 13K Apr 10 17:46 /usr/lib/python2.7/site-packages/CliPlugin/Ssl.py -rw-r--r-- 1 root root 4.0K Apr 10 17:46 /usr/lib/python2.7/site-packages/CliPlugin/SslCliLib.py -rw-r--r-- 1 root root 11K Apr 10 17:46 /usr/lib/python2.7/site-packages/CliPlugin/SslModel.py -rw-r--r-- 1 root root 1.1K Apr 10 18:35 /usr/lib/python2.7/site-packages/CliPlugin/StartupConfigError.py -rw-r--r-- 1 root root 22K Apr 16 01:54 /usr/lib/python2.7/site-packages/CliPlugin/StormControlCli.py -rw-r--r-- 1 root root 6.1K Apr 10 18:04 /usr/lib/python2.7/site-packages/CliPlugin/StpClear.py -rw-r--r-- 1 root root 33K Apr 10 18:04 /usr/lib/python2.7/site-packages/CliPlugin/StpCli.py -rw-r--r-- 1 root root 3.1K Apr 10 18:04 /usr/lib/python2.7/site-packages/CliPlugin/StpCliLib.py -rw-r--r-- 1 root root 26K Apr 10 18:04 /usr/lib/python2.7/site-packages/CliPlugin/StpIntfCli.py -rw-r--r-- 1 root root 3.7K Apr 10 18:04 /usr/lib/python2.7/site-packages/CliPlugin/StpIntfJanitor.py -rw-r--r-- 1 root root 46K Apr 10 18:04 /usr/lib/python2.7/site-packages/CliPlugin/StpModels.py -rw-r--r-- 1 root root 57K Apr 10 18:04 /usr/lib/python2.7/site-packages/CliPlugin/StpShow.py -rw-r--r-- 1 root root 14K Apr 10 17:43 /usr/lib/python2.7/site-packages/CliPlugin/SubIntfCli.py -rw-r--r-- 1 root root 2.3K Apr 16 02:11 /usr/lib/python2.7/site-packages/CliPlugin/SupeSessionCli.py -rw-r--r-- 1 root root 1.7K Apr 10 17:25 /usr/lib/python2.7/site-packages/CliPlugin/SwitchIntfCli.py -rw-r--r-- 1 root root 1.3K Apr 16 01:53 /usr/lib/python2.7/site-packages/CliPlugin/SysMgrCliLib.py -rw-r--r-- 1 root root 3.6K Apr 16 01:53 /usr/lib/python2.7/site-packages/CliPlugin/SysMgrModels.py -rw-r--r-- 1 root root 18K Apr 16 01:56 /usr/lib/python2.7/site-packages/CliPlugin/TacacsCli.py -rw-r--r-- 1 root root 4.9K Apr 10 17:43 /usr/lib/python2.7/site-packages/CliPlugin/TaggedPdu.py -rw-r--r-- 1 root root 45K Apr 10 18:12 /usr/lib/python2.7/site-packages/CliPlugin/TapAggIntfCli.py -rw-r--r-- 1 root root 17K Apr 10 18:12 /usr/lib/python2.7/site-packages/CliPlugin/TapAggModels.py -rw-r--r-- 1 root root 48K Apr 10 18:12 /usr/lib/python2.7/site-packages/CliPlugin/TapAggPmapCli.py -rw-r--r-- 1 root root 4.1K Apr 10 18:12 /usr/lib/python2.7/site-packages/CliPlugin/TapAggPmapCliLib.py -rw-r--r-- 1 root root 1.8K Apr 10 18:12 /usr/lib/python2.7/site-packages/CliPlugin/TapAggPmapModel.py -rw-r--r-- 1 root root 1.7K Apr 10 18:12 /usr/lib/python2.7/site-packages/CliPlugin/TapAggPmapModelImpl.py -rw-r--r-- 1 root root 22K Apr 16 01:55 /usr/lib/python2.7/site-packages/CliPlugin/TcpdumpCli.py -rw-r--r-- 1 root root 6.2K Apr 10 17:18 /usr/lib/python2.7/site-packages/CliPlugin/TechSupportCli.py -rw-r--r-- 1 root root 9.3K Apr 16 01:53 /usr/lib/python2.7/site-packages/CliPlugin/Telnet.py -rw-r--r-- 1 root root 2.5K Apr 10 17:43 /usr/lib/python2.7/site-packages/CliPlugin/TopoModel.py -rw-r--r-- 1 root root 4.3K Apr 10 17:43 /usr/lib/python2.7/site-packages/CliPlugin/TopoShow.py -rw-r--r-- 1 root root 6.0K Apr 10 17:48 /usr/lib/python2.7/site-packages/CliPlugin/TrackingCli.py -rw-r--r-- 1 root root 12K Apr 10 17:39 /usr/lib/python2.7/site-packages/CliPlugin/UplinkFailureDetectionCli.py -rw-r--r-- 1 root root 6.0K Apr 18 19:04 /usr/lib/python2.7/site-packages/CliPlugin/VersionCli.py -rw-r--r-- 1 root root 5.5K Apr 18 19:04 /usr/lib/python2.7/site-packages/CliPlugin/VersionModel.py -rw-r--r-- 1 root root 9.8K Apr 10 18:06 /usr/lib/python2.7/site-packages/CliPlugin/VirtualCableCli.py -rw-r--r-- 1 root root 4.7K Apr 10 17:25 /usr/lib/python2.7/site-packages/CliPlugin/VirtualIntfRule.py -rw-r--r-- 1 root root 100K Apr 10 17:43 /usr/lib/python2.7/site-packages/CliPlugin/VlanCli.py -rw-r--r-- 1 root root 21K Apr 10 17:43 /usr/lib/python2.7/site-packages/CliPlugin/VlanIntfCli.py -rw-r--r-- 1 root root 6.0K Apr 10 17:43 /usr/lib/python2.7/site-packages/CliPlugin/VlanIntfModel.py -rw-r--r-- 1 root root 24K Apr 10 17:43 /usr/lib/python2.7/site-packages/CliPlugin/VlanModel.py -rw-r--r-- 1 root root 25K Apr 16 01:50 /usr/lib/python2.7/site-packages/CliPlugin/Vm.py -rw-r--r-- 1 root root 55K Apr 16 02:21 /usr/lib/python2.7/site-packages/CliPlugin/VmTracerCli.py -rw-r--r-- 1 root root 3.1K Apr 16 02:21 /usr/lib/python2.7/site-packages/CliPlugin/VmTracerIntfCli.py -rw-r--r-- 1 root root 19K Apr 16 02:21 /usr/lib/python2.7/site-packages/CliPlugin/VmTracerModels.py -rw-r--r-- 1 root root 79K Apr 10 19:19 /usr/lib/python2.7/site-packages/CliPlugin/VxlanCli.py -rw-r--r-- 1 root root 26K Apr 10 19:06 /usr/lib/python2.7/site-packages/CliPlugin/VxlanControllerCli.py -rw-r--r-- 1 root root 11K Apr 10 19:06 /usr/lib/python2.7/site-packages/CliPlugin/VxlanControllerModel.py -rw-r--r-- 1 root root 7.9K Apr 10 19:19 /usr/lib/python2.7/site-packages/CliPlugin/VxlanIntfModel.py -rw-r--r-- 1 root root 17K Apr 10 19:19 /usr/lib/python2.7/site-packages/CliPlugin/VxlanModel.py -rw-r--r-- 1 root root 1.7K Apr 10 19:06 /usr/lib/python2.7/site-packages/CliPlugin/VxlanVni.py -rw-r--r-- 1 root root 7.2K Apr 10 17:18 /usr/lib/python2.7/site-packages/CliPlugin/WaitForWarmupCli.py -rw-r--r-- 1 root root 13K Apr 16 01:53 /usr/lib/python2.7/site-packages/CliPlugin/WatchCli.py -rw-r--r-- 1 root root 8.5K Apr 16 03:50 /usr/lib/python2.7/site-packages/CliPlugin/Wbem.py -rw-r--r-- 1 root root 21K Apr 10 17:51 /usr/lib/python2.7/site-packages/CliPlugin/XcvrCli.py -rw-r--r-- 1 root root 3.1K Apr 10 17:51 /usr/lib/python2.7/site-packages/CliPlugin/XcvrConfigCli.py -rw-r--r-- 1 root root 12K Apr 10 17:51 /usr/lib/python2.7/site-packages/CliPlugin/XcvrModel.py -rw-r--r-- 1 root root 23K Apr 18 06:18 /usr/lib/python2.7/site-packages/CliPlugin/Xmpp.py -rw-r--r-- 1 root root 4.5K Apr 18 06:18 /usr/lib/python2.7/site-packages/CliPlugin/XmppModel.py -rw-r--r-- 1 root root 6.8K Apr 16 02:21 /usr/lib/python2.7/site-packages/CliPlugin/ZeroTouch.py -rw-r--r-- 1 root root 0 Apr 10 17:18 /usr/lib/python2.7/site-packages/CliPlugin/__init__.py
コードの一例
[kotetsu@veos-dev site-packages]$ cat EthIntf.py
# Copyright (c) 2006-2010 Arista Networks, Inc. All rights reserved. # Arista Networks, Inc. Confidential and Proprietary. """ This is the top-level Python module for the EthIntf library. It contains some constants related to frame sizes. """ from eunuchs.if_ether_h import ETH_FCS_LEN from eunuchs.if_vlan_h import VLAN_ETH_HLEN MAX_SUPPORTED_FRAME_SIZE = 9236 MAX_SUPPORTED_MTU = MAX_SUPPORTED_FRAME_SIZE - VLAN_ETH_HLEN - ETH_FCS_LEN # 9214 MAX_MGMT_MTU = 1500 # BUG5808 [kotetsu@veos-dev site-packages]$
以下は /usr/lib/python2.7/site-packages/SysdbPlugin/SysdbEthPortId.py
から抜粋
if interface in ( 'Port-Channel', 'PeerPort-Channel' ): # BUG4544: Further discussion is needed regarding port Id assignment # of channel groups. # Linecard numbers start at 3, so the desired port Ids for linecard # ports are 301 - 1500, assuming maximum of 8 cards and 150 ports per # card. Starting at 100 won't conflict with physical ports until # there are more than 200 Port-Channels. baseId = 100 elif interface == 'PeerEthernet': if linecard > 2: # Interface on a modular linecard. # Starting at 1501 will not conflict with physical ports on M8 baseId = 1500 + 150 * ( linecard - 3 ) + port else: baseId = 200 + port elif interface == 'Management': if linecard == 0: if port == 0: # Management0 does not need an intf id because it is a # virtual interface and not used in LLDP. t0( "Interface", intf, "does not need a port id" ) return 0 # Using 97 - 99 for management interfaces on fixed # systems. This lower range is selected to not make # 'PortList' (in MIBs) big. It leaves 1 - 96 for ethernet # interfaces. baseId = 96 + port else: # On modular the first front-panel port is on a linecard, # so ports 1-99 are free. We will make use of 1-4. # Assumes only two management ports per supervisor. assert port in [ 1, 2 ] baseId = port + ( ( linecard - 1 ) * 2 ) elif interface == 'Vxlan': t0( 'Vxlan interface %s' % intf ) baseId = 2000 + port else: assert interface == 'Ethernet' if subPort > 0: # I'm assuming at most 4 subPorts per port. This is true for the # qsfp linecards, where we have linecard/qsfp/subport. However, if # we have a 100G connector, there will be more subPorts (12?). baseId = port * 4 + subPort else: baseId = port if linecard > 0: baseId = baseId + ( linecard * 150 )
参考
Python が入っていない NW 機器も Ansible で (一応) 制御できる (original : 2015/02/15)
この記事は某所で 2015/02/15
に書いたもののコピーです。
そのため 2017/05/13
時点ではやや古い情報も含まれています。(以下一例)
Ansible
のバージョンが当時の1.8
から2.3
くらいまであがっているので、挙動が異なる部分がある筈
.
概要
本項でやること
target に python が入っていなくても ssh 接続可能ならば Ansible で一応制御できる、ということを軽く確認します。 Linux ベースではないネットワーク機器(Cisco IOS etc)などで使える筈です。
気をつけること(≒結論)
ansible:1.8.2
では、以下を満たせばいける筈です。
gather_facts
はno
にすること- コマンド実行 module は
raw
を使うこと (shell
やcommand
ではない) ssh
のcommand
で target にリモートコマンド実行できること
参考情報(公式より)
何でコマンド実行 module として raw
を使うのか
Ansible の config ファイルで使える ssh 系のオプション設定
環境情報
Ansible
target device (NW機器)
Python が入っていない NW 機器代表として Juniper Firefly を使いました。 FreeBSD ベースではありますが。
- OS:12.1X47-D10.4
サンプル
設定ファイル/Playbook
hosts
実行時に --ask-pass
とか使ったり、環境変数を使ったりでパスワードベタ書きは回避可能です。
[junos] 192.168.101.70 [junos:vars] ansible_ssh_user=kotetsu ansible_ssh_pass=kotetsu
ansible.cfg
ssh 接続に Paramiko と OpenSSH のいずれを使うか、という話がありますが…今回はオプションが豊富な OpenSSH を使っています。
[defaults] transport=ssh [ssh_connection] ssh_args= -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null -o ControlMaster=no -o ControlPersist=60s scp_if_ssh=false
Playbook
単純に ssh の command で show version | no-more
を実行して、結果を debug で表示させるだけです。
- name: not support Python node hosts: junos gather_facts: no sudo: false tasks: - name: show version raw: show version | no-more register: output_show_version - debug: var=output_show_version
実行例
$ ansible-playbook playbook_junos.yml -i hosts PLAY [not support Python node] ************************************************ TASK: [show version] ********************************************************** ok: [192.168.101.70] TASK: [debug var=output_show_version] ***************************************** ok: [192.168.101.70] => { "output_show_version": { "invocation": { "module_args": "show version | no-more", "module_name": "raw" }, "rc": 0, "stderr": "", "stdout": "Could not chdir to home directory /var/home/kotetsu: No such file or directory\r\nHostname: fw01\r\nModel: firefly-perimeter\r\nJUNOS Software Release [12.1X47-D10.4]\r\n", "stdout_lines": [ "Could not chdir to home directory /var/home/kotetsu: No such file or directory", "Hostname: fw01", "Model: firefly-perimeter", "JUNOS Software Release [12.1X47-D10.4]" ] } } PLAY RECAP ******************************************************************** 192.168.101.70 : ok=2 changed=0 unreachable=0 failed=0
雑記
VyOS と Arista で VXLAN 相互接続 (original : 2014/12/24)
この記事は某所で 2014/12/24
に書いた記事のコピーです。
そのため 2017/05/11
時点ではやや古い情報も含まれています。
概要
また Arista ですか? いえ、これは VyOS Advent Calendar 2014 の記事です。
本項でやること
VyOS と Arista で VXLAN 相互接続します。
とはいえ、interoperability で色々痛い目にあってきた人が思うような苦難は全く無いです。
Arista と VyOS では VXLAN で使おうとする dstPort 番号が異なるのですが、VyOS の記事なので敢えて VyOS 側でこれを変えます。
# デファクトスタンダードな openvswitch ではなく、何でニッチなアレ同士で…というツッコミは不可。
前段
VXLAN とは?
VXLAN 相互接続で気にすべき点
事前の鍵交換 phase やらの面倒ごとが無いシンプルなプロトコルなので、2 台で相互接続する分には左程気をつける点は無いです。
今年の Shownet では、各メーカの箱モノで相互接続実験とかやっていて、(以下のスライド 68-75)
これを見ても気にする点は以下くらいだと分かります。
- BUM トラフィック転送方法 (Unicast or Multicast)
- UDP dstport 番号 (4789 or 8472)
- VXLAN カプセリング時の 802.1q tag 取扱い (除去 or そのまま)
1 つ目は製品によってマチマチです。RFC では Multicast 実装が示されています。
2 つ目は、本項でも気にしています。draft で「IANA から UDP ポート番号割り当ててもらわないと~」と言っている時代が長かったからなのか、Linux VXLAN では 8472 が今も使われています。その内どうにかしないと、ってスタンスではあるようです。( Linux/drivers/net/vxlan.c 参照)
現在は IANA から 4789 を割り当てられているので、最近はそれを使っている・過去の経緯を考慮して dstport 変更可能な製品が多いです。
3 つ目は RFC で取り除けと言ってます↓。本項では、access VLAN しか使っていないので、見ていません。
a VTEP SHOULD NOT include an inner VLAN tag on tunnel packets
本項で取り扱う VTEP 実装
VyOS
VyOS なので基本的に Linux ベースです。
VyOS に VXLAN 取り込んだよ、って話は作者の以下資料を参照して下さい。
VXLAN の dstport に関して(の悩みどころ)はスライド 23 に書かれています。
VyOS 1.1.1 現在は普通に動かすと、dstport 8472 で動きます。
Arista
VXLAN が動かない機器群を収容して、自分が VTEP をやる Hardware VTEP です。(本項で使うのは Software 版ですが…)
デフォルトの dstport は 4789 ですが、設定で変更して既存の 8472 に歩み寄ることができます。本項ではやりませんが。
とりあえず、メーカが出している分かり易い資料は以下です。
Arista EOS 自体については、以下の本をオススメしときますね。
Arista Warrior: A Real-World Guide to Understanding Arista Switches and EOS
- 作者: Gary A. Donahue
- 出版社/メーカー: O'Reilly Media
- 発売日: 2012/10/27
- メディア: ペーパーバック
- この商品を含むブログを見る
環境情報など
構成図/環境
以下の構成でやります。全て箱庭の仮想環境です。
赤いテナントと青いテナントを Isolation します、的な。
ルータは multicast routing 出来れば、何でも良いです(VyOS 1.1.1 では不可だけど実装予定には入っているみたい)。 ノードは何でも良いです。
ホスト環境
- ホスト:Windows7 + VirtualBox 4.3.18
VyOS 環境 (VTEP)
- OS:VyOS 1.1.1
- CPU:1Core
- Memory:256MB
Arista 環境 (VTEP)
- Aboot-veos:Aboot-veos-2.1.0
- OS:vEOS-4.14.2F
- CPU:1core
- Memory:1024MB
Firefly 環境 (ルータ)
- OS:12.1X47-D10.4
- CPU:2core
- Memory:2048MB
ノード環境 (4台共)
事前準備
VyOS のデプロイ
以下を参考に作っておきます。2014/12/24 現在の最新版である 1.1.1 を使います。
Arista(vEOS) のデプロイ
以下リンクを参考に作っておきます。公式に、各種ハイパーバイザごとの導入手順詳細とかもあります。
Firefly のデプロイ~ルータモードに変更
以下リンクを参考に作っておきます。(これは VMPlayer 版ですが、各種ハイパーバイザ使えます。)
あと、デフォルトだと firewall 的な動作をして鬱陶しいので、以下を参考にルータモード(俗称)に切り替えておきます。
Ubuntu のデプロイと設定
ノードの OS は別に問わないので、好きに作って IP アドレス設定だけすれば OK です。 VLAN tag とかも食いません。
設定
VyOS の VXLAN 設定
modprobe vxlan に udp_port オプション追記
事前に Linux Kernel と VyOS バージョン確認しておきます。
kotetsu@vtep-vyos01:~$ uname -r 3.13.11-1-amd64-vyos kotetsu@vtep-vyos01:~$ show version Version: VyOS 1.1.1 Description: VyOS 1.1.1 (helium) Copyright: 2014 VyOS maintainers and contributors Built by: maintainers@vyos.net Built on: Sun Dec 7 21:41:28 UTC 2014 Build ID: 1412072141-129950d System type: x86 64-bit Boot via: disk Hypervisor: VirtualBox HW model: VirtualBox HW S/N: 0 HW UUID: EF4B6725-D02A-47D3-8194-BFADF71F9987 Uptime: 23:17:43 up 22:39, 1 user, load average: 0.01, 0.02, 0.05
VXLAN の Kernel module を modprobe する時点で dstport をデフォルトの 8472 から 4789 に変更されるように、以下ファイルを書き換えます。
kotetsu@vyos# ls -alh /opt/vyatta/share/vyatta-cfg/templates/interfaces/vxlan total 20K drwxr-xr-x 3 root root 4.0K Dec 23 00:53 . drwxr-xr-x 16 root root 4.0K Dec 8 06:44 .. -rw-r--r-- 1 root root 1.1K Dec 23 00:53 node.def -rw-r--r-- 1 root root 1.1K Oct 30 17:43 node.def.orig drwxr-xr-x 13 root root 4.0K Dec 8 06:44 node.tag kotetsu@vyos:~$ sudo diff /opt/vyatta/share/vyatta-cfg/templates/interfaces/vxlan/node.def /opt/vyatta/share/vyatta-cfg/templates/interfaces/vxlan/node.def.orig 14c14 < [ -d /sys/module/vxlan ] || sudo modprobe vxlan udp_port=4789 --- > [ -d /sys/module/vxlan ] || sudo modprobe vxlan
CLI で設定
では構成図のように順次設定していきます。
set interfaces ethernet eth2 address '172.16.2.1/24' set interfaces bridge 'br100' set interfaces bridge 'br200' set interfaces ethernet eth3 bridge-group bridge 'br100' set interfaces ethernet eth4 bridge-group bridge 'br200'
set interfaces vxlan vxlan0 bridge-group bridge 'br100' set interfaces vxlan vxlan0 group '239.0.0.1' set interfaces vxlan vxlan0 link 'eth2' set interfaces vxlan vxlan0 vni '10' set interfaces vxlan vxlan1 bridge-group bridge 'br200' set interfaces vxlan vxlan1 group '239.0.0.1' set interfaces vxlan vxlan1 link 'eth2' set interfaces vxlan vxlan1 vni '20'
VyOS が認識しないといけない Arista 側の VTEP IP アドレスは、Arista の Loopback アドレスになるので、StaticRoute を追加しておきます。 #これだと拡張が面倒なので、実環境では DefaultRoute か動的ルーティングを使うことが多い気がします。
set protocols static route 172.16.3.1/32 next-hop '172.16.2.254'
commit
~ save
して設定確認しておきます。
設定確認
kotetsu@vtep-vyos01:~$ show bridge bridge name bridge id STP enabled interfaces br100 0000.0800272ede56 no eth3 vxlan0 br200 0000.0800276532b1 no eth4 vxlan1
kotetsu@vtep-vyos01:~$ show interfaces vxlan Codes: S - State, L - Link, u - Up, D - Down, A - Admin Down Interface IP Address S/L Description --------- ---------- --- ----------- vxlan0 - u/u vxlan1 - u/u kotetsu@vtep-vyos01:~$ ip -d link show vxlan0 10: vxlan0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1450 qdisc noqueue master br100 state UNKNOWN mode DEFAULT group default link/ether 96:3e:2b:62:6a:57 brd ff:ff:ff:ff:ff:ff promiscuity 1 vxlan id 10 group 239.0.0.1 dev eth2 port 32768 61000 ttl 16 ageing 300 kotetsu@vtep-vyos01:~$ ip -d link show vxlan1 15: vxlan1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1450 qdisc noqueue master br200 state UNKNOWN mode DEFAULT group default link/ether 8e:02:68:1e:d2:69 brd ff:ff:ff:ff:ff:ff promiscuity 1 vxlan id 20 group 239.0.0.1 dev eth2 port 32768 61000 ttl 16 ageing 300
Arista(vEOS) の VXLAN 設定
設定
vlan 100,200 interface Ethernet1 description DEV=fw01 IF=ge-0/0/2 no switchport ip address 172.16.1.1/24 ! interface Ethernet2 description DEV=node001 IF=eth2 switchport access vlan 100 ! interface Ethernet3 description DEV=node101 IF=eth2 switchport access vlan 200
以下のように VXLAN インターフェースの source-interface には、Loopback Interface しか適用できません。VyOS などの dev と同じノリで物理IFを指定できるかと思いきや…。
interface Loopback0 ip address 172.16.3.1/32 ! interface Vxlan1 vxlan multicast-group 239.0.0.1 vxlan source-interface Loopback0 vxlan udp-port 4789 vxlan vlan 100 vni 10 vxlan vlan 200 vni 20
このままだと VTEP は 239.0.0.1 宛の通信をどこに投げればいいのか分からないので、Multicast Routing の設定をします。
ip routing ip multicast-routing interface Ethernet1 ip pim sparse-mode ip pim rp-address 172.16.1.254 ip route 172.16.2.0/24 172.16.1.254
設定確認
vtep-arista01#show interfaces vxlan 1 Vxlan1 is up, line protocol is up (connected) Hardware is Vxlan Source interface is Loopback0 and is active with 172.16.3.1 Replication/Flood Mode is multicast Static vlan to vni mapping is [100, 10] [200, 20] Multicast group address is 239.0.0.1 vtep-arista01#show vxlan vtep Remote vteps for Vxlan1: Total number of remote vteps: 0 vtep-arista01#show vxlan counters software Rx bytes for encapsulation : 0 Rx pkts for encapsulation : 0 Encaped bytes : 0 Encaped packets : 0 Tx bytes after encapsulation : 0 Tx pkts after encapsulation : 0 Rx dot1Q Tunnel pkts for encapsulation : 0 Rx bytes after decapsulation : 0 Rx pkts after decapsulation : 0 Decaped bytes : 0 Decaped packets : 0 ARP bytes : 0 ARP packets : 0 Read error for pkts coming in for encapsulation : 0 Discarded runt pkts ( encap side ) : 0 Discard vlan range ( encap eide ) : 0 Discard vlan map ( encap side ) : 0 Discard mlag peer link ( encap side ) : 0 Discarded pkts due to empty flood list : 0 Encap send error : 0 Encap timeout : 0 Discarded runt pkts ( decap side ) : 0 Discard pkts not for vtep ( decap side ) : 0 Discard bytes not for vtep ( decap side ) : 0 Discard pkts with invalid vxlan header : 0 Discard vlan map ( decap side ) : 0 Discard VNI range ( decap side ) : 0 Decap timeout : 0 Decap socket error : 0 ARP send error : 0 vtep-arista01#show vxlan address-table Vxlan Mac Address Table ---------------------------------------------------------------------- Vlan Mac Address Type Prt Vtep Moves Last Move ---- ----------- ---- --- ---- ----- --------- Total Remote Mac Addresses for this criterion: 0 vtep-arista01#show vxlan counters varp arp cache installed: 0 vxlan encapsulated arps: 0 arp reply to vArp mac and vArp vtep: 0 arp reply RX: 0 arp reply head-end-replicated: 0 arp reply TX: 0 arp request decaped and sent: 0 arp cache install err 0 arp request decap and send TX err: 0 unknown cpu port id: 0 packet too short: 0 unexpected ether type: 0 unexpected non IP packet 0 unexpected IP prot 0 unexpected UPD port 0 unexpected inner packet 0 unexpected arp reply 0 invalid IP checksum 0 invalid Vxlan header 0 invalid arp packet 0 unknown vlan to vni mapping 0 unknown source IP 0 no BUM flood list TX err 0 arp reply to Arp agent TX err 0
Firefly の multicast routing 設定
設定
VXLAN の RFC には dense より bidirectional PIM が効果的かもね、と書いてあります。 ガン無視して、ここは簡単な dense 設定でいきます。
set interfaces ge-0/0/2 unit 0 family inet address 172.16.1.254/24 set interfaces ge-0/0/3 unit 0 family inet address 172.16.2.254/24 set routing-options static route 172.16.3.1/32 next-hop 172.16.1.1 set protocols pim interface ge-0/0/2.0 mode dense set protocols pim interface ge-0/0/3.0 mode dense
動作確認
疎通
赤 node 同士、青 node 同士が疎通可能なことを確認します。
この時、VyOS や Arista で tcpdump
かけておき後で確認します。
# 疎通したは良いが、異様に RTT がでかい…。firefly と Arista 間もそんな感じで、ショボいマシンでArista 動かしている所為かも。
$ ping 10.0.0.2 PING 10.0.0.2 (10.0.0.2) 56(84) bytes of data. 64 bytes from 10.0.0.2: icmp_seq=1 ttl=64 time=72.9 ms 64 bytes from 10.0.0.2: icmp_seq=2 ttl=64 time=67.2 ms 64 bytes from 10.0.0.2: icmp_seq=3 ttl=64 time=63.2 ms 64 bytes from 10.0.0.2: icmp_seq=4 ttl=64 time=163 ms 64 bytes from 10.0.0.2: icmp_seq=5 ttl=64 time=75.7 ms 64 bytes from 10.0.0.2: icmp_seq=6 ttl=64 time=67.2 ms 64 bytes from 10.0.0.2: icmp_seq=7 ttl=64 time=68.8 ms 64 bytes from 10.0.0.2: icmp_seq=8 ttl=64 time=73.7 ms 64 bytes from 10.0.0.2: icmp_seq=9 ttl=64 time=55.3 ms 64 bytes from 10.0.0.2: icmp_seq=10 ttl=64 time=102 ms 64 bytes from 10.0.0.2: icmp_seq=11 ttl=64 time=38.5 ms 64 bytes from 10.0.0.2: icmp_seq=12 ttl=64 time=33.0 ms 64 bytes from 10.0.0.2: icmp_seq=13 ttl=64 time=35.1 ms 64 bytes from 10.0.0.2: icmp_seq=14 ttl=64 time=31.7 ms
~$ ping 10.0.0.2 PING 10.0.0.2 (10.0.0.2) 56(84) bytes of data. 64 bytes from 10.0.0.2: icmp_seq=1 ttl=64 time=70.6 ms 64 bytes from 10.0.0.2: icmp_seq=2 ttl=64 time=62.5 ms 64 bytes from 10.0.0.2: icmp_seq=3 ttl=64 time=100 ms 64 bytes from 10.0.0.2: icmp_seq=4 ttl=64 time=38.6 ms 64 bytes from 10.0.0.2: icmp_seq=5 ttl=64 time=35.3 ms 64 bytes from 10.0.0.2: icmp_seq=6 ttl=64 time=30.0 ms 64 bytes from 10.0.0.2: icmp_seq=7 ttl=64 time=34.4 ms 64 bytes from 10.0.0.2: icmp_seq=8 ttl=64 time=26.1 ms 64 bytes from 10.0.0.2: icmp_seq=9 ttl=64 time=29.9 ms 64 bytes from 10.0.0.2: icmp_seq=10 ttl=64 time=28.7 ms 64 bytes from 10.0.0.2: icmp_seq=11 ttl=64 time=25.9 ms 64 bytes from 10.0.0.2: icmp_seq=12 ttl=64 time=24.8 ms 64 bytes from 10.0.0.2: icmp_seq=13 ttl=64 time=24.4 ms
$ ping 10.0.0.1 PING 10.0.0.1 (10.0.0.1) 56(84) bytes of data. 64 bytes from 10.0.0.1: icmp_seq=1 ttl=64 time=24.3 ms 64 bytes from 10.0.0.1: icmp_seq=2 ttl=64 time=25.9 ms 64 bytes from 10.0.0.1: icmp_seq=3 ttl=64 time=28.5 ms 64 bytes from 10.0.0.1: icmp_seq=4 ttl=64 time=24.7 ms 64 bytes from 10.0.0.1: icmp_seq=5 ttl=64 time=26.2 ms 64 bytes from 10.0.0.1: icmp_seq=6 ttl=64 time=59.4 ms 64 bytes from 10.0.0.1: icmp_seq=7 ttl=64 time=29.0 ms 64 bytes from 10.0.0.1: icmp_seq=8 ttl=64 time=26.9 ms 64 bytes from 10.0.0.1: icmp_seq=9 ttl=64 time=72.5 ms 64 bytes from 10.0.0.1: icmp_seq=10 ttl=64 time=55.1 ms 64 bytes from 10.0.0.1: icmp_seq=11 ttl=64 time=49.7 ms 64 bytes from 10.0.0.1: icmp_seq=12 ttl=64 time=92.5 ms 64 bytes from 10.0.0.1: icmp_seq=13 ttl=64 time=45.3 ms 64 bytes from 10.0.0.1: icmp_seq=14 ttl=64 time=41.3 ms 64 bytes from 10.0.0.1: icmp_seq=15 ttl=64 time=37.7 ms 64 bytes from 10.0.0.1: icmp_seq=16 ttl=64 time=36.7 ms 64 bytes from 10.0.0.1: icmp_seq=17 ttl=64 time=35.3 ms
$ ping 10.0.0.1 PING 10.0.0.1 (10.0.0.1) 56(84) bytes of data. 64 bytes from 10.0.0.1: icmp_seq=1 ttl=64 time=26.2 ms 64 bytes from 10.0.0.1: icmp_seq=2 ttl=64 time=23.4 ms 64 bytes from 10.0.0.1: icmp_seq=3 ttl=64 time=28.3 ms 64 bytes from 10.0.0.1: icmp_seq=4 ttl=64 time=73.0 ms 64 bytes from 10.0.0.1: icmp_seq=5 ttl=64 time=65.0 ms 64 bytes from 10.0.0.1: icmp_seq=6 ttl=64 time=62.3 ms 64 bytes from 10.0.0.1: icmp_seq=7 ttl=64 time=112 ms 64 bytes from 10.0.0.1: icmp_seq=8 ttl=64 time=45.6 ms 64 bytes from 10.0.0.1: icmp_seq=9 ttl=64 time=38.3 ms 64 bytes from 10.0.0.1: icmp_seq=10 ttl=64 time=35.6 ms 64 bytes from 10.0.0.1: icmp_seq=11 ttl=64 time=34.9 ms 64 bytes from 10.0.0.1: icmp_seq=12 ttl=64 time=40.1 ms 64 bytes from 10.0.0.1: icmp_seq=13 ttl=64 time=38.3 ms
VTEP状態確認
kotetsu@vtep-vyos01:~$ show interfaces vxlan detail vxlan0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1450 qdisc noqueue master br100 state UNKNOWN group default link/ether fe:61:bc:ca:cd:1d brd ff:ff:ff:ff:ff:ff inet6 fe80::fc61:bcff:feca:cd1d/64 scope link valid_lft forever preferred_lft forever RX: bytes packets errors dropped overrun mcast 117556 1480 0 0 0 0 TX: bytes packets errors dropped carrier collisions 383710 4382 0 0 0 0 vxlan1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1450 qdisc noqueue master br200 state UNKNOWN group default link/ether b2:02:ef:4e:26:d4 brd ff:ff:ff:ff:ff:ff inet6 fe80::b002:efff:fe4e:26d4/64 scope link valid_lft forever preferred_lft forever RX: bytes packets errors dropped overrun mcast 232330 3109 0 0 0 0 TX: bytes packets errors dropped carrier collisions 490658 5270 0 0 0 0
vtep-arista01#show vxlan vtep Remote vteps for Vxlan1: 172.16.2.1 Total number of remote vteps: 1 vtep-arista01#show mac address-table Mac Address Table ------------------------------------------------------------------ Vlan Mac Address Type Ports Moves Last Move ---- ----------- ---- ----- ----- --------- 100 0800.272d.daa2 DYNAMIC Vx1 1 0:14:19 ago 100 0800.27a6.f13d DYNAMIC Et2 1 0:14:22 ago 200 0800.272c.080f DYNAMIC Et3 1 0:11:05 ago 200 0800.27a9.6b58 DYNAMIC Vx1 1 0:10:33 ago Total Mac Addresses for this criterion: 4 Multicast Mac Address Table ------------------------------------------------------------------ Vlan Mac Address Type Ports ---- ----------- ---- ----- Total Mac Addresses for this criterion: 0 vtep-arista01#show vxlan address-table Vxlan Mac Address Table ---------------------------------------------------------------------- Vlan Mac Address Type Prt Vtep Moves Last Move ---- ----------- ---- --- ---- ----- --------- 100 0800.272d.daa2 DYNAMIC Vx1 172.16.2.1 1 0:14:15 ago 200 0800.27a9.6b58 DYNAMIC Vx1 172.16.2.1 1 0:10:28 ago Total Remote Mac Addresses for this criterion: 2 vtep-arista01#show vxlan counters software Rx bytes for encapsulation : 249372 Rx pkts for encapsulation : 2390 Encaped bytes : 249372 Encaped packets : 2390 Tx bytes after encapsulation : 306732 Tx pkts after encapsulation : 2390 Rx dot1Q Tunnel pkts for encapsulation : 0 Rx bytes after decapsulation : 79320 Rx pkts after decapsulation : 733 Decaped bytes : 23664 Decaped packets : 348 ARP bytes : 0 ARP packets : 0 Read error for pkts coming in for encapsulation : 0 Discarded runt pkts ( encap side ) : 0 Discard vlan range ( encap eide ) : 0 Discard vlan map ( encap side ) : 0 Discard mlag peer link ( encap side ) : 0 Discarded pkts due to empty flood list : 0 Encap send error : 0 Encap timeout : 0 Discarded runt pkts ( decap side ) : 1 Discard pkts not for vtep ( decap side ) : 384 Discard bytes not for vtep ( decap side ) : 40980 Discard pkts with invalid vxlan header : 0 Discard vlan map ( decap side ) : 0 Discard VNI range ( decap side ) : 0 Decap timeout : 0 Decap socket error : 0 ARP send error : 0 vtep-arista01# vtep-arista01#show vxlan counters varp arp cache installed: 0 vxlan encapsulated arps: 2 arp reply to vArp mac and vArp vtep: 0 arp reply RX: 0 arp reply head-end-replicated: 0 arp reply TX: 0 arp request decaped and sent: 2 arp cache install err 0 arp request decap and send TX err: 0 unknown cpu port id: 0 packet too short: 0 unexpected ether type: 0 unexpected non IP packet 0 unexpected IP prot 0 unexpected UPD port 0 unexpected inner packet 0 unexpected arp reply 0 invalid IP checksum 0 invalid Vxlan header 0 invalid arp packet 0 unknown vlan to vni mapping 0 unknown source IP 0 no BUM flood list TX err 0 arp reply to Arp agent TX err 0
パケットキャプチャ
特徴的なものをいくつか画面キャプチャで貼っていきます。
↓ node からの BUM トラフィック(ping 実行時最初の ARP)は、設定したマルチキャストアドレスで。
↓ VNI10 側。VTEP 間のユニキャストにカプセリングされているのがよく分かる。また、指定どおり UDP dstport 4789 で動作している。
↓VNI20 側も一緒。
おしまい
雑感
Arista の REST(っぽい) API を ruby や Ansible で突いてみよう (original : 2014/12/14)
この記事は某所で 2014/12/14
に書いたもののコピーです。
そのため 2017/05/13
時点ではやや古い情報も含まれています。(以下一例)
Ansible
のバージョン1.8
系、今となっては古い- 今は
Arista
公式がRuby
用のライブラリを公開している(当時はなかった) - 本記事でとりあげた
Arista
公式のAnsible
モジュールは、今は「Ansible の Core Module に入っている方を使ってね」と言っている
.
概要
もう expect して正規表現でシコシコしないで良いんですか!?やった~!!
本項でやること
Arista の REST API である eAPI を触ります。
http or https で REST 叩けてリクエストやレスポンスの JSON を弄れれば、クライアント実装は何でも良いですが以下を試します。
- arista-eapi (ruby の gem)
- arista.eos (Arista 公式が出している Ansible モジュール)
いずれも「Arista EOS の REST API(eAPI) を操作することに特化」しており、これを使うと Arista の操作が楽々だ~というのを見ます。
両方で「現在の設定情報を取得して、それを基に設定投入」という操作を試します。
vEOS や ruby や ansible 本体のセットアップについては、記載しません。
Arista EOS?
この本をオススメしときますね。
Arista Warrior: A Real-World Guide to Understanding Arista Switches and EOS
- 作者: Gary A. Donahue
- 出版社/メーカー: O'Reilly Media
- 発売日: 2012/10/27
- メディア: ペーパーバック
- この商品を含むブログを見る
eAPI とは?
公式 "Introduction to Managing EOS Devices – Setting up Management" の記載から抜粋します。
Arista EOS provides multiple APIs, of which Extensible API (eAPI) is a RESTFUL programmatic interface based on the JSON structured format via HTTP or HTTPS, to simplify interactions with any Arista EOS.
情報取得や設定投入が出来ます。
リクエスト内に CLI コマンドをそのまま埋め込んで投げると、JSON で構造化されたレスポンスを得られます。
環境情報など
構成図・環境
以下の構成でやります。
Arista(vEOS) 含め全て仮想 OS です。
物理?構成は一般的なデータセンタネットワークのそれで、Arista の Multi-Chassis Link Aggregation (MLAG)を使っています。
本項では MLAG の詳細は説明しません & 設定内容もベストプラクティスではないです。
ruby 環境は nwman というノードで、Ansible 環境は ansible というノードで動かしますが、分けているのは単に元々あった環境の都合です。
ホスト環境
- ホスト:Windows7 + VirtualBox 4.3.18
ruby 環境
- OS:CentOS release 6.5
- ruby:ruby 2.1.2p95 (2014-05-08 revision 45877) [x86_64-linux]
- gem:arista-eapi (0.11.1)
- gem:json (1.8.1)
- gem:rest-client (1.7.2)
Ansible 環境
Arista 環境
- vEOS Aboot-veos:Aboot-veos-2.1.0
- vEOS OS:vEOS-4.14.2F
- vEOS CPU:1core
- vEOS Memory:1024MB
eAPI 操作内容、利用 API
今回は上記構成にて「VLAN 30 と同じトポロジで VLAN 31 を作る」という操作をします。つまり
- 対象機の VLAN 状態を取得して「VLAN 30 が存在するか」・「存在する場合、VLAN 30 をどこの物理 IF に trunk で通しているか」を判断
- 1 で VLAN 30 が存在する場合、VLAN 31 を作る
- 1 で VLAN 30 が存在する場合、VLAN 30 を通している全物理 IF に VLAN 31 を追加で通す
- 2-3 を実施した場合、メモリに設定保存
てな流れです。
同じことを ruby と Ansible 両方で試します。
1 では "show vlan" をリクエストに埋め込んで状態取得します。
レスポンスの例は以下の感じです。(後述の "Exploler" で実行したコピペ)
{ "jsonrpc": "2.0", "result": [ { "sourceDetail": "", "_meta": { "execDuration": 0.04, "execStartTime": 1417437611.14 }, "vlans": { "1": { "status": "active", "name": "default", "interfaces": { "Ethernet2": { "annotation": "port channel configuration", "privatePromoted": false }, "Port-Channel1": { "privatePromoted": false }, "Ethernet1": { "annotation": "port channel configuration", "privatePromoted": false } }, "dynamic": false } } } ], "id": "CapiExplorer-123" }
事前準備
vEOS x4 (spine001/002, leaf001/002)のデプロイ
以下リンクを参考に作っておきます。公式に、各種ハイパーバイザごとの導入手順詳細とかもあります。
vEOS x4 で eAPI 有効化
有効化設定
公式 "Introduction to Managing EOS Devices – Setting up Management" の "1.10 eAPI" 通りで。
本項ではプロトコルに HTTP を使います。(HTTPS で vEOS 自己証明書の対応するのが面倒ってだけの理由です。)
デフォルトは HTTPS で、以下は HTTP で動かす例です。
leaf001#conf t leaf001(config)#management api http-commands leaf001(config-mgmt-api-http-cmds)#no protocol https leaf001(config-mgmt-api-http-cmds)#protocol http leaf001(config-mgmt-api-http-cmds)#no shutdown
http が動いていることを確認します。
leaf002#show management api http-commands Enabled: Yes HTTPS server: shutdown, set to use port 443 HTTP server: running, set to use port 80 VRF: default Hits: 0 Last hit: never Bytes in: 0 Bytes out: 0 Requests: 0 Commands: 0 Duration: 0.000 seconds URLs -------------------------------------- Management1 : http://192.168.101.53:80
ブラウザで eAPI 簡易動作確認
vEOS の Management に疎通可能な端末のブラウザで http[s]://<ip_address_switch>/
にアクセスします。
認証は vEOS に作ってあるアカウント/パスワードで。
"Command Documentation" では参照(show)系 API の仕様が見られます。設定系はなかったです。
"Explorer" ではリクエストのパラメータを少し入力するだけで簡易に試せます。(ブラウザの RestClient アドオン的な)
"Overview" ではエラーコードの説明などが見られます。スタートアップガイド的な。
2014/12/14 現在、eAPI ドキュメントは Web 上やマニュアルとしては整備されていなくて、ここで見られる情報が一番豊富だと思います。
しかし公式の QA (Supported Commands for eAPI? ) を見ると、今後マニュアルが整備されるのかも知れません。
vEOS セットアップ(その他)~実行前 config
詳細は省略しますが、VLAN や物理IF などの設定を構成図のようにセットアップしました。
ruby 版も Ansible 版も、これが実行前 config になります。
- spine001
! Command: show running-config ! device: spine001 (vEOS, EOS-4.14.2F) ! ! boot system flash:/vEOS.swi ! alias ztpprep bash sudo /mnt/flash/ztpprep ! transceiver qsfp default-mode 4x10G ! lldp timer 5 ! hostname spine001 ! spanning-tree mode mstp no spanning-tree vlan 4094 ! no aaa root ! username kotetsu secret 5 $1$H02U1Fnf$JeNAkt5krejSEFwYo7ymu1 ! clock timezone Japan ! vlan 30,4094 ! interface Port-Channel1 description DEV=leaf001 IF=Po1 switchport trunk allowed vlan 30 switchport mode trunk mlag 1 ! interface Port-Channel2 description DEV=leaf002 IF=Po1 mlag 2 ! interface Port-Channel100 description DEV=spine002 IF=Po100 switchport trunk allowed vlan 30,4094 switchport mode trunk ! interface Ethernet1 description DEV=leaf001 IF=Eth1 channel-group 1 mode active ! interface Ethernet2 description DEV=leaf002 IF=Eth1 channel-group 2 mode active ! interface Ethernet3 description DEV=spine002 IF=Eth3 channel-group 100 mode active ! interface Ethernet4 description DEV=spine002 IF=Eth4 channel-group 100 mode active ! interface Management1 ip address 192.168.101.50/24 ! interface Vlan4094 description MC-LAG dedicated PeerLink no autostate ip address 192.0.2.1/30 ! no ip routing ! mlag configuration domain-id DOMAIN_MLAG heartbeat-interval 2500 local-interface Vlan4094 peer-address 192.0.2.2 peer-link Port-Channel100 reload-delay 150 ! management api http-commands no protocol https protocol http no shutdown ! ! end
- spine002
! Command: show running-config ! device: spine002 (vEOS, EOS-4.14.2F) ! ! boot system flash:/vEOS.swi ! transceiver qsfp default-mode 4x10G ! lldp timer 5 ! hostname spine002 ! spanning-tree mode mstp no spanning-tree vlan 4094 ! no aaa root ! username kotetsu secret 5 $1$HDrZK8m8$A13QQaIqjLdrvik2.3cm9. ! clock timezone Japan ! vlan 30,4094 ! interface Port-Channel1 description DEV=leaf001 IF=Po1 switchport trunk allowed vlan 30 switchport mode trunk mlag 1 ! interface Port-Channel2 description DEV=leaf002 IF=Po1 mlag 2 ! interface Port-Channel100 description DEV=spine001 IF=Po100 switchport trunk allowed vlan 30,4094 switchport mode trunk ! interface Ethernet1 description DEV=leaf001 IF=Eth2 channel-group 1 mode active ! interface Ethernet2 description DEV=leaf002 IF=Eth2 channel-group 2 mode active ! interface Ethernet3 description DEV=spine001 IF=Eth3 channel-group 100 mode active ! interface Ethernet4 description DEV=spine001 IF=Eth4 channel-group 100 mode active ! interface Management1 ip address 192.168.101.51/24 ! interface Vlan4094 description MC-LAG dedicated PeerLink no autostate ip address 192.0.2.2/30 ! no ip routing ! mlag configuration domain-id DOMAIN_MLAG heartbeat-interval 2500 local-interface Vlan4094 peer-address 192.0.2.1 peer-link Port-Channel100 reload-delay 150 ! management api http-commands no protocol https protocol http no shutdown ! ! end
- leaf001
! Command: show running-config ! device: leaf001 (vEOS, EOS-4.14.2F) ! ! boot system flash:/vEOS.swi ! alias ztpprep bash sudo /mnt/flash/ztpprep ! transceiver qsfp default-mode 4x10G ! lldp timer 5 ! hostname leaf001 ! spanning-tree mode mstp ! no aaa root ! username kotetsu secret 5 $1$HDrZK8m8$A13QQaIqjLdrvik2.3cm9. ! clock timezone Japan ! vlan 30 ! interface Port-Channel1 description DEV=spine001_002 IF=mlag1 switchport trunk allowed vlan 30 switchport mode trunk ! interface Ethernet1 description DEV=spine001 IF=Eth1 channel-group 1 mode active ! interface Ethernet2 description DEV=spine002 IF=Eth1 channel-group 1 mode active ! interface Ethernet3 ! interface Ethernet4 switchport access vlan 30 switchport trunk allowed vlan 30 switchport mode trunk ! interface Management1 ip address 192.168.101.52/24 ! no ip routing ! management api http-commands no protocol https protocol http no shutdown ! ! end
- leaf002
! Command: show running-config ! device: leaf002 (vEOS, EOS-4.14.2F) ! ! boot system flash:/vEOS.swi ! alias ztpprep bash sudo /mnt/flash/ztpprep ! transceiver qsfp default-mode 4x10G ! lldp timer 5 ! hostname leaf002 ! spanning-tree mode mstp ! no aaa root ! username kotetsu secret 5 $1$HDrZK8m8$A13QQaIqjLdrvik2.3cm9. ! clock timezone Japan ! interface Port-Channel1 description DEV=spine001_002 IF=mlag2 ! interface Ethernet1 description DEV=spine001 IF=Eth2 channel-group 1 mode active ! interface Ethernet2 description DEV=spine002 IF=Eth2 channel-group 1 mode active ! interface Management1 ip address 192.168.101.53/24 ! no ip routing ! management api http-commands no protocol https protocol http no shutdown ! ! end
ruby (arista-eapi gem) 版
どんな gem?
Arista 公式が出しているものではないです。
特徴は以下の感じです。
- REST 周りの処理、リクエスト生成、JSON レスポンスのパースをしてくれる (ので、ユーザがやりたいことだけコーディングできる)
- リクエストのコマンド群やレスポンスは Array で表現される
- レスポンスの JSON は symbolize された Hash で取得できる
- 任意のコマンドを実行できる run メソッドと、コマンドを書かずに簡易に情報取得可能なメソッド(2014/12 現在は version だけ)がある
run メソッドさえあれば困ることはないので、本項ではそれでやります。
インストール
普通に gem install
で入れました。
# gem install arista-eapi # gem list *** LOCAL GEMS *** arista-eapi (0.11.1) json (1.8.1, 1.7.7) mime-types (2.4.3) netrc (0.8.0) rest-client (1.7.2)
スクリプト
- sample_eapi.rb
#!/usr/bin/env ruby require 'arista/eapi' require 'stringio' require 'io/console' device_list = Array.new() File.open(ARGV[0]) do |f| f.each_line do |line| device_list << line end end print ("username :") username = $stdin.gets.to_s.chomp! print ("password :") password = STDIN.noecho(&:gets).to_s.chomp! device_list.flatten.each do |target| target.chomp! puts "\n--------------------- Start #{target} ---------------------\n" array_interfaces = Array.new() device = Arista::EAPI::Switch.new(target, username, password, protocol = 'http') results = device.run(["show vlan"]) unless (results.nil? || results[0].nil? || results[0][:vlans].nil? || results[0][:vlans][:"30"].nil?) then results[0][:vlans][:"30"][:interfaces].each_key do |interface_name| array_interfaces << interface_name.to_s end # create vlan & set interface switchport unless array_interfaces.nil? then results << device.run(["enable", "configure", "vlan 31"]) puts "Created vlan 31..." array_interfaces.each do |interface| results << device.run(["enable", "configure", "interface #{interface}", "switchport trunk allowed vlan add 31"]) puts "Added trunk vlan 31 to #{interface}" end results << device.run(["enable", "write memory"]) puts "wrote memory!!" end end puts "\n--------------------- End #{target} ---------------------\n" end
device_list.list
はこんな感じで。
192.168.101.50 192.168.101.51 192.168.101.52 192.168.101.53
内容補足
require 'arista/eapi'
で arista-eapi をインポート- 実行対象は device_list ファイルに外出し、スクリプト実行時に引数で渡す (処理はシーケンシャル)
- eAPI 認証用の username と password は標準入力で interactive に
- 結果は標準出力のみ
- 設定投入時など、エラーハンドリングは割と適当 (results という Array に格納しているだけ)
実行~状態確認
$ ruby eapi_sample.rb device_list_arista.list username :kotetsu password : --------------------- Start 192.168.101.50 --------------------- Created vlan 31... Added trunk vlan 31 to port-channel1 Added trunk vlan 31 to port-channel100 wrote memory!! --------------------- End 192.168.101.50 --------------------- --------------------- Start 192.168.101.51 --------------------- Created vlan 31... Added trunk vlan 31 to port-channel1 Added trunk vlan 31 to port-channel100 wrote memory!! --------------------- End 192.168.101.51 --------------------- --------------------- Start 192.168.101.52 --------------------- Created vlan 31... Added trunk vlan 31 to port-channel1 Added trunk vlan 31 to ethernet4 wrote memory!! --------------------- End 192.168.101.52 --------------------- --------------------- Start 192.168.101.53 --------------------- --------------------- End 192.168.101.53 ---------------------
vEOS で VLAN 状態や log から、想定通り設定されていることを確認します。
spine001#show vlan VLAN Name Status Ports ----- -------------------------------- --------- ------------------------------- 1 default active Po2 30 VLAN0030 active Po1, Po100 31 VLAN0031 active Po1, Po100 4094 VLAN4094 active Cpu, Po100 pine002#show vlan VLAN Name Status Ports ----- -------------------------------- --------- ------------------------------- 1 default active Po2 30 VLAN0030 active Po1, Po100 31 VLAN0031 active Po1, Po100 4094 VLAN4094 active Cpu, Po100 leaf001#show vlan VLAN Name Status Ports ----- -------------------------------- --------- ------------------------------- 1 default active Et3 30 VLAN0030 active Et4, Po1 31 VLAN0031 active Et4, Po1 leaf002#show vlan VLAN Name Status Ports ----- -------------------------------- --------- ------------------------------- 1 default active
spine001#show logging last 4 minutes Dec 9 00:00:37 spine001 Capi: %SYS-5-CONFIG_E: Enter configuration mode from console by kotetsu on command-api (192.168.101.20) Dec 9 00:00:38 spine001 Capi: %SYS-5-CONFIG_I: Configured from console by kotetsu on command-api (192.168.101.20) Dec 9 00:00:38 spine001 Capi: %SYS-5-CONFIG_E: Enter configuration mode from console by kotetsu on command-api (192.168.101.20) Dec 9 00:00:38 spine001 Capi: %SYS-5-CONFIG_I: Configured from console by kotetsu on command-api (192.168.101.20) Dec 9 00:00:38 spine001 Capi: %SYS-5-CONFIG_E: Enter configuration mode from console by kotetsu on command-api (192.168.101.20) Dec 9 00:00:38 spine001 Capi: %SYS-5-CONFIG_I: Configured from console by kotetsu on command-api (192.168.101.20) Dec 9 00:00:39 spine001 Capi: %SYS-5-CONFIG_STARTUP: Startup config saved from system:/running-config by kotetsu on command-api (192.168.101.20).
Ansible (arista.eos Role) 版
Ansible 初心者なので、Ansibler の皆様からの突っ込み大歓迎です。
どんな Role?
Arista が公式で出している EOS(vEOS でも良い)用の Ansible role です。
github の README を見ると手っ取り早いですが、特徴は以下。
eos_command
という任意のコマンドを実行できるモジュールと、eos_<機能名>
という抽象化されてコマンドを直接書く必要ないモジュール(限定的ではある)が含まれている- Ansible リモート実行仕組み(Ansible quickstart のスライド16が分かり易い)を前提としていて、EOS 側で python スクリプトが実行されるので eAPI のクライアントも EOS 側になる(127.0.0.1 にリクエスト)
本項では汎用性が高い eos_command
のみを使います。
セットアップ
vEOS に ssh 公開鍵をバラまく
公式 README に従います。
Ansible では interactive にパスワードを入力させる仕組みもあるようなので、それを使う場合には本手順は不要だと思います。
実行対象全台に実行します。
今回は手動で実行しましたが、Ansible で鍵をバラまく方法もあったり(未試行)、Arista の場合 ZTP でやってしまう手もあるかと。
まずは、vEOS で SCP 転送用のユーザ(ansible)とディレクトリを作ります。
spine001>en spine001#bash Arista Networks EOS shell [kotetsu@spine001 ~]$ [kotetsu@spine001 ~]$ sudo useradd -d /persist/local/ansible -G eosadmin ansible [kotetsu@spine001 ~]$ echo password | sudo passwd --stdin ansible Changing password for user ansible. passwd: all authentication tokens updated successfully. [kotetsu@spine001 ~]$ sudo mkdir /persist/local/ansible/.ssh [kotetsu@spine001 ~]$ sudo chmod 700 /persist/local/ansible/.ssh [kotetsu@spine001 ~]$ sudo chown ansible:eosadmin /persist/local/ansible/.ssh [kotetsu@spine001 ~]$ sudo ls -lah /persist/local/ansible total 16K drwx------ 3 ansible ansible 160 Dec 13 00:24 . drwxrwxrwx 3 root root 60 Dec 13 00:24 .. -rw-r--r-- 1 ansible ansible 17 Sep 24 02:58 .bash_logout -rw-r--r-- 1 ansible ansible 17 Sep 24 02:58 .bash_logout.Eos -rw-r--r-- 1 ansible ansible 176 Jun 22 2011 .bash_profile -rw-r--r-- 1 ansible ansible 124 Jun 22 2011 .bashrc -rw-r--r-- 1 ansible ansible 0 Sep 24 02:58 .dircolors drwx------ 2 ansible eosadmin 40 Dec 13 00:24 .ssh [kotetsu@spine001 ~]$ $ logout spine001# spine001# spine001#exit
ansible 側から、ansible 実行時に使う公開鍵を SCP で vEOS 全台に転送します。
再起動時に ansible ユーザが作られる(& SCP 転送で使った一時的なパスワードはなくなる)ように、各 vEOS の /mnt/flash/rc.eos
を作成します。
$ scp /home/kotetsu/.ssh/id_rsa.pub ansible@192.168.101.50:.ssh/authorized_keys Password: $ ssh ansible@192.168.101.50 Arista Networks EOS shell [ansible@spine001 ~]$ vi /mnt/flash/rc.eos #!/bin/sh useradd -d /persist/local/ansible -G eosadmin ansible [ansible@spine001 ~]$ sudo reboot [ansible@spine001 ~]$ Broadcast message from ansible@spine001 (/dev/pts/3) at 0:28 ... The system is going down for reboot NOW! $ ssh ansible@192.168.101.50 Arista Networks EOS shell [ansible@spine001 ~]$
ansible に Role インストール
Ansible Galaxy に登録されているので、そこから取ってこれます。
$ sudo ansible-galaxy install arista.eos - downloading role 'eos', owned by arista - downloading role from https://github.com/arista-eosplus/ansible-eos/archive/v0.1.2.tar.gz - extracting arista.eos to /etc/ansible/roles/arista.eos - arista.eos was installed successfully
/etc/ansible/roles/arista.eos/
配下に落ちてきています。
$ ls -alh /etc/ansible/roles/arista.eos/ total 60K drwxr-xr-x 9 root root 4.0K Dec 11 00:43 . drwxr-xr-x 3 root root 4.0K Dec 11 00:43 .. -rw-rw-r-- 1 root root 687 Aug 28 10:18 CHANGELOG.md drwxr-xr-x 2 root root 4.0K Dec 11 00:43 defaults drwxr-xr-x 2 root root 4.0K Dec 11 00:43 files -rw-rw-r-- 1 root root 544 Aug 28 10:18 .gitignore drwxr-xr-x 2 root root 4.0K Dec 11 00:43 handlers drwxr-xr-x 2 root root 4.0K Dec 11 00:43 library -rw-rw-r-- 1 root root 1.5K Aug 28 10:18 LICENSE drwxr-xr-x 2 root root 4.0K Dec 11 00:43 meta -rw-rw-r-- 1 root root 11K Aug 28 10:18 README.md drwxr-xr-x 2 root root 4.0K Dec 11 00:43 tasks drwxr-xr-x 2 root root 4.0K Dec 11 00:43 vars
ansible 用 hosts ファイル作成
ベストプラクティス はガン無視して、適当な work ディレクトリに作りました。
なんか Ansible オレオレベストプラクティス とかもあるし、使い方によってディレクトリ構成のベストプラクティスも変りそうですね?
[spine] 192.168.101.[50:51] [leaf] 192.168.101.[52:53] [arista_all] spine leaf
ping pong
ansible から sftp で vEOS に疎通確認します。
$ ansible -i hosts 192.168.101.50 -u ansible -m ping 192.168.101.50 | success >> { "changed": false, "ping": "pong" }
Playbook
hosts ファイルと同じディレクトリに playbook_eapi_vlan.yml
として突っ込みました。
- name: eos nodes hosts: arista_all gather_facts: yes sudo: true vars: eapi_username: kotetsu eapi_password: kotetsu eapi_protocol: http roles: - role: arista.eos tasks: - name: get vlans action: eos_command args: { commands: [ "show vlan" ], eapi_username: "{{ eapi_username }}", eapi_password: "{{ eapi_password }}", eapi_protocol: "{{ eapi_protocol }}" } register: vlans - name: vlan30.exist? set_fact: interfaces: "{{ vlans.output[0].response.vlans[\"30\"].interfaces }}" ignore_errors: True - name: create vlan 31 action: eos_command args: { commands: [ "enable", "configure", "vlan 31", ], eapi_username: "{{ eapi_username }}", eapi_password: "{{ eapi_password }}", eapi_protocol: "{{ eapi_protocol }}" } - name: allowed vlan add 31 to interfaces action: eos_command args: { commands: [ "enable", "configure", "interface {{ item.key }}", "switchport trunk allowed vlan add 31" ], eapi_username: "{{ eapi_username }}", eapi_password: "{{ eapi_password }}", eapi_protocol: "{{ eapi_protocol }}" } with_dict: interfaces register: showint - name: save config action: eos_command args: { commands: [ "enable", "write memory" ], eapi_username: "{{ eapi_username }}", eapi_password: "{{ eapi_password }}", eapi_protocol: "{{ eapi_protocol }}" }
内容補足
- eAPI 認証用の username, password は何と
vars:
にベタ書き!! roles:
で今回セットアップしたarista.eos
を指定hosts:
で実行対象をhosts
に書いたarista_all
つまり全台指定vlan30.exist?
という task で leaf002 は Failure になり、それ以降の設定系 task は実行されない。途中で止まらないように、当該 task でignore_errors: True
にしている。(when
とか使って頑張ろうとしたがモゴモゴ)
Playbook 実行~状態確認
$ ansible-playbook playbook_eapi_vlan.yml -f 10 -u ansible -i hosts PLAY [eos nodes] ************************************************************** GATHERING FACTS *************************************************************** ok: [192.168.101.50] ok: [192.168.101.53] ok: [192.168.101.51] ok: [192.168.101.52] TASK: [arista.eos | check if running on eos node] ***************************** ok: [192.168.101.53] ok: [192.168.101.52] ok: [192.168.101.51] ok: [192.168.101.50] TASK: [arista.eos | collect eos facts] **************************************** ok: [192.168.101.52] ok: [192.168.101.51] ok: [192.168.101.53] ok: [192.168.101.50] TASK: [arista.eos | include eos variables] ************************************ ok: [192.168.101.50] ok: [192.168.101.51] ok: [192.168.101.53] ok: [192.168.101.52] TASK: [arista.eos | check for working directory] ****************************** ok: [192.168.101.52] ok: [192.168.101.50] ok: [192.168.101.51] ok: [192.168.101.53] TASK: [arista.eos | create source] ******************************************** skipping: [192.168.101.50] skipping: [192.168.101.51] skipping: [192.168.101.52] skipping: [192.168.101.53] TASK: [arista.eos | check if pip is installed] ******************************** ok: [192.168.101.50] ok: [192.168.101.53] ok: [192.168.101.52] ok: [192.168.101.51] TASK: [arista.eos | copy pip extension to node] ******************************* skipping: [192.168.101.50] skipping: [192.168.101.51] skipping: [192.168.101.53] skipping: [192.168.101.52] TASK: [arista.eos | create tmp config file to load pip] *********************** skipping: [192.168.101.50] skipping: [192.168.101.51] skipping: [192.168.101.52] skipping: [192.168.101.53] TASK: [arista.eos | load pip eos extension] *********************************** skipping: [192.168.101.51] skipping: [192.168.101.50] skipping: [192.168.101.53] skipping: [192.168.101.52] TASK: [arista.eos | copy required libraries to node] ************************** ok: [192.168.101.50] => (item=eapilib-0.1.0.tar.gz) ok: [192.168.101.51] => (item=eapilib-0.1.0.tar.gz) ok: [192.168.101.53] => (item=eapilib-0.1.0.tar.gz) ok: [192.168.101.52] => (item=eapilib-0.1.0.tar.gz) TASK: [arista.eos | install required libraries] ******************************* ok: [192.168.101.53] => (item=eapilib-0.1.0.tar.gz) ok: [192.168.101.52] => (item=eapilib-0.1.0.tar.gz) ok: [192.168.101.51] => (item=eapilib-0.1.0.tar.gz) ok: [192.168.101.50] => (item=eapilib-0.1.0.tar.gz) TASK: [arista.eos | install jsonrpclib] *************************************** skipping: [192.168.101.50] skipping: [192.168.101.53] skipping: [192.168.101.51] skipping: [192.168.101.52] TASK: [arista.eos | install required libraries and dependencies] ************** skipping: [192.168.101.50] => (item=eapilib-0.1.0.tar.gz) skipping: [192.168.101.52] => (item=eapilib-0.1.0.tar.gz) skipping: [192.168.101.51] => (item=eapilib-0.1.0.tar.gz) skipping: [192.168.101.53] => (item=eapilib-0.1.0.tar.gz) TASK: [get vlans] ************************************************************* ok: [192.168.101.52] ok: [192.168.101.50] ok: [192.168.101.51] ok: [192.168.101.53] TASK: [vlan30.exist?] ********************************************************* ok: [192.168.101.50] ok: [192.168.101.52] ok: [192.168.101.51] fatal: [192.168.101.53] => One or more undefined variables: 'dict object' has no attribute '30' TASK: [create vlan 31] ******************************************************** ok: [192.168.101.52] ok: [192.168.101.50] ok: [192.168.101.51] TASK: [allowed vlan add 31 to interfaces] ************************************* ok: [192.168.101.50] => (item={'key': u'Port-Channel1', 'value': {u'privatePromoted': False}}) ok: [192.168.101.52] => (item={'key': u'Port-Channel1', 'value': {u'privatePromoted': False}}) ok: [192.168.101.51] => (item={'key': u'Port-Channel1', 'value': {u'privatePromoted': False}}) ok: [192.168.101.50] => (item={'key': u'Port-Channel100', 'value': {u'privatePromoted': False}}) ok: [192.168.101.52] => (item={'key': u'Ethernet4', 'value': {u'privatePromoted': False}}) ok: [192.168.101.51] => (item={'key': u'Port-Channel100', 'value': {u'privatePromoted': False}}) TASK: [save config] *********************************************************** ok: [192.168.101.52] ok: [192.168.101.50] ok: [192.168.101.51] PLAY RECAP ******************************************************************** to retry, use: --limit @/home/kotetsu/playbook_eapi_vlan.retry 192.168.101.50 : ok=14 changed=0 unreachable=0 failed=0 192.168.101.51 : ok=14 changed=0 unreachable=0 failed=0 192.168.101.52 : ok=14 changed=0 unreachable=0 failed=0 192.168.101.53 : ok=10 changed=0 unreachable=1 failed=0
上記には残っていませんが、初めて ansible で vEOS に playbook を流した時には library のインストールとかの task も動いて changed
もカウントされます。
vEOS 実機を見ると以下の感じです。ログの設定次第で、もう少し細かい logging 情報が見られるかもです。
leaf001#show vlan VLAN Name Status Ports ----- -------------------------------- --------- ------------------------------- 1 default active Et3 30 VLAN0030 active Et4, Po1 31 VLAN0031 active Et4, Po1 leaf001#show logging last 5 minutes Dec 14 00:44:03 leaf001 Capi: %SYS-5-CONFIG_E: Enter configuration mode from console by kotetsu on command-api (127.0.0.1) Dec 14 00:44:03 leaf001 Capi: %SYS-5-CONFIG_I: Configured from console by kotetsu on command-api (127.0.0.1) Dec 14 00:44:04 leaf001 Capi: %SYS-5-CONFIG_E: Enter configuration mode from console by kotetsu on command-api (127.0.0.1) Dec 14 00:44:04 leaf001 Capi: %SYS-5-CONFIG_I: Configured from console by kotetsu on command-api (127.0.0.1) Dec 14 00:44:05 leaf001 Capi: %SYS-5-CONFIG_E: Enter configuration mode from console by kotetsu on command-api (127.0.0.1) Dec 14 00:44:05 leaf001 Capi: %SYS-5-CONFIG_I: Configured from console by kotetsu on command-api (127.0.0.1) Dec 14 00:44:06 leaf001 Capi: %SYS-5-CONFIG_STARTUP: Startup config saved from system:/running-config by kotetsu on command-api (127.0.0.1).
おしまい
REST と netconf のメーカ実装動向(2014/12/14 時点)
最近はようやく構造化された情報取得が出来るアレコレを実装した NW 機器が増えてきて、利用者としては嬉しいことです。
自分が抑えている範囲では、以下の感じです。(SNMP や OpenFlow は除外)
- Juniper JUNOS:netconf と最近は一部ハイエンド機器で REST
- Brocade NOS:netconf と最近は REST
- Cisco NX-OS:netconf
- Arista EOS:REST
- F5 BIG-IP:SOAP(iControl) と最近は REST
- 日立電線 Apresia Aeos:最近は netconf (ただし、parse しにくい CLI 出力がそのまま埋め込まれているレスポンスなので、正規表現で頑張れ)
- Vyos:REST 実装予定らしい
- 故 Vyatta Core:有償版では REST 対応していたらしい
何かしら統一されるとベターですけどねー。
それと、今回紹介した 2 つはいずれも ShowNet2014 活動レポート (pdf) のスライド 62 で言うところの py-junos-eznc と同じ位置づけ(特定メーカのNetwork OS に特化して便利な機能を提供するライブラリ)ですね。
雑感
- リクエストに CLI コマンドそのまま埋め込む実装は、敬遠されそうな一方で「API 未実装だからこの機能は使えない…自分で追加実装しないと」っていう面倒ごとは起き難くて(CLI で出来ることは大抵出来る)、悪くないと思います。
- レスポンスが構造化されていると、走査が楽で良いですねー。ただ、深い階層のデータをスマートに弄るのはムズいので修行しましょう。
- 構造化されたレスポンスで…ってなると、netconf とかも良いですね。snmp はちょっと…。ただ、XML より JSON の方が人間にとっては可読性も高いし、扱い易いかも。
- 自動化系ツールでいうと、最近は chef や puppet に対応する NW 機器もポロポロ(Juniper QFX とか Arista とか)ありますね。ただ、エージェント必須型のやつは昔ながらの NW 機器で使えないし、事前準備が大変すぎて、個人的にはちょっと…。Ansible も今回とりあげた範囲では「Python 2.6 以上必須」になる動きですが、やり方次第ではそれも不要になるので許容範囲です。
- ruby の方はスクリプトでちょちょいと繰り返しや条件指定出来て良いですね。Ansible(& jinja2) はそこの表現が初心者には敷居が高かったです。
- とはいえ、システム全体を統合管理することを考えると、Ansible の Role,Module 型の作りは良いと思います。最近は何でもプラグインで追加実装できる、ってのが当然のようになってきてますよね。
- これが俺の SDN だ (きっぱり