kakkotetsu

Juniper vSRX(15.1X) を VirtualBox で動かす (original : 2015/12/11)

この記事は某所で 2015/12/11 に書いたもののコピーです。
そのため 2017/05/13 時点ではやや古い情報も含まれています。

  • Juniper さんの vSRX ダウンロード規約が変わっていそう (詳細は未確認)

.

概要

本項でやること

  • KVMVMware ESX 向けの 60 日間 trial 版が公開されている Juniper vSRX を VirtualBox に入れる
  • 公式にはサポートされない手順なので、自己責任で
  • JUNOS の基本的な操作は省略(ある程度知っている人向け)

環境情報

vSRX?

手順

vSRX イメージファイル取得

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 ファイルを指定

f:id:kakkotetsu:20170513145149j:plain f:id:kakkotetsu:20170513145201j:plain

  • 以降の画面キャプチャはインポート後の設定からとってきたもの

f:id:kakkotetsu:20170513145216j:plain

f:id:kakkotetsu:20170513145222j:plain

f:id:kakkotetsu:20170513145227j:plain

f:id:kakkotetsu:20170513145235j:plain

f:id:kakkotetsu:20170513145240j:plain

f:id:kakkotetsu:20170513145245j:plain

  • どうやらアダプタータイプ は一回起動したあとは勝手に準仮想化ネットワーク(virtio-net)にされるようだ
  • アダプター 1が JUNOS 側から見ると fxp0 (管理用ポート)になる

f:id:kakkotetsu:20170513145259j:plain

f:id:kakkotetsu:20170513145303j:plain

コンソール画面から初期設定

  • 起動する
  • 無事に起動できたら、コンソールログインして以下を設定する
# 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 各種パッケージインストール

  • 必要なパッケージをインストール

  • OS パッケージで入れる例

$ sudo apt-get install python-daemon python-bottle python-netaddr python-pip

bagpipe-bgp インストール

$ 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 インストール

$ 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
$ 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 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 の読んでおきたいコードをメインに、ディレクトリ構造を追いました。本項単体では何も得られない僕向けの内容です。マニュアルで得られない情報をコードやコメントから読み取るのって、楽しいんですよね(死んだ魚の目)。

以下のようなことをやるための前戯の意味もあります。

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

Arista Warrior: A Real-World Guide to Understanding Arista Switches and EOS

環境

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_factsno にすること
  • コマンド実行 module は raw を使うこと (shellcommand ではない)
  • sshcommand で 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

雑記

  • ssh で command exec できない機器もそれなりにある筈(手元では Yamaha RTX1200 が該当)…その場合には本方式は使えないので、自前で role を作るとか、Ansible 以外の手法(e.x. 必殺の expect)を使うとかになる筈
  • 例として Junos 使っていますが、それなら netconf を使えるので(2015/02 現在、公式が出している role は貧弱ですが)本項のようなやり方はあまりしない筈
  • 本項のやり方は、あくまで exec しているだけなので、設定投入とかは tftp サーバからファイルを copy して…的な手法になりそう

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

Arista Warrior: A Real-World Guide to Understanding Arista Switches and EOS

環境情報など

構成図/環境

以下の構成でやります。全て箱庭の仮想環境です。
赤いテナントと青いテナントを Isolation します、的な。

f:id:kakkotetsu:20170511220335j:plain

ルータは multicast routing 出来れば、何でも良いです(VyOS 1.1.1 では不可だけど実装予定には入っているみたい)。 ノードは何でも良いです。

ホスト環境

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'

commitsave して設定確認しておきます。

設定確認

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)は、設定したマルチキャストアドレスで。

f:id:kakkotetsu:20170511220409j:plain

↓ VNI10 側。VTEP 間のユニキャストにカプセリングされているのがよく分かる。また、指定どおり UDP dstport 4789 で動作している。

f:id:kakkotetsu:20170511220421j:plain

f:id:kakkotetsu:20170511220432j:plain

↓VNI20 側も一緒。

f:id:kakkotetsu:20170511220443j:plain

おしまい

雑感

  • このように利用する UDP dstport が異なるような VTEP 間でも、それさえ揃えてしまえば相互接続もチョロいものです。
  • まあ、普通は設定一発で UDP dstport を変更できるやつ(今回のケースでいうと Arista 側)で変更すると思います。今回 VyOS でやったのはただの興味本位です。
  • VyOS を VTEP として使うユースケースがまだ見えてきません。ハイパーバイザ1台に1インスタンスバラまくとか?
  • マルチキャストルーティングを勉強しよう。

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

Arista Warrior: A Real-World Guide to Understanding Arista Switches and EOS

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 の詳細は説明しません & 設定内容もベストプラクティスではないです。

f:id:kakkotetsu:20170513210542j:plain

ruby 環境は nwman というノードで、Ansible 環境は ansible というノードで動かしますが、分けているのは単に元々あった環境の都合です。

ホスト環境

ruby 環境

  • OS:CentOS release 6.5
  • rubyruby 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 環境

  • OS:Ubuntu-14.04.01-server-amd64
  • ansible:1.8.2
  • ansible-eos:v0.1.2

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 を作る」という操作をします。つまり

  1. 対象機の VLAN 状態を取得して「VLAN 30 が存在するか」・「存在する場合、VLAN 30 をどこの物理 IF に trunk で通しているか」を判断
  2. 1 で VLAN 30 が存在する場合、VLAN 31 を作る
  3. 1 で VLAN 30 が存在する場合、VLAN 30 を通している全物理 IF に VLAN 31 を追加で通す
  4. 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 の仕様が見られます。設定系はなかったです。

f:id:kakkotetsu:20170513212924j:plain

"Explorer" ではリクエストのパラメータを少し入力するだけで簡易に試せます。(ブラウザの RestClient アドオン的な)

f:id:kakkotetsu:20170513212956j:plain

"Overview" ではエラーコードの説明などが見られます。スタートアップガイド的な。

f:id:kakkotetsu:20170513213009j:plain

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 だ (きっぱり