Lines Matching refs:arp

56 static void rlb_purge_src_ip(struct bonding *bond, struct arp_pkt *arp);
248 static void rlb_update_entry_from_arp(struct bonding *bond, struct arp_pkt *arp) in rlb_update_entry_from_arp() argument
256 hash_index = _simple_hash((u8 *)&(arp->ip_src), sizeof(arp->ip_src)); in rlb_update_entry_from_arp()
260 (client_info->ip_src == arp->ip_dst) && in rlb_update_entry_from_arp()
261 (client_info->ip_dst == arp->ip_src) && in rlb_update_entry_from_arp()
262 (!ether_addr_equal_64bits(client_info->mac_dst, arp->mac_src))) { in rlb_update_entry_from_arp()
264 ether_addr_copy(client_info->mac_dst, arp->mac_src); in rlb_update_entry_from_arp()
275 struct arp_pkt *arp, _arp; in rlb_arp_recv() local
280 arp = skb_header_pointer(skb, 0, sizeof(_arp), &_arp); in rlb_arp_recv()
281 if (!arp) in rlb_arp_recv()
294 rlb_purge_src_ip(bond, arp); in rlb_arp_recv()
296 if (arp->op_code == htons(ARPOP_REPLY)) { in rlb_arp_recv()
298 rlb_update_entry_from_arp(bond, arp); in rlb_arp_recv()
555 const struct arp_pkt *arp) in rlb_choose_channel() argument
566 hash_index = _simple_hash((u8 *)&arp->ip_dst, sizeof(arp->ip_dst)); in rlb_choose_channel()
570 if ((client_info->ip_src == arp->ip_src) && in rlb_choose_channel()
571 (client_info->ip_dst == arp->ip_dst)) { in rlb_choose_channel()
573 if (!is_broadcast_ether_addr(arp->mac_dst)) { in rlb_choose_channel()
575 ether_addr_copy(client_info->mac_dst, arp->mac_dst); in rlb_choose_channel()
577 ether_addr_copy(client_info->mac_src, arp->mac_src); in rlb_choose_channel()
601 client_info->ip_src == arp->ip_src)) { in rlb_choose_channel()
605 u32 hash_src = _simple_hash((u8 *)&arp->ip_src, in rlb_choose_channel()
606 sizeof(arp->ip_src)); in rlb_choose_channel()
611 client_info->ip_src = arp->ip_src; in rlb_choose_channel()
612 client_info->ip_dst = arp->ip_dst; in rlb_choose_channel()
617 ether_addr_copy(client_info->mac_dst, arp->mac_dst); in rlb_choose_channel()
618 ether_addr_copy(client_info->mac_src, arp->mac_src); in rlb_choose_channel()
657 struct arp_pkt *arp; in rlb_arp_xmit() local
659 if (!pskb_network_may_pull(skb, sizeof(*arp))) in rlb_arp_xmit()
661 arp = (struct arp_pkt *)skb_network_header(skb); in rlb_arp_xmit()
666 if (!bond_slave_has_mac_rx(bond, arp->mac_src)) in rlb_arp_xmit()
669 dev = ip_dev_find(dev_net(bond->dev), arp->ip_src); in rlb_arp_xmit()
678 if (arp->op_code == htons(ARPOP_REPLY)) { in rlb_arp_xmit()
680 tx_slave = rlb_choose_channel(skb, bond, arp); in rlb_arp_xmit()
682 bond_hw_addr_copy(arp->mac_src, tx_slave->dev->dev_addr, in rlb_arp_xmit()
686 } else if (arp->op_code == htons(ARPOP_REQUEST)) { in rlb_arp_xmit()
692 tx_slave = rlb_choose_channel(skb, bond, arp); in rlb_arp_xmit()
704 rlb_req_update_subnet_clients(bond, arp->ip_src); in rlb_arp_xmit()
834 static void rlb_purge_src_ip(struct bonding *bond, struct arp_pkt *arp) in rlb_purge_src_ip() argument
837 u32 ip_src_hash = _simple_hash((u8 *)&(arp->ip_src), sizeof(arp->ip_src)); in rlb_purge_src_ip()
847 if (entry->ip_src == arp->ip_src && in rlb_purge_src_ip()
848 !ether_addr_equal_64bits(arp->mac_src, entry->mac_src)) in rlb_purge_src_ip()