Lines Matching refs:data

158 static int nsim_fib_rule_event(struct nsim_fib_data *data,
166 err = nsim_fib_rule_account(&data->ipv4.rules, add, extack);
169 err = nsim_fib_rule_account(&data->ipv6.rules, add, extack);
195 static void nsim_fib_rt_init(struct nsim_fib_data *data,
204 list_add(&fib_rt->list, &data->fib_rt_list);
229 nsim_fib4_rt_create(struct nsim_fib_data *data,
238 nsim_fib_rt_init(data, &fib4_rt->common, &fen_info->dst, sizeof(u32),
290 static int nsim_fib4_rt_add(struct nsim_fib_data *data,
294 struct net *net = devlink_net(data->devlink);
297 err = nsim_fib_account(&data->ipv4.fib, true, extack);
301 err = rhashtable_insert_fast(&data->fib_rt_ht,
314 nsim_fib_account(&data->ipv4.fib, false, extack);
318 static int nsim_fib4_rt_replace(struct nsim_fib_data *data,
323 struct net *net = devlink_net(data->devlink);
327 err = rhashtable_replace_fast(&data->fib_rt_ht,
344 static int nsim_fib4_rt_insert(struct nsim_fib_data *data,
351 fib4_rt = nsim_fib4_rt_create(data, fen_info);
355 fib4_rt_old = nsim_fib4_rt_lookup(&data->fib_rt_ht, fen_info);
357 err = nsim_fib4_rt_add(data, fib4_rt, extack);
359 err = nsim_fib4_rt_replace(data, fib4_rt, fib4_rt_old, extack);
367 static void nsim_fib4_rt_remove(struct nsim_fib_data *data,
373 fib4_rt = nsim_fib4_rt_lookup(&data->fib_rt_ht, fen_info);
377 rhashtable_remove_fast(&data->fib_rt_ht, &fib4_rt->common.ht_node,
379 nsim_fib_account(&data->ipv4.fib, false, extack);
383 static int nsim_fib4_event(struct nsim_fib_data *data,
399 err = nsim_fib4_rt_insert(data, fen_info);
402 nsim_fib4_rt_remove(data, fen_info);
460 nsim_fib6_rt_create(struct nsim_fib_data *data,
472 nsim_fib_rt_init(data, &fib6_rt->common, &rt->fib6_dst.addr,
539 static int nsim_fib6_rt_append(struct nsim_fib_data *data,
547 fib6_rt = nsim_fib6_rt_lookup(&data->fib_rt_ht, rt);
593 static int nsim_fib6_rt_add(struct nsim_fib_data *data,
599 err = nsim_fib_account(&data->ipv6.fib, true, extack);
603 err = rhashtable_insert_fast(&data->fib_rt_ht,
616 nsim_fib_account(&data->ipv6.fib, false, extack);
620 static int nsim_fib6_rt_replace(struct nsim_fib_data *data,
628 err = rhashtable_replace_fast(&data->fib_rt_ht,
645 static int nsim_fib6_rt_insert(struct nsim_fib_data *data,
652 fib6_rt = nsim_fib6_rt_create(data, fen6_info);
656 fib6_rt_old = nsim_fib6_rt_lookup(&data->fib_rt_ht, fen6_info->rt);
658 err = nsim_fib6_rt_add(data, fib6_rt, extack);
660 err = nsim_fib6_rt_replace(data, fib6_rt, fib6_rt_old, extack);
669 nsim_fib6_rt_remove(struct nsim_fib_data *data,
680 fib6_rt = nsim_fib6_rt_lookup(&data->fib_rt_ht, fen6_info->rt);
692 rhashtable_remove_fast(&data->fib_rt_ht, &fib6_rt->common.ht_node,
694 nsim_fib_account(&data->ipv6.fib, false, extack);
698 static int nsim_fib6_event(struct nsim_fib_data *data,
719 err = nsim_fib6_rt_insert(data, fen6_info);
722 err = nsim_fib6_rt_append(data, fen6_info);
725 nsim_fib6_rt_remove(data, fen6_info);
734 static int nsim_fib_event(struct nsim_fib_data *data,
741 err = nsim_fib4_event(data, info, event);
744 err = nsim_fib6_event(data, info, event);
754 struct nsim_fib_data *data = container_of(nb, struct nsim_fib_data,
760 spin_lock_bh(&data->fib_lock);
765 err = nsim_fib_rule_event(data, info,
772 err = nsim_fib_event(data, info, event);
776 spin_unlock_bh(&data->fib_lock);
782 struct nsim_fib_data *data)
784 struct devlink *devlink = data->devlink;
789 nsim_fib_account(&data->ipv4.fib, false, NULL);
794 struct nsim_fib_data *data)
800 nsim_fib_account(&data->ipv6.fib, false, NULL);
807 struct nsim_fib_data *data = arg;
811 nsim_fib4_rt_free(fib_rt, data);
814 nsim_fib6_rt_free(fib_rt, data);
824 struct nsim_fib_data *data = container_of(nb, struct nsim_fib_data,
831 list_for_each_entry_safe(fib_rt, fib_rt_tmp, &data->fib_rt_list, list) {
832 rhashtable_remove_fast(&data->fib_rt_ht, &fib_rt->ht_node,
834 nsim_fib_rt_free(fib_rt, data);
837 data->ipv4.rules.num = 0ULL;
838 data->ipv6.rules.num = 0ULL;
843 struct nsim_fib_data *data = priv;
845 return nsim_fib_get_val(data, NSIM_RESOURCE_IPV4_FIB, false);
850 struct nsim_fib_data *data = priv;
852 return nsim_fib_get_val(data, NSIM_RESOURCE_IPV4_FIB_RULES, false);
857 struct nsim_fib_data *data = priv;
859 return nsim_fib_get_val(data, NSIM_RESOURCE_IPV6_FIB, false);
864 struct nsim_fib_data *data = priv;
866 return nsim_fib_get_val(data, NSIM_RESOURCE_IPV6_FIB_RULES, false);
869 static void nsim_fib_set_max_all(struct nsim_fib_data *data,
885 nsim_fib_set_max(data, res_ids[i], val);
892 struct nsim_fib_data *data;
895 data = kzalloc(sizeof(*data), GFP_KERNEL);
896 if (!data)
898 data->devlink = devlink;
900 spin_lock_init(&data->fib_lock);
901 INIT_LIST_HEAD(&data->fib_rt_list);
902 err = rhashtable_init(&data->fib_rt_ht, &nsim_fib_rt_ht_params);
906 nsim_fib_set_max_all(data, devlink);
908 data->fib_nb.notifier_call = nsim_fib_event_nb;
909 err = register_fib_notifier(devlink_net(devlink), &data->fib_nb,
919 data);
923 data);
927 data);
931 data);
932 return data;
935 rhashtable_free_and_destroy(&data->fib_rt_ht, nsim_fib_rt_free,
936 data);
938 kfree(data);
942 void nsim_fib_destroy(struct devlink *devlink, struct nsim_fib_data *data)
952 unregister_fib_notifier(devlink_net(devlink), &data->fib_nb);
953 rhashtable_free_and_destroy(&data->fib_rt_ht, nsim_fib_rt_free,
954 data);
955 WARN_ON_ONCE(!list_empty(&data->fib_rt_list));
956 kfree(data);