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()
904 xa_erase(&bridge->ports, br_port->vsi_idx); in ice_eswitch_br_port_deinit()
910 ice_eswitch_br_port_init(struct ice_esw_br *bridge) in ice_eswitch_br_port_init() argument
920 br_port->bridge = bridge; in ice_eswitch_br_port_init()
926 ice_eswitch_br_vf_repr_port_init(struct ice_esw_br *bridge, in ice_eswitch_br_vf_repr_port_init() argument
932 br_port = ice_eswitch_br_port_init(bridge); in ice_eswitch_br_vf_repr_port_init()
941 err = xa_insert(&bridge->ports, br_port->vsi_idx, br_port, GFP_KERNEL); in ice_eswitch_br_vf_repr_port_init()
943 ice_eswitch_br_port_deinit(bridge, br_port); in ice_eswitch_br_vf_repr_port_init()
951 ice_eswitch_br_uplink_port_init(struct ice_esw_br *bridge, struct ice_pf *pf) in ice_eswitch_br_uplink_port_init() argument
957 br_port = ice_eswitch_br_port_init(bridge); in ice_eswitch_br_uplink_port_init()
966 err = xa_insert(&bridge->ports, br_port->vsi_idx, br_port, GFP_KERNEL); in ice_eswitch_br_uplink_port_init()
968 ice_eswitch_br_port_deinit(bridge, br_port); in ice_eswitch_br_uplink_port_init()
976 ice_eswitch_br_ports_flush(struct ice_esw_br *bridge) in ice_eswitch_br_ports_flush() argument
981 xa_for_each(&bridge->ports, i, port) in ice_eswitch_br_ports_flush()
982 ice_eswitch_br_port_deinit(bridge, port); in ice_eswitch_br_ports_flush()
987 struct ice_esw_br *bridge) in ice_eswitch_br_deinit() argument
989 if (!bridge) in ice_eswitch_br_deinit()
995 ice_eswitch_br_ports_flush(bridge); in ice_eswitch_br_deinit()
996 WARN_ON(!xa_empty(&bridge->ports)); in ice_eswitch_br_deinit()
997 xa_destroy(&bridge->ports); in ice_eswitch_br_deinit()
998 rhashtable_destroy(&bridge->fdb_ht); in ice_eswitch_br_deinit()
1000 br_offloads->bridge = NULL; in ice_eswitch_br_deinit()
1001 kfree(bridge); in ice_eswitch_br_deinit()
1007 struct ice_esw_br *bridge; in ice_eswitch_br_init() local
1010 bridge = kzalloc(sizeof(*bridge), GFP_KERNEL); in ice_eswitch_br_init()
1011 if (!bridge) in ice_eswitch_br_init()
1014 err = rhashtable_init(&bridge->fdb_ht, &ice_fdb_ht_params); in ice_eswitch_br_init()
1016 kfree(bridge); in ice_eswitch_br_init()
1020 INIT_LIST_HEAD(&bridge->fdb_list); in ice_eswitch_br_init()
1021 bridge->br_offloads = br_offloads; in ice_eswitch_br_init()
1022 bridge->ifindex = ifindex; in ice_eswitch_br_init()
1023 bridge->ageing_time = clock_t_to_jiffies(BR_DEFAULT_AGEING_TIME); in ice_eswitch_br_init()
1024 xa_init(&bridge->ports); in ice_eswitch_br_init()
1025 br_offloads->bridge = bridge; in ice_eswitch_br_init()
1027 return bridge; in ice_eswitch_br_init()
1034 struct ice_esw_br *bridge = br_offloads->bridge; in ice_eswitch_br_get() local
1036 if (bridge) { in ice_eswitch_br_get()
1037 if (bridge->ifindex != ifindex) { in ice_eswitch_br_get()
1039 "Only one bridge is supported per eswitch"); in ice_eswitch_br_get()
1042 return bridge; in ice_eswitch_br_get()
1045 /* Create the bridge if it doesn't exist yet */ in ice_eswitch_br_get()
1046 bridge = ice_eswitch_br_init(br_offloads, ifindex); in ice_eswitch_br_get()
1047 if (IS_ERR(bridge)) in ice_eswitch_br_get()
1048 NL_SET_ERR_MSG_MOD(extack, "Failed to init the bridge"); in ice_eswitch_br_get()
1050 return bridge; in ice_eswitch_br_get()
1055 struct ice_esw_br *bridge) in ice_eswitch_br_verify_deinit() argument
1057 /* Remove the bridge if it exists and there are no ports left */ in ice_eswitch_br_verify_deinit()
1058 if (!bridge || !xa_empty(&bridge->ports)) in ice_eswitch_br_verify_deinit()
1061 ice_eswitch_br_deinit(br_offloads, bridge); in ice_eswitch_br_verify_deinit()
1070 struct ice_esw_br *bridge; in ice_eswitch_br_port_unlink() local
1074 "Port representor is not attached to any bridge"); in ice_eswitch_br_port_unlink()
1078 if (br_port->bridge->ifindex != ifindex) { in ice_eswitch_br_port_unlink()
1080 "Port representor is attached to another bridge"); in ice_eswitch_br_port_unlink()
1084 bridge = br_port->bridge; in ice_eswitch_br_port_unlink()
1087 ice_eswitch_br_port_deinit(br_port->bridge, br_port); in ice_eswitch_br_port_unlink()
1088 ice_eswitch_br_verify_deinit(br_offloads, bridge); in ice_eswitch_br_port_unlink()
1098 struct ice_esw_br *bridge; in ice_eswitch_br_port_link() local
1103 "Port is already attached to the bridge"); in ice_eswitch_br_port_link()
1107 bridge = ice_eswitch_br_get(br_offloads, ifindex, extack); in ice_eswitch_br_port_link()
1108 if (IS_ERR(bridge)) in ice_eswitch_br_port_link()
1109 return PTR_ERR(bridge); in ice_eswitch_br_port_link()
1114 err = ice_eswitch_br_vf_repr_port_init(bridge, repr); in ice_eswitch_br_port_link()
1130 err = ice_eswitch_br_uplink_port_init(bridge, pf); in ice_eswitch_br_port_link()
1134 NL_SET_ERR_MSG_MOD(extack, "Failed to init bridge port"); in ice_eswitch_br_port_link()
1141 ice_eswitch_br_verify_deinit(br_offloads, bridge); in ice_eswitch_br_port_link()
1198 ice_eswitch_br_deinit(br_offloads, br_offloads->bridge); in ice_eswitch_br_offloads_dealloc()
1250 struct ice_esw_br *bridge = br_offloads->bridge; in ice_eswitch_br_update() local
1253 if (!bridge) in ice_eswitch_br_update()
1257 list_for_each_entry_safe(entry, tmp, &bridge->fdb_list, list) { in ice_eswitch_br_update()
1262 bridge->ageing_time)) in ice_eswitch_br_update()
1265 ice_eswitch_br_fdb_entry_notify_and_cleanup(bridge, entry); in ice_eswitch_br_update()
1293 dev_err(dev, "Failed to init eswitch bridge\n"); in ice_eswitch_br_offloads_init()
1300 dev_err(dev, "Failed to allocate bridge workqueue\n"); in ice_eswitch_br_offloads_init()
1318 "Failed to register bridge blocking switchdev notifier\n"); in ice_eswitch_br_offloads_init()
1326 "Failed to register bridge port event notifier\n"); in ice_eswitch_br_offloads_init()