Lines Matching refs:nhgi
2903 struct mlxsw_sp_nexthop_group_info *nhgi; /* pointer back to the group member
2977 struct mlxsw_sp_nexthop_group_info *nhgi; member
3050 struct mlxsw_sp_nexthop_group_info *nhgi = nh->nhgi; in mlxsw_sp_nexthop_indexes() local
3054 if (!nh->offloaded || !nhgi->adj_index_valid) in mlxsw_sp_nexthop_indexes()
3057 *p_adj_index = nhgi->adj_index; in mlxsw_sp_nexthop_indexes()
3058 *p_adj_size = nhgi->ecmp_size; in mlxsw_sp_nexthop_indexes()
3060 for (i = 0; i < nhgi->count; i++) { in mlxsw_sp_nexthop_indexes()
3061 struct mlxsw_sp_nexthop *nh_iter = &nhgi->nexthops[i]; in mlxsw_sp_nexthop_indexes()
3080 struct mlxsw_sp_nexthop_group_info *nhgi = nh->nhgi; in mlxsw_sp_nexthop_group_has_ipip() local
3083 for (i = 0; i < nhgi->count; i++) { in mlxsw_sp_nexthop_group_has_ipip()
3084 struct mlxsw_sp_nexthop *nh_iter = &nhgi->nexthops[i]; in mlxsw_sp_nexthop_group_has_ipip()
3198 for (i = 0; i < nh_grp->nhgi->count; i++) { in mlxsw_sp_nexthop6_group_has_nexthop()
3201 nh = &nh_grp->nhgi->nexthops[i]; in mlxsw_sp_nexthop6_group_has_nexthop()
3216 if (nh_grp->nhgi->count != fib6_entry->nrt6) in mlxsw_sp_nexthop6_group_cmp()
3271 val = nh_grp->nhgi->count; in mlxsw_sp_nexthop_group_hash_obj()
3272 for (i = 0; i < nh_grp->nhgi->count; i++) { in mlxsw_sp_nexthop_group_hash_obj()
3273 nh = &nh_grp->nhgi->nexthops[i]; in mlxsw_sp_nexthop_group_hash_obj()
3333 !nh_grp->nhgi->gateway) in mlxsw_sp_nexthop_group_insert()
3345 !nh_grp->nhgi->gateway) in mlxsw_sp_nexthop_group_remove()
3427 struct mlxsw_sp_nexthop_group_info *nhgi = nh_grp->nhgi; in mlxsw_sp_adj_index_mass_update() local
3437 nhgi->adj_index, in mlxsw_sp_adj_index_mass_update()
3438 nhgi->ecmp_size); in mlxsw_sp_adj_index_mass_update()
3448 nhgi->adj_index, in mlxsw_sp_adj_index_mass_update()
3449 nhgi->ecmp_size, in mlxsw_sp_adj_index_mass_update()
3562 struct mlxsw_sp_nexthop_group_info *nhgi, in mlxsw_sp_nexthop_group_update() argument
3566 u32 adj_index = nhgi->adj_index; /* base */ in mlxsw_sp_nexthop_group_update()
3570 for (i = 0; i < nhgi->count; i++) { in mlxsw_sp_nexthop_group_update()
3571 nh = &nhgi->nexthops[i]; in mlxsw_sp_nexthop_group_update()
3698 mlxsw_sp_nexthop_group_normalize(struct mlxsw_sp_nexthop_group_info *nhgi) in mlxsw_sp_nexthop_group_normalize() argument
3703 for (i = 0; i < nhgi->count; i++) { in mlxsw_sp_nexthop_group_normalize()
3704 nh = &nhgi->nexthops[i]; in mlxsw_sp_nexthop_group_normalize()
3714 for (i = 0; i < nhgi->count; i++) { in mlxsw_sp_nexthop_group_normalize()
3715 nh = &nhgi->nexthops[i]; in mlxsw_sp_nexthop_group_normalize()
3723 nhgi->sum_norm_weight = sum_norm_weight; in mlxsw_sp_nexthop_group_normalize()
3727 mlxsw_sp_nexthop_group_rebalance(struct mlxsw_sp_nexthop_group_info *nhgi) in mlxsw_sp_nexthop_group_rebalance() argument
3730 int total = nhgi->sum_norm_weight; in mlxsw_sp_nexthop_group_rebalance()
3731 u16 ecmp_size = nhgi->ecmp_size; in mlxsw_sp_nexthop_group_rebalance()
3733 for (i = 0; i < nhgi->count; i++) { in mlxsw_sp_nexthop_group_rebalance()
3734 struct mlxsw_sp_nexthop *nh = &nhgi->nexthops[i]; in mlxsw_sp_nexthop_group_rebalance()
3756 for (i = 0; i < nh_grp->nhgi->count; i++) { in mlxsw_sp_nexthop4_group_offload_refresh()
3757 struct mlxsw_sp_nexthop *nh = &nh_grp->nhgi->nexthops[i]; in mlxsw_sp_nexthop4_group_offload_refresh()
3804 struct mlxsw_sp_nexthop_group *nh_grp = nh->nhgi->nh_grp; in mlxsw_sp_nexthop_bucket_offload_refresh()
3835 nh_grp->nhgi->adj_index_valid, false); in mlxsw_sp_nexthop_obj_group_offload_refresh()
3840 if (!nh_grp->nhgi->is_resilient) in mlxsw_sp_nexthop_obj_group_offload_refresh()
3843 for (i = 0; i < nh_grp->nhgi->count; i++) { in mlxsw_sp_nexthop_obj_group_offload_refresh()
3844 struct mlxsw_sp_nexthop *nh = &nh_grp->nhgi->nexthops[i]; in mlxsw_sp_nexthop_obj_group_offload_refresh()
3871 struct mlxsw_sp_nexthop_group_info *nhgi = nh_grp->nhgi; in mlxsw_sp_nexthop_group_refresh() local
3880 if (!nhgi->gateway) in mlxsw_sp_nexthop_group_refresh()
3883 for (i = 0; i < nhgi->count; i++) { in mlxsw_sp_nexthop_group_refresh()
3884 nh = &nhgi->nexthops[i]; in mlxsw_sp_nexthop_group_refresh()
3896 err = mlxsw_sp_nexthop_group_update(mlxsw_sp, nhgi, false); in mlxsw_sp_nexthop_group_refresh()
3907 mlxsw_sp_nexthop_group_normalize(nhgi); in mlxsw_sp_nexthop_group_refresh()
3908 if (!nhgi->sum_norm_weight) { in mlxsw_sp_nexthop_group_refresh()
3916 ecmp_size = nhgi->sum_norm_weight; in mlxsw_sp_nexthop_group_refresh()
3931 old_adj_index_valid = nhgi->adj_index_valid; in mlxsw_sp_nexthop_group_refresh()
3932 old_adj_index = nhgi->adj_index; in mlxsw_sp_nexthop_group_refresh()
3933 old_ecmp_size = nhgi->ecmp_size; in mlxsw_sp_nexthop_group_refresh()
3934 nhgi->adj_index_valid = 1; in mlxsw_sp_nexthop_group_refresh()
3935 nhgi->adj_index = adj_index; in mlxsw_sp_nexthop_group_refresh()
3936 nhgi->ecmp_size = ecmp_size; in mlxsw_sp_nexthop_group_refresh()
3937 mlxsw_sp_nexthop_group_rebalance(nhgi); in mlxsw_sp_nexthop_group_refresh()
3938 err = mlxsw_sp_nexthop_group_update(mlxsw_sp, nhgi, true); in mlxsw_sp_nexthop_group_refresh()
3970 old_adj_index_valid = nhgi->adj_index_valid; in mlxsw_sp_nexthop_group_refresh()
3971 nhgi->adj_index_valid = 0; in mlxsw_sp_nexthop_group_refresh()
3972 for (i = 0; i < nhgi->count; i++) { in mlxsw_sp_nexthop_group_refresh()
3973 nh = &nhgi->nexthops[i]; in mlxsw_sp_nexthop_group_refresh()
3982 nhgi->ecmp_size, nhgi->adj_index); in mlxsw_sp_nexthop_group_refresh()
3992 } else if (nh->nhgi->is_resilient) { in __mlxsw_sp_nexthop_neigh_update()
4039 mlxsw_sp_nexthop_group_refresh(mlxsw_sp, nh->nhgi->nh_grp); in mlxsw_sp_nexthop_dead_neigh_replace()
4076 mlxsw_sp_nexthop_group_refresh(mlxsw_sp, nh->nhgi->nh_grp); in mlxsw_sp_nexthop_neigh_update()
4107 if (!nh->nhgi->gateway || nh->neigh_entry) in mlxsw_sp_nexthop_neigh_init()
4198 if (!nh->nhgi->gateway || nh->ipip_entry) in mlxsw_sp_nexthop_ipip_init()
4290 nh->nhgi = nh_grp->nhgi; in mlxsw_sp_nexthop4_init()
4361 mlxsw_sp_nexthop_group_refresh(mlxsw_sp, nh->nhgi->nh_grp); in mlxsw_sp_nexthop4_event()
4384 mlxsw_sp_nexthop_group_refresh(mlxsw_sp, nh->nhgi->nh_grp); in mlxsw_sp_nexthop_rif_update()
4407 mlxsw_sp_nexthop_group_refresh(mlxsw_sp, nh->nhgi->nh_grp); in mlxsw_sp_nexthop_rif_gone_sync()
4483 mlxsw_reg_ratrad_pack(ratrad_pl, nh_grp->nhgi->adj_index, in mlxsw_sp_nh_grp_activity_get()
4484 nh_grp->nhgi->count); in mlxsw_sp_nh_grp_activity_get()
4489 for (i = 0; i < nh_grp->nhgi->count; i++) { in mlxsw_sp_nh_grp_activity_get()
4507 activity = bitmap_zalloc(nh_grp->nhgi->count, GFP_KERNEL); in mlxsw_sp_nh_grp_activity_update()
4513 nh_grp->nhgi->count, activity); in mlxsw_sp_nh_grp_activity_update()
4529 struct mlxsw_sp_nexthop_group_info *nhgi; in mlxsw_sp_nh_grp_activity_work() local
4538 list_for_each_entry(nhgi, &router->nh_res_grp_list, list) { in mlxsw_sp_nh_grp_activity_work()
4539 mlxsw_sp_nh_grp_activity_update(router->mlxsw_sp, nhgi->nh_grp); in mlxsw_sp_nh_grp_activity_work()
4769 nh->nhgi = nh_grp->nhgi; in mlxsw_sp_nexthop_obj_init()
4800 if (nh_grp->nhgi->is_resilient && !nh->should_offload) { in mlxsw_sp_nexthop_obj_init()
4829 struct mlxsw_sp_nexthop_group_info *nhgi; in mlxsw_sp_nexthop_obj_group_info_init() local
4850 nhgi = kzalloc(struct_size(nhgi, nexthops, nhs), GFP_KERNEL); in mlxsw_sp_nexthop_obj_group_info_init()
4851 if (!nhgi) in mlxsw_sp_nexthop_obj_group_info_init()
4853 nh_grp->nhgi = nhgi; in mlxsw_sp_nexthop_obj_group_info_init()
4854 nhgi->nh_grp = nh_grp; in mlxsw_sp_nexthop_obj_group_info_init()
4855 nhgi->gateway = mlxsw_sp_nexthop_obj_is_gateway(mlxsw_sp, info); in mlxsw_sp_nexthop_obj_group_info_init()
4856 nhgi->is_resilient = is_resilient; in mlxsw_sp_nexthop_obj_group_info_init()
4857 nhgi->count = nhs; in mlxsw_sp_nexthop_obj_group_info_init()
4858 for (i = 0; i < nhgi->count; i++) { in mlxsw_sp_nexthop_obj_group_info_init()
4862 nh = &nhgi->nexthops[i]; in mlxsw_sp_nexthop_obj_group_info_init()
4897 if (nhgi->is_resilient) { in mlxsw_sp_nexthop_obj_group_info_init()
4900 list_add(&nhgi->list, &mlxsw_sp->router->nh_res_grp_list); in mlxsw_sp_nexthop_obj_group_info_init()
4908 i = nhgi->count; in mlxsw_sp_nexthop_obj_group_info_init()
4911 nh = &nhgi->nexthops[i]; in mlxsw_sp_nexthop_obj_group_info_init()
4914 kfree(nhgi); in mlxsw_sp_nexthop_obj_group_info_init()
4922 struct mlxsw_sp_nexthop_group_info *nhgi = nh_grp->nhgi; in mlxsw_sp_nexthop_obj_group_info_fini() local
4926 if (nhgi->is_resilient) { in mlxsw_sp_nexthop_obj_group_info_fini()
4927 list_del(&nhgi->list); in mlxsw_sp_nexthop_obj_group_info_fini()
4933 for (i = nhgi->count - 1; i >= 0; i--) { in mlxsw_sp_nexthop_obj_group_info_fini()
4934 struct mlxsw_sp_nexthop *nh = &nhgi->nexthops[i]; in mlxsw_sp_nexthop_obj_group_info_fini()
4939 WARN_ON_ONCE(nhgi->adj_index_valid); in mlxsw_sp_nexthop_obj_group_info_fini()
4940 kfree(nhgi); in mlxsw_sp_nexthop_obj_group_info_fini()
5014 struct mlxsw_sp_nexthop_group_info *old_nhgi = old_nh_grp->nhgi; in mlxsw_sp_nexthop_obj_group_replace()
5015 struct mlxsw_sp_nexthop_group_info *new_nhgi = nh_grp->nhgi; in mlxsw_sp_nexthop_obj_group_replace()
5018 old_nh_grp->nhgi = new_nhgi; in mlxsw_sp_nexthop_obj_group_replace()
5020 nh_grp->nhgi = old_nhgi; in mlxsw_sp_nexthop_obj_group_replace()
5073 nh_grp->nhgi = new_nhgi; in mlxsw_sp_nexthop_obj_group_replace()
5075 old_nh_grp->nhgi = old_nhgi; in mlxsw_sp_nexthop_obj_group_replace()
5175 adj_index = nh->nhgi->adj_index + bucket_index; in mlxsw_sp_nexthop_obj_bucket_adj_update()
5209 struct mlxsw_sp_nexthop_group_info *nhgi; in mlxsw_sp_nexthop_obj_bucket_replace() local
5221 nhgi = nh_grp->nhgi; in mlxsw_sp_nexthop_obj_bucket_replace()
5223 if (bucket_index >= nhgi->count) { in mlxsw_sp_nexthop_obj_bucket_replace()
5228 nh = &nhgi->nexthops[bucket_index]; in mlxsw_sp_nexthop_obj_bucket_replace()
5304 struct mlxsw_sp_nexthop_group_info *nhgi; in mlxsw_sp_nexthop4_group_info_init() local
5308 nhgi = kzalloc(struct_size(nhgi, nexthops, nhs), GFP_KERNEL); in mlxsw_sp_nexthop4_group_info_init()
5309 if (!nhgi) in mlxsw_sp_nexthop4_group_info_init()
5311 nh_grp->nhgi = nhgi; in mlxsw_sp_nexthop4_group_info_init()
5312 nhgi->nh_grp = nh_grp; in mlxsw_sp_nexthop4_group_info_init()
5313 nhgi->gateway = mlxsw_sp_fi_is_gateway(mlxsw_sp, nh_grp->ipv4.fi); in mlxsw_sp_nexthop4_group_info_init()
5314 nhgi->count = nhs; in mlxsw_sp_nexthop4_group_info_init()
5315 for (i = 0; i < nhgi->count; i++) { in mlxsw_sp_nexthop4_group_info_init()
5318 nh = &nhgi->nexthops[i]; in mlxsw_sp_nexthop4_group_info_init()
5336 i = nhgi->count; in mlxsw_sp_nexthop4_group_info_init()
5339 nh = &nhgi->nexthops[i]; in mlxsw_sp_nexthop4_group_info_init()
5342 kfree(nhgi); in mlxsw_sp_nexthop4_group_info_init()
5350 struct mlxsw_sp_nexthop_group_info *nhgi = nh_grp->nhgi; in mlxsw_sp_nexthop4_group_info_fini() local
5354 for (i = nhgi->count - 1; i >= 0; i--) { in mlxsw_sp_nexthop4_group_info_fini()
5355 struct mlxsw_sp_nexthop *nh = &nhgi->nexthops[i]; in mlxsw_sp_nexthop4_group_info_fini()
5360 WARN_ON_ONCE(nhgi->adj_index_valid); in mlxsw_sp_nexthop4_group_info_fini()
5361 kfree(nhgi); in mlxsw_sp_nexthop4_group_info_fini()
5488 return !!nh_group->nhgi->adj_index_valid; in mlxsw_sp_fib_entry_should_offload()
5490 return !!nh_group->nhgi->nh_rif; in mlxsw_sp_fib_entry_should_offload()
5506 for (i = 0; i < nh_grp->nhgi->count; i++) { in mlxsw_sp_rt6_nexthop()
5507 struct mlxsw_sp_nexthop *nh = &nh_grp->nhgi->nexthops[i]; in mlxsw_sp_rt6_nexthop()
5736 struct mlxsw_sp_nexthop_group_info *nhgi = nh_group->nhgi; in mlxsw_sp_fib_entry_op_remote() local
5749 adjacency_index = nhgi->adj_index; in mlxsw_sp_fib_entry_op_remote()
5750 ecmp_size = nhgi->ecmp_size; in mlxsw_sp_fib_entry_op_remote()
5751 } else if (!nhgi->adj_index_valid && nhgi->count && nhgi->nh_rif) { in mlxsw_sp_fib_entry_op_remote()
5770 struct mlxsw_sp_rif *rif = fib_entry->nh_group->nhgi->nh_rif; in mlxsw_sp_fib_entry_op_local()
5926 struct mlxsw_sp_nexthop_group_info *nhgi = fib_entry->nh_group->nhgi; in mlxsw_sp_fib4_entry_type_set() local
5930 int ifindex = nhgi->nexthops[0].ifindex; in mlxsw_sp_fib4_entry_type_set()
5969 if (nhgi->gateway) in mlxsw_sp_fib4_entry_type_set()
6505 nh->nhgi = nh_grp->nhgi; in mlxsw_sp_nexthop6_init()
6551 struct mlxsw_sp_nexthop_group_info *nhgi; in mlxsw_sp_nexthop6_group_info_init() local
6556 nhgi = kzalloc(struct_size(nhgi, nexthops, fib6_entry->nrt6), in mlxsw_sp_nexthop6_group_info_init()
6558 if (!nhgi) in mlxsw_sp_nexthop6_group_info_init()
6560 nh_grp->nhgi = nhgi; in mlxsw_sp_nexthop6_group_info_init()
6561 nhgi->nh_grp = nh_grp; in mlxsw_sp_nexthop6_group_info_init()
6564 nhgi->gateway = mlxsw_sp_rt6_is_gateway(mlxsw_sp, mlxsw_sp_rt6->rt); in mlxsw_sp_nexthop6_group_info_init()
6565 nhgi->count = fib6_entry->nrt6; in mlxsw_sp_nexthop6_group_info_init()
6566 for (i = 0; i < nhgi->count; i++) { in mlxsw_sp_nexthop6_group_info_init()
6569 nh = &nhgi->nexthops[i]; in mlxsw_sp_nexthop6_group_info_init()
6575 nh_grp->nhgi = nhgi; in mlxsw_sp_nexthop6_group_info_init()
6588 i = nhgi->count; in mlxsw_sp_nexthop6_group_info_init()
6591 nh = &nhgi->nexthops[i]; in mlxsw_sp_nexthop6_group_info_init()
6594 kfree(nhgi); in mlxsw_sp_nexthop6_group_info_init()
6602 struct mlxsw_sp_nexthop_group_info *nhgi = nh_grp->nhgi; in mlxsw_sp_nexthop6_group_info_fini() local
6606 for (i = nhgi->count - 1; i >= 0; i--) { in mlxsw_sp_nexthop6_group_info_fini()
6607 struct mlxsw_sp_nexthop *nh = &nhgi->nexthops[i]; in mlxsw_sp_nexthop6_group_info_fini()
6612 WARN_ON_ONCE(nhgi->adj_index_valid); in mlxsw_sp_nexthop6_group_info_fini()
6613 kfree(nhgi); in mlxsw_sp_nexthop6_group_info_fini()
6829 struct mlxsw_sp_nexthop_group_info *nhgi = fib_entry->nh_group->nhgi; in mlxsw_sp_fib6_entry_type_set_local() local
6833 int ifindex = nhgi->nexthops[0].ifindex; in mlxsw_sp_fib6_entry_type_set_local()
6871 else if (fib_entry->nh_group->nhgi->gateway) in mlxsw_sp_fib6_entry_type_set()