| @@ 31-64 (lines=34) @@ | ||
| 28 | # 3.2. SRv6 L3 Service |
|
| 29 | ||
| 30 | ||
| 31 | @PrefixSid.register() |
|
| 32 | class Srv6L3vpnSid(object): |
|
| 33 | TLV = 5 |
|
| 34 | LENGTH = 21 |
|
| 35 | ||
| 36 | def __init__ (self,l3vpnsid,packed=None): |
|
| 37 | self.l3vpnsid = l3vpnsid |
|
| 38 | self.packed = self.pack() |
|
| 39 | ||
| 40 | def __repr__ (self): |
|
| 41 | return "srv6-l3vpn-sid %s" % (self.l3vpnsid) |
|
| 42 | ||
| 43 | def pack (self): |
|
| 44 | return concat_bytes( |
|
| 45 | pack('!B', self.TLV), |
|
| 46 | pack('!H', self.LENGTH), |
|
| 47 | pack('!B', 0), |
|
| 48 | IP.pton(self.l3vpnsid), |
|
| 49 | pack('!B', 0), |
|
| 50 | pack('!H', 0xffff), |
|
| 51 | pack('!B', 0), |
|
| 52 | ) |
|
| 53 | ||
| 54 | @classmethod |
|
| 55 | def unpack (cls,data,length): |
|
| 56 | l3vpnsid = -1 |
|
| 57 | if cls.LENGTH != length: |
|
| 58 | raise Notify(3,5, "Invalid TLV size. Should be {0} but {1} received".format(cls.LENGTH, length)) |
|
| 59 | data = data[1:17] |
|
| 60 | l3vpnsid = IP.unpack(data) |
|
| 61 | return cls(l3vpnsid=l3vpnsid,packed=data) |
|
| 62 | ||
| 63 | def json (self, compact=None): |
|
| 64 | return '"srv6-vpn-sid": "%s"' % (self.l3vpnsid) |
|
| 65 | ||
| @@ 32-64 (lines=33) @@ | ||
| 29 | # 3.2. SRv6 VPN SID |
|
| 30 | ||
| 31 | ||
| 32 | @PrefixSid.register() |
|
| 33 | class Srv6VpnSid(object): |
|
| 34 | TLV = 4 |
|
| 35 | LENGTH = 19 |
|
| 36 | ||
| 37 | def __init__ (self,vpnsid,packed=None): |
|
| 38 | self.vpnsid = vpnsid |
|
| 39 | self.packed = self.pack() |
|
| 40 | ||
| 41 | def __repr__ (self): |
|
| 42 | return "srv6-vpn-sid %s" % (self.vpnsid) |
|
| 43 | ||
| 44 | def pack (self): |
|
| 45 | return concat_bytes( |
|
| 46 | pack('!B', self.TLV), |
|
| 47 | pack('!H', self.LENGTH), |
|
| 48 | pack('!B', 0), |
|
| 49 | pack('!B', 0), |
|
| 50 | pack('!B', 0), |
|
| 51 | IP.pton(self.vpnsid) |
|
| 52 | ) |
|
| 53 | ||
| 54 | @classmethod |
|
| 55 | def unpack (cls,data,length): |
|
| 56 | vpnsid = -1 |
|
| 57 | if cls.LENGTH != length: |
|
| 58 | raise Notify(3,5, "Invalid TLV size. Should be {0} but {1} received".format(cls.LENGTH, length)) |
|
| 59 | data = data[3:19] |
|
| 60 | vpnsid = IP.unpack(data) |
|
| 61 | return cls(vpnsid=vpnsid,packed=data) |
|
| 62 | ||
| 63 | def json (self, compact=None): |
|
| 64 | return '"srv6-vpn-sid": "%s"' % (self.vpnsid) |
|
| 65 | ||