diff options
author | YAMAMOTO Takashi <yamamoto@valinux.co.jp> | 2013-10-08 15:29:40 +0900 |
---|---|---|
committer | FUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp> | 2013-10-08 16:04:16 +0900 |
commit | 2494ab9abb685b5af6c37d06eaddfc9fa712bf8a (patch) | |
tree | a4c4922d9acbde6dd54dda1ad4e20da2d708fa26 | |
parent | cf9cb7e7acff0e67097ba5bec383e57f64e2b6a8 (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.py | 19 | ||||
-rw-r--r-- | ryu/tests/unit/packet/test_bgp.py | 2 |
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) |