Source code for dpkt.vrrp

# $Id: vrrp.py 88 2013-03-05 19:43:17Z [email protected] $
# -*- coding: utf-8 -*-
"""Virtual Router Redundancy Protocol."""
from __future__ import print_function
from __future__ import absolute_import

from . import dpkt
from .decorators import deprecated


[docs]class VRRP(dpkt.Packet): """Virtual Router Redundancy Protocol. TODO: Longer class information.... Attributes: __hdr__: Header fields of VRRP. TODO. """ __hdr__ = ( ('_v_type', 'B', 0x21), ('vrid', 'B', 0), ('priority', 'B', 0), ('count', 'B', 0), ('atype', 'B', 0), ('advtime', 'B', 0), ('sum', 'H', 0), ) addrs = () auth = '' @property def v(self): # high 4 bits of _v_type return self._v_type >> 4 @v.setter def v(self, v): self._v_type = (self._v_type & 0x0f) | (v << 4) @property def type(self): # low 4 bits of _v_type return self._v_type & 0x0f @type.setter def type(self, v): self._v_type = (self._v_type & 0xf0) | (v & 0x0f)
[docs] def unpack(self, buf): dpkt.Packet.unpack(self, buf) l = [] off = 0 for off in range(0, 4 * self.count, 4): l.append(self.data[off:off + 4]) self.addrs = l self.auth = self.data[off + 4:] self.data = ''
def __len__(self): return self.__hdr_len__ + (4 * self.count) + len(self.auth) def __bytes__(self): data = b''.join(self.addrs) + self.auth if not self.sum: self.sum = dpkt.in_cksum(self.pack_hdr() + data) return self.pack_hdr() + data
[docs]def test_vrrp(): # no addresses s = b'\x00\x00\x00\x00\x00\x00\xff\xff' v = VRRP(s) assert v.sum == 0xffff assert bytes(v) == s # have address s = b'\x21\x01\x64\x01\x00\x01\xba\x52\xc0\xa8\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00' v = VRRP(s) assert v.count == 1 assert v.addrs == [b'\xc0\xa8\x00\x01'] # 192.168.0.1 assert bytes(v) == s # test checksum generation v.sum = 0 assert bytes(v) == s # test length assert len(v) == len(s) # test getters assert v.v == 2 assert v.type == 1 # test setters v.v = 3 v.type = 2 assert bytes(v)[0] == b'\x32'[0]
if __name__ == '__main__': test_vrrp() print('Tests Successful...')