Skip LSA host<->network endianity conversions on big endians.

This commit is contained in:
Ondrej Zajicek 2010-04-25 20:12:34 +02:00
parent c1b51598d4
commit 4e5fb4b60c
2 changed files with 16 additions and 2 deletions

View file

@ -87,6 +87,7 @@ ospf_age(struct proto_ospf *po)
} }
} }
#ifndef CPU_BIG_ENDIAN
void void
htonlsah(struct ospf_lsa_header *h, struct ospf_lsa_header *n) 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++) for (i = 0; i < (len / sizeof(u32)); i++)
hid[i] = ntohl(nid[i]); hid[i] = ntohl(nid[i]);
} }
#endif /* little endian */
/* /*
void 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); // log(L_WARN "Checksum %R %R %d start (len %d)", h->id, h->rt, h->type, length);
htonlsah(h, h); htonlsah(h, h);
htonlsab(body, body, length - sizeof(struct ospf_lsa_header)); htonlsab1(body, length - sizeof(struct ospf_lsa_header));
/* /*
char buf[1024]; char buf[1024];
@ -198,7 +200,7 @@ lsasum_calculate(struct ospf_lsa_header *h, void *body)
// log(L_WARN "Checksum result %4x", h->checksum); // log(L_WARN "Checksum result %4x", h->checksum);
ntohlsah(h, h); ntohlsah(h, h);
ntohlsab(body, body, length - sizeof(struct ospf_lsa_header)); ntohlsab1(body, length - sizeof(struct ospf_lsa_header));
} }
/* /*

View file

@ -10,10 +10,22 @@
#ifndef _BIRD_OSPF_LSALIB_H_ #ifndef _BIRD_OSPF_LSALIB_H_
#define _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 htonlsah(struct ospf_lsa_header *h, struct ospf_lsa_header *n);
void ntohlsah(struct ospf_lsa_header *n, struct ospf_lsa_header *h); void ntohlsah(struct ospf_lsa_header *n, struct ospf_lsa_header *h);
void htonlsab(void *h, void *n, u16 len); void htonlsab(void *h, void *n, u16 len);
void ntohlsab(void *n, void *h, 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); void lsasum_calculate(struct ospf_lsa_header *header, void *body);
u16 lsasum_check(struct ospf_lsa_header *h, void *body); u16 lsasum_check(struct ospf_lsa_header *h, void *body);
#define CMP_NEWER 1 #define CMP_NEWER 1