Lines Matching refs:mrt

60 	struct mr_table	*mrt;  member
85 static void ip6mr_free_table(struct mr_table *mrt);
87 static void ip6_mr_forward(struct net *net, struct mr_table *mrt,
89 static int ip6mr_cache_report(struct mr_table *mrt, struct sk_buff *pkt,
91 static void mr6_netlink_event(struct mr_table *mrt, struct mfc6_cache *mfc,
93 static void mrt6msg_netlink_event(struct mr_table *mrt, struct sk_buff *pkt);
96 static void mroute_clean_tables(struct mr_table *mrt, bool all);
100 #define ip6mr_for_each_table(mrt, net) \ argument
101 list_for_each_entry_rcu(mrt, &net->ipv6.mr6_tables, list)
104 struct mr_table *mrt) in ip6mr_mr_table_iter() argument
108 if (!mrt) in ip6mr_mr_table_iter()
112 ret = list_entry_rcu(mrt->list.next, in ip6mr_mr_table_iter()
122 struct mr_table *mrt; in ip6mr_get_table() local
124 ip6mr_for_each_table(mrt, net) { in ip6mr_get_table()
125 if (mrt->id == id) in ip6mr_get_table()
126 return mrt; in ip6mr_get_table()
132 struct mr_table **mrt) in ip6mr_fib_lookup() argument
145 *mrt = res.mrt; in ip6mr_fib_lookup()
153 struct mr_table *mrt; in ip6mr_rule_action() local
167 mrt = ip6mr_get_table(rule->fr_net, rule->table); in ip6mr_rule_action()
168 if (!mrt) in ip6mr_rule_action()
170 res->mrt = mrt; in ip6mr_rule_action()
222 struct mr_table *mrt; in ip6mr_rules_init() local
231 mrt = ip6mr_new_table(net, RT6_TABLE_DFLT); in ip6mr_rules_init()
232 if (IS_ERR(mrt)) { in ip6mr_rules_init()
233 err = PTR_ERR(mrt); in ip6mr_rules_init()
245 ip6mr_free_table(mrt); in ip6mr_rules_init()
253 struct mr_table *mrt, *next; in ip6mr_rules_exit() local
256 list_for_each_entry_safe(mrt, next, &net->ipv6.mr6_tables, list) { in ip6mr_rules_exit()
257 list_del(&mrt->list); in ip6mr_rules_exit()
258 ip6mr_free_table(mrt); in ip6mr_rules_exit()
281 #define ip6mr_for_each_table(mrt, net) \ argument
282 for (mrt = net->ipv6.mrt6; mrt; mrt = NULL)
285 struct mr_table *mrt) in ip6mr_mr_table_iter() argument
287 if (!mrt) in ip6mr_mr_table_iter()
298 struct mr_table **mrt) in ip6mr_fib_lookup() argument
300 *mrt = net->ipv6.mrt6; in ip6mr_fib_lookup()
306 struct mr_table *mrt; in ip6mr_rules_init() local
308 mrt = ip6mr_new_table(net, RT6_TABLE_DFLT); in ip6mr_rules_init()
309 if (IS_ERR(mrt)) in ip6mr_rules_init()
310 return PTR_ERR(mrt); in ip6mr_rules_init()
311 net->ipv6.mrt6 = mrt; in ip6mr_rules_init()
354 static void ip6mr_new_table_set(struct mr_table *mrt, in ip6mr_new_table_set() argument
358 list_add_tail_rcu(&mrt->list, &net->ipv6.mr6_tables); in ip6mr_new_table_set()
374 struct mr_table *mrt; in ip6mr_new_table() local
376 mrt = ip6mr_get_table(net, id); in ip6mr_new_table()
377 if (mrt) in ip6mr_new_table()
378 return mrt; in ip6mr_new_table()
384 static void ip6mr_free_table(struct mr_table *mrt) in ip6mr_free_table() argument
386 del_timer_sync(&mrt->ipmr_expire_timer); in ip6mr_free_table()
387 mroute_clean_tables(mrt, true); in ip6mr_free_table()
388 rhltable_destroy(&mrt->mfc_hash); in ip6mr_free_table()
389 kfree(mrt); in ip6mr_free_table()
402 struct mr_table *mrt; in ip6mr_vif_seq_start() local
404 mrt = ip6mr_get_table(net, RT6_TABLE_DFLT); in ip6mr_vif_seq_start()
405 if (!mrt) in ip6mr_vif_seq_start()
408 iter->mrt = mrt; in ip6mr_vif_seq_start()
423 struct mr_table *mrt = iter->mrt; in ip6mr_vif_seq_show() local
434 vif - mrt->vif_table, in ip6mr_vif_seq_show()
452 struct mr_table *mrt; in ipmr_mfc_seq_start() local
454 mrt = ip6mr_get_table(net, RT6_TABLE_DFLT); in ipmr_mfc_seq_start()
455 if (!mrt) in ipmr_mfc_seq_start()
458 return mr_mfc_seq_start(seq, pos, mrt, &mfc_unres_lock); in ipmr_mfc_seq_start()
473 struct mr_table *mrt = it->mrt; in ipmr_mfc_seq_show() local
479 if (it->cache != &mrt->mfc_unres_queue) { in ipmr_mfc_seq_show()
486 if (VIF_EXISTS(mrt, n) && in ipmr_mfc_seq_show()
519 struct mr_table *mrt; in pim6_rcv() local
547 if (ip6mr_fib_lookup(net, &fl6, &mrt) < 0) in pim6_rcv()
549 reg_vif_num = mrt->mroute_reg_vif_num; in pim6_rcv()
553 reg_dev = mrt->vif_table[reg_vif_num].dev; in pim6_rcv()
588 struct mr_table *mrt; in reg_vif_xmit() local
596 err = ip6mr_fib_lookup(net, &fl6, &mrt); in reg_vif_xmit()
605 ip6mr_cache_report(mrt, skb, mrt->mroute_reg_vif_num, MRT6MSG_WHOLEPKT); in reg_vif_xmit()
631 static struct net_device *ip6mr_reg_vif(struct net *net, struct mr_table *mrt) in ip6mr_reg_vif() argument
636 if (mrt->id == RT6_TABLE_DFLT) in ip6mr_reg_vif()
639 sprintf(name, "pim6reg%u", mrt->id); in ip6mr_reg_vif()
683 static int mif6_delete(struct mr_table *mrt, int vifi, int notify, in mif6_delete() argument
690 if (vifi < 0 || vifi >= mrt->maxvif) in mif6_delete()
693 v = &mrt->vif_table[vifi]; in mif6_delete()
695 if (VIF_EXISTS(mrt, vifi)) in mif6_delete()
696 call_ip6mr_vif_entry_notifiers(read_pnet(&mrt->net), in mif6_delete()
698 mrt->id); in mif6_delete()
710 if (vifi == mrt->mroute_reg_vif_num) in mif6_delete()
711 mrt->mroute_reg_vif_num = -1; in mif6_delete()
714 if (vifi + 1 == mrt->maxvif) { in mif6_delete()
717 if (VIF_EXISTS(mrt, tmp)) in mif6_delete()
720 mrt->maxvif = tmp + 1; in mif6_delete()
758 static void ip6mr_destroy_unres(struct mr_table *mrt, struct mfc6_cache *c) in ip6mr_destroy_unres() argument
760 struct net *net = read_pnet(&mrt->net); in ip6mr_destroy_unres()
763 atomic_dec(&mrt->cache_resolve_queue_len); in ip6mr_destroy_unres()
784 static void ipmr_do_expire_process(struct mr_table *mrt) in ipmr_do_expire_process() argument
790 list_for_each_entry_safe(c, next, &mrt->mfc_unres_queue, list) { in ipmr_do_expire_process()
800 mr6_netlink_event(mrt, (struct mfc6_cache *)c, RTM_DELROUTE); in ipmr_do_expire_process()
801 ip6mr_destroy_unres(mrt, (struct mfc6_cache *)c); in ipmr_do_expire_process()
804 if (!list_empty(&mrt->mfc_unres_queue)) in ipmr_do_expire_process()
805 mod_timer(&mrt->ipmr_expire_timer, jiffies + expires); in ipmr_do_expire_process()
810 struct mr_table *mrt = from_timer(mrt, t, ipmr_expire_timer); in ipmr_expire_process() local
813 mod_timer(&mrt->ipmr_expire_timer, jiffies + 1); in ipmr_expire_process()
817 if (!list_empty(&mrt->mfc_unres_queue)) in ipmr_expire_process()
818 ipmr_do_expire_process(mrt); in ipmr_expire_process()
825 static void ip6mr_update_thresholds(struct mr_table *mrt, in ip6mr_update_thresholds() argument
835 for (vifi = 0; vifi < mrt->maxvif; vifi++) { in ip6mr_update_thresholds()
836 if (VIF_EXISTS(mrt, vifi) && in ip6mr_update_thresholds()
848 static int mif6_add(struct net *net, struct mr_table *mrt, in mif6_add() argument
852 struct vif_device *v = &mrt->vif_table[vifi]; in mif6_add()
858 if (VIF_EXISTS(mrt, vifi)) in mif6_add()
868 if (mrt->mroute_reg_vif_num >= 0) in mif6_add()
870 dev = ip6mr_reg_vif(net, mrt); in mif6_add()
913 mrt->mroute_reg_vif_num = vifi; in mif6_add()
915 if (vifi + 1 > mrt->maxvif) in mif6_add()
916 mrt->maxvif = vifi + 1; in mif6_add()
919 v, vifi, mrt->id); in mif6_add()
923 static struct mfc6_cache *ip6mr_cache_find(struct mr_table *mrt, in ip6mr_cache_find() argument
932 return mr_mfc_find(mrt, &arg); in ip6mr_cache_find()
936 static struct mfc6_cache *ip6mr_cache_find_any(struct mr_table *mrt, in ip6mr_cache_find_any() argument
946 return mr_mfc_find_any_parent(mrt, mifi); in ip6mr_cache_find_any()
947 return mr_mfc_find_any(mrt, mifi, &arg); in ip6mr_cache_find_any()
952 ip6mr_cache_find_parent(struct mr_table *mrt, in ip6mr_cache_find_parent() argument
962 return mr_mfc_find_parent(mrt, &arg, parent); in ip6mr_cache_find_parent()
992 static void ip6mr_cache_resolve(struct net *net, struct mr_table *mrt, in ip6mr_cache_resolve() argument
1006 if (mr_fill_mroute(mrt, skb, &c->_c, in ip6mr_cache_resolve()
1017 ip6_mr_forward(net, mrt, skb, c); in ip6mr_cache_resolve()
1027 static int ip6mr_cache_report(struct mr_table *mrt, struct sk_buff *pkt, in ip6mr_cache_report() argument
1065 msg->im6_mif = mrt->mroute_reg_vif_num; in ip6mr_cache_report()
1101 mroute6_sk = rcu_dereference(mrt->mroute_sk); in ip6mr_cache_report()
1108 mrt6msg_netlink_event(mrt, skb); in ip6mr_cache_report()
1122 static int ip6mr_cache_unresolved(struct mr_table *mrt, mifi_t mifi, in ip6mr_cache_unresolved() argument
1130 list_for_each_entry(c, &mrt->mfc_unres_queue, _c.list) { in ip6mr_cache_unresolved()
1143 if (atomic_read(&mrt->cache_resolve_queue_len) >= 10 || in ip6mr_cache_unresolved()
1159 err = ip6mr_cache_report(mrt, skb, mifi, MRT6MSG_NOCACHE); in ip6mr_cache_unresolved()
1171 atomic_inc(&mrt->cache_resolve_queue_len); in ip6mr_cache_unresolved()
1172 list_add(&c->_c.list, &mrt->mfc_unres_queue); in ip6mr_cache_unresolved()
1173 mr6_netlink_event(mrt, c, RTM_NEWROUTE); in ip6mr_cache_unresolved()
1175 ipmr_do_expire_process(mrt); in ip6mr_cache_unresolved()
1195 static int ip6mr_mfc_delete(struct mr_table *mrt, struct mf6cctl *mfc, in ip6mr_mfc_delete() argument
1202 c = ip6mr_cache_find_parent(mrt, &mfc->mf6cc_origin.sin6_addr, in ip6mr_mfc_delete()
1207 rhltable_remove(&mrt->mfc_hash, &c->_c.mnode, ip6mr_rht_params); in ip6mr_mfc_delete()
1210 call_ip6mr_mfc_entry_notifiers(read_pnet(&mrt->net), in ip6mr_mfc_delete()
1211 FIB_EVENT_ENTRY_DEL, c, mrt->id); in ip6mr_mfc_delete()
1212 mr6_netlink_event(mrt, c, RTM_DELROUTE); in ip6mr_mfc_delete()
1222 struct mr_table *mrt; in ip6mr_device_event() local
1229 ip6mr_for_each_table(mrt, net) { in ip6mr_device_event()
1230 v = &mrt->vif_table[0]; in ip6mr_device_event()
1231 for (ct = 0; ct < mrt->maxvif; ct++, v++) { in ip6mr_device_event()
1233 mif6_delete(mrt, ct, 1, NULL); in ip6mr_device_event()
1389 static int ip6mr_mfc_add(struct net *net, struct mr_table *mrt, in ip6mr_mfc_add() argument
1409 c = ip6mr_cache_find_parent(mrt, &mfc->mf6cc_origin.sin6_addr, in ip6mr_mfc_add()
1415 ip6mr_update_thresholds(mrt, &c->_c, ttls); in ip6mr_mfc_add()
1420 c, mrt->id); in ip6mr_mfc_add()
1421 mr6_netlink_event(mrt, c, RTM_NEWROUTE); in ip6mr_mfc_add()
1436 ip6mr_update_thresholds(mrt, &c->_c, ttls); in ip6mr_mfc_add()
1440 err = rhltable_insert_key(&mrt->mfc_hash, &c->cmparg, &c->_c.mnode, in ip6mr_mfc_add()
1447 list_add_tail_rcu(&c->_c.list, &mrt->mfc_cache_list); in ip6mr_mfc_add()
1454 list_for_each_entry(_uc, &mrt->mfc_unres_queue, list) { in ip6mr_mfc_add()
1459 atomic_dec(&mrt->cache_resolve_queue_len); in ip6mr_mfc_add()
1464 if (list_empty(&mrt->mfc_unres_queue)) in ip6mr_mfc_add()
1465 del_timer(&mrt->ipmr_expire_timer); in ip6mr_mfc_add()
1469 ip6mr_cache_resolve(net, mrt, uc, c); in ip6mr_mfc_add()
1473 c, mrt->id); in ip6mr_mfc_add()
1474 mr6_netlink_event(mrt, c, RTM_NEWROUTE); in ip6mr_mfc_add()
1482 static void mroute_clean_tables(struct mr_table *mrt, bool all) in mroute_clean_tables() argument
1489 for (i = 0; i < mrt->maxvif; i++) { in mroute_clean_tables()
1490 if (!all && (mrt->vif_table[i].flags & VIFF_STATIC)) in mroute_clean_tables()
1492 mif6_delete(mrt, i, 0, &list); in mroute_clean_tables()
1497 list_for_each_entry_safe(c, tmp, &mrt->mfc_cache_list, list) { in mroute_clean_tables()
1500 rhltable_remove(&mrt->mfc_hash, &c->mnode, ip6mr_rht_params); in mroute_clean_tables()
1502 mr6_netlink_event(mrt, (struct mfc6_cache *)c, RTM_DELROUTE); in mroute_clean_tables()
1506 if (atomic_read(&mrt->cache_resolve_queue_len) != 0) { in mroute_clean_tables()
1508 list_for_each_entry_safe(c, tmp, &mrt->mfc_unres_queue, list) { in mroute_clean_tables()
1510 call_ip6mr_mfc_entry_notifiers(read_pnet(&mrt->net), in mroute_clean_tables()
1513 mrt->id); in mroute_clean_tables()
1514 mr6_netlink_event(mrt, (struct mfc6_cache *)c, in mroute_clean_tables()
1516 ip6mr_destroy_unres(mrt, (struct mfc6_cache *)c); in mroute_clean_tables()
1522 static int ip6mr_sk_init(struct mr_table *mrt, struct sock *sk) in ip6mr_sk_init() argument
1529 if (rtnl_dereference(mrt->mroute_sk)) { in ip6mr_sk_init()
1532 rcu_assign_pointer(mrt->mroute_sk, sk); in ip6mr_sk_init()
1552 struct mr_table *mrt; in ip6mr_sk_done() local
1559 ip6mr_for_each_table(mrt, net) { in ip6mr_sk_done()
1560 if (sk == rtnl_dereference(mrt->mroute_sk)) { in ip6mr_sk_done()
1562 RCU_INIT_POINTER(mrt->mroute_sk, NULL); in ip6mr_sk_done()
1574 mroute_clean_tables(mrt, false); in ip6mr_sk_done()
1586 struct mr_table *mrt; in mroute6_is_socket() local
1593 if (ip6mr_fib_lookup(net, &fl6, &mrt) < 0) in mroute6_is_socket()
1596 return rcu_access_pointer(mrt->mroute_sk); in mroute6_is_socket()
1614 struct mr_table *mrt; in ip6_mroute_setsockopt() local
1620 mrt = ip6mr_get_table(net, raw6_sk(sk)->ip6mr_table ? : RT6_TABLE_DFLT); in ip6_mroute_setsockopt()
1621 if (!mrt) in ip6_mroute_setsockopt()
1625 if (sk != rcu_access_pointer(mrt->mroute_sk) && in ip6_mroute_setsockopt()
1635 return ip6mr_sk_init(mrt, sk); in ip6_mroute_setsockopt()
1648 ret = mif6_add(net, mrt, &vif, in ip6_mroute_setsockopt()
1649 sk == rtnl_dereference(mrt->mroute_sk)); in ip6_mroute_setsockopt()
1659 ret = mif6_delete(mrt, mifi, 0, NULL); in ip6_mroute_setsockopt()
1681 ret = ip6mr_mfc_delete(mrt, &mfc, parent); in ip6_mroute_setsockopt()
1683 ret = ip6mr_mfc_add(net, mrt, &mfc, in ip6_mroute_setsockopt()
1685 rtnl_dereference(mrt->mroute_sk), in ip6_mroute_setsockopt()
1701 mrt->mroute_do_assert = v; in ip6_mroute_setsockopt()
1717 if (v != mrt->mroute_do_pim) { in ip6_mroute_setsockopt()
1718 mrt->mroute_do_pim = v; in ip6_mroute_setsockopt()
1719 mrt->mroute_do_assert = v; in ip6_mroute_setsockopt()
1738 if (sk == rcu_access_pointer(mrt->mroute_sk)) in ip6_mroute_setsockopt()
1743 mrt = ip6mr_new_table(net, v); in ip6_mroute_setsockopt()
1744 if (IS_ERR(mrt)) in ip6_mroute_setsockopt()
1745 ret = PTR_ERR(mrt); in ip6_mroute_setsockopt()
1771 struct mr_table *mrt; in ip6_mroute_getsockopt() local
1777 mrt = ip6mr_get_table(net, raw6_sk(sk)->ip6mr_table ? : RT6_TABLE_DFLT); in ip6_mroute_getsockopt()
1778 if (!mrt) in ip6_mroute_getsockopt()
1787 val = mrt->mroute_do_pim; in ip6_mroute_getsockopt()
1791 val = mrt->mroute_do_assert; in ip6_mroute_getsockopt()
1822 struct mr_table *mrt; in ip6mr_ioctl() local
1824 mrt = ip6mr_get_table(net, raw6_sk(sk)->ip6mr_table ? : RT6_TABLE_DFLT); in ip6mr_ioctl()
1825 if (!mrt) in ip6mr_ioctl()
1832 if (vr.mifi >= mrt->maxvif) in ip6mr_ioctl()
1835 vif = &mrt->vif_table[vr.mifi]; in ip6mr_ioctl()
1836 if (VIF_EXISTS(mrt, vr.mifi)) { in ip6mr_ioctl()
1854 c = ip6mr_cache_find(mrt, &sr.src.sin6_addr, &sr.grp.sin6_addr); in ip6mr_ioctl()
1896 struct mr_table *mrt; in ip6mr_compat_ioctl() local
1898 mrt = ip6mr_get_table(net, raw6_sk(sk)->ip6mr_table ? : RT6_TABLE_DFLT); in ip6mr_compat_ioctl()
1899 if (!mrt) in ip6mr_compat_ioctl()
1906 if (vr.mifi >= mrt->maxvif) in ip6mr_compat_ioctl()
1909 vif = &mrt->vif_table[vr.mifi]; in ip6mr_compat_ioctl()
1910 if (VIF_EXISTS(mrt, vr.mifi)) { in ip6mr_compat_ioctl()
1928 c = ip6mr_cache_find(mrt, &sr.src.sin6_addr, &sr.grp.sin6_addr); in ip6mr_compat_ioctl()
1960 static int ip6mr_forward2(struct net *net, struct mr_table *mrt, in ip6mr_forward2() argument
1964 struct vif_device *vif = &mrt->vif_table[vifi]; in ip6mr_forward2()
1978 ip6mr_cache_report(mrt, skb, vifi, MRT6MSG_WHOLEPKT); in ip6mr_forward2()
2034 static int ip6mr_find_vif(struct mr_table *mrt, struct net_device *dev) in ip6mr_find_vif() argument
2038 for (ct = mrt->maxvif - 1; ct >= 0; ct--) { in ip6mr_find_vif()
2039 if (mrt->vif_table[ct].dev == dev) in ip6mr_find_vif()
2045 static void ip6_mr_forward(struct net *net, struct mr_table *mrt, in ip6_mr_forward() argument
2050 int true_vifi = ip6mr_find_vif(mrt, skb->dev); in ip6_mr_forward()
2064 cache_proxy = mr_mfc_find_any_parent(mrt, vif); in ip6_mr_forward()
2076 if (mrt->vif_table[vif].dev != skb->dev) { in ip6_mr_forward()
2079 if (true_vifi >= 0 && mrt->mroute_do_assert && in ip6_mr_forward()
2085 (mrt->mroute_do_pim || in ip6_mr_forward()
2091 ip6mr_cache_report(mrt, skb, true_vifi, MRT6MSG_WRONGMIF); in ip6_mr_forward()
2097 mrt->vif_table[vif].pkt_in++; in ip6_mr_forward()
2098 mrt->vif_table[vif].bytes_in += skb->len; in ip6_mr_forward()
2126 ip6mr_forward2(net, mrt, skb2, in ip6_mr_forward()
2134 ip6mr_forward2(net, mrt, skb, c, psend); in ip6_mr_forward()
2151 struct mr_table *mrt; in ip6_mr_input() local
2158 err = ip6mr_fib_lookup(net, &fl6, &mrt); in ip6_mr_input()
2165 cache = ip6mr_cache_find(mrt, in ip6_mr_input()
2168 int vif = ip6mr_find_vif(mrt, skb->dev); in ip6_mr_input()
2171 cache = ip6mr_cache_find_any(mrt, in ip6_mr_input()
2182 vif = ip6mr_find_vif(mrt, skb->dev); in ip6_mr_input()
2184 int err = ip6mr_cache_unresolved(mrt, vif, skb); in ip6_mr_input()
2194 ip6_mr_forward(net, mrt, skb, cache); in ip6_mr_input()
2205 struct mr_table *mrt; in ip6mr_get_route() local
2209 mrt = ip6mr_get_table(net, RT6_TABLE_DFLT); in ip6mr_get_route()
2210 if (!mrt) in ip6mr_get_route()
2214 cache = ip6mr_cache_find(mrt, &rt->rt6i_src.addr, &rt->rt6i_dst.addr); in ip6mr_get_route()
2216 int vif = ip6mr_find_vif(mrt, skb->dev); in ip6mr_get_route()
2219 cache = ip6mr_cache_find_any(mrt, &rt->rt6i_dst.addr, in ip6mr_get_route()
2230 if (!dev || (vif = ip6mr_find_vif(mrt, dev)) < 0) { in ip6mr_get_route()
2260 err = ip6mr_cache_unresolved(mrt, vif, skb2); in ip6mr_get_route()
2266 err = mr_fill_mroute(mrt, skb, &cache->_c, rtm); in ip6mr_get_route()
2271 static int ip6mr_fill_mroute(struct mr_table *mrt, struct sk_buff *skb, in ip6mr_fill_mroute() argument
2288 rtm->rtm_table = mrt->id; in ip6mr_fill_mroute()
2289 if (nla_put_u32(skb, RTA_TABLE, mrt->id)) in ip6mr_fill_mroute()
2302 err = mr_fill_mroute(mrt, skb, &c->_c, rtm); in ip6mr_fill_mroute()
2315 static int _ip6mr_fill_mroute(struct mr_table *mrt, struct sk_buff *skb, in _ip6mr_fill_mroute() argument
2319 return ip6mr_fill_mroute(mrt, skb, portid, seq, (struct mfc6_cache *)c, in _ip6mr_fill_mroute()
2344 static void mr6_netlink_event(struct mr_table *mrt, struct mfc6_cache *mfc, in mr6_netlink_event() argument
2347 struct net *net = read_pnet(&mrt->net); in mr6_netlink_event()
2351 skb = nlmsg_new(mr6_msgsize(mfc->_c.mfc_parent >= MAXMIFS, mrt->maxvif), in mr6_netlink_event()
2356 err = ip6mr_fill_mroute(mrt, skb, 0, 0, mfc, cmd, 0); in mr6_netlink_event()
2386 static void mrt6msg_netlink_event(struct mr_table *mrt, struct sk_buff *pkt) in mrt6msg_netlink_event() argument
2388 struct net *net = read_pnet(&mrt->net); in mrt6msg_netlink_event()