Statistics
| Branch: | Revision:

iof-bird / bird-2.0.1 / proto / ospf / lsalib.h @ 6b3f1a54

History | View | Annotate | Download (2.78 KB)

1
/*
2
 *      BIRD -- OSPF
3
 *
4
 *      (c) 1999--2000 Ondrej Filip <feela@network.cz>
5
 *        (c) 2009--2014 Ondrej Zajicek <santiago@crfreenet.org>
6
 *        (c) 2009--2014 CZ.NIC z.s.p.o.
7
 *
8
 *      Can be freely distributed and used under the terms of the GNU GPL.
9
 */
10

    
11
#ifndef _BIRD_OSPF_LSALIB_H_
12
#define _BIRD_OSPF_LSALIB_H_
13

    
14
#ifdef CPU_BIG_ENDIAN
15
static inline void lsa_hton_hdr(struct ospf_lsa_header *h, struct ospf_lsa_header *n) { *n = *h; };
16
static inline void lsa_ntoh_hdr(struct ospf_lsa_header *n, struct ospf_lsa_header *h) { *h = *n; };
17
static inline void lsa_hton_body(void *h, void *n, u16 len) { ASSERT(h != n); memcpy(n, h, len); };
18
static inline void lsa_ntoh_body(void *n, void *h, u16 len) { ASSERT(n != h); memcpy(h, n, len); };
19
static inline void lsa_hton_body1(void *h, u16 len) { };
20
static inline void lsa_ntoh_body1(void *n, u16 len) { };
21
#else
22
void lsa_hton_hdr(struct ospf_lsa_header *h, struct ospf_lsa_header *n);
23
void lsa_ntoh_hdr(struct ospf_lsa_header *n, struct ospf_lsa_header *h);
24
void lsa_hton_body(void *h, void *n, u16 len);
25
void lsa_ntoh_body(void *n, void *h, u16 len);
26
static inline void lsa_hton_body1(void *h, u16 len) { lsa_hton_body(h, h, len); };
27
static inline void lsa_ntoh_body1(void *n, u16 len) { lsa_ntoh_body(n, n, len); };
28
#endif
29

    
30
struct ospf_lsa_rt_walk {
31
  struct top_hash_entry *en;
32
  void *buf, *bufend;
33
  int ospf2;
34
  u16 type, metric;
35
  u32 id, data, lif, nif;
36
};
37

    
38

    
39
void lsa_get_type_domain_(u32 itype, struct ospf_iface *ifa, u32 *otype, u32 *domain);
40

    
41
static inline void lsa_get_type_domain(struct ospf_lsa_header *lsa, struct ospf_iface *ifa, u32 *otype, u32 *domain)
42
{ lsa_get_type_domain_(lsa->type_raw, ifa, otype, domain); }
43

    
44
static inline u32 lsa_get_etype(struct ospf_lsa_header *h, struct ospf_proto *p)
45
{ return ospf_is_v2(p) ? (h->type_raw & LSA_T_V2_MASK) : h->type_raw; }
46

    
47

    
48
int lsa_flooding_allowed(u32 type, u32 domain, struct ospf_iface *ifa);
49
void lsa_generate_checksum(struct ospf_lsa_header *lsa, const u8 *body);
50
u16 lsa_verify_checksum(const void *lsa_n, int lsa_len);
51

    
52
#define CMP_NEWER 1
53
#define CMP_SAME 0
54
#define CMP_OLDER -1
55
int lsa_comp(struct ospf_lsa_header *l1, struct ospf_lsa_header *l2);
56
void lsa_walk_rt_init(struct ospf_proto *po, struct top_hash_entry *act, struct ospf_lsa_rt_walk *rt);
57
int lsa_walk_rt(struct ospf_lsa_rt_walk *rt);
58
void lsa_parse_sum_net(struct top_hash_entry *en, int ospf2, int af, net_addr *net, u8 *pxopts, u32 *metric);
59
void lsa_parse_sum_rt(struct top_hash_entry *en, int ospf2, u32 *drid, u32 *metric, u32 *options);
60
void lsa_parse_ext(struct top_hash_entry *en, int ospf2, int af, struct ospf_lsa_ext_local *rt);
61
int lsa_validate(struct ospf_lsa_header *lsa, u32 lsa_type, int ospf2, void *body);
62

    
63
static inline btime lsa_inst_age(struct top_hash_entry *en)
64
{ return current_time() - en->inst_time; }
65

    
66
#endif /* _BIRD_OSPF_LSALIB_H_ */