File:  [ELWIX - Embedded LightWeight unIX -] / embedaddon / bird2 / proto / ospf / lsalib.h
Revision 1.1.1.1 (vendor branch): download - view: text, annotated - select for diffs - revision graph
Mon Oct 21 16:03:56 2019 UTC (5 years, 5 months ago) by misho
Branches: bird2, MAIN
CVS tags: v2_0_7p0, HEAD
bird2 ver 2.0.7

    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 type, u32 id, 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, lsa->id, 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: int lsa_is_opaque(u32 type);
   48: u32 lsa_get_opaque_type(u32 type);
   49: int lsa_flooding_allowed(u32 type, u32 domain, struct ospf_iface *ifa);
   50: int lsa_is_acceptable(u32 type, struct ospf_neighbor *n, struct ospf_proto *p);
   51: void lsa_generate_checksum(struct ospf_lsa_header *lsa, const u8 *body);
   52: u16 lsa_verify_checksum(const void *lsa_n, int lsa_len);
   53: 
   54: #define CMP_NEWER 1
   55: #define CMP_SAME 0
   56: #define CMP_OLDER -1
   57: int lsa_comp(struct ospf_lsa_header *l1, struct ospf_lsa_header *l2);
   58: 
   59: struct ospf_tlv * lsa_get_tlv(struct top_hash_entry *en, uint type);
   60: 
   61: static inline u32
   62: lsa_get_tlv_u32(struct top_hash_entry *en, uint type)
   63: {
   64:   struct ospf_tlv *tlv = lsa_get_tlv(en, type);
   65:   return (tlv && (tlv->length == 4)) ? tlv->data[0] : 0;
   66: }
   67: 
   68: void lsa_walk_rt_init(struct ospf_proto *po, struct top_hash_entry *act, struct ospf_lsa_rt_walk *rt);
   69: int lsa_walk_rt(struct ospf_lsa_rt_walk *rt);
   70: void lsa_parse_sum_net(struct top_hash_entry *en, int ospf2, int af, net_addr *net, u8 *pxopts, u32 *metric);
   71: void lsa_parse_sum_rt(struct top_hash_entry *en, int ospf2, u32 *drid, u32 *metric, u32 *options);
   72: void lsa_parse_ext(struct top_hash_entry *en, int ospf2, int af, struct ospf_lsa_ext_local *rt);
   73: int lsa_validate(struct ospf_lsa_header *lsa, u32 lsa_type, int ospf2, void *body);
   74: 
   75: static inline btime lsa_inst_age(struct top_hash_entry *en)
   76: { return current_time() - en->inst_time; }
   77: 
   78: #endif /* _BIRD_OSPF_LSALIB_H_ */

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>