Пример #1
0
    def test_decode(self):
        payload = '\x00\x01'# afi
        payload += chr(128) # safi

        prefix = '\x80\x00\x00'     # mpls special no-label
        prefix += '\x00\x01\xc0\xa8\x00\x00\x00\x02'    # rd 192.168.0.0:2

        prefix += '\xc0\xa8\x02\x80'    # 192.168.2
        masklen = 25

        prefix_len = 24 + 8*8 + masklen

        payload += chr(prefix_len)
        payload += prefix

        b = '\x00\x0f'
        b += chr(len(payload))
        b += payload

        used, mpunreach = pathattr.decode(b)

        self.assertEqual(used, len(b))
        self.failUnless(isinstance(mpunreach, pathattr.MpUnreachNlri))

        self.assertEqual(mpunreach.value['afi'], 1)
        self.assertEqual(mpunreach.value['safi'], 128)
        self.assertEqual(mpunreach.value['withdraw'], [
            nlri.vpnv4(None, '192.168.0.0:2', '192.168.2.128/25')
            ]
            )
Пример #2
0
    def from_bytes(cls, bytes):
        self = cls()

        d = {}

        idx = 0
        for kind in ('withdraw', 'pathattr'):
            plen, = struct.unpack_from('!H', bytes, idx)
            idx += 2
            d[kind] = bytes[idx:idx+plen]
            idx += plen

        self.nlri = nlri.parse(bytes[idx:])
        self.withdraw = nlri.parse(d['withdraw'])

        self.pathattr = OD()

        idx = 0
        bytes = d['pathattr']

        while idx < len(bytes):

            used, pattr = pathattr.decode(bytes, idx)
            idx += used
            self.pathattr[pattr.type] = pattr

        return self
Пример #3
0
    def test_decode(self):
        b = '\x00\x10\x08\x01\x02\xc0\xa8\x00\x00\x00\x01'

        used, ext = pathattr.decode(b)

        self.assertEqual(used, len(b))
        self.failUnless(isinstance(ext, pathattr.ExtCommunity))

        self.assertEqual(ext.value, ['RT:192.168.0.0:1'])
Пример #4
0
    def test_decode(self):
        b = '\x80\x04\x04\x00\x00\x00 '

        used, med = pathattr.decode(b)

        self.assertEqual(used, len(b))
        self.failUnless(isinstance(med, pathattr.Med))

        self.assertEqual(med.value, 32)
Пример #5
0
    def test_decode(self):
        b = '\x40\x01\x01\x02'

        used, orig = pathattr.decode(b)

        self.assertEqual(used, len(b))
        self.failUnless(isinstance(orig, pathattr.Origin))

        self.assertEqual(orig.value, 'incomplete')
Пример #6
0
    def test_decode(self):
        b = self.sample()

        used, aspath = pathattr.decode(b)

        self.assertEqual(used, len(b))
        self.failUnless(isinstance(aspath, pathattr.AsPath))

        self.assertEqual(aspath.value, [
            [65535,65534],
            set([57005,48879]),
            ])
Пример #7
0
    def test_decode(self):
        nh = '\0'*8 + socket.inet_aton('192.168.1.1')

        payload = '\x00\x01'# afi
        payload += chr(128) # safi
        payload += chr(len(nh))
        payload += nh
        payload += chr(0)   # reserved

        prefix = '\x00\x06\xf0'     # mpls label 0x0006f
        prefix += '\x00\x0d\xe0'    # mpls label 0x000de
        prefix += '\x00\x14\xd1'    # mpls label 0x0014d & bottom of stack
        prefix += '\x00\x01\xc0\xa8\x00\x00\x00\x02'    # rd 192.168.0.0:2

        prefix += '\xc0\xa8\x02\x80'    # 192.168.2
        masklen = 25

        prefix_len = 3*24 + 8*8 + masklen

        payload += chr(prefix_len)
        payload += prefix

        b = '\x00\x0e'
        b += chr(len(payload))
        b += payload

        used, mpreach = pathattr.decode(b)

        self.assertEqual(used, len(b))
        self.failUnless(isinstance(mpreach, pathattr.MpReachNlri))

        self.assertEqual(mpreach.value['afi'], 1)
        self.assertEqual(mpreach.value['safi'], 128)
        self.assertEqual(mpreach.value['nh'], '192.168.1.1')
        self.assertEqual(mpreach.value['nlri'], [
            nlri.vpnv4(
                [0x6f, 0xde, 0x14d],
                '192.168.0.0:2',
                '192.168.2.128/25'
                )
            ]
            )