def test_ipv4_mpls_vpn_construct(self): data_bin = b'\x80\x0f\x12\x00\x01\x80\x70\x80\x00\x00\x00\x00\x00\x02\x00\x00\x00\x02\xc0\xa8\xc9' data_hoped = { 'afi_safi': (1, 128), 'withdraw': [{ 'rd': '2:2', 'prefix': '192.168.201.0/24' }] } self.assertEqual(data_bin, MpUnReachNLRI.construct(data_hoped))
def test_ipv4_flowspec_construct(self): data_bin = b'\x00\x01\x85\x0a\x01\x18\xc0\x55\x02\x02\x18\xc0\x55\x01' nlri_dict = { 'afi_safi': (1, 133), 'withdraw': [{ 1: '192.85.2.0/24', 2: '192.85.1.0/24' }] } self.assertEqual(data_bin, MpUnReachNLRI.construct(nlri_dict)[4:])
def test_ipv4_srte_construct(self): data_bin = b'\x00\x01\x49\x60\x00\x00\x00\x00\x00\x00\x00\x0a\xc0\xa8\x05\x07' nlri_dict = { 'afi_safi': (1, 73), 'withdraw': { 'distinguisher': 0, 'color': 10, 'endpoint': '192.168.5.7' } } self.assertEqual(data_bin, MpUnReachNLRI.construct(nlri_dict)[4:])
def test_ipv6_unicast_construct(self): nlri_dict = { 'afi_safi': (2, 1), 'withdraw': [ '2001:3232::1/128', '::2001:3232:1:0/64', '2001:4837:1632::2/127' ] } self.assertEqual( nlri_dict, MpUnReachNLRI.parse(MpUnReachNLRI.construct(nlri_dict)[4:]))
def test_ipv4_mpls_vpn_construct(self): data_hoped = { 'afi_safi': (1, 128), 'withdraw': [{ 'rd': '2:2', 'label': [524288], 'prefix': '192.168.201.0/24' }] } self.assertEqual( data_hoped, MpUnReachNLRI.parse(MpUnReachNLRI.construct(data_hoped)[4:]))
def test_l2vpn_evpn_route_type_1_parse_construct(self): data_dict = { "afi_safi": (25, 70), "withdraw": [{ "type": 1, "value": { "rd": "1.1.1.1:32867", "esi": 0, "eth_tag_id": 100, "label": [10] } }]} self.assertEqual(data_dict, MpUnReachNLRI.parse(MpUnReachNLRI.construct(data_dict)[3:]))
def test_l2vpn_evpn_route_type_1_parse_construct(self): data_dict = { "afi_safi": (25, 70), "withdraw": [{ "type": 1, "value": { "rd": "1.1.1.1:32867", "esi": 0, "eth_tag_id": 100, "label": [10] } }]} self.assertEqual(data_dict, MpUnReachNLRI.parse(MpUnReachNLRI.construct(data_dict)[3:]))
def test_ipv6_mpls_vpn_parse_construct(self): data_dict = { 'afi_safi': (2, 128), 'withdraw': [ {'label': [524288], 'rd': '100:10', 'prefix': '2001:3232::1/128'}, {'label': [524288], 'rd': '100:11', 'prefix': '2001:4837:1632::2/127'} ] } self.assertEqual( data_dict, MpUnReachNLRI.parse( value=MpUnReachNLRI.construct(value=data_dict)[3:] ))
def test_ipv6_mpls_vpn_parse_construct(self): data_dict = { 'afi_safi': (2, 128), 'withdraw': [ {'label': [524288], 'rd': '100:10', 'prefix': '2001:3232::1/128'}, {'label': [524288], 'rd': '100:11', 'prefix': '2001:4837:1632::2/127'} ] } self.assertEqual( data_dict, MpUnReachNLRI.parse( value=MpUnReachNLRI.construct(value=data_dict)[3:] ))
def test_ipv4_labeled_unicast_parse_construct(self): data_dict = { "afi_safi": (1, 4), "withdraw": [{ 'prefix': '34.1.41.0/24', 'label': [321] }, { 'prefix': '34.1.42.0/24', 'label': [322] }] } self.assertEqual( data_dict, MpUnReachNLRI.parse(MpUnReachNLRI.construct(data_dict)[3:]))
def test_l2vpn_evpn_route_type_2_parse_construct(self): data_dict = { 'afi_safi': (25, 70), 'withdraw': [ { 'type': 2, 'value': { 'eth_tag_id': 108, 'ip': '11.11.11.1', 'label': [0], 'rd': '172.17.0.3:2', 'mac': '00-11-22-33-44-55', 'esi': 0}}] } self.assertEqual(data_dict, MpUnReachNLRI.parse(MpUnReachNLRI.construct(data_dict)[3:]))
def test_l2vpn_evpn_route_type_4_parse_construct(self): data_dict = { "afi_safi": (25, 70), "withdraw": [{ "type": 4, "value": { "rd": "172.16.0.1:8888", "esi": 0, "ip": "192.168.0.1" } }] } self.assertEqual( data_dict, MpUnReachNLRI.parse(MpUnReachNLRI.construct(data_dict)[4:]))
def test_l2vpn_evpn_route_type_4_parse_construct(self): data_dict = { "afi_safi": (25, 70), "withdraw": [ { "type": 4, "value": { "rd": "172.16.0.1:8888", "esi": 0, "ip": "192.168.0.1" } } ] } self.assertEqual(data_dict, MpUnReachNLRI.parse(MpUnReachNLRI.construct(data_dict)[3:]))
def test_l2vpn_evpn_route_type_3_parse_construct(self): data_dict = { "afi_safi": (25, 70), "withdraw": [{ "type": 3, "value": { "rd": "172.16.0.1:5904", "eth_tag_id": 100, "ip": "192.168.0.1" } }] } self.assertEqual( data_dict, MpUnReachNLRI.parse(MpUnReachNLRI.construct(data_dict)[3:]))
def test_l2vpn_evpn_route_type_2_parse_construct(self): data_dict = { 'afi_safi': (25, 70), 'withdraw': [ { 'type': 2, 'value': { 'eth_tag_id': 108, 'ip': '11.11.11.1', 'label': [0], 'rd': '172.17.0.3:2', 'mac': '00-11-22-33-44-55', 'esi': 0}}] } self.assertEqual(data_dict, MpUnReachNLRI.parse(MpUnReachNLRI.construct(data_dict)[3:]))
def test_ipv6_labeled_unicast_parse_construct(self): data_dict = { 'afi_safi': (2, 4), 'withdraw': [{ 'label': [91], 'prefix': '2001:2121::1/128' }, { 'label': [92], 'prefix': '::2001:2121:1:0/64' }, { 'label': [93], 'prefix': '2001:4837:1821::2/127' }] } self.assertEqual( data_dict, MpUnReachNLRI.parse(MpUnReachNLRI.construct(data_dict)[3:]))
def construct_attributes(attr_dict, asn4=False): """ construts BGP Update attirubte. :param attr_dict: bgp attribute dictionary :param asn4: support 4 bytes asn or not """ attr_raw_hex = b'' for type_code, value in attr_dict.items(): if type_code == bgp_cons.BGPTYPE_ORIGIN: origin_hex = Origin.construct(value=value) attr_raw_hex += origin_hex elif type_code == bgp_cons.BGPTYPE_AS_PATH: aspath_hex = ASPath.construct(value=value, asn4=asn4) attr_raw_hex += aspath_hex elif type_code == bgp_cons.BGPTYPE_NEXT_HOP: nexthop_hex = NextHop.construct(value=value) attr_raw_hex += nexthop_hex elif type_code == bgp_cons.BGPTYPE_MULTI_EXIT_DISC: med_hex = MED.construct(value=value) attr_raw_hex += med_hex elif type_code == bgp_cons.BGPTYPE_LOCAL_PREF: localpre_hex = LocalPreference.construct(value=value) attr_raw_hex += localpre_hex elif type_code == bgp_cons.BGPTYPE_ATOMIC_AGGREGATE: atomicaggregate_hex = AtomicAggregate.construct(value=value) attr_raw_hex += atomicaggregate_hex elif type_code == bgp_cons.BGPTYPE_AGGREGATOR: aggregator_hex = Aggregator.construct(value=value, asn4=asn4) attr_raw_hex += aggregator_hex elif type_code == bgp_cons.BGPTYPE_COMMUNITIES: community_hex = Community.construct(value=value) attr_raw_hex += community_hex elif type_code == bgp_cons.BGPTYPE_ORIGINATOR_ID: originatorid_hex = OriginatorID.construct(value=value) attr_raw_hex += originatorid_hex elif type_code == bgp_cons.BGPTYPE_CLUSTER_LIST: clusterlist_hex = ClusterList.construct(value=value) attr_raw_hex += clusterlist_hex elif type_code == bgp_cons.BGPTYPE_MP_REACH_NLRI: mpreach_hex = MpReachNLRI().construct(value=value) attr_raw_hex += mpreach_hex elif type_code == bgp_cons.BGPTYPE_MP_UNREACH_NLRI: mpunreach_hex = MpUnReachNLRI.construct(value=value) attr_raw_hex += mpunreach_hex elif type_code == bgp_cons.BGPTYPE_EXTENDED_COMMUNITY: community_ext_hex = ExtCommunity.construct(value=value) attr_raw_hex += community_ext_hex return attr_raw_hex
def construct_attributes(attr_dict, asn4=False): """ construts BGP Update attirubte. :param attr_dict: bgp attribute dictionary :param asn4: support 4 bytes asn or not """ attr_raw_hex = b'' for type_code, value in attr_dict.items(): if type_code == bgp_cons.BGPTYPE_ORIGIN: origin_hex = Origin.construct(value=value) attr_raw_hex += origin_hex elif type_code == bgp_cons.BGPTYPE_AS_PATH: aspath_hex = ASPath.construct(value=value, asn4=asn4) attr_raw_hex += aspath_hex elif type_code == bgp_cons.BGPTYPE_NEXT_HOP: nexthop_hex = NextHop.construct(value=value) attr_raw_hex += nexthop_hex elif type_code == bgp_cons.BGPTYPE_MULTI_EXIT_DISC: med_hex = MED.construct(value=value) attr_raw_hex += med_hex elif type_code == bgp_cons.BGPTYPE_LOCAL_PREF: localpre_hex = LocalPreference.construct(value=value) attr_raw_hex += localpre_hex elif type_code == bgp_cons.BGPTYPE_ATOMIC_AGGREGATE: atomicaggregate_hex = AtomicAggregate.construct(value=value) attr_raw_hex += atomicaggregate_hex elif type_code == bgp_cons.BGPTYPE_AGGREGATOR: aggregator_hex = Aggregator.construct(value=value, asn4=asn4) attr_raw_hex += aggregator_hex elif type_code == bgp_cons.BGPTYPE_COMMUNITIES: community_hex = Community.construct(value=value) attr_raw_hex += community_hex elif type_code == bgp_cons.BGPTYPE_ORIGINATOR_ID: originatorid_hex = OriginatorID.construct(value=value) attr_raw_hex += originatorid_hex elif type_code == bgp_cons.BGPTYPE_CLUSTER_LIST: clusterlist_hex = ClusterList.construct(value=value) attr_raw_hex += clusterlist_hex elif type_code == bgp_cons.BGPTYPE_MP_REACH_NLRI: mpreach_hex = MpReachNLRI().construct(value=value) attr_raw_hex += mpreach_hex elif type_code == bgp_cons.BGPTYPE_MP_UNREACH_NLRI: mpunreach_hex = MpUnReachNLRI.construct(value=value) attr_raw_hex += mpunreach_hex elif type_code == bgp_cons.BGPTYPE_EXTENDED_COMMUNITY: community_ext_hex = ExtCommunity.construct(value=value) attr_raw_hex += community_ext_hex return attr_raw_hex
def test_ipv4_flowspec_construct(self): data_bin = b'\x00\x01\x85\x0a\x01\x18\xc0\x55\x02\x02\x18\xc0\x55\x01' nlri_dict = {'afi_safi': (1, 133), 'withdraw': [{1: '192.85.2.0/24', 2: '192.85.1.0/24'}]} self.assertEqual(data_bin, MpUnReachNLRI.construct(nlri_dict)[3:])
def test_ipv6_unicast_construct(self): nlri_dict = { 'afi_safi': (2, 1), 'withdraw': ['2001:3232::1/128', '::2001:3232:1:0/64', '2001:4837:1632::2/127']} self.assertEqual(nlri_dict, MpUnReachNLRI.parse(MpUnReachNLRI.construct(nlri_dict)[3:]))
def test_ipv4_mpls_vpn_construct(self): data_bin = b'\x80\x0f\x12\x00\x01\x80\x70\x80\x00\x00\x00\x00\x00\x02\x00\x00\x00\x02\xc0\xa8\xc9' data_hoped = {'afi_safi': (1, 128), 'withdraw': [{'rd': '2:2', 'prefix': '192.168.201.0/24'}]} self.assertEqual(data_bin, MpUnReachNLRI.construct(data_hoped))