Lines Matching defs:nh

3091 mlxsw_sp_nexthop_dev(const struct mlxsw_sp_nexthop *nh)
3093 if (!nh->crif)
3095 return nh->crif->key.dev;
3196 struct mlxsw_sp_nexthop *nh)
3198 struct mlxsw_sp_nexthop_group *nh_grp = nh->nhgi->nh_grp;
3203 nhct = xa_load(&nh_grp->nhgi->nexthop_counters, nh->id);
3213 ptr = xa_store(&nh_grp->nhgi->nexthop_counters, nh->id, nhct,
3228 struct mlxsw_sp_nexthop *nh)
3230 struct mlxsw_sp_nexthop_group *nh_grp = nh->nhgi->nh_grp;
3233 nhct = xa_load(&nh_grp->nhgi->nexthop_counters, nh->id);
3240 xa_erase(&nh_grp->nhgi->nexthop_counters, nh->id);
3245 struct mlxsw_sp_nexthop *nh)
3252 if (nh->counter)
3257 if (!(nh->nhgi->hw_stats || dpipe_stats))
3260 if (nh->id)
3261 nhct = mlxsw_sp_nexthop_sh_counter_get(mlxsw_sp, nh);
3267 nh->counter = nhct;
3272 struct mlxsw_sp_nexthop *nh)
3274 if (!nh->counter)
3277 if (nh->id)
3278 mlxsw_sp_nexthop_sh_counter_put(mlxsw_sp, nh);
3280 mlxsw_sp_nexthop_counter_free(mlxsw_sp, nh->counter);
3281 nh->counter = NULL;
3285 struct mlxsw_sp_nexthop *nh)
3287 if (nh->nhgi->hw_stats)
3288 return mlxsw_sp_nexthop_counter_enable(mlxsw_sp, nh);
3289 mlxsw_sp_nexthop_counter_disable(mlxsw_sp, nh);
3294 struct mlxsw_sp_nexthop *nh, u64 *p_counter)
3296 if (!nh->counter)
3299 return mlxsw_sp_flow_counter_get(mlxsw_sp, nh->counter->counter_index,
3304 struct mlxsw_sp_nexthop *nh)
3306 if (!nh) {
3311 typeof(*nh), router_list_node);
3313 if (list_is_last(&nh->router_list_node, &router->nexthop_list))
3315 return list_next_entry(nh, router_list_node);
3318 bool mlxsw_sp_nexthop_is_forward(const struct mlxsw_sp_nexthop *nh)
3320 return nh->offloaded && nh->action == MLXSW_SP_NEXTHOP_ACTION_FORWARD;
3323 unsigned char *mlxsw_sp_nexthop_ha(struct mlxsw_sp_nexthop *nh)
3325 if (nh->type != MLXSW_SP_NEXTHOP_TYPE_ETH ||
3326 !mlxsw_sp_nexthop_is_forward(nh))
3328 return nh->neigh_entry->ha;
3331 int mlxsw_sp_nexthop_indexes(struct mlxsw_sp_nexthop *nh, u32 *p_adj_index,
3334 struct mlxsw_sp_nexthop_group_info *nhgi = nh->nhgi;
3338 if (!nh->offloaded || !nhgi->adj_index_valid)
3347 if (nh_iter == nh)
3357 struct mlxsw_sp_rif *mlxsw_sp_nexthop_rif(struct mlxsw_sp_nexthop *nh)
3359 if (WARN_ON(!nh->crif))
3361 return nh->crif->rif;
3364 bool mlxsw_sp_nexthop_group_has_ipip(struct mlxsw_sp_nexthop *nh)
3366 struct mlxsw_sp_nexthop_group_info *nhgi = nh->nhgi;
3485 const struct mlxsw_sp_nexthop *nh;
3487 nh = &nh_grp->nhgi->nexthops[i];
3488 if (nh->ifindex == ifindex && nh->nh_weight == weight &&
3489 ipv6_addr_equal(gw, (struct in6_addr *) nh->gw_addr))
3547 const struct mlxsw_sp_nexthop *nh;
3559 nh = &nh_grp->nhgi->nexthops[i];
3560 val ^= jhash(&nh->ifindex, sizeof(nh->ifindex), seed);
3561 val ^= jhash(&nh->gw_addr, sizeof(nh->gw_addr), seed);
3672 struct mlxsw_sp_nexthop *nh)
3675 &nh->ht_node, mlxsw_sp_nexthop_ht_params);
3679 struct mlxsw_sp_nexthop *nh)
3681 rhashtable_remove_fast(&mlxsw_sp->router->nexthop_ht, &nh->ht_node,
3742 struct mlxsw_sp_nexthop *nh,
3745 struct mlxsw_sp_neigh_entry *neigh_entry = nh->neigh_entry;
3746 struct mlxsw_sp_rif *rif = mlxsw_sp_nexthop_rif(nh);
3756 switch (nh->action) {
3773 if (nh->counter)
3774 mlxsw_reg_ratr_counter_pack(ratr_pl, nh->counter->counter_index,
3783 struct mlxsw_sp_nexthop *nh, bool force,
3788 for (i = 0; i < nh->num_adj_entries; i++) {
3792 nh, force, ratr_pl);
3802 struct mlxsw_sp_nexthop *nh,
3807 ipip_ops = mlxsw_sp->router->ipip_ops_arr[nh->ipip_entry->ipipt];
3808 return ipip_ops->nexthop_update(mlxsw_sp, adj_index, nh->ipip_entry,
3814 struct mlxsw_sp_nexthop *nh, bool force,
3819 for (i = 0; i < nh->num_adj_entries; i++) {
3823 nh, force, ratr_pl);
3832 struct mlxsw_sp_nexthop *nh, bool force,
3838 if (nh->type == MLXSW_SP_NEXTHOP_TYPE_ETH ||
3839 nh->action == MLXSW_SP_NEXTHOP_ACTION_DISCARD ||
3840 nh->action == MLXSW_SP_NEXTHOP_ACTION_TRAP)
3841 return mlxsw_sp_nexthop_eth_update(mlxsw_sp, adj_index, nh,
3844 return mlxsw_sp_nexthop_ipip_update(mlxsw_sp, adj_index, nh,
3855 struct mlxsw_sp_nexthop *nh;
3859 nh = &nhgi->nexthops[i];
3861 if (!nh->should_offload) {
3862 mlxsw_sp_nexthop_counter_disable(mlxsw_sp, nh);
3863 nh->offloaded = 0;
3867 if (nh->update || reallocate) {
3870 err = mlxsw_sp_nexthop_counter_update(mlxsw_sp, nh);
3874 err = mlxsw_sp_nexthop_update(mlxsw_sp, adj_index, nh,
3878 nh->update = 0;
3879 nh->offloaded = 1;
3881 adj_index += nh->num_adj_entries;
3994 struct mlxsw_sp_nexthop *nh;
3997 nh = &nhgi->nexthops[i];
3999 if (!nh->should_offload)
4002 g = gcd(nh->nh_weight, g);
4004 g = nh->nh_weight;
4008 nh = &nhgi->nexthops[i];
4010 if (!nh->should_offload)
4012 nh->norm_nh_weight = nh->nh_weight / g;
4013 sum_norm_weight += nh->norm_nh_weight;
4027 struct mlxsw_sp_nexthop *nh = &nhgi->nexthops[i];
4030 if (!nh->should_offload)
4032 weight += nh->norm_nh_weight;
4034 nh->num_adj_entries = upper_bound - lower_bound;
4050 struct mlxsw_sp_nexthop *nh = &nh_grp->nhgi->nexthops[i];
4052 if (nh->offloaded)
4053 nh->key.fib_nh->fib_nh_flags |= RTNH_F_OFFLOAD;
4055 nh->key.fib_nh->fib_nh_flags &= ~RTNH_F_OFFLOAD;
4067 struct mlxsw_sp_nexthop *nh;
4069 nh = mlxsw_sp_rt6_nexthop(nh_grp, mlxsw_sp_rt6);
4070 if (nh && nh->offloaded)
4094 const struct mlxsw_sp_nexthop *nh,
4097 struct mlxsw_sp_nexthop_group *nh_grp = nh->nhgi->nh_grp;
4100 if (nh->offloaded) {
4101 if (nh->action == MLXSW_SP_NEXTHOP_ACTION_TRAP)
4137 struct mlxsw_sp_nexthop *nh = &nh_grp->nhgi->nexthops[i];
4139 mlxsw_sp_nexthop_bucket_offload_refresh(mlxsw_sp, nh, i);
4166 struct mlxsw_sp_nexthop *nh;
4177 nh = &nhgi->nexthops[i];
4179 if (nh->should_offload != nh->offloaded) {
4181 if (nh->should_offload)
4182 nh->update = 1;
4266 nh = &nhgi->nexthops[i];
4267 nh->offloaded = 0;
4279 static void __mlxsw_sp_nexthop_neigh_update(struct mlxsw_sp_nexthop *nh,
4283 nh->action = MLXSW_SP_NEXTHOP_ACTION_FORWARD;
4284 nh->should_offload = 1;
4285 } else if (nh->nhgi->is_resilient) {
4286 nh->action = MLXSW_SP_NEXTHOP_ACTION_TRAP;
4287 nh->should_offload = 1;
4289 nh->should_offload = 0;
4291 nh->update = 1;
4299 struct mlxsw_sp_nexthop *nh;
4305 nh = list_first_entry(&neigh_entry->nexthop_list,
4307 dev = mlxsw_sp_nexthop_dev(nh);
4309 n = neigh_lookup(nh->neigh_tbl, &nh->gw_addr, dev);
4311 n = neigh_create(nh->neigh_tbl, &nh->gw_addr, dev);
4329 list_for_each_entry(nh, &neigh_entry->nexthop_list,
4333 __mlxsw_sp_nexthop_neigh_update(nh, !entry_connected);
4334 mlxsw_sp_nexthop_group_refresh(mlxsw_sp, nh->nhgi->nh_grp);
4353 struct mlxsw_sp_nexthop *nh;
4368 list_for_each_entry(nh, &neigh_entry->nexthop_list,
4370 __mlxsw_sp_nexthop_neigh_update(nh, removing);
4371 mlxsw_sp_nexthop_group_refresh(mlxsw_sp, nh->nhgi->nh_grp);
4375 static void mlxsw_sp_nexthop_crif_init(struct mlxsw_sp_nexthop *nh,
4378 if (nh->crif)
4381 nh->crif = crif;
4382 list_add(&nh->crif_list_node, &crif->nexthop_list);
4385 static void mlxsw_sp_nexthop_crif_fini(struct mlxsw_sp_nexthop *nh)
4387 if (!nh->crif)
4390 list_del(&nh->crif_list_node);
4391 nh->crif = NULL;
4395 struct mlxsw_sp_nexthop *nh)
4403 if (WARN_ON(!nh->crif->rif))
4406 if (!nh->nhgi->gateway || nh->neigh_entry)
4408 dev = mlxsw_sp_nexthop_dev(nh);
4415 n = neigh_lookup(nh->neigh_tbl, &nh->gw_addr, dev);
4417 n = neigh_create(nh->neigh_tbl, &nh->gw_addr, dev);
4438 nh->neigh_entry = neigh_entry;
4439 list_add_tail(&nh->neigh_list_node, &neigh_entry->nexthop_list);
4444 __mlxsw_sp_nexthop_neigh_update(nh, !(nud_state & NUD_VALID && !dead));
4454 struct mlxsw_sp_nexthop *nh)
4456 struct mlxsw_sp_neigh_entry *neigh_entry = nh->neigh_entry;
4463 __mlxsw_sp_nexthop_neigh_update(nh, true);
4464 list_del(&nh->neigh_list_node);
4465 nh->neigh_entry = NULL;
4493 struct mlxsw_sp_nexthop *nh,
4499 if (!nh->nhgi->gateway || nh->ipip_entry)
4506 nh->ipip_entry = ipip_entry;
4508 __mlxsw_sp_nexthop_neigh_update(nh, removing);
4509 mlxsw_sp_nexthop_crif_init(nh, crif);
4513 struct mlxsw_sp_nexthop *nh)
4515 struct mlxsw_sp_ipip_entry *ipip_entry = nh->ipip_entry;
4520 __mlxsw_sp_nexthop_neigh_update(nh, true);
4521 nh->ipip_entry = NULL;
4536 struct mlxsw_sp_nexthop *nh,
4548 nh->type = MLXSW_SP_NEXTHOP_TYPE_IPIP;
4549 mlxsw_sp_nexthop_ipip_init(mlxsw_sp, nh, ipip_entry);
4554 nh->type = MLXSW_SP_NEXTHOP_TYPE_ETH;
4559 mlxsw_sp_nexthop_crif_init(nh, crif);
4564 err = mlxsw_sp_nexthop_neigh_init(mlxsw_sp, nh);
4571 mlxsw_sp_nexthop_crif_fini(nh);
4576 struct mlxsw_sp_nexthop *nh)
4578 switch (nh->type) {
4580 return mlxsw_sp_nexthop_neigh_init(mlxsw_sp, nh);
4589 struct mlxsw_sp_nexthop *nh)
4591 switch (nh->type) {
4593 mlxsw_sp_nexthop_neigh_fini(mlxsw_sp, nh);
4596 mlxsw_sp_nexthop_ipip_fini(mlxsw_sp, nh);
4602 struct mlxsw_sp_nexthop *nh)
4604 mlxsw_sp_nexthop_type_rif_gone(mlxsw_sp, nh);
4605 mlxsw_sp_nexthop_crif_fini(nh);
4610 struct mlxsw_sp_nexthop *nh,
4617 nh->nhgi = nh_grp->nhgi;
4618 nh->key.fib_nh = fib_nh;
4620 nh->nh_weight = fib_nh->fib_nh_weight;
4622 nh->nh_weight = 1;
4624 memcpy(&nh->gw_addr, &fib_nh->fib_nh_gw4, sizeof(fib_nh->fib_nh_gw4));
4625 nh->neigh_tbl = &arp_tbl;
4626 err = mlxsw_sp_nexthop_insert(mlxsw_sp, nh);
4630 err = mlxsw_sp_nexthop_counter_enable(mlxsw_sp, nh);
4634 list_add_tail(&nh->router_list_node, &mlxsw_sp->router->nexthop_list);
4638 nh->ifindex = dev->ifindex;
4649 err = mlxsw_sp_nexthop_type_init(mlxsw_sp, nh, dev);
4656 list_del(&nh->router_list_node);
4657 mlxsw_sp_nexthop_counter_disable(mlxsw_sp, nh);
4659 mlxsw_sp_nexthop_remove(mlxsw_sp, nh);
4664 struct mlxsw_sp_nexthop *nh)
4666 mlxsw_sp_nexthop_type_fini(mlxsw_sp, nh);
4667 list_del(&nh->router_list_node);
4668 mlxsw_sp_nexthop_counter_disable(mlxsw_sp, nh);
4669 mlxsw_sp_nexthop_remove(mlxsw_sp, nh);
4676 struct mlxsw_sp_nexthop *nh;
4679 nh = mlxsw_sp_nexthop_lookup(mlxsw_sp, key);
4680 if (!nh)
4685 mlxsw_sp_nexthop_type_init(mlxsw_sp, nh, fib_nh->fib_nh_dev);
4688 mlxsw_sp_nexthop_type_fini(mlxsw_sp, nh);
4692 mlxsw_sp_nexthop_group_refresh(mlxsw_sp, nh->nhgi->nh_grp);
4699 struct mlxsw_sp_nexthop *nh;
4702 list_for_each_entry(nh, &rif->crif->nexthop_list, crif_list_node) {
4703 switch (nh->type) {
4715 __mlxsw_sp_nexthop_neigh_update(nh, removing);
4716 mlxsw_sp_nexthop_group_refresh(mlxsw_sp, nh->nhgi->nh_grp);
4723 struct mlxsw_sp_nexthop *nh, *tmp;
4727 list_for_each_entry_safe(nh, tmp, &rif->crif->nexthop_list,
4729 err = mlxsw_sp_nexthop_type_rif_made(mlxsw_sp, nh);
4732 mlxsw_sp_nexthop_group_refresh(mlxsw_sp, nh->nhgi->nh_grp);
4739 list_for_each_entry_safe(nh, tmp, &rif->crif->nexthop_list,
4743 mlxsw_sp_nexthop_type_rif_gone(mlxsw_sp, nh);
4744 mlxsw_sp_nexthop_group_refresh(mlxsw_sp, nh->nhgi->nh_grp);
4752 struct mlxsw_sp_nexthop *nh, *tmp;
4754 list_for_each_entry_safe(nh, tmp, &rif->crif->nexthop_list,
4756 mlxsw_sp_nexthop_type_rif_gone(mlxsw_sp, nh);
4757 mlxsw_sp_nexthop_group_refresh(mlxsw_sp, nh->nhgi->nh_grp);
4902 const struct nh_notifier_single_info *nh,
4907 if (nh->is_fdb)
4909 else if (nh->has_encap)
4919 const struct nh_notifier_single_info *nh,
4924 err = mlxsw_sp_nexthop_obj_single_validate(mlxsw_sp, nh, extack);
4931 if (!nh->gw_family && !nh->is_reject &&
4932 !mlxsw_sp_netdev_ipip_type(mlxsw_sp, nh->dev, NULL)) {
4953 const struct nh_notifier_single_info *nh;
4956 nh = &nh_grp->nh_entries[i].nh;
4957 err = mlxsw_sp_nexthop_obj_group_entry_validate(mlxsw_sp, nh,
5024 const struct nh_notifier_single_info *nh;
5027 nh = &nh_res_table->nhs[i];
5028 err = mlxsw_sp_nexthop_obj_group_entry_validate(mlxsw_sp, nh,
5041 struct nh_notifier_single_info *nh;
5050 return mlxsw_sp_nexthop_obj_single_validate(mlxsw_sp, info->nh,
5061 nh = &info->nh_res_bucket->new_nh;
5062 return mlxsw_sp_nexthop_obj_group_entry_validate(mlxsw_sp, nh,
5077 dev = info->nh->dev;
5078 return info->nh->gw_family || info->nh->is_reject ||
5090 struct mlxsw_sp_nexthop *nh)
5092 nh->action = MLXSW_SP_NEXTHOP_ACTION_DISCARD;
5093 nh->should_offload = 1;
5098 nh->crif = mlxsw_sp->router->lb_crif;
5102 struct mlxsw_sp_nexthop *nh)
5104 nh->crif = NULL;
5105 nh->should_offload = 0;
5111 struct mlxsw_sp_nexthop *nh,
5117 nh->nhgi = nh_grp->nhgi;
5118 nh->nh_weight = weight;
5122 memcpy(&nh->gw_addr, &nh_obj->ipv4, sizeof(nh_obj->ipv4));
5123 nh->neigh_tbl = &arp_tbl;
5126 memcpy(&nh->gw_addr, &nh_obj->ipv6, sizeof(nh_obj->ipv6));
5128 nh->neigh_tbl = &nd_tbl;
5133 list_add_tail(&nh->router_list_node, &mlxsw_sp->router->nexthop_list);
5134 nh->ifindex = dev->ifindex;
5135 nh->id = nh_obj->id;
5137 err = mlxsw_sp_nexthop_type_init(mlxsw_sp, nh, dev);
5142 mlxsw_sp_nexthop_obj_blackhole_init(mlxsw_sp, nh);
5148 if (nh_grp->nhgi->is_resilient && !nh->should_offload) {
5149 nh->action = MLXSW_SP_NEXTHOP_ACTION_TRAP;
5150 nh->should_offload = 1;
5156 list_del(&nh->router_list_node);
5161 struct mlxsw_sp_nexthop *nh)
5163 if (nh->action == MLXSW_SP_NEXTHOP_ACTION_DISCARD)
5164 mlxsw_sp_nexthop_obj_blackhole_fini(mlxsw_sp, nh);
5165 mlxsw_sp_nexthop_type_fini(mlxsw_sp, nh);
5166 list_del(&nh->router_list_node);
5167 mlxsw_sp_nexthop_counter_disable(mlxsw_sp, nh);
5168 nh->should_offload = 0;
5177 struct mlxsw_sp_nexthop *nh;
5216 nh = &nhgi->nexthops[i];
5219 nh_obj = info->nh;
5223 nh_obj = &info->nh_grp->nh_entries[i].nh;
5234 err = mlxsw_sp_nexthop_obj_init(mlxsw_sp, nh_grp, nh, nh_obj,
5265 nh = &nhgi->nexthops[i];
5266 mlxsw_sp_nexthop_obj_fini(mlxsw_sp, nh);
5288 struct mlxsw_sp_nexthop *nh = &nhgi->nexthops[i];
5290 mlxsw_sp_nexthop_obj_fini(mlxsw_sp, nh);
5455 struct mlxsw_sp_nexthop *nh = &nhgi->nexthops[i];
5457 if (nh->offloaded)
5458 nh->update = 1;
5550 struct mlxsw_sp_nexthop *nh,
5568 adj_index = nh->nhgi->adj_index + bucket_index;
5569 err = mlxsw_sp_nexthop_update(mlxsw_sp, adj_index, nh, force, ratr_pl);
5590 nh->update = 0;
5591 nh->offloaded = 1;
5592 mlxsw_sp_nexthop_bucket_offload_refresh(mlxsw_sp, nh, bucket_index);
5605 struct mlxsw_sp_nexthop *nh;
5621 nh = &nhgi->nexthops[bucket_index];
5622 mlxsw_sp_nexthop_obj_fini(mlxsw_sp, nh);
5625 err = mlxsw_sp_nexthop_obj_init(mlxsw_sp, nh_grp, nh, nh_obj, 1);
5631 err = mlxsw_sp_nexthop_obj_bucket_adj_update(mlxsw_sp, nh, info);
5638 mlxsw_sp_nexthop_obj_fini(mlxsw_sp, nh);
5641 mlxsw_sp_nexthop_obj_init(mlxsw_sp, nh_grp, nh, nh_obj, 1);
5643 nh->update = 0;
5644 nh->offloaded = 1;
5656 struct mlxsw_sp_nexthop *nh = &nhgi->nexthops[nhi];
5660 err = mlxsw_sp_nexthop_counter_get(mlxsw_sp, nh, &packets);
5677 struct mlxsw_sp_nexthop *nh = &nhgi->nexthops[bucket];
5681 if (nhi == -1 || info->stats[nhi].id != nh->id) {
5683 if (info->stats[nhi].id == nh->id)
5691 err = mlxsw_sp_nexthop_counter_get(mlxsw_sp, nh, &packets);
5766 const struct fib_nh *nh = fib_info_nh(fi, 0);
5768 return nh->fib_nh_gw_family ||
5769 mlxsw_sp_nexthop4_ipip_type(mlxsw_sp, nh, NULL);
5778 struct mlxsw_sp_nexthop *nh;
5791 nh = &nhgi->nexthops[i];
5793 err = mlxsw_sp_nexthop4_init(mlxsw_sp, nh_grp, nh, fib_nh);
5812 nh = &nhgi->nexthops[i];
5813 mlxsw_sp_nexthop4_fini(mlxsw_sp, nh);
5828 struct mlxsw_sp_nexthop *nh = &nhgi->nexthops[i];
5830 mlxsw_sp_nexthop4_fini(mlxsw_sp, nh);
5898 if (fi->nh) {
5900 fi->nh->id);
5980 struct mlxsw_sp_nexthop *nh = &nh_grp->nhgi->nexthops[i];
5981 struct net_device *dev = mlxsw_sp_nexthop_dev(nh);
5985 ipv6_addr_equal((const struct in6_addr *) &nh->gw_addr,
5987 return nh;
6821 if (fen_info->fi->nh &&
6822 !mlxsw_sp_nexthop_obj_group_lookup(mlxsw_sp, fen_info->fi->nh->id))
6937 if (!mlxsw_sp_rt6->rt->nh)
6974 struct mlxsw_sp_nexthop *nh,
6980 nh->nhgi = nh_grp->nhgi;
6981 nh->nh_weight = rt->fib6_nh->fib_nh_weight;
6982 memcpy(&nh->gw_addr, &rt->fib6_nh->fib_nh_gw6, sizeof(nh->gw_addr));
6984 nh->neigh_tbl = &nd_tbl;
6987 err = mlxsw_sp_nexthop_counter_enable(mlxsw_sp, nh);
6991 list_add_tail(&nh->router_list_node, &mlxsw_sp->router->nexthop_list);
6995 nh->ifindex = dev->ifindex;
6997 err = mlxsw_sp_nexthop_type_init(mlxsw_sp, nh, dev);
7004 list_del(&nh->router_list_node);
7005 mlxsw_sp_nexthop_counter_disable(mlxsw_sp, nh);
7010 struct mlxsw_sp_nexthop *nh)
7012 mlxsw_sp_nexthop_type_fini(mlxsw_sp, nh);
7013 list_del(&nh->router_list_node);
7014 mlxsw_sp_nexthop_counter_disable(mlxsw_sp, nh);
7031 struct mlxsw_sp_nexthop *nh;
7047 nh = &nhgi->nexthops[i];
7048 err = mlxsw_sp_nexthop6_init(mlxsw_sp, nh_grp, nh, rt);
7069 nh = &nhgi->nexthops[i];
7070 mlxsw_sp_nexthop6_fini(mlxsw_sp, nh);
7085 struct mlxsw_sp_nexthop *nh = &nhgi->nexthops[i];
7087 mlxsw_sp_nexthop6_fini(mlxsw_sp, nh);
7152 if (rt->nh) {
7154 rt->nh->id);
7520 if (rt->nh && !mlxsw_sp_nexthop_obj_group_lookup(mlxsw_sp, rt->nh->id))
9839 struct mlxsw_sp_nexthop *nh, *tmp;
9843 list_for_each_entry_safe(nh, tmp, &crif->nexthop_list, crif_list_node)
9844 mlxsw_sp_nexthop_type_fini(router->mlxsw_sp, nh);