Lines Matching full:router

415 	u16 id; /* virtual router ID */
435 lpm_tree = mlxsw_sp->router->lpm.proto_trees[proto]; in mlxsw_sp_fib_create()
475 for (i = 0; i < mlxsw_sp->router->lpm.tree_count; i++) { in mlxsw_sp_lpm_tree_find_unused()
476 lpm_tree = &mlxsw_sp->router->lpm.trees[i]; in mlxsw_sp_lpm_tree_find_unused()
575 for (i = 0; i < mlxsw_sp->router->lpm.tree_count; i++) { in mlxsw_sp_lpm_tree_get()
576 lpm_tree = &mlxsw_sp->router->lpm.trees[i]; in mlxsw_sp_lpm_tree_get()
613 mlxsw_sp->router->lpm.tree_count = max_trees - MLXSW_SP_LPM_TREE_MIN; in mlxsw_sp_lpm_init()
614 mlxsw_sp->router->lpm.trees = kcalloc(mlxsw_sp->router->lpm.tree_count, in mlxsw_sp_lpm_init()
617 if (!mlxsw_sp->router->lpm.trees) in mlxsw_sp_lpm_init()
620 for (i = 0; i < mlxsw_sp->router->lpm.tree_count; i++) { in mlxsw_sp_lpm_init()
621 lpm_tree = &mlxsw_sp->router->lpm.trees[i]; in mlxsw_sp_lpm_init()
631 mlxsw_sp->router->lpm.proto_trees[MLXSW_SP_L3_PROTO_IPV4] = lpm_tree; in mlxsw_sp_lpm_init()
639 mlxsw_sp->router->lpm.proto_trees[MLXSW_SP_L3_PROTO_IPV6] = lpm_tree; in mlxsw_sp_lpm_init()
644 lpm_tree = mlxsw_sp->router->lpm.proto_trees[MLXSW_SP_L3_PROTO_IPV4]; in mlxsw_sp_lpm_init()
647 kfree(mlxsw_sp->router->lpm.trees); in mlxsw_sp_lpm_init()
655 lpm_tree = mlxsw_sp->router->lpm.proto_trees[MLXSW_SP_L3_PROTO_IPV6]; in mlxsw_sp_lpm_fini()
658 lpm_tree = mlxsw_sp->router->lpm.proto_trees[MLXSW_SP_L3_PROTO_IPV4]; in mlxsw_sp_lpm_fini()
661 kfree(mlxsw_sp->router->lpm.trees); in mlxsw_sp_lpm_fini()
677 vr = &mlxsw_sp->router->vrs[i]; in mlxsw_sp_vr_find_unused()
723 vr = &mlxsw_sp->router->vrs[i]; in mlxsw_sp_vr_find()
736 mutex_lock(&mlxsw_sp->router->lock); in mlxsw_sp_router_tb_id_vr_id()
744 mutex_unlock(&mlxsw_sp->router->lock); in mlxsw_sp_router_tb_id_vr_id()
890 old_tree = mlxsw_sp->router->lpm.proto_trees[proto]; in mlxsw_sp_vrs_lpm_tree_replace()
894 vr = &mlxsw_sp->router->vrs[i]; in mlxsw_sp_vrs_lpm_tree_replace()
906 mlxsw_sp->router->lpm.proto_trees[proto] = new_tree; in mlxsw_sp_vrs_lpm_tree_replace()
932 mlxsw_sp->router->vrs = kcalloc(max_vrs, sizeof(struct mlxsw_sp_vr), in mlxsw_sp_vrs_init()
934 if (!mlxsw_sp->router->vrs) in mlxsw_sp_vrs_init()
938 vr = &mlxsw_sp->router->vrs[i]; in mlxsw_sp_vrs_init()
958 kfree(mlxsw_sp->router->vrs); in mlxsw_sp_vrs_fini()
1001 ipip_ops = mlxsw_sp->router->ipip_ops_arr[ipipt]; in mlxsw_sp_ipip_ol_ipip_lb_create()
1023 ipip_ops = mlxsw_sp->router->ipip_ops_arr[ipipt]; in mlxsw_sp_ipip_entry_alloc()
1072 if (mlxsw_sp->router->ipip_ops_arr[ipipt]->ul_proto != ul_proto) in mlxsw_sp_ipip_entry_saddr_matches()
1197 ipip_ops = mlxsw_sp->router->ipip_ops_arr[ipip_entry->ipipt]; in mlxsw_sp_ipip_entry_find_decap()
1241 &mlxsw_sp->router->ipip_list); in mlxsw_sp_ipip_entry_create()
1264 if (mlxsw_sp->router->ipip_ops_arr[ipipt]->ul_proto != ul_proto) in mlxsw_sp_ipip_entry_matches_decap()
1280 list_for_each_entry(ipip_entry, &mlxsw_sp->router->ipip_list, in mlxsw_sp_ipip_entry_find_by_decap()
1294 struct mlxsw_sp_router *router = mlxsw_sp->router; in mlxsw_sp_netdev_ipip_type() local
1299 ipip_ops = router->ipip_ops_arr[ipipt]; in mlxsw_sp_netdev_ipip_type()
1321 list_for_each_entry(ipip_entry, &mlxsw_sp->router->ipip_list, in mlxsw_sp_ipip_entry_find_by_ol_dev()
1336 ipip_entry = list_prepare_entry(start, &mlxsw_sp->router->ipip_list, in mlxsw_sp_ipip_entry_find_by_ul_dev()
1338 list_for_each_entry_continue(ipip_entry, &mlxsw_sp->router->ipip_list, in mlxsw_sp_ipip_entry_find_by_ul_dev()
1359 mutex_lock(&mlxsw_sp->router->lock); in mlxsw_sp_netdev_is_ipip_ul()
1361 mutex_unlock(&mlxsw_sp->router->lock); in mlxsw_sp_netdev_is_ipip_ul()
1371 = mlxsw_sp->router->ipip_ops_arr[ipipt]; in mlxsw_sp_netdevice_ipip_can_offload()
1392 ul_proto = mlxsw_sp->router->ipip_ops_arr[ipipt]->ul_proto; in mlxsw_sp_netdevice_ipip_ol_reg_event()
1612 ul_proto = mlxsw_sp->router->ipip_ops_arr[ipip_entry->ipipt]->ul_proto; in mlxsw_sp_netdevice_ipip_ul_vrf_event()
1671 ipip_ops = mlxsw_sp->router->ipip_ops_arr[ipip_entry->ipipt]; in mlxsw_sp_netdevice_ipip_ol_change_event()
1701 list_for_each_entry_safe(ipip_entry, tmp, &mlxsw_sp->router->ipip_list, in mlxsw_sp_ipip_demote_tunnel_by_saddr()
1719 list_for_each_entry_safe(ipip_entry, tmp, &mlxsw_sp->router->ipip_list, in mlxsw_sp_ipip_demote_tunnel_by_ul_netdev()
1741 mutex_lock(&mlxsw_sp->router->lock); in mlxsw_sp_netdevice_ipip_ol_event()
1772 mutex_unlock(&mlxsw_sp->router->lock); in mlxsw_sp_netdevice_ipip_ol_event()
1819 mutex_lock(&mlxsw_sp->router->lock); in mlxsw_sp_netdevice_ipip_ul_event()
1837 &mlxsw_sp->router->ipip_list)) in mlxsw_sp_netdevice_ipip_ul_event()
1849 mutex_unlock(&mlxsw_sp->router->lock); in mlxsw_sp_netdevice_ipip_ul_event()
1860 struct mlxsw_sp_router *router = mlxsw_sp->router; in mlxsw_sp_router_nve_promote_decap() local
1864 mutex_lock(&mlxsw_sp->router->lock); in mlxsw_sp_router_nve_promote_decap()
1866 if (WARN_ON_ONCE(router->nve_decap_config.valid)) { in mlxsw_sp_router_nve_promote_decap()
1871 router->nve_decap_config.ul_tb_id = ul_tb_id; in mlxsw_sp_router_nve_promote_decap()
1872 router->nve_decap_config.tunnel_index = tunnel_index; in mlxsw_sp_router_nve_promote_decap()
1873 router->nve_decap_config.ul_proto = ul_proto; in mlxsw_sp_router_nve_promote_decap()
1874 router->nve_decap_config.ul_sip = *ul_sip; in mlxsw_sp_router_nve_promote_decap()
1875 router->nve_decap_config.valid = true; in mlxsw_sp_router_nve_promote_decap()
1899 mutex_unlock(&mlxsw_sp->router->lock); in mlxsw_sp_router_nve_promote_decap()
1908 struct mlxsw_sp_router *router = mlxsw_sp->router; in mlxsw_sp_router_nve_demote_decap() local
1911 mutex_lock(&mlxsw_sp->router->lock); in mlxsw_sp_router_nve_demote_decap()
1913 if (WARN_ON_ONCE(!router->nve_decap_config.valid)) in mlxsw_sp_router_nve_demote_decap()
1916 router->nve_decap_config.valid = false; in mlxsw_sp_router_nve_demote_decap()
1927 mutex_unlock(&mlxsw_sp->router->lock); in mlxsw_sp_router_nve_demote_decap()
1935 struct mlxsw_sp_router *router = mlxsw_sp->router; in mlxsw_sp_router_nve_is_decap() local
1937 return router->nve_decap_config.valid && in mlxsw_sp_router_nve_is_decap()
1938 router->nve_decap_config.ul_tb_id == ul_tb_id && in mlxsw_sp_router_nve_is_decap()
1939 router->nve_decap_config.ul_proto == ul_proto && in mlxsw_sp_router_nve_is_decap()
1940 !memcmp(&router->nve_decap_config.ul_sip, ul_sip, in mlxsw_sp_router_nve_is_decap()
2051 return rhashtable_insert_fast(&mlxsw_sp->router->neigh_ht, in mlxsw_sp_neigh_entry_insert()
2060 rhashtable_remove_fast(&mlxsw_sp->router->neigh_ht, in mlxsw_sp_neigh_entry_remove()
2157 return rhashtable_lookup_fast(&mlxsw_sp->router->neigh_ht, in mlxsw_sp_neigh_entry_lookup()
2173 mlxsw_sp->router->neighs_update.interval = jiffies_to_msecs(interval); in mlxsw_sp_router_neighs_update_interval_init()
2188 if (!mlxsw_sp->router->rifs[rif]) { in mlxsw_sp_router_neigh_ent_ipv4_process()
2194 dev = mlxsw_sp->router->rifs[rif]->dev; in mlxsw_sp_router_neigh_ent_ipv4_process()
2217 if (!mlxsw_sp->router->rifs[rif]) { in mlxsw_sp_router_neigh_ent_ipv6_process()
2222 dev = mlxsw_sp->router->rifs[rif]->dev; in mlxsw_sp_router_neigh_ent_ipv6_process()
2315 mutex_lock(&mlxsw_sp->router->lock); in __mlxsw_sp_router_neighs_update_rauhtd()
2329 mutex_unlock(&mlxsw_sp->router->lock); in __mlxsw_sp_router_neighs_update_rauhtd()
2360 mutex_lock(&mlxsw_sp->router->lock); in mlxsw_sp_router_neighs_update_nh()
2361 list_for_each_entry(neigh_entry, &mlxsw_sp->router->nexthop_neighs_list, in mlxsw_sp_router_neighs_update_nh()
2367 mutex_unlock(&mlxsw_sp->router->lock); in mlxsw_sp_router_neighs_update_nh()
2373 unsigned long interval = mlxsw_sp->router->neighs_update.interval; in mlxsw_sp_router_neighs_update_work_schedule()
2375 mlxsw_core_schedule_dw(&mlxsw_sp->router->neighs_update.dw, in mlxsw_sp_router_neighs_update_work_schedule()
2381 struct mlxsw_sp_router *router; in mlxsw_sp_router_neighs_update_work() local
2384 router = container_of(work, struct mlxsw_sp_router, in mlxsw_sp_router_neighs_update_work()
2386 err = mlxsw_sp_router_neighs_update_rauhtd(router->mlxsw_sp); in mlxsw_sp_router_neighs_update_work()
2388 dev_err(router->mlxsw_sp->bus_info->dev, "Could not update kernel for neigh activity"); in mlxsw_sp_router_neighs_update_work()
2390 mlxsw_sp_router_neighs_update_nh(router->mlxsw_sp); in mlxsw_sp_router_neighs_update_work()
2392 mlxsw_sp_router_neighs_update_work_schedule(router->mlxsw_sp); in mlxsw_sp_router_neighs_update_work()
2398 struct mlxsw_sp_router *router; in mlxsw_sp_router_probe_unresolved_nexthops() local
2400 router = container_of(work, struct mlxsw_sp_router, in mlxsw_sp_router_probe_unresolved_nexthops()
2408 mutex_lock(&router->lock); in mlxsw_sp_router_probe_unresolved_nexthops()
2409 list_for_each_entry(neigh_entry, &router->nexthop_neighs_list, in mlxsw_sp_router_probe_unresolved_nexthops()
2413 mutex_unlock(&router->lock); in mlxsw_sp_router_probe_unresolved_nexthops()
2415 mlxsw_core_schedule_dw(&router->nexthop_probe_dw, in mlxsw_sp_router_probe_unresolved_nexthops()
2551 mutex_lock(&mlxsw_sp->router->lock); in mlxsw_sp_router_neigh_event_work()
2573 mutex_unlock(&mlxsw_sp->router->lock); in mlxsw_sp_router_neigh_event_work()
2607 struct mlxsw_sp_router *router; in mlxsw_sp_router_schedule_work() local
2609 router = container_of(nb, struct mlxsw_sp_router, netevent_nb); in mlxsw_sp_router_schedule_work()
2610 if (!net_eq(net, mlxsw_sp_net(router->mlxsw_sp))) in mlxsw_sp_router_schedule_work()
2618 net_work->mlxsw_sp = router->mlxsw_sp; in mlxsw_sp_router_schedule_work()
2651 mlxsw_sp->router->neighs_update.interval = interval; in mlxsw_sp_router_netevent_event()
2700 err = rhashtable_init(&mlxsw_sp->router->neigh_ht, in mlxsw_sp_neigh_init()
2711 INIT_DELAYED_WORK(&mlxsw_sp->router->neighs_update.dw, in mlxsw_sp_neigh_init()
2713 INIT_DELAYED_WORK(&mlxsw_sp->router->nexthop_probe_dw, in mlxsw_sp_neigh_init()
2715 mlxsw_core_schedule_dw(&mlxsw_sp->router->neighs_update.dw, 0); in mlxsw_sp_neigh_init()
2716 mlxsw_core_schedule_dw(&mlxsw_sp->router->nexthop_probe_dw, 0); in mlxsw_sp_neigh_init()
2722 cancel_delayed_work_sync(&mlxsw_sp->router->neighs_update.dw); in mlxsw_sp_neigh_fini()
2723 cancel_delayed_work_sync(&mlxsw_sp->router->nexthop_probe_dw); in mlxsw_sp_neigh_fini()
2724 rhashtable_destroy(&mlxsw_sp->router->neigh_ht); in mlxsw_sp_neigh_fini()
2831 struct mlxsw_sp_nexthop *mlxsw_sp_nexthop_next(struct mlxsw_sp_router *router, in mlxsw_sp_nexthop_next() argument
2835 if (list_empty(&router->nexthop_list)) in mlxsw_sp_nexthop_next()
2838 return list_first_entry(&router->nexthop_list, in mlxsw_sp_nexthop_next()
2841 if (list_is_last(&nh->router_list_node, &router->nexthop_list)) in mlxsw_sp_nexthop_next()
3059 return rhashtable_insert_fast(&mlxsw_sp->router->nexthop_group_ht, in mlxsw_sp_nexthop_group_insert()
3071 rhashtable_remove_fast(&mlxsw_sp->router->nexthop_group_ht, in mlxsw_sp_nexthop_group_remove()
3084 return rhashtable_lookup_fast(&mlxsw_sp->router->nexthop_group_ht, in mlxsw_sp_nexthop4_group_lookup()
3097 return rhashtable_lookup_fast(&mlxsw_sp->router->nexthop_group_ht, in mlxsw_sp_nexthop6_group_lookup()
3111 return rhashtable_insert_fast(&mlxsw_sp->router->nexthop_ht, in mlxsw_sp_nexthop_insert()
3118 rhashtable_remove_fast(&mlxsw_sp->router->nexthop_ht, &nh->ht_node, in mlxsw_sp_nexthop_remove()
3126 return rhashtable_lookup_fast(&mlxsw_sp->router->nexthop_ht, &key, in mlxsw_sp_nexthop_lookup()
3208 ipip_ops = mlxsw_sp->router->ipip_ops_arr[nh->ipip_entry->ipipt]; in __mlxsw_sp_nexthop_ipip_update()
3716 &mlxsw_sp->router->nexthop_neighs_list); in mlxsw_sp_nexthop_neigh_init()
3837 ipip_ops = mlxsw_sp->router->ipip_ops_arr[ipip_entry->ipipt]; in mlxsw_sp_nexthop4_type_init()
3891 list_add_tail(&nh->router_list_node, &mlxsw_sp->router->nexthop_list); in mlxsw_sp_nexthop4_init()
3931 if (mlxsw_sp->router->aborted) in mlxsw_sp_nexthop4_event()
4313 if (mlxsw_sp->router->adj_discard_index_valid) in mlxsw_sp_adj_discard_write()
4317 &mlxsw_sp->router->adj_discard_index); in mlxsw_sp_adj_discard_write()
4324 mlxsw_sp->router->adj_discard_index, rif_index); in mlxsw_sp_adj_discard_write()
4330 mlxsw_sp->router->adj_discard_index_valid = true; in mlxsw_sp_adj_discard_write()
4336 mlxsw_sp->router->adj_discard_index); in mlxsw_sp_adj_discard_write()
4367 adjacency_index = mlxsw_sp->router->adj_discard_index; in mlxsw_sp_fib_entry_op_remote()
4456 ipip_ops = mlxsw_sp->router->ipip_ops_arr[ipip_entry->ipipt]; in mlxsw_sp_fib_entry_op_ipip_decap()
4533 struct mlxsw_sp_router *router = mlxsw_sp->router; in mlxsw_sp_fib4_entry_type_set() local
4553 tunnel_index = router->nve_decap_config.tunnel_index; in mlxsw_sp_fib4_entry_type_set()
4739 lpm_tree = mlxsw_sp->router->lpm.proto_trees[fib->proto]; in mlxsw_sp_fib_lpm_tree_link()
4932 if (mlxsw_sp->router->aborted) in mlxsw_sp_router_fib4_replace()
4989 if (mlxsw_sp->router->aborted) in mlxsw_sp_router_fib4_del()
5097 ipip_ops = mlxsw_sp->router->ipip_ops_arr[ipip_entry->ipipt]; in mlxsw_sp_nexthop6_type_init()
5141 list_add_tail(&nh->router_list_node, &mlxsw_sp->router->nexthop_list); in mlxsw_sp_nexthop6_init()
5520 if (mlxsw_sp->router->aborted) in mlxsw_sp_router_fib6_replace()
5583 if (mlxsw_sp->router->aborted) in mlxsw_sp_router_fib6_append()
5627 if (mlxsw_sp->router->aborted) in mlxsw_sp_router_fib6_del()
5677 struct mlxsw_sp_vr *vr = &mlxsw_sp->router->vrs[i]; in __mlxsw_sp_router_set_abort_trap()
5715 if (mlxsw_sp->router->aborted) in mlxsw_sp_router_fibmr_add()
5732 if (mlxsw_sp->router->aborted) in mlxsw_sp_router_fibmr_del()
5752 if (mlxsw_sp->router->aborted) in mlxsw_sp_router_fibmr_vif_add()
5773 if (mlxsw_sp->router->aborted) in mlxsw_sp_router_fibmr_vif_del()
5795 /* The multicast router code does not need an abort trap as by default, in mlxsw_sp_router_set_abort_trap()
5862 struct mlxsw_sp_vr *vr = &mlxsw_sp->router->vrs[i]; in mlxsw_sp_router_fib_flush()
5871 /* If virtual router was only used for IPv4, then it's no in mlxsw_sp_router_fib_flush()
5883 if (!mlxsw_sp->router->adj_discard_index_valid) in mlxsw_sp_router_fib_flush()
5886 mlxsw_sp->router->adj_discard_index); in mlxsw_sp_router_fib_flush()
5887 mlxsw_sp->router->adj_discard_index_valid = false; in mlxsw_sp_router_fib_flush()
5894 if (mlxsw_sp->router->aborted) in mlxsw_sp_router_fib_abort()
5898 mlxsw_sp->router->aborted = true; in mlxsw_sp_router_fib_abort()
5978 mutex_lock(&mlxsw_sp->router->lock); in mlxsw_sp_router_fib4_event_work()
6000 mutex_unlock(&mlxsw_sp->router->lock); in mlxsw_sp_router_fib4_event_work()
6011 mutex_lock(&mlxsw_sp->router->lock); in mlxsw_sp_router_fib6_event_work()
6038 mutex_unlock(&mlxsw_sp->router->lock); in mlxsw_sp_router_fib6_event_work()
6051 mutex_lock(&mlxsw_sp->router->lock); in mlxsw_sp_router_fibmr_event_work()
6080 mutex_unlock(&mlxsw_sp->router->lock); in mlxsw_sp_router_fibmr_event_work()
6166 if (mlxsw_sp->router->aborted) in mlxsw_sp_router_fib_rule_event()
6207 struct mlxsw_sp_router *router; in mlxsw_sp_router_fib_event() local
6215 router = container_of(nb, struct mlxsw_sp_router, fib_nb); in mlxsw_sp_router_fib_event()
6221 router->mlxsw_sp); in mlxsw_sp_router_fib_event()
6226 if (router->aborted) { in mlxsw_sp_router_fib_event()
6259 fib_work->mlxsw_sp = router->mlxsw_sp; in mlxsw_sp_router_fib_event()
6296 if (mlxsw_sp->router->rifs[i] && in mlxsw_sp_rif_find_by_dev()
6297 mlxsw_sp->router->rifs[i]->dev == dev) in mlxsw_sp_rif_find_by_dev()
6298 return mlxsw_sp->router->rifs[i]; in mlxsw_sp_rif_find_by_dev()
6308 mutex_lock(&mlxsw_sp->router->lock); in mlxsw_sp_rif_exists()
6310 mutex_unlock(&mlxsw_sp->router->lock); in mlxsw_sp_rif_exists()
6320 mutex_lock(&mlxsw_sp->router->lock); in mlxsw_sp_rif_vid()
6334 mutex_unlock(&mlxsw_sp->router->lock); in mlxsw_sp_rif_vid()
6429 if (!mlxsw_sp->router->rifs[i]) { in mlxsw_sp_rif_index_alloc()
6464 return mlxsw_sp->router->rifs[rif_index]; in mlxsw_sp_rif_by_index()
6528 NL_SET_ERR_MSG_MOD(extack, "Exceeded number of supported router interfaces"); in mlxsw_sp_rif_create()
6538 mlxsw_sp->router->rifs[rif_index] = rif; in mlxsw_sp_rif_create()
6576 mlxsw_sp->router->rifs[rif_index] = NULL; in mlxsw_sp_rif_create()
6595 vr = &mlxsw_sp->router->vrs[rif->vr_id]; in mlxsw_sp_rif_destroy()
6604 mlxsw_sp->router->rifs[rif->rif_index] = NULL; in mlxsw_sp_rif_destroy()
6616 mutex_lock(&mlxsw_sp->router->lock); in mlxsw_sp_rif_destroy_by_dev()
6622 mutex_unlock(&mlxsw_sp->router->lock); in mlxsw_sp_rif_destroy_by_dev()
6746 mutex_lock(&mlxsw_sp->router->lock); in mlxsw_sp_port_vlan_router_leave()
6748 mutex_unlock(&mlxsw_sp->router->lock); in mlxsw_sp_port_vlan_router_leave()
6921 NL_SET_ERR_MSG_MOD(extack, "macvlan is only supported on top of router interfaces"); in mlxsw_sp_rif_macvlan_add()
6970 mutex_lock(&mlxsw_sp->router->lock); in mlxsw_sp_rif_macvlan_del()
6972 mutex_unlock(&mlxsw_sp->router->lock); in mlxsw_sp_rif_macvlan_del()
7006 rif = mlxsw_sp->router->rifs[i]; in mlxsw_sp_router_port_check_rif_addr()
7013 NL_SET_ERR_MSG_MOD(extack, "All router interface MAC addresses must have the same prefix"); in mlxsw_sp_router_port_check_rif_addr()
7048 struct mlxsw_sp_router *router; in mlxsw_sp_inetaddr_event() local
7056 router = container_of(nb, struct mlxsw_sp_router, inetaddr_nb); in mlxsw_sp_inetaddr_event()
7057 mutex_lock(&router->lock); in mlxsw_sp_inetaddr_event()
7058 rif = mlxsw_sp_rif_find_by_dev(router->mlxsw_sp, dev); in mlxsw_sp_inetaddr_event()
7062 err = __mlxsw_sp_inetaddr_event(router->mlxsw_sp, dev, event, NULL); in mlxsw_sp_inetaddr_event()
7064 mutex_unlock(&router->lock); in mlxsw_sp_inetaddr_event()
7081 mutex_lock(&mlxsw_sp->router->lock); in mlxsw_sp_inetaddr_valid_event()
7093 mutex_unlock(&mlxsw_sp->router->lock); in mlxsw_sp_inetaddr_valid_event()
7114 mutex_lock(&mlxsw_sp->router->lock); in mlxsw_sp_inet6addr_event_work()
7122 mutex_unlock(&mlxsw_sp->router->lock); in mlxsw_sp_inet6addr_event_work()
7135 struct mlxsw_sp_router *router; in mlxsw_sp_inet6addr_event() local
7145 router = container_of(nb, struct mlxsw_sp_router, inet6addr_nb); in mlxsw_sp_inet6addr_event()
7147 inet6addr_work->mlxsw_sp = router->mlxsw_sp; in mlxsw_sp_inet6addr_event()
7169 mutex_lock(&mlxsw_sp->router->lock); in mlxsw_sp_inet6addr_valid_event()
7181 mutex_unlock(&mlxsw_sp->router->lock); in mlxsw_sp_inet6addr_valid_event()
7233 vr = &mlxsw_sp->router->vrs[rif->vr_id]; in mlxsw_sp_router_port_change_event()
7274 mutex_lock(&mlxsw_sp->router->lock); in mlxsw_sp_netdevice_router_port_event()
7290 mutex_unlock(&mlxsw_sp->router->lock); in mlxsw_sp_netdevice_router_port_event()
7301 * destroy it and create a new one with the new virtual router ID. in mlxsw_sp_port_vrf_join()
7329 * direct more MAC addresses to the router. in mlxsw_sp_netdevice_vrf_event()
7334 mutex_lock(&mlxsw_sp->router->lock); in mlxsw_sp_netdevice_vrf_event()
7349 mutex_unlock(&mlxsw_sp->router->lock); in mlxsw_sp_netdevice_vrf_event()
7375 netdev_warn(rif->dev, "Router interface is deleted. Upper macvlans will not work\n"); in mlxsw_sp_rif_macvlan_flush()
7672 ul_vr = &mlxsw_sp->router->vrs[lb_rif->ul_vr_id]; in mlxsw_sp1_rif_ipip_lb_deconfigure()
7718 NL_SET_ERR_MSG_MOD(extack, "Exceeded number of supported router interfaces"); in mlxsw_sp_ul_rif_create()
7726 mlxsw_sp->router->rifs[rif_index] = ul_rif; in mlxsw_sp_ul_rif_create()
7735 mlxsw_sp->router->rifs[rif_index] = NULL; in mlxsw_sp_ul_rif_create()
7745 mlxsw_sp->router->rifs[ul_rif->rif_index] = NULL; in mlxsw_sp_ul_rif_destroy()
7784 vr = &mlxsw_sp->router->vrs[ul_rif->vr_id]; in mlxsw_sp_ul_rif_put()
7800 mutex_lock(&mlxsw_sp->router->lock); in mlxsw_sp_router_ul_rif_get()
7808 mutex_unlock(&mlxsw_sp->router->lock); in mlxsw_sp_router_ul_rif_get()
7816 mutex_lock(&mlxsw_sp->router->lock); in mlxsw_sp_router_ul_rif_put()
7817 ul_rif = mlxsw_sp->router->rifs[ul_rif_index]; in mlxsw_sp_router_ul_rif_put()
7823 mutex_unlock(&mlxsw_sp->router->lock); in mlxsw_sp_router_ul_rif_put()
7883 mlxsw_sp->router->rifs = kcalloc(max_rifs, in mlxsw_sp_rifs_init()
7886 if (!mlxsw_sp->router->rifs) in mlxsw_sp_rifs_init()
7897 WARN_ON_ONCE(mlxsw_sp->router->rifs[i]); in mlxsw_sp_rifs_fini()
7899 kfree(mlxsw_sp->router->rifs); in mlxsw_sp_rifs_fini()
7915 mlxsw_sp->router->ipip_ops_arr = mlxsw_sp_ipip_ops_arr; in mlxsw_sp_ipips_init()
7916 INIT_LIST_HEAD(&mlxsw_sp->router->ipip_list); in mlxsw_sp_ipips_init()
7930 WARN_ON(!list_empty(&mlxsw_sp->router->ipip_list)); in mlxsw_sp_ipips_fini()
7935 struct mlxsw_sp_router *router; in mlxsw_sp_router_fib_dump_flush() local
7942 router = container_of(nb, struct mlxsw_sp_router, fib_nb); in mlxsw_sp_router_fib_dump_flush()
7943 mlxsw_sp_router_fib_flush(router->mlxsw_sp); in mlxsw_sp_router_fib_dump_flush()
8063 struct mlxsw_sp_router *router; in mlxsw_sp_router_init() local
8066 router = kzalloc(sizeof(*mlxsw_sp->router), GFP_KERNEL); in mlxsw_sp_router_init()
8067 if (!router) in mlxsw_sp_router_init()
8069 mutex_init(&router->lock); in mlxsw_sp_router_init()
8070 mlxsw_sp->router = router; in mlxsw_sp_router_init()
8071 router->mlxsw_sp = mlxsw_sp; in mlxsw_sp_router_init()
8073 INIT_LIST_HEAD(&mlxsw_sp->router->nexthop_neighs_list); in mlxsw_sp_router_init()
8086 err = rhashtable_init(&mlxsw_sp->router->nexthop_ht, in mlxsw_sp_router_init()
8091 err = rhashtable_init(&mlxsw_sp->router->nexthop_group_ht, in mlxsw_sp_router_init()
8096 INIT_LIST_HEAD(&mlxsw_sp->router->nexthop_list); in mlxsw_sp_router_init()
8121 router->inetaddr_nb.notifier_call = mlxsw_sp_inetaddr_event; in mlxsw_sp_router_init()
8122 err = register_inetaddr_notifier(&router->inetaddr_nb); in mlxsw_sp_router_init()
8126 router->inet6addr_nb.notifier_call = mlxsw_sp_inet6addr_event; in mlxsw_sp_router_init()
8127 err = register_inet6addr_notifier(&router->inet6addr_nb); in mlxsw_sp_router_init()
8131 mlxsw_sp->router->netevent_nb.notifier_call = in mlxsw_sp_router_init()
8133 err = register_netevent_notifier(&mlxsw_sp->router->netevent_nb); in mlxsw_sp_router_init()
8137 mlxsw_sp->router->fib_nb.notifier_call = mlxsw_sp_router_fib_event; in mlxsw_sp_router_init()
8139 &mlxsw_sp->router->fib_nb, in mlxsw_sp_router_init()
8147 unregister_netevent_notifier(&mlxsw_sp->router->netevent_nb); in mlxsw_sp_router_init()
8149 unregister_inet6addr_notifier(&router->inet6addr_nb); in mlxsw_sp_router_init()
8151 unregister_inetaddr_notifier(&router->inetaddr_nb); in mlxsw_sp_router_init()
8164 rhashtable_destroy(&mlxsw_sp->router->nexthop_group_ht); in mlxsw_sp_router_init()
8166 rhashtable_destroy(&mlxsw_sp->router->nexthop_ht); in mlxsw_sp_router_init()
8174 mutex_destroy(&mlxsw_sp->router->lock); in mlxsw_sp_router_init()
8175 kfree(mlxsw_sp->router); in mlxsw_sp_router_init()
8182 &mlxsw_sp->router->fib_nb); in mlxsw_sp_router_fini()
8183 unregister_netevent_notifier(&mlxsw_sp->router->netevent_nb); in mlxsw_sp_router_fini()
8184 unregister_inet6addr_notifier(&mlxsw_sp->router->inet6addr_nb); in mlxsw_sp_router_fini()
8185 unregister_inetaddr_notifier(&mlxsw_sp->router->inetaddr_nb); in mlxsw_sp_router_fini()
8191 rhashtable_destroy(&mlxsw_sp->router->nexthop_group_ht); in mlxsw_sp_router_fini()
8192 rhashtable_destroy(&mlxsw_sp->router->nexthop_ht); in mlxsw_sp_router_fini()
8196 mutex_destroy(&mlxsw_sp->router->lock); in mlxsw_sp_router_fini()
8197 kfree(mlxsw_sp->router); in mlxsw_sp_router_fini()