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') ] )
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
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'])
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)
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')
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]), ])
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' ) ] )