12345678910111213141516171819202122232425262728293031323334353637383940 |
- """Virtual Router Redundancy Protocol."""
- from pypacker import pypacker, checksum
- class VRRP(pypacker.Packet):
- __hdr__ = (
- ("vtype", "B", 0x21),
- ("vrid", "B", 0),
- ("priority", "B", 0),
- ("count", "B", 0),
- ("atype", "B", 0),
- ("advtime", "B", 0),
- ("sum", "H", 0),
- )
- def __get_v(self):
- return self.vtype >> 4
- def __set_v(self, v):
- self.vtype = (self.vtype & ~0xf) | (v << 4)
- v = property(__get_v, __set_v)
- def __get_type(self):
- return self.vtype & 0xf
- def __set_type(self, v):
- self.vtype = (self.vtype & ~0xf0) | (v & 0xf)
- type = property(__get_type, __set_type)
- def bin(self, update_auto_fields=True):
- if update_auto_fields:
- if self._changed():
- # logger.debug(">>> IP: calculating sum")
- # reset checksum for recalculation, mark as changed / clear cache
- self.sum = 0
- # logger.debug(">>> IP: bytes for sum: %s" % self.header_bytes)
- self.sum = checksum.in_cksum(pypacker.Packet.bin())
- return pypacker.Packet.bin(self, update_auto_fields=update_auto_fields)
|