]> git.karo-electronics.de Git - mv-sheeva.git/blobdiff - net/ipv4/ip_gre.c
Merge tag 'v2.6.38' of git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux-2.6
[mv-sheeva.git] / net / ipv4 / ip_gre.c
index 70ff77f02eee3b345fa94efd35563a95b2b582ef..d1d0e2c256fc4080033a01a621f73b1c3b080b7e 100644 (file)
@@ -405,11 +405,11 @@ static struct ip_tunnel *ipgre_tunnel_locate(struct net *net,
        if (parms->name[0])
                strlcpy(name, parms->name, IFNAMSIZ);
        else
-               sprintf(name, "gre%%d");
+               strcpy(name, "gre%d");
 
        dev = alloc_netdev(sizeof(*t), name, ipgre_tunnel_setup);
        if (!dev)
-         return NULL;
+               return NULL;
 
        dev_net_set(dev, net);
 
@@ -634,7 +634,7 @@ static int ipgre_rcv(struct sk_buff *skb)
 #ifdef CONFIG_NET_IPGRE_BROADCAST
                if (ipv4_is_multicast(iph->daddr)) {
                        /* Looped back packet, drop it! */
-                       if (skb_rtable(skb)->fl.iif == 0)
+                       if (rt_is_output_route(skb_rtable(skb)))
                                goto drop;
                        tunnel->dev->stats.multicast++;
                        skb->pkt_type = PACKET_BROADCAST;
@@ -772,16 +772,12 @@ static netdev_tx_t ipgre_tunnel_xmit(struct sk_buff *skb, struct net_device *dev
        {
                struct flowi fl = {
                        .oif = tunnel->parms.link,
-                       .nl_u = {
-                               .ip4_u = {
-                                       .daddr = dst,
-                                       .saddr = tiph->saddr,
-                                       .tos = RT_TOS(tos)
-                               }
-                       },
-                       .proto = IPPROTO_GRE
-               }
-;
+                       .fl4_dst = dst,
+                       .fl4_src = tiph->saddr,
+                       .fl4_tos = RT_TOS(tos),
+                       .proto = IPPROTO_GRE,
+                       .fl_gre_key = tunnel->parms.o_key
+               };
                if (ip_route_output_key(dev_net(dev), &rt, &fl)) {
                        dev->stats.tx_carrier_errors++;
                        goto tx_error;
@@ -823,7 +819,7 @@ static netdev_tx_t ipgre_tunnel_xmit(struct sk_buff *skb, struct net_device *dev
                             !ipv4_is_multicast(tunnel->parms.iph.daddr)) ||
                            rt6->rt6i_dst.plen == 128) {
                                rt6->rt6i_flags |= RTF_MODIFIED;
-                               skb_dst(skb)->metrics[RTAX_MTU-1] = mtu;
+                               dst_metric_set(skb_dst(skb), RTAX_MTU, mtu);
                        }
                }
 
@@ -895,7 +891,7 @@ static netdev_tx_t ipgre_tunnel_xmit(struct sk_buff *skb, struct net_device *dev
                        iph->ttl = ((struct ipv6hdr *)old_iph)->hop_limit;
 #endif
                else
-                       iph->ttl = dst_metric(&rt->dst, RTAX_HOPLIMIT);
+                       iph->ttl = ip4_dst_hoplimit(&rt->dst);
        }
 
        ((__be16 *)(iph + 1))[0] = tunnel->parms.o_flags;
@@ -951,14 +947,11 @@ static int ipgre_tunnel_bind_dev(struct net_device *dev)
        if (iph->daddr) {
                struct flowi fl = {
                        .oif = tunnel->parms.link,
-                       .nl_u = {
-                               .ip4_u = {
-                                       .daddr = iph->daddr,
-                                       .saddr = iph->saddr,
-                                       .tos = RT_TOS(iph->tos)
-                               }
-                       },
-                       .proto = IPPROTO_GRE
+                       .fl4_dst = iph->daddr,
+                       .fl4_src = iph->saddr,
+                       .fl4_tos = RT_TOS(iph->tos),
+                       .proto = IPPROTO_GRE,
+                       .fl_gre_key = tunnel->parms.o_key
                };
                struct rtable *rt;
 
@@ -1216,14 +1209,11 @@ static int ipgre_open(struct net_device *dev)
        if (ipv4_is_multicast(t->parms.iph.daddr)) {
                struct flowi fl = {
                        .oif = t->parms.link,
-                       .nl_u = {
-                               .ip4_u = {
-                                       .daddr = t->parms.iph.daddr,
-                                       .saddr = t->parms.iph.saddr,
-                                       .tos = RT_TOS(t->parms.iph.tos)
-                               }
-                       },
-                       .proto = IPPROTO_GRE
+                       .fl4_dst = t->parms.iph.daddr,
+                       .fl4_src = t->parms.iph.saddr,
+                       .fl4_tos = RT_TOS(t->parms.iph.tos),
+                       .proto = IPPROTO_GRE,
+                       .fl_gre_key = t->parms.o_key
                };
                struct rtable *rt;
 
@@ -1775,3 +1765,4 @@ module_exit(ipgre_fini);
 MODULE_LICENSE("GPL");
 MODULE_ALIAS_RTNL_LINK("gre");
 MODULE_ALIAS_RTNL_LINK("gretap");
+MODULE_ALIAS_NETDEV("gre0");