From 31364ba91d12efe1ef6f6373874c153598405deb Mon Sep 17 00:00:00 2001 From: IWASE Yusuke Date: Mon, 7 Nov 2016 16:04:17 +0900 Subject: [PATCH] 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 Signed-off-by: FUJITA Tomonori --- ryu/lib/packet/bgp.py | 11 +++++++---- 1 file 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: