Loading proto/logical_resources.proto +15 −2 Original line number Diff line number Diff line Loading @@ -29,7 +29,20 @@ string ip_address = 3; uint32 vlan_tag = 4; string mac_address = 5; uint32 asn = 6; string router_id = 7; } string router_id = 7; uint32 vni = 8; string local_address = 9; uint32 port = 10; string bridge = 11; string interface = 12; string remote_address = 13; uint32 remote_as = 14; string local_role = 15; string routing_table = 16; bool multihop = 17; string afi = 18; string name = 19; } message DeviceId { string device_uuid = 1;} Loading src/logical_resources/database.py +20 −5 Original line number Diff line number Diff line Loading @@ -4,16 +4,31 @@ class Database: "Creating the database to store things" self.database = {} def add_device(self, device_uuid, endpoint_uuid, ip_address, vlan_tag, mac_address, ASN, RouterID): def add_device(self, device_uuid, endpoint_uuid, ip_address, vlan_tag, mac_address, ASN, RouterID, vni=None, local_address=None, port=None, bridge=None, interface=None, remote_address=None, remote_as=None, local_role=None, routing_table=None, multihop=None, afi=None, name=None): if device_uuid not in self.database: self.database[device_uuid] = {} if endpoint_uuid not in self.database[device_uuid]: self.database[device_uuid][endpoint_uuid] = {"mac_address": mac_address, self.database[device_uuid][endpoint_uuid] = { "mac_address": mac_address, "ip_addresses": [], "vlan_tags": [], "asn": ASN, "router_id": RouterID "router_id": RouterID, "vni": vni, "local_address": local_address, "port": port, "bridge": bridge, "interface": interface, "remote_address": remote_address, "remote_as": remote_as, "local_role": local_role, "routing_table": routing_table, "multihop": multihop, "afi": afi, "name": name } if ip_address: self.database[device_uuid][endpoint_uuid]["ip_addresses"].append(ip_address) Loading src/logical_resources/service/LogicalResourceServicerImpl.py +35 −11 Original line number Diff line number Diff line Loading @@ -23,7 +23,19 @@ class LogicalResourceServicerImpl(LogicalResourcesServicer): request.vlan_tag, request.mac_address, request.asn, request.router_id request.router_id, request.vni, request.local_address, request.port, request.bridge, request.interface, request.remote_address, request.remote_as, request.local_role, request.routing_table, request.multihop, request.afi, request.name ) return Response(success=True, message="Device added to Logical Database") Loading @@ -38,11 +50,23 @@ class LogicalResourceServicerImpl(LogicalResourcesServicer): dev_eps.endpoints[ep_uuid].CopyFrom(DeviceConfig( device_uuid=dev_uuid, endpoint_uuid=ep_uuid, ip_address=config['ip_addresses'][0] if config['ip_addresses'] else "", vlan_tag=config['vlan_tags'][0] if config['vlan_tags'] else 0, mac_address=config['mac_address'] if config['mac_address'] else "", asn=config['asn'] if config['asn'] else 0, router_id=config['router_id'] if config['router_id'] else "" ip_address=config['ip_addresses'][0] if config.get('ip_addresses') and config['ip_addresses'] else "", vlan_tag=config['vlan_tags'][0] if config.get('vlan_tags') and config['vlan_tags'] else 0, mac_address=config.get('mac_address', "") or "", asn=config.get('asn', 0) or 0, router_id=config.get('router_id', "") or "", vni=config.get('vni', 0) or 0, local_address=config.get('local_address', "") or "", port=config.get('port', 0) or 0, bridge=config.get('bridge', "") or "", interface=config.get('interface', "") or "", remote_address=config.get('remote_address', "") or "", remote_as=config.get('remote_as', 0) or 0, local_role=config.get('local_role', "") or "", routing_table=config.get('routing_table', "") or "", multihop=config.get('multihop', False) or False, afi=config.get('afi', "") or "", name=config.get('name', "") or "" )) reply.devices[dev_uuid].CopyFrom(dev_eps) Loading src/logical_resources/test/test_unitary.py +36 −0 Original line number Diff line number Diff line Loading @@ -32,6 +32,18 @@ def test_add(logical_resource_client : LogicalResourceClient, logical_resource_s add_request.mac_address = "AA:BB:CC:DD:EE:FF" add_request.asn = 65001 add_request.router_id = "1.1.1.1" add_request.vni = 10 add_request.local_address = "192.168.1.1" add_request.port = 4789 add_request.bridge = "br-dataplane" add_request.interface = "vxlan10" add_request.remote_address = "10.0.0.2" add_request.remote_as = 65002 add_request.local_role = "ebgp" add_request.routing_table = "vrf-dataplane" add_request.multihop = True add_request.afi = "ip,l2vpn" add_request.name = "test-device" add_reply = logical_resource_client.AddDevice(add_request) assert add_reply.success == True Loading @@ -52,6 +64,18 @@ def test_get_database(logical_resource_client : LogicalResourceClient, logical_r add_request.mac_address = "AA:BB:CC:DD:EE:01" add_request.asn = 65002 add_request.router_id = "2.2.2.2" add_request.vni = 20 add_request.local_address = "192.168.2.1" add_request.port = 4790 add_request.bridge = "br-dataplane2" add_request.interface = "vxlan20" add_request.remote_address = "10.0.0.3" add_request.remote_as = 65003 add_request.local_role = "ibgp" add_request.routing_table = "vrf-dataplane2" add_request.multihop = False add_request.afi = "ip" add_request.name = "test-device2" add_reply = logical_resource_client.AddDevice(add_request) assert add_reply.success is True Loading @@ -68,6 +92,18 @@ def test_get_database(logical_resource_client : LogicalResourceClient, logical_r assert endpoint_cfg.mac_address == "AA:BB:CC:DD:EE:01" assert endpoint_cfg.asn == 65002 assert endpoint_cfg.router_id == "2.2.2.2" assert endpoint_cfg.vni == 20 assert endpoint_cfg.local_address == "192.168.2.1" assert endpoint_cfg.port == 4790 assert endpoint_cfg.bridge == "br-dataplane2" assert endpoint_cfg.interface == "vxlan20" assert endpoint_cfg.remote_address == "10.0.0.3" assert endpoint_cfg.remote_as == 65003 assert endpoint_cfg.local_role == "ibgp" assert endpoint_cfg.routing_table == "vrf-dataplane2" assert endpoint_cfg.multihop == False assert endpoint_cfg.afi == "ip" assert endpoint_cfg.name == "test-device2" # to print what is stored in the datbase after the get operation import json stored_data = logical_resource_service.servicer_impl.db.get_full_db() Loading Loading
proto/logical_resources.proto +15 −2 Original line number Diff line number Diff line Loading @@ -29,7 +29,20 @@ string ip_address = 3; uint32 vlan_tag = 4; string mac_address = 5; uint32 asn = 6; string router_id = 7; } string router_id = 7; uint32 vni = 8; string local_address = 9; uint32 port = 10; string bridge = 11; string interface = 12; string remote_address = 13; uint32 remote_as = 14; string local_role = 15; string routing_table = 16; bool multihop = 17; string afi = 18; string name = 19; } message DeviceId { string device_uuid = 1;} Loading
src/logical_resources/database.py +20 −5 Original line number Diff line number Diff line Loading @@ -4,16 +4,31 @@ class Database: "Creating the database to store things" self.database = {} def add_device(self, device_uuid, endpoint_uuid, ip_address, vlan_tag, mac_address, ASN, RouterID): def add_device(self, device_uuid, endpoint_uuid, ip_address, vlan_tag, mac_address, ASN, RouterID, vni=None, local_address=None, port=None, bridge=None, interface=None, remote_address=None, remote_as=None, local_role=None, routing_table=None, multihop=None, afi=None, name=None): if device_uuid not in self.database: self.database[device_uuid] = {} if endpoint_uuid not in self.database[device_uuid]: self.database[device_uuid][endpoint_uuid] = {"mac_address": mac_address, self.database[device_uuid][endpoint_uuid] = { "mac_address": mac_address, "ip_addresses": [], "vlan_tags": [], "asn": ASN, "router_id": RouterID "router_id": RouterID, "vni": vni, "local_address": local_address, "port": port, "bridge": bridge, "interface": interface, "remote_address": remote_address, "remote_as": remote_as, "local_role": local_role, "routing_table": routing_table, "multihop": multihop, "afi": afi, "name": name } if ip_address: self.database[device_uuid][endpoint_uuid]["ip_addresses"].append(ip_address) Loading
src/logical_resources/service/LogicalResourceServicerImpl.py +35 −11 Original line number Diff line number Diff line Loading @@ -23,7 +23,19 @@ class LogicalResourceServicerImpl(LogicalResourcesServicer): request.vlan_tag, request.mac_address, request.asn, request.router_id request.router_id, request.vni, request.local_address, request.port, request.bridge, request.interface, request.remote_address, request.remote_as, request.local_role, request.routing_table, request.multihop, request.afi, request.name ) return Response(success=True, message="Device added to Logical Database") Loading @@ -38,11 +50,23 @@ class LogicalResourceServicerImpl(LogicalResourcesServicer): dev_eps.endpoints[ep_uuid].CopyFrom(DeviceConfig( device_uuid=dev_uuid, endpoint_uuid=ep_uuid, ip_address=config['ip_addresses'][0] if config['ip_addresses'] else "", vlan_tag=config['vlan_tags'][0] if config['vlan_tags'] else 0, mac_address=config['mac_address'] if config['mac_address'] else "", asn=config['asn'] if config['asn'] else 0, router_id=config['router_id'] if config['router_id'] else "" ip_address=config['ip_addresses'][0] if config.get('ip_addresses') and config['ip_addresses'] else "", vlan_tag=config['vlan_tags'][0] if config.get('vlan_tags') and config['vlan_tags'] else 0, mac_address=config.get('mac_address', "") or "", asn=config.get('asn', 0) or 0, router_id=config.get('router_id', "") or "", vni=config.get('vni', 0) or 0, local_address=config.get('local_address', "") or "", port=config.get('port', 0) or 0, bridge=config.get('bridge', "") or "", interface=config.get('interface', "") or "", remote_address=config.get('remote_address', "") or "", remote_as=config.get('remote_as', 0) or 0, local_role=config.get('local_role', "") or "", routing_table=config.get('routing_table', "") or "", multihop=config.get('multihop', False) or False, afi=config.get('afi', "") or "", name=config.get('name', "") or "" )) reply.devices[dev_uuid].CopyFrom(dev_eps) Loading
src/logical_resources/test/test_unitary.py +36 −0 Original line number Diff line number Diff line Loading @@ -32,6 +32,18 @@ def test_add(logical_resource_client : LogicalResourceClient, logical_resource_s add_request.mac_address = "AA:BB:CC:DD:EE:FF" add_request.asn = 65001 add_request.router_id = "1.1.1.1" add_request.vni = 10 add_request.local_address = "192.168.1.1" add_request.port = 4789 add_request.bridge = "br-dataplane" add_request.interface = "vxlan10" add_request.remote_address = "10.0.0.2" add_request.remote_as = 65002 add_request.local_role = "ebgp" add_request.routing_table = "vrf-dataplane" add_request.multihop = True add_request.afi = "ip,l2vpn" add_request.name = "test-device" add_reply = logical_resource_client.AddDevice(add_request) assert add_reply.success == True Loading @@ -52,6 +64,18 @@ def test_get_database(logical_resource_client : LogicalResourceClient, logical_r add_request.mac_address = "AA:BB:CC:DD:EE:01" add_request.asn = 65002 add_request.router_id = "2.2.2.2" add_request.vni = 20 add_request.local_address = "192.168.2.1" add_request.port = 4790 add_request.bridge = "br-dataplane2" add_request.interface = "vxlan20" add_request.remote_address = "10.0.0.3" add_request.remote_as = 65003 add_request.local_role = "ibgp" add_request.routing_table = "vrf-dataplane2" add_request.multihop = False add_request.afi = "ip" add_request.name = "test-device2" add_reply = logical_resource_client.AddDevice(add_request) assert add_reply.success is True Loading @@ -68,6 +92,18 @@ def test_get_database(logical_resource_client : LogicalResourceClient, logical_r assert endpoint_cfg.mac_address == "AA:BB:CC:DD:EE:01" assert endpoint_cfg.asn == 65002 assert endpoint_cfg.router_id == "2.2.2.2" assert endpoint_cfg.vni == 20 assert endpoint_cfg.local_address == "192.168.2.1" assert endpoint_cfg.port == 4790 assert endpoint_cfg.bridge == "br-dataplane2" assert endpoint_cfg.interface == "vxlan20" assert endpoint_cfg.remote_address == "10.0.0.3" assert endpoint_cfg.remote_as == 65003 assert endpoint_cfg.local_role == "ibgp" assert endpoint_cfg.routing_table == "vrf-dataplane2" assert endpoint_cfg.multihop == False assert endpoint_cfg.afi == "ip" assert endpoint_cfg.name == "test-device2" # to print what is stored in the datbase after the get operation import json stored_data = logical_resource_service.servicer_impl.db.get_full_db() Loading