ip6_gre.c (188933ac139a6f8ab06cad369bd0200af947b00d) ip6_gre.c (63159f29be1df7f93563a8a0f78c5e65fc844ed6)
1/*
2 * GRE over IPv6 protocol decoder.
3 *
4 * Authors: Dmitry Kozlov (xeb@mail.ru)
5 *
6 * This program is free software; you can redistribute it and/or
7 * modify it under the terms of the GNU General Public License
8 * as published by the Free Software Foundation; either version

--- 381 unchanged lines hidden (view full) ---

390 return;
391 ipv6h = (const struct ipv6hdr *)skb->data;
392 p = (__be16 *)(skb->data + offset);
393
394 t = ip6gre_tunnel_lookup(skb->dev, &ipv6h->daddr, &ipv6h->saddr,
395 flags & GRE_KEY ?
396 *(((__be32 *)p) + (grehlen / 4) - 1) : 0,
397 p[1]);
1/*
2 * GRE over IPv6 protocol decoder.
3 *
4 * Authors: Dmitry Kozlov (xeb@mail.ru)
5 *
6 * This program is free software; you can redistribute it and/or
7 * modify it under the terms of the GNU General Public License
8 * as published by the Free Software Foundation; either version

--- 381 unchanged lines hidden (view full) ---

390 return;
391 ipv6h = (const struct ipv6hdr *)skb->data;
392 p = (__be16 *)(skb->data + offset);
393
394 t = ip6gre_tunnel_lookup(skb->dev, &ipv6h->daddr, &ipv6h->saddr,
395 flags & GRE_KEY ?
396 *(((__be32 *)p) + (grehlen / 4) - 1) : 0,
397 p[1]);
398 if (t == NULL)
398 if (!t)
399 return;
400
401 switch (type) {
402 __u32 teli;
403 struct ipv6_tlv_tnl_enc_lim *tel;
404 __u32 mtu;
405 case ICMPV6_DEST_UNREACH:
406 net_warn_ratelimited("%s: Path to destination invalid or inactive!\n",

--- 568 unchanged lines hidden (view full) ---

975 if (p->flags & IP6_TNL_F_CAP_XMIT) {
976 int strict = (ipv6_addr_type(&p->raddr) &
977 (IPV6_ADDR_MULTICAST|IPV6_ADDR_LINKLOCAL));
978
979 struct rt6_info *rt = rt6_lookup(t->net,
980 &p->raddr, &p->laddr,
981 p->link, strict);
982
399 return;
400
401 switch (type) {
402 __u32 teli;
403 struct ipv6_tlv_tnl_enc_lim *tel;
404 __u32 mtu;
405 case ICMPV6_DEST_UNREACH:
406 net_warn_ratelimited("%s: Path to destination invalid or inactive!\n",

--- 568 unchanged lines hidden (view full) ---

975 if (p->flags & IP6_TNL_F_CAP_XMIT) {
976 int strict = (ipv6_addr_type(&p->raddr) &
977 (IPV6_ADDR_MULTICAST|IPV6_ADDR_LINKLOCAL));
978
979 struct rt6_info *rt = rt6_lookup(t->net,
980 &p->raddr, &p->laddr,
981 p->link, strict);
982
983 if (rt == NULL)
983 if (!rt)
984 return;
985
986 if (rt->dst.dev) {
987 dev->hard_header_len = rt->dst.dev->hard_header_len + addend;
988
989 if (set_mtu) {
990 dev->mtu = rt->dst.dev->mtu - addend;
991 if (!(t->parms.flags & IP6_TNL_F_IGN_ENCAP_LIMIT))

--- 76 unchanged lines hidden (view full) ---

1068 case SIOCGETTUNNEL:
1069 if (dev == ign->fb_tunnel_dev) {
1070 if (copy_from_user(&p, ifr->ifr_ifru.ifru_data, sizeof(p))) {
1071 err = -EFAULT;
1072 break;
1073 }
1074 ip6gre_tnl_parm_from_user(&p1, &p);
1075 t = ip6gre_tunnel_locate(net, &p1, 0);
984 return;
985
986 if (rt->dst.dev) {
987 dev->hard_header_len = rt->dst.dev->hard_header_len + addend;
988
989 if (set_mtu) {
990 dev->mtu = rt->dst.dev->mtu - addend;
991 if (!(t->parms.flags & IP6_TNL_F_IGN_ENCAP_LIMIT))

--- 76 unchanged lines hidden (view full) ---

1068 case SIOCGETTUNNEL:
1069 if (dev == ign->fb_tunnel_dev) {
1070 if (copy_from_user(&p, ifr->ifr_ifru.ifru_data, sizeof(p))) {
1071 err = -EFAULT;
1072 break;
1073 }
1074 ip6gre_tnl_parm_from_user(&p1, &p);
1075 t = ip6gre_tunnel_locate(net, &p1, 0);
1076 if (t == NULL)
1076 if (!t)
1077 t = netdev_priv(dev);
1078 }
1079 memset(&p, 0, sizeof(p));
1080 ip6gre_tnl_parm_to_user(&p, &t->parms);
1081 if (copy_to_user(ifr->ifr_ifru.ifru_data, &p, sizeof(p)))
1082 err = -EFAULT;
1083 break;
1084

--- 54 unchanged lines hidden (view full) ---

1139
1140 if (dev == ign->fb_tunnel_dev) {
1141 err = -EFAULT;
1142 if (copy_from_user(&p, ifr->ifr_ifru.ifru_data, sizeof(p)))
1143 goto done;
1144 err = -ENOENT;
1145 ip6gre_tnl_parm_from_user(&p1, &p);
1146 t = ip6gre_tunnel_locate(net, &p1, 0);
1077 t = netdev_priv(dev);
1078 }
1079 memset(&p, 0, sizeof(p));
1080 ip6gre_tnl_parm_to_user(&p, &t->parms);
1081 if (copy_to_user(ifr->ifr_ifru.ifru_data, &p, sizeof(p)))
1082 err = -EFAULT;
1083 break;
1084

--- 54 unchanged lines hidden (view full) ---

1139
1140 if (dev == ign->fb_tunnel_dev) {
1141 err = -EFAULT;
1142 if (copy_from_user(&p, ifr->ifr_ifru.ifru_data, sizeof(p)))
1143 goto done;
1144 err = -ENOENT;
1145 ip6gre_tnl_parm_from_user(&p1, &p);
1146 t = ip6gre_tunnel_locate(net, &p1, 0);
1147 if (t == NULL)
1147 if (!t)
1148 goto done;
1149 err = -EPERM;
1150 if (t == netdev_priv(ign->fb_tunnel_dev))
1151 goto done;
1152 dev = t->dev;
1153 }
1154 unregister_netdevice(dev);
1155 err = 0;

--- 582 unchanged lines hidden ---
1148 goto done;
1149 err = -EPERM;
1150 if (t == netdev_priv(ign->fb_tunnel_dev))
1151 goto done;
1152 dev = t->dev;
1153 }
1154 unregister_netdevice(dev);
1155 err = 0;

--- 582 unchanged lines hidden ---