Lines Matching refs:t

98 	struct ip_tunnel *t;  in ipip6_tunnel_lookup()  local
101 for_each_ip_tunnel_rcu(t, sitn->tunnels_r_l[h0 ^ h1]) { in ipip6_tunnel_lookup()
102 if (local == t->parms.iph.saddr && in ipip6_tunnel_lookup()
103 remote == t->parms.iph.daddr && in ipip6_tunnel_lookup()
104 (!dev || !t->parms.link || dev->ifindex == t->parms.link) && in ipip6_tunnel_lookup()
105 (t->dev->flags & IFF_UP)) in ipip6_tunnel_lookup()
106 return t; in ipip6_tunnel_lookup()
108 for_each_ip_tunnel_rcu(t, sitn->tunnels_r[h0]) { in ipip6_tunnel_lookup()
109 if (remote == t->parms.iph.daddr && in ipip6_tunnel_lookup()
110 (!dev || !t->parms.link || dev->ifindex == t->parms.link) && in ipip6_tunnel_lookup()
111 (t->dev->flags & IFF_UP)) in ipip6_tunnel_lookup()
112 return t; in ipip6_tunnel_lookup()
114 for_each_ip_tunnel_rcu(t, sitn->tunnels_l[h1]) { in ipip6_tunnel_lookup()
115 if (local == t->parms.iph.saddr && in ipip6_tunnel_lookup()
116 (!dev || !t->parms.link || dev->ifindex == t->parms.link) && in ipip6_tunnel_lookup()
117 (t->dev->flags & IFF_UP)) in ipip6_tunnel_lookup()
118 return t; in ipip6_tunnel_lookup()
120 t = rcu_dereference(sitn->tunnels_wc[0]); in ipip6_tunnel_lookup()
121 if (t && (t->dev->flags & IFF_UP)) in ipip6_tunnel_lookup()
122 return t; in ipip6_tunnel_lookup()
146 struct ip_tunnel *t) in ipip6_bucket() argument
148 return __ipip6_bucket(sitn, &t->parms); in ipip6_bucket()
151 static void ipip6_tunnel_unlink(struct sit_net *sitn, struct ip_tunnel *t) in ipip6_tunnel_unlink() argument
156 for (tp = ipip6_bucket(sitn, t); in ipip6_tunnel_unlink()
159 if (t == iter) { in ipip6_tunnel_unlink()
160 rcu_assign_pointer(*tp, t->next); in ipip6_tunnel_unlink()
166 static void ipip6_tunnel_link(struct sit_net *sitn, struct ip_tunnel *t) in ipip6_tunnel_link() argument
168 struct ip_tunnel __rcu **tp = ipip6_bucket(sitn, t); in ipip6_tunnel_link()
170 rcu_assign_pointer(t->next, rtnl_dereference(*tp)); in ipip6_tunnel_link()
171 rcu_assign_pointer(*tp, t); in ipip6_tunnel_link()
177 struct ip_tunnel *t = netdev_priv(dev); in ipip6_tunnel_clone_6rd() local
179 if (t->dev == sitn->fb_tunnel_dev) { in ipip6_tunnel_clone_6rd()
180 ipv6_addr_set(&t->ip6rd.prefix, htonl(0x20020000), 0, 0, 0); in ipip6_tunnel_clone_6rd()
181 t->ip6rd.relay_prefix = 0; in ipip6_tunnel_clone_6rd()
182 t->ip6rd.prefixlen = 16; in ipip6_tunnel_clone_6rd()
183 t->ip6rd.relay_prefixlen = 0; in ipip6_tunnel_clone_6rd()
186 memcpy(&t->ip6rd, &t0->ip6rd, sizeof(t->ip6rd)); in ipip6_tunnel_clone_6rd()
193 struct ip_tunnel *t = netdev_priv(dev); in ipip6_tunnel_create() local
198 memcpy(dev->dev_addr, &t->parms.iph.saddr, 4); in ipip6_tunnel_create()
199 memcpy(dev->broadcast, &t->parms.iph.daddr, 4); in ipip6_tunnel_create()
201 if ((__force u16)t->parms.i_flags & SIT_ISATAP) in ipip6_tunnel_create()
214 ipip6_tunnel_link(sitn, t); in ipip6_tunnel_create()
226 struct ip_tunnel *t, *nt; in ipip6_tunnel_locate() local
233 (t = rtnl_dereference(*tp)) != NULL; in ipip6_tunnel_locate()
234 tp = &t->next) { in ipip6_tunnel_locate()
235 if (local == t->parms.iph.saddr && in ipip6_tunnel_locate()
236 remote == t->parms.iph.daddr && in ipip6_tunnel_locate()
237 parms->link == t->parms.link) { in ipip6_tunnel_locate()
241 return t; in ipip6_tunnel_locate()
252 dev = alloc_netdev(sizeof(*t), name, NET_NAME_UNKNOWN, in ipip6_tunnel_locate()
279 __ipip6_tunnel_locate_prl(struct ip_tunnel *t, __be32 addr) in __ipip6_tunnel_locate_prl() argument
283 for_each_prl_rcu(t->prl) in __ipip6_tunnel_locate_prl()
290 static int ipip6_tunnel_get_prl(struct ip_tunnel *t, in ipip6_tunnel_get_prl() argument
313 ca = t->prl_count < cmax ? t->prl_count : cmax; in ipip6_tunnel_get_prl()
329 for_each_prl_rcu(t->prl) { in ipip6_tunnel_get_prl()
354 ipip6_tunnel_add_prl(struct ip_tunnel *t, struct ip_tunnel_prl *a, int chg) in ipip6_tunnel_add_prl() argument
364 for (p = rtnl_dereference(t->prl); p; p = rtnl_dereference(p->next)) { in ipip6_tunnel_add_prl()
386 p->next = t->prl; in ipip6_tunnel_add_prl()
389 t->prl_count++; in ipip6_tunnel_add_prl()
390 rcu_assign_pointer(t->prl, p); in ipip6_tunnel_add_prl()
408 ipip6_tunnel_del_prl(struct ip_tunnel *t, struct ip_tunnel_prl *a) in ipip6_tunnel_del_prl() argument
417 for (p = &t->prl; in ipip6_tunnel_del_prl()
423 t->prl_count--; in ipip6_tunnel_del_prl()
429 x = rtnl_dereference(t->prl); in ipip6_tunnel_del_prl()
431 t->prl_count = 0; in ipip6_tunnel_del_prl()
433 t->prl = NULL; in ipip6_tunnel_del_prl()
441 isatap_chksrc(struct sk_buff *skb, const struct iphdr *iph, struct ip_tunnel *t) in isatap_chksrc() argument
447 p = __ipip6_tunnel_locate_prl(t, iph->saddr); in isatap_chksrc()
458 ipv6_chk_prefix(addr6, t->dev)) in isatap_chksrc()
523 struct ip_tunnel *t; in ipip6_err() local
554 t = ipip6_tunnel_lookup(dev_net(skb->dev), in ipip6_err()
558 if (!t) in ipip6_err()
563 t->parms.link, 0, IPPROTO_IPV6, 0); in ipip6_err()
568 ipv4_redirect(skb, dev_net(skb->dev), t->parms.link, 0, in ipip6_err()
574 if (t->parms.iph.daddr == 0) in ipip6_err()
581 if (t->parms.iph.ttl == 0 && type == ICMP_TIME_EXCEEDED) in ipip6_err()
584 if (time_before(jiffies, t->err_time + IPTUNNEL_ERR_TIMEO)) in ipip6_err()
585 t->err_count++; in ipip6_err()
587 t->err_count = 1; in ipip6_err()
588 t->err_time = jiffies; in ipip6_err()
1081 static void ipip6_tunnel_update(struct ip_tunnel *t, struct ip_tunnel_parm *p) in ipip6_tunnel_update() argument
1083 struct net *net = t->net; in ipip6_tunnel_update()
1086 ipip6_tunnel_unlink(sitn, t); in ipip6_tunnel_update()
1088 t->parms.iph.saddr = p->iph.saddr; in ipip6_tunnel_update()
1089 t->parms.iph.daddr = p->iph.daddr; in ipip6_tunnel_update()
1090 memcpy(t->dev->dev_addr, &p->iph.saddr, 4); in ipip6_tunnel_update()
1091 memcpy(t->dev->broadcast, &p->iph.daddr, 4); in ipip6_tunnel_update()
1092 ipip6_tunnel_link(sitn, t); in ipip6_tunnel_update()
1093 t->parms.iph.ttl = p->iph.ttl; in ipip6_tunnel_update()
1094 t->parms.iph.tos = p->iph.tos; in ipip6_tunnel_update()
1095 if (t->parms.link != p->link) { in ipip6_tunnel_update()
1096 t->parms.link = p->link; in ipip6_tunnel_update()
1097 ipip6_tunnel_bind_dev(t->dev); in ipip6_tunnel_update()
1099 ip_tunnel_dst_reset_all(t); in ipip6_tunnel_update()
1100 netdev_state_change(t->dev); in ipip6_tunnel_update()
1104 static int ipip6_tunnel_update_6rd(struct ip_tunnel *t, in ipip6_tunnel_update_6rd() argument
1126 t->ip6rd.prefix = prefix; in ipip6_tunnel_update_6rd()
1127 t->ip6rd.relay_prefix = relay_prefix; in ipip6_tunnel_update_6rd()
1128 t->ip6rd.prefixlen = ip6rd->prefixlen; in ipip6_tunnel_update_6rd()
1129 t->ip6rd.relay_prefixlen = ip6rd->relay_prefixlen; in ipip6_tunnel_update_6rd()
1130 ip_tunnel_dst_reset_all(t); in ipip6_tunnel_update_6rd()
1131 netdev_state_change(t->dev); in ipip6_tunnel_update_6rd()
1142 struct ip_tunnel *t = netdev_priv(dev); in ipip6_tunnel_ioctl() local
1143 struct net *net = t->net; in ipip6_tunnel_ioctl()
1159 t = ipip6_tunnel_locate(net, &p, 0); in ipip6_tunnel_ioctl()
1160 if (!t) in ipip6_tunnel_ioctl()
1161 t = netdev_priv(dev); in ipip6_tunnel_ioctl()
1166 memcpy(&p, &t->parms, sizeof(p)); in ipip6_tunnel_ioctl()
1172 ip6rd.prefix = t->ip6rd.prefix; in ipip6_tunnel_ioctl()
1173 ip6rd.relay_prefix = t->ip6rd.relay_prefix; in ipip6_tunnel_ioctl()
1174 ip6rd.prefixlen = t->ip6rd.prefixlen; in ipip6_tunnel_ioctl()
1175 ip6rd.relay_prefixlen = t->ip6rd.relay_prefixlen; in ipip6_tunnel_ioctl()
1205 t = ipip6_tunnel_locate(net, &p, cmd == SIOCADDTUNNEL); in ipip6_tunnel_ioctl()
1208 if (t) { in ipip6_tunnel_ioctl()
1209 if (t->dev != dev) { in ipip6_tunnel_ioctl()
1219 t = netdev_priv(dev); in ipip6_tunnel_ioctl()
1222 ipip6_tunnel_update(t, &p); in ipip6_tunnel_ioctl()
1225 if (t) { in ipip6_tunnel_ioctl()
1227 if (copy_to_user(ifr->ifr_ifru.ifru_data, &t->parms, sizeof(p))) in ipip6_tunnel_ioctl()
1243 t = ipip6_tunnel_locate(net, &p, 0); in ipip6_tunnel_ioctl()
1244 if (!t) in ipip6_tunnel_ioctl()
1247 if (t == netdev_priv(sitn->fb_tunnel_dev)) in ipip6_tunnel_ioctl()
1249 dev = t->dev; in ipip6_tunnel_ioctl()
1259 err = ipip6_tunnel_get_prl(t, ifr->ifr_ifru.ifru_data); in ipip6_tunnel_ioctl()
1277 err = ipip6_tunnel_del_prl(t, &prl); in ipip6_tunnel_ioctl()
1281 err = ipip6_tunnel_add_prl(t, &prl, cmd == SIOCCHGPRL); in ipip6_tunnel_ioctl()
1284 ip_tunnel_dst_reset_all(t); in ipip6_tunnel_ioctl()
1302 err = ipip6_tunnel_update_6rd(t, &ip6rd); in ipip6_tunnel_ioctl()
1581 struct ip_tunnel *t = netdev_priv(dev); in ipip6_changelink() local
1584 struct net *net = t->net; in ipip6_changelink()
1595 err = ip_tunnel_encap_setup(t, &ipencap); in ipip6_changelink()
1606 t = ipip6_tunnel_locate(net, &p, 0); in ipip6_changelink()
1608 if (t) { in ipip6_changelink()
1609 if (t->dev != dev) in ipip6_changelink()
1612 t = netdev_priv(dev); in ipip6_changelink()
1614 ipip6_tunnel_update(t, &p); in ipip6_changelink()
1618 return ipip6_tunnel_update_6rd(t, &ip6rd); in ipip6_changelink()
1779 struct ip_tunnel *t; in sit_destroy_tunnels() local
1781 t = rtnl_dereference(sitn->tunnels[prio][h]); in sit_destroy_tunnels()
1782 while (t) { in sit_destroy_tunnels()
1786 if (!net_eq(dev_net(t->dev), net)) in sit_destroy_tunnels()
1787 unregister_netdevice_queue(t->dev, in sit_destroy_tunnels()
1789 t = rtnl_dereference(t->next); in sit_destroy_tunnels()
1798 struct ip_tunnel *t; in sit_init_net() local
1827 t = netdev_priv(sitn->fb_tunnel_dev); in sit_init_net()
1829 strcpy(t->parms.name, sitn->fb_tunnel_dev->name); in sit_init_net()