"""Protocol Independent Multicast."""

from pypacker import pypacker, checksum


class PIM(pypacker.Packet):
	__hdr__ = (
		("v_type", "B", 0x20),
		("rsvd", "B", 0),
		("sum", "H", 0)		# _sum = sum
	)

	def __get_v(self):
		return self.v_type >> 4

	def __set_v(self, v):
		self.v_type = (v << 4) | (self.v_type & 0xf)
	v = property(__get_v, __set_v)

	def __get_type(self):
		return self.v_type & 0xf

	def __set_type(self, pimtype):
		self.v_type = (self.v_type & 0xf0) | pimtype
	type = property(__get_type, __set_type)

	def bin(self, update_auto_fields=True):
		if update_auto_fields and self._changed():
			self.sum = 0
			self.sum = checksum.in_cksum(pypacker.Packet.bin(self))
		return pypacker.Packet.bin(self, update_auto_fields=update_auto_fields)
