Lines Matching refs:t

75 	for (t = rcu_dereference(start); t; t = rcu_dereference(t->next))
93 struct ip6_tnl *t; in vti6_tnl_lookup() local
98 if (ipv6_addr_equal(local, &t->parms.laddr) && in vti6_tnl_lookup()
99 ipv6_addr_equal(remote, &t->parms.raddr) && in vti6_tnl_lookup()
100 (t->dev->flags & IFF_UP)) in vti6_tnl_lookup()
101 return t; in vti6_tnl_lookup()
107 if (ipv6_addr_equal(local, &t->parms.laddr) && in vti6_tnl_lookup()
108 (t->dev->flags & IFF_UP)) in vti6_tnl_lookup()
109 return t; in vti6_tnl_lookup()
114 if (ipv6_addr_equal(remote, &t->parms.raddr) && in vti6_tnl_lookup()
115 (t->dev->flags & IFF_UP)) in vti6_tnl_lookup()
116 return t; in vti6_tnl_lookup()
119 t = rcu_dereference(ip6n->tnls_wc[0]); in vti6_tnl_lookup()
120 if (t && (t->dev->flags & IFF_UP)) in vti6_tnl_lookup()
121 return t; in vti6_tnl_lookup()
153 vti6_tnl_link(struct vti6_net *ip6n, struct ip6_tnl *t) in vti6_tnl_link() argument
155 struct ip6_tnl __rcu **tp = vti6_tnl_bucket(ip6n, &t->parms); in vti6_tnl_link()
157 rcu_assign_pointer(t->next, rtnl_dereference(*tp)); in vti6_tnl_link()
158 rcu_assign_pointer(*tp, t); in vti6_tnl_link()
162 vti6_tnl_unlink(struct vti6_net *ip6n, struct ip6_tnl *t) in vti6_tnl_unlink() argument
167 for (tp = vti6_tnl_bucket(ip6n, &t->parms); in vti6_tnl_unlink()
170 if (t == iter) { in vti6_tnl_unlink()
171 rcu_assign_pointer(*tp, t->next); in vti6_tnl_unlink()
184 struct ip6_tnl *t = netdev_priv(dev); in vti6_tnl_create2() local
194 strcpy(t->parms.name, dev->name); in vti6_tnl_create2()
196 vti6_tnl_link(ip6n, t); in vti6_tnl_create2()
207 struct ip6_tnl *t; in vti6_tnl_create() local
219 dev = alloc_netdev(sizeof(*t), name, NET_NAME_UNKNOWN, vti6_dev_setup); in vti6_tnl_create()
225 t = netdev_priv(dev); in vti6_tnl_create()
226 t->parms = *p; in vti6_tnl_create()
227 t->net = dev_net(dev); in vti6_tnl_create()
233 return t; in vti6_tnl_create()
261 struct ip6_tnl *t; in vti6_locate() local
265 (t = rtnl_dereference(*tp)) != NULL; in vti6_locate()
266 tp = &t->next) { in vti6_locate()
267 if (ipv6_addr_equal(local, &t->parms.laddr) && in vti6_locate()
268 ipv6_addr_equal(remote, &t->parms.raddr)) { in vti6_locate()
272 return t; in vti6_locate()
289 struct ip6_tnl *t = netdev_priv(dev); in vti6_dev_uninit() local
290 struct vti6_net *ip6n = net_generic(t->net, vti6_net_id); in vti6_dev_uninit()
295 vti6_tnl_unlink(ip6n, t); in vti6_dev_uninit()
296 netdev_put(dev, &t->dev_tracker); in vti6_dev_uninit()
302 struct ip6_tnl *t; in vti6_input_proto() local
306 t = vti6_tnl_lookup(dev_net(skb->dev), &ipv6h->saddr, &ipv6h->daddr); in vti6_input_proto()
307 if (t) { in vti6_input_proto()
308 if (t->parms.proto != IPPROTO_IPV6 && t->parms.proto != 0) { in vti6_input_proto()
319 if (!ip6_tnl_rcv_ctl(t, &ipv6h->daddr, &ipv6h->saddr)) { in vti6_input_proto()
320 DEV_STATS_INC(t->dev, rx_dropped); in vti6_input_proto()
327 XFRM_TUNNEL_SKB_CB(skb)->tunnel.ip6 = t; in vti6_input_proto()
352 struct ip6_tnl *t = XFRM_TUNNEL_SKB_CB(skb)->tunnel.ip6; in vti6_rcv_cb() local
356 if (!t) in vti6_rcv_cb()
359 dev = t->dev; in vti6_rcv_cb()
383 skb->mark = be32_to_cpu(t->parms.i_key); in vti6_rcv_cb()
390 skb_scrub_packet(skb, !net_eq(t->net, dev_net(skb->dev))); in vti6_rcv_cb()
411 vti6_addr_conflict(const struct ip6_tnl *t, const struct ipv6hdr *hdr) in vti6_addr_conflict() argument
413 return ipv6_addr_equal(&t->parms.raddr, &hdr->saddr); in vti6_addr_conflict()
448 struct ip6_tnl *t = netdev_priv(dev); in vti6_xmit() local
487 dst = xfrm_lookup_route(t->net, dst, fl, NULL, 0); in vti6_xmit()
498 if (!vti6_state_check(x, &t->parms.raddr, &t->parms.laddr)) in vti6_xmit()
501 if (!ip6_tnl_xmit_ctl(t, (const struct in6_addr *)&x->props.saddr, in vti6_xmit()
510 t->parms.name); in vti6_xmit()
535 skb_scrub_packet(skb, !net_eq(t->net, dev_net(dev))); in vti6_xmit()
539 err = dst_output(t->net, skb->sk, skb); in vti6_xmit()
556 struct ip6_tnl *t = netdev_priv(dev); in vti6_tnl_xmit() local
567 if ((t->parms.proto != IPPROTO_IPV6 && t->parms.proto != 0) || in vti6_tnl_xmit()
568 vti6_addr_conflict(t, ipv6_hdr(skb))) in vti6_tnl_xmit()
583 fl.flowi_mark = be32_to_cpu(t->parms.o_key); in vti6_tnl_xmit()
604 struct ip6_tnl *t; in vti6_err() local
612 t = vti6_tnl_lookup(dev_net(skb->dev), &iph->daddr, &iph->saddr); in vti6_err()
613 if (!t) in vti6_err()
616 mark = be32_to_cpu(t->parms.o_key); in vti6_err()
654 static void vti6_link_config(struct ip6_tnl *t, bool keep_mtu) in vti6_link_config() argument
656 struct net_device *dev = t->dev; in vti6_link_config()
657 struct __ip6_tnl_parm *p = &t->parms; in vti6_link_config()
666 p->flags |= ip6_tnl_get_cap(t, &p->laddr, &p->raddr); in vti6_link_config()
681 struct rt6_info *rt = rt6_lookup(t->net, in vti6_link_config()
691 tdev = __dev_get_by_index(t->net, p->link); in vti6_link_config()
711 vti6_tnl_change(struct ip6_tnl *t, const struct __ip6_tnl_parm *p, in vti6_tnl_change() argument
714 t->parms.laddr = p->laddr; in vti6_tnl_change()
715 t->parms.raddr = p->raddr; in vti6_tnl_change()
716 t->parms.link = p->link; in vti6_tnl_change()
717 t->parms.i_key = p->i_key; in vti6_tnl_change()
718 t->parms.o_key = p->o_key; in vti6_tnl_change()
719 t->parms.proto = p->proto; in vti6_tnl_change()
720 t->parms.fwmark = p->fwmark; in vti6_tnl_change()
721 dst_cache_reset(&t->dst_cache); in vti6_tnl_change()
722 vti6_link_config(t, keep_mtu); in vti6_tnl_change()
726 static int vti6_update(struct ip6_tnl *t, struct __ip6_tnl_parm *p, in vti6_update() argument
729 struct net *net = dev_net(t->dev); in vti6_update()
733 vti6_tnl_unlink(ip6n, t); in vti6_update()
735 err = vti6_tnl_change(t, p, keep_mtu); in vti6_update()
736 vti6_tnl_link(ip6n, t); in vti6_update()
737 netdev_state_change(t->dev); in vti6_update()
805 struct ip6_tnl *t = NULL; in vti6_siocdevprivate() local
819 t = vti6_locate(net, &p1, 0); in vti6_siocdevprivate()
823 if (!t) in vti6_siocdevprivate()
824 t = netdev_priv(dev); in vti6_siocdevprivate()
825 vti6_parm_to_user(&p, &t->parms); in vti6_siocdevprivate()
841 t = vti6_locate(net, &p1, cmd == SIOCADDTUNNEL); in vti6_siocdevprivate()
843 if (t) { in vti6_siocdevprivate()
844 if (t->dev != dev) { in vti6_siocdevprivate()
849 t = netdev_priv(dev); in vti6_siocdevprivate()
851 err = vti6_update(t, &p1, false); in vti6_siocdevprivate()
853 if (t) { in vti6_siocdevprivate()
855 vti6_parm_to_user(&p, &t->parms); in vti6_siocdevprivate()
873 t = vti6_locate(net, &p1, 0); in vti6_siocdevprivate()
874 if (!t) in vti6_siocdevprivate()
877 if (t->dev == ip6n->fb_tnl_dev) in vti6_siocdevprivate()
879 dev = t->dev; in vti6_siocdevprivate()
930 struct ip6_tnl *t = netdev_priv(dev); in vti6_dev_init_gen() local
932 t->dev = dev; in vti6_dev_init_gen()
933 t->net = dev_net(dev); in vti6_dev_init_gen()
937 netdev_hold(dev, &t->dev_tracker, GFP_KERNEL); in vti6_dev_init_gen()
948 struct ip6_tnl *t = netdev_priv(dev); in vti6_dev_init() local
953 vti6_link_config(t, true); in vti6_dev_init()
965 struct ip6_tnl *t = netdev_priv(dev); in vti6_fb_tnl_dev_init() local
969 t->parms.proto = IPPROTO_IPV6; in vti6_fb_tnl_dev_init()
971 rcu_assign_pointer(ip6n->tnls_wc[0], t); in vti6_fb_tnl_dev_init()
1039 struct ip6_tnl *t; in vti6_changelink() local
1049 t = vti6_locate(net, &p, 0); in vti6_changelink()
1051 if (t) { in vti6_changelink()
1052 if (t->dev != dev) in vti6_changelink()
1055 t = netdev_priv(dev); in vti6_changelink()
1057 return vti6_update(t, &p, tb && tb[IFLA_MTU]); in vti6_changelink()
1124 struct ip6_tnl *t; in vti6_destroy_tunnels() local
1127 t = rtnl_dereference(ip6n->tnls_r_l[h]); in vti6_destroy_tunnels()
1128 while (t) { in vti6_destroy_tunnels()
1129 unregister_netdevice_queue(t->dev, list); in vti6_destroy_tunnels()
1130 t = rtnl_dereference(t->next); in vti6_destroy_tunnels()
1134 t = rtnl_dereference(ip6n->tnls_wc[0]); in vti6_destroy_tunnels()
1135 if (t) in vti6_destroy_tunnels()
1136 unregister_netdevice_queue(t->dev, list); in vti6_destroy_tunnels()
1142 struct ip6_tnl *t = NULL; in vti6_init_net() local
1167 t = netdev_priv(ip6n->fb_tnl_dev); in vti6_init_net()
1169 strcpy(t->parms.name, ip6n->fb_tnl_dev->name); in vti6_init_net()