1"""Virtual Router Redundancy Protocol.""" 2 3from pypacker import pypacker, checksum 4from pypacker.pypacker import FIELD_FLAG_AUTOUPDATE 5 6 7class VRRP(pypacker.Packet): 8 __hdr__ = ( 9 ("vtype", "B", 0x21), 10 ("vrid", "B", 0), 11 ("priority", "B", 0), 12 ("count", "B", 0), 13 ("atype", "B", 0), 14 ("advtime", "B", 0), 15 ("sum", "H", 0, FIELD_FLAG_AUTOUPDATE), 16 ) 17 18 def __get_v(self): 19 return self.vtype >> 4 20 21 def __set_v(self, v): 22 self.vtype = (self.vtype & ~0xF) | (v << 4) 23 v = property(__get_v, __set_v) 24 25 def __get_type(self): 26 return self.vtype & 0xF 27 28 def __set_type(self, v): 29 self.vtype = (self.vtype & ~0xF0) | (v & 0xF) 30 type = property(__get_type, __set_type) 31 32 def _update_fields(self): 33 if self.sum_au_active and self._changed(): 34 # logger.debug(">>> IP: calculating sum") 35 # reset checksum for recalculation, mark as changed / clear cache 36 self.sum = 0 37 # logger.debug(">>> IP: bytes for sum: %s" % self.header_bytes) 38 self.sum = checksum.in_cksum(pypacker.Packet.bin(self, update_auto_fields=True)) 39