Lines Matching refs:t
86 struct ip_tunnel *t, *cand = NULL; in ip_tunnel_lookup() local
94 hlist_for_each_entry_rcu(t, head, hash_node) { in ip_tunnel_lookup()
95 if (local != t->parms.iph.saddr || in ip_tunnel_lookup()
96 remote != t->parms.iph.daddr || in ip_tunnel_lookup()
97 !(t->dev->flags & IFF_UP)) in ip_tunnel_lookup()
100 if (!ip_tunnel_key_match(&t->parms, flags, key)) in ip_tunnel_lookup()
103 if (READ_ONCE(t->parms.link) == link) in ip_tunnel_lookup()
104 return t; in ip_tunnel_lookup()
105 cand = t; in ip_tunnel_lookup()
108 hlist_for_each_entry_rcu(t, head, hash_node) { in ip_tunnel_lookup()
109 if (remote != t->parms.iph.daddr || in ip_tunnel_lookup()
110 t->parms.iph.saddr != 0 || in ip_tunnel_lookup()
111 !(t->dev->flags & IFF_UP)) in ip_tunnel_lookup()
114 if (!ip_tunnel_key_match(&t->parms, flags, key)) in ip_tunnel_lookup()
117 if (READ_ONCE(t->parms.link) == link) in ip_tunnel_lookup()
118 return t; in ip_tunnel_lookup()
120 cand = t; in ip_tunnel_lookup()
126 hlist_for_each_entry_rcu(t, head, hash_node) { in ip_tunnel_lookup()
127 if ((local != t->parms.iph.saddr || t->parms.iph.daddr != 0) && in ip_tunnel_lookup()
128 (local != t->parms.iph.daddr || !ipv4_is_multicast(local))) in ip_tunnel_lookup()
131 if (!(t->dev->flags & IFF_UP)) in ip_tunnel_lookup()
134 if (!ip_tunnel_key_match(&t->parms, flags, key)) in ip_tunnel_lookup()
137 if (READ_ONCE(t->parms.link) == link) in ip_tunnel_lookup()
138 return t; in ip_tunnel_lookup()
140 cand = t; in ip_tunnel_lookup()
143 hlist_for_each_entry_rcu(t, head, hash_node) { in ip_tunnel_lookup()
145 t->parms.i_key != key) || in ip_tunnel_lookup()
146 t->parms.iph.saddr != 0 || in ip_tunnel_lookup()
147 t->parms.iph.daddr != 0 || in ip_tunnel_lookup()
148 !(t->dev->flags & IFF_UP)) in ip_tunnel_lookup()
151 if (READ_ONCE(t->parms.link) == link) in ip_tunnel_lookup()
152 return t; in ip_tunnel_lookup()
154 cand = t; in ip_tunnel_lookup()
160 t = rcu_dereference(itn->collect_md_tun); in ip_tunnel_lookup()
161 if (t && t->dev->flags & IFF_UP) in ip_tunnel_lookup()
162 return t; in ip_tunnel_lookup()
192 static void ip_tunnel_add(struct ip_tunnel_net *itn, struct ip_tunnel *t) in ip_tunnel_add() argument
194 struct hlist_head *head = ip_bucket(itn, &t->parms); in ip_tunnel_add()
196 if (t->collect_md) in ip_tunnel_add()
197 rcu_assign_pointer(itn->collect_md_tun, t); in ip_tunnel_add()
198 hlist_add_head_rcu(&t->hash_node, head); in ip_tunnel_add()
201 static void ip_tunnel_del(struct ip_tunnel_net *itn, struct ip_tunnel *t) in ip_tunnel_del() argument
203 if (t->collect_md) in ip_tunnel_del()
205 hlist_del_init_rcu(&t->hash_node); in ip_tunnel_del()
217 struct ip_tunnel *t = NULL; in ip_tunnel_find() local
222 hlist_for_each_entry_rcu(t, head, hash_node, lockdep_rtnl_is_held()) { in ip_tunnel_find()
223 if (local == t->parms.iph.saddr && in ip_tunnel_find()
224 remote == t->parms.iph.daddr && in ip_tunnel_find()
225 link == READ_ONCE(t->parms.link) && in ip_tunnel_find()
226 type == t->dev->type && in ip_tunnel_find()
227 ip_tunnel_key_match(&t->parms, flags, key)) in ip_tunnel_find()
230 return t; in ip_tunnel_find()
489 int ip_tunnel_encap_setup(struct ip_tunnel *t, in ip_tunnel_encap_setup() argument
494 memset(&t->encap, 0, sizeof(t->encap)); in ip_tunnel_encap_setup()
500 t->encap.type = ipencap->type; in ip_tunnel_encap_setup()
501 t->encap.sport = ipencap->sport; in ip_tunnel_encap_setup()
502 t->encap.dport = ipencap->dport; in ip_tunnel_encap_setup()
503 t->encap.flags = ipencap->flags; in ip_tunnel_encap_setup()
505 t->encap_hlen = hlen; in ip_tunnel_encap_setup()
506 t->hlen = t->encap_hlen + t->tun_hlen; in ip_tunnel_encap_setup()
874 struct ip_tunnel *t, in ip_tunnel_update() argument
880 ip_tunnel_del(itn, t); in ip_tunnel_update()
881 t->parms.iph.saddr = p->iph.saddr; in ip_tunnel_update()
882 t->parms.iph.daddr = p->iph.daddr; in ip_tunnel_update()
883 t->parms.i_key = p->i_key; in ip_tunnel_update()
884 t->parms.o_key = p->o_key; in ip_tunnel_update()
889 ip_tunnel_add(itn, t); in ip_tunnel_update()
891 t->parms.iph.ttl = p->iph.ttl; in ip_tunnel_update()
892 t->parms.iph.tos = p->iph.tos; in ip_tunnel_update()
893 t->parms.iph.frag_off = p->iph.frag_off; in ip_tunnel_update()
895 if (t->parms.link != p->link || t->fwmark != fwmark) { in ip_tunnel_update()
898 WRITE_ONCE(t->parms.link, p->link); in ip_tunnel_update()
899 t->fwmark = fwmark; in ip_tunnel_update()
904 dst_cache_reset(&t->dst_cache); in ip_tunnel_update()
912 struct ip_tunnel *t = netdev_priv(dev); in ip_tunnel_ctl() local
913 struct net *net = t->net; in ip_tunnel_ctl()
914 struct ip_tunnel_net *itn = net_generic(net, t->ip_tnl_net_id); in ip_tunnel_ctl()
919 t = ip_tunnel_find(itn, p, itn->fb_tunnel_dev->type); in ip_tunnel_ctl()
920 if (!t) in ip_tunnel_ctl()
921 t = netdev_priv(dev); in ip_tunnel_ctl()
923 memcpy(p, &t->parms, sizeof(*p)); in ip_tunnel_ctl()
940 t = ip_tunnel_find(itn, p, itn->type); in ip_tunnel_ctl()
943 if (!t) { in ip_tunnel_ctl()
944 t = ip_tunnel_create(net, itn, p); in ip_tunnel_ctl()
945 err = PTR_ERR_OR_ZERO(t); in ip_tunnel_ctl()
953 if (t) { in ip_tunnel_ctl()
954 if (t->dev != dev) { in ip_tunnel_ctl()
971 t = netdev_priv(dev); in ip_tunnel_ctl()
975 if (t) { in ip_tunnel_ctl()
977 ip_tunnel_update(itn, t, dev, p, true, 0); in ip_tunnel_ctl()
990 t = ip_tunnel_find(itn, p, itn->fb_tunnel_dev->type); in ip_tunnel_ctl()
991 if (!t) in ip_tunnel_ctl()
994 if (t == netdev_priv(itn->fb_tunnel_dev)) in ip_tunnel_ctl()
996 dev = t->dev; in ip_tunnel_ctl()
1192 struct ip_tunnel *t; in ip_tunnel_delete_net() local
1196 hlist_for_each_entry_safe(t, n, thead, hash_node) in ip_tunnel_delete_net()
1200 if (!net_eq(dev_net(t->dev), net)) in ip_tunnel_delete_net()
1201 unregister_netdevice_queue(t->dev, head); in ip_tunnel_delete_net()
1263 struct ip_tunnel *t; in ip_tunnel_changelink() local
1271 t = ip_tunnel_find(itn, p, dev->type); in ip_tunnel_changelink()
1273 if (t) { in ip_tunnel_changelink()
1274 if (t->dev != dev) in ip_tunnel_changelink()
1277 t = tunnel; in ip_tunnel_changelink()
1293 ip_tunnel_update(itn, t, dev, p, !tb[IFLA_MTU], fwmark); in ip_tunnel_changelink()