Lines Matching refs:fdb

81 				  const struct net_bridge_fdb_entry *fdb)  in has_expired()  argument
83 return !fdb->is_static && !fdb->added_by_external_learn && in has_expired()
84 time_before_eq(fdb->updated + hold_time(br), jiffies); in has_expired()
113 struct net_bridge_fdb_entry *fdb; in br_fdb_find() local
118 fdb = fdb_find_rcu(&br->fdb_hash_tbl, addr, vid); in br_fdb_find()
121 return fdb; in br_fdb_find()
421 struct net_bridge_fdb_entry *fdb; in br_fdb_test_addr() local
430 fdb = br_fdb_find_rcu(port->br, addr, 0); in br_fdb_test_addr()
431 ret = fdb && fdb->dst && fdb->dst->dev != dev && in br_fdb_test_addr()
432 fdb->dst->state == BR_STATE_FORWARDING; in br_fdb_test_addr()
495 struct net_bridge_fdb_entry *fdb; in fdb_create() local
497 fdb = kmem_cache_alloc(br_fdb_cache, GFP_ATOMIC); in fdb_create()
498 if (fdb) { in fdb_create()
499 memcpy(fdb->key.addr.addr, addr, ETH_ALEN); in fdb_create()
500 fdb->dst = source; in fdb_create()
501 fdb->key.vlan_id = vid; in fdb_create()
502 fdb->is_local = is_local; in fdb_create()
503 fdb->is_static = is_static; in fdb_create()
504 fdb->added_by_user = 0; in fdb_create()
505 fdb->added_by_external_learn = 0; in fdb_create()
506 fdb->offloaded = 0; in fdb_create()
507 fdb->updated = fdb->used = jiffies; in fdb_create()
509 &fdb->rhnode, in fdb_create()
511 kmem_cache_free(br_fdb_cache, fdb); in fdb_create()
512 fdb = NULL; in fdb_create()
514 hlist_add_head_rcu(&fdb->fdb_node, &br->fdb_list); in fdb_create()
517 return fdb; in fdb_create()
523 struct net_bridge_fdb_entry *fdb; in fdb_insert() local
528 fdb = br_fdb_find(br, addr, vid); in fdb_insert()
529 if (fdb) { in fdb_insert()
533 if (fdb->is_local) in fdb_insert()
537 fdb_delete(br, fdb, true); in fdb_insert()
540 fdb = fdb_create(br, source, addr, vid, 1, 1); in fdb_insert()
541 if (!fdb) in fdb_insert()
545 fdb_notify(br, fdb, RTM_NEWNEIGH, true); in fdb_insert()
564 struct net_bridge_fdb_entry *fdb; in br_fdb_update() local
576 fdb = fdb_find_rcu(&br->fdb_hash_tbl, addr, vid); in br_fdb_update()
577 if (likely(fdb)) { in br_fdb_update()
579 if (unlikely(fdb->is_local)) { in br_fdb_update()
587 if (unlikely(source != fdb->dst)) { in br_fdb_update()
588 fdb->dst = source; in br_fdb_update()
591 if (unlikely(fdb->added_by_external_learn)) in br_fdb_update()
592 fdb->added_by_external_learn = 0; in br_fdb_update()
594 if (now != fdb->updated) in br_fdb_update()
595 fdb->updated = now; in br_fdb_update()
597 fdb->added_by_user = 1; in br_fdb_update()
600 fdb_notify(br, fdb, RTM_NEWNEIGH, true); in br_fdb_update()
605 fdb = fdb_create(br, source, addr, vid, 0, 0); in br_fdb_update()
606 if (fdb) { in br_fdb_update()
608 fdb->added_by_user = 1; in br_fdb_update()
611 fdb_notify(br, fdb, RTM_NEWNEIGH, true); in br_fdb_update()
621 const struct net_bridge_fdb_entry *fdb) in fdb_to_nud() argument
623 if (fdb->is_local) in fdb_to_nud()
625 else if (fdb->is_static) in fdb_to_nud()
627 else if (has_expired(br, fdb)) in fdb_to_nud()
634 const struct net_bridge_fdb_entry *fdb, in fdb_fill_info() argument
652 ndm->ndm_ifindex = fdb->dst ? fdb->dst->dev->ifindex : br->dev->ifindex; in fdb_fill_info()
653 ndm->ndm_state = fdb_to_nud(br, fdb); in fdb_fill_info()
655 if (fdb->offloaded) in fdb_fill_info()
657 if (fdb->added_by_external_learn) in fdb_fill_info()
660 if (nla_put(skb, NDA_LLADDR, ETH_ALEN, &fdb->key.addr)) in fdb_fill_info()
664 ci.ndm_used = jiffies_to_clock_t(now - fdb->used); in fdb_fill_info()
666 ci.ndm_updated = jiffies_to_clock_t(now - fdb->updated); in fdb_fill_info()
671 if (fdb->key.vlan_id && nla_put(skb, NDA_VLAN, sizeof(u16), in fdb_fill_info()
672 &fdb->key.vlan_id)) in fdb_fill_info()
693 const struct net_bridge_fdb_entry *fdb, int type, in fdb_notify() argument
701 br_switchdev_fdb_notify(fdb, type); in fdb_notify()
707 err = fdb_fill_info(skb, br, fdb, 0, 0, type, 0); in fdb_notify()
777 struct net_bridge_fdb_entry *fdb; in fdb_add_entry() local
792 fdb = br_fdb_find(br, addr, vid); in fdb_add_entry()
793 if (fdb == NULL) { in fdb_add_entry()
797 fdb = fdb_create(br, source, addr, vid, 0, 0); in fdb_add_entry()
798 if (!fdb) in fdb_add_entry()
806 if (fdb->dst != source) { in fdb_add_entry()
807 fdb->dst = source; in fdb_add_entry()
812 if (fdb_to_nud(br, fdb) != state) { in fdb_add_entry()
814 fdb->is_local = 1; in fdb_add_entry()
815 if (!fdb->is_static) { in fdb_add_entry()
816 fdb->is_static = 1; in fdb_add_entry()
820 fdb->is_local = 0; in fdb_add_entry()
821 if (!fdb->is_static) { in fdb_add_entry()
822 fdb->is_static = 1; in fdb_add_entry()
826 fdb->is_local = 0; in fdb_add_entry()
827 if (fdb->is_static) { in fdb_add_entry()
828 fdb->is_static = 0; in fdb_add_entry()
835 fdb->added_by_user = 1; in fdb_add_entry()
837 fdb->used = jiffies; in fdb_add_entry()
839 fdb->updated = jiffies; in fdb_add_entry()
840 fdb_notify(br, fdb, RTM_NEWNEIGH, true); in fdb_add_entry()
947 struct net_bridge_fdb_entry *fdb; in fdb_delete_by_addr_and_port() local
949 fdb = br_fdb_find(br, addr, vlan); in fdb_delete_by_addr_and_port()
950 if (!fdb || fdb->dst != p) in fdb_delete_by_addr_and_port()
953 fdb_delete(br, fdb, true); in fdb_delete_by_addr_and_port()
1076 struct net_bridge_fdb_entry *fdb; in br_fdb_external_learn_add() local
1084 fdb = br_fdb_find(br, addr, vid); in br_fdb_external_learn_add()
1085 if (!fdb) { in br_fdb_external_learn_add()
1086 fdb = fdb_create(br, p, addr, vid, 0, 0); in br_fdb_external_learn_add()
1087 if (!fdb) { in br_fdb_external_learn_add()
1091 fdb->added_by_external_learn = 1; in br_fdb_external_learn_add()
1092 fdb_notify(br, fdb, RTM_NEWNEIGH, swdev_notify); in br_fdb_external_learn_add()
1094 fdb->updated = jiffies; in br_fdb_external_learn_add()
1096 if (fdb->dst != p) { in br_fdb_external_learn_add()
1097 fdb->dst = p; in br_fdb_external_learn_add()
1101 if (fdb->added_by_external_learn) { in br_fdb_external_learn_add()
1103 fdb->used = jiffies; in br_fdb_external_learn_add()
1104 } else if (!fdb->added_by_user) { in br_fdb_external_learn_add()
1106 fdb->added_by_external_learn = 1; in br_fdb_external_learn_add()
1111 fdb_notify(br, fdb, RTM_NEWNEIGH, swdev_notify); in br_fdb_external_learn_add()
1124 struct net_bridge_fdb_entry *fdb; in br_fdb_external_learn_del() local
1129 fdb = br_fdb_find(br, addr, vid); in br_fdb_external_learn_del()
1130 if (fdb && fdb->added_by_external_learn) in br_fdb_external_learn_del()
1131 fdb_delete(br, fdb, swdev_notify); in br_fdb_external_learn_del()
1143 struct net_bridge_fdb_entry *fdb; in br_fdb_offloaded_set() local
1147 fdb = br_fdb_find(br, addr, vid); in br_fdb_offloaded_set()
1148 if (fdb) in br_fdb_offloaded_set()
1149 fdb->offloaded = 1; in br_fdb_offloaded_set()