mrt              5719 drivers/net/ethernet/mellanox/mlxsw/spectrum_router.c 	struct mlxsw_sp_mr_table *mrt;
mrt              5729 drivers/net/ethernet/mellanox/mlxsw/spectrum_router.c 	mrt = mlxsw_sp_router_fibmr_family_to_table(vr, men_info->info.family);
mrt              5730 drivers/net/ethernet/mellanox/mlxsw/spectrum_router.c 	return mlxsw_sp_mr_route_add(mrt, men_info->mfc, replace);
mrt              5736 drivers/net/ethernet/mellanox/mlxsw/spectrum_router.c 	struct mlxsw_sp_mr_table *mrt;
mrt              5746 drivers/net/ethernet/mellanox/mlxsw/spectrum_router.c 	mrt = mlxsw_sp_router_fibmr_family_to_table(vr, men_info->info.family);
mrt              5747 drivers/net/ethernet/mellanox/mlxsw/spectrum_router.c 	mlxsw_sp_mr_route_del(mrt, men_info->mfc);
mrt              5755 drivers/net/ethernet/mellanox/mlxsw/spectrum_router.c 	struct mlxsw_sp_mr_table *mrt;
mrt              5766 drivers/net/ethernet/mellanox/mlxsw/spectrum_router.c 	mrt = mlxsw_sp_router_fibmr_family_to_table(vr, ven_info->info.family);
mrt              5768 drivers/net/ethernet/mellanox/mlxsw/spectrum_router.c 	return mlxsw_sp_mr_vif_add(mrt, ven_info->dev,
mrt              5777 drivers/net/ethernet/mellanox/mlxsw/spectrum_router.c 	struct mlxsw_sp_mr_table *mrt;
mrt              5787 drivers/net/ethernet/mellanox/mlxsw/spectrum_router.c 	mrt = mlxsw_sp_router_fibmr_family_to_table(vr, ven_info->info.family);
mrt              5788 drivers/net/ethernet/mellanox/mlxsw/spectrum_router.c 	mlxsw_sp_mr_vif_del(mrt, ven_info->vif_index);
mrt               274 include/linux/mroute_base.h 	       void (*table_set)(struct mr_table *mrt,
mrt               280 include/linux/mroute_base.h void *mr_mfc_find_parent(struct mr_table *mrt,
mrt               282 include/linux/mroute_base.h void *mr_mfc_find_any_parent(struct mr_table *mrt, int vifi);
mrt               283 include/linux/mroute_base.h void *mr_mfc_find_any(struct mr_table *mrt, int vifi, void *hasharg);
mrt               285 include/linux/mroute_base.h int mr_fill_mroute(struct mr_table *mrt, struct sk_buff *skb,
mrt               287 include/linux/mroute_base.h int mr_table_dump(struct mr_table *mrt, struct sk_buff *skb,
mrt               289 include/linux/mroute_base.h 		  int (*fill)(struct mr_table *mrt, struct sk_buff *skb,
mrt               295 include/linux/mroute_base.h 					      struct mr_table *mrt),
mrt               296 include/linux/mroute_base.h 		     int (*fill)(struct mr_table *mrt,
mrt               306 include/linux/mroute_base.h 					struct mr_table *mrt),
mrt               318 include/linux/mroute_base.h static inline void *mr_mfc_find_parent(struct mr_table *mrt,
mrt               324 include/linux/mroute_base.h static inline void *mr_mfc_find_any_parent(struct mr_table *mrt,
mrt               330 include/linux/mroute_base.h static inline struct mr_mfc *mr_mfc_find_any(struct mr_table *mrt,
mrt               336 include/linux/mroute_base.h static inline int mr_fill_mroute(struct mr_table *mrt, struct sk_buff *skb,
mrt               345 include/linux/mroute_base.h 					  struct mr_table *mrt),
mrt               346 include/linux/mroute_base.h 		 int (*fill)(struct mr_table *mrt,
mrt               360 include/linux/mroute_base.h 						      struct mr_table *mrt),
mrt               367 include/linux/mroute_base.h static inline void *mr_mfc_find(struct mr_table *mrt, void *hasharg)
mrt               369 include/linux/mroute_base.h 	return mr_mfc_find_parent(mrt, hasharg, -1);
mrt               375 include/linux/mroute_base.h 	struct mr_table *mrt;
mrt               381 include/linux/mroute_base.h 	struct mr_table *mrt;
mrt               408 include/linux/mroute_base.h 				     struct mr_table *mrt, spinlock_t *lock)
mrt               412 include/linux/mroute_base.h 	it->mrt = mrt;
mrt               424 include/linux/mroute_base.h 	struct mr_table *mrt = it->mrt;
mrt               426 include/linux/mroute_base.h 	if (it->cache == &mrt->mfc_unres_queue)
mrt               428 include/linux/mroute_base.h 	else if (it->cache == &mrt->mfc_cache_list)
mrt               462 include/linux/mroute_base.h 				     struct mr_table *mrt, spinlock_t *lock)
mrt               205 include/net/netns/ipv4.h 	struct mr_table		*mrt;
mrt                73 net/ipv4/ipmr.c 	struct mr_table		*mrt;
mrt                98 net/ipv4/ipmr.c static void ipmr_free_table(struct mr_table *mrt);
mrt               100 net/ipv4/ipmr.c static void ip_mr_forward(struct net *net, struct mr_table *mrt,
mrt               103 net/ipv4/ipmr.c static int ipmr_cache_report(struct mr_table *mrt,
mrt               105 net/ipv4/ipmr.c static void mroute_netlink_event(struct mr_table *mrt, struct mfc_cache *mfc,
mrt               107 net/ipv4/ipmr.c static void igmpmsg_netlink_event(struct mr_table *mrt, struct sk_buff *pkt);
mrt               108 net/ipv4/ipmr.c static void mroute_clean_tables(struct mr_table *mrt, int flags);
mrt               112 net/ipv4/ipmr.c #define ipmr_for_each_table(mrt, net) \
mrt               113 net/ipv4/ipmr.c 	list_for_each_entry_rcu(mrt, &net->ipv4.mr_tables, list)
mrt               116 net/ipv4/ipmr.c 					   struct mr_table *mrt)
mrt               120 net/ipv4/ipmr.c 	if (!mrt)
mrt               124 net/ipv4/ipmr.c 		ret = list_entry_rcu(mrt->list.next,
mrt               134 net/ipv4/ipmr.c 	struct mr_table *mrt;
mrt               136 net/ipv4/ipmr.c 	ipmr_for_each_table(mrt, net) {
mrt               137 net/ipv4/ipmr.c 		if (mrt->id == id)
mrt               138 net/ipv4/ipmr.c 			return mrt;
mrt               144 net/ipv4/ipmr.c 			   struct mr_table **mrt)
mrt               160 net/ipv4/ipmr.c 	*mrt = res.mrt;
mrt               168 net/ipv4/ipmr.c 	struct mr_table *mrt;
mrt               184 net/ipv4/ipmr.c 	mrt = ipmr_get_table(rule->fr_net, arg->table);
mrt               185 net/ipv4/ipmr.c 	if (!mrt)
mrt               187 net/ipv4/ipmr.c 	res->mrt = mrt;
mrt               239 net/ipv4/ipmr.c 	struct mr_table *mrt;
mrt               248 net/ipv4/ipmr.c 	mrt = ipmr_new_table(net, RT_TABLE_DEFAULT);
mrt               249 net/ipv4/ipmr.c 	if (IS_ERR(mrt)) {
mrt               250 net/ipv4/ipmr.c 		err = PTR_ERR(mrt);
mrt               262 net/ipv4/ipmr.c 	ipmr_free_table(mrt);
mrt               270 net/ipv4/ipmr.c 	struct mr_table *mrt, *next;
mrt               273 net/ipv4/ipmr.c 	list_for_each_entry_safe(mrt, next, &net->ipv4.mr_tables, list) {
mrt               274 net/ipv4/ipmr.c 		list_del(&mrt->list);
mrt               275 net/ipv4/ipmr.c 		ipmr_free_table(mrt);
mrt               297 net/ipv4/ipmr.c #define ipmr_for_each_table(mrt, net) \
mrt               298 net/ipv4/ipmr.c 	for (mrt = net->ipv4.mrt; mrt; mrt = NULL)
mrt               301 net/ipv4/ipmr.c 					   struct mr_table *mrt)
mrt               303 net/ipv4/ipmr.c 	if (!mrt)
mrt               304 net/ipv4/ipmr.c 		return net->ipv4.mrt;
mrt               310 net/ipv4/ipmr.c 	return net->ipv4.mrt;
mrt               314 net/ipv4/ipmr.c 			   struct mr_table **mrt)
mrt               316 net/ipv4/ipmr.c 	*mrt = net->ipv4.mrt;
mrt               322 net/ipv4/ipmr.c 	struct mr_table *mrt;
mrt               324 net/ipv4/ipmr.c 	mrt = ipmr_new_table(net, RT_TABLE_DEFAULT);
mrt               325 net/ipv4/ipmr.c 	if (IS_ERR(mrt))
mrt               326 net/ipv4/ipmr.c 		return PTR_ERR(mrt);
mrt               327 net/ipv4/ipmr.c 	net->ipv4.mrt = mrt;
mrt               334 net/ipv4/ipmr.c 	ipmr_free_table(net->ipv4.mrt);
mrt               335 net/ipv4/ipmr.c 	net->ipv4.mrt = NULL;
mrt               375 net/ipv4/ipmr.c static void ipmr_new_table_set(struct mr_table *mrt,
mrt               379 net/ipv4/ipmr.c 	list_add_tail_rcu(&mrt->list, &net->ipv4.mr_tables);
mrt               395 net/ipv4/ipmr.c 	struct mr_table *mrt;
mrt               401 net/ipv4/ipmr.c 	mrt = ipmr_get_table(net, id);
mrt               402 net/ipv4/ipmr.c 	if (mrt)
mrt               403 net/ipv4/ipmr.c 		return mrt;
mrt               409 net/ipv4/ipmr.c static void ipmr_free_table(struct mr_table *mrt)
mrt               411 net/ipv4/ipmr.c 	del_timer_sync(&mrt->ipmr_expire_timer);
mrt               412 net/ipv4/ipmr.c 	mroute_clean_tables(mrt, MRT_FLUSH_VIFS | MRT_FLUSH_VIFS_STATIC |
mrt               414 net/ipv4/ipmr.c 	rhltable_destroy(&mrt->mfc_hash);
mrt               415 net/ipv4/ipmr.c 	kfree(mrt);
mrt               521 net/ipv4/ipmr.c 	struct mr_table *mrt;
mrt               529 net/ipv4/ipmr.c 	err = ipmr_fib_lookup(net, &fl4, &mrt);
mrt               538 net/ipv4/ipmr.c 	ipmr_cache_report(mrt, skb, mrt->mroute_reg_vif_num, IGMPMSG_WHOLEPKT);
mrt               564 net/ipv4/ipmr.c static struct net_device *ipmr_reg_vif(struct net *net, struct mr_table *mrt)
mrt               569 net/ipv4/ipmr.c 	if (mrt->id == RT_TABLE_DEFAULT)
mrt               572 net/ipv4/ipmr.c 		sprintf(name, "pimreg%u", mrt->id);
mrt               601 net/ipv4/ipmr.c static int __pim_rcv(struct mr_table *mrt, struct sk_buff *skb,
mrt               619 net/ipv4/ipmr.c 	if (mrt->mroute_reg_vif_num >= 0)
mrt               620 net/ipv4/ipmr.c 		reg_dev = mrt->vif_table[mrt->mroute_reg_vif_num].dev;
mrt               639 net/ipv4/ipmr.c static struct net_device *ipmr_reg_vif(struct net *net, struct mr_table *mrt)
mrt               667 net/ipv4/ipmr.c static int vif_delete(struct mr_table *mrt, int vifi, int notify,
mrt               670 net/ipv4/ipmr.c 	struct net *net = read_pnet(&mrt->net);
mrt               675 net/ipv4/ipmr.c 	if (vifi < 0 || vifi >= mrt->maxvif)
mrt               678 net/ipv4/ipmr.c 	v = &mrt->vif_table[vifi];
mrt               680 net/ipv4/ipmr.c 	if (VIF_EXISTS(mrt, vifi))
mrt               682 net/ipv4/ipmr.c 					      mrt->id);
mrt               693 net/ipv4/ipmr.c 	if (vifi == mrt->mroute_reg_vif_num)
mrt               694 net/ipv4/ipmr.c 		mrt->mroute_reg_vif_num = -1;
mrt               696 net/ipv4/ipmr.c 	if (vifi + 1 == mrt->maxvif) {
mrt               700 net/ipv4/ipmr.c 			if (VIF_EXISTS(mrt, tmp))
mrt               703 net/ipv4/ipmr.c 		mrt->maxvif = tmp+1;
mrt               741 net/ipv4/ipmr.c static void ipmr_destroy_unres(struct mr_table *mrt, struct mfc_cache *c)
mrt               743 net/ipv4/ipmr.c 	struct net *net = read_pnet(&mrt->net);
mrt               747 net/ipv4/ipmr.c 	atomic_dec(&mrt->cache_resolve_queue_len);
mrt               772 net/ipv4/ipmr.c 	struct mr_table *mrt = from_timer(mrt, t, ipmr_expire_timer);
mrt               778 net/ipv4/ipmr.c 		mod_timer(&mrt->ipmr_expire_timer, jiffies+HZ/10);
mrt               782 net/ipv4/ipmr.c 	if (list_empty(&mrt->mfc_unres_queue))
mrt               788 net/ipv4/ipmr.c 	list_for_each_entry_safe(c, next, &mrt->mfc_unres_queue, list) {
mrt               797 net/ipv4/ipmr.c 		mroute_netlink_event(mrt, (struct mfc_cache *)c, RTM_DELROUTE);
mrt               798 net/ipv4/ipmr.c 		ipmr_destroy_unres(mrt, (struct mfc_cache *)c);
mrt               801 net/ipv4/ipmr.c 	if (!list_empty(&mrt->mfc_unres_queue))
mrt               802 net/ipv4/ipmr.c 		mod_timer(&mrt->ipmr_expire_timer, jiffies + expires);
mrt               809 net/ipv4/ipmr.c static void ipmr_update_thresholds(struct mr_table *mrt, struct mr_mfc *cache,
mrt               818 net/ipv4/ipmr.c 	for (vifi = 0; vifi < mrt->maxvif; vifi++) {
mrt               819 net/ipv4/ipmr.c 		if (VIF_EXISTS(mrt, vifi) &&
mrt               831 net/ipv4/ipmr.c static int vif_add(struct net *net, struct mr_table *mrt,
mrt               836 net/ipv4/ipmr.c 	struct vif_device *v = &mrt->vif_table[vifi];
mrt               842 net/ipv4/ipmr.c 	if (VIF_EXISTS(mrt, vifi))
mrt               852 net/ipv4/ipmr.c 		if (mrt->mroute_reg_vif_num >= 0)
mrt               854 net/ipv4/ipmr.c 		dev = ipmr_reg_vif(net, mrt);
mrt               929 net/ipv4/ipmr.c 		mrt->mroute_reg_vif_num = vifi;
mrt               930 net/ipv4/ipmr.c 	if (vifi+1 > mrt->maxvif)
mrt               931 net/ipv4/ipmr.c 		mrt->maxvif = vifi+1;
mrt               933 net/ipv4/ipmr.c 	call_ipmr_vif_entry_notifiers(net, FIB_EVENT_VIF_ADD, v, vifi, mrt->id);
mrt               938 net/ipv4/ipmr.c static struct mfc_cache *ipmr_cache_find(struct mr_table *mrt,
mrt               947 net/ipv4/ipmr.c 	return mr_mfc_find(mrt, &arg);
mrt               951 net/ipv4/ipmr.c static struct mfc_cache *ipmr_cache_find_any(struct mr_table *mrt,
mrt               960 net/ipv4/ipmr.c 		return mr_mfc_find_any_parent(mrt, vifi);
mrt               961 net/ipv4/ipmr.c 	return mr_mfc_find_any(mrt, vifi, &arg);
mrt               965 net/ipv4/ipmr.c static struct mfc_cache *ipmr_cache_find_parent(struct mr_table *mrt,
mrt               974 net/ipv4/ipmr.c 	return mr_mfc_find_parent(mrt, &arg, parent);
mrt              1003 net/ipv4/ipmr.c static void ipmr_cache_resolve(struct net *net, struct mr_table *mrt,
mrt              1015 net/ipv4/ipmr.c 			if (mr_fill_mroute(mrt, skb, &c->_c,
mrt              1030 net/ipv4/ipmr.c 			ip_mr_forward(net, mrt, skb->dev, skb, c, 0);
mrt              1039 net/ipv4/ipmr.c static int ipmr_cache_report(struct mr_table *mrt,
mrt              1073 net/ipv4/ipmr.c 			msg->im_vif = mrt->mroute_reg_vif_num;
mrt              1097 net/ipv4/ipmr.c 	mroute_sk = rcu_dereference(mrt->mroute_sk);
mrt              1104 net/ipv4/ipmr.c 	igmpmsg_netlink_event(mrt, skb);
mrt              1118 net/ipv4/ipmr.c static int ipmr_cache_unresolved(struct mr_table *mrt, vifi_t vifi,
mrt              1127 net/ipv4/ipmr.c 	list_for_each_entry(c, &mrt->mfc_unres_queue, _c.list) {
mrt              1151 net/ipv4/ipmr.c 		err = ipmr_cache_report(mrt, skb, vifi, IGMPMSG_NOCACHE);
mrt              1164 net/ipv4/ipmr.c 		atomic_inc(&mrt->cache_resolve_queue_len);
mrt              1165 net/ipv4/ipmr.c 		list_add(&c->_c.list, &mrt->mfc_unres_queue);
mrt              1166 net/ipv4/ipmr.c 		mroute_netlink_event(mrt, c, RTM_NEWROUTE);
mrt              1168 net/ipv4/ipmr.c 		if (atomic_read(&mrt->cache_resolve_queue_len) == 1)
mrt              1169 net/ipv4/ipmr.c 			mod_timer(&mrt->ipmr_expire_timer,
mrt              1192 net/ipv4/ipmr.c static int ipmr_mfc_delete(struct mr_table *mrt, struct mfcctl *mfc, int parent)
mrt              1194 net/ipv4/ipmr.c 	struct net *net = read_pnet(&mrt->net);
mrt              1199 net/ipv4/ipmr.c 	c = ipmr_cache_find_parent(mrt, mfc->mfcc_origin.s_addr,
mrt              1204 net/ipv4/ipmr.c 	rhltable_remove(&mrt->mfc_hash, &c->_c.mnode, ipmr_rht_params);
mrt              1206 net/ipv4/ipmr.c 	call_ipmr_mfc_entry_notifiers(net, FIB_EVENT_ENTRY_DEL, c, mrt->id);
mrt              1207 net/ipv4/ipmr.c 	mroute_netlink_event(mrt, c, RTM_DELROUTE);
mrt              1213 net/ipv4/ipmr.c static int ipmr_mfc_add(struct net *net, struct mr_table *mrt,
mrt              1226 net/ipv4/ipmr.c 	c = ipmr_cache_find_parent(mrt, mfc->mfcc_origin.s_addr,
mrt              1232 net/ipv4/ipmr.c 		ipmr_update_thresholds(mrt, &c->_c, mfc->mfcc_ttls);
mrt              1237 net/ipv4/ipmr.c 					      mrt->id);
mrt              1238 net/ipv4/ipmr.c 		mroute_netlink_event(mrt, c, RTM_NEWROUTE);
mrt              1253 net/ipv4/ipmr.c 	ipmr_update_thresholds(mrt, &c->_c, mfc->mfcc_ttls);
mrt              1257 net/ipv4/ipmr.c 	ret = rhltable_insert_key(&mrt->mfc_hash, &c->cmparg, &c->_c.mnode,
mrt              1264 net/ipv4/ipmr.c 	list_add_tail_rcu(&c->_c.list, &mrt->mfc_cache_list);
mrt              1270 net/ipv4/ipmr.c 	list_for_each_entry(_uc, &mrt->mfc_unres_queue, list) {
mrt              1275 net/ipv4/ipmr.c 			atomic_dec(&mrt->cache_resolve_queue_len);
mrt              1280 net/ipv4/ipmr.c 	if (list_empty(&mrt->mfc_unres_queue))
mrt              1281 net/ipv4/ipmr.c 		del_timer(&mrt->ipmr_expire_timer);
mrt              1285 net/ipv4/ipmr.c 		ipmr_cache_resolve(net, mrt, uc, c);
mrt              1288 net/ipv4/ipmr.c 	call_ipmr_mfc_entry_notifiers(net, FIB_EVENT_ENTRY_ADD, c, mrt->id);
mrt              1289 net/ipv4/ipmr.c 	mroute_netlink_event(mrt, c, RTM_NEWROUTE);
mrt              1294 net/ipv4/ipmr.c static void mroute_clean_tables(struct mr_table *mrt, int flags)
mrt              1296 net/ipv4/ipmr.c 	struct net *net = read_pnet(&mrt->net);
mrt              1304 net/ipv4/ipmr.c 		for (i = 0; i < mrt->maxvif; i++) {
mrt              1305 net/ipv4/ipmr.c 			if (((mrt->vif_table[i].flags & VIFF_STATIC) &&
mrt              1307 net/ipv4/ipmr.c 			    (!(mrt->vif_table[i].flags & VIFF_STATIC) && !(flags & MRT_FLUSH_VIFS)))
mrt              1309 net/ipv4/ipmr.c 			vif_delete(mrt, i, 0, &list);
mrt              1316 net/ipv4/ipmr.c 		list_for_each_entry_safe(c, tmp, &mrt->mfc_cache_list, list) {
mrt              1320 net/ipv4/ipmr.c 			rhltable_remove(&mrt->mfc_hash, &c->mnode, ipmr_rht_params);
mrt              1324 net/ipv4/ipmr.c 						      mrt->id);
mrt              1325 net/ipv4/ipmr.c 			mroute_netlink_event(mrt, cache, RTM_DELROUTE);
mrt              1331 net/ipv4/ipmr.c 		if (atomic_read(&mrt->cache_resolve_queue_len) != 0) {
mrt              1333 net/ipv4/ipmr.c 			list_for_each_entry_safe(c, tmp, &mrt->mfc_unres_queue, list) {
mrt              1336 net/ipv4/ipmr.c 				mroute_netlink_event(mrt, cache, RTM_DELROUTE);
mrt              1337 net/ipv4/ipmr.c 				ipmr_destroy_unres(mrt, cache);
mrt              1350 net/ipv4/ipmr.c 	struct mr_table *mrt;
mrt              1353 net/ipv4/ipmr.c 	ipmr_for_each_table(mrt, net) {
mrt              1354 net/ipv4/ipmr.c 		if (sk == rtnl_dereference(mrt->mroute_sk)) {
mrt              1360 net/ipv4/ipmr.c 			RCU_INIT_POINTER(mrt->mroute_sk, NULL);
mrt              1361 net/ipv4/ipmr.c 			mroute_clean_tables(mrt, MRT_FLUSH_VIFS | MRT_FLUSH_MFC);
mrt              1378 net/ipv4/ipmr.c 	struct mr_table *mrt;
mrt              1392 net/ipv4/ipmr.c 	mrt = ipmr_get_table(net, raw_sk(sk)->ipmr_table ? : RT_TABLE_DEFAULT);
mrt              1393 net/ipv4/ipmr.c 	if (!mrt) {
mrt              1398 net/ipv4/ipmr.c 		if (sk != rcu_access_pointer(mrt->mroute_sk) &&
mrt              1411 net/ipv4/ipmr.c 		if (rtnl_dereference(mrt->mroute_sk)) {
mrt              1418 net/ipv4/ipmr.c 			rcu_assign_pointer(mrt->mroute_sk, sk);
mrt              1427 net/ipv4/ipmr.c 		if (sk != rcu_access_pointer(mrt->mroute_sk)) {
mrt              1454 net/ipv4/ipmr.c 			ret = vif_add(net, mrt, &vif,
mrt              1455 net/ipv4/ipmr.c 				      sk == rtnl_dereference(mrt->mroute_sk));
mrt              1457 net/ipv4/ipmr.c 			ret = vif_delete(mrt, vif.vifc_vifi, 0, NULL);
mrt              1480 net/ipv4/ipmr.c 			ret = ipmr_mfc_delete(mrt, &mfc, parent);
mrt              1482 net/ipv4/ipmr.c 			ret = ipmr_mfc_add(net, mrt, &mfc,
mrt              1483 net/ipv4/ipmr.c 					   sk == rtnl_dereference(mrt->mroute_sk),
mrt              1495 net/ipv4/ipmr.c 		mroute_clean_tables(mrt, val);
mrt              1507 net/ipv4/ipmr.c 		mrt->mroute_do_assert = val;
mrt              1525 net/ipv4/ipmr.c 		if (val != mrt->mroute_do_pim) {
mrt              1526 net/ipv4/ipmr.c 			mrt->mroute_do_pim = val;
mrt              1527 net/ipv4/ipmr.c 			mrt->mroute_do_assert = val;
mrt              1528 net/ipv4/ipmr.c 			mrt->mroute_do_wrvifwhole = do_wrvifwhole;
mrt              1545 net/ipv4/ipmr.c 		if (sk == rtnl_dereference(mrt->mroute_sk)) {
mrt              1548 net/ipv4/ipmr.c 			mrt = ipmr_new_table(net, uval);
mrt              1549 net/ipv4/ipmr.c 			if (IS_ERR(mrt))
mrt              1550 net/ipv4/ipmr.c 				ret = PTR_ERR(mrt);
mrt              1571 net/ipv4/ipmr.c 	struct mr_table *mrt;
mrt              1577 net/ipv4/ipmr.c 	mrt = ipmr_get_table(net, raw_sk(sk)->ipmr_table ? : RT_TABLE_DEFAULT);
mrt              1578 net/ipv4/ipmr.c 	if (!mrt)
mrt              1588 net/ipv4/ipmr.c 		val = mrt->mroute_do_pim;
mrt              1591 net/ipv4/ipmr.c 		val = mrt->mroute_do_assert;
mrt              1617 net/ipv4/ipmr.c 	struct mr_table *mrt;
mrt              1619 net/ipv4/ipmr.c 	mrt = ipmr_get_table(net, raw_sk(sk)->ipmr_table ? : RT_TABLE_DEFAULT);
mrt              1620 net/ipv4/ipmr.c 	if (!mrt)
mrt              1627 net/ipv4/ipmr.c 		if (vr.vifi >= mrt->maxvif)
mrt              1629 net/ipv4/ipmr.c 		vr.vifi = array_index_nospec(vr.vifi, mrt->maxvif);
mrt              1631 net/ipv4/ipmr.c 		vif = &mrt->vif_table[vr.vifi];
mrt              1632 net/ipv4/ipmr.c 		if (VIF_EXISTS(mrt, vr.vifi)) {
mrt              1650 net/ipv4/ipmr.c 		c = ipmr_cache_find(mrt, sr.src.s_addr, sr.grp.s_addr);
mrt              1692 net/ipv4/ipmr.c 	struct mr_table *mrt;
mrt              1694 net/ipv4/ipmr.c 	mrt = ipmr_get_table(net, raw_sk(sk)->ipmr_table ? : RT_TABLE_DEFAULT);
mrt              1695 net/ipv4/ipmr.c 	if (!mrt)
mrt              1702 net/ipv4/ipmr.c 		if (vr.vifi >= mrt->maxvif)
mrt              1704 net/ipv4/ipmr.c 		vr.vifi = array_index_nospec(vr.vifi, mrt->maxvif);
mrt              1706 net/ipv4/ipmr.c 		vif = &mrt->vif_table[vr.vifi];
mrt              1707 net/ipv4/ipmr.c 		if (VIF_EXISTS(mrt, vr.vifi)) {
mrt              1725 net/ipv4/ipmr.c 		c = ipmr_cache_find(mrt, sr.src.s_addr, sr.grp.s_addr);
mrt              1748 net/ipv4/ipmr.c 	struct mr_table *mrt;
mrt              1755 net/ipv4/ipmr.c 	ipmr_for_each_table(mrt, net) {
mrt              1756 net/ipv4/ipmr.c 		v = &mrt->vif_table[0];
mrt              1757 net/ipv4/ipmr.c 		for (ct = 0; ct < mrt->maxvif; ct++, v++) {
mrt              1759 net/ipv4/ipmr.c 				vif_delete(mrt, ct, 1, NULL);
mrt              1815 net/ipv4/ipmr.c static bool ipmr_forward_offloaded(struct sk_buff *skb, struct mr_table *mrt,
mrt              1818 net/ipv4/ipmr.c 	struct vif_device *out_vif = &mrt->vif_table[out_vifi];
mrt              1819 net/ipv4/ipmr.c 	struct vif_device *in_vif = &mrt->vif_table[in_vifi];
mrt              1829 net/ipv4/ipmr.c static bool ipmr_forward_offloaded(struct sk_buff *skb, struct mr_table *mrt,
mrt              1838 net/ipv4/ipmr.c static void ipmr_queue_xmit(struct net *net, struct mr_table *mrt,
mrt              1842 net/ipv4/ipmr.c 	struct vif_device *vif = &mrt->vif_table[vifi];
mrt              1856 net/ipv4/ipmr.c 		ipmr_cache_report(mrt, skb, vifi, IGMPMSG_WHOLEPKT);
mrt              1860 net/ipv4/ipmr.c 	if (ipmr_forward_offloaded(skb, mrt, in_vifi, vifi))
mrt              1938 net/ipv4/ipmr.c static int ipmr_find_vif(struct mr_table *mrt, struct net_device *dev)
mrt              1942 net/ipv4/ipmr.c 	for (ct = mrt->maxvif-1; ct >= 0; ct--) {
mrt              1943 net/ipv4/ipmr.c 		if (mrt->vif_table[ct].dev == dev)
mrt              1950 net/ipv4/ipmr.c static void ip_mr_forward(struct net *net, struct mr_table *mrt,
mrt              1954 net/ipv4/ipmr.c 	int true_vifi = ipmr_find_vif(mrt, dev);
mrt              1969 net/ipv4/ipmr.c 		cache_proxy = mr_mfc_find_any_parent(mrt, vif);
mrt              1976 net/ipv4/ipmr.c 	if (mrt->vif_table[vif].dev != dev) {
mrt              1994 net/ipv4/ipmr.c 		if (true_vifi >= 0 && mrt->mroute_do_assert &&
mrt              2000 net/ipv4/ipmr.c 		    (mrt->mroute_do_pim ||
mrt              2006 net/ipv4/ipmr.c 			ipmr_cache_report(mrt, skb, true_vifi, IGMPMSG_WRONGVIF);
mrt              2007 net/ipv4/ipmr.c 			if (mrt->mroute_do_wrvifwhole)
mrt              2008 net/ipv4/ipmr.c 				ipmr_cache_report(mrt, skb, true_vifi,
mrt              2015 net/ipv4/ipmr.c 	mrt->vif_table[vif].pkt_in++;
mrt              2016 net/ipv4/ipmr.c 	mrt->vif_table[vif].bytes_in += skb->len;
mrt              2044 net/ipv4/ipmr.c 					ipmr_queue_xmit(net, mrt, true_vifi,
mrt              2056 net/ipv4/ipmr.c 				ipmr_queue_xmit(net, mrt, true_vifi, skb2,
mrt              2059 net/ipv4/ipmr.c 			ipmr_queue_xmit(net, mrt, true_vifi, skb, psend);
mrt              2084 net/ipv4/ipmr.c 	struct mr_table *mrt;
mrt              2087 net/ipv4/ipmr.c 	err = ipmr_fib_lookup(net, &fl4, &mrt);
mrt              2090 net/ipv4/ipmr.c 	return mrt;
mrt              2101 net/ipv4/ipmr.c 	struct mr_table *mrt;
mrt              2123 net/ipv4/ipmr.c 	mrt = ipmr_rt_fib_lookup(net, skb);
mrt              2124 net/ipv4/ipmr.c 	if (IS_ERR(mrt)) {
mrt              2126 net/ipv4/ipmr.c 		return PTR_ERR(mrt);
mrt              2141 net/ipv4/ipmr.c 			mroute_sk = rcu_dereference(mrt->mroute_sk);
mrt              2151 net/ipv4/ipmr.c 	cache = ipmr_cache_find(mrt, ip_hdr(skb)->saddr, ip_hdr(skb)->daddr);
mrt              2153 net/ipv4/ipmr.c 		int vif = ipmr_find_vif(mrt, dev);
mrt              2156 net/ipv4/ipmr.c 			cache = ipmr_cache_find_any(mrt, ip_hdr(skb)->daddr,
mrt              2173 net/ipv4/ipmr.c 		vif = ipmr_find_vif(mrt, dev);
mrt              2175 net/ipv4/ipmr.c 			int err2 = ipmr_cache_unresolved(mrt, vif, skb, dev);
mrt              2186 net/ipv4/ipmr.c 	ip_mr_forward(net, mrt, dev, skb, cache, local);
mrt              2207 net/ipv4/ipmr.c 	struct mr_table *mrt;
mrt              2214 net/ipv4/ipmr.c 	mrt = ipmr_rt_fib_lookup(net, skb);
mrt              2215 net/ipv4/ipmr.c 	if (IS_ERR(mrt))
mrt              2217 net/ipv4/ipmr.c 	if (!mrt->mroute_do_pim ||
mrt              2221 net/ipv4/ipmr.c 	if (__pim_rcv(mrt, skb, sizeof(*pim))) {
mrt              2234 net/ipv4/ipmr.c 	struct mr_table *mrt;
mrt              2246 net/ipv4/ipmr.c 	mrt = ipmr_rt_fib_lookup(net, skb);
mrt              2247 net/ipv4/ipmr.c 	if (IS_ERR(mrt))
mrt              2249 net/ipv4/ipmr.c 	if (__pim_rcv(mrt, skb, sizeof(*pim))) {
mrt              2262 net/ipv4/ipmr.c 	struct mr_table *mrt;
mrt              2265 net/ipv4/ipmr.c 	mrt = ipmr_get_table(net, RT_TABLE_DEFAULT);
mrt              2266 net/ipv4/ipmr.c 	if (!mrt)
mrt              2270 net/ipv4/ipmr.c 	cache = ipmr_cache_find(mrt, saddr, daddr);
mrt              2272 net/ipv4/ipmr.c 		int vif = ipmr_find_vif(mrt, skb->dev);
mrt              2275 net/ipv4/ipmr.c 			cache = ipmr_cache_find_any(mrt, daddr, vif);
mrt              2286 net/ipv4/ipmr.c 			vif = ipmr_find_vif(mrt, dev);
mrt              2308 net/ipv4/ipmr.c 		err = ipmr_cache_unresolved(mrt, vif, skb2, dev);
mrt              2315 net/ipv4/ipmr.c 	err = mr_fill_mroute(mrt, skb, &cache->_c, rtm);
mrt              2321 net/ipv4/ipmr.c static int ipmr_fill_mroute(struct mr_table *mrt, struct sk_buff *skb,
mrt              2338 net/ipv4/ipmr.c 	rtm->rtm_table    = mrt->id;
mrt              2339 net/ipv4/ipmr.c 	if (nla_put_u32(skb, RTA_TABLE, mrt->id))
mrt              2352 net/ipv4/ipmr.c 	err = mr_fill_mroute(mrt, skb, &c->_c, rtm);
mrt              2365 net/ipv4/ipmr.c static int _ipmr_fill_mroute(struct mr_table *mrt, struct sk_buff *skb,
mrt              2369 net/ipv4/ipmr.c 	return ipmr_fill_mroute(mrt, skb, portid, seq, (struct mfc_cache *)c,
mrt              2394 net/ipv4/ipmr.c static void mroute_netlink_event(struct mr_table *mrt, struct mfc_cache *mfc,
mrt              2397 net/ipv4/ipmr.c 	struct net *net = read_pnet(&mrt->net);
mrt              2402 net/ipv4/ipmr.c 				       mrt->maxvif),
mrt              2407 net/ipv4/ipmr.c 	err = ipmr_fill_mroute(mrt, skb, 0, 0, mfc, cmd, 0);
mrt              2435 net/ipv4/ipmr.c static void igmpmsg_netlink_event(struct mr_table *mrt, struct sk_buff *pkt)
mrt              2437 net/ipv4/ipmr.c 	struct net *net = read_pnet(&mrt->net);
mrt              2545 net/ipv4/ipmr.c 	struct mr_table *mrt;
mrt              2558 net/ipv4/ipmr.c 	mrt = ipmr_get_table(net, tableid ? tableid : RT_TABLE_DEFAULT);
mrt              2559 net/ipv4/ipmr.c 	if (!mrt) {
mrt              2566 net/ipv4/ipmr.c 	cache = ipmr_cache_find(mrt, src, grp);
mrt              2573 net/ipv4/ipmr.c 	skb = nlmsg_new(mroute_msgsize(false, mrt->maxvif), GFP_KERNEL);
mrt              2579 net/ipv4/ipmr.c 	err = ipmr_fill_mroute(mrt, skb, NETLINK_CB(in_skb).portid,
mrt              2608 net/ipv4/ipmr.c 		struct mr_table *mrt;
mrt              2610 net/ipv4/ipmr.c 		mrt = ipmr_get_table(sock_net(skb->sk), filter.table_id);
mrt              2611 net/ipv4/ipmr.c 		if (!mrt) {
mrt              2618 net/ipv4/ipmr.c 		err = mr_table_dump(mrt, skb, cb, _ipmr_fill_mroute,
mrt              2668 net/ipv4/ipmr.c 	struct mr_table *mrt;
mrt              2718 net/ipv4/ipmr.c 	mrt = ipmr_get_table(net, tblid);
mrt              2719 net/ipv4/ipmr.c 	if (!mrt) {
mrt              2723 net/ipv4/ipmr.c 	*mrtret = mrt;
mrt              2726 net/ipv4/ipmr.c 		mfcc->mfcc_parent = ipmr_find_vif(mrt, dev);
mrt              2754 net/ipv4/ipmr.c static bool ipmr_fill_table(struct mr_table *mrt, struct sk_buff *skb)
mrt              2756 net/ipv4/ipmr.c 	u32 queue_len = atomic_read(&mrt->cache_resolve_queue_len);
mrt              2758 net/ipv4/ipmr.c 	if (nla_put_u32(skb, IPMRA_TABLE_ID, mrt->id) ||
mrt              2761 net/ipv4/ipmr.c 			mrt->mroute_reg_vif_num) ||
mrt              2763 net/ipv4/ipmr.c 		       mrt->mroute_do_assert) ||
mrt              2764 net/ipv4/ipmr.c 	    nla_put_u8(skb, IPMRA_TABLE_MROUTE_DO_PIM, mrt->mroute_do_pim) ||
mrt              2766 net/ipv4/ipmr.c 		       mrt->mroute_do_wrvifwhole))
mrt              2772 net/ipv4/ipmr.c static bool ipmr_fill_vif(struct mr_table *mrt, u32 vifid, struct sk_buff *skb)
mrt              2778 net/ipv4/ipmr.c 	if (!VIF_EXISTS(mrt, vifid))
mrt              2781 net/ipv4/ipmr.c 	vif = &mrt->vif_table[vifid];
mrt              2837 net/ipv4/ipmr.c 	struct mr_table *mrt;
mrt              2849 net/ipv4/ipmr.c 	ipmr_for_each_table(mrt, net) {
mrt              2872 net/ipv4/ipmr.c 		if (!ipmr_fill_table(mrt, skb)) {
mrt              2883 net/ipv4/ipmr.c 		for (i = 0; i < mrt->maxvif; i++) {
mrt              2886 net/ipv4/ipmr.c 			if (!ipmr_fill_vif(mrt, i, skb)) {
mrt              2921 net/ipv4/ipmr.c 	struct mr_table *mrt;
mrt              2923 net/ipv4/ipmr.c 	mrt = ipmr_get_table(net, RT_TABLE_DEFAULT);
mrt              2924 net/ipv4/ipmr.c 	if (!mrt)
mrt              2927 net/ipv4/ipmr.c 	iter->mrt = mrt;
mrt              2942 net/ipv4/ipmr.c 	struct mr_table *mrt = iter->mrt;
mrt              2954 net/ipv4/ipmr.c 			   vif - mrt->vif_table,
mrt              2972 net/ipv4/ipmr.c 	struct mr_table *mrt;
mrt              2974 net/ipv4/ipmr.c 	mrt = ipmr_get_table(net, RT_TABLE_DEFAULT);
mrt              2975 net/ipv4/ipmr.c 	if (!mrt)
mrt              2978 net/ipv4/ipmr.c 	return mr_mfc_seq_start(seq, pos, mrt, &mfc_unres_lock);
mrt              2991 net/ipv4/ipmr.c 		const struct mr_table *mrt = it->mrt;
mrt              2998 net/ipv4/ipmr.c 		if (it->cache != &mrt->mfc_unres_queue) {
mrt              3005 net/ipv4/ipmr.c 				if (VIF_EXISTS(mrt, n) &&
mrt                35 net/ipv4/ipmr_base.c 	       void (*table_set)(struct mr_table *mrt,
mrt                38 net/ipv4/ipmr_base.c 	struct mr_table *mrt;
mrt                41 net/ipv4/ipmr_base.c 	mrt = kzalloc(sizeof(*mrt), GFP_KERNEL);
mrt                42 net/ipv4/ipmr_base.c 	if (!mrt)
mrt                44 net/ipv4/ipmr_base.c 	mrt->id = id;
mrt                45 net/ipv4/ipmr_base.c 	write_pnet(&mrt->net, net);
mrt                47 net/ipv4/ipmr_base.c 	mrt->ops = *ops;
mrt                48 net/ipv4/ipmr_base.c 	err = rhltable_init(&mrt->mfc_hash, mrt->ops.rht_params);
mrt                50 net/ipv4/ipmr_base.c 		kfree(mrt);
mrt                53 net/ipv4/ipmr_base.c 	INIT_LIST_HEAD(&mrt->mfc_cache_list);
mrt                54 net/ipv4/ipmr_base.c 	INIT_LIST_HEAD(&mrt->mfc_unres_queue);
mrt                56 net/ipv4/ipmr_base.c 	timer_setup(&mrt->ipmr_expire_timer, expire_func, 0);
mrt                58 net/ipv4/ipmr_base.c 	mrt->mroute_reg_vif_num = -1;
mrt                59 net/ipv4/ipmr_base.c 	table_set(mrt, net);
mrt                60 net/ipv4/ipmr_base.c 	return mrt;
mrt                64 net/ipv4/ipmr_base.c void *mr_mfc_find_parent(struct mr_table *mrt, void *hasharg, int parent)
mrt                69 net/ipv4/ipmr_base.c 	list = rhltable_lookup(&mrt->mfc_hash, hasharg, *mrt->ops.rht_params);
mrt                78 net/ipv4/ipmr_base.c void *mr_mfc_find_any_parent(struct mr_table *mrt, int vifi)
mrt                83 net/ipv4/ipmr_base.c 	list = rhltable_lookup(&mrt->mfc_hash, mrt->ops.cmparg_any,
mrt                84 net/ipv4/ipmr_base.c 			       *mrt->ops.rht_params);
mrt                93 net/ipv4/ipmr_base.c void *mr_mfc_find_any(struct mr_table *mrt, int vifi, void *hasharg)
mrt                98 net/ipv4/ipmr_base.c 	list = rhltable_lookup(&mrt->mfc_hash, hasharg, *mrt->ops.rht_params);
mrt               104 net/ipv4/ipmr_base.c 		proxy = mr_mfc_find_any_parent(mrt, c->mfc_parent);
mrt               109 net/ipv4/ipmr_base.c 	return mr_mfc_find_any_parent(mrt, vifi);
mrt               116 net/ipv4/ipmr_base.c 	struct mr_table *mrt = iter->mrt;
mrt               118 net/ipv4/ipmr_base.c 	for (iter->ct = 0; iter->ct < mrt->maxvif; ++iter->ct) {
mrt               119 net/ipv4/ipmr_base.c 		if (!VIF_EXISTS(mrt, iter->ct))
mrt               122 net/ipv4/ipmr_base.c 			return &mrt->vif_table[iter->ct];
mrt               132 net/ipv4/ipmr_base.c 	struct mr_table *mrt = iter->mrt;
mrt               138 net/ipv4/ipmr_base.c 	while (++iter->ct < mrt->maxvif) {
mrt               139 net/ipv4/ipmr_base.c 		if (!VIF_EXISTS(mrt, iter->ct))
mrt               141 net/ipv4/ipmr_base.c 		return &mrt->vif_table[iter->ct];
mrt               150 net/ipv4/ipmr_base.c 	struct mr_table *mrt = it->mrt;
mrt               154 net/ipv4/ipmr_base.c 	it->cache = &mrt->mfc_cache_list;
mrt               155 net/ipv4/ipmr_base.c 	list_for_each_entry_rcu(mfc, &mrt->mfc_cache_list, list)
mrt               161 net/ipv4/ipmr_base.c 	it->cache = &mrt->mfc_unres_queue;
mrt               177 net/ipv4/ipmr_base.c 	struct mr_table *mrt = it->mrt;
mrt               188 net/ipv4/ipmr_base.c 	if (it->cache == &mrt->mfc_unres_queue)
mrt               193 net/ipv4/ipmr_base.c 	it->cache = &mrt->mfc_unres_queue;
mrt               208 net/ipv4/ipmr_base.c int mr_fill_mroute(struct mr_table *mrt, struct sk_buff *skb,
mrt               223 net/ipv4/ipmr_base.c 	if (VIF_EXISTS(mrt, c->mfc_parent) &&
mrt               225 net/ipv4/ipmr_base.c 			mrt->vif_table[c->mfc_parent].dev->ifindex) < 0)
mrt               236 net/ipv4/ipmr_base.c 		if (VIF_EXISTS(mrt, ct) && c->mfc_un.res.ttls[ct] < 255) {
mrt               247 net/ipv4/ipmr_base.c 			vif = &mrt->vif_table[ct];
mrt               271 net/ipv4/ipmr_base.c static bool mr_mfc_uses_dev(const struct mr_table *mrt,
mrt               278 net/ipv4/ipmr_base.c 		if (VIF_EXISTS(mrt, ct) && c->mfc_un.res.ttls[ct] < 255) {
mrt               281 net/ipv4/ipmr_base.c 			vif = &mrt->vif_table[ct];
mrt               289 net/ipv4/ipmr_base.c int mr_table_dump(struct mr_table *mrt, struct sk_buff *skb,
mrt               291 net/ipv4/ipmr_base.c 		  int (*fill)(struct mr_table *mrt, struct sk_buff *skb,
mrt               304 net/ipv4/ipmr_base.c 	list_for_each_entry_rcu(mfc, &mrt->mfc_cache_list, list) {
mrt               308 net/ipv4/ipmr_base.c 		    !mr_mfc_uses_dev(mrt, mfc, filter->dev))
mrt               311 net/ipv4/ipmr_base.c 		err = fill(mrt, skb, NETLINK_CB(cb->skb).portid,
mrt               320 net/ipv4/ipmr_base.c 	list_for_each_entry(mfc, &mrt->mfc_unres_queue, list) {
mrt               324 net/ipv4/ipmr_base.c 		    !mr_mfc_uses_dev(mrt, mfc, filter->dev))
mrt               327 net/ipv4/ipmr_base.c 		err = fill(mrt, skb, NETLINK_CB(cb->skb).portid,
mrt               346 net/ipv4/ipmr_base.c 					      struct mr_table *mrt),
mrt               347 net/ipv4/ipmr_base.c 		     int (*fill)(struct mr_table *mrt,
mrt               355 net/ipv4/ipmr_base.c 	struct mr_table *mrt;
mrt               368 net/ipv4/ipmr_base.c 	for (mrt = iter(net, NULL); mrt; mrt = iter(net, mrt)) {
mrt               372 net/ipv4/ipmr_base.c 		err = mr_table_dump(mrt, skb, cb, fill, lock, filter);
mrt               391 net/ipv4/ipmr_base.c 					struct mr_table *mrt),
mrt               394 net/ipv4/ipmr_base.c 	struct mr_table *mrt;
mrt               401 net/ipv4/ipmr_base.c 	for (mrt = mr_iter(net, NULL); mrt; mrt = mr_iter(net, mrt)) {
mrt               402 net/ipv4/ipmr_base.c 		struct vif_device *v = &mrt->vif_table[0];
mrt               408 net/ipv4/ipmr_base.c 		for (vifi = 0; vifi < mrt->maxvif; vifi++, v++) {
mrt               414 net/ipv4/ipmr_base.c 					     v, vifi, mrt->id);
mrt               419 net/ipv4/ipmr_base.c 		list_for_each_entry_rcu(mfc, &mrt->mfc_cache_list, list)
mrt               422 net/ipv4/ipmr_base.c 					     mfc, mrt->id);
mrt               111 net/ipv6/addrconf.c static inline s32 rfc3315_s14_backoff_update(s32 rt, s32 mrt)
mrt               116 net/ipv6/addrconf.c 	if ((s32)tmp > mrt) {
mrt               118 net/ipv6/addrconf.c 		tmp = (900000 + prandom_u32() % 200001) * (u64)mrt;
mrt                58 net/ipv6/ip6mr.c 	struct mr_table	*mrt;
mrt                83 net/ipv6/ip6mr.c static void ip6mr_free_table(struct mr_table *mrt);
mrt                85 net/ipv6/ip6mr.c static void ip6_mr_forward(struct net *net, struct mr_table *mrt,
mrt                88 net/ipv6/ip6mr.c static int ip6mr_cache_report(struct mr_table *mrt, struct sk_buff *pkt,
mrt                90 net/ipv6/ip6mr.c static void mr6_netlink_event(struct mr_table *mrt, struct mfc6_cache *mfc,
mrt                92 net/ipv6/ip6mr.c static void mrt6msg_netlink_event(struct mr_table *mrt, struct sk_buff *pkt);
mrt                95 net/ipv6/ip6mr.c static void mroute_clean_tables(struct mr_table *mrt, int flags);
mrt                99 net/ipv6/ip6mr.c #define ip6mr_for_each_table(mrt, net) \
mrt               100 net/ipv6/ip6mr.c 	list_for_each_entry_rcu(mrt, &net->ipv6.mr6_tables, list)
mrt               103 net/ipv6/ip6mr.c 					    struct mr_table *mrt)
mrt               107 net/ipv6/ip6mr.c 	if (!mrt)
mrt               111 net/ipv6/ip6mr.c 		ret = list_entry_rcu(mrt->list.next,
mrt               121 net/ipv6/ip6mr.c 	struct mr_table *mrt;
mrt               123 net/ipv6/ip6mr.c 	ip6mr_for_each_table(mrt, net) {
mrt               124 net/ipv6/ip6mr.c 		if (mrt->id == id)
mrt               125 net/ipv6/ip6mr.c 			return mrt;
mrt               131 net/ipv6/ip6mr.c 			    struct mr_table **mrt)
mrt               147 net/ipv6/ip6mr.c 	*mrt = res.mrt;
mrt               155 net/ipv6/ip6mr.c 	struct mr_table *mrt;
mrt               171 net/ipv6/ip6mr.c 	mrt = ip6mr_get_table(rule->fr_net, arg->table);
mrt               172 net/ipv6/ip6mr.c 	if (!mrt)
mrt               174 net/ipv6/ip6mr.c 	res->mrt = mrt;
mrt               226 net/ipv6/ip6mr.c 	struct mr_table *mrt;
mrt               235 net/ipv6/ip6mr.c 	mrt = ip6mr_new_table(net, RT6_TABLE_DFLT);
mrt               236 net/ipv6/ip6mr.c 	if (IS_ERR(mrt)) {
mrt               237 net/ipv6/ip6mr.c 		err = PTR_ERR(mrt);
mrt               249 net/ipv6/ip6mr.c 	ip6mr_free_table(mrt);
mrt               257 net/ipv6/ip6mr.c 	struct mr_table *mrt, *next;
mrt               260 net/ipv6/ip6mr.c 	list_for_each_entry_safe(mrt, next, &net->ipv6.mr6_tables, list) {
mrt               261 net/ipv6/ip6mr.c 		list_del(&mrt->list);
mrt               262 net/ipv6/ip6mr.c 		ip6mr_free_table(mrt);
mrt               285 net/ipv6/ip6mr.c #define ip6mr_for_each_table(mrt, net) \
mrt               286 net/ipv6/ip6mr.c 	for (mrt = net->ipv6.mrt6; mrt; mrt = NULL)
mrt               289 net/ipv6/ip6mr.c 					    struct mr_table *mrt)
mrt               291 net/ipv6/ip6mr.c 	if (!mrt)
mrt               302 net/ipv6/ip6mr.c 			    struct mr_table **mrt)
mrt               304 net/ipv6/ip6mr.c 	*mrt = net->ipv6.mrt6;
mrt               310 net/ipv6/ip6mr.c 	struct mr_table *mrt;
mrt               312 net/ipv6/ip6mr.c 	mrt = ip6mr_new_table(net, RT6_TABLE_DFLT);
mrt               313 net/ipv6/ip6mr.c 	if (IS_ERR(mrt))
mrt               314 net/ipv6/ip6mr.c 		return PTR_ERR(mrt);
mrt               315 net/ipv6/ip6mr.c 	net->ipv6.mrt6 = mrt;
mrt               357 net/ipv6/ip6mr.c static void ip6mr_new_table_set(struct mr_table *mrt,
mrt               361 net/ipv6/ip6mr.c 	list_add_tail_rcu(&mrt->list, &net->ipv6.mr6_tables);
mrt               377 net/ipv6/ip6mr.c 	struct mr_table *mrt;
mrt               379 net/ipv6/ip6mr.c 	mrt = ip6mr_get_table(net, id);
mrt               380 net/ipv6/ip6mr.c 	if (mrt)
mrt               381 net/ipv6/ip6mr.c 		return mrt;
mrt               387 net/ipv6/ip6mr.c static void ip6mr_free_table(struct mr_table *mrt)
mrt               389 net/ipv6/ip6mr.c 	del_timer_sync(&mrt->ipmr_expire_timer);
mrt               390 net/ipv6/ip6mr.c 	mroute_clean_tables(mrt, MRT6_FLUSH_MIFS | MRT6_FLUSH_MIFS_STATIC |
mrt               392 net/ipv6/ip6mr.c 	rhltable_destroy(&mrt->mfc_hash);
mrt               393 net/ipv6/ip6mr.c 	kfree(mrt);
mrt               406 net/ipv6/ip6mr.c 	struct mr_table *mrt;
mrt               408 net/ipv6/ip6mr.c 	mrt = ip6mr_get_table(net, RT6_TABLE_DFLT);
mrt               409 net/ipv6/ip6mr.c 	if (!mrt)
mrt               412 net/ipv6/ip6mr.c 	iter->mrt = mrt;
mrt               427 net/ipv6/ip6mr.c 	struct mr_table *mrt = iter->mrt;
mrt               438 net/ipv6/ip6mr.c 			   vif - mrt->vif_table,
mrt               456 net/ipv6/ip6mr.c 	struct mr_table *mrt;
mrt               458 net/ipv6/ip6mr.c 	mrt = ip6mr_get_table(net, RT6_TABLE_DFLT);
mrt               459 net/ipv6/ip6mr.c 	if (!mrt)
mrt               462 net/ipv6/ip6mr.c 	return mr_mfc_seq_start(seq, pos, mrt, &mfc_unres_lock);
mrt               477 net/ipv6/ip6mr.c 		struct mr_table *mrt = it->mrt;
mrt               483 net/ipv6/ip6mr.c 		if (it->cache != &mrt->mfc_unres_queue) {
mrt               490 net/ipv6/ip6mr.c 				if (VIF_EXISTS(mrt, n) &&
mrt               523 net/ipv6/ip6mr.c 	struct mr_table *mrt;
mrt               551 net/ipv6/ip6mr.c 	if (ip6mr_fib_lookup(net, &fl6, &mrt) < 0)
mrt               553 net/ipv6/ip6mr.c 	reg_vif_num = mrt->mroute_reg_vif_num;
mrt               557 net/ipv6/ip6mr.c 		reg_dev = mrt->vif_table[reg_vif_num].dev;
mrt               592 net/ipv6/ip6mr.c 	struct mr_table *mrt;
mrt               602 net/ipv6/ip6mr.c 	if (ip6mr_fib_lookup(net, &fl6, &mrt) < 0)
mrt               608 net/ipv6/ip6mr.c 	ip6mr_cache_report(mrt, skb, mrt->mroute_reg_vif_num, MRT6MSG_WHOLEPKT);
mrt               639 net/ipv6/ip6mr.c static struct net_device *ip6mr_reg_vif(struct net *net, struct mr_table *mrt)
mrt               644 net/ipv6/ip6mr.c 	if (mrt->id == RT6_TABLE_DFLT)
mrt               647 net/ipv6/ip6mr.c 		sprintf(name, "pim6reg%u", mrt->id);
mrt               691 net/ipv6/ip6mr.c static int mif6_delete(struct mr_table *mrt, int vifi, int notify,
mrt               698 net/ipv6/ip6mr.c 	if (vifi < 0 || vifi >= mrt->maxvif)
mrt               701 net/ipv6/ip6mr.c 	v = &mrt->vif_table[vifi];
mrt               703 net/ipv6/ip6mr.c 	if (VIF_EXISTS(mrt, vifi))
mrt               704 net/ipv6/ip6mr.c 		call_ip6mr_vif_entry_notifiers(read_pnet(&mrt->net),
mrt               706 net/ipv6/ip6mr.c 					       mrt->id);
mrt               718 net/ipv6/ip6mr.c 	if (vifi == mrt->mroute_reg_vif_num)
mrt               719 net/ipv6/ip6mr.c 		mrt->mroute_reg_vif_num = -1;
mrt               722 net/ipv6/ip6mr.c 	if (vifi + 1 == mrt->maxvif) {
mrt               725 net/ipv6/ip6mr.c 			if (VIF_EXISTS(mrt, tmp))
mrt               728 net/ipv6/ip6mr.c 		mrt->maxvif = tmp + 1;
mrt               766 net/ipv6/ip6mr.c static void ip6mr_destroy_unres(struct mr_table *mrt, struct mfc6_cache *c)
mrt               768 net/ipv6/ip6mr.c 	struct net *net = read_pnet(&mrt->net);
mrt               771 net/ipv6/ip6mr.c 	atomic_dec(&mrt->cache_resolve_queue_len);
mrt               792 net/ipv6/ip6mr.c static void ipmr_do_expire_process(struct mr_table *mrt)
mrt               798 net/ipv6/ip6mr.c 	list_for_each_entry_safe(c, next, &mrt->mfc_unres_queue, list) {
mrt               808 net/ipv6/ip6mr.c 		mr6_netlink_event(mrt, (struct mfc6_cache *)c, RTM_DELROUTE);
mrt               809 net/ipv6/ip6mr.c 		ip6mr_destroy_unres(mrt, (struct mfc6_cache *)c);
mrt               812 net/ipv6/ip6mr.c 	if (!list_empty(&mrt->mfc_unres_queue))
mrt               813 net/ipv6/ip6mr.c 		mod_timer(&mrt->ipmr_expire_timer, jiffies + expires);
mrt               818 net/ipv6/ip6mr.c 	struct mr_table *mrt = from_timer(mrt, t, ipmr_expire_timer);
mrt               821 net/ipv6/ip6mr.c 		mod_timer(&mrt->ipmr_expire_timer, jiffies + 1);
mrt               825 net/ipv6/ip6mr.c 	if (!list_empty(&mrt->mfc_unres_queue))
mrt               826 net/ipv6/ip6mr.c 		ipmr_do_expire_process(mrt);
mrt               833 net/ipv6/ip6mr.c static void ip6mr_update_thresholds(struct mr_table *mrt,
mrt               843 net/ipv6/ip6mr.c 	for (vifi = 0; vifi < mrt->maxvif; vifi++) {
mrt               844 net/ipv6/ip6mr.c 		if (VIF_EXISTS(mrt, vifi) &&
mrt               856 net/ipv6/ip6mr.c static int mif6_add(struct net *net, struct mr_table *mrt,
mrt               860 net/ipv6/ip6mr.c 	struct vif_device *v = &mrt->vif_table[vifi];
mrt               866 net/ipv6/ip6mr.c 	if (VIF_EXISTS(mrt, vifi))
mrt               876 net/ipv6/ip6mr.c 		if (mrt->mroute_reg_vif_num >= 0)
mrt               878 net/ipv6/ip6mr.c 		dev = ip6mr_reg_vif(net, mrt);
mrt               921 net/ipv6/ip6mr.c 		mrt->mroute_reg_vif_num = vifi;
mrt               923 net/ipv6/ip6mr.c 	if (vifi + 1 > mrt->maxvif)
mrt               924 net/ipv6/ip6mr.c 		mrt->maxvif = vifi + 1;
mrt               927 net/ipv6/ip6mr.c 				       v, vifi, mrt->id);
mrt               931 net/ipv6/ip6mr.c static struct mfc6_cache *ip6mr_cache_find(struct mr_table *mrt,
mrt               940 net/ipv6/ip6mr.c 	return mr_mfc_find(mrt, &arg);
mrt               944 net/ipv6/ip6mr.c static struct mfc6_cache *ip6mr_cache_find_any(struct mr_table *mrt,
mrt               954 net/ipv6/ip6mr.c 		return mr_mfc_find_any_parent(mrt, mifi);
mrt               955 net/ipv6/ip6mr.c 	return mr_mfc_find_any(mrt, mifi, &arg);
mrt               960 net/ipv6/ip6mr.c ip6mr_cache_find_parent(struct mr_table *mrt,
mrt               970 net/ipv6/ip6mr.c 	return mr_mfc_find_parent(mrt, &arg, parent);
mrt              1000 net/ipv6/ip6mr.c static void ip6mr_cache_resolve(struct net *net, struct mr_table *mrt,
mrt              1014 net/ipv6/ip6mr.c 			if (mr_fill_mroute(mrt, skb, &c->_c,
mrt              1025 net/ipv6/ip6mr.c 			ip6_mr_forward(net, mrt, skb->dev, skb, c);
mrt              1035 net/ipv6/ip6mr.c static int ip6mr_cache_report(struct mr_table *mrt, struct sk_buff *pkt,
mrt              1073 net/ipv6/ip6mr.c 		msg->im6_mif = mrt->mroute_reg_vif_num;
mrt              1109 net/ipv6/ip6mr.c 	mroute6_sk = rcu_dereference(mrt->mroute_sk);
mrt              1116 net/ipv6/ip6mr.c 	mrt6msg_netlink_event(mrt, skb);
mrt              1130 net/ipv6/ip6mr.c static int ip6mr_cache_unresolved(struct mr_table *mrt, mifi_t mifi,
mrt              1138 net/ipv6/ip6mr.c 	list_for_each_entry(c, &mrt->mfc_unres_queue, _c.list) {
mrt              1167 net/ipv6/ip6mr.c 		err = ip6mr_cache_report(mrt, skb, mifi, MRT6MSG_NOCACHE);
mrt              1179 net/ipv6/ip6mr.c 		atomic_inc(&mrt->cache_resolve_queue_len);
mrt              1180 net/ipv6/ip6mr.c 		list_add(&c->_c.list, &mrt->mfc_unres_queue);
mrt              1181 net/ipv6/ip6mr.c 		mr6_netlink_event(mrt, c, RTM_NEWROUTE);
mrt              1183 net/ipv6/ip6mr.c 		ipmr_do_expire_process(mrt);
mrt              1207 net/ipv6/ip6mr.c static int ip6mr_mfc_delete(struct mr_table *mrt, struct mf6cctl *mfc,
mrt              1214 net/ipv6/ip6mr.c 	c = ip6mr_cache_find_parent(mrt, &mfc->mf6cc_origin.sin6_addr,
mrt              1219 net/ipv6/ip6mr.c 	rhltable_remove(&mrt->mfc_hash, &c->_c.mnode, ip6mr_rht_params);
mrt              1222 net/ipv6/ip6mr.c 	call_ip6mr_mfc_entry_notifiers(read_pnet(&mrt->net),
mrt              1223 net/ipv6/ip6mr.c 				       FIB_EVENT_ENTRY_DEL, c, mrt->id);
mrt              1224 net/ipv6/ip6mr.c 	mr6_netlink_event(mrt, c, RTM_DELROUTE);
mrt              1234 net/ipv6/ip6mr.c 	struct mr_table *mrt;
mrt              1241 net/ipv6/ip6mr.c 	ip6mr_for_each_table(mrt, net) {
mrt              1242 net/ipv6/ip6mr.c 		v = &mrt->vif_table[0];
mrt              1243 net/ipv6/ip6mr.c 		for (ct = 0; ct < mrt->maxvif; ct++, v++) {
mrt              1245 net/ipv6/ip6mr.c 				mif6_delete(mrt, ct, 1, NULL);
mrt              1401 net/ipv6/ip6mr.c static int ip6mr_mfc_add(struct net *net, struct mr_table *mrt,
mrt              1421 net/ipv6/ip6mr.c 	c = ip6mr_cache_find_parent(mrt, &mfc->mf6cc_origin.sin6_addr,
mrt              1427 net/ipv6/ip6mr.c 		ip6mr_update_thresholds(mrt, &c->_c, ttls);
mrt              1432 net/ipv6/ip6mr.c 					       c, mrt->id);
mrt              1433 net/ipv6/ip6mr.c 		mr6_netlink_event(mrt, c, RTM_NEWROUTE);
mrt              1448 net/ipv6/ip6mr.c 	ip6mr_update_thresholds(mrt, &c->_c, ttls);
mrt              1452 net/ipv6/ip6mr.c 	err = rhltable_insert_key(&mrt->mfc_hash, &c->cmparg, &c->_c.mnode,
mrt              1459 net/ipv6/ip6mr.c 	list_add_tail_rcu(&c->_c.list, &mrt->mfc_cache_list);
mrt              1466 net/ipv6/ip6mr.c 	list_for_each_entry(_uc, &mrt->mfc_unres_queue, list) {
mrt              1471 net/ipv6/ip6mr.c 			atomic_dec(&mrt->cache_resolve_queue_len);
mrt              1476 net/ipv6/ip6mr.c 	if (list_empty(&mrt->mfc_unres_queue))
mrt              1477 net/ipv6/ip6mr.c 		del_timer(&mrt->ipmr_expire_timer);
mrt              1481 net/ipv6/ip6mr.c 		ip6mr_cache_resolve(net, mrt, uc, c);
mrt              1485 net/ipv6/ip6mr.c 				       c, mrt->id);
mrt              1486 net/ipv6/ip6mr.c 	mr6_netlink_event(mrt, c, RTM_NEWROUTE);
mrt              1494 net/ipv6/ip6mr.c static void mroute_clean_tables(struct mr_table *mrt, int flags)
mrt              1502 net/ipv6/ip6mr.c 		for (i = 0; i < mrt->maxvif; i++) {
mrt              1503 net/ipv6/ip6mr.c 			if (((mrt->vif_table[i].flags & VIFF_STATIC) &&
mrt              1505 net/ipv6/ip6mr.c 			    (!(mrt->vif_table[i].flags & VIFF_STATIC) && !(flags & MRT6_FLUSH_MIFS)))
mrt              1507 net/ipv6/ip6mr.c 			mif6_delete(mrt, i, 0, &list);
mrt              1514 net/ipv6/ip6mr.c 		list_for_each_entry_safe(c, tmp, &mrt->mfc_cache_list, list) {
mrt              1518 net/ipv6/ip6mr.c 			rhltable_remove(&mrt->mfc_hash, &c->mnode, ip6mr_rht_params);
mrt              1520 net/ipv6/ip6mr.c 			call_ip6mr_mfc_entry_notifiers(read_pnet(&mrt->net),
mrt              1522 net/ipv6/ip6mr.c 						       (struct mfc6_cache *)c, mrt->id);
mrt              1523 net/ipv6/ip6mr.c 			mr6_netlink_event(mrt, (struct mfc6_cache *)c, RTM_DELROUTE);
mrt              1529 net/ipv6/ip6mr.c 		if (atomic_read(&mrt->cache_resolve_queue_len) != 0) {
mrt              1531 net/ipv6/ip6mr.c 			list_for_each_entry_safe(c, tmp, &mrt->mfc_unres_queue, list) {
mrt              1533 net/ipv6/ip6mr.c 				mr6_netlink_event(mrt, (struct mfc6_cache *)c,
mrt              1535 net/ipv6/ip6mr.c 				ip6mr_destroy_unres(mrt, (struct mfc6_cache *)c);
mrt              1542 net/ipv6/ip6mr.c static int ip6mr_sk_init(struct mr_table *mrt, struct sock *sk)
mrt              1549 net/ipv6/ip6mr.c 	if (rtnl_dereference(mrt->mroute_sk)) {
mrt              1552 net/ipv6/ip6mr.c 		rcu_assign_pointer(mrt->mroute_sk, sk);
mrt              1572 net/ipv6/ip6mr.c 	struct mr_table *mrt;
mrt              1579 net/ipv6/ip6mr.c 	ip6mr_for_each_table(mrt, net) {
mrt              1580 net/ipv6/ip6mr.c 		if (sk == rtnl_dereference(mrt->mroute_sk)) {
mrt              1582 net/ipv6/ip6mr.c 			RCU_INIT_POINTER(mrt->mroute_sk, NULL);
mrt              1594 net/ipv6/ip6mr.c 			mroute_clean_tables(mrt, MRT6_FLUSH_MIFS | MRT6_FLUSH_MFC);
mrt              1606 net/ipv6/ip6mr.c 	struct mr_table *mrt;
mrt              1613 net/ipv6/ip6mr.c 	if (ip6mr_fib_lookup(net, &fl6, &mrt) < 0)
mrt              1616 net/ipv6/ip6mr.c 	return rcu_access_pointer(mrt->mroute_sk);
mrt              1634 net/ipv6/ip6mr.c 	struct mr_table *mrt;
mrt              1640 net/ipv6/ip6mr.c 	mrt = ip6mr_get_table(net, raw6_sk(sk)->ip6mr_table ? : RT6_TABLE_DFLT);
mrt              1641 net/ipv6/ip6mr.c 	if (!mrt)
mrt              1645 net/ipv6/ip6mr.c 		if (sk != rcu_access_pointer(mrt->mroute_sk) &&
mrt              1655 net/ipv6/ip6mr.c 		return ip6mr_sk_init(mrt, sk);
mrt              1668 net/ipv6/ip6mr.c 		ret = mif6_add(net, mrt, &vif,
mrt              1669 net/ipv6/ip6mr.c 			       sk == rtnl_dereference(mrt->mroute_sk));
mrt              1679 net/ipv6/ip6mr.c 		ret = mif6_delete(mrt, mifi, 0, NULL);
mrt              1701 net/ipv6/ip6mr.c 			ret = ip6mr_mfc_delete(mrt, &mfc, parent);
mrt              1703 net/ipv6/ip6mr.c 			ret = ip6mr_mfc_add(net, mrt, &mfc,
mrt              1705 net/ipv6/ip6mr.c 					    rtnl_dereference(mrt->mroute_sk),
mrt              1719 net/ipv6/ip6mr.c 		mroute_clean_tables(mrt, flags);
mrt              1735 net/ipv6/ip6mr.c 		mrt->mroute_do_assert = v;
mrt              1751 net/ipv6/ip6mr.c 		if (v != mrt->mroute_do_pim) {
mrt              1752 net/ipv6/ip6mr.c 			mrt->mroute_do_pim = v;
mrt              1753 net/ipv6/ip6mr.c 			mrt->mroute_do_assert = v;
mrt              1772 net/ipv6/ip6mr.c 		if (sk == rcu_access_pointer(mrt->mroute_sk))
mrt              1777 net/ipv6/ip6mr.c 		mrt = ip6mr_new_table(net, v);
mrt              1778 net/ipv6/ip6mr.c 		if (IS_ERR(mrt))
mrt              1779 net/ipv6/ip6mr.c 			ret = PTR_ERR(mrt);
mrt              1805 net/ipv6/ip6mr.c 	struct mr_table *mrt;
mrt              1811 net/ipv6/ip6mr.c 	mrt = ip6mr_get_table(net, raw6_sk(sk)->ip6mr_table ? : RT6_TABLE_DFLT);
mrt              1812 net/ipv6/ip6mr.c 	if (!mrt)
mrt              1821 net/ipv6/ip6mr.c 		val = mrt->mroute_do_pim;
mrt              1825 net/ipv6/ip6mr.c 		val = mrt->mroute_do_assert;
mrt              1856 net/ipv6/ip6mr.c 	struct mr_table *mrt;
mrt              1858 net/ipv6/ip6mr.c 	mrt = ip6mr_get_table(net, raw6_sk(sk)->ip6mr_table ? : RT6_TABLE_DFLT);
mrt              1859 net/ipv6/ip6mr.c 	if (!mrt)
mrt              1866 net/ipv6/ip6mr.c 		if (vr.mifi >= mrt->maxvif)
mrt              1868 net/ipv6/ip6mr.c 		vr.mifi = array_index_nospec(vr.mifi, mrt->maxvif);
mrt              1870 net/ipv6/ip6mr.c 		vif = &mrt->vif_table[vr.mifi];
mrt              1871 net/ipv6/ip6mr.c 		if (VIF_EXISTS(mrt, vr.mifi)) {
mrt              1889 net/ipv6/ip6mr.c 		c = ip6mr_cache_find(mrt, &sr.src.sin6_addr, &sr.grp.sin6_addr);
mrt              1931 net/ipv6/ip6mr.c 	struct mr_table *mrt;
mrt              1933 net/ipv6/ip6mr.c 	mrt = ip6mr_get_table(net, raw6_sk(sk)->ip6mr_table ? : RT6_TABLE_DFLT);
mrt              1934 net/ipv6/ip6mr.c 	if (!mrt)
mrt              1941 net/ipv6/ip6mr.c 		if (vr.mifi >= mrt->maxvif)
mrt              1943 net/ipv6/ip6mr.c 		vr.mifi = array_index_nospec(vr.mifi, mrt->maxvif);
mrt              1945 net/ipv6/ip6mr.c 		vif = &mrt->vif_table[vr.mifi];
mrt              1946 net/ipv6/ip6mr.c 		if (VIF_EXISTS(mrt, vr.mifi)) {
mrt              1964 net/ipv6/ip6mr.c 		c = ip6mr_cache_find(mrt, &sr.src.sin6_addr, &sr.grp.sin6_addr);
mrt              1996 net/ipv6/ip6mr.c static int ip6mr_forward2(struct net *net, struct mr_table *mrt,
mrt              2000 net/ipv6/ip6mr.c 	struct vif_device *vif = &mrt->vif_table[vifi];
mrt              2014 net/ipv6/ip6mr.c 		ip6mr_cache_report(mrt, skb, vifi, MRT6MSG_WHOLEPKT);
mrt              2070 net/ipv6/ip6mr.c static int ip6mr_find_vif(struct mr_table *mrt, struct net_device *dev)
mrt              2074 net/ipv6/ip6mr.c 	for (ct = mrt->maxvif - 1; ct >= 0; ct--) {
mrt              2075 net/ipv6/ip6mr.c 		if (mrt->vif_table[ct].dev == dev)
mrt              2081 net/ipv6/ip6mr.c static void ip6_mr_forward(struct net *net, struct mr_table *mrt,
mrt              2087 net/ipv6/ip6mr.c 	int true_vifi = ip6mr_find_vif(mrt, dev);
mrt              2101 net/ipv6/ip6mr.c 		cache_proxy = mr_mfc_find_any_parent(mrt, vif);
mrt              2113 net/ipv6/ip6mr.c 	if (mrt->vif_table[vif].dev != dev) {
mrt              2116 net/ipv6/ip6mr.c 		if (true_vifi >= 0 && mrt->mroute_do_assert &&
mrt              2122 net/ipv6/ip6mr.c 		    (mrt->mroute_do_pim ||
mrt              2128 net/ipv6/ip6mr.c 			ip6mr_cache_report(mrt, skb, true_vifi, MRT6MSG_WRONGMIF);
mrt              2134 net/ipv6/ip6mr.c 	mrt->vif_table[vif].pkt_in++;
mrt              2135 net/ipv6/ip6mr.c 	mrt->vif_table[vif].bytes_in += skb->len;
mrt              2163 net/ipv6/ip6mr.c 					ip6mr_forward2(net, mrt, skb2, psend);
mrt              2170 net/ipv6/ip6mr.c 		ip6mr_forward2(net, mrt, skb, psend);
mrt              2187 net/ipv6/ip6mr.c 	struct mr_table *mrt;
mrt              2207 net/ipv6/ip6mr.c 	err = ip6mr_fib_lookup(net, &fl6, &mrt);
mrt              2214 net/ipv6/ip6mr.c 	cache = ip6mr_cache_find(mrt,
mrt              2217 net/ipv6/ip6mr.c 		int vif = ip6mr_find_vif(mrt, dev);
mrt              2220 net/ipv6/ip6mr.c 			cache = ip6mr_cache_find_any(mrt,
mrt              2231 net/ipv6/ip6mr.c 		vif = ip6mr_find_vif(mrt, dev);
mrt              2233 net/ipv6/ip6mr.c 			int err = ip6mr_cache_unresolved(mrt, vif, skb, dev);
mrt              2243 net/ipv6/ip6mr.c 	ip6_mr_forward(net, mrt, dev, skb, cache);
mrt              2254 net/ipv6/ip6mr.c 	struct mr_table *mrt;
mrt              2258 net/ipv6/ip6mr.c 	mrt = ip6mr_get_table(net, RT6_TABLE_DFLT);
mrt              2259 net/ipv6/ip6mr.c 	if (!mrt)
mrt              2263 net/ipv6/ip6mr.c 	cache = ip6mr_cache_find(mrt, &rt->rt6i_src.addr, &rt->rt6i_dst.addr);
mrt              2265 net/ipv6/ip6mr.c 		int vif = ip6mr_find_vif(mrt, skb->dev);
mrt              2268 net/ipv6/ip6mr.c 			cache = ip6mr_cache_find_any(mrt, &rt->rt6i_dst.addr,
mrt              2279 net/ipv6/ip6mr.c 		if (!dev || (vif = ip6mr_find_vif(mrt, dev)) < 0) {
mrt              2309 net/ipv6/ip6mr.c 		err = ip6mr_cache_unresolved(mrt, vif, skb2, dev);
mrt              2315 net/ipv6/ip6mr.c 	err = mr_fill_mroute(mrt, skb, &cache->_c, rtm);
mrt              2320 net/ipv6/ip6mr.c static int ip6mr_fill_mroute(struct mr_table *mrt, struct sk_buff *skb,
mrt              2337 net/ipv6/ip6mr.c 	rtm->rtm_table    = mrt->id;
mrt              2338 net/ipv6/ip6mr.c 	if (nla_put_u32(skb, RTA_TABLE, mrt->id))
mrt              2351 net/ipv6/ip6mr.c 	err = mr_fill_mroute(mrt, skb, &c->_c, rtm);
mrt              2364 net/ipv6/ip6mr.c static int _ip6mr_fill_mroute(struct mr_table *mrt, struct sk_buff *skb,
mrt              2368 net/ipv6/ip6mr.c 	return ip6mr_fill_mroute(mrt, skb, portid, seq, (struct mfc6_cache *)c,
mrt              2393 net/ipv6/ip6mr.c static void mr6_netlink_event(struct mr_table *mrt, struct mfc6_cache *mfc,
mrt              2396 net/ipv6/ip6mr.c 	struct net *net = read_pnet(&mrt->net);
mrt              2400 net/ipv6/ip6mr.c 	skb = nlmsg_new(mr6_msgsize(mfc->_c.mfc_parent >= MAXMIFS, mrt->maxvif),
mrt              2405 net/ipv6/ip6mr.c 	err = ip6mr_fill_mroute(mrt, skb, 0, 0, mfc, cmd, 0);
mrt              2435 net/ipv6/ip6mr.c static void mrt6msg_netlink_event(struct mr_table *mrt, struct sk_buff *pkt)
mrt              2437 net/ipv6/ip6mr.c 	struct net *net = read_pnet(&mrt->net);
mrt              2497 net/ipv6/ip6mr.c 		struct mr_table *mrt;
mrt              2499 net/ipv6/ip6mr.c 		mrt = ip6mr_get_table(sock_net(skb->sk), filter.table_id);
mrt              2500 net/ipv6/ip6mr.c 		if (!mrt) {
mrt              2507 net/ipv6/ip6mr.c 		err = mr_table_dump(mrt, skb, cb, _ip6mr_fill_mroute,