Lines Matching refs:f

457 	struct vxlan_fdb f = {  in vxlan_ip_miss()  local
465 vxlan_fdb_notify(vxlan, &f, &remote, RTM_GETNEIGH, true, NULL); in vxlan_ip_miss()
470 struct vxlan_fdb f = { in vxlan_fdb_miss() local
475 memcpy(f.eth_addr, eth_addr, ETH_ALEN); in vxlan_fdb_miss()
477 vxlan_fdb_notify(vxlan, &f, &remote, RTM_GETNEIGH, true, NULL); in vxlan_fdb_miss()
522 struct vxlan_fdb *f; in __vxlan_find_mac() local
524 hlist_for_each_entry_rcu(f, head, hlist) { in __vxlan_find_mac()
525 if (ether_addr_equal(mac, f->eth_addr)) { in __vxlan_find_mac()
527 if (vni == f->vni) in __vxlan_find_mac()
528 return f; in __vxlan_find_mac()
530 return f; in __vxlan_find_mac()
541 struct vxlan_fdb *f; in vxlan_find_mac() local
543 f = __vxlan_find_mac(vxlan, mac, vni); in vxlan_find_mac()
544 if (f && f->used != jiffies) in vxlan_find_mac()
545 f->used = jiffies; in vxlan_find_mac()
547 return f; in vxlan_find_mac()
551 static struct vxlan_rdst *vxlan_fdb_find_rdst(struct vxlan_fdb *f, in vxlan_fdb_find_rdst() argument
557 list_for_each_entry(rd, &f->remotes, list) { in vxlan_fdb_find_rdst()
574 struct vxlan_fdb *f; in vxlan_fdb_find_uc() local
585 f = __vxlan_find_mac(vxlan, eth_addr, vni); in vxlan_fdb_find_uc()
586 if (!f) { in vxlan_fdb_find_uc()
591 rdst = first_remote_rcu(f); in vxlan_fdb_find_uc()
592 vxlan_fdb_switchdev_notifier_info(vxlan, f, rdst, NULL, fdb_info); in vxlan_fdb_find_uc()
602 const struct vxlan_fdb *f, in vxlan_fdb_notify_one() argument
609 vxlan_fdb_switchdev_notifier_info(vxlan, f, rdst, extack, &fdb_info); in vxlan_fdb_notify_one()
621 struct vxlan_fdb *f; in vxlan_fdb_replay() local
631 hlist_for_each_entry(f, &vxlan->fdb_head[h], hlist) { in vxlan_fdb_replay()
632 if (f->vni == vni) { in vxlan_fdb_replay()
633 list_for_each_entry(rdst, &f->remotes, list) { in vxlan_fdb_replay()
635 f, rdst, in vxlan_fdb_replay()
656 struct vxlan_fdb *f; in vxlan_fdb_clear_offload() local
665 hlist_for_each_entry(f, &vxlan->fdb_head[h], hlist) in vxlan_fdb_clear_offload()
666 if (f->vni == vni) in vxlan_fdb_clear_offload()
667 list_for_each_entry(rdst, &f->remotes, list) in vxlan_fdb_clear_offload()
676 static int vxlan_fdb_replace(struct vxlan_fdb *f, in vxlan_fdb_replace() argument
682 rd = vxlan_fdb_find_rdst(f, ip, port, vni, ifindex); in vxlan_fdb_replace()
686 rd = list_first_entry_or_null(&f->remotes, struct vxlan_rdst, list); in vxlan_fdb_replace()
701 static int vxlan_fdb_append(struct vxlan_fdb *f, in vxlan_fdb_append() argument
707 rd = vxlan_fdb_find_rdst(f, ip, port, vni, ifindex); in vxlan_fdb_append()
726 list_add_tail_rcu(&rd->list, &f->remotes); in vxlan_fdb_append()
831 struct vxlan_fdb *f; in vxlan_fdb_alloc() local
833 f = kmalloc(sizeof(*f), GFP_ATOMIC); in vxlan_fdb_alloc()
834 if (!f) in vxlan_fdb_alloc()
836 f->state = state; in vxlan_fdb_alloc()
837 f->flags = ndm_flags; in vxlan_fdb_alloc()
838 f->updated = f->used = jiffies; in vxlan_fdb_alloc()
839 f->vni = src_vni; in vxlan_fdb_alloc()
840 f->nh = NULL; in vxlan_fdb_alloc()
841 RCU_INIT_POINTER(f->vdev, vxlan); in vxlan_fdb_alloc()
842 INIT_LIST_HEAD(&f->nh_list); in vxlan_fdb_alloc()
843 INIT_LIST_HEAD(&f->remotes); in vxlan_fdb_alloc()
844 memcpy(f->eth_addr, mac, ETH_ALEN); in vxlan_fdb_alloc()
846 return f; in vxlan_fdb_alloc()
850 __be32 src_vni, struct vxlan_fdb *f) in vxlan_fdb_insert() argument
853 hlist_add_head_rcu(&f->hlist, in vxlan_fdb_insert()
929 struct vxlan_fdb *f; in vxlan_fdb_create() local
937 f = vxlan_fdb_alloc(vxlan, mac, state, src_vni, ndm_flags); in vxlan_fdb_create()
938 if (!f) in vxlan_fdb_create()
942 rc = vxlan_fdb_nh_update(vxlan, f, nhid, extack); in vxlan_fdb_create()
944 rc = vxlan_fdb_append(f, ip, port, vni, ifindex, &rd); in vxlan_fdb_create()
948 *fdb = f; in vxlan_fdb_create()
953 kfree(f); in vxlan_fdb_create()
957 static void __vxlan_fdb_free(struct vxlan_fdb *f) in __vxlan_fdb_free() argument
962 nh = rcu_dereference_raw(f->nh); in __vxlan_fdb_free()
964 rcu_assign_pointer(f->nh, NULL); in __vxlan_fdb_free()
965 rcu_assign_pointer(f->vdev, NULL); in __vxlan_fdb_free()
969 list_for_each_entry_safe(rd, nd, &f->remotes, list) { in __vxlan_fdb_free()
973 kfree(f); in __vxlan_fdb_free()
978 struct vxlan_fdb *f = container_of(head, struct vxlan_fdb, rcu); in vxlan_fdb_free() local
980 __vxlan_fdb_free(f); in vxlan_fdb_free()
983 static void vxlan_fdb_destroy(struct vxlan_dev *vxlan, struct vxlan_fdb *f, in vxlan_fdb_destroy() argument
988 netdev_dbg(vxlan->dev, "delete %pM\n", f->eth_addr); in vxlan_fdb_destroy()
992 if (rcu_access_pointer(f->nh)) in vxlan_fdb_destroy()
993 vxlan_fdb_notify(vxlan, f, NULL, RTM_DELNEIGH, in vxlan_fdb_destroy()
996 list_for_each_entry(rd, &f->remotes, list) in vxlan_fdb_destroy()
997 vxlan_fdb_notify(vxlan, f, rd, RTM_DELNEIGH, in vxlan_fdb_destroy()
1001 hlist_del_rcu(&f->hlist); in vxlan_fdb_destroy()
1002 list_del_rcu(&f->nh_list); in vxlan_fdb_destroy()
1003 call_rcu(&f->rcu, vxlan_fdb_free); in vxlan_fdb_destroy()
1019 struct vxlan_fdb *f, u32 nhid, in vxlan_fdb_update_existing() argument
1030 if (nhid && !rcu_access_pointer(f->nh)) { in vxlan_fdb_update_existing()
1046 !(f->flags & NTF_VXLAN_ADDED_BY_USER)) { in vxlan_fdb_update_existing()
1047 if (f->state != state) { in vxlan_fdb_update_existing()
1048 f->state = state; in vxlan_fdb_update_existing()
1049 f->updated = jiffies; in vxlan_fdb_update_existing()
1052 if (f->flags != fdb_flags) { in vxlan_fdb_update_existing()
1053 f->flags = fdb_flags; in vxlan_fdb_update_existing()
1054 f->updated = jiffies; in vxlan_fdb_update_existing()
1061 if (!(is_multicast_ether_addr(f->eth_addr) || in vxlan_fdb_update_existing()
1062 is_zero_ether_addr(f->eth_addr))) { in vxlan_fdb_update_existing()
1064 rc = vxlan_fdb_nh_update(vxlan, f, nhid, extack); in vxlan_fdb_update_existing()
1068 rc = vxlan_fdb_replace(f, ip, port, vni, in vxlan_fdb_update_existing()
1078 (is_multicast_ether_addr(f->eth_addr) || in vxlan_fdb_update_existing()
1079 is_zero_ether_addr(f->eth_addr))) { in vxlan_fdb_update_existing()
1080 rc = vxlan_fdb_append(f, ip, port, vni, ifindex, &rd); in vxlan_fdb_update_existing()
1088 f->used = jiffies; in vxlan_fdb_update_existing()
1092 rd = first_remote_rtnl(f); in vxlan_fdb_update_existing()
1094 err = vxlan_fdb_notify(vxlan, f, rd, RTM_NEWNEIGH, in vxlan_fdb_update_existing()
1123 struct vxlan_fdb *f; in vxlan_fdb_update_create() local
1133 vni, ifindex, fdb_flags, nhid, &f, extack); in vxlan_fdb_update_create()
1137 vxlan_fdb_insert(vxlan, mac, src_vni, f); in vxlan_fdb_update_create()
1138 rc = vxlan_fdb_notify(vxlan, f, first_remote_rtnl(f), RTM_NEWNEIGH, in vxlan_fdb_update_create()
1146 vxlan_fdb_destroy(vxlan, f, false, false); in vxlan_fdb_update_create()
1159 struct vxlan_fdb *f; in vxlan_fdb_update() local
1161 f = __vxlan_find_mac(vxlan, mac, src_vni); in vxlan_fdb_update()
1162 if (f) { in vxlan_fdb_update()
1170 vni, ifindex, ndm_flags, f, in vxlan_fdb_update()
1183 static void vxlan_fdb_dst_destroy(struct vxlan_dev *vxlan, struct vxlan_fdb *f, in vxlan_fdb_dst_destroy() argument
1187 vxlan_fdb_notify(vxlan, f, rd, RTM_DELNEIGH, swdev_notify, NULL); in vxlan_fdb_dst_destroy()
1314 struct vxlan_fdb *f; in __vxlan_fdb_delete() local
1317 f = vxlan_find_mac(vxlan, addr, src_vni); in __vxlan_fdb_delete()
1318 if (!f) in __vxlan_fdb_delete()
1322 rd = vxlan_fdb_find_rdst(f, &ip, port, vni, ifindex); in __vxlan_fdb_delete()
1330 if (rd && !list_is_singular(&f->remotes)) { in __vxlan_fdb_delete()
1331 vxlan_fdb_dst_destroy(vxlan, f, rd, swdev_notify); in __vxlan_fdb_delete()
1335 vxlan_fdb_destroy(vxlan, f, true, swdev_notify); in __vxlan_fdb_delete()
1378 struct vxlan_fdb *f; in vxlan_fdb_dump() local
1381 hlist_for_each_entry_rcu(f, &vxlan->fdb_head[h], hlist) { in vxlan_fdb_dump()
1384 if (rcu_access_pointer(f->nh)) { in vxlan_fdb_dump()
1387 err = vxlan_fdb_info(skb, vxlan, f, in vxlan_fdb_dump()
1401 list_for_each_entry_rcu(rd, &f->remotes, list) { in vxlan_fdb_dump()
1405 err = vxlan_fdb_info(skb, vxlan, f, in vxlan_fdb_dump()
1432 struct vxlan_fdb *f; in vxlan_fdb_get() local
1443 f = __vxlan_find_mac(vxlan, addr, vni); in vxlan_fdb_get()
1444 if (!f) { in vxlan_fdb_get()
1450 err = vxlan_fdb_info(skb, vxlan, f, portid, seq, in vxlan_fdb_get()
1451 RTM_NEWNEIGH, 0, first_remote_rcu(f)); in vxlan_fdb_get()
1466 struct vxlan_fdb *f; in vxlan_snoop() local
1475 f = vxlan_find_mac(vxlan, src_mac, vni); in vxlan_snoop()
1476 if (likely(f)) { in vxlan_snoop()
1477 struct vxlan_rdst *rdst = first_remote_rcu(f); in vxlan_snoop()
1484 if (f->state & (NUD_PERMANENT | NUD_NOARP)) in vxlan_snoop()
1488 if (rcu_access_pointer(f->nh)) in vxlan_snoop()
1497 f->updated = jiffies; in vxlan_snoop()
1498 vxlan_fdb_notify(vxlan, f, rdst, RTM_NEWNEIGH, true, NULL); in vxlan_snoop()
2022 struct vxlan_fdb *f; in arp_reduce() local
2030 f = vxlan_find_mac(vxlan, n->ha, vni); in arp_reduce()
2031 if (f && vxlan_addr_any(&(first_remote_rcu(f)->remote_ip))) { in arp_reduce()
2182 struct vxlan_fdb *f; in neigh_reduce() local
2190 f = vxlan_find_mac(vxlan, n->ha, vni); in neigh_reduce()
2191 if (f && vxlan_addr_any(&(first_remote_rcu(f)->remote_ip))) { in neigh_reduce()
2198 !!(f ? f->flags & NTF_ROUTER : 0)); in neigh_reduce()
2843 struct vxlan_fdb *f, __be32 vni, bool did_rsc) in vxlan_xmit_nh() argument
2854 nh = rcu_dereference(f->nh); in vxlan_xmit_nh()
2886 struct vxlan_fdb *f; in vxlan_xmit() local
2926 f = vxlan_find_mac(vxlan, eth->h_dest, vni); in vxlan_xmit()
2929 if (f && (f->flags & NTF_ROUTER) && (vxlan->cfg.flags & VXLAN_F_RSC) && in vxlan_xmit()
2934 f = vxlan_find_mac(vxlan, eth->h_dest, vni); in vxlan_xmit()
2937 if (f == NULL) { in vxlan_xmit()
2938 f = vxlan_find_mac(vxlan, all_zeros_mac, vni); in vxlan_xmit()
2939 if (f == NULL) { in vxlan_xmit()
2950 if (rcu_access_pointer(f->nh)) { in vxlan_xmit()
2951 vxlan_xmit_nh(skb, dev, f, in vxlan_xmit()
2954 list_for_each_entry_rcu(rdst, &f->remotes, list) { in vxlan_xmit()
2989 struct vxlan_fdb *f in vxlan_cleanup() local
2993 if (f->state & (NUD_PERMANENT | NUD_NOARP)) in vxlan_cleanup()
2996 if (f->flags & NTF_EXT_LEARNED) in vxlan_cleanup()
2999 timeout = f->used + vxlan->cfg.age_interval * HZ; in vxlan_cleanup()
3003 f->eth_addr); in vxlan_cleanup()
3004 f->state = NUD_STALE; in vxlan_cleanup()
3005 vxlan_fdb_destroy(vxlan, f, true, true); in vxlan_cleanup()
3060 struct vxlan_fdb *f; in vxlan_fdb_delete_default() local
3064 f = __vxlan_find_mac(vxlan, all_zeros_mac, vni); in vxlan_fdb_delete_default()
3065 if (f) in vxlan_fdb_delete_default()
3066 vxlan_fdb_destroy(vxlan, f, true, true); in vxlan_fdb_delete_default()
3117 struct vxlan_fdb *f in vxlan_flush() local
3119 if (!do_all && (f->state & (NUD_PERMANENT | NUD_NOARP))) in vxlan_flush()
3122 if (is_zero_ether_addr(f->eth_addr) && in vxlan_flush()
3123 f->vni == vxlan->cfg.vni) in vxlan_flush()
3125 vxlan_fdb_destroy(vxlan, f, true, true); in vxlan_flush()
3862 struct vxlan_fdb *f = NULL; in __vxlan_dev_create() local
3883 NTF_SELF, 0, &f, extack); in __vxlan_dev_create()
3909 if (f) { in __vxlan_dev_create()
3910 vxlan_fdb_insert(vxlan, all_zeros_mac, dst->remote_vni, f); in __vxlan_dev_create()
3913 err = vxlan_fdb_notify(vxlan, f, first_remote_rtnl(f), in __vxlan_dev_create()
3916 vxlan_fdb_destroy(vxlan, f, false, false); in __vxlan_dev_create()
3935 if (f) in __vxlan_dev_create()
3936 __vxlan_fdb_free(f); in __vxlan_dev_create()
4560 struct vxlan_fdb *f; in vxlan_fdb_offloaded_set() local
4567 f = vxlan_find_mac(vxlan, fdb_info->eth_addr, fdb_info->vni); in vxlan_fdb_offloaded_set()
4568 if (!f) in vxlan_fdb_offloaded_set()
4571 rdst = vxlan_fdb_find_rdst(f, &fdb_info->remote_ip, in vxlan_fdb_offloaded_set()
4616 struct vxlan_fdb *f; in vxlan_fdb_external_learn_del() local
4623 f = vxlan_find_mac(vxlan, fdb_info->eth_addr, fdb_info->vni); in vxlan_fdb_external_learn_del()
4624 if (!f) in vxlan_fdb_external_learn_del()
4626 else if (f->flags & NTF_EXT_LEARNED) in vxlan_fdb_external_learn_del()