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 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()
905 xa_erase(&bridge->ports, br_port->vsi_idx); in ice_eswitch_br_port_deinit()
911 ice_eswitch_br_port_init(struct ice_esw_br *bridge) in ice_eswitch_br_port_init() argument
921 br_port->bridge = bridge; in ice_eswitch_br_port_init()
927 ice_eswitch_br_vf_repr_port_init(struct ice_esw_br *bridge, in ice_eswitch_br_vf_repr_port_init() argument
933 br_port = ice_eswitch_br_port_init(bridge); in ice_eswitch_br_vf_repr_port_init()
942 err = xa_insert(&bridge->ports, br_port->vsi_idx, br_port, GFP_KERNEL); in ice_eswitch_br_vf_repr_port_init()
944 ice_eswitch_br_port_deinit(bridge, br_port); in ice_eswitch_br_vf_repr_port_init()
952 ice_eswitch_br_uplink_port_init(struct ice_esw_br *bridge, struct ice_pf *pf) in ice_eswitch_br_uplink_port_init() argument
958 br_port = ice_eswitch_br_port_init(bridge); in ice_eswitch_br_uplink_port_init()
967 err = xa_insert(&bridge->ports, br_port->vsi_idx, br_port, GFP_KERNEL); in ice_eswitch_br_uplink_port_init()
969 ice_eswitch_br_port_deinit(bridge, br_port); in ice_eswitch_br_uplink_port_init()
977 ice_eswitch_br_ports_flush(struct ice_esw_br *bridge) in ice_eswitch_br_ports_flush() argument
982 xa_for_each(&bridge->ports, i, port) in ice_eswitch_br_ports_flush()
983 ice_eswitch_br_port_deinit(bridge, port); in ice_eswitch_br_ports_flush()
988 struct ice_esw_br *bridge) in ice_eswitch_br_deinit() argument
990 if (!bridge) in ice_eswitch_br_deinit()
996 ice_eswitch_br_ports_flush(bridge); in ice_eswitch_br_deinit()
997 WARN_ON(!xa_empty(&bridge->ports)); in ice_eswitch_br_deinit()
998 xa_destroy(&bridge->ports); in ice_eswitch_br_deinit()
999 rhashtable_destroy(&bridge->fdb_ht); in ice_eswitch_br_deinit()
1001 br_offloads->bridge = NULL; in ice_eswitch_br_deinit()
1002 kfree(bridge); in ice_eswitch_br_deinit()
1008 struct ice_esw_br *bridge; in ice_eswitch_br_init() local
1011 bridge = kzalloc(sizeof(*bridge), GFP_KERNEL); in ice_eswitch_br_init()
1012 if (!bridge) in ice_eswitch_br_init()
1015 err = rhashtable_init(&bridge->fdb_ht, &ice_fdb_ht_params); in ice_eswitch_br_init()
1017 kfree(bridge); in ice_eswitch_br_init()
1021 INIT_LIST_HEAD(&bridge->fdb_list); in ice_eswitch_br_init()
1022 bridge->br_offloads = br_offloads; in ice_eswitch_br_init()
1023 bridge->ifindex = ifindex; in ice_eswitch_br_init()
1024 bridge->ageing_time = clock_t_to_jiffies(BR_DEFAULT_AGEING_TIME); in ice_eswitch_br_init()
1025 xa_init(&bridge->ports); in ice_eswitch_br_init()
1026 br_offloads->bridge = bridge; in ice_eswitch_br_init()
1028 return bridge; in ice_eswitch_br_init()
1035 struct ice_esw_br *bridge = br_offloads->bridge; in ice_eswitch_br_get() local
1037 if (bridge) { in ice_eswitch_br_get()
1038 if (bridge->ifindex != ifindex) { in ice_eswitch_br_get()
1040 "Only one bridge is supported per eswitch"); in ice_eswitch_br_get()
1043 return bridge; in ice_eswitch_br_get()
1046 /* Create the bridge if it doesn't exist yet */ in ice_eswitch_br_get()
1047 bridge = ice_eswitch_br_init(br_offloads, ifindex); in ice_eswitch_br_get()
1048 if (IS_ERR(bridge)) in ice_eswitch_br_get()
1049 NL_SET_ERR_MSG_MOD(extack, "Failed to init the bridge"); in ice_eswitch_br_get()
1051 return bridge; in ice_eswitch_br_get()
1056 struct ice_esw_br *bridge) in ice_eswitch_br_verify_deinit() argument
1058 /* Remove the bridge if it exists and there are no ports left */ in ice_eswitch_br_verify_deinit()
1059 if (!bridge || !xa_empty(&bridge->ports)) in ice_eswitch_br_verify_deinit()
1062 ice_eswitch_br_deinit(br_offloads, bridge); in ice_eswitch_br_verify_deinit()
1071 struct ice_esw_br *bridge; in ice_eswitch_br_port_unlink() local
1075 "Port representor is not attached to any bridge"); in ice_eswitch_br_port_unlink()
1079 if (br_port->bridge->ifindex != ifindex) { in ice_eswitch_br_port_unlink()
1081 "Port representor is attached to another bridge"); in ice_eswitch_br_port_unlink()
1085 bridge = br_port->bridge; in ice_eswitch_br_port_unlink()
1088 ice_eswitch_br_port_deinit(br_port->bridge, br_port); in ice_eswitch_br_port_unlink()
1089 ice_eswitch_br_verify_deinit(br_offloads, bridge); in ice_eswitch_br_port_unlink()
1099 struct ice_esw_br *bridge; in ice_eswitch_br_port_link() local
1104 "Port is already attached to the bridge"); in ice_eswitch_br_port_link()
1108 bridge = ice_eswitch_br_get(br_offloads, ifindex, extack); in ice_eswitch_br_port_link()
1109 if (IS_ERR(bridge)) in ice_eswitch_br_port_link()
1110 return PTR_ERR(bridge); in ice_eswitch_br_port_link()
1115 err = ice_eswitch_br_vf_repr_port_init(bridge, repr); in ice_eswitch_br_port_link()
1131 err = ice_eswitch_br_uplink_port_init(bridge, pf); in ice_eswitch_br_port_link()
1135 NL_SET_ERR_MSG_MOD(extack, "Failed to init bridge port"); in ice_eswitch_br_port_link()
1142 ice_eswitch_br_verify_deinit(br_offloads, bridge); in ice_eswitch_br_port_link()
1199 ice_eswitch_br_deinit(br_offloads, br_offloads->bridge); in ice_eswitch_br_offloads_dealloc()
1251 struct ice_esw_br *bridge = br_offloads->bridge; in ice_eswitch_br_update() local
1254 if (!bridge) in ice_eswitch_br_update()
1258 list_for_each_entry_safe(entry, tmp, &bridge->fdb_list, list) { in ice_eswitch_br_update()
1263 bridge->ageing_time)) in ice_eswitch_br_update()
1266 ice_eswitch_br_fdb_entry_notify_and_cleanup(bridge, entry); in ice_eswitch_br_update()
1294 dev_err(dev, "Failed to init eswitch bridge\n"); in ice_eswitch_br_offloads_init()
1301 dev_err(dev, "Failed to allocate bridge workqueue\n"); in ice_eswitch_br_offloads_init()
1319 "Failed to register bridge blocking switchdev notifier\n"); in ice_eswitch_br_offloads_init()
1327 "Failed to register bridge port event notifier\n"); in ice_eswitch_br_offloads_init()