Lines Matching refs:t
83 static noinline void tunnel_dst_set(struct ip_tunnel *t, in tunnel_dst_set() argument
86 __tunnel_dst_set(raw_cpu_ptr(t->dst_cache), dst, saddr); in tunnel_dst_set()
89 static void tunnel_dst_reset(struct ip_tunnel *t) in tunnel_dst_reset() argument
91 tunnel_dst_set(t, NULL, 0); in tunnel_dst_reset()
94 void ip_tunnel_dst_reset_all(struct ip_tunnel *t) in ip_tunnel_dst_reset_all() argument
99 __tunnel_dst_set(per_cpu_ptr(t->dst_cache, i), NULL, 0); in ip_tunnel_dst_reset_all()
103 static struct rtable *tunnel_rtable_get(struct ip_tunnel *t, in tunnel_rtable_get() argument
110 idst = raw_cpu_ptr(t->dst_cache); in tunnel_rtable_get()
118 tunnel_dst_reset(t); in tunnel_rtable_get()
157 struct ip_tunnel *t, *cand = NULL; in ip_tunnel_lookup() local
163 hlist_for_each_entry_rcu(t, head, hash_node) { in ip_tunnel_lookup()
164 if (local != t->parms.iph.saddr || in ip_tunnel_lookup()
165 remote != t->parms.iph.daddr || in ip_tunnel_lookup()
166 !(t->dev->flags & IFF_UP)) in ip_tunnel_lookup()
169 if (!ip_tunnel_key_match(&t->parms, flags, key)) in ip_tunnel_lookup()
172 if (t->parms.link == link) in ip_tunnel_lookup()
173 return t; in ip_tunnel_lookup()
175 cand = t; in ip_tunnel_lookup()
178 hlist_for_each_entry_rcu(t, head, hash_node) { in ip_tunnel_lookup()
179 if (remote != t->parms.iph.daddr || in ip_tunnel_lookup()
180 t->parms.iph.saddr != 0 || in ip_tunnel_lookup()
181 !(t->dev->flags & IFF_UP)) in ip_tunnel_lookup()
184 if (!ip_tunnel_key_match(&t->parms, flags, key)) in ip_tunnel_lookup()
187 if (t->parms.link == link) in ip_tunnel_lookup()
188 return t; in ip_tunnel_lookup()
190 cand = t; in ip_tunnel_lookup()
196 hlist_for_each_entry_rcu(t, head, hash_node) { in ip_tunnel_lookup()
197 if ((local != t->parms.iph.saddr || t->parms.iph.daddr != 0) && in ip_tunnel_lookup()
198 (local != t->parms.iph.daddr || !ipv4_is_multicast(local))) in ip_tunnel_lookup()
201 if (!(t->dev->flags & IFF_UP)) in ip_tunnel_lookup()
204 if (!ip_tunnel_key_match(&t->parms, flags, key)) in ip_tunnel_lookup()
207 if (t->parms.link == link) in ip_tunnel_lookup()
208 return t; in ip_tunnel_lookup()
210 cand = t; in ip_tunnel_lookup()
216 hlist_for_each_entry_rcu(t, head, hash_node) { in ip_tunnel_lookup()
217 if (t->parms.i_key != key || in ip_tunnel_lookup()
218 t->parms.iph.saddr != 0 || in ip_tunnel_lookup()
219 t->parms.iph.daddr != 0 || in ip_tunnel_lookup()
220 !(t->dev->flags & IFF_UP)) in ip_tunnel_lookup()
223 if (t->parms.link == link) in ip_tunnel_lookup()
224 return t; in ip_tunnel_lookup()
226 cand = t; in ip_tunnel_lookup()
260 static void ip_tunnel_add(struct ip_tunnel_net *itn, struct ip_tunnel *t) in ip_tunnel_add() argument
262 struct hlist_head *head = ip_bucket(itn, &t->parms); in ip_tunnel_add()
264 hlist_add_head_rcu(&t->hash_node, head); in ip_tunnel_add()
267 static void ip_tunnel_del(struct ip_tunnel *t) in ip_tunnel_del() argument
269 hlist_del_init_rcu(&t->hash_node); in ip_tunnel_del()
281 struct ip_tunnel *t = NULL; in ip_tunnel_find() local
284 hlist_for_each_entry_rcu(t, head, hash_node) { in ip_tunnel_find()
285 if (local == t->parms.iph.saddr && in ip_tunnel_find()
286 remote == t->parms.iph.daddr && in ip_tunnel_find()
287 link == t->parms.link && in ip_tunnel_find()
288 type == t->dev->type && in ip_tunnel_find()
289 ip_tunnel_key_match(&t->parms, flags, key)) in ip_tunnel_find()
292 return t; in ip_tunnel_find()
543 int ip_tunnel_encap_setup(struct ip_tunnel *t, in ip_tunnel_encap_setup() argument
548 memset(&t->encap, 0, sizeof(t->encap)); in ip_tunnel_encap_setup()
554 t->encap.type = ipencap->type; in ip_tunnel_encap_setup()
555 t->encap.sport = ipencap->sport; in ip_tunnel_encap_setup()
556 t->encap.dport = ipencap->dport; in ip_tunnel_encap_setup()
557 t->encap.flags = ipencap->flags; in ip_tunnel_encap_setup()
559 t->encap_hlen = hlen; in ip_tunnel_encap_setup()
560 t->hlen = t->encap_hlen + t->tun_hlen; in ip_tunnel_encap_setup()
566 int ip_tunnel_encap(struct sk_buff *skb, struct ip_tunnel *t, in ip_tunnel_encap() argument
572 if (t->encap.type == TUNNEL_ENCAP_NONE) in ip_tunnel_encap()
575 if (t->encap.type >= MAX_IPTUN_ENCAP_OPS) in ip_tunnel_encap()
579 ops = rcu_dereference(iptun_encaps[t->encap.type]); in ip_tunnel_encap()
581 ret = ops->build_header(skb, &t->encap, protocol, fl4); in ip_tunnel_encap()
804 struct ip_tunnel *t, in ip_tunnel_update() argument
809 ip_tunnel_del(t); in ip_tunnel_update()
810 t->parms.iph.saddr = p->iph.saddr; in ip_tunnel_update()
811 t->parms.iph.daddr = p->iph.daddr; in ip_tunnel_update()
812 t->parms.i_key = p->i_key; in ip_tunnel_update()
813 t->parms.o_key = p->o_key; in ip_tunnel_update()
818 ip_tunnel_add(itn, t); in ip_tunnel_update()
820 t->parms.iph.ttl = p->iph.ttl; in ip_tunnel_update()
821 t->parms.iph.tos = p->iph.tos; in ip_tunnel_update()
822 t->parms.iph.frag_off = p->iph.frag_off; in ip_tunnel_update()
824 if (t->parms.link != p->link) { in ip_tunnel_update()
827 t->parms.link = p->link; in ip_tunnel_update()
832 ip_tunnel_dst_reset_all(t); in ip_tunnel_update()
839 struct ip_tunnel *t = netdev_priv(dev); in ip_tunnel_ioctl() local
840 struct net *net = t->net; in ip_tunnel_ioctl()
841 struct ip_tunnel_net *itn = net_generic(net, t->ip_tnl_net_id); in ip_tunnel_ioctl()
847 t = ip_tunnel_find(itn, p, itn->fb_tunnel_dev->type); in ip_tunnel_ioctl()
848 if (!t) in ip_tunnel_ioctl()
849 t = netdev_priv(dev); in ip_tunnel_ioctl()
851 memcpy(p, &t->parms, sizeof(*p)); in ip_tunnel_ioctl()
868 t = ip_tunnel_find(itn, p, itn->fb_tunnel_dev->type); in ip_tunnel_ioctl()
871 if (!t) { in ip_tunnel_ioctl()
872 t = ip_tunnel_create(net, itn, p); in ip_tunnel_ioctl()
873 err = PTR_ERR_OR_ZERO(t); in ip_tunnel_ioctl()
881 if (t) { in ip_tunnel_ioctl()
882 if (t->dev != dev) { in ip_tunnel_ioctl()
899 t = netdev_priv(dev); in ip_tunnel_ioctl()
903 if (t) { in ip_tunnel_ioctl()
905 ip_tunnel_update(itn, t, dev, p, true); in ip_tunnel_ioctl()
918 t = ip_tunnel_find(itn, p, itn->fb_tunnel_dev->type); in ip_tunnel_ioctl()
919 if (!t) in ip_tunnel_ioctl()
922 if (t == netdev_priv(itn->fb_tunnel_dev)) in ip_tunnel_ioctl()
924 dev = t->dev; in ip_tunnel_ioctl()
1039 struct ip_tunnel *t; in ip_tunnel_destroy() local
1043 hlist_for_each_entry_safe(t, n, thead, hash_node) in ip_tunnel_destroy()
1047 if (!net_eq(dev_net(t->dev), net)) in ip_tunnel_destroy()
1048 unregister_netdevice_queue(t->dev, head); in ip_tunnel_destroy()
1101 struct ip_tunnel *t; in ip_tunnel_changelink() local
1109 t = ip_tunnel_find(itn, p, dev->type); in ip_tunnel_changelink()
1111 if (t) { in ip_tunnel_changelink()
1112 if (t->dev != dev) in ip_tunnel_changelink()
1115 t = tunnel; in ip_tunnel_changelink()
1131 ip_tunnel_update(itn, t, dev, p, !tb[IFLA_MTU]); in ip_tunnel_changelink()