Skip to content
Snippets Groups Projects
Commit 1dff1cc8 authored by Neda Moeini's avatar Neda Moeini
Browse files

Support ASN dot notation.

parent dc15e2f5
No related branches found
No related tags found
1 merge request!18Support ASN dot notation.
This commit is part of merge request !18. Comments created here will be created in the context of that merge request.
......@@ -243,6 +243,23 @@ def list_interfaces(netconf_config):
yield u
def asn_to_int(asn_string: str) -> int:
"""
Convert a possibly dotted ASN to an integer.
Args:
asn_string (str): ASN to be converted, can be in dot notation or not.
Returns:
int: ASN in integer format.
"""
if '.' in asn_string:
high_order, low_order = map(int, asn_string.split('.'))
return (high_order << 16) | low_order
else:
return int(asn_string)
def _system_bgp_peers(system_node):
def _peering_params(neighbor_node):
......@@ -251,11 +268,11 @@ def _system_bgp_peers(system_node):
peer_as = neighbor_node.find('peer-as')
if peer_as is not None:
# lxml usage warning: can't just test `if peer_as:`
info['remote-asn'] = int(peer_as.text)
info['remote-asn'] = asn_to_int(peer_as.text)
local_as = neighbor_node.find('local-as')
if local_as is not None:
asn_value_node = local_as.find('as-number')
info['local-asn'] = int(asn_value_node.text)
info['local-asn'] = asn_to_int(asn_value_node.text)
description = neighbor_node.find('description')
if description is not None:
# lxml usage warning: can't just test `if description:`
......
......@@ -5,6 +5,7 @@ import ipaddress
import pytest
from inventory_provider import juniper
from inventory_provider.juniper import asn_to_int
NETIFACES_TEST_DATA_STRING = """{
'lo0': {{AF_INET}: [{'addr': '127.0.0.1', 'netmask': '255.0.0.0', 'peer': '127.0.0.1'}],
......@@ -70,3 +71,17 @@ def test_local_v6_interfaces(mocked_netifaces):
assert len(addresses) == 4
for a in addresses:
assert isinstance(a, ipaddress.IPv6Interface)
def test_asn_to_int_functionality():
"""Test that ASN to int conversion works with and without dot notation."""
# Test with dot notation
assert asn_to_int("1.1") == 65537
assert asn_to_int("64512.2") == 4227858434
assert asn_to_int("0.65535") == 65535
# Test without dot notation
assert asn_to_int("65537") == 65537
assert asn_to_int("0") == 0
assert asn_to_int("4227858434") == 4227858434
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment