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 doesn't support multiple OSPF areas :-( (as far as i know).
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 {
-- ------------------------------------------------------------------------- David Rohleder davro@ics.muni.cz Institute of Computer Science, Masaryk University Brno, Czech Republic -------------------------------------------------------------------------