Lines Matching refs:bridge

273 ice_eswitch_br_fdb_find(struct ice_esw_br *bridge, const unsigned char *mac,  in ice_eswitch_br_fdb_find()  argument
281 return rhashtable_lookup_fast(&bridge->fdb_ht, &data, in ice_eswitch_br_fdb_find()
305 ice_esw_br_port_vlan_lookup(struct ice_esw_br *bridge, u16 vsi_idx, u16 vid) in ice_esw_br_port_vlan_lookup() argument
307 struct ice_pf *pf = bridge->br_offloads->pf; in ice_esw_br_port_vlan_lookup()
312 port = xa_load(&bridge->ports, vsi_idx); in ice_esw_br_port_vlan_lookup()
329 ice_eswitch_br_fdb_entry_delete(struct ice_esw_br *bridge, in ice_eswitch_br_fdb_entry_delete() argument
332 struct ice_pf *pf = bridge->br_offloads->pf; in ice_eswitch_br_fdb_entry_delete()
334 rhashtable_remove_fast(&bridge->fdb_ht, &fdb_entry->ht_node, in ice_eswitch_br_fdb_entry_delete()
358 ice_eswitch_br_fdb_entry_notify_and_cleanup(struct ice_esw_br *bridge, in ice_eswitch_br_fdb_entry_notify_and_cleanup() argument
365 ice_eswitch_br_fdb_entry_delete(bridge, entry); in ice_eswitch_br_fdb_entry_notify_and_cleanup()
369 ice_eswitch_br_fdb_entry_find_and_delete(struct ice_esw_br *bridge, in ice_eswitch_br_fdb_entry_find_and_delete() argument
372 struct ice_pf *pf = bridge->br_offloads->pf; in ice_eswitch_br_fdb_entry_find_and_delete()
376 fdb_entry = ice_eswitch_br_fdb_find(bridge, mac, vid); in ice_eswitch_br_fdb_entry_find_and_delete()
384 ice_eswitch_br_fdb_entry_notify_and_cleanup(bridge, fdb_entry); in ice_eswitch_br_fdb_entry_find_and_delete()
393 struct ice_esw_br *bridge = br_port->bridge; in ice_eswitch_br_fdb_entry_create() local
394 struct ice_pf *pf = bridge->br_offloads->pf; in ice_eswitch_br_fdb_entry_create()
404 if (!(bridge->flags & ICE_ESWITCH_BR_VLAN_FILTERING) && vid) in ice_eswitch_br_fdb_entry_create()
407 if ((bridge->flags & ICE_ESWITCH_BR_VLAN_FILTERING)) { in ice_eswitch_br_fdb_entry_create()
408 vlan = ice_esw_br_port_vlan_lookup(bridge, br_port->vsi_idx, in ice_eswitch_br_fdb_entry_create()
417 fdb_entry = ice_eswitch_br_fdb_find(bridge, mac, vid); in ice_eswitch_br_fdb_entry_create()
419 ice_eswitch_br_fdb_entry_notify_and_cleanup(bridge, fdb_entry); in ice_eswitch_br_fdb_entry_create()
447 err = rhashtable_insert_fast(&bridge->fdb_ht, &fdb_entry->ht_node, in ice_eswitch_br_fdb_entry_create()
452 list_add(&fdb_entry->list, &bridge->fdb_list); in ice_eswitch_br_fdb_entry_create()
495 ice_eswitch_br_fdb_entry_find_and_delete(br_port->bridge, in ice_eswitch_br_fdb_event_work()
585 static void ice_eswitch_br_fdb_flush(struct ice_esw_br *bridge) in ice_eswitch_br_fdb_flush() argument
589 list_for_each_entry_safe(entry, tmp, &bridge->fdb_list, list) in ice_eswitch_br_fdb_flush()
590 ice_eswitch_br_fdb_entry_notify_and_cleanup(bridge, entry); in ice_eswitch_br_fdb_flush()
594 ice_eswitch_br_vlan_filtering_set(struct ice_esw_br *bridge, bool enable) in ice_eswitch_br_vlan_filtering_set() argument
596 if (enable == !!(bridge->flags & ICE_ESWITCH_BR_VLAN_FILTERING)) in ice_eswitch_br_vlan_filtering_set()
599 ice_eswitch_br_fdb_flush(bridge); in ice_eswitch_br_vlan_filtering_set()
601 bridge->flags |= ICE_ESWITCH_BR_VLAN_FILTERING; in ice_eswitch_br_vlan_filtering_set()
603 bridge->flags &= ~ICE_ESWITCH_BR_VLAN_FILTERING; in ice_eswitch_br_vlan_filtering_set()
627 struct ice_esw_br *bridge = port->bridge; in ice_eswitch_br_vlan_cleanup() local
631 list_for_each_entry_safe(fdb_entry, tmp, &bridge->fdb_list, list) { in ice_eswitch_br_vlan_cleanup()
633 ice_eswitch_br_fdb_entry_delete(bridge, fdb_entry); in ice_eswitch_br_vlan_cleanup()
733 ice_eswitch_br_port_vlan_add(struct ice_esw_br *bridge, u16 vsi_idx, u16 vid, in ice_eswitch_br_port_vlan_add() argument
739 port = xa_load(&bridge->ports, vsi_idx); in ice_eswitch_br_port_vlan_add()
769 ice_eswitch_br_port_vlan_del(struct ice_esw_br *bridge, u16 vsi_idx, u16 vid) in ice_eswitch_br_port_vlan_del() argument
774 port = xa_load(&bridge->ports, vsi_idx); in ice_eswitch_br_port_vlan_del()
800 err = ice_eswitch_br_port_vlan_add(br_port->bridge, in ice_eswitch_br_port_obj_add()
822 ice_eswitch_br_port_vlan_del(br_port->bridge, br_port->vsi_idx, in ice_eswitch_br_port_obj_del()
842 ice_eswitch_br_vlan_filtering_set(br_port->bridge, in ice_eswitch_br_port_obj_attr_set()
846 br_port->bridge->ageing_time = in ice_eswitch_br_port_obj_attr_set()
885 ice_eswitch_br_port_deinit(struct ice_esw_br *bridge, in ice_eswitch_br_port_deinit() argument
891 list_for_each_entry_safe(fdb_entry, tmp, &bridge->fdb_list, list) { in ice_eswitch_br_port_deinit()
893 ice_eswitch_br_fdb_entry_delete(bridge, fdb_entry); in ice_eswitch_br_port_deinit()
901 xa_erase(&bridge->ports, br_port->vsi_idx); in ice_eswitch_br_port_deinit()
907 ice_eswitch_br_port_init(struct ice_esw_br *bridge) in ice_eswitch_br_port_init() argument
917 br_port->bridge = bridge; in ice_eswitch_br_port_init()
923 ice_eswitch_br_vf_repr_port_init(struct ice_esw_br *bridge, in ice_eswitch_br_vf_repr_port_init() argument
929 br_port = ice_eswitch_br_port_init(bridge); in ice_eswitch_br_vf_repr_port_init()
938 err = xa_insert(&bridge->ports, br_port->vsi_idx, br_port, GFP_KERNEL); in ice_eswitch_br_vf_repr_port_init()
940 ice_eswitch_br_port_deinit(bridge, br_port); in ice_eswitch_br_vf_repr_port_init()
948 ice_eswitch_br_uplink_port_init(struct ice_esw_br *bridge, struct ice_pf *pf) in ice_eswitch_br_uplink_port_init() argument
954 br_port = ice_eswitch_br_port_init(bridge); in ice_eswitch_br_uplink_port_init()
963 err = xa_insert(&bridge->ports, br_port->vsi_idx, br_port, GFP_KERNEL); in ice_eswitch_br_uplink_port_init()
965 ice_eswitch_br_port_deinit(bridge, br_port); in ice_eswitch_br_uplink_port_init()
973 ice_eswitch_br_ports_flush(struct ice_esw_br *bridge) in ice_eswitch_br_ports_flush() argument
978 xa_for_each(&bridge->ports, i, port) in ice_eswitch_br_ports_flush()
979 ice_eswitch_br_port_deinit(bridge, port); in ice_eswitch_br_ports_flush()
984 struct ice_esw_br *bridge) in ice_eswitch_br_deinit() argument
986 if (!bridge) in ice_eswitch_br_deinit()
992 ice_eswitch_br_ports_flush(bridge); in ice_eswitch_br_deinit()
993 WARN_ON(!xa_empty(&bridge->ports)); in ice_eswitch_br_deinit()
994 xa_destroy(&bridge->ports); in ice_eswitch_br_deinit()
995 rhashtable_destroy(&bridge->fdb_ht); in ice_eswitch_br_deinit()
997 br_offloads->bridge = NULL; in ice_eswitch_br_deinit()
998 kfree(bridge); in ice_eswitch_br_deinit()
1004 struct ice_esw_br *bridge; in ice_eswitch_br_init() local
1007 bridge = kzalloc(sizeof(*bridge), GFP_KERNEL); in ice_eswitch_br_init()
1008 if (!bridge) in ice_eswitch_br_init()
1011 err = rhashtable_init(&bridge->fdb_ht, &ice_fdb_ht_params); in ice_eswitch_br_init()
1013 kfree(bridge); in ice_eswitch_br_init()
1017 INIT_LIST_HEAD(&bridge->fdb_list); in ice_eswitch_br_init()
1018 bridge->br_offloads = br_offloads; in ice_eswitch_br_init()
1019 bridge->ifindex = ifindex; in ice_eswitch_br_init()
1020 bridge->ageing_time = clock_t_to_jiffies(BR_DEFAULT_AGEING_TIME); in ice_eswitch_br_init()
1021 xa_init(&bridge->ports); in ice_eswitch_br_init()
1022 br_offloads->bridge = bridge; in ice_eswitch_br_init()
1024 return bridge; in ice_eswitch_br_init()
1031 struct ice_esw_br *bridge = br_offloads->bridge; in ice_eswitch_br_get() local
1033 if (bridge) { in ice_eswitch_br_get()
1034 if (bridge->ifindex != ifindex) { in ice_eswitch_br_get()
1039 return bridge; in ice_eswitch_br_get()
1043 bridge = ice_eswitch_br_init(br_offloads, ifindex); in ice_eswitch_br_get()
1044 if (IS_ERR(bridge)) in ice_eswitch_br_get()
1047 return bridge; in ice_eswitch_br_get()
1052 struct ice_esw_br *bridge) in ice_eswitch_br_verify_deinit() argument
1055 if (!bridge || !xa_empty(&bridge->ports)) in ice_eswitch_br_verify_deinit()
1058 ice_eswitch_br_deinit(br_offloads, bridge); in ice_eswitch_br_verify_deinit()
1067 struct ice_esw_br *bridge; in ice_eswitch_br_port_unlink() local
1075 if (br_port->bridge->ifindex != ifindex) { in ice_eswitch_br_port_unlink()
1081 bridge = br_port->bridge; in ice_eswitch_br_port_unlink()
1084 ice_eswitch_br_port_deinit(br_port->bridge, br_port); in ice_eswitch_br_port_unlink()
1085 ice_eswitch_br_verify_deinit(br_offloads, bridge); in ice_eswitch_br_port_unlink()
1095 struct ice_esw_br *bridge; in ice_eswitch_br_port_link() local
1104 bridge = ice_eswitch_br_get(br_offloads, ifindex, extack); in ice_eswitch_br_port_link()
1105 if (IS_ERR(bridge)) in ice_eswitch_br_port_link()
1106 return PTR_ERR(bridge); in ice_eswitch_br_port_link()
1111 err = ice_eswitch_br_vf_repr_port_init(bridge, repr); in ice_eswitch_br_port_link()
1127 err = ice_eswitch_br_uplink_port_init(bridge, pf); in ice_eswitch_br_port_link()
1138 ice_eswitch_br_verify_deinit(br_offloads, bridge); in ice_eswitch_br_port_link()
1195 ice_eswitch_br_deinit(br_offloads, br_offloads->bridge); in ice_eswitch_br_offloads_dealloc()
1247 struct ice_esw_br *bridge = br_offloads->bridge; in ice_eswitch_br_update() local
1250 if (!bridge) in ice_eswitch_br_update()
1254 list_for_each_entry_safe(entry, tmp, &bridge->fdb_list, list) { in ice_eswitch_br_update()
1259 bridge->ageing_time)) in ice_eswitch_br_update()
1262 ice_eswitch_br_fdb_entry_notify_and_cleanup(bridge, entry); in ice_eswitch_br_update()