2000-03-31 00:21:41 +00:00
|
|
|
/*
|
|
|
|
* BIRD -- OSPF
|
|
|
|
*
|
2000-06-07 22:31:47 +00:00
|
|
|
* (c) 1999 - 2000 Ondrej Filip <feela@network.cz>
|
2000-03-31 00:21:41 +00:00
|
|
|
*
|
|
|
|
* Can be freely distributed and used under the terms of the GNU GPL.
|
|
|
|
*
|
|
|
|
*/
|
|
|
|
|
|
|
|
#ifndef _BIRD_OSPF_LSALIB_H_
|
|
|
|
#define _BIRD_OSPF_LSALIB_H_
|
|
|
|
|
2010-04-25 18:12:34 +00:00
|
|
|
#ifdef CPU_BIG_ENDIAN
|
2012-10-02 09:44:05 +00:00
|
|
|
static inline void lsa_hton_hdr(struct ospf_lsa_header *h, struct ospf_lsa_header *n) { *n = *h; };
|
|
|
|
static inline void lsa_ntoh_hdr(struct ospf_lsa_header *n, struct ospf_lsa_header *h) { *h = *n; };
|
|
|
|
static inline void lsa_hton_body(void *h, void *n, u16 len) { ASSERT(h != n); memcpy(n, h, len); };
|
|
|
|
static inline void lsa_ntoh_body(void *n, void *h, u16 len) { ASSERT(n != h); memcpy(h, n, len); };
|
|
|
|
static inline void lsa_hton_body1(void *h, u16 len) { };
|
|
|
|
static inline void lsa_ntoh_body1(void *n, u16 len) { };
|
2010-04-25 18:12:34 +00:00
|
|
|
#else
|
2012-10-02 09:44:05 +00:00
|
|
|
void lsa_hton_hdr(struct ospf_lsa_header *h, struct ospf_lsa_header *n);
|
|
|
|
void lsa_ntoh_hdr(struct ospf_lsa_header *n, struct ospf_lsa_header *h);
|
|
|
|
void lsa_hton_body(void *h, void *n, u16 len);
|
|
|
|
void lsa_ntoh_body(void *n, void *h, u16 len);
|
|
|
|
static inline void lsa_hton_body1(void *h, u16 len) { lsa_hton_body(h, h, len); };
|
|
|
|
static inline void lsa_ntoh_body1(void *n, u16 len) { lsa_ntoh_body(n, n, len); };
|
2010-04-25 18:12:34 +00:00
|
|
|
#endif
|
|
|
|
|
2012-08-05 20:32:06 +00:00
|
|
|
struct ospf_lsa_rt_walk {
|
|
|
|
struct top_hash_entry *en;
|
|
|
|
void *buf, *bufend;
|
|
|
|
int ospf2;
|
|
|
|
u16 type, metric;
|
|
|
|
u32 id, data, lif, nif;
|
|
|
|
};
|
|
|
|
|
2012-10-02 09:44:05 +00:00
|
|
|
static inline u32 lsa_get_type(struct proto_ospf *po, u32 type_raw)
|
|
|
|
{ return ospf_is_v2(po) ? (type_raw & LSA_T_V2_MASK) : type_raw; }
|
|
|
|
|
|
|
|
int lsa_flooding_allowed(u32 type, u32 domain, struct ospf_iface *ifa);
|
|
|
|
void lsa_xxxxtype(u32 itype, struct ospf_iface *ifa, u32 *otype, u32 *domain);
|
2004-06-06 18:45:08 +00:00
|
|
|
void lsasum_calculate(struct ospf_lsa_header *header, void *body);
|
|
|
|
u16 lsasum_check(struct ospf_lsa_header *h, void *body);
|
2000-04-02 19:04:23 +00:00
|
|
|
#define CMP_NEWER 1
|
|
|
|
#define CMP_SAME 0
|
|
|
|
#define CMP_OLDER -1
|
|
|
|
int lsa_comp(struct ospf_lsa_header *l1, struct ospf_lsa_header *l2);
|
2012-08-05 20:32:06 +00:00
|
|
|
void lsa_walk_rt_init(struct proto_ospf *po, struct top_hash_entry *act, struct ospf_lsa_rt_walk *rt);
|
|
|
|
int lsa_walk_rt(struct ospf_lsa_rt_walk *rt);
|
|
|
|
void lsa_parse_sum_net(struct top_hash_entry *en, int ospf2, ip_addr *ip, int *pxlen, u8 *pxopts, u32 *metric);
|
|
|
|
void lsa_parse_sum_rt(struct top_hash_entry *en, int ospf2, u32 *drid, u32 *metric, u32 *options);
|
|
|
|
void lsa_parse_ext(struct top_hash_entry *en, int ospf2, struct ospf_lsa_ext_local *rt);
|
2012-10-02 09:44:05 +00:00
|
|
|
int lsa_validate(struct ospf_lsa_header *lsa, u32 lsa_type, int ospf2, void *body);
|
2009-08-21 07:27:52 +00:00
|
|
|
struct top_hash_entry * lsa_install_new(struct proto_ospf *po, struct ospf_lsa_header *lsa, u32 domain, void *body);
|
2004-07-15 16:37:52 +00:00
|
|
|
void ospf_age(struct proto_ospf *po);
|
|
|
|
void flush_lsa(struct top_hash_entry *en, struct proto_ospf *po);
|
2011-03-17 14:53:36 +00:00
|
|
|
void ospf_flush_area(struct proto_ospf *po, u32 areaid);
|
|
|
|
|
2000-03-31 00:21:41 +00:00
|
|
|
|
|
|
|
#endif /* _BIRD_OSPF_LSALIB_H_ */
|