]> git.ipfire.org Git - thirdparty/bird.git/commitdiff
Skip LSA host<->network endianity conversions on big endians.
authorOndrej Zajicek <santiago@crfreenet.org>
Sun, 25 Apr 2010 18:12:34 +0000 (20:12 +0200)
committerOndrej Zajicek <santiago@crfreenet.org>
Sun, 25 Apr 2010 18:12:34 +0000 (20:12 +0200)
proto/ospf/lsalib.c
proto/ospf/lsalib.h

index 53c25623c000b9c468a4357ee36a30c5b96dcce5..c932fe040a2709576e937fec454b580b66a81c06 100644 (file)
@@ -87,6 +87,7 @@ ospf_age(struct proto_ospf *po)
   }
 }
 
+#ifndef CPU_BIG_ENDIAN
 void
 htonlsah(struct ospf_lsa_header *h, struct ospf_lsa_header *n)
 {
@@ -138,6 +139,7 @@ ntohlsab(void *n, void *h, u16 len)
   for (i = 0; i < (len / sizeof(u32)); i++)
     hid[i] = ntohl(nid[i]);
 }
+#endif /* little endian */
 
 /*
 void
@@ -184,7 +186,7 @@ lsasum_calculate(struct ospf_lsa_header *h, void *body)
 
   //  log(L_WARN "Checksum %R %R %d start (len %d)", h->id, h->rt, h->type, length);
   htonlsah(h, h);
-  htonlsab(body, body, length - sizeof(struct ospf_lsa_header));
+  htonlsab1(body, length - sizeof(struct ospf_lsa_header));
 
   /*
   char buf[1024];
@@ -198,7 +200,7 @@ lsasum_calculate(struct ospf_lsa_header *h, void *body)
   //  log(L_WARN "Checksum result %4x", h->checksum);
 
   ntohlsah(h, h);
-  ntohlsab(body, body, length - sizeof(struct ospf_lsa_header));
+  ntohlsab1(body, length - sizeof(struct ospf_lsa_header));
 }
 
 /*
index a799de31ea875bdec73c57eaadaf7ab7e82f9165..f98a1bd30451e4bea6930a6e38baa7bd4c679704 100644 (file)
 #ifndef _BIRD_OSPF_LSALIB_H_
 #define _BIRD_OSPF_LSALIB_H_
 
+#ifdef CPU_BIG_ENDIAN
+static inline void htonlsah(struct ospf_lsa_header *h, struct ospf_lsa_header *n) { *n = *h; };
+static inline void ntohlsah(struct ospf_lsa_header *n, struct ospf_lsa_header *h) { *h = *n; };
+static inline void htonlsab(void *h, void *n, u16 len) { memcpy(n, h, len); };
+static inline void ntohlsab(void *n, void *h, u16 len) { memcpy(h, n, len); };
+static inline void htonlsab1(void *h, u16 len) { };
+static inline void ntohlsab1(void *n, u16 len) { };
+#else
 void htonlsah(struct ospf_lsa_header *h, struct ospf_lsa_header *n);
 void ntohlsah(struct ospf_lsa_header *n, struct ospf_lsa_header *h);
 void htonlsab(void *h, void *n, u16 len);
 void ntohlsab(void *n, void *h, u16 len);
+static inline void htonlsab1(void *h, u16 len) { htonlsab(h, h, len); };
+static inline void ntohlsab1(void *n, u16 len) { ntohlsab(n, n, len); };
+#endif
+
 void lsasum_calculate(struct ospf_lsa_header *header, void *body);
 u16 lsasum_check(struct ospf_lsa_header *h, void *body);
 #define CMP_NEWER 1