Lines Matching full:bridge

244 		dev_err(dev, "Failed to create eswitch bridge %sgress forward rule, err: %d\n",  in ice_eswitch_br_flow_create()
253 dev_err(dev, "Failed to create eswitch bridge %sgress guard rule, err: %d\n", in ice_eswitch_br_flow_create()
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()
314 dev_info(dev, "Bridge port lookup failed (vsi=%u)\n", vsi_idx); in ice_esw_br_port_vlan_lookup()
320 dev_info(dev, "Bridge port vlan metadata lookup failed (vsi=%u)\n", 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 void ice_eswitch_br_fdb_flush(struct ice_esw_br *bridge) in ice_eswitch_br_fdb_flush() argument
589 if (!bridge) in ice_eswitch_br_fdb_flush()
592 list_for_each_entry_safe(entry, tmp, &bridge->fdb_list, list) in ice_eswitch_br_fdb_flush()
593 ice_eswitch_br_fdb_entry_notify_and_cleanup(bridge, entry); in ice_eswitch_br_fdb_flush()
597 ice_eswitch_br_vlan_filtering_set(struct ice_esw_br *bridge, bool enable) in ice_eswitch_br_vlan_filtering_set() argument
599 if (enable == !!(bridge->flags & ICE_ESWITCH_BR_VLAN_FILTERING)) in ice_eswitch_br_vlan_filtering_set()
602 ice_eswitch_br_fdb_flush(bridge); in ice_eswitch_br_vlan_filtering_set()
604 bridge->flags |= ICE_ESWITCH_BR_VLAN_FILTERING; in ice_eswitch_br_vlan_filtering_set()
606 bridge->flags &= ~ICE_ESWITCH_BR_VLAN_FILTERING; in ice_eswitch_br_vlan_filtering_set()
630 struct ice_esw_br *bridge = port->bridge; in ice_eswitch_br_vlan_cleanup() local
634 list_for_each_entry_safe(fdb_entry, tmp, &bridge->fdb_list, list) { in ice_eswitch_br_vlan_cleanup()
636 ice_eswitch_br_fdb_entry_delete(bridge, fdb_entry); in ice_eswitch_br_vlan_cleanup()
736 ice_eswitch_br_port_vlan_add(struct ice_esw_br *bridge, u16 vsi_idx, u16 vid, in ice_eswitch_br_port_vlan_add() argument
742 port = xa_load(&bridge->ports, vsi_idx); in ice_eswitch_br_port_vlan_add()
772 ice_eswitch_br_port_vlan_del(struct ice_esw_br *bridge, u16 vsi_idx, u16 vid) in ice_eswitch_br_port_vlan_del() argument
777 port = xa_load(&bridge->ports, vsi_idx); in ice_eswitch_br_port_vlan_del()
803 err = ice_eswitch_br_port_vlan_add(br_port->bridge, in ice_eswitch_br_port_obj_add()
825 ice_eswitch_br_port_vlan_del(br_port->bridge, br_port->vsi_idx, in ice_eswitch_br_port_obj_del()
845 ice_eswitch_br_vlan_filtering_set(br_port->bridge, in ice_eswitch_br_port_obj_attr_set()
849 br_port->bridge->ageing_time = in ice_eswitch_br_port_obj_attr_set()
888 ice_eswitch_br_port_deinit(struct ice_esw_br *bridge, in ice_eswitch_br_port_deinit() argument
894 list_for_each_entry_safe(fdb_entry, tmp, &bridge->fdb_list, list) { in ice_eswitch_br_port_deinit()
896 ice_eswitch_br_fdb_entry_delete(bridge, fdb_entry); in ice_eswitch_br_port_deinit()
909 xa_erase(&bridge->ports, br_port->vsi_idx); in ice_eswitch_br_port_deinit()
915 ice_eswitch_br_port_init(struct ice_esw_br *bridge) in ice_eswitch_br_port_init() argument
925 br_port->bridge = bridge; in ice_eswitch_br_port_init()
931 ice_eswitch_br_vf_repr_port_init(struct ice_esw_br *bridge, in ice_eswitch_br_vf_repr_port_init() argument
937 br_port = ice_eswitch_br_port_init(bridge); in ice_eswitch_br_vf_repr_port_init()
947 err = xa_insert(&bridge->ports, br_port->vsi_idx, br_port, GFP_KERNEL); in ice_eswitch_br_vf_repr_port_init()
949 ice_eswitch_br_port_deinit(bridge, br_port); in ice_eswitch_br_vf_repr_port_init()
957 ice_eswitch_br_uplink_port_init(struct ice_esw_br *bridge, struct ice_pf *pf) in ice_eswitch_br_uplink_port_init() argument
963 br_port = ice_eswitch_br_port_init(bridge); in ice_eswitch_br_uplink_port_init()
972 err = xa_insert(&bridge->ports, br_port->vsi_idx, br_port, GFP_KERNEL); in ice_eswitch_br_uplink_port_init()
974 ice_eswitch_br_port_deinit(bridge, br_port); in ice_eswitch_br_uplink_port_init()
982 ice_eswitch_br_ports_flush(struct ice_esw_br *bridge) in ice_eswitch_br_ports_flush() argument
987 xa_for_each(&bridge->ports, i, port) in ice_eswitch_br_ports_flush()
988 ice_eswitch_br_port_deinit(bridge, port); in ice_eswitch_br_ports_flush()
993 struct ice_esw_br *bridge) in ice_eswitch_br_deinit() argument
995 if (!bridge) in ice_eswitch_br_deinit()
1001 ice_eswitch_br_ports_flush(bridge); in ice_eswitch_br_deinit()
1002 WARN_ON(!xa_empty(&bridge->ports)); in ice_eswitch_br_deinit()
1003 xa_destroy(&bridge->ports); in ice_eswitch_br_deinit()
1004 rhashtable_destroy(&bridge->fdb_ht); in ice_eswitch_br_deinit()
1006 br_offloads->bridge = NULL; in ice_eswitch_br_deinit()
1007 kfree(bridge); in ice_eswitch_br_deinit()
1013 struct ice_esw_br *bridge; in ice_eswitch_br_init() local
1016 bridge = kzalloc(sizeof(*bridge), GFP_KERNEL); in ice_eswitch_br_init()
1017 if (!bridge) in ice_eswitch_br_init()
1020 err = rhashtable_init(&bridge->fdb_ht, &ice_fdb_ht_params); in ice_eswitch_br_init()
1022 kfree(bridge); in ice_eswitch_br_init()
1026 INIT_LIST_HEAD(&bridge->fdb_list); in ice_eswitch_br_init()
1027 bridge->br_offloads = br_offloads; in ice_eswitch_br_init()
1028 bridge->ifindex = ifindex; in ice_eswitch_br_init()
1029 bridge->ageing_time = clock_t_to_jiffies(BR_DEFAULT_AGEING_TIME); in ice_eswitch_br_init()
1030 xa_init(&bridge->ports); in ice_eswitch_br_init()
1031 br_offloads->bridge = bridge; in ice_eswitch_br_init()
1033 return bridge; in ice_eswitch_br_init()
1040 struct ice_esw_br *bridge = br_offloads->bridge; in ice_eswitch_br_get() local
1042 if (bridge) { in ice_eswitch_br_get()
1043 if (bridge->ifindex != ifindex) { in ice_eswitch_br_get()
1045 "Only one bridge is supported per eswitch"); in ice_eswitch_br_get()
1048 return bridge; in ice_eswitch_br_get()
1051 /* Create the bridge if it doesn't exist yet */ in ice_eswitch_br_get()
1052 bridge = ice_eswitch_br_init(br_offloads, ifindex); in ice_eswitch_br_get()
1053 if (IS_ERR(bridge)) in ice_eswitch_br_get()
1054 NL_SET_ERR_MSG_MOD(extack, "Failed to init the bridge"); in ice_eswitch_br_get()
1056 return bridge; in ice_eswitch_br_get()
1061 struct ice_esw_br *bridge) in ice_eswitch_br_verify_deinit() argument
1063 /* Remove the bridge if it exists and there are no ports left */ in ice_eswitch_br_verify_deinit()
1064 if (!bridge || !xa_empty(&bridge->ports)) in ice_eswitch_br_verify_deinit()
1067 ice_eswitch_br_deinit(br_offloads, bridge); in ice_eswitch_br_verify_deinit()
1076 struct ice_esw_br *bridge; in ice_eswitch_br_port_unlink() local
1080 "Port representor is not attached to any bridge"); in ice_eswitch_br_port_unlink()
1084 if (br_port->bridge->ifindex != ifindex) { in ice_eswitch_br_port_unlink()
1086 "Port representor is attached to another bridge"); in ice_eswitch_br_port_unlink()
1090 bridge = br_port->bridge; in ice_eswitch_br_port_unlink()
1093 ice_eswitch_br_port_deinit(br_port->bridge, br_port); in ice_eswitch_br_port_unlink()
1094 ice_eswitch_br_verify_deinit(br_offloads, bridge); in ice_eswitch_br_port_unlink()
1104 struct ice_esw_br *bridge; in ice_eswitch_br_port_link() local
1109 "Port is already attached to the bridge"); in ice_eswitch_br_port_link()
1113 bridge = ice_eswitch_br_get(br_offloads, ifindex, extack); in ice_eswitch_br_port_link()
1114 if (IS_ERR(bridge)) in ice_eswitch_br_port_link()
1115 return PTR_ERR(bridge); in ice_eswitch_br_port_link()
1120 err = ice_eswitch_br_vf_repr_port_init(bridge, repr); in ice_eswitch_br_port_link()
1136 err = ice_eswitch_br_uplink_port_init(bridge, pf); in ice_eswitch_br_port_link()
1140 NL_SET_ERR_MSG_MOD(extack, "Failed to init bridge port"); in ice_eswitch_br_port_link()
1147 ice_eswitch_br_verify_deinit(br_offloads, bridge); in ice_eswitch_br_port_link()
1204 ice_eswitch_br_deinit(br_offloads, br_offloads->bridge); in ice_eswitch_br_offloads_dealloc()
1256 struct ice_esw_br *bridge = br_offloads->bridge; in ice_eswitch_br_update() local
1259 if (!bridge) in ice_eswitch_br_update()
1263 list_for_each_entry_safe(entry, tmp, &bridge->fdb_list, list) { in ice_eswitch_br_update()
1268 bridge->ageing_time)) in ice_eswitch_br_update()
1271 ice_eswitch_br_fdb_entry_notify_and_cleanup(bridge, entry); in ice_eswitch_br_update()
1299 dev_err(dev, "Failed to init eswitch bridge\n"); in ice_eswitch_br_offloads_init()
1306 dev_err(dev, "Failed to allocate bridge workqueue\n"); in ice_eswitch_br_offloads_init()
1324 "Failed to register bridge blocking switchdev notifier\n"); in ice_eswitch_br_offloads_init()
1332 "Failed to register bridge port event notifier\n"); in ice_eswitch_br_offloads_init()