On Fri, 5 Sep 2003, David Rohleder wrote:
Rani Assaf <rani@paname.org> writes:
Hello,
The attached patch fixes two (big-)endianess issues in OSPF which lead bird to stuck in EXSTART state.
Patch tested on a PPC machine against a Cisco router.
I think that preffered way would be to use correct ntoh(3) library call while receiving LSA packet. Still doesn't matter, because BIRD
It's not so easy, try to look into the code.
doesn't support multiple OSPF areas :-( (as far as i know).
How do the two things correlate?
Regards, Rani
diff -ru bird-1.0.7/proto/ospf/lsalib.c bird-1.0.7-debian/proto/ospf/lsalib.c --- bird-1.0.7/proto/ospf/lsalib.c 2003-08-14 10:13:14.000000000 +0200 +++ bird-1.0.7-debian/proto/ospf/lsalib.c 2003-09-02 03:54:22.000000000 +0200 @@ -7,6 +7,7 @@ */
#include "ospf.h" +#include <stdlib.h>
void flush_lsa(struct top_hash_entry *en, struct ospf_area *oa) @@ -376,7 +377,11 @@ y = 510 - c0 - x; if (y > 255) y -= 255;
+#ifdef CPU_LITTLE_ENDIAN chsum= x + (y << 8); +#else + chsum= y + (x << 8); +#endif h->checksum = chsum; return chsum; } diff -ru bird-1.0.7/proto/ospf/ospf.h bird-1.0.7-debian/proto/ospf/ospf.h --- bird-1.0.7/proto/ospf/ospf.h 2003-08-14 10:13:14.000000000 +0200 +++ bird-1.0.7-debian/proto/ospf/ospf.h 2003-09-02 03:14:10.000000000 +0200 @@ -178,10 +178,17 @@ };
struct immsb { +#ifdef CPU_LITTLE_ENDIAN u8 ms:1; u8 m:1; u8 i:1; u8 padding:5; +#else + u8 padding:5; + u8 i:1; + u8 m:1; + u8 ms:1; +#endif };
union imms { @@ -223,10 +230,17 @@ };
struct vebb { +#ifdef CPU_LITTLE_ENDIAN u8 b:1; u8 e:1; u8 v:1; u8 padding:5; +#else + u8 padding:5; + u8 v:1; + u8 e:1; + u8 b:1; +#endif };
union veb {