Annotation of embedaddon/quagga/ospfd/ospf_opaque.h, revision 1.1.1.2

1.1       misho       1: /*
                      2:  * This is an implementation of rfc2370.
                      3:  * Copyright (C) 2001 KDD R&D Laboratories, Inc.
                      4:  * http://www.kddlabs.co.jp/
                      5:  *
                      6:  * This file is part of GNU Zebra.
                      7:  *
                      8:  * GNU Zebra is free software; you can redistribute it and/or modify it
                      9:  * under the terms of the GNU General Public License as published by the
                     10:  * Free Software Foundation; either version 2, or (at your option) any
                     11:  * later version.
                     12:  * 
                     13:  * GNU Zebra is distributed in the hope that it will be useful, but
                     14:  * WITHOUT ANY WARRANTY; without even the implied warranty of
                     15:  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
                     16:  * General Public License for more details.
                     17:  *
                     18:  * You should have received a copy of the GNU General Public License
                     19:  * along with GNU Zebra; see the file COPYING.  If not, write to the Free
                     20:  * Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
                     21:  * 02111-1307, USA.
                     22:  */
                     23: 
                     24: #ifndef _ZEBRA_OSPF_OPAQUE_H
                     25: #define _ZEBRA_OSPF_OPAQUE_H
                     26: 
                     27: #include "vty.h"
                     28: 
                     29: #define        IS_OPAQUE_LSA(type) \
                     30:        ((type) == OSPF_OPAQUE_LINK_LSA  || \
                     31:         (type) == OSPF_OPAQUE_AREA_LSA  || \
                     32:         (type) == OSPF_OPAQUE_AS_LSA)
                     33: 
                     34: /*
                     35:  * Opaque LSA's link state ID is redefined as follows.
                     36:  *
                     37:  *        24       16        8        0
                     38:  * +--------+--------+--------+--------+
                     39:  * |tttttttt|........|........|........|
                     40:  * +--------+--------+--------+--------+
                     41:  * |<-Type->|<------- Opaque ID ------>|
                     42:  */
                     43: #define LSID_OPAQUE_TYPE_MASK  0xff000000      /*  8 bits */
                     44: #define LSID_OPAQUE_ID_MASK    0x00ffffff      /* 24 bits */
                     45: 
                     46: #define        GET_OPAQUE_TYPE(lsid) \
                     47:        (((u_int32_t)(lsid) & LSID_OPAQUE_TYPE_MASK) >> 24)
                     48: 
                     49: #define        GET_OPAQUE_ID(lsid) \
                     50:         ((u_int32_t)(lsid) & LSID_OPAQUE_ID_MASK)
                     51: 
                     52: #define        SET_OPAQUE_LSID(type, id) \
                     53:        ((((type) << 24) & LSID_OPAQUE_TYPE_MASK) \
                     54:        | ((id)          & LSID_OPAQUE_ID_MASK))
                     55: 
                     56: /*
                     57:  * Opaque LSA types will be assigned by IANA.
                     58:  * <http://www.iana.org/assignments/ospf-opaque-types>
                     59:  */
                     60: #define OPAQUE_TYPE_TRAFFIC_ENGINEERING_LSA            1
                     61: #define OPAQUE_TYPE_SYCAMORE_OPTICAL_TOPOLOGY_DESC     2
                     62: #define OPAQUE_TYPE_GRACE_LSA                          3
                     63: 
                     64: /* Followings types are proposed in internet-draft documents. */
                     65: #define OPAQUE_TYPE_8021_QOSPF                         129
                     66: #define OPAQUE_TYPE_SECONDARY_NEIGHBOR_DISCOVERY       224
                     67: #define OPAQUE_TYPE_FLOODGATE                           225
                     68: 
                     69: /* Ugly hack to make use of an unallocated value for wildcard matching! */
                     70: #define OPAQUE_TYPE_WILDCARD                           0
                     71: 
                     72: #define OPAQUE_TYPE_RANGE_UNASSIGNED(type) \
                     73:        (  4 <= (type) && (type) <= 127)
                     74: 
                     75: #define OPAQUE_TYPE_RANGE_RESERVED(type) \
                     76:        (127 <  (type) && (type) <= 255)
                     77: 
                     78: #define VALID_OPAQUE_INFO_LEN(lsahdr) \
                     79:        ((ntohs((lsahdr)->length) >= sizeof (struct lsa_header)) && \
                     80:        ((ntohs((lsahdr)->length) %  sizeof (u_int32_t)) == 0))
                     81: 
                     82: /* Prototypes. */
                     83: 
                     84: extern void ospf_opaque_init (void);
                     85: extern void ospf_opaque_term (void);
                     86: extern int ospf_opaque_type9_lsa_init (struct ospf_interface *oi);
                     87: extern void ospf_opaque_type9_lsa_term (struct ospf_interface *oi);
                     88: extern int ospf_opaque_type10_lsa_init (struct ospf_area *area);
                     89: extern void ospf_opaque_type10_lsa_term (struct ospf_area *area);
                     90: extern int ospf_opaque_type11_lsa_init (struct ospf *ospf);
                     91: extern void ospf_opaque_type11_lsa_term (struct ospf *ospf);
                     92: 
                     93: extern int
                     94: ospf_register_opaque_functab (
                     95:   u_char lsa_type,
                     96:   u_char opaque_type,
                     97:   int (* new_if_hook)(struct interface *ifp),
                     98:   int (* del_if_hook)(struct interface *ifp),
                     99:   void (* ism_change_hook)(struct ospf_interface *oi, int old_status),
                    100:   void (* nsm_change_hook)(struct ospf_neighbor *nbr, int old_status),
                    101:   void (* config_write_router)(struct vty *vty),
                    102:   void (* config_write_if    )(struct vty *vty, struct interface *ifp),
                    103:   void (* config_write_debug )(struct vty *vty),
                    104:   void (* show_opaque_info   )(struct vty *vty, struct ospf_lsa *lsa),
                    105:   int  (* lsa_originator)(void *arg),
                    106:   struct ospf_lsa *(* lsa_refresher )(struct ospf_lsa *lsa),
                    107:   int (* new_lsa_hook)(struct ospf_lsa *lsa),
                    108:   int (* del_lsa_hook)(struct ospf_lsa *lsa)
                    109: );
                    110: extern void ospf_delete_opaque_functab (u_char lsa_type, u_char opaque_type);
                    111: 
                    112: extern int ospf_opaque_new_if (struct interface *ifp);
                    113: extern int ospf_opaque_del_if (struct interface *ifp);
                    114: extern void ospf_opaque_ism_change (struct ospf_interface *oi,
                    115:                                    int old_status);
                    116: extern void ospf_opaque_nsm_change (struct ospf_neighbor *nbr,
                    117:                                    int old_status);
                    118: extern void ospf_opaque_config_write_router (struct vty *vty, struct ospf *);
                    119: extern void ospf_opaque_config_write_if (struct vty *vty,
                    120:                                         struct interface *ifp);
                    121: extern void ospf_opaque_config_write_debug (struct vty *vty);
                    122: extern void show_opaque_info_detail (struct vty *vty, struct ospf_lsa *lsa);
                    123: extern void ospf_opaque_lsa_dump (struct stream *s, u_int16_t length);
                    124: 
                    125: extern void ospf_opaque_lsa_originate_schedule (struct ospf_interface *oi,
                    126:                                                int *init_delay);
                    127: extern struct ospf_lsa *ospf_opaque_lsa_install (struct ospf_lsa *,
                    128:                                                 int rt_recalc);
                    129: extern struct ospf_lsa *ospf_opaque_lsa_refresh (struct ospf_lsa *lsa);
                    130: 
                    131: extern void ospf_opaque_lsa_reoriginate_schedule (void *lsa_type_dependent,
                    132:                                                  u_char lsa_type,
                    133:                                                  u_char opaque_type);
                    134: extern void ospf_opaque_lsa_refresh_schedule (struct ospf_lsa *lsa);
                    135: extern void ospf_opaque_lsa_flush_schedule (struct ospf_lsa *lsa);
                    136: 
                    137: extern void ospf_opaque_self_originated_lsa_received (struct ospf_neighbor
                    138:                                                      *nbr,
                    139:                                                      struct ospf_lsa *lsa);
                    140: extern void htonf (float *src, float *dst);
                    141: extern void ntohf (float *src, float *dst);
                    142: extern struct ospf *oi_to_top (struct ospf_interface *oi);
                    143: 
                    144: #endif /* _ZEBRA_OSPF_OPAQUE_H */

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