Lines Matching refs:mrt

97 	struct mr_table		*mrt;  member
126 static void ipmr_free_table(struct mr_table *mrt);
128 static void ip_mr_forward(struct net *net, struct mr_table *mrt,
131 static int ipmr_cache_report(struct mr_table *mrt,
133 static int __ipmr_fill_mroute(struct mr_table *mrt, struct sk_buff *skb,
135 static void mroute_netlink_event(struct mr_table *mrt, struct mfc_cache *mfc,
137 static void mroute_clean_tables(struct mr_table *mrt, bool all);
141 #define ipmr_for_each_table(mrt, net) \ argument
142 list_for_each_entry_rcu(mrt, &net->ipv4.mr_tables, list)
146 struct mr_table *mrt; in ipmr_get_table() local
148 ipmr_for_each_table(mrt, net) { in ipmr_get_table()
149 if (mrt->id == id) in ipmr_get_table()
150 return mrt; in ipmr_get_table()
156 struct mr_table **mrt) in ipmr_fib_lookup() argument
169 *mrt = res.mrt; in ipmr_fib_lookup()
177 struct mr_table *mrt; in ipmr_rule_action() local
191 mrt = ipmr_get_table(rule->fr_net, rule->table); in ipmr_rule_action()
192 if (!mrt) in ipmr_rule_action()
194 res->mrt = mrt; in ipmr_rule_action()
245 struct mr_table *mrt; in ipmr_rules_init() local
254 mrt = ipmr_new_table(net, RT_TABLE_DEFAULT); in ipmr_rules_init()
255 if (!mrt) { in ipmr_rules_init()
268 ipmr_free_table(mrt); in ipmr_rules_init()
276 struct mr_table *mrt, *next; in ipmr_rules_exit() local
279 list_for_each_entry_safe(mrt, next, &net->ipv4.mr_tables, list) { in ipmr_rules_exit()
280 list_del(&mrt->list); in ipmr_rules_exit()
281 ipmr_free_table(mrt); in ipmr_rules_exit()
287 #define ipmr_for_each_table(mrt, net) \ argument
288 for (mrt = net->ipv4.mrt; mrt; mrt = NULL)
292 return net->ipv4.mrt; in ipmr_get_table()
296 struct mr_table **mrt) in ipmr_fib_lookup() argument
298 *mrt = net->ipv4.mrt; in ipmr_fib_lookup()
304 net->ipv4.mrt = ipmr_new_table(net, RT_TABLE_DEFAULT); in ipmr_rules_init()
305 return net->ipv4.mrt ? 0 : -ENOMEM; in ipmr_rules_init()
311 ipmr_free_table(net->ipv4.mrt); in ipmr_rules_exit()
312 net->ipv4.mrt = NULL; in ipmr_rules_exit()
319 struct mr_table *mrt; in ipmr_new_table() local
322 mrt = ipmr_get_table(net, id); in ipmr_new_table()
323 if (mrt) in ipmr_new_table()
324 return mrt; in ipmr_new_table()
326 mrt = kzalloc(sizeof(*mrt), GFP_KERNEL); in ipmr_new_table()
327 if (!mrt) in ipmr_new_table()
329 write_pnet(&mrt->net, net); in ipmr_new_table()
330 mrt->id = id; in ipmr_new_table()
334 INIT_LIST_HEAD(&mrt->mfc_cache_array[i]); in ipmr_new_table()
336 INIT_LIST_HEAD(&mrt->mfc_unres_queue); in ipmr_new_table()
338 setup_timer(&mrt->ipmr_expire_timer, ipmr_expire_process, in ipmr_new_table()
339 (unsigned long)mrt); in ipmr_new_table()
342 mrt->mroute_reg_vif_num = -1; in ipmr_new_table()
345 list_add_tail_rcu(&mrt->list, &net->ipv4.mr_tables); in ipmr_new_table()
347 return mrt; in ipmr_new_table()
350 static void ipmr_free_table(struct mr_table *mrt) in ipmr_free_table() argument
352 del_timer_sync(&mrt->ipmr_expire_timer); in ipmr_free_table()
353 mroute_clean_tables(mrt, true); in ipmr_free_table()
354 kfree(mrt); in ipmr_free_table()
453 struct mr_table *mrt; in reg_vif_xmit() local
461 err = ipmr_fib_lookup(net, &fl4, &mrt); in reg_vif_xmit()
470 ipmr_cache_report(mrt, skb, mrt->mroute_reg_vif_num, IGMPMSG_WHOLEPKT); in reg_vif_xmit()
496 static struct net_device *ipmr_reg_vif(struct net *net, struct mr_table *mrt) in ipmr_reg_vif() argument
502 if (mrt->id == RT_TABLE_DEFAULT) in ipmr_reg_vif()
505 sprintf(name, "pimreg%u", mrt->id); in ipmr_reg_vif()
549 static int vif_delete(struct mr_table *mrt, int vifi, int notify, in vif_delete() argument
556 if (vifi < 0 || vifi >= mrt->maxvif) in vif_delete()
559 v = &mrt->vif_table[vifi]; in vif_delete()
571 if (vifi == mrt->mroute_reg_vif_num) in vif_delete()
572 mrt->mroute_reg_vif_num = -1; in vif_delete()
575 if (vifi + 1 == mrt->maxvif) { in vif_delete()
579 if (VIF_EXISTS(mrt, tmp)) in vif_delete()
582 mrt->maxvif = tmp+1; in vif_delete()
621 static void ipmr_destroy_unres(struct mr_table *mrt, struct mfc_cache *c) in ipmr_destroy_unres() argument
623 struct net *net = read_pnet(&mrt->net); in ipmr_destroy_unres()
627 atomic_dec(&mrt->cache_resolve_queue_len); in ipmr_destroy_unres()
653 struct mr_table *mrt = (struct mr_table *)arg; in ipmr_expire_process() local
659 mod_timer(&mrt->ipmr_expire_timer, jiffies+HZ/10); in ipmr_expire_process()
663 if (list_empty(&mrt->mfc_unres_queue)) in ipmr_expire_process()
669 list_for_each_entry_safe(c, next, &mrt->mfc_unres_queue, list) { in ipmr_expire_process()
678 mroute_netlink_event(mrt, c, RTM_DELROUTE); in ipmr_expire_process()
679 ipmr_destroy_unres(mrt, c); in ipmr_expire_process()
682 if (!list_empty(&mrt->mfc_unres_queue)) in ipmr_expire_process()
683 mod_timer(&mrt->ipmr_expire_timer, jiffies + expires); in ipmr_expire_process()
691 static void ipmr_update_thresholds(struct mr_table *mrt, struct mfc_cache *cache, in ipmr_update_thresholds() argument
700 for (vifi = 0; vifi < mrt->maxvif; vifi++) { in ipmr_update_thresholds()
701 if (VIF_EXISTS(mrt, vifi) && in ipmr_update_thresholds()
712 static int vif_add(struct net *net, struct mr_table *mrt, in vif_add() argument
716 struct vif_device *v = &mrt->vif_table[vifi]; in vif_add()
722 if (VIF_EXISTS(mrt, vifi)) in vif_add()
732 if (mrt->mroute_reg_vif_num >= 0) in vif_add()
734 dev = ipmr_reg_vif(net, mrt); in vif_add()
812 mrt->mroute_reg_vif_num = vifi; in vif_add()
814 if (vifi+1 > mrt->maxvif) in vif_add()
815 mrt->maxvif = vifi+1; in vif_add()
821 static struct mfc_cache *ipmr_cache_find(struct mr_table *mrt, in ipmr_cache_find() argument
828 list_for_each_entry_rcu(c, &mrt->mfc_cache_array[line], list) { in ipmr_cache_find()
836 static struct mfc_cache *ipmr_cache_find_any_parent(struct mr_table *mrt, in ipmr_cache_find_any_parent() argument
842 list_for_each_entry_rcu(c, &mrt->mfc_cache_array[line], list) in ipmr_cache_find_any_parent()
852 static struct mfc_cache *ipmr_cache_find_any(struct mr_table *mrt, in ipmr_cache_find_any() argument
861 list_for_each_entry_rcu(c, &mrt->mfc_cache_array[line], list) in ipmr_cache_find_any()
868 proxy = ipmr_cache_find_any_parent(mrt, in ipmr_cache_find_any()
875 return ipmr_cache_find_any_parent(mrt, vifi); in ipmr_cache_find_any()
905 static void ipmr_cache_resolve(struct net *net, struct mr_table *mrt, in ipmr_cache_resolve() argument
917 if (__ipmr_fill_mroute(mrt, skb, c, nlmsg_data(nlh)) > 0) { in ipmr_cache_resolve()
931 ip_mr_forward(net, mrt, skb, c, 0); in ipmr_cache_resolve()
943 static int ipmr_cache_report(struct mr_table *mrt, in ipmr_cache_report() argument
977 msg->im_vif = mrt->mroute_reg_vif_num; in ipmr_cache_report()
1006 mroute_sk = rcu_dereference(mrt->mroute_sk); in ipmr_cache_report()
1030 ipmr_cache_unresolved(struct mr_table *mrt, vifi_t vifi, struct sk_buff *skb) in ipmr_cache_unresolved() argument
1038 list_for_each_entry(c, &mrt->mfc_unres_queue, list) { in ipmr_cache_unresolved()
1049 if (atomic_read(&mrt->cache_resolve_queue_len) >= 10 || in ipmr_cache_unresolved()
1065 err = ipmr_cache_report(mrt, skb, vifi, IGMPMSG_NOCACHE); in ipmr_cache_unresolved()
1077 atomic_inc(&mrt->cache_resolve_queue_len); in ipmr_cache_unresolved()
1078 list_add(&c->list, &mrt->mfc_unres_queue); in ipmr_cache_unresolved()
1079 mroute_netlink_event(mrt, c, RTM_NEWROUTE); in ipmr_cache_unresolved()
1081 if (atomic_read(&mrt->cache_resolve_queue_len) == 1) in ipmr_cache_unresolved()
1082 mod_timer(&mrt->ipmr_expire_timer, c->mfc_un.unres.expires); in ipmr_cache_unresolved()
1103 static int ipmr_mfc_delete(struct mr_table *mrt, struct mfcctl *mfc, int parent) in ipmr_mfc_delete() argument
1110 list_for_each_entry_safe(c, next, &mrt->mfc_cache_array[line], list) { in ipmr_mfc_delete()
1115 mroute_netlink_event(mrt, c, RTM_DELROUTE); in ipmr_mfc_delete()
1123 static int ipmr_mfc_add(struct net *net, struct mr_table *mrt, in ipmr_mfc_add() argument
1135 list_for_each_entry(c, &mrt->mfc_cache_array[line], list) { in ipmr_mfc_add()
1147 ipmr_update_thresholds(mrt, c, mfc->mfcc_ttls); in ipmr_mfc_add()
1151 mroute_netlink_event(mrt, c, RTM_NEWROUTE); in ipmr_mfc_add()
1166 ipmr_update_thresholds(mrt, c, mfc->mfcc_ttls); in ipmr_mfc_add()
1170 list_add_rcu(&c->list, &mrt->mfc_cache_array[line]); in ipmr_mfc_add()
1178 list_for_each_entry(uc, &mrt->mfc_unres_queue, list) { in ipmr_mfc_add()
1182 atomic_dec(&mrt->cache_resolve_queue_len); in ipmr_mfc_add()
1187 if (list_empty(&mrt->mfc_unres_queue)) in ipmr_mfc_add()
1188 del_timer(&mrt->ipmr_expire_timer); in ipmr_mfc_add()
1192 ipmr_cache_resolve(net, mrt, uc, c); in ipmr_mfc_add()
1195 mroute_netlink_event(mrt, c, RTM_NEWROUTE); in ipmr_mfc_add()
1203 static void mroute_clean_tables(struct mr_table *mrt, bool all) in mroute_clean_tables() argument
1211 for (i = 0; i < mrt->maxvif; i++) { in mroute_clean_tables()
1212 if (!all && (mrt->vif_table[i].flags & VIFF_STATIC)) in mroute_clean_tables()
1214 vif_delete(mrt, i, 0, &list); in mroute_clean_tables()
1221 list_for_each_entry_safe(c, next, &mrt->mfc_cache_array[i], list) { in mroute_clean_tables()
1225 mroute_netlink_event(mrt, c, RTM_DELROUTE); in mroute_clean_tables()
1230 if (atomic_read(&mrt->cache_resolve_queue_len) != 0) { in mroute_clean_tables()
1232 list_for_each_entry_safe(c, next, &mrt->mfc_unres_queue, list) { in mroute_clean_tables()
1234 mroute_netlink_event(mrt, c, RTM_DELROUTE); in mroute_clean_tables()
1235 ipmr_destroy_unres(mrt, c); in mroute_clean_tables()
1247 struct mr_table *mrt; in mrtsock_destruct() local
1250 ipmr_for_each_table(mrt, net) { in mrtsock_destruct()
1251 if (sk == rtnl_dereference(mrt->mroute_sk)) { in mrtsock_destruct()
1256 RCU_INIT_POINTER(mrt->mroute_sk, NULL); in mrtsock_destruct()
1257 mroute_clean_tables(mrt, false); in mrtsock_destruct()
1276 struct mr_table *mrt; in ip_mroute_setsockopt() local
1282 mrt = ipmr_get_table(net, raw_sk(sk)->ipmr_table ? : RT_TABLE_DEFAULT); in ip_mroute_setsockopt()
1283 if (!mrt) in ip_mroute_setsockopt()
1287 if (sk != rcu_access_pointer(mrt->mroute_sk) && in ip_mroute_setsockopt()
1298 if (rtnl_dereference(mrt->mroute_sk)) { in ip_mroute_setsockopt()
1305 rcu_assign_pointer(mrt->mroute_sk, sk); in ip_mroute_setsockopt()
1314 if (sk != rcu_access_pointer(mrt->mroute_sk)) in ip_mroute_setsockopt()
1327 ret = vif_add(net, mrt, &vif, in ip_mroute_setsockopt()
1328 sk == rtnl_dereference(mrt->mroute_sk)); in ip_mroute_setsockopt()
1330 ret = vif_delete(mrt, vif.vifc_vifi, 0, NULL); in ip_mroute_setsockopt()
1352 ret = ipmr_mfc_delete(mrt, &mfc, parent); in ip_mroute_setsockopt()
1354 ret = ipmr_mfc_add(net, mrt, &mfc, in ip_mroute_setsockopt()
1355 sk == rtnl_dereference(mrt->mroute_sk), in ip_mroute_setsockopt()
1369 mrt->mroute_do_assert = v; in ip_mroute_setsockopt()
1385 if (v != mrt->mroute_do_pim) { in ip_mroute_setsockopt()
1386 mrt->mroute_do_pim = v; in ip_mroute_setsockopt()
1387 mrt->mroute_do_assert = v; in ip_mroute_setsockopt()
1409 if (sk == rtnl_dereference(mrt->mroute_sk)) { in ip_mroute_setsockopt()
1439 struct mr_table *mrt; in ip_mroute_getsockopt() local
1445 mrt = ipmr_get_table(net, raw_sk(sk)->ipmr_table ? : RT_TABLE_DEFAULT); in ip_mroute_getsockopt()
1446 if (!mrt) in ip_mroute_getsockopt()
1469 val = mrt->mroute_do_pim; in ip_mroute_getsockopt()
1472 val = mrt->mroute_do_assert; in ip_mroute_getsockopt()
1489 struct mr_table *mrt; in ipmr_ioctl() local
1491 mrt = ipmr_get_table(net, raw_sk(sk)->ipmr_table ? : RT_TABLE_DEFAULT); in ipmr_ioctl()
1492 if (!mrt) in ipmr_ioctl()
1499 if (vr.vifi >= mrt->maxvif) in ipmr_ioctl()
1502 vif = &mrt->vif_table[vr.vifi]; in ipmr_ioctl()
1503 if (VIF_EXISTS(mrt, vr.vifi)) { in ipmr_ioctl()
1521 c = ipmr_cache_find(mrt, sr.src.s_addr, sr.grp.s_addr); in ipmr_ioctl()
1563 struct mr_table *mrt; in ipmr_compat_ioctl() local
1565 mrt = ipmr_get_table(net, raw_sk(sk)->ipmr_table ? : RT_TABLE_DEFAULT); in ipmr_compat_ioctl()
1566 if (!mrt) in ipmr_compat_ioctl()
1573 if (vr.vifi >= mrt->maxvif) in ipmr_compat_ioctl()
1576 vif = &mrt->vif_table[vr.vifi]; in ipmr_compat_ioctl()
1577 if (VIF_EXISTS(mrt, vr.vifi)) { in ipmr_compat_ioctl()
1595 c = ipmr_cache_find(mrt, sr.src.s_addr, sr.grp.s_addr); in ipmr_compat_ioctl()
1619 struct mr_table *mrt; in ipmr_device_event() local
1626 ipmr_for_each_table(mrt, net) { in ipmr_device_event()
1627 v = &mrt->vif_table[0]; in ipmr_device_event()
1628 for (ct = 0; ct < mrt->maxvif; ct++, v++) { in ipmr_device_event()
1630 vif_delete(mrt, ct, 1, NULL); in ipmr_device_event()
1692 static void ipmr_queue_xmit(struct net *net, struct mr_table *mrt, in ipmr_queue_xmit() argument
1696 struct vif_device *vif = &mrt->vif_table[vifi]; in ipmr_queue_xmit()
1711 ipmr_cache_report(mrt, skb, vifi, IGMPMSG_WHOLEPKT); in ipmr_queue_xmit()
1793 static int ipmr_find_vif(struct mr_table *mrt, struct net_device *dev) in ipmr_find_vif() argument
1797 for (ct = mrt->maxvif-1; ct >= 0; ct--) { in ipmr_find_vif()
1798 if (mrt->vif_table[ct].dev == dev) in ipmr_find_vif()
1806 static void ip_mr_forward(struct net *net, struct mr_table *mrt, in ip_mr_forward() argument
1812 int true_vifi = ipmr_find_vif(mrt, skb->dev); in ip_mr_forward()
1824 cache_proxy = ipmr_cache_find_any_parent(mrt, vif); in ip_mr_forward()
1833 if (mrt->vif_table[vif].dev != skb->dev) { in ip_mr_forward()
1851 if (true_vifi >= 0 && mrt->mroute_do_assert && in ip_mr_forward()
1857 (mrt->mroute_do_pim || in ip_mr_forward()
1862 ipmr_cache_report(mrt, skb, true_vifi, IGMPMSG_WRONGVIF); in ip_mr_forward()
1868 mrt->vif_table[vif].pkt_in++; in ip_mr_forward()
1869 mrt->vif_table[vif].bytes_in += skb->len; in ip_mr_forward()
1899 ipmr_queue_xmit(net, mrt, skb2, cache, in ip_mr_forward()
1911 ipmr_queue_xmit(net, mrt, skb2, cache, psend); in ip_mr_forward()
1913 ipmr_queue_xmit(net, mrt, skb, cache, psend); in ip_mr_forward()
1938 struct mr_table *mrt; in ipmr_rt_fib_lookup() local
1941 err = ipmr_fib_lookup(net, &fl4, &mrt); in ipmr_rt_fib_lookup()
1944 return mrt; in ipmr_rt_fib_lookup()
1957 struct mr_table *mrt; in ip_mr_input() local
1965 mrt = ipmr_rt_fib_lookup(net, skb); in ip_mr_input()
1966 if (IS_ERR(mrt)) { in ip_mr_input()
1968 return PTR_ERR(mrt); in ip_mr_input()
1983 mroute_sk = rcu_dereference(mrt->mroute_sk); in ip_mr_input()
1993 cache = ipmr_cache_find(mrt, ip_hdr(skb)->saddr, ip_hdr(skb)->daddr); in ip_mr_input()
1995 int vif = ipmr_find_vif(mrt, skb->dev); in ip_mr_input()
1998 cache = ipmr_cache_find_any(mrt, ip_hdr(skb)->daddr, in ip_mr_input()
2017 vif = ipmr_find_vif(mrt, skb->dev); in ip_mr_input()
2019 int err2 = ipmr_cache_unresolved(mrt, vif, skb); in ip_mr_input()
2030 ip_mr_forward(net, mrt, skb, cache, local); in ip_mr_input()
2047 static int __pim_rcv(struct mr_table *mrt, struct sk_buff *skb, in __pim_rcv() argument
2066 if (mrt->mroute_reg_vif_num >= 0) in __pim_rcv()
2067 reg_dev = mrt->vif_table[mrt->mroute_reg_vif_num].dev; in __pim_rcv()
2096 struct mr_table *mrt; in pim_rcv_v1() local
2103 mrt = ipmr_rt_fib_lookup(net, skb); in pim_rcv_v1()
2104 if (IS_ERR(mrt)) in pim_rcv_v1()
2106 if (!mrt->mroute_do_pim || in pim_rcv_v1()
2110 if (__pim_rcv(mrt, skb, sizeof(*pim))) { in pim_rcv_v1()
2123 struct mr_table *mrt; in pim_rcv() local
2135 mrt = ipmr_rt_fib_lookup(net, skb); in pim_rcv()
2136 if (IS_ERR(mrt)) in pim_rcv()
2138 if (__pim_rcv(mrt, skb, sizeof(*pim))) { in pim_rcv()
2146 static int __ipmr_fill_mroute(struct mr_table *mrt, struct sk_buff *skb, in __ipmr_fill_mroute() argument
2158 if (VIF_EXISTS(mrt, c->mfc_parent) && in __ipmr_fill_mroute()
2159 nla_put_u32(skb, RTA_IIF, mrt->vif_table[c->mfc_parent].dev->ifindex) < 0) in __ipmr_fill_mroute()
2166 if (VIF_EXISTS(mrt, ct) && c->mfc_un.res.ttls[ct] < 255) { in __ipmr_fill_mroute()
2174 nhp->rtnh_ifindex = mrt->vif_table[ct].dev->ifindex; in __ipmr_fill_mroute()
2196 struct mr_table *mrt; in ipmr_get_route() local
2199 mrt = ipmr_get_table(net, RT_TABLE_DEFAULT); in ipmr_get_route()
2200 if (!mrt) in ipmr_get_route()
2204 cache = ipmr_cache_find(mrt, saddr, daddr); in ipmr_get_route()
2206 int vif = ipmr_find_vif(mrt, skb->dev); in ipmr_get_route()
2209 cache = ipmr_cache_find_any(mrt, daddr, vif); in ipmr_get_route()
2225 vif = ipmr_find_vif(mrt, dev); in ipmr_get_route()
2245 err = ipmr_cache_unresolved(mrt, vif, skb2); in ipmr_get_route()
2254 err = __ipmr_fill_mroute(mrt, skb, cache, rtm); in ipmr_get_route()
2260 static int ipmr_fill_mroute(struct mr_table *mrt, struct sk_buff *skb, in ipmr_fill_mroute() argument
2277 rtm->rtm_table = mrt->id; in ipmr_fill_mroute()
2278 if (nla_put_u32(skb, RTA_TABLE, mrt->id)) in ipmr_fill_mroute()
2291 err = __ipmr_fill_mroute(mrt, skb, c, rtm); in ipmr_fill_mroute()
2325 static void mroute_netlink_event(struct mr_table *mrt, struct mfc_cache *mfc, in mroute_netlink_event() argument
2328 struct net *net = read_pnet(&mrt->net); in mroute_netlink_event()
2332 skb = nlmsg_new(mroute_msgsize(mfc->mfc_parent >= MAXVIFS, mrt->maxvif), in mroute_netlink_event()
2337 err = ipmr_fill_mroute(mrt, skb, 0, 0, mfc, cmd, 0); in mroute_netlink_event()
2353 struct mr_table *mrt; in ipmr_rtm_dumproute() local
2364 ipmr_for_each_table(mrt, net) { in ipmr_rtm_dumproute()
2370 list_for_each_entry_rcu(mfc, &mrt->mfc_cache_array[h], list) { in ipmr_rtm_dumproute()
2373 if (ipmr_fill_mroute(mrt, skb, in ipmr_rtm_dumproute()
2385 list_for_each_entry(mfc, &mrt->mfc_unres_queue, list) { in ipmr_rtm_dumproute()
2388 if (ipmr_fill_mroute(mrt, skb, in ipmr_rtm_dumproute()
2422 struct mr_table *mrt; member
2430 struct mr_table *mrt = iter->mrt; in ipmr_vif_seq_idx() local
2432 for (iter->ct = 0; iter->ct < mrt->maxvif; ++iter->ct) { in ipmr_vif_seq_idx()
2433 if (!VIF_EXISTS(mrt, iter->ct)) in ipmr_vif_seq_idx()
2436 return &mrt->vif_table[iter->ct]; in ipmr_vif_seq_idx()
2446 struct mr_table *mrt; in ipmr_vif_seq_start() local
2448 mrt = ipmr_get_table(net, RT_TABLE_DEFAULT); in ipmr_vif_seq_start()
2449 if (!mrt) in ipmr_vif_seq_start()
2452 iter->mrt = mrt; in ipmr_vif_seq_start()
2463 struct mr_table *mrt = iter->mrt; in ipmr_vif_seq_next() local
2469 while (++iter->ct < mrt->maxvif) { in ipmr_vif_seq_next()
2470 if (!VIF_EXISTS(mrt, iter->ct)) in ipmr_vif_seq_next()
2472 return &mrt->vif_table[iter->ct]; in ipmr_vif_seq_next()
2486 struct mr_table *mrt = iter->mrt; in ipmr_vif_seq_show() local
2497 vif - mrt->vif_table, in ipmr_vif_seq_show()
2528 struct mr_table *mrt; member
2537 struct mr_table *mrt = it->mrt; in ipmr_mfc_seq_idx() local
2542 it->cache = &mrt->mfc_cache_array[it->ct]; in ipmr_mfc_seq_idx()
2550 it->cache = &mrt->mfc_unres_queue; in ipmr_mfc_seq_idx()
2565 struct mr_table *mrt; in ipmr_mfc_seq_start() local
2567 mrt = ipmr_get_table(net, RT_TABLE_DEFAULT); in ipmr_mfc_seq_start()
2568 if (!mrt) in ipmr_mfc_seq_start()
2571 it->mrt = mrt; in ipmr_mfc_seq_start()
2583 struct mr_table *mrt = it->mrt; in ipmr_mfc_seq_next() local
2593 if (it->cache == &mrt->mfc_unres_queue) in ipmr_mfc_seq_next()
2596 BUG_ON(it->cache != &mrt->mfc_cache_array[it->ct]); in ipmr_mfc_seq_next()
2599 it->cache = &mrt->mfc_cache_array[it->ct]; in ipmr_mfc_seq_next()
2607 it->cache = &mrt->mfc_unres_queue; in ipmr_mfc_seq_next()
2624 struct mr_table *mrt = it->mrt; in ipmr_mfc_seq_stop() local
2626 if (it->cache == &mrt->mfc_unres_queue) in ipmr_mfc_seq_stop()
2628 else if (it->cache == &mrt->mfc_cache_array[it->ct]) in ipmr_mfc_seq_stop()
2642 const struct mr_table *mrt = it->mrt; in ipmr_mfc_seq_show() local
2649 if (it->cache != &mrt->mfc_unres_queue) { in ipmr_mfc_seq_show()
2656 if (VIF_EXISTS(mrt, n) && in ipmr_mfc_seq_show()