Lines Matching refs:mrt

35 	       void (*table_set)(struct mr_table *mrt,  in mr_table_alloc()  argument
38 struct mr_table *mrt; in mr_table_alloc() local
41 mrt = kzalloc(sizeof(*mrt), GFP_KERNEL); in mr_table_alloc()
42 if (!mrt) in mr_table_alloc()
44 mrt->id = id; in mr_table_alloc()
45 write_pnet(&mrt->net, net); in mr_table_alloc()
47 mrt->ops = *ops; in mr_table_alloc()
48 err = rhltable_init(&mrt->mfc_hash, mrt->ops.rht_params); in mr_table_alloc()
50 kfree(mrt); in mr_table_alloc()
53 INIT_LIST_HEAD(&mrt->mfc_cache_list); in mr_table_alloc()
54 INIT_LIST_HEAD(&mrt->mfc_unres_queue); in mr_table_alloc()
56 timer_setup(&mrt->ipmr_expire_timer, expire_func, 0); in mr_table_alloc()
58 mrt->mroute_reg_vif_num = -1; in mr_table_alloc()
59 table_set(mrt, net); in mr_table_alloc()
60 return mrt; in mr_table_alloc()
64 void *mr_mfc_find_parent(struct mr_table *mrt, void *hasharg, int parent) in mr_mfc_find_parent() argument
69 list = rhltable_lookup(&mrt->mfc_hash, hasharg, *mrt->ops.rht_params); in mr_mfc_find_parent()
78 void *mr_mfc_find_any_parent(struct mr_table *mrt, int vifi) in mr_mfc_find_any_parent() argument
83 list = rhltable_lookup(&mrt->mfc_hash, mrt->ops.cmparg_any, in mr_mfc_find_any_parent()
84 *mrt->ops.rht_params); in mr_mfc_find_any_parent()
93 void *mr_mfc_find_any(struct mr_table *mrt, int vifi, void *hasharg) in mr_mfc_find_any() argument
98 list = rhltable_lookup(&mrt->mfc_hash, hasharg, *mrt->ops.rht_params); in mr_mfc_find_any()
104 proxy = mr_mfc_find_any_parent(mrt, c->mfc_parent); in mr_mfc_find_any()
109 return mr_mfc_find_any_parent(mrt, vifi); in mr_mfc_find_any()
116 struct mr_table *mrt = iter->mrt; in mr_vif_seq_idx() local
118 for (iter->ct = 0; iter->ct < mrt->maxvif; ++iter->ct) { in mr_vif_seq_idx()
119 if (!VIF_EXISTS(mrt, iter->ct)) in mr_vif_seq_idx()
122 return &mrt->vif_table[iter->ct]; in mr_vif_seq_idx()
132 struct mr_table *mrt = iter->mrt; in mr_vif_seq_next() local
138 while (++iter->ct < mrt->maxvif) { in mr_vif_seq_next()
139 if (!VIF_EXISTS(mrt, iter->ct)) in mr_vif_seq_next()
141 return &mrt->vif_table[iter->ct]; in mr_vif_seq_next()
150 struct mr_table *mrt = it->mrt; in mr_mfc_seq_idx() local
154 it->cache = &mrt->mfc_cache_list; in mr_mfc_seq_idx()
155 list_for_each_entry_rcu(mfc, &mrt->mfc_cache_list, list) in mr_mfc_seq_idx()
161 it->cache = &mrt->mfc_unres_queue; in mr_mfc_seq_idx()
177 struct mr_table *mrt = it->mrt; in mr_mfc_seq_next() local
188 if (it->cache == &mrt->mfc_unres_queue) in mr_mfc_seq_next()
193 it->cache = &mrt->mfc_unres_queue; in mr_mfc_seq_next()
208 int mr_fill_mroute(struct mr_table *mrt, struct sk_buff *skb, in mr_fill_mroute() argument
225 vif_dev = rcu_dereference(mrt->vif_table[c->mfc_parent].dev); in mr_fill_mroute()
241 struct vif_device *vif = &mrt->vif_table[ct]; in mr_fill_mroute()
279 static bool mr_mfc_uses_dev(const struct mr_table *mrt, in mr_mfc_uses_dev() argument
289 vif = &mrt->vif_table[ct]; in mr_mfc_uses_dev()
298 int mr_table_dump(struct mr_table *mrt, struct sk_buff *skb, in mr_table_dump() argument
300 int (*fill)(struct mr_table *mrt, struct sk_buff *skb, in mr_table_dump() argument
313 list_for_each_entry_rcu(mfc, &mrt->mfc_cache_list, list) { in mr_table_dump()
317 !mr_mfc_uses_dev(mrt, mfc, filter->dev)) in mr_table_dump()
320 err = fill(mrt, skb, NETLINK_CB(cb->skb).portid, in mr_table_dump()
329 list_for_each_entry(mfc, &mrt->mfc_unres_queue, list) { in mr_table_dump()
333 !mr_mfc_uses_dev(mrt, mfc, filter->dev)) in mr_table_dump()
336 err = fill(mrt, skb, NETLINK_CB(cb->skb).portid, in mr_table_dump()
355 struct mr_table *mrt), in mr_rtm_dumproute() argument
356 int (*fill)(struct mr_table *mrt, in mr_rtm_dumproute() argument
364 struct mr_table *mrt; in mr_rtm_dumproute() local
377 for (mrt = iter(net, NULL); mrt; mrt = iter(net, mrt)) { in mr_rtm_dumproute()
381 err = mr_table_dump(mrt, skb, cb, fill, lock, filter); in mr_rtm_dumproute()
401 struct mr_table *mrt), in mr_dump() argument
404 struct mr_table *mrt; in mr_dump() local
411 for (mrt = mr_iter(net, NULL); mrt; mrt = mr_iter(net, mrt)) { in mr_dump()
412 struct vif_device *v = &mrt->vif_table[0]; in mr_dump()
419 for (vifi = 0; vifi < mrt->maxvif; vifi++, v++) { in mr_dump()
427 mrt->id, extack); in mr_dump()
437 list_for_each_entry_rcu(mfc, &mrt->mfc_cache_list, list) { in mr_dump()
440 mfc, mrt->id, extack); in mr_dump()