Skip to content

Commit

Permalink
Merge branch 'develop' into xr-get_route_to
Browse files Browse the repository at this point in the history
  • Loading branch information
mirceaulinic authored Aug 19, 2020
2 parents d16cc98 + 14749bd commit 4b952dc
Show file tree
Hide file tree
Showing 19 changed files with 268 additions and 112 deletions.
4 changes: 2 additions & 2 deletions napalm/eos/pyeapi_syntax_wrapper.py
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@ def update_cli_version(self, version):
"""
self.cli_version = version

def run_commands(self, commands, **kwargs):
def run_commands(self, commands, *args, **kwargs):
"""
Run commands wrapper
:param commands: list of commands
Expand All @@ -39,4 +39,4 @@ def run_commands(self, commands, **kwargs):
else:
commands = [cli_convert(cmd, self.cli_version) for cmd in commands]

return super(Node, self).run_commands(commands, **kwargs)
return super(Node, self).run_commands(commands, *args, **kwargs)
33 changes: 26 additions & 7 deletions napalm/ios/ios.py
Original file line number Diff line number Diff line change
Expand Up @@ -88,6 +88,7 @@
RE_BGP_REMOTE_AS = re.compile(r"remote AS (" + ASN_REGEX + r")")
RE_BGP_AS_PATH = re.compile(r"^[ ]{2}([\d\(]([\d\) ]+)|Local)")

RE_RP_ROUTE = re.compile(r"Routing entry for (" + IP_ADDR_REGEX + r"\/\d+)")
RE_RP_FROM = re.compile(r"Known via \"([a-z]+)[ \"]")
RE_RP_VIA = re.compile(r"via (\S+)")
RE_RP_METRIC = re.compile(r"[ ]+Route metric is (\d+)")
Expand Down Expand Up @@ -2773,7 +2774,7 @@ def _get_bgp_route_attr(self, destination, vrf, next_hop, ip_version=4):

search_re_dict = {
"aspath": {
"re": r"[^|\\n][ ]{2}([\d\(\)]([\d\(\) ])*)",
"re": r"[^|\\n][ ]{2}([\d\(\)]([\d\(\) ])*|Local)",
"group": 1,
"default": "",
},
Expand Down Expand Up @@ -2947,8 +2948,11 @@ def get_route_to(self, destination="", protocol="", longer=False):
vrfs.append("default") # global VRF
ipnet_dest = IPNetwork(destination)
prefix = str(ipnet_dest.network)
netmask = str(ipnet_dest.netmask)
routes = {destination: []}
netmask = ""
routes = {}
if "/" in destination:
netmask = str(ipnet_dest.netmask)
routes = {destination: []}
commands = []
for _vrf in vrfs:
if _vrf == "default":
Expand All @@ -2969,6 +2973,14 @@ def get_route_to(self, destination="", protocol="", longer=False):
for (outitem, _vrf) in zip(output, vrfs): # for all VRFs
route_proto_regex = RE_RP_FROM.search(outitem)
if route_proto_regex:
route_match = destination
if netmask == "":
# Get the matching route for a non-exact lookup
route_match_regex = RE_RP_ROUTE.search(outitem)
if route_match_regex:
route_match = route_match_regex.group(1)
if route_match not in routes:
routes[route_match] = []
# routing protocol name (bgp, ospf, ...)
route_proto = route_proto_regex.group(1)
rdb = outitem.split("Routing Descriptor Blocks:")
Expand Down Expand Up @@ -3035,9 +3047,9 @@ def get_route_to(self, destination="", protocol="", longer=False):
destination, _vrf, nh, ip_version
)
nh_line_found = (
False # for next RT entry processing ...
)
routes[destination].append(route_entry)
False
) # for next RT entry processing ...
routes[route_match].append(route_entry)
return routes

def get_snmp_information(self):
Expand Down Expand Up @@ -3405,7 +3417,14 @@ def get_network_instances(self, name=""):
if "No interfaces" in first_part:
interfaces = {}
else:
interfaces = {itf: {} for itf in if_regex.group(1).split()}
interfaces = {
canonical_interface_name(itf, {"Vl": "Vlan"}): {}
for itf in if_regex.group(1).split()
}

# remove interfaces in the VRF from the default VRF
for item in interfaces:
del instances["default"]["interfaces"]["interface"][item]

