]> git.karo-electronics.de Git - mv-sheeva.git/blobdiff - net/ipv4/ipmr.c
ip: take care of last fragment in ip_append_data
[mv-sheeva.git] / net / ipv4 / ipmr.c
index 7f6273506eea46522a17ff85b9a451cb18fdc7d3..10b24c02deb089c2da19500f78a976e226d45de0 100644 (file)
@@ -724,7 +724,7 @@ static int vif_add(struct net *net, struct mr_table *mrt,
        case 0:
                if (vifc->vifc_flags == VIFF_USE_IFINDEX) {
                        dev = dev_get_by_index(net, vifc->vifc_lcl_ifindex);
-                       if (dev && dev->ip_ptr == NULL) {
+                       if (dev && __in_dev_get_rtnl(dev) == NULL) {
                                dev_put(dev);
                                return -EADDRNOTAVAIL;
                        }
@@ -1555,9 +1555,9 @@ static void ipmr_queue_xmit(struct net *net, struct mr_table *mrt,
                        goto out_free;
        }
 
-       dev = rt->u.dst.dev;
+       dev = rt->dst.dev;
 
-       if (skb->len+encap > dst_mtu(&rt->u.dst) && (ntohs(iph->frag_off) & IP_DF)) {
+       if (skb->len+encap > dst_mtu(&rt->dst) && (ntohs(iph->frag_off) & IP_DF)) {
                /* Do not fragment multicasts. Alas, IPv4 does not
                   allow to send ICMP, so that packets will disappear
                   to blackhole.
@@ -1568,7 +1568,7 @@ static void ipmr_queue_xmit(struct net *net, struct mr_table *mrt,
                goto out_free;
        }
 
-       encap += LL_RESERVED_SPACE(dev) + rt->u.dst.header_len;
+       encap += LL_RESERVED_SPACE(dev) + rt->dst.header_len;
 
        if (skb_cow(skb, encap)) {
                ip_rt_put(rt);
@@ -1579,7 +1579,7 @@ static void ipmr_queue_xmit(struct net *net, struct mr_table *mrt,
        vif->bytes_out += skb->len;
 
        skb_dst_drop(skb);
-       skb_dst_set(skb, &rt->u.dst);
+       skb_dst_set(skb, &rt->dst);
        ip_decrease_ttl(ip_hdr(skb));
 
        /* FIXME: forward and output firewalls used to be called here.