def _garp_packet(self, ip_address): # prepare garp packet src_mac = vrrp.vrrp_ipv4_src_mac_address(self.config.vrid) e = ethernet.ethernet(mac_lib.BROADCAST_STR, src_mac, ether.ETH_TYPE_ARP) a = arp.arp_ip(arp.ARP_REQUEST, src_mac, ip_address, mac_lib.DONTCARE_STR, ip_address) p = packet.Packet() p.add_protocol(e) utils.may_add_vlan(p, self.interface.vlan_id) p.add_protocol(a) p.serialize() return p
def _arp_reply_packet(self, arp_req_sha, arp_req_spa, arp_req_tpa): if not (arp_req_tpa in self.config.ip_addresses or arp_req_tpa == self.config.primary_ip_address): return None src_mac = vrrp.vrrp_ipv4_src_mac_address(self.config.vrid) e = ethernet.ethernet(arp_req_sha, src_mac, ether.ETH_TYPE_ARP) a = arp.arp_ip(arp.ARP_REPLY, src_mac, arp_req_tpa, arp_req_sha, arp_req_spa) p = packet.Packet() p.add_protocol(e) utils.may_add_vlan(p, self.interface.vlan_id) p.add_protocol(a) p.serialize() self._transmit(p.data)