sit.c (188933ac139a6f8ab06cad369bd0200af947b00d) sit.c (63159f29be1df7f93563a8a0f78c5e65fc844ed6)
1/*
2 * IPv6 over IPv4 tunnel device - Simple Internet Transition (SIT)
3 * Linux INET6 implementation
4 *
5 * Authors:
6 * Pedro Roque <roque@di.fc.ul.pt>
7 * Alexey Kuznetsov <kuznet@ms2.inr.ac.ru>
8 *

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

246
247 if (parms->name[0])
248 strlcpy(name, parms->name, IFNAMSIZ);
249 else
250 strcpy(name, "sit%d");
251
252 dev = alloc_netdev(sizeof(*t), name, NET_NAME_UNKNOWN,
253 ipip6_tunnel_setup);
1/*
2 * IPv6 over IPv4 tunnel device - Simple Internet Transition (SIT)
3 * Linux INET6 implementation
4 *
5 * Authors:
6 * Pedro Roque <roque@di.fc.ul.pt>
7 * Alexey Kuznetsov <kuznet@ms2.inr.ac.ru>
8 *

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

246
247 if (parms->name[0])
248 strlcpy(name, parms->name, IFNAMSIZ);
249 else
250 strcpy(name, "sit%d");
251
252 dev = alloc_netdev(sizeof(*t), name, NET_NAME_UNKNOWN,
253 ipip6_tunnel_setup);
254 if (dev == NULL)
254 if (!dev)
255 return NULL;
256
257 dev_net_set(dev, net);
258
259 nt = netdev_priv(dev);
260
261 nt->parms = *parms;
262 if (ipip6_tunnel_create(dev) < 0)

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

550 }
551
552 err = -ENOENT;
553
554 t = ipip6_tunnel_lookup(dev_net(skb->dev),
555 skb->dev,
556 iph->daddr,
557 iph->saddr);
255 return NULL;
256
257 dev_net_set(dev, net);
258
259 nt = netdev_priv(dev);
260
261 nt->parms = *parms;
262 if (ipip6_tunnel_create(dev) < 0)

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

550 }
551
552 err = -ENOENT;
553
554 t = ipip6_tunnel_lookup(dev_net(skb->dev),
555 skb->dev,
556 iph->daddr,
557 iph->saddr);
558 if (t == NULL)
558 if (!t)
559 goto out;
560
561 if (type == ICMP_DEST_UNREACH && code == ICMP_FRAG_NEEDED) {
562 ipv4_update_pmtu(skb, dev_net(skb->dev), info,
563 t->parms.link, 0, IPPROTO_IPV6, 0);
564 err = 0;
565 goto out;
566 }

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

833 /* ISATAP (RFC4214) - must come before 6to4 */
834 if (dev->priv_flags & IFF_ISATAP) {
835 struct neighbour *neigh = NULL;
836 bool do_tx_error = false;
837
838 if (skb_dst(skb))
839 neigh = dst_neigh_lookup(skb_dst(skb), &iph6->daddr);
840
559 goto out;
560
561 if (type == ICMP_DEST_UNREACH && code == ICMP_FRAG_NEEDED) {
562 ipv4_update_pmtu(skb, dev_net(skb->dev), info,
563 t->parms.link, 0, IPPROTO_IPV6, 0);
564 err = 0;
565 goto out;
566 }

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

833 /* ISATAP (RFC4214) - must come before 6to4 */
834 if (dev->priv_flags & IFF_ISATAP) {
835 struct neighbour *neigh = NULL;
836 bool do_tx_error = false;
837
838 if (skb_dst(skb))
839 neigh = dst_neigh_lookup(skb_dst(skb), &iph6->daddr);
840
841 if (neigh == NULL) {
841 if (!neigh) {
842 net_dbg_ratelimited("nexthop == NULL\n");
843 goto tx_error;
844 }
845
846 addr6 = (const struct in6_addr *)&neigh->primary_key;
847 addr_type = ipv6_addr_type(addr6);
848
849 if ((addr_type & IPV6_ADDR_UNICAST) &&

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

862
863 if (!dst) {
864 struct neighbour *neigh = NULL;
865 bool do_tx_error = false;
866
867 if (skb_dst(skb))
868 neigh = dst_neigh_lookup(skb_dst(skb), &iph6->daddr);
869
842 net_dbg_ratelimited("nexthop == NULL\n");
843 goto tx_error;
844 }
845
846 addr6 = (const struct in6_addr *)&neigh->primary_key;
847 addr_type = ipv6_addr_type(addr6);
848
849 if ((addr_type & IPV6_ADDR_UNICAST) &&

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

862
863 if (!dst) {
864 struct neighbour *neigh = NULL;
865 bool do_tx_error = false;
866
867 if (skb_dst(skb))
868 neigh = dst_neigh_lookup(skb_dst(skb), &iph6->daddr);
869
870 if (neigh == NULL) {
870 if (!neigh) {
871 net_dbg_ratelimited("nexthop == NULL\n");
872 goto tx_error;
873 }
874
875 addr6 = (const struct in6_addr *)&neigh->primary_key;
876 addr_type = ipv6_addr_type(addr6);
877
878 if (addr_type == IPV6_ADDR_ANY) {

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

1153 case SIOCGET6RD:
1154#endif
1155 if (dev == sitn->fb_tunnel_dev) {
1156 if (copy_from_user(&p, ifr->ifr_ifru.ifru_data, sizeof(p))) {
1157 err = -EFAULT;
1158 break;
1159 }
1160 t = ipip6_tunnel_locate(net, &p, 0);
871 net_dbg_ratelimited("nexthop == NULL\n");
872 goto tx_error;
873 }
874
875 addr6 = (const struct in6_addr *)&neigh->primary_key;
876 addr_type = ipv6_addr_type(addr6);
877
878 if (addr_type == IPV6_ADDR_ANY) {

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

1153 case SIOCGET6RD:
1154#endif
1155 if (dev == sitn->fb_tunnel_dev) {
1156 if (copy_from_user(&p, ifr->ifr_ifru.ifru_data, sizeof(p))) {
1157 err = -EFAULT;
1158 break;
1159 }
1160 t = ipip6_tunnel_locate(net, &p, 0);
1161 if (t == NULL)
1161 if (!t)
1162 t = netdev_priv(dev);
1163 }
1164
1165 err = -EFAULT;
1166 if (cmd == SIOCGETTUNNEL) {
1167 memcpy(&p, &t->parms, sizeof(p));
1168 if (copy_to_user(ifr->ifr_ifru.ifru_data, &p,
1169 sizeof(p)))

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

1237 goto done;
1238
1239 if (dev == sitn->fb_tunnel_dev) {
1240 err = -EFAULT;
1241 if (copy_from_user(&p, ifr->ifr_ifru.ifru_data, sizeof(p)))
1242 goto done;
1243 err = -ENOENT;
1244 t = ipip6_tunnel_locate(net, &p, 0);
1162 t = netdev_priv(dev);
1163 }
1164
1165 err = -EFAULT;
1166 if (cmd == SIOCGETTUNNEL) {
1167 memcpy(&p, &t->parms, sizeof(p));
1168 if (copy_to_user(ifr->ifr_ifru.ifru_data, &p,
1169 sizeof(p)))

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

1237 goto done;
1238
1239 if (dev == sitn->fb_tunnel_dev) {
1240 err = -EFAULT;
1241 if (copy_from_user(&p, ifr->ifr_ifru.ifru_data, sizeof(p)))
1242 goto done;
1243 err = -ENOENT;
1244 t = ipip6_tunnel_locate(net, &p, 0);
1245 if (t == NULL)
1245 if (!t)
1246 goto done;
1247 err = -EPERM;
1248 if (t == netdev_priv(sitn->fb_tunnel_dev))
1249 goto done;
1250 dev = t->dev;
1251 }
1252 unregister_netdevice(dev);
1253 err = 0;

--- 671 unchanged lines hidden ---
1246 goto done;
1247 err = -EPERM;
1248 if (t == netdev_priv(sitn->fb_tunnel_dev))
1249 goto done;
1250 dev = t->dev;
1251 }
1252 unregister_netdevice(dev);
1253 err = 0;

--- 671 unchanged lines hidden ---