Skip to content

Commit

Permalink
For Vlan interfaces nxos driver, the state is not correctly defined (…
Browse files Browse the repository at this point in the history
…related to json output). (#1072)

* For Vlan interfaces nxos driver, the state is not correctly defined (related to json output).
There are no admin_state and state fields for them.
Example:
{
"interface": "Vlan120",
"svi_admin_state": "up",
"svi_line_proto": "up",
"svi_mac": "002a.6ad3.0000",
"svi_desc": "",
"svi_ip_addr": "192.168.0.10",
"svi_ip_mask": "24",
"svi_mtu": "1500",
"svi_bw": "1000000",
"svi_delay": "10"
},
{
"interface": "Vlan198",
"svi_admin_state": "down",
"state_rsn_desc": "Administratively down",
"svi_line_proto": "down",
"svi_mac": "002a.6ad3.0000",
"svi_ip_addr": "192.168.0.11",
"svi_ip_mask": "24",
"svi_mtu": "1500",
"svi_bw": "1000000",
"svi_delay": "10"
},

* misprint

* Because this is a virtual interface, then is_up == is_enabled, from my point of view.

* black test

* misprint

* I have extra characters on some devices

* Removed debug output
  • Loading branch information
VictorPavlushin authored and mirceaulinic committed Oct 28, 2019
1 parent f9c8ae1 commit 6709e1c
Show file tree
Hide file tree
Showing 4 changed files with 82 additions and 9 deletions.
35 changes: 29 additions & 6 deletions napalm/nxos/nxos.py
Original file line number Diff line number Diff line change
Expand Up @@ -822,28 +822,51 @@ def get_interfaces(self):

for interface_details in interfaces_body:
interface_name = interface_details.get("interface")
interface_mtu = interface_details.get("eth_mtu", 0)
interface_mtu = int(interface_mtu)

if interface_details.get("eth_mtu"):
interface_mtu = int(interface_details["eth_mtu"])
elif interface_details.get("svi_mtu"):
interface_mtu = int(interface_details["svi_mtu"])
else:
interface_mtu = 0

# Earlier version of Nexus returned a list for 'eth_bw' (observed on 7.1(0)N1(1a))
interface_speed = interface_details.get("eth_bw", 0)
if interface_details.get("eth_bw"):
interface_speed = interface_details["eth_bw"]
elif interface_details.get("svi_bw"):
interface_speed = interface_details["svi_bw"]
else:
interface_speed = 0
if isinstance(interface_speed, list):
interface_speed = interface_speed[0]
interface_speed = int(interface_speed / 1000)
interface_speed = int(int(interface_speed) / 1000)

if "admin_state" in interface_details:
is_up = interface_details.get("admin_state", "") == "up"
elif "svi_admin_state" in interface_details:
is_up = interface_details.get("svi_admin_state", "") == "up"
else:
is_up = interface_details.get("state", "") == "up"
if interface_details.get("eth_hw_addr"):
mac_address = interface_details["eth_hw_addr"]
elif interface_details.get("svi_mac"):
mac_address = interface_details["svi_mac"].strip()
else:
mac_address = None
interfaces[interface_name] = {
"is_up": is_up,
"is_enabled": (interface_details.get("state") == "up"),
"is_enabled": (
interface_details.get("state") == "up"
or interface_details.get("svi_admin_state") == "up"
),
"description": str(interface_details.get("desc", "").strip('"')),
"last_flapped": self._compute_timestamp(
interface_details.get("eth_link_flapped", "")
),
"speed": interface_speed,
"mtu": interface_mtu,
"mac_address": napalm.base.helpers.convert(
napalm.base.helpers.mac, interface_details.get("eth_hw_addr")
napalm.base.helpers.mac, mac_address
),
}
return interfaces
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -265,9 +265,9 @@
"description": "",
"last_flapped": -1.0,
"is_up": false,
"mac_address": "",
"mtu": 0,
"speed": 0
"mac_address": "2C:C2:60:1C:7B:94",
"mtu": 1500,
"speed": 1000
},
"Ethernet3/47": {
"is_enabled": false,
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
{
"Vlan120": {
"is_enabled": true,
"description": "",
"last_flapped": -1.0,
"is_up": true,
"mac_address": "00:2A:6A:D3:00:00",
"mtu": 1500,
"speed": 1000
},
"Vlan198": {
"is_enabled": false,
"description": "",
"last_flapped": -1.0,
"is_up": false,
"mac_address": "00:2A:6A:D3:00:00",
"mtu": 1500,
"speed": 1000
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
{
"TABLE_interface": {
"ROW_interface": [
{
"interface": "Vlan120",
"svi_admin_state": "up",
"svi_line_proto": "up",
"svi_mac": "002a.6ad3.0000",
"svi_desc": "",
"svi_ip_addr": "192.168.0.10",
"svi_ip_mask": "24",
"svi_mtu": "1500",
"svi_bw": "1000000",
"svi_delay": "10"
},
{
"interface": "Vlan198",
"svi_admin_state": "down",
"state_rsn_desc": "Administratively down",
"svi_line_proto": "down",
"svi_mac": "002a.6ad3.0000",
"svi_ip_addr": "192.168.0.11",
"svi_ip_mask": "24",
"svi_mtu": "1500",
"svi_bw": "1000000",
"svi_delay": "10"
}
]
}
}

0 comments on commit 6709e1c

Please sign in to comment.