[PATCH] netpoll endian fixes

From: Duncan Sands
Date: Tue Sep 07 2004 - 18:27:27 EST


The big-endians took their revenge in netpoll.c: on i386,
the ip header length / version nibbles need to be the other
way round; and the htonl leaves only zeros in tot_len...

All the best,

Duncan.


--- linux-2.5/net/core/netpoll.c.orig 2004-09-08 01:15:22.000000000 +0200
+++ linux-2.5/net/core/netpoll.c 2004-09-08 01:05:33.000000000 +0200
@@ -22,6 +22,7 @@
#include <net/tcp.h>
#include <net/udp.h>
#include <asm/unaligned.h>
+#include <asm/byteorder.h>

/*
* We maintain a small pool of fully-sized skbs, to make sure the
@@ -242,9 +243,13 @@
iph = (struct iphdr *)skb_push(skb, sizeof(*iph));

/* iph->version = 4; iph->ihl = 5; */
+#if defined(__LITTLE_ENDIAN_BITFIELD)
+ put_unaligned(0x45, (unsigned char *)iph);
+#else
put_unaligned(0x54, (unsigned char *)iph);
+#endif
iph->tos = 0;
- put_unaligned(htonl(ip_len), &(iph->tot_len));
+ put_unaligned(htons(ip_len), &(iph->tot_len));
iph->id = 0;
iph->frag_off = 0;
iph->ttl = 64;
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/