Lines Matching refs:mrt
35 void (*table_set)(struct mr_table *mrt,
38 struct mr_table *mrt;
41 mrt = kzalloc(sizeof(*mrt), GFP_KERNEL);
42 if (!mrt)
44 mrt->id = id;
45 write_pnet(&mrt->net, net);
47 mrt->ops = *ops;
48 err = rhltable_init(&mrt->mfc_hash, mrt->ops.rht_params);
50 kfree(mrt);
53 INIT_LIST_HEAD(&mrt->mfc_cache_list);
54 INIT_LIST_HEAD(&mrt->mfc_unres_queue);
56 timer_setup(&mrt->ipmr_expire_timer, expire_func, 0);
58 mrt->mroute_reg_vif_num = -1;
59 table_set(mrt, net);
60 return mrt;
64 void *mr_mfc_find_parent(struct mr_table *mrt, void *hasharg, int parent)
69 list = rhltable_lookup(&mrt->mfc_hash, hasharg, *mrt->ops.rht_params);
78 void *mr_mfc_find_any_parent(struct mr_table *mrt, int vifi)
83 list = rhltable_lookup(&mrt->mfc_hash, mrt->ops.cmparg_any,
84 *mrt->ops.rht_params);
93 void *mr_mfc_find_any(struct mr_table *mrt, int vifi, void *hasharg)
98 list = rhltable_lookup(&mrt->mfc_hash, hasharg, *mrt->ops.rht_params);
104 proxy = mr_mfc_find_any_parent(mrt, c->mfc_parent);
109 return mr_mfc_find_any_parent(mrt, vifi);
116 struct mr_table *mrt = iter->mrt;
118 for (iter->ct = 0; iter->ct < mrt->maxvif; ++iter->ct) {
119 if (!VIF_EXISTS(mrt, iter->ct))
122 return &mrt->vif_table[iter->ct];
132 struct mr_table *mrt = iter->mrt;
138 while (++iter->ct < mrt->maxvif) {
139 if (!VIF_EXISTS(mrt, iter->ct))
141 return &mrt->vif_table[iter->ct];
150 struct mr_table *mrt = it->mrt;
154 it->cache = &mrt->mfc_cache_list;
155 list_for_each_entry_rcu(mfc, &mrt->mfc_cache_list, list)
161 it->cache = &mrt->mfc_unres_queue;
177 struct mr_table *mrt = it->mrt;
188 if (it->cache == &mrt->mfc_unres_queue)
193 it->cache = &mrt->mfc_unres_queue;
208 int mr_fill_mroute(struct mr_table *mrt, struct sk_buff *skb,
225 vif_dev = rcu_dereference(mrt->vif_table[c->mfc_parent].dev);
241 struct vif_device *vif = &mrt->vif_table[ct];
279 static bool mr_mfc_uses_dev(const struct mr_table *mrt,
289 vif = &mrt->vif_table[ct];
298 int mr_table_dump(struct mr_table *mrt, struct sk_buff *skb,
300 int (*fill)(struct mr_table *mrt, struct sk_buff *skb,
313 list_for_each_entry_rcu(mfc, &mrt->mfc_cache_list, list,
318 !mr_mfc_uses_dev(mrt, mfc, filter->dev))
321 err = fill(mrt, skb, NETLINK_CB(cb->skb).portid,
330 list_for_each_entry(mfc, &mrt->mfc_unres_queue, list) {
334 err = fill(mrt, skb, NETLINK_CB(cb->skb).portid,
353 struct mr_table *mrt),
354 int (*fill)(struct mr_table *mrt,
362 struct mr_table *mrt;
375 for (mrt = iter(net, NULL); mrt; mrt = iter(net, mrt)) {
379 err = mr_table_dump(mrt, skb, cb, fill, lock, filter);
399 struct mr_table *mrt),
402 struct mr_table *mrt;
409 for (mrt = mr_iter(net, NULL); mrt; mrt = mr_iter(net, mrt)) {
410 struct vif_device *v = &mrt->vif_table[0];
417 for (vifi = 0; vifi < mrt->maxvif; vifi++, v++) {
425 mrt->id, extack);
435 list_for_each_entry_rcu(mfc, &mrt->mfc_cache_list, list) {
438 mfc, mrt->id, extack);