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()
246 struct mr_table *mrt; in ipmr_rules_init() local
255 mrt = ipmr_new_table(net, RT_TABLE_DEFAULT); in ipmr_rules_init()
256 if (!mrt) { in ipmr_rules_init()
269 ipmr_free_table(mrt); in ipmr_rules_init()
277 struct mr_table *mrt, *next; in ipmr_rules_exit() local
280 list_for_each_entry_safe(mrt, next, &net->ipv4.mr_tables, list) { in ipmr_rules_exit()
281 list_del(&mrt->list); in ipmr_rules_exit()
282 ipmr_free_table(mrt); in ipmr_rules_exit()
288 #define ipmr_for_each_table(mrt, net) \ argument
289 for (mrt = net->ipv4.mrt; mrt; mrt = NULL)
293 return net->ipv4.mrt; in ipmr_get_table()
297 struct mr_table **mrt) in ipmr_fib_lookup() argument
299 *mrt = net->ipv4.mrt; in ipmr_fib_lookup()
305 net->ipv4.mrt = ipmr_new_table(net, RT_TABLE_DEFAULT); in ipmr_rules_init()
306 return net->ipv4.mrt ? 0 : -ENOMEM; in ipmr_rules_init()
312 ipmr_free_table(net->ipv4.mrt); in ipmr_rules_exit()
313 net->ipv4.mrt = NULL; in ipmr_rules_exit()
320 struct mr_table *mrt; in ipmr_new_table() local
323 mrt = ipmr_get_table(net, id); in ipmr_new_table()
324 if (mrt) in ipmr_new_table()
325 return mrt; in ipmr_new_table()
327 mrt = kzalloc(sizeof(*mrt), GFP_KERNEL); in ipmr_new_table()
328 if (!mrt) in ipmr_new_table()
330 write_pnet(&mrt->net, net); in ipmr_new_table()
331 mrt->id = id; in ipmr_new_table()
335 INIT_LIST_HEAD(&mrt->mfc_cache_array[i]); in ipmr_new_table()
337 INIT_LIST_HEAD(&mrt->mfc_unres_queue); in ipmr_new_table()
339 setup_timer(&mrt->ipmr_expire_timer, ipmr_expire_process, in ipmr_new_table()
340 (unsigned long)mrt); in ipmr_new_table()
343 mrt->mroute_reg_vif_num = -1; in ipmr_new_table()
346 list_add_tail_rcu(&mrt->list, &net->ipv4.mr_tables); in ipmr_new_table()
348 return mrt; in ipmr_new_table()
351 static void ipmr_free_table(struct mr_table *mrt) in ipmr_free_table() argument
353 del_timer_sync(&mrt->ipmr_expire_timer); in ipmr_free_table()
354 mroute_clean_tables(mrt, true); in ipmr_free_table()
355 kfree(mrt); in ipmr_free_table()
458 struct mr_table *mrt; in reg_vif_xmit() local
466 err = ipmr_fib_lookup(net, &fl4, &mrt); in reg_vif_xmit()
475 ipmr_cache_report(mrt, skb, mrt->mroute_reg_vif_num, IGMPMSG_WHOLEPKT); in reg_vif_xmit()
501 static struct net_device *ipmr_reg_vif(struct net *net, struct mr_table *mrt) in ipmr_reg_vif() argument
507 if (mrt->id == RT_TABLE_DEFAULT) in ipmr_reg_vif()
510 sprintf(name, "pimreg%u", mrt->id); in ipmr_reg_vif()
558 static int vif_delete(struct mr_table *mrt, int vifi, int notify, in vif_delete() argument
565 if (vifi < 0 || vifi >= mrt->maxvif) in vif_delete()
568 v = &mrt->vif_table[vifi]; in vif_delete()
580 if (vifi == mrt->mroute_reg_vif_num) in vif_delete()
581 mrt->mroute_reg_vif_num = -1; in vif_delete()
584 if (vifi + 1 == mrt->maxvif) { in vif_delete()
588 if (VIF_EXISTS(mrt, tmp)) in vif_delete()
591 mrt->maxvif = tmp+1; in vif_delete()
630 static void ipmr_destroy_unres(struct mr_table *mrt, struct mfc_cache *c) in ipmr_destroy_unres() argument
632 struct net *net = read_pnet(&mrt->net); in ipmr_destroy_unres()
636 atomic_dec(&mrt->cache_resolve_queue_len); in ipmr_destroy_unres()
662 struct mr_table *mrt = (struct mr_table *)arg; in ipmr_expire_process() local
668 mod_timer(&mrt->ipmr_expire_timer, jiffies+HZ/10); in ipmr_expire_process()
672 if (list_empty(&mrt->mfc_unres_queue)) in ipmr_expire_process()
678 list_for_each_entry_safe(c, next, &mrt->mfc_unres_queue, list) { in ipmr_expire_process()
687 mroute_netlink_event(mrt, c, RTM_DELROUTE); in ipmr_expire_process()
688 ipmr_destroy_unres(mrt, c); in ipmr_expire_process()
691 if (!list_empty(&mrt->mfc_unres_queue)) in ipmr_expire_process()
692 mod_timer(&mrt->ipmr_expire_timer, jiffies + expires); in ipmr_expire_process()
700 static void ipmr_update_thresholds(struct mr_table *mrt, struct mfc_cache *cache, in ipmr_update_thresholds() argument
709 for (vifi = 0; vifi < mrt->maxvif; vifi++) { in ipmr_update_thresholds()
710 if (VIF_EXISTS(mrt, vifi) && in ipmr_update_thresholds()
721 static int vif_add(struct net *net, struct mr_table *mrt, in vif_add() argument
725 struct vif_device *v = &mrt->vif_table[vifi]; in vif_add()
731 if (VIF_EXISTS(mrt, vifi)) in vif_add()
741 if (mrt->mroute_reg_vif_num >= 0) in vif_add()
743 dev = ipmr_reg_vif(net, mrt); in vif_add()
821 mrt->mroute_reg_vif_num = vifi; in vif_add()
823 if (vifi+1 > mrt->maxvif) in vif_add()
824 mrt->maxvif = vifi+1; in vif_add()
830 static struct mfc_cache *ipmr_cache_find(struct mr_table *mrt, in ipmr_cache_find() argument
837 list_for_each_entry_rcu(c, &mrt->mfc_cache_array[line], list) { in ipmr_cache_find()
845 static struct mfc_cache *ipmr_cache_find_any_parent(struct mr_table *mrt, in ipmr_cache_find_any_parent() argument
851 list_for_each_entry_rcu(c, &mrt->mfc_cache_array[line], list) in ipmr_cache_find_any_parent()
861 static struct mfc_cache *ipmr_cache_find_any(struct mr_table *mrt, in ipmr_cache_find_any() argument
870 list_for_each_entry_rcu(c, &mrt->mfc_cache_array[line], list) in ipmr_cache_find_any()
877 proxy = ipmr_cache_find_any_parent(mrt, in ipmr_cache_find_any()
884 return ipmr_cache_find_any_parent(mrt, vifi); in ipmr_cache_find_any()
914 static void ipmr_cache_resolve(struct net *net, struct mr_table *mrt, in ipmr_cache_resolve() argument
926 if (__ipmr_fill_mroute(mrt, skb, c, nlmsg_data(nlh)) > 0) { in ipmr_cache_resolve()
940 ip_mr_forward(net, mrt, skb, c, 0); in ipmr_cache_resolve()
952 static int ipmr_cache_report(struct mr_table *mrt, in ipmr_cache_report() argument
986 msg->im_vif = mrt->mroute_reg_vif_num; in ipmr_cache_report()
1015 mroute_sk = rcu_dereference(mrt->mroute_sk); in ipmr_cache_report()
1039 ipmr_cache_unresolved(struct mr_table *mrt, vifi_t vifi, struct sk_buff *skb) in ipmr_cache_unresolved() argument
1047 list_for_each_entry(c, &mrt->mfc_unres_queue, list) { in ipmr_cache_unresolved()
1058 if (atomic_read(&mrt->cache_resolve_queue_len) >= 10 || in ipmr_cache_unresolved()
1074 err = ipmr_cache_report(mrt, skb, vifi, IGMPMSG_NOCACHE); in ipmr_cache_unresolved()
1086 atomic_inc(&mrt->cache_resolve_queue_len); in ipmr_cache_unresolved()
1087 list_add(&c->list, &mrt->mfc_unres_queue); in ipmr_cache_unresolved()
1088 mroute_netlink_event(mrt, c, RTM_NEWROUTE); in ipmr_cache_unresolved()
1090 if (atomic_read(&mrt->cache_resolve_queue_len) == 1) in ipmr_cache_unresolved()
1091 mod_timer(&mrt->ipmr_expire_timer, c->mfc_un.unres.expires); in ipmr_cache_unresolved()
1112 static int ipmr_mfc_delete(struct mr_table *mrt, struct mfcctl *mfc, int parent) in ipmr_mfc_delete() argument
1119 list_for_each_entry_safe(c, next, &mrt->mfc_cache_array[line], list) { in ipmr_mfc_delete()
1124 mroute_netlink_event(mrt, c, RTM_DELROUTE); in ipmr_mfc_delete()
1132 static int ipmr_mfc_add(struct net *net, struct mr_table *mrt, in ipmr_mfc_add() argument
1144 list_for_each_entry(c, &mrt->mfc_cache_array[line], list) { in ipmr_mfc_add()
1156 ipmr_update_thresholds(mrt, c, mfc->mfcc_ttls); in ipmr_mfc_add()
1160 mroute_netlink_event(mrt, c, RTM_NEWROUTE); in ipmr_mfc_add()
1175 ipmr_update_thresholds(mrt, c, mfc->mfcc_ttls); in ipmr_mfc_add()
1179 list_add_rcu(&c->list, &mrt->mfc_cache_array[line]); in ipmr_mfc_add()
1187 list_for_each_entry(uc, &mrt->mfc_unres_queue, list) { in ipmr_mfc_add()
1191 atomic_dec(&mrt->cache_resolve_queue_len); in ipmr_mfc_add()
1196 if (list_empty(&mrt->mfc_unres_queue)) in ipmr_mfc_add()
1197 del_timer(&mrt->ipmr_expire_timer); in ipmr_mfc_add()
1201 ipmr_cache_resolve(net, mrt, uc, c); in ipmr_mfc_add()
1204 mroute_netlink_event(mrt, c, RTM_NEWROUTE); in ipmr_mfc_add()
1212 static void mroute_clean_tables(struct mr_table *mrt, bool all) in mroute_clean_tables() argument
1220 for (i = 0; i < mrt->maxvif; i++) { in mroute_clean_tables()
1221 if (!all && (mrt->vif_table[i].flags & VIFF_STATIC)) in mroute_clean_tables()
1223 vif_delete(mrt, i, 0, &list); in mroute_clean_tables()
1230 list_for_each_entry_safe(c, next, &mrt->mfc_cache_array[i], list) { in mroute_clean_tables()
1234 mroute_netlink_event(mrt, c, RTM_DELROUTE); in mroute_clean_tables()
1239 if (atomic_read(&mrt->cache_resolve_queue_len) != 0) { in mroute_clean_tables()
1241 list_for_each_entry_safe(c, next, &mrt->mfc_unres_queue, list) { in mroute_clean_tables()
1243 mroute_netlink_event(mrt, c, RTM_DELROUTE); in mroute_clean_tables()
1244 ipmr_destroy_unres(mrt, c); in mroute_clean_tables()
1256 struct mr_table *mrt; in mrtsock_destruct() local
1259 ipmr_for_each_table(mrt, net) { in mrtsock_destruct()
1260 if (sk == rtnl_dereference(mrt->mroute_sk)) { in mrtsock_destruct()
1265 RCU_INIT_POINTER(mrt->mroute_sk, NULL); in mrtsock_destruct()
1266 mroute_clean_tables(mrt, false); in mrtsock_destruct()
1285 struct mr_table *mrt; in ip_mroute_setsockopt() local
1291 mrt = ipmr_get_table(net, raw_sk(sk)->ipmr_table ? : RT_TABLE_DEFAULT); in ip_mroute_setsockopt()
1292 if (!mrt) in ip_mroute_setsockopt()
1296 if (sk != rcu_access_pointer(mrt->mroute_sk) && in ip_mroute_setsockopt()
1307 if (rtnl_dereference(mrt->mroute_sk)) { in ip_mroute_setsockopt()
1314 rcu_assign_pointer(mrt->mroute_sk, sk); in ip_mroute_setsockopt()
1323 if (sk != rcu_access_pointer(mrt->mroute_sk)) in ip_mroute_setsockopt()
1336 ret = vif_add(net, mrt, &vif, in ip_mroute_setsockopt()
1337 sk == rtnl_dereference(mrt->mroute_sk)); in ip_mroute_setsockopt()
1339 ret = vif_delete(mrt, vif.vifc_vifi, 0, NULL); in ip_mroute_setsockopt()
1361 ret = ipmr_mfc_delete(mrt, &mfc, parent); in ip_mroute_setsockopt()
1363 ret = ipmr_mfc_add(net, mrt, &mfc, in ip_mroute_setsockopt()
1364 sk == rtnl_dereference(mrt->mroute_sk), in ip_mroute_setsockopt()
1378 mrt->mroute_do_assert = v; in ip_mroute_setsockopt()
1394 if (v != mrt->mroute_do_pim) { in ip_mroute_setsockopt()
1395 mrt->mroute_do_pim = v; in ip_mroute_setsockopt()
1396 mrt->mroute_do_assert = v; in ip_mroute_setsockopt()
1418 if (sk == rtnl_dereference(mrt->mroute_sk)) { in ip_mroute_setsockopt()
1448 struct mr_table *mrt; in ip_mroute_getsockopt() local
1454 mrt = ipmr_get_table(net, raw_sk(sk)->ipmr_table ? : RT_TABLE_DEFAULT); in ip_mroute_getsockopt()
1455 if (!mrt) in ip_mroute_getsockopt()
1478 val = mrt->mroute_do_pim; in ip_mroute_getsockopt()
1481 val = mrt->mroute_do_assert; in ip_mroute_getsockopt()
1498 struct mr_table *mrt; in ipmr_ioctl() local
1500 mrt = ipmr_get_table(net, raw_sk(sk)->ipmr_table ? : RT_TABLE_DEFAULT); in ipmr_ioctl()
1501 if (!mrt) in ipmr_ioctl()
1508 if (vr.vifi >= mrt->maxvif) in ipmr_ioctl()
1511 vif = &mrt->vif_table[vr.vifi]; in ipmr_ioctl()
1512 if (VIF_EXISTS(mrt, vr.vifi)) { in ipmr_ioctl()
1530 c = ipmr_cache_find(mrt, sr.src.s_addr, sr.grp.s_addr); in ipmr_ioctl()
1572 struct mr_table *mrt; in ipmr_compat_ioctl() local
1574 mrt = ipmr_get_table(net, raw_sk(sk)->ipmr_table ? : RT_TABLE_DEFAULT); in ipmr_compat_ioctl()
1575 if (!mrt) in ipmr_compat_ioctl()
1582 if (vr.vifi >= mrt->maxvif) in ipmr_compat_ioctl()
1585 vif = &mrt->vif_table[vr.vifi]; in ipmr_compat_ioctl()
1586 if (VIF_EXISTS(mrt, vr.vifi)) { in ipmr_compat_ioctl()
1604 c = ipmr_cache_find(mrt, sr.src.s_addr, sr.grp.s_addr); in ipmr_compat_ioctl()
1628 struct mr_table *mrt; in ipmr_device_event() local
1635 ipmr_for_each_table(mrt, net) { in ipmr_device_event()
1636 v = &mrt->vif_table[0]; in ipmr_device_event()
1637 for (ct = 0; ct < mrt->maxvif; ct++, v++) { in ipmr_device_event()
1639 vif_delete(mrt, ct, 1, NULL); in ipmr_device_event()
1700 static void ipmr_queue_xmit(struct net *net, struct mr_table *mrt, in ipmr_queue_xmit() argument
1704 struct vif_device *vif = &mrt->vif_table[vifi]; in ipmr_queue_xmit()
1719 ipmr_cache_report(mrt, skb, vifi, IGMPMSG_WHOLEPKT); in ipmr_queue_xmit()
1801 static int ipmr_find_vif(struct mr_table *mrt, struct net_device *dev) in ipmr_find_vif() argument
1805 for (ct = mrt->maxvif-1; ct >= 0; ct--) { in ipmr_find_vif()
1806 if (mrt->vif_table[ct].dev == dev) in ipmr_find_vif()
1814 static void ip_mr_forward(struct net *net, struct mr_table *mrt, in ip_mr_forward() argument
1820 int true_vifi = ipmr_find_vif(mrt, skb->dev); in ip_mr_forward()
1832 cache_proxy = ipmr_cache_find_any_parent(mrt, vif); in ip_mr_forward()
1841 if (mrt->vif_table[vif].dev != skb->dev) { in ip_mr_forward()
1859 if (true_vifi >= 0 && mrt->mroute_do_assert && in ip_mr_forward()
1865 (mrt->mroute_do_pim || in ip_mr_forward()
1870 ipmr_cache_report(mrt, skb, true_vifi, IGMPMSG_WRONGVIF); in ip_mr_forward()
1876 mrt->vif_table[vif].pkt_in++; in ip_mr_forward()
1877 mrt->vif_table[vif].bytes_in += skb->len; in ip_mr_forward()
1907 ipmr_queue_xmit(net, mrt, skb2, cache, in ip_mr_forward()
1919 ipmr_queue_xmit(net, mrt, skb2, cache, psend); in ip_mr_forward()
1921 ipmr_queue_xmit(net, mrt, skb, cache, psend); in ip_mr_forward()
1946 struct mr_table *mrt; in ipmr_rt_fib_lookup() local
1949 err = ipmr_fib_lookup(net, &fl4, &mrt); in ipmr_rt_fib_lookup()
1952 return mrt; in ipmr_rt_fib_lookup()
1965 struct mr_table *mrt; in ip_mr_input() local
1973 mrt = ipmr_rt_fib_lookup(net, skb); in ip_mr_input()
1974 if (IS_ERR(mrt)) { in ip_mr_input()
1976 return PTR_ERR(mrt); in ip_mr_input()
1991 mroute_sk = rcu_dereference(mrt->mroute_sk); in ip_mr_input()
2001 cache = ipmr_cache_find(mrt, ip_hdr(skb)->saddr, ip_hdr(skb)->daddr); in ip_mr_input()
2003 int vif = ipmr_find_vif(mrt, skb->dev); in ip_mr_input()
2006 cache = ipmr_cache_find_any(mrt, ip_hdr(skb)->daddr, in ip_mr_input()
2025 vif = ipmr_find_vif(mrt, skb->dev); in ip_mr_input()
2027 int err2 = ipmr_cache_unresolved(mrt, vif, skb); in ip_mr_input()
2038 ip_mr_forward(net, mrt, skb, cache, local); in ip_mr_input()
2055 static int __pim_rcv(struct mr_table *mrt, struct sk_buff *skb, in __pim_rcv() argument
2074 if (mrt->mroute_reg_vif_num >= 0) in __pim_rcv()
2075 reg_dev = mrt->vif_table[mrt->mroute_reg_vif_num].dev; in __pim_rcv()
2104 struct mr_table *mrt; in pim_rcv_v1() local
2111 mrt = ipmr_rt_fib_lookup(net, skb); in pim_rcv_v1()
2112 if (IS_ERR(mrt)) in pim_rcv_v1()
2114 if (!mrt->mroute_do_pim || in pim_rcv_v1()
2118 if (__pim_rcv(mrt, skb, sizeof(*pim))) { in pim_rcv_v1()
2131 struct mr_table *mrt; in pim_rcv() local
2143 mrt = ipmr_rt_fib_lookup(net, skb); in pim_rcv()
2144 if (IS_ERR(mrt)) in pim_rcv()
2146 if (__pim_rcv(mrt, skb, sizeof(*pim))) { in pim_rcv()
2154 static int __ipmr_fill_mroute(struct mr_table *mrt, struct sk_buff *skb, in __ipmr_fill_mroute() argument
2166 if (VIF_EXISTS(mrt, c->mfc_parent) && in __ipmr_fill_mroute()
2167 nla_put_u32(skb, RTA_IIF, mrt->vif_table[c->mfc_parent].dev->ifindex) < 0) in __ipmr_fill_mroute()
2174 if (VIF_EXISTS(mrt, ct) && c->mfc_un.res.ttls[ct] < 255) { in __ipmr_fill_mroute()
2182 nhp->rtnh_ifindex = mrt->vif_table[ct].dev->ifindex; in __ipmr_fill_mroute()
2204 struct mr_table *mrt; in ipmr_get_route() local
2207 mrt = ipmr_get_table(net, RT_TABLE_DEFAULT); in ipmr_get_route()
2208 if (!mrt) in ipmr_get_route()
2212 cache = ipmr_cache_find(mrt, saddr, daddr); in ipmr_get_route()
2214 int vif = ipmr_find_vif(mrt, skb->dev); in ipmr_get_route()
2217 cache = ipmr_cache_find_any(mrt, daddr, vif); in ipmr_get_route()
2233 vif = ipmr_find_vif(mrt, dev); in ipmr_get_route()
2253 err = ipmr_cache_unresolved(mrt, vif, skb2); in ipmr_get_route()
2262 err = __ipmr_fill_mroute(mrt, skb, cache, rtm); in ipmr_get_route()
2268 static int ipmr_fill_mroute(struct mr_table *mrt, struct sk_buff *skb, in ipmr_fill_mroute() argument
2285 rtm->rtm_table = mrt->id; in ipmr_fill_mroute()
2286 if (nla_put_u32(skb, RTA_TABLE, mrt->id)) in ipmr_fill_mroute()
2299 err = __ipmr_fill_mroute(mrt, skb, c, rtm); in ipmr_fill_mroute()
2333 static void mroute_netlink_event(struct mr_table *mrt, struct mfc_cache *mfc, in mroute_netlink_event() argument
2336 struct net *net = read_pnet(&mrt->net); in mroute_netlink_event()
2340 skb = nlmsg_new(mroute_msgsize(mfc->mfc_parent >= MAXVIFS, mrt->maxvif), in mroute_netlink_event()
2345 err = ipmr_fill_mroute(mrt, skb, 0, 0, mfc, cmd, 0); in mroute_netlink_event()
2361 struct mr_table *mrt; in ipmr_rtm_dumproute() local
2372 ipmr_for_each_table(mrt, net) { in ipmr_rtm_dumproute()
2378 list_for_each_entry_rcu(mfc, &mrt->mfc_cache_array[h], list) { in ipmr_rtm_dumproute()
2381 if (ipmr_fill_mroute(mrt, skb, in ipmr_rtm_dumproute()
2393 list_for_each_entry(mfc, &mrt->mfc_unres_queue, list) { in ipmr_rtm_dumproute()
2396 if (ipmr_fill_mroute(mrt, skb, in ipmr_rtm_dumproute()
2430 struct mr_table *mrt; member
2438 struct mr_table *mrt = iter->mrt; in ipmr_vif_seq_idx() local
2440 for (iter->ct = 0; iter->ct < mrt->maxvif; ++iter->ct) { in ipmr_vif_seq_idx()
2441 if (!VIF_EXISTS(mrt, iter->ct)) in ipmr_vif_seq_idx()
2444 return &mrt->vif_table[iter->ct]; in ipmr_vif_seq_idx()
2454 struct mr_table *mrt; in ipmr_vif_seq_start() local
2456 mrt = ipmr_get_table(net, RT_TABLE_DEFAULT); in ipmr_vif_seq_start()
2457 if (!mrt) in ipmr_vif_seq_start()
2460 iter->mrt = mrt; in ipmr_vif_seq_start()
2471 struct mr_table *mrt = iter->mrt; in ipmr_vif_seq_next() local
2477 while (++iter->ct < mrt->maxvif) { in ipmr_vif_seq_next()
2478 if (!VIF_EXISTS(mrt, iter->ct)) in ipmr_vif_seq_next()
2480 return &mrt->vif_table[iter->ct]; in ipmr_vif_seq_next()
2494 struct mr_table *mrt = iter->mrt; in ipmr_vif_seq_show() local
2505 vif - mrt->vif_table, in ipmr_vif_seq_show()
2536 struct mr_table *mrt; member
2545 struct mr_table *mrt = it->mrt; in ipmr_mfc_seq_idx() local
2550 it->cache = &mrt->mfc_cache_array[it->ct]; in ipmr_mfc_seq_idx()
2558 it->cache = &mrt->mfc_unres_queue; in ipmr_mfc_seq_idx()
2573 struct mr_table *mrt; in ipmr_mfc_seq_start() local
2575 mrt = ipmr_get_table(net, RT_TABLE_DEFAULT); in ipmr_mfc_seq_start()
2576 if (!mrt) in ipmr_mfc_seq_start()
2579 it->mrt = mrt; in ipmr_mfc_seq_start()
2591 struct mr_table *mrt = it->mrt; in ipmr_mfc_seq_next() local
2601 if (it->cache == &mrt->mfc_unres_queue) in ipmr_mfc_seq_next()
2604 BUG_ON(it->cache != &mrt->mfc_cache_array[it->ct]); in ipmr_mfc_seq_next()
2607 it->cache = &mrt->mfc_cache_array[it->ct]; in ipmr_mfc_seq_next()
2615 it->cache = &mrt->mfc_unres_queue; in ipmr_mfc_seq_next()
2632 struct mr_table *mrt = it->mrt; in ipmr_mfc_seq_stop() local
2634 if (it->cache == &mrt->mfc_unres_queue) in ipmr_mfc_seq_stop()
2636 else if (it->cache == &mrt->mfc_cache_array[it->ct]) in ipmr_mfc_seq_stop()
2650 const struct mr_table *mrt = it->mrt; in ipmr_mfc_seq_show() local
2657 if (it->cache != &mrt->mfc_unres_queue) { in ipmr_mfc_seq_show()
2664 if (VIF_EXISTS(mrt, n) && in ipmr_mfc_seq_show()