summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorIWASE Yusuke <iwase.yusuke0@gmail.com>2016-11-07 16:04:17 +0900
committerFUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp>2016-11-11 15:27:52 +0900
commit31364ba91d12efe1ef6f6373874c153598405deb (patch)
tree6ad2db49037af1006be2016c17fa38be334d0b50
parentb9e4345d5dc3ffff78d0bcf83a66abefcc72d842 (diff)
packet/bgp: Enable Extended Length flags if specified
Currently, the Extended Length flag in path attributes is evaluated only when the length exceeds 1 byte (max 255) field. This patch enables this flags if explicitly specified. Signed-off-by: IWASE Yusuke <iwase.yusuke0@gmail.com> Signed-off-by: FUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp>
-rw-r--r--ryu/lib/packet/bgp.py11
1 files changed, 7 insertions, 4 deletions
diff --git a/ryu/lib/packet/bgp.py b/ryu/lib/packet/bgp.py
index 9d77cdb9..0086a927 100644
--- a/ryu/lib/packet/bgp.py
+++ b/ryu/lib/packet/bgp.py
@@ -2248,12 +2248,15 @@ class _PathAttribute(StringifyMixin, _TypeDisp, _Value):
def serialize(self):
# fixup
if self._ATTR_FLAGS is not None:
- self.flags = self.flags \
- & ~(BGP_ATTR_FLAG_OPTIONAL | BGP_ATTR_FLAG_TRANSITIVE) \
- | self._ATTR_FLAGS
+ self.flags = (
+ self.flags
+ & ~(BGP_ATTR_FLAG_OPTIONAL | BGP_ATTR_FLAG_TRANSITIVE)
+ | self._ATTR_FLAGS)
value = self.serialize_value()
self.length = len(value)
- if self.length > 255:
+ if self.flags & BGP_ATTR_FLAG_EXTENDED_LENGTH:
+ len_pack_str = self._PACK_STR_EXT_LEN
+ elif self.length > 255:
self.flags |= BGP_ATTR_FLAG_EXTENDED_LENGTH
len_pack_str = self._PACK_STR_EXT_LEN
else: