Lines Matching refs:t

79 	for (t = rcu_dereference(start); t; t = rcu_dereference(t->next))
97 struct ip6_tnl *t; in vti6_tnl_lookup() local
102 if (ipv6_addr_equal(local, &t->parms.laddr) && in vti6_tnl_lookup()
103 ipv6_addr_equal(remote, &t->parms.raddr) && in vti6_tnl_lookup()
104 (t->dev->flags & IFF_UP)) in vti6_tnl_lookup()
105 return t; in vti6_tnl_lookup()
111 if (ipv6_addr_equal(local, &t->parms.laddr) && in vti6_tnl_lookup()
112 (t->dev->flags & IFF_UP)) in vti6_tnl_lookup()
113 return t; in vti6_tnl_lookup()
118 if (ipv6_addr_equal(remote, &t->parms.raddr) && in vti6_tnl_lookup()
119 (t->dev->flags & IFF_UP)) in vti6_tnl_lookup()
120 return t; in vti6_tnl_lookup()
123 t = rcu_dereference(ip6n->tnls_wc[0]); in vti6_tnl_lookup()
124 if (t && (t->dev->flags & IFF_UP)) in vti6_tnl_lookup()
125 return t; in vti6_tnl_lookup()
156 vti6_tnl_link(struct vti6_net *ip6n, struct ip6_tnl *t) in vti6_tnl_link() argument
158 struct ip6_tnl __rcu **tp = vti6_tnl_bucket(ip6n, &t->parms); in vti6_tnl_link()
160 rcu_assign_pointer(t->next , rtnl_dereference(*tp)); in vti6_tnl_link()
161 rcu_assign_pointer(*tp, t); in vti6_tnl_link()
165 vti6_tnl_unlink(struct vti6_net *ip6n, struct ip6_tnl *t) in vti6_tnl_unlink() argument
170 for (tp = vti6_tnl_bucket(ip6n, &t->parms); in vti6_tnl_unlink()
173 if (t == iter) { in vti6_tnl_unlink()
174 rcu_assign_pointer(*tp, t->next); in vti6_tnl_unlink()
187 struct ip6_tnl *t = netdev_priv(dev); in vti6_tnl_create2() local
197 strcpy(t->parms.name, dev->name); in vti6_tnl_create2()
200 vti6_tnl_link(ip6n, t); in vti6_tnl_create2()
211 struct ip6_tnl *t; in vti6_tnl_create() local
223 dev = alloc_netdev(sizeof(*t), name, NET_NAME_UNKNOWN, vti6_dev_setup); in vti6_tnl_create()
229 t = netdev_priv(dev); in vti6_tnl_create()
230 t->parms = *p; in vti6_tnl_create()
231 t->net = dev_net(dev); in vti6_tnl_create()
237 return t; in vti6_tnl_create()
265 struct ip6_tnl *t; in vti6_locate() local
269 (t = rtnl_dereference(*tp)) != NULL; in vti6_locate()
270 tp = &t->next) { in vti6_locate()
271 if (ipv6_addr_equal(local, &t->parms.laddr) && in vti6_locate()
272 ipv6_addr_equal(remote, &t->parms.raddr)) { in vti6_locate()
276 return t; in vti6_locate()
293 struct ip6_tnl *t = netdev_priv(dev); in vti6_dev_uninit() local
294 struct vti6_net *ip6n = net_generic(t->net, vti6_net_id); in vti6_dev_uninit()
299 vti6_tnl_unlink(ip6n, t); in vti6_dev_uninit()
305 struct ip6_tnl *t; in vti6_rcv() local
309 t = vti6_tnl_lookup(dev_net(skb->dev), &ipv6h->saddr, &ipv6h->daddr); in vti6_rcv()
310 if (t) { in vti6_rcv()
311 if (t->parms.proto != IPPROTO_IPV6 && t->parms.proto != 0) { in vti6_rcv()
321 if (!ip6_tnl_rcv_ctl(t, &ipv6h->daddr, &ipv6h->saddr)) { in vti6_rcv()
322 t->dev->stats.rx_dropped++; in vti6_rcv()
329 return xfrm6_rcv_tnl(skb, t); in vti6_rcv()
345 struct ip6_tnl *t = XFRM_TUNNEL_SKB_CB(skb)->tunnel.ip6; in vti6_rcv_cb() local
349 if (!t) in vti6_rcv_cb()
352 dev = t->dev; in vti6_rcv_cb()
376 skb->mark = be32_to_cpu(t->parms.i_key); in vti6_rcv_cb()
383 skb_scrub_packet(skb, !net_eq(t->net, dev_net(skb->dev))); in vti6_rcv_cb()
409 vti6_addr_conflict(const struct ip6_tnl *t, const struct ipv6hdr *hdr) in vti6_addr_conflict() argument
411 return ipv6_addr_equal(&t->parms.raddr, &hdr->saddr); in vti6_addr_conflict()
446 struct ip6_tnl *t = netdev_priv(dev); in vti6_xmit() local
447 struct net_device_stats *stats = &t->dev->stats; in vti6_xmit()
459 dst = xfrm_lookup(t->net, dst, fl, NULL, 0); in vti6_xmit()
467 if (!vti6_state_check(x, &t->parms.raddr, &t->parms.laddr)) in vti6_xmit()
470 if (!ip6_tnl_xmit_ctl(t, (const struct in6_addr *)&x->props.saddr, in vti6_xmit()
479 t->parms.name); in vti6_xmit()
501 skb_scrub_packet(skb, !net_eq(t->net, dev_net(dev))); in vti6_xmit()
505 err = dst_output(t->net, skb->sk, skb); in vti6_xmit()
522 struct ip6_tnl *t = netdev_priv(dev); in vti6_tnl_xmit() local
523 struct net_device_stats *stats = &t->dev->stats; in vti6_tnl_xmit()
534 if ((t->parms.proto != IPPROTO_IPV6 && t->parms.proto != 0) || in vti6_tnl_xmit()
535 vti6_addr_conflict(t, ipv6h)) in vti6_tnl_xmit()
550 fl.flowi_mark = be32_to_cpu(t->parms.o_key); in vti6_tnl_xmit()
571 struct ip6_tnl *t; in vti6_err() local
579 t = vti6_tnl_lookup(dev_net(skb->dev), &iph->daddr, &iph->saddr); in vti6_err()
580 if (!t) in vti6_err()
583 mark = be32_to_cpu(t->parms.o_key); in vti6_err()
621 static void vti6_link_config(struct ip6_tnl *t, bool keep_mtu) in vti6_link_config() argument
623 struct net_device *dev = t->dev; in vti6_link_config()
624 struct __ip6_tnl_parm *p = &t->parms; in vti6_link_config()
633 p->flags |= ip6_tnl_get_cap(t, &p->laddr, &p->raddr); in vti6_link_config()
648 struct rt6_info *rt = rt6_lookup(t->net, in vti6_link_config()
658 tdev = __dev_get_by_index(t->net, p->link); in vti6_link_config()
678 vti6_tnl_change(struct ip6_tnl *t, const struct __ip6_tnl_parm *p, in vti6_tnl_change() argument
681 t->parms.laddr = p->laddr; in vti6_tnl_change()
682 t->parms.raddr = p->raddr; in vti6_tnl_change()
683 t->parms.link = p->link; in vti6_tnl_change()
684 t->parms.i_key = p->i_key; in vti6_tnl_change()
685 t->parms.o_key = p->o_key; in vti6_tnl_change()
686 t->parms.proto = p->proto; in vti6_tnl_change()
687 t->parms.fwmark = p->fwmark; in vti6_tnl_change()
688 dst_cache_reset(&t->dst_cache); in vti6_tnl_change()
689 vti6_link_config(t, keep_mtu); in vti6_tnl_change()
693 static int vti6_update(struct ip6_tnl *t, struct __ip6_tnl_parm *p, in vti6_update() argument
696 struct net *net = dev_net(t->dev); in vti6_update()
700 vti6_tnl_unlink(ip6n, t); in vti6_update()
702 err = vti6_tnl_change(t, p, keep_mtu); in vti6_update()
703 vti6_tnl_link(ip6n, t); in vti6_update()
704 netdev_state_change(t->dev); in vti6_update()
771 struct ip6_tnl *t = NULL; in vti6_ioctl() local
783 t = vti6_locate(net, &p1, 0); in vti6_ioctl()
787 if (!t) in vti6_ioctl()
788 t = netdev_priv(dev); in vti6_ioctl()
789 vti6_parm_to_user(&p, &t->parms); in vti6_ioctl()
805 t = vti6_locate(net, &p1, cmd == SIOCADDTUNNEL); in vti6_ioctl()
807 if (t) { in vti6_ioctl()
808 if (t->dev != dev) { in vti6_ioctl()
813 t = netdev_priv(dev); in vti6_ioctl()
815 err = vti6_update(t, &p1, false); in vti6_ioctl()
817 if (t) { in vti6_ioctl()
819 vti6_parm_to_user(&p, &t->parms); in vti6_ioctl()
837 t = vti6_locate(net, &p1, 0); in vti6_ioctl()
838 if (!t) in vti6_ioctl()
841 if (t->dev == ip6n->fb_tnl_dev) in vti6_ioctl()
843 dev = t->dev; in vti6_ioctl()
893 struct ip6_tnl *t = netdev_priv(dev); in vti6_dev_init_gen() local
895 t->dev = dev; in vti6_dev_init_gen()
896 t->net = dev_net(dev); in vti6_dev_init_gen()
909 struct ip6_tnl *t = netdev_priv(dev); in vti6_dev_init() local
914 vti6_link_config(t, true); in vti6_dev_init()
926 struct ip6_tnl *t = netdev_priv(dev); in vti6_fb_tnl_dev_init() local
930 t->parms.proto = IPPROTO_IPV6; in vti6_fb_tnl_dev_init()
933 rcu_assign_pointer(ip6n->tnls_wc[0], t); in vti6_fb_tnl_dev_init()
1001 struct ip6_tnl *t; in vti6_changelink() local
1011 t = vti6_locate(net, &p, 0); in vti6_changelink()
1013 if (t) { in vti6_changelink()
1014 if (t->dev != dev) in vti6_changelink()
1017 t = netdev_priv(dev); in vti6_changelink()
1019 return vti6_update(t, &p, tb && tb[IFLA_MTU]); in vti6_changelink()
1086 struct ip6_tnl *t; in vti6_destroy_tunnels() local
1089 t = rtnl_dereference(ip6n->tnls_r_l[h]); in vti6_destroy_tunnels()
1090 while (t) { in vti6_destroy_tunnels()
1091 unregister_netdevice_queue(t->dev, list); in vti6_destroy_tunnels()
1092 t = rtnl_dereference(t->next); in vti6_destroy_tunnels()
1096 t = rtnl_dereference(ip6n->tnls_wc[0]); in vti6_destroy_tunnels()
1097 if (t) in vti6_destroy_tunnels()
1098 unregister_netdevice_queue(t->dev, list); in vti6_destroy_tunnels()
1104 struct ip6_tnl *t = NULL; in vti6_init_net() local
1129 t = netdev_priv(ip6n->fb_tnl_dev); in vti6_init_net()
1131 strcpy(t->parms.name, ip6n->fb_tnl_dev->name); in vti6_init_net()