]> pilppa.org Git - linux-2.6-omap-h63xx.git/blobdiff - net/ipv4/netfilter/nf_nat_proto_udp.c
[INET]: Omit double hash calculations in xxx_frag_intern
[linux-2.6-omap-h63xx.git] / net / ipv4 / netfilter / nf_nat_proto_udp.c
index ab0ce4c8699f5a34076e7a228041b4c77f9fae3f..cbf1a61e2908351ebc813800faf163121d614e82 100644 (file)
@@ -8,6 +8,7 @@
 
 #include <linux/types.h>
 #include <linux/init.h>
+#include <linux/random.h>
 #include <linux/ip.h>
 #include <linux/udp.h>
 
@@ -73,6 +74,9 @@ udp_unique_tuple(struct nf_conntrack_tuple *tuple,
                range_size = ntohs(range->max.udp.port) - min + 1;
        }
 
+       if (range->flags & IP_NAT_RANGE_PROTO_RANDOM)
+               port = net_random();
+
        for (i = 0; i < range_size; i++, port++) {
                *portptr = htons(min + port % range_size);
                if (!nf_nat_used_tuple(tuple, ct))
@@ -82,22 +86,22 @@ udp_unique_tuple(struct nf_conntrack_tuple *tuple,
 }
 
 static int
-udp_manip_pkt(struct sk_buff **pskb,
+udp_manip_pkt(struct sk_buff *skb,
              unsigned int iphdroff,
              const struct nf_conntrack_tuple *tuple,
              enum nf_nat_manip_type maniptype)
 {
-       struct iphdr *iph = (struct iphdr *)((*pskb)->data + iphdroff);
+       struct iphdr *iph = (struct iphdr *)(skb->data + iphdroff);
        struct udphdr *hdr;
        unsigned int hdroff = iphdroff + iph->ihl*4;
        __be32 oldip, newip;
        __be16 *portptr, newport;
 
-       if (!skb_make_writable(pskb, hdroff + sizeof(*hdr)))
+       if (!skb_make_writable(skb, hdroff + sizeof(*hdr)))
                return 0;
 
-       iph = (struct iphdr *)((*pskb)->data + iphdroff);
-       hdr = (struct udphdr *)((*pskb)->data + hdroff);
+       iph = (struct iphdr *)(skb->data + iphdroff);
+       hdr = (struct udphdr *)(skb->data + hdroff);
 
        if (maniptype == IP_NAT_MANIP_SRC) {
                /* Get rid of src ip and src pt */
@@ -112,9 +116,9 @@ udp_manip_pkt(struct sk_buff **pskb,
                newport = tuple->dst.u.udp.port;
                portptr = &hdr->dest;
        }
-       if (hdr->check || (*pskb)->ip_summed == CHECKSUM_PARTIAL) {
-               nf_proto_csum_replace4(&hdr->check, *pskb, oldip, newip, 1);
-               nf_proto_csum_replace2(&hdr->check, *pskb, *portptr, newport,
+       if (hdr->check || skb->ip_summed == CHECKSUM_PARTIAL) {
+               nf_proto_csum_replace4(&hdr->check, skb, oldip, newip, 1);
+               nf_proto_csum_replace2(&hdr->check, skb, *portptr, newport,
                                       0);
                if (!hdr->check)
                        hdr->check = CSUM_MANGLED_0;
@@ -130,9 +134,8 @@ struct nf_nat_protocol nf_nat_protocol_udp = {
        .manip_pkt              = udp_manip_pkt,
        .in_range               = udp_in_range,
        .unique_tuple           = udp_unique_tuple,
-#if defined(CONFIG_IP_NF_CONNTRACK_NETLINK) || \
-    defined(CONFIG_IP_NF_CONNTRACK_NETLINK_MODULE)
-       .range_to_nfattr        = nf_nat_port_range_to_nfattr,
-       .nfattr_to_range        = nf_nat_port_nfattr_to_range,
+#if defined(CONFIG_NF_CT_NETLINK) || defined(CONFIG_NF_CT_NETLINK_MODULE)
+       .range_to_nlattr        = nf_nat_port_range_to_nlattr,
+       .nlattr_to_range        = nf_nat_port_nlattr_to_range,
 #endif
 };