1# encoding: utf-8 2""" 3nodename.py 4 5Created by Evelio Vila on 2016-12-01. 6Copyright (c) 2014-2017 Exa Networks. All rights reserved. 7""" 8 9import binascii 10 11from exabgp.bgp.message.notification import Notify 12 13from exabgp.bgp.message.update.attribute.bgpls.linkstate import LINKSTATE 14 15 16# 0 1 2 3 17# 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 18# +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 19# | Type | Length | 20# +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 21# // Node Name (variable) // 22# +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 23# https://tools.ietf.org/html/rfc7752 Sec 3.3.1.3. Node Name TLV 24 25 26@LINKSTATE.register() 27class NodeName(object): 28 TLV = 1026 29 30 def __init__(self, nodename): 31 self.nodename = nodename 32 33 def __repr__(self): 34 return "nodename: %s" % (self.nodename) 35 36 @classmethod 37 def unpack(cls, data, length): 38 if length > 255: 39 raise Notify(3, 5, "Node Name TLV length too large") 40 else: 41 nodename = data[:length].decode('ascii') 42 return cls(nodename=nodename) 43 44 def json(self, compact=None): 45 return '"node-name": "%s"' % str(self.nodename) 46