Lines Matching refs:itn
83 struct ip_tunnel *ip_tunnel_lookup(struct ip_tunnel_net *itn, in ip_tunnel_lookup() argument
93 head = &itn->tunnels[hash]; in ip_tunnel_lookup()
126 head = &itn->tunnels[hash]; in ip_tunnel_lookup()
165 t = rcu_dereference(itn->collect_md_tun); in ip_tunnel_lookup()
169 if (itn->fb_tunnel_dev && itn->fb_tunnel_dev->flags & IFF_UP) in ip_tunnel_lookup()
170 return netdev_priv(itn->fb_tunnel_dev); in ip_tunnel_lookup()
176 static struct hlist_head *ip_bucket(struct ip_tunnel_net *itn, in ip_bucket() argument
192 return &itn->tunnels[h]; in ip_bucket()
195 static void ip_tunnel_add(struct ip_tunnel_net *itn, struct ip_tunnel *t) in ip_tunnel_add() argument
197 struct hlist_head *head = ip_bucket(itn, &t->parms); in ip_tunnel_add()
200 rcu_assign_pointer(itn->collect_md_tun, t); in ip_tunnel_add()
204 static void ip_tunnel_del(struct ip_tunnel_net *itn, struct ip_tunnel *t) in ip_tunnel_del() argument
207 rcu_assign_pointer(itn->collect_md_tun, NULL); in ip_tunnel_del()
211 static struct ip_tunnel *ip_tunnel_find(struct ip_tunnel_net *itn, in ip_tunnel_find() argument
221 struct hlist_head *head = ip_bucket(itn, parms); in ip_tunnel_find()
331 struct ip_tunnel_net *itn, in ip_tunnel_create() argument
340 dev = __ip_tunnel_create(net, itn->rtnl_link_ops, parms); in ip_tunnel_create()
353 ip_tunnel_add(itn, nt); in ip_tunnel_create()
832 static void ip_tunnel_update(struct ip_tunnel_net *itn, in ip_tunnel_update() argument
839 ip_tunnel_del(itn, t); in ip_tunnel_update()
848 ip_tunnel_add(itn, t); in ip_tunnel_update()
872 struct ip_tunnel_net *itn = net_generic(net, t->ip_tnl_net_id); in ip_tunnel_ioctl() local
876 if (dev == itn->fb_tunnel_dev) { in ip_tunnel_ioctl()
877 t = ip_tunnel_find(itn, p, itn->fb_tunnel_dev->type); in ip_tunnel_ioctl()
898 t = ip_tunnel_find(itn, p, itn->type); in ip_tunnel_ioctl()
902 t = ip_tunnel_create(net, itn, p); in ip_tunnel_ioctl()
910 if (dev != itn->fb_tunnel_dev && cmd == SIOCCHGTUNNEL) { in ip_tunnel_ioctl()
935 ip_tunnel_update(itn, t, dev, p, true, 0); in ip_tunnel_ioctl()
946 if (dev == itn->fb_tunnel_dev) { in ip_tunnel_ioctl()
948 t = ip_tunnel_find(itn, p, itn->fb_tunnel_dev->type); in ip_tunnel_ioctl()
952 if (t == netdev_priv(itn->fb_tunnel_dev)) in ip_tunnel_ioctl()
1008 struct ip_tunnel_net *itn; in ip_tunnel_dellink() local
1010 itn = net_generic(tunnel->net, tunnel->ip_tnl_net_id); in ip_tunnel_dellink()
1012 if (itn->fb_tunnel_dev != dev) { in ip_tunnel_dellink()
1013 ip_tunnel_del(itn, netdev_priv(dev)); in ip_tunnel_dellink()
1038 struct ip_tunnel_net *itn = net_generic(net, ip_tnl_net_id); in ip_tunnel_init_net() local
1042 itn->rtnl_link_ops = ops; in ip_tunnel_init_net()
1044 INIT_HLIST_HEAD(&itn->tunnels[i]); in ip_tunnel_init_net()
1050 itn->type = it_init_net->type; in ip_tunnel_init_net()
1051 itn->fb_tunnel_dev = NULL; in ip_tunnel_init_net()
1060 itn->fb_tunnel_dev = __ip_tunnel_create(net, ops, &parms); in ip_tunnel_init_net()
1064 if (!IS_ERR(itn->fb_tunnel_dev)) { in ip_tunnel_init_net()
1065 itn->fb_tunnel_dev->features |= NETIF_F_NETNS_LOCAL; in ip_tunnel_init_net()
1066 itn->fb_tunnel_dev->mtu = ip_tunnel_bind_dev(itn->fb_tunnel_dev); in ip_tunnel_init_net()
1067 ip_tunnel_add(itn, netdev_priv(itn->fb_tunnel_dev)); in ip_tunnel_init_net()
1068 itn->type = itn->fb_tunnel_dev->type; in ip_tunnel_init_net()
1072 return PTR_ERR_OR_ZERO(itn->fb_tunnel_dev); in ip_tunnel_init_net()
1076 static void ip_tunnel_destroy(struct net *net, struct ip_tunnel_net *itn, in ip_tunnel_destroy() argument
1090 struct hlist_head *thead = &itn->tunnels[h]; in ip_tunnel_destroy()
1104 struct ip_tunnel_net *itn; in ip_tunnel_delete_nets() local
1110 itn = net_generic(net, id); in ip_tunnel_delete_nets()
1111 ip_tunnel_destroy(net, itn, &list, ops); in ip_tunnel_delete_nets()
1123 struct ip_tunnel_net *itn; in ip_tunnel_newlink() local
1128 itn = net_generic(net, nt->ip_tnl_net_id); in ip_tunnel_newlink()
1131 if (rtnl_dereference(itn->collect_md_tun)) in ip_tunnel_newlink()
1134 if (ip_tunnel_find(itn, p, dev->type)) in ip_tunnel_newlink()
1160 ip_tunnel_add(itn, nt); in ip_tunnel_newlink()
1176 struct ip_tunnel_net *itn = net_generic(net, tunnel->ip_tnl_net_id); in ip_tunnel_changelink() local
1178 if (dev == itn->fb_tunnel_dev) in ip_tunnel_changelink()
1181 t = ip_tunnel_find(itn, p, dev->type); in ip_tunnel_changelink()
1203 ip_tunnel_update(itn, t, dev, p, !tb[IFLA_MTU], fwmark); in ip_tunnel_changelink()
1251 struct ip_tunnel_net *itn; in ip_tunnel_uninit() local
1253 itn = net_generic(net, tunnel->ip_tnl_net_id); in ip_tunnel_uninit()
1255 if (itn->fb_tunnel_dev != dev) in ip_tunnel_uninit()
1256 ip_tunnel_del(itn, netdev_priv(dev)); in ip_tunnel_uninit()