summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorYAMAMOTO Takashi <yamamoto@valinux.co.jp>2013-10-08 15:29:40 +0900
committerFUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp>2013-10-08 16:04:16 +0900
commit2494ab9abb685b5af6c37d06eaddfc9fa712bf8a (patch)
treea4c4922d9acbde6dd54dda1ad4e20da2d708fa26
parentcf9cb7e7acff0e67097ba5bec383e57f64e2b6a8 (diff)
packet.bgp: parse/serialize FOUR OCTET AS NUMBER capability
Signed-off-by: YAMAMOTO Takashi <yamamoto@valinux.co.jp> Signed-off-by: FUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp>
-rw-r--r--ryu/lib/packet/bgp.py19
-rw-r--r--ryu/tests/unit/packet/test_bgp.py2
2 files changed, 21 insertions, 0 deletions
diff --git a/ryu/lib/packet/bgp.py b/ryu/lib/packet/bgp.py
index 1d3d2e62..48d3f833 100644
--- a/ryu/lib/packet/bgp.py
+++ b/ryu/lib/packet/bgp.py
@@ -277,6 +277,25 @@ class BGPOptParamCapabilityRouteRefresh(_OptParamCapability):
return bytearray()
+@_OptParamCapability.register_type(BGP_CAP_FOUR_OCTET_AS_NUMBER)
+class BGPOptParamCapabilityFourOctetAsNumber(_OptParamCapability):
+ _CAP_PACK_STR = '!I'
+
+ def __init__(self, as_number, **kwargs):
+ super(BGPOptParamCapabilityFourOctetAsNumber, self).__init__(**kwargs)
+ self.as_number = as_number
+
+ @classmethod
+ def parse_cap_value(cls, buf):
+ (as_number, ) = struct.unpack_from(cls._CAP_PACK_STR, buffer(buf))
+ return {'as_number': as_number}
+
+ def serialize_cap_value(self):
+ buf = bytearray()
+ msg_pack_into(self._CAP_PACK_STR, buf, 0, self.as_number)
+ return buf
+
+
class BGPWithdrawnRoute(_IPAddrPrefix):
pass
diff --git a/ryu/tests/unit/packet/test_bgp.py b/ryu/tests/unit/packet/test_bgp.py
index fa3b9f3c..2e1da861 100644
--- a/ryu/tests/unit/packet/test_bgp.py
+++ b/ryu/tests/unit/packet/test_bgp.py
@@ -45,6 +45,8 @@ class Test_bgp(unittest.TestCase):
opt_param = [bgp.BGPOptParamCapabilityUnknown(cap_code=200,
cap_value='hoge'),
bgp.BGPOptParamCapabilityRouteRefresh(),
+ bgp.BGPOptParamCapabilityFourOctetAsNumber(
+ as_number=1234567),
bgp.BGPOptParamUnknown(type_=99, value='fuga')]
msg = bgp.BGPOpen(my_as=30000, bgp_identifier='192.0.2.2',
opt_param=opt_param)