instances[vrf_name] = {
"name": vrf_name,
Expand Down
2 changes: 1 addition & 1 deletion requirements-dev.txt
Original file line number Diff line number Diff line change
Expand Up @@ -8,4 +8,4 @@ pytest-json==0.4.0
pytest-pythonpath==0.7.3
pylama==7.7.1
mock==4.0.2
tox==3.18.0
tox==3.19.0
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
{
"default": {
"name": "default",
"type": "DEFAULT_INSTANCE",
"state": {
"route_distinguisher": ""
},
"interfaces": {
"interface": {
"Ethernet0/0": {},
"Ethernet0/1": {},
"Ethernet0/2": {},
"Ethernet0/3": {},
"Ethernet1/0": {},
"Ethernet1/1": {},
"Ethernet1/2": {},
"Ethernet1/3": {},
"Ethernet2/0": {},
"Ethernet2/1": {},
"Ethernet2/2": {},
"Ethernet2/3": {},
"Ethernet3/0": {},
"Ethernet3/1": {},
"Ethernet3/2": {},
"Ethernet3/3": {},
"Vlan1": {},
"Vlan2": {},
"Vlan3": {},
"Vlan4": {}
}
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
Interface IP-Address OK? Method Status Protocol
Ethernet0/0 172.29.29.220 YES manual up up
Ethernet0/1 unassigned YES unset up up
Ethernet0/2 unassigned YES unset up up
Ethernet0/3 unassigned YES unset up up
Ethernet1/0 unassigned YES unset up up
Ethernet1/1 unassigned YES unset up up
Ethernet1/2 unassigned YES unset up up
Ethernet1/3 unassigned YES unset up up
Ethernet2/0 unassigned YES unset up up
Ethernet2/1 unassigned YES unset up up
Ethernet2/2 unassigned YES unset up up
Ethernet2/3 unassigned YES unset up up
Ethernet3/0 unassigned YES unset up up
Ethernet3/1 unassigned YES unset up up
Ethernet3/2 unassigned YES unset up up
Ethernet3/3 unassigned YES unset up up
Vlan1 unassigned YES unset administratively down down
Vlan2 2.2.2.2 YES manual up up
Vlan3 3.3.3.3 YES manual up up
Vlan4 4.4.4.4 YES manual up up
Empty file.
Original file line number Diff line number Diff line change
@@ -1,78 +1,66 @@
{
"default":{
"interfaces":{
"interface":{
"GigabitEthernet0/0/0":{

},
"Gi0/0/0.152":{

},
"GigabitEthernet0/0/2":{

},
"Gi0/0/0.1774":{

},
"GigabitEthernet0/0/4":{

},
"Gi0/0/0.1772":{

},
"GigabitEthernet0/0/3":{

},
"Gi0/0/0.154":{

},
"GigabitEthernet0/0/1":{

},
"GigabitEthernet0":{

},
"Gi0/0/0.1776":{

},
"Gi0/0/0.600":{

},
"Loopback2":{

}
}
},
"state":{
"route_distinguisher":""
"default": {
"name": "default",
"type": "DEFAULT_INSTANCE",
"state": {
"route_distinguisher": ""
},
"type":"DEFAULT_INSTANCE",
"name":"default"
},
"Mgmt-intf":{
"interfaces":{
"interface":{
"Gi0":{

}
"interfaces": {
"interface": {
"Ethernet0/0": {},
"Ethernet0/1": {},
"Ethernet0/2": {},
"Ethernet0/3": {},
"Ethernet1/0": {},
"Ethernet1/1": {},
"Ethernet1/2": {},
"Ethernet1/3": {},
"Ethernet2/0": {},
"Ethernet2/1": {},
"Ethernet2/2": {},
"Ethernet2/3": {},
"Ethernet3/0": {},
"Ethernet3/1": {},
"Ethernet3/2": {},
"Ethernet3/3": {},
"Vlan1": {}
}
},
"state":{
"route_distinguisher":""
},
"type":"L3VRF",
"name":"Mgmt-intf"
}
},
"opsnet":{
"interfaces":{
"interface":{

"CustA": {
"name": "CustA",
"type": "L3VRF",
"state": {
"route_distinguisher": "1:1"
},
"interfaces": {
"interface": {
"Vlan2": {}
}
}
},
"CustB": {
"name": "CustB",
"type": "L3VRF",
"state": {
"route_distinguisher": "2:2"
},
"state":{
"route_distinguisher":"10283:1021312690"
"interfaces": {
"interface": {
"Vlan3": {}
}
}
},
"CustC": {
"name": "CustC",
"type": "L3VRF",
"state": {
"route_distinguisher": "3:3"
},
"type":"L3VRF",
"name":"opsnet"
"interfaces": {
"interface": {
"Vlan4": {}
}
}
}
}
}
Original file line number Diff line number Diff line change
@@ -1,17 +1,21 @@
Load for five secs: 0%/0%; one minute: 1%; five minutes: 1%
Time source is NTP, 09:30:03.851 DST Wed Nov 8 2017

Interface IP-Address OK? Method Status Protocol
GigabitEthernet0/0/0 unassigned YES NVRAM up up
Gi0/0/0.152 192.168.241.21 YES NVRAM up up
Gi0/0/0.154 192.168.241.30 YES NVRAM up up
Gi0/0/0.600 192.168.241.141 YES NVRAM up up
Gi0/0/0.1772 120.177.177.1 YES NVRAM up up
Gi0/0/0.1774 101.177.177.1 YES NVRAM up up
Gi0/0/0.1776 100.177.177.1 YES NVRAM up up
GigabitEthernet0/0/1 unassigned YES NVRAM administratively down down
GigabitEthernet0/0/2 unassigned YES NVRAM administratively down down
GigabitEthernet0/0/3 unassigned YES NVRAM administratively down down
GigabitEthernet0/0/4 unassigned YES NVRAM administratively down down
GigabitEthernet0 192.168.243.80 YES NVRAM up up
Loopback2 192.168.242.152 YES NVRAM up up
Ethernet0/0 172.29.29.220 YES manual up up
Ethernet0/1 unassigned YES unset up up
Ethernet0/2 unassigned YES unset up up
Ethernet0/3 unassigned YES unset up up
Ethernet1/0 unassigned YES unset up up
Ethernet1/1 unassigned YES unset up up
Ethernet1/2 unassigned YES unset up up
Ethernet1/3 unassigned YES unset up up
Ethernet2/0 unassigned YES unset up up
Ethernet2/1 unassigned YES unset up up
Ethernet2/2 unassigned YES unset up up
Ethernet2/3 unassigned YES unset up up
Ethernet3/0 unassigned YES unset up up
Ethernet3/1 unassigned YES unset up up
Ethernet3/2 unassigned YES unset up up
Ethernet3/3 unassigned YES unset up up
Vlan1 unassigned YES unset administratively down down
Vlan2 2.2.2.2 YES manual up up
Vlan3 3.3.3.3 YES manual up up
Vlan4 4.4.4.4 YES manual up up
Original file line number Diff line number Diff line change
@@ -1,11 +1,8 @@
Load for five secs: 0%/0%; one minute: 0%; five minutes: 1%
Time source is NTP, 09:28:50.737 DST Wed Nov 8 2017

VRF Mgmt-intf (VRF Id = 1); default RD <not set>; default VPNID <not set>
VRF CustA (VRF Id = 1); default RD 1:1; default VPNID <not set>
New CLI format, supports multiple address-families
Flags: 0x1808
Flags: 0x180C
Interfaces:
Gi0
Vl2
Address family ipv4 unicast (Table ID = 0x1):
Flags: 0x0
No Export VPN route-target communities
Expand All @@ -15,7 +12,14 @@ Address family ipv4 unicast (Table ID = 0x1):
No export route-map
VRF label distribution protocol: not configured
VRF label allocation mode: per-prefix
Address family ipv6 unicast (Table ID = 0x1E000001):
Address family ipv6 unicast not active

VRF CustB (VRF Id = 2); default RD 2:2; default VPNID <not set>
New CLI format, supports multiple address-families
Flags: 0x180C
Interfaces:
Vl3
Address family ipv4 unicast (Table ID = 0x2):
Flags: 0x0
No Export VPN route-target communities
No Import VPN route-target communities
Expand All @@ -24,22 +28,21 @@ Address family ipv6 unicast (Table ID = 0x1E000001):
No export route-map
VRF label distribution protocol: not configured
VRF label allocation mode: per-prefix
Address family ipv4 multicast not active
Address family ipv6 unicast not active

VRF opsnet (VRF Id = 2); default RD 10283:1021312690; default VPNID <not set>
VRF CustC (VRF Id = 3); default RD 3:3; default VPNID <not set>
New CLI format, supports multiple address-families
Flags: 0x180C
No interfaces
Address family ipv4 unicast (Table ID = 0x2):
Interfaces:
Vl4
Address family ipv4 unicast (Table ID = 0x3):
Flags: 0x0
Export VPN route-target communities
RT:10283:50000
Import VPN route-target communities
RT:10283:50000
No Export VPN route-target communities
No Import VPN route-target communities
No import route-map
No global export route-map
No export route-map
VRF label distribution protocol: not configured
VRF label allocation mode: per-prefix
Address family ipv6 unicast not active
Address family ipv4 multicast not active

Loading

0 comments on commit 4b952dc

Please sign in to comment.