def test_parse_construct_l2vpn_evpn(self): data_dict = { "attr": { 1: 0, 2: [], 5: 100, 14: { "afi_safi": (25, 70), "nexthop": "10.75.44.254", "nlri": [{ "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 } }] }, 16: [[1536, 1, 500]] } } self.assertEqual( data_dict['attr'], Update.parse( None, Update.construct(msg_dict=data_dict)[HDR_LEN:])['attr'])
def test_parse_and_construct_pmsi_tunnel_evpn_overlay(self): data_dict = { 'attr': { 1: 0, 5: 100, 14: { 'afi_safi': (25, 70), 'nexthop': '192.168.1.10', 'nlri': [{ 'type': 3, 'value': { 'eth_tag_id': 0, 'ip': '192.168.1.10', 'rd': '65527:36802' } }] }, 16: [[2, '65527:36802'], [780, 8]], 22: { 'mpls_label': [60001], 'tunnel_id': '192.168.1.10', 'tunnel_type': 6, 'leaf_info_required': 0 } } } self.assertEqual( data_dict['attr'], Update.parse( None, Update.construct(msg_dict=data_dict)[HDR_LEN:])['attr'])
def test_parse_construct_l2vpn_evpn(self): data_bin = b'\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x63\x02\x00\x00\x00' \ b'\x4c\xc0\x10\x08\x06\x00\x01\x00\x00\x00\x01\xf4\x40\x01\x01\x00\x40\x02\x00\x40\x05\x04' \ b'\x00\x00\x00\x64\x80\x0e\x30\x00\x19\x46\x04\x0a\x4b\x2c\xfe\x00\x02\x25\x00\x01\xac\x11' \ b'\x00\x03\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x6c\x30\x00\x11\x22' \ b'\x33\x44\x55\x20\x0b\x0b\x0b\x01\x00\x00\x00' data_dict = { "attr": { 1: 0, 2: [], 5: 100, 14: { "afi_safi": (25, 70), "nexthop": "10.75.44.254", "nlri": [ { "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}}] }, 16: [[1536, 1, 500]] }} self.assertEqual(data_bin, Update.construct(msg_dict=data_dict)) self.assertEqual(data_dict['attr'], Update.parse(None, data_bin[HDR_LEN:])['attr'])
def test_parse_and_construct_ipv6_unicast_update(self): value_parse = { 'attr': { 1: 0, 2: [(2, [65502])], 4: 0, 14: { 'afi_safi': (2, 1), 'linklocal_nexthop': 'fe80::c002:bff:fe7e:0', 'nexthop': '2001:db8::2', 'nlri': [ '::2001:db8:2:2/64', '::2001:db8:2:1/64', '::2001:db8:2:0/64' ] } } } self.assertEqual( value_parse['attr'], Update.parse( None, Update.construct(msg_dict=value_parse, asn4=True)[HDR_LEN:], True)['attr'], True)
def test_parse_construct_l2vpn_evpn(self): data_bin = b'\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x63\x02\x00\x00\x00' \ b'\x4c\xc0\x10\x08\x06\x00\x01\x00\x00\x00\x01\xf4\x40\x01\x01\x00\x40\x02\x00\x40\x05\x04' \ b'\x00\x00\x00\x64\x80\x0e\x30\x00\x19\x46\x04\x0a\x4b\x2c\xfe\x00\x02\x25\x00\x01\xac\x11' \ b'\x00\x03\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x6c\x30\x00\x11\x22' \ b'\x33\x44\x55\x20\x0b\x0b\x0b\x01\x00\x00\x00' data_dict = { "attr": { 1: 0, 2: [], 5: 100, 14: { "afi_safi": (25, 70), "nexthop": "10.75.44.254", "nlri": [{ "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 } }] }, 16: [[1536, 1, 500]] } } self.assertEqual(data_bin, Update.construct(msg_dict=data_dict)) self.assertEqual(data_dict['attr'], Update.parse(None, data_bin[HDR_LEN:])['attr'])
def test_parse_and_construct_ipv4_mpls_vpn_update(self): data_bin = b'\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00' \ b'\x74\x02\x00\x00\x00\x5d\x40\x01\x01\x02\x40\x02\x00\x80\x04\x04\x00' \ b'\x00\x00\x00\x40\x05\x04\x00\x00\x00\x64\xc0\x10\x08\x00\x02\x00\x02' \ b'\x00\x00\x00\x02\x80\x0a\x10\xc0\xa8\x01\x01\xc0\xa8\x01\x02\xc0\xa8' \ b'\x01\x03\xc0\xa8\x01\x04\x80\x09\x04\xc0\xa8\x01\x06\x80\x0e\x20\x00' \ b'\x01\x80\x0c\x00\x00\x00\x00\x00\x00\x00\x00\xc0\xa8\x01\x06\x00\x70' \ b'\x00\x01\xd1\x00\x00\x00\x02\x00\x00\x00\x02\xc0\xa8\xc9' data_hoped = { 'attr': {1: 2, 2: [], 4: 0, 5: 100, 9: '192.168.1.6', 10: ['192.168.1.1', '192.168.1.2', '192.168.1.3', '192.168.1.4'], 14: {'afi_safi': (1, 128), 'nexthop': {'rd': '0:0', 'str': '192.168.1.6'}, 'nlri': [{'label': [29], 'rd': '2:2', 'prefix': '192.168.201.0/24'}]}, 16: [[2, '2:2']] } } self.maxDiff = None self.assertEqual(data_hoped['attr'], Update.parse(None, data_bin[HDR_LEN:], True)['attr']) self.assertEqual(data_hoped['attr'], Update.parse(None, Update.construct(msg_dict=data_hoped)[HDR_LEN:], True)['attr'])
def test_parse_and_construct_ipv4_unicast_2byteas(self): # 2 bytes asn msg_hex = b'\x00\x00\x00\x28\x40\x01\x01\x02\x40\x02\x0a\x02\x01\x00\x1e\x01\x02\x00\x0a\x00\x14\x40\x03\x04' \ b'\x0a\x00\x00\x09\x80\x04\x04\x00\x00\x00\x00\xc0\x07\x06\x00\x1e\x0a\x00\x00\x09\x15\xac\x10\x00' update = Update.parse([None, False, msg_hex]) attributes = {1: 2, 2: [(2, [30]), (1, [10, 20])], 3: '10.0.0.9', 4: 0, 7: (30, '10.0.0.9')} self.assertEqual(attributes, update['attr']) self.assertEqual([], update['withdraw']) self.assertEqual(['172.16.0.0/21'], update['nlri']) self.assertEqual(msg_hex, Update.construct(msg_dict=update, asn4=False)[HDR_LEN:])
def test_parse_and_construct_ipv4_mpls_vpn_withdraw(self): data_bin = b'\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00' \ b'\x2c\x02\x00\x00\x00\x15\x80\x0f\x12\x00\x01\x80\x70\x80\x00\x00\x00' \ b'\x00\x00\x02\x00\x00\x00\x02\xc0\xa8\xc9' data_hoped = {'attr': {15: {'afi_safi': (1, 128), 'withdraw': [{'label': [524288], 'rd': '2:2', 'prefix': '192.168.201.0/24'}]}}} self.assertEqual(data_hoped['attr'], Update.parse(None, data_bin[HDR_LEN:], True)['attr']) self.assertEqual(data_bin, Update.construct(msg_dict=data_hoped))
def test_parse_and_construct_ipv6_unicast_update(self): value_parse = { 'attr': { 1: 0, 2: [(2, [65502])], 4: 0, 14: { 'afi_safi': (2, 1), 'linklocal_nexthop': 'fe80::c002:bff:fe7e:0', 'nexthop': '2001:db8::2', 'nlri': ['::2001:db8:2:2/64', '::2001:db8:2:1/64', '::2001:db8:2:0/64']} }} self.assertEqual(value_parse['attr'], Update.parse( None, Update.construct( msg_dict=value_parse, asn4=True)[HDR_LEN:], True)['attr'], True)
def test_parse_and_construct_ipv4_unicast_2byteas(self): # 2 bytes asn msg_hex = b'\x00\x00\x00\x28\x40\x01\x01\x02\x40\x02\x0a\x02\x01\x00\x1e\x01\x02\x00\x0a\x00\x14\x40\x03\x04' \ b'\x0a\x00\x00\x09\x80\x04\x04\x00\x00\x00\x00\xc0\x07\x06\x00\x1e\x0a\x00\x00\x09\x15\xac\x10\x00' update = Update.parse(None, msg_hex) attributes = { 1: 2, 2: [(2, [30]), (1, [10, 20])], 3: '10.0.0.9', 4: 0, 7: (30, '10.0.0.9') } self.assertEqual(attributes, update['attr']) self.assertEqual([], update['withdraw']) self.assertEqual(['172.16.0.0/21'], update['nlri']) self.assertEqual( msg_hex, Update.construct(msg_dict=update, asn4=False)[HDR_LEN:])
def test_parse_and_construct_ipv4_mpls_vpn_withdraw(self): data_hoped = { 'attr': { 15: { 'afi_safi': (1, 128), 'withdraw': [{ 'label': [524288], 'rd': '2:2', 'prefix': '192.168.201.0/24' }] } } } self.assertEqual( data_hoped['attr'], Update.parse(None, Update.construct(msg_dict=data_hoped)[HDR_LEN:], True)['attr'])
def test_parse_and_construct_ipv4_mpls_vpn_withdraw(self): data_bin = b'\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00' \ b'\x2c\x02\x00\x00\x00\x15\x80\x0f\x12\x00\x01\x80\x70\x80\x00\x00\x00' \ b'\x00\x00\x02\x00\x00\x00\x02\xc0\xa8\xc9' data_hoped = { 'attr': { 15: { 'afi_safi': (1, 128), 'withdraw': [{ 'label': [524288], 'rd': '2:2', 'prefix': '192.168.201.0/24' }] } } } self.assertEqual(data_hoped['attr'], Update.parse(None, data_bin[HDR_LEN:], True)['attr']) self.assertEqual(data_bin, Update.construct(msg_dict=data_hoped))
def test_parse_and_construct_ipv4_mpls_vpn_update(self): data_bin = b'\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00' \ b'\x74\x02\x00\x00\x00\x5d\x40\x01\x01\x02\x40\x02\x00\x80\x04\x04\x00' \ b'\x00\x00\x00\x40\x05\x04\x00\x00\x00\x64\xc0\x10\x08\x00\x02\x00\x02' \ b'\x00\x00\x00\x02\x80\x0a\x10\xc0\xa8\x01\x01\xc0\xa8\x01\x02\xc0\xa8' \ b'\x01\x03\xc0\xa8\x01\x04\x80\x09\x04\xc0\xa8\x01\x06\x80\x0e\x20\x00' \ b'\x01\x80\x0c\x00\x00\x00\x00\x00\x00\x00\x00\xc0\xa8\x01\x06\x00\x70' \ b'\x00\x01\xd1\x00\x00\x00\x02\x00\x00\x00\x02\xc0\xa8\xc9' data_hoped = { 'attr': { 1: 2, 2: [], 4: 0, 5: 100, 9: '192.168.1.6', 10: ['192.168.1.1', '192.168.1.2', '192.168.1.3', '192.168.1.4'], 14: { 'afi_safi': (1, 128), 'nexthop': { 'rd': '0:0', 'str': '192.168.1.6' }, 'nlri': [{ 'label': [29], 'rd': '2:2', 'prefix': '192.168.201.0/24' }] }, 16: [[2, '2:2']] } } self.maxDiff = None self.assertEqual(data_hoped['attr'], Update.parse(None, data_bin[HDR_LEN:], True)['attr']) self.assertEqual( data_hoped['attr'], Update.parse(None, Update.construct(msg_dict=data_hoped)[HDR_LEN:], True)['attr'])
def test_parse_and_construct_pmsi_tunnel_evpn_overlay(self): data_bin = b'\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff' \ b'\x00`\x02\x00\x00\x00I\xc0\x10\x10\x00\x02\xff\xf7\x00\x00\x8f' \ b'\xc2\x03\x0c\x00\x00\x00\x00\x00\x08@\x01\x01\x00\xc0\x16\t\x00' \ b'\x06\x00\xeaa\xc0\xa8\x01\n@\x05\x04\x00\x00\x00d\x80\x0e\x1c\x00' \ b'\x19F\x04\xc0\xa8\x01\n\x00\x03\x11\x00\x00\xff\xf7\x00\x00\x8f\xc2' \ b'\x00\x00\x00\x00 \xc0\xa8\x01\n' data_dict = { 'attr': { 1: 0, 5: 100, 14: { 'afi_safi': (25, 70), 'nexthop': '192.168.1.10', 'nlri': [{ 'type': 3, 'value': { 'eth_tag_id': 0, 'ip': '192.168.1.10', 'rd': '65527:36802' } }] }, 16: [[2, '65527:36802'], [780, 8]], 22: { 'mpls_label': [60001], 'tunnel_id': '192.168.1.10', 'tunnel_type': 6, 'leaf_info_required': 0 } } } self.maxDiff = None self.assertEqual(data_dict['attr'], Update.parse(None, data_bin[HDR_LEN:])['attr']) self.assertEqual(data_bin, Update.construct(msg_dict=data_dict))