Lines Matching refs:t

79 static void ip6gre_tunnel_link(struct ip6gre_net *ign, struct ip6_tnl *t);
80 static void ip6gre_tnl_link_config(struct ip6_tnl *t, int set_mtu);
81 static void ip6erspan_tnl_link_config(struct ip6_tnl *t, int set_mtu);
114 static bool ip6gre_tunnel_match(struct ip6_tnl *t, int dev_type, int link, in ip6gre_tunnel_match() argument
119 if (t->dev->type != ARPHRD_IP6GRE && in ip6gre_tunnel_match()
120 t->dev->type != dev_type) in ip6gre_tunnel_match()
123 if (t->parms.link != link) in ip6gre_tunnel_match()
125 if (t->dev->type != dev_type) in ip6gre_tunnel_match()
128 *ret = t; in ip6gre_tunnel_match()
133 *ret = t; in ip6gre_tunnel_match()
148 struct ip6_tnl *t, *cand = NULL; in ip6gre_tunnel_lookup() local
157 for_each_ip_tunnel_rcu(t, ign->tunnels_r_l[h0 ^ h1]) { in ip6gre_tunnel_lookup()
158 if (!ipv6_addr_equal(local, &t->parms.laddr) || in ip6gre_tunnel_lookup()
159 !ipv6_addr_equal(remote, &t->parms.raddr) || in ip6gre_tunnel_lookup()
160 key != t->parms.i_key || in ip6gre_tunnel_lookup()
161 !(t->dev->flags & IFF_UP)) in ip6gre_tunnel_lookup()
164 if (ip6gre_tunnel_match(t, dev_type, link, &cand_score, &cand)) in ip6gre_tunnel_lookup()
168 for_each_ip_tunnel_rcu(t, ign->tunnels_r[h0 ^ h1]) { in ip6gre_tunnel_lookup()
169 if (!ipv6_addr_equal(remote, &t->parms.raddr) || in ip6gre_tunnel_lookup()
170 key != t->parms.i_key || in ip6gre_tunnel_lookup()
171 !(t->dev->flags & IFF_UP)) in ip6gre_tunnel_lookup()
174 if (ip6gre_tunnel_match(t, dev_type, link, &cand_score, &cand)) in ip6gre_tunnel_lookup()
178 for_each_ip_tunnel_rcu(t, ign->tunnels_l[h1]) { in ip6gre_tunnel_lookup()
179 if ((!ipv6_addr_equal(local, &t->parms.laddr) && in ip6gre_tunnel_lookup()
180 (!ipv6_addr_equal(local, &t->parms.raddr) || in ip6gre_tunnel_lookup()
182 key != t->parms.i_key || in ip6gre_tunnel_lookup()
183 !(t->dev->flags & IFF_UP)) in ip6gre_tunnel_lookup()
186 if (ip6gre_tunnel_match(t, dev_type, link, &cand_score, &cand)) in ip6gre_tunnel_lookup()
190 for_each_ip_tunnel_rcu(t, ign->tunnels_wc[h1]) { in ip6gre_tunnel_lookup()
191 if (t->parms.i_key != key || in ip6gre_tunnel_lookup()
192 !(t->dev->flags & IFF_UP)) in ip6gre_tunnel_lookup()
195 if (ip6gre_tunnel_match(t, dev_type, link, &cand_score, &cand)) in ip6gre_tunnel_lookup()
204 t = rcu_dereference(ign->collect_md_tun_erspan); in ip6gre_tunnel_lookup()
206 t = rcu_dereference(ign->collect_md_tun); in ip6gre_tunnel_lookup()
208 if (t && t->dev->flags & IFF_UP) in ip6gre_tunnel_lookup()
209 return t; in ip6gre_tunnel_lookup()
236 static void ip6gre_tunnel_link_md(struct ip6gre_net *ign, struct ip6_tnl *t) in ip6gre_tunnel_link_md() argument
238 if (t->parms.collect_md) in ip6gre_tunnel_link_md()
239 rcu_assign_pointer(ign->collect_md_tun, t); in ip6gre_tunnel_link_md()
242 static void ip6erspan_tunnel_link_md(struct ip6gre_net *ign, struct ip6_tnl *t) in ip6erspan_tunnel_link_md() argument
244 if (t->parms.collect_md) in ip6erspan_tunnel_link_md()
245 rcu_assign_pointer(ign->collect_md_tun_erspan, t); in ip6erspan_tunnel_link_md()
248 static void ip6gre_tunnel_unlink_md(struct ip6gre_net *ign, struct ip6_tnl *t) in ip6gre_tunnel_unlink_md() argument
250 if (t->parms.collect_md) in ip6gre_tunnel_unlink_md()
255 struct ip6_tnl *t) in ip6erspan_tunnel_unlink_md() argument
257 if (t->parms.collect_md) in ip6erspan_tunnel_unlink_md()
262 const struct ip6_tnl *t) in ip6gre_bucket() argument
264 return __ip6gre_bucket(ign, &t->parms); in ip6gre_bucket()
267 static void ip6gre_tunnel_link(struct ip6gre_net *ign, struct ip6_tnl *t) in ip6gre_tunnel_link() argument
269 struct ip6_tnl __rcu **tp = ip6gre_bucket(ign, t); in ip6gre_tunnel_link()
271 rcu_assign_pointer(t->next, rtnl_dereference(*tp)); in ip6gre_tunnel_link()
272 rcu_assign_pointer(*tp, t); in ip6gre_tunnel_link()
275 static void ip6gre_tunnel_unlink(struct ip6gre_net *ign, struct ip6_tnl *t) in ip6gre_tunnel_unlink() argument
280 for (tp = ip6gre_bucket(ign, t); in ip6gre_tunnel_unlink()
283 if (t == iter) { in ip6gre_tunnel_unlink()
284 rcu_assign_pointer(*tp, t->next); in ip6gre_tunnel_unlink()
298 struct ip6_tnl *t; in ip6gre_tunnel_find() local
303 (t = rtnl_dereference(*tp)) != NULL; in ip6gre_tunnel_find()
304 tp = &t->next) in ip6gre_tunnel_find()
305 if (ipv6_addr_equal(local, &t->parms.laddr) && in ip6gre_tunnel_find()
306 ipv6_addr_equal(remote, &t->parms.raddr) && in ip6gre_tunnel_find()
307 key == t->parms.i_key && in ip6gre_tunnel_find()
308 link == t->parms.link && in ip6gre_tunnel_find()
309 type == t->dev->type) in ip6gre_tunnel_find()
312 return t; in ip6gre_tunnel_find()
318 struct ip6_tnl *t, *nt; in ip6gre_tunnel_locate() local
323 t = ip6gre_tunnel_find(net, parms, ARPHRD_IP6GRE); in ip6gre_tunnel_locate()
324 if (t && create) in ip6gre_tunnel_locate()
326 if (t || !create) in ip6gre_tunnel_locate()
327 return t; in ip6gre_tunnel_locate()
336 dev = alloc_netdev(sizeof(*t), name, NET_NAME_UNKNOWN, in ip6gre_tunnel_locate()
364 struct ip6_tnl *t = netdev_priv(dev); in ip6erspan_tunnel_uninit() local
365 struct ip6gre_net *ign = net_generic(t->net, ip6gre_net_id); in ip6erspan_tunnel_uninit()
367 ip6erspan_tunnel_unlink_md(ign, t); in ip6erspan_tunnel_uninit()
368 ip6gre_tunnel_unlink(ign, t); in ip6erspan_tunnel_uninit()
369 dst_cache_reset(&t->dst_cache); in ip6erspan_tunnel_uninit()
370 netdev_put(dev, &t->dev_tracker); in ip6erspan_tunnel_uninit()
375 struct ip6_tnl *t = netdev_priv(dev); in ip6gre_tunnel_uninit() local
376 struct ip6gre_net *ign = net_generic(t->net, ip6gre_net_id); in ip6gre_tunnel_uninit()
378 ip6gre_tunnel_unlink_md(ign, t); in ip6gre_tunnel_uninit()
379 ip6gre_tunnel_unlink(ign, t); in ip6gre_tunnel_uninit()
382 dst_cache_reset(&t->dst_cache); in ip6gre_tunnel_uninit()
383 netdev_put(dev, &t->dev_tracker); in ip6gre_tunnel_uninit()
393 struct ip6_tnl *t; in ip6gre_err() local
400 t = ip6gre_tunnel_lookup(skb->dev, &ipv6h->daddr, &ipv6h->saddr, in ip6gre_err()
402 if (!t) in ip6gre_err()
408 t->parms.name); in ip6gre_err()
415 t->parms.name); in ip6gre_err()
431 t->parms.name); in ip6gre_err()
435 t->parms.name); in ip6gre_err()
448 if (time_before(jiffies, t->err_time + IP6TUNNEL_ERR_TIMEO)) in ip6gre_err()
449 t->err_count++; in ip6gre_err()
451 t->err_count = 1; in ip6gre_err()
452 t->err_time = jiffies; in ip6gre_err()
610 struct ip6_tnl *t = netdev_priv(dev); in prepare_ip6gre_xmit_ipv4() local
612 if (!(t->parms.flags & IP6_TNL_F_IGN_ENCAP_LIMIT)) in prepare_ip6gre_xmit_ipv4()
613 *encap_limit = t->parms.encap_limit; in prepare_ip6gre_xmit_ipv4()
615 memcpy(fl6, &t->fl.u.ip6, sizeof(*fl6)); in prepare_ip6gre_xmit_ipv4()
617 if (t->parms.flags & IP6_TNL_F_USE_ORIG_TCLASS) in prepare_ip6gre_xmit_ipv4()
620 *dsfield = ip6_tclass(t->parms.flowinfo); in prepare_ip6gre_xmit_ipv4()
622 if (t->parms.flags & IP6_TNL_F_USE_ORIG_FWMARK) in prepare_ip6gre_xmit_ipv4()
625 fl6->flowi6_mark = t->parms.fwmark; in prepare_ip6gre_xmit_ipv4()
636 struct ip6_tnl *t = netdev_priv(dev); in prepare_ip6gre_xmit_ipv6() local
653 } else if (!(t->parms.flags & IP6_TNL_F_IGN_ENCAP_LIMIT)) { in prepare_ip6gre_xmit_ipv6()
654 *encap_limit = t->parms.encap_limit; in prepare_ip6gre_xmit_ipv6()
657 memcpy(fl6, &t->fl.u.ip6, sizeof(*fl6)); in prepare_ip6gre_xmit_ipv6()
659 if (t->parms.flags & IP6_TNL_F_USE_ORIG_TCLASS) in prepare_ip6gre_xmit_ipv6()
662 *dsfield = ip6_tclass(t->parms.flowinfo); in prepare_ip6gre_xmit_ipv6()
664 if (t->parms.flags & IP6_TNL_F_USE_ORIG_FLOWLABEL) in prepare_ip6gre_xmit_ipv6()
667 if (t->parms.flags & IP6_TNL_F_USE_ORIG_FWMARK) in prepare_ip6gre_xmit_ipv6()
670 fl6->flowi6_mark = t->parms.fwmark; in prepare_ip6gre_xmit_ipv6()
682 struct ip6_tnl *t = netdev_priv(dev); in prepare_ip6gre_xmit_other() local
684 if (!(t->parms.flags & IP6_TNL_F_IGN_ENCAP_LIMIT)) in prepare_ip6gre_xmit_other()
685 *encap_limit = t->parms.encap_limit; in prepare_ip6gre_xmit_other()
687 memcpy(fl6, &t->fl.u.ip6, sizeof(*fl6)); in prepare_ip6gre_xmit_other()
689 if (t->parms.flags & IP6_TNL_F_USE_ORIG_TCLASS) in prepare_ip6gre_xmit_other()
692 *dsfield = ip6_tclass(t->parms.flowinfo); in prepare_ip6gre_xmit_other()
694 if (t->parms.flags & IP6_TNL_F_USE_ORIG_FWMARK) in prepare_ip6gre_xmit_other()
697 fl6->flowi6_mark = t->parms.fwmark; in prepare_ip6gre_xmit_other()
790 struct ip6_tnl *t = netdev_priv(dev); in ip6gre_xmit_ipv4() local
799 if (!t->parms.collect_md) in ip6gre_xmit_ipv4()
804 t->parms.o_flags)); in ip6gre_xmit_ipv4()
823 struct ip6_tnl *t = netdev_priv(dev); in ip6gre_xmit_ipv6() local
831 if (ipv6_addr_equal(&t->parms.raddr, &ipv6h->saddr)) in ip6gre_xmit_ipv6()
834 if (!t->parms.collect_md && in ip6gre_xmit_ipv6()
839 t->parms.o_flags))) in ip6gre_xmit_ipv6()
855 struct ip6_tnl *t = netdev_priv(dev); in ip6gre_xmit_other() local
862 if (!t->parms.collect_md && in ip6gre_xmit_other()
867 t->parms.o_flags)); in ip6gre_xmit_other()
878 struct ip6_tnl *t = netdev_priv(dev); in ip6gre_tunnel_xmit() local
885 if (!ip6_tnl_xmit_ctl(t, &t->parms.laddr, &t->parms.raddr)) in ip6gre_tunnel_xmit()
907 if (!t->parms.collect_md || !IS_ERR(skb_tunnel_info_txcheck(skb))) in ip6gre_tunnel_xmit()
918 struct ip6_tnl *t = netdev_priv(dev); in ip6erspan_tunnel_xmit() local
933 if (!ip6_tnl_xmit_ctl(t, &t->parms.laddr, &t->parms.raddr)) in ip6erspan_tunnel_xmit()
961 if (skb_cow_head(skb, dev->needed_headroom ?: t->hlen)) in ip6erspan_tunnel_xmit()
964 __clear_bit(IP_TUNNEL_KEY_BIT, t->parms.o_flags); in ip6erspan_tunnel_xmit()
970 if (t->parms.collect_md) { in ip6erspan_tunnel_xmit()
1021 if (ipv6_addr_equal(&t->parms.raddr, &ipv6_hdr(skb)->saddr)) in ip6erspan_tunnel_xmit()
1028 memcpy(&fl6, &t->fl.u.ip6, sizeof(fl6)); in ip6erspan_tunnel_xmit()
1032 if (t->parms.erspan_ver == 1) { in ip6erspan_tunnel_xmit()
1033 erspan_build_header(skb, ntohl(t->parms.o_key), in ip6erspan_tunnel_xmit()
1034 t->parms.index, in ip6erspan_tunnel_xmit()
1037 } else if (t->parms.erspan_ver == 2) { in ip6erspan_tunnel_xmit()
1038 erspan_build_header_v2(skb, ntohl(t->parms.o_key), in ip6erspan_tunnel_xmit()
1039 t->parms.dir, in ip6erspan_tunnel_xmit()
1040 t->parms.hwid, in ip6erspan_tunnel_xmit()
1047 fl6.daddr = t->parms.raddr; in ip6erspan_tunnel_xmit()
1053 htonl(atomic_fetch_inc(&t->o_seqno))); in ip6erspan_tunnel_xmit()
1056 if (!t->parms.collect_md && dst) { in ip6erspan_tunnel_xmit()
1085 static void ip6gre_tnl_link_config_common(struct ip6_tnl *t) in ip6gre_tnl_link_config_common() argument
1087 struct net_device *dev = t->dev; in ip6gre_tnl_link_config_common()
1088 struct __ip6_tnl_parm *p = &t->parms; in ip6gre_tnl_link_config_common()
1089 struct flowi6 *fl6 = &t->fl.u.ip6; in ip6gre_tnl_link_config_common()
1102 fl6->fl6_gre_key = t->parms.o_key; in ip6gre_tnl_link_config_common()
1110 p->flags |= ip6_tnl_get_cap(t, &p->laddr, &p->raddr); in ip6gre_tnl_link_config_common()
1119 static void ip6gre_tnl_link_config_route(struct ip6_tnl *t, int set_mtu, in ip6gre_tnl_link_config_route() argument
1122 const struct __ip6_tnl_parm *p = &t->parms; in ip6gre_tnl_link_config_route()
1123 struct net_device *dev = t->dev; in ip6gre_tnl_link_config_route()
1129 struct rt6_info *rt = rt6_lookup(t->net, in ip6gre_tnl_link_config_route()
1140 if (t->dev->header_ops) in ip6gre_tnl_link_config_route()
1148 if (!(t->parms.flags & IP6_TNL_F_IGN_ENCAP_LIMIT)) in ip6gre_tnl_link_config_route()
1179 static void ip6gre_tnl_link_config(struct ip6_tnl *t, int set_mtu) in ip6gre_tnl_link_config() argument
1181 ip6gre_tnl_link_config_common(t); in ip6gre_tnl_link_config()
1182 ip6gre_tnl_link_config_route(t, set_mtu, ip6gre_calc_hlen(t)); in ip6gre_tnl_link_config()
1185 static void ip6gre_tnl_copy_tnl_parm(struct ip6_tnl *t, in ip6gre_tnl_copy_tnl_parm() argument
1188 t->parms.laddr = p->laddr; in ip6gre_tnl_copy_tnl_parm()
1189 t->parms.raddr = p->raddr; in ip6gre_tnl_copy_tnl_parm()
1190 t->parms.flags = p->flags; in ip6gre_tnl_copy_tnl_parm()
1191 t->parms.hop_limit = p->hop_limit; in ip6gre_tnl_copy_tnl_parm()
1192 t->parms.encap_limit = p->encap_limit; in ip6gre_tnl_copy_tnl_parm()
1193 t->parms.flowinfo = p->flowinfo; in ip6gre_tnl_copy_tnl_parm()
1194 t->parms.link = p->link; in ip6gre_tnl_copy_tnl_parm()
1195 t->parms.proto = p->proto; in ip6gre_tnl_copy_tnl_parm()
1196 t->parms.i_key = p->i_key; in ip6gre_tnl_copy_tnl_parm()
1197 t->parms.o_key = p->o_key; in ip6gre_tnl_copy_tnl_parm()
1198 ip_tunnel_flags_copy(t->parms.i_flags, p->i_flags); in ip6gre_tnl_copy_tnl_parm()
1199 ip_tunnel_flags_copy(t->parms.o_flags, p->o_flags); in ip6gre_tnl_copy_tnl_parm()
1200 t->parms.fwmark = p->fwmark; in ip6gre_tnl_copy_tnl_parm()
1201 t->parms.erspan_ver = p->erspan_ver; in ip6gre_tnl_copy_tnl_parm()
1202 t->parms.index = p->index; in ip6gre_tnl_copy_tnl_parm()
1203 t->parms.dir = p->dir; in ip6gre_tnl_copy_tnl_parm()
1204 t->parms.hwid = p->hwid; in ip6gre_tnl_copy_tnl_parm()
1205 dst_cache_reset(&t->dst_cache); in ip6gre_tnl_copy_tnl_parm()
1208 static int ip6gre_tnl_change(struct ip6_tnl *t, const struct __ip6_tnl_parm *p, in ip6gre_tnl_change() argument
1211 ip6gre_tnl_copy_tnl_parm(t, p); in ip6gre_tnl_change()
1212 ip6gre_tnl_link_config(t, set_mtu); in ip6gre_tnl_change()
1258 struct ip6_tnl *t = netdev_priv(dev); in ip6gre_tunnel_siocdevprivate() local
1259 struct net *net = t->net; in ip6gre_tunnel_siocdevprivate()
1272 t = ip6gre_tunnel_locate(net, &p1, 0); in ip6gre_tunnel_siocdevprivate()
1273 if (!t) in ip6gre_tunnel_siocdevprivate()
1274 t = netdev_priv(dev); in ip6gre_tunnel_siocdevprivate()
1277 ip6gre_tnl_parm_to_user(&p, &t->parms); in ip6gre_tunnel_siocdevprivate()
1302 t = ip6gre_tunnel_locate(net, &p1, cmd == SIOCADDTUNNEL); in ip6gre_tunnel_siocdevprivate()
1305 if (t) { in ip6gre_tunnel_siocdevprivate()
1306 if (t->dev != dev) { in ip6gre_tunnel_siocdevprivate()
1311 t = netdev_priv(dev); in ip6gre_tunnel_siocdevprivate()
1313 ip6gre_tunnel_unlink(ign, t); in ip6gre_tunnel_siocdevprivate()
1315 ip6gre_tnl_change(t, &p1, 1); in ip6gre_tunnel_siocdevprivate()
1316 ip6gre_tunnel_link(ign, t); in ip6gre_tunnel_siocdevprivate()
1321 if (t) { in ip6gre_tunnel_siocdevprivate()
1325 ip6gre_tnl_parm_to_user(&p, &t->parms); in ip6gre_tunnel_siocdevprivate()
1343 t = ip6gre_tunnel_locate(net, &p1, 0); in ip6gre_tunnel_siocdevprivate()
1344 if (!t) in ip6gre_tunnel_siocdevprivate()
1347 if (t == netdev_priv(ign->fb_tunnel_dev)) in ip6gre_tunnel_siocdevprivate()
1349 dev = t->dev; in ip6gre_tunnel_siocdevprivate()
1367 struct ip6_tnl *t = netdev_priv(dev); in ip6gre_header() local
1371 ipv6h = skb_push(skb, t->hlen + sizeof(*ipv6h)); in ip6gre_header()
1373 t->fl.u.ip6.flowlabel, in ip6gre_header()
1374 true, &t->fl.u.ip6)); in ip6gre_header()
1375 ipv6h->hop_limit = t->parms.hop_limit; in ip6gre_header()
1377 ipv6h->saddr = t->parms.laddr; in ip6gre_header()
1378 ipv6h->daddr = t->parms.raddr; in ip6gre_header()
1381 p[0] = ip_tunnel_flags_to_be16(t->parms.o_flags); in ip6gre_header()
1393 return t->hlen; in ip6gre_header()
1395 return -t->hlen; in ip6gre_header()
1413 struct ip6_tnl *t = netdev_priv(dev); in ip6gre_dev_free() local
1415 gro_cells_destroy(&t->gro_cells); in ip6gre_dev_free()
1416 dst_cache_destroy(&t->dst_cache); in ip6gre_dev_free()
1558 struct ip6_tnl *t; in ip6gre_exit_rtnl_net() local
1560 t = rtnl_net_dereference(net, ign->tunnels[prio][h]); in ip6gre_exit_rtnl_net()
1562 while (t) { in ip6gre_exit_rtnl_net()
1566 if (!net_eq(dev_net(t->dev), net)) in ip6gre_exit_rtnl_net()
1567 unregister_netdevice_queue(t->dev, head); in ip6gre_exit_rtnl_net()
1569 t = rtnl_net_dereference(net, t->next); in ip6gre_exit_rtnl_net()
2003 struct ip6_tnl *t, *nt = netdev_priv(dev); in ip6gre_changelink_common() local
2020 t = ip6gre_tunnel_locate(net, p_p, 0); in ip6gre_changelink_common()
2022 if (t) { in ip6gre_changelink_common()
2023 if (t->dev != dev) in ip6gre_changelink_common()
2026 t = nt; in ip6gre_changelink_common()
2029 return t; in ip6gre_changelink_common()
2036 struct ip6_tnl *t = netdev_priv(dev); in ip6gre_changelink() local
2037 struct ip6gre_net *ign = net_generic(t->net, ip6gre_net_id); in ip6gre_changelink()
2040 t = ip6gre_changelink_common(dev, tb, data, &p, extack); in ip6gre_changelink()
2041 if (IS_ERR(t)) in ip6gre_changelink()
2042 return PTR_ERR(t); in ip6gre_changelink()
2044 ip6gre_tunnel_unlink_md(ign, t); in ip6gre_changelink()
2045 ip6gre_tunnel_unlink(ign, t); in ip6gre_changelink()
2046 ip6gre_tnl_change(t, &p, !tb[IFLA_MTU]); in ip6gre_changelink()
2047 ip6gre_tunnel_link_md(ign, t); in ip6gre_changelink()
2048 ip6gre_tunnel_link(ign, t); in ip6gre_changelink()
2105 struct ip6_tnl *t = netdev_priv(dev); in ip6gre_fill_info() local
2106 struct __ip6_tnl_parm *p = &t->parms; in ip6gre_fill_info()
2146 t->encap.type) || in ip6gre_fill_info()
2148 t->encap.sport) || in ip6gre_fill_info()
2150 t->encap.dport) || in ip6gre_fill_info()
2152 t->encap.flags)) in ip6gre_fill_info()
2237 static void ip6erspan_tnl_link_config(struct ip6_tnl *t, int set_mtu) in ip6erspan_tnl_link_config() argument
2239 ip6gre_tnl_link_config_common(t); in ip6erspan_tnl_link_config()
2240 ip6gre_tnl_link_config_route(t, set_mtu, ip6erspan_calc_hlen(t)); in ip6erspan_tnl_link_config()
2243 static int ip6erspan_tnl_change(struct ip6_tnl *t, in ip6erspan_tnl_change() argument
2246 ip6gre_tnl_copy_tnl_parm(t, p); in ip6erspan_tnl_change()
2247 ip6erspan_tnl_link_config(t, set_mtu); in ip6erspan_tnl_change()
2257 struct ip6_tnl *t; in ip6erspan_changelink() local
2259 t = ip6gre_changelink_common(dev, tb, data, &p, extack); in ip6erspan_changelink()
2260 if (IS_ERR(t)) in ip6erspan_changelink()
2261 return PTR_ERR(t); in ip6erspan_changelink()
2264 ip6gre_tunnel_unlink_md(ign, t); in ip6erspan_changelink()
2265 ip6gre_tunnel_unlink(ign, t); in ip6erspan_changelink()
2266 ip6erspan_tnl_change(t, &p, !tb[IFLA_MTU]); in ip6erspan_changelink()
2267 ip6erspan_tunnel_link_md(ign, t); in ip6erspan_changelink()
2268 ip6gre_tunnel_link(ign, t); in ip6erspan_changelink()