Example #1
0
 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))
Example #2
0
 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:])
Example #3
0
 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:])
Example #4
0
 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:]))
Example #5
0
 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:]))
Example #7
0
 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:]))
Example #8
0
 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:]
         ))
Example #10
0
 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:]))
Example #11
0
 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:]))
Example #12
0
 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:]))
Example #13
0
 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:]))
Example #14
0
 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:]))
Example #15
0
 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:]))
Example #16
0
 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:]))
Example #17
0
    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
Example #18
0
    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
Example #19
0
 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:])
Example #20
0
 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:]))
Example #21
0
 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))