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