Created
April 6, 2014 10:52
-
-
Save kongou-ae/10004441 to your computer and use it in GitHub Desktop.
show_ip_route.py
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#/usr/bin/env python | |
# -*- coding: utf-8 -*- | |
from onep.element import * | |
from onep.interfaces import * | |
from onep.routing import * | |
def getRouteList(network_element): | |
# 対象機器のルーティングオブジェクトを取得する | |
route = RoutingClass.Routing.get_instance(network_element) | |
# ルーティングオブジェクトからRIBを取得する | |
rib = route.rib | |
# get_route_listの引数を定義していく | |
# 範囲はオプションなし=IPv4のみ | |
scope = L3UnicastScope() | |
# フィルターはなし | |
rib_filter = L3UnicastRIBFilter() | |
# 引数のL3UnicastRouteRangeの引数を定義する。 | |
# 範囲は0.0.0.0/0からスタートする | |
start_prefix = NetworkPrefix('0.0.0.0', 0) | |
# 範囲のタイプはよりイコールを含む | |
route_type = RouteRange.RangeType.EQUAL_OR_LARGER | |
# 定義した引数を利用して、RIBから取得する範囲を定義する | |
rib_range = L3UnicastRouteRange(start_prefix, route_type, 0) | |
# 定義した引数を利用してRIBからルーティングを取得する | |
routeList = rib.get_route_list(scope, rib_filter, rib_range) | |
# 取得したルーティングを戻す。 | |
return routeList | |
def showIpRoute(routeList): | |
# owner_typeの戻り値が数字なので、ルーティングのタイプと紐づけるEnumを作る | |
type_enum = ('NONE', 'APP', 'CONNECTED', 'STATIC', 'BGP', 'MOBILE', 'RIP','OSPF', 'ISIS', 'EIGRP', 'IGRP2', 'OSPFV3', 'ODR', 'HSRP', 'NHRP', 'LISP','NEMO', 'ND', 'RPL', 'LOCAL', 'MAX') | |
# 出力の1行目 | |
print(" {:20} {:10} {:20} {:20} ".format( | |
'Prefix','Category','Nexthop_Address','Outgoing_Interface')) | |
# 出力の2行目 | |
print(" {:20} {:10} {:20} {:20} ".format( | |
'-------------------','---------', | |
'-------------------','-------------------')) | |
# ルーティングを一つずつ処理する | |
for route in routeList: | |
# ルーティングからNexthopのアドレスを取得する | |
next_address = list(route.next_hop_list)[0].address | |
# ルーティングからNexthopのインターフェースを取得する。 | |
next_interface = list(route.next_hop_list)[0].network_interface.name | |
# ルーティング情報を出力する | |
print(" {:20} {:10} {:20} {:20} ".format( | |
route.prefix.address+'/'+str(route.prefix.prefix_length), | |
type_enum[route.owner_type], | |
next_address, | |
next_interface | |
)) | |
# メイン処理 | |
if __name__ == '__main__': | |
#対象機器をNetworkElementにする | |
network_element = NetworkElement('10.10.10.110','testapp') | |
# 対象機器用のSessionConfigを定義する | |
session_config = SessionConfig(SessionConfig.SessionTransportMode.TLS) | |
session_config.ca_certs = '/home/cisco/ca.pem' | |
try: | |
# 作成したNetworkElementとsession_configを利用して、対象機器に接続する | |
session_handle = network_element.connect('username','password',session_config) | |
# ルーティングリストを取得する | |
routeList = getRouteList(network_element) | |
# 取得したリストを整形して出力する | |
showIpRoute(routeList) | |
# 対象機器から切断する | |
network_element.disconnect() | |
# エラー処理(エラー処理内でもdisconnectしないと、onepのコネクションが切れない) | |
except Exception as e: | |
print( 'type:' + str(type(e))) | |
print( 'args:' + str(e.args)) | |
print( 'message:' + e.message) | |
network_element.disconnect() |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment