Skip LSA host<->network endianity conversions on big endians.
This commit is contained in:
parent
c1b51598d4
commit
4e5fb4b60c
2 changed files with 16 additions and 2 deletions
|
@ -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));
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|
|
@ -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
|
||||||
|
|
Loading…
Reference in a new issue