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

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:  * Usage of Opaque-LSA administrative flags in "struct ospf".
                     36:  *
                     37:  *    7   6   5   4   3   2   1   0
                     38:  * +---+---+---+---+---+---+---+---+
                     39:  * |///|///|///|///|B11|B10|B09| O |
                     40:  * +---+---+---+---+---+---+---+---+
                     41:  *                 |<--------->| A
                     42:  *                       |       +--- Operation status (operational = 1)
                     43:  *                       +----------- Blocking status for each LSA type
                     44:  */
                     45: 
                     46: #define IS_OPAQUE_LSA_ORIGINATION_BLOCKED(V) \
                     47:         CHECK_FLAG((V), (OPAQUE_BLOCK_TYPE_09_LSA_BIT | \
                     48:                          OPAQUE_BLOCK_TYPE_10_LSA_BIT | \
                     49:                          OPAQUE_BLOCK_TYPE_11_LSA_BIT))
                     50: 
                     51: /*
                     52:  * Opaque LSA's link state ID is redefined as follows.
                     53:  *
                     54:  *        24       16        8        0
                     55:  * +--------+--------+--------+--------+
                     56:  * |tttttttt|........|........|........|
                     57:  * +--------+--------+--------+--------+
                     58:  * |<-Type->|<------- Opaque ID ------>|
                     59:  */
                     60: #define LSID_OPAQUE_TYPE_MASK  0xff000000      /*  8 bits */
                     61: #define LSID_OPAQUE_ID_MASK    0x00ffffff      /* 24 bits */
                     62: 
                     63: #define        GET_OPAQUE_TYPE(lsid) \
                     64:        (((u_int32_t)(lsid) & LSID_OPAQUE_TYPE_MASK) >> 24)
                     65: 
                     66: #define        GET_OPAQUE_ID(lsid) \
                     67:         ((u_int32_t)(lsid) & LSID_OPAQUE_ID_MASK)
                     68: 
                     69: #define        SET_OPAQUE_LSID(type, id) \
                     70:        ((((type) << 24) & LSID_OPAQUE_TYPE_MASK) \
                     71:        | ((id)          & LSID_OPAQUE_ID_MASK))
                     72: 
                     73: /*
                     74:  * Opaque LSA types will be assigned by IANA.
                     75:  * <http://www.iana.org/assignments/ospf-opaque-types>
                     76:  */
                     77: #define OPAQUE_TYPE_TRAFFIC_ENGINEERING_LSA            1
                     78: #define OPAQUE_TYPE_SYCAMORE_OPTICAL_TOPOLOGY_DESC     2
                     79: #define OPAQUE_TYPE_GRACE_LSA                          3
                     80: 
                     81: /* Followings types are proposed in internet-draft documents. */
                     82: #define OPAQUE_TYPE_8021_QOSPF                         129
                     83: #define OPAQUE_TYPE_SECONDARY_NEIGHBOR_DISCOVERY       224
                     84: #define OPAQUE_TYPE_FLOODGATE                           225
                     85: 
                     86: /* Ugly hack to make use of an unallocated value for wildcard matching! */
                     87: #define OPAQUE_TYPE_WILDCARD                           0
                     88: 
                     89: #define OPAQUE_TYPE_RANGE_UNASSIGNED(type) \
                     90:        (  4 <= (type) && (type) <= 127)
                     91: 
                     92: #define OPAQUE_TYPE_RANGE_RESERVED(type) \
                     93:        (127 <  (type) && (type) <= 255)
                     94: 
                     95: #define VALID_OPAQUE_INFO_LEN(lsahdr) \
                     96:        ((ntohs((lsahdr)->length) >= sizeof (struct lsa_header)) && \
                     97:        ((ntohs((lsahdr)->length) %  sizeof (u_int32_t)) == 0))
                     98: 
                     99: /* Prototypes. */
                    100: 
                    101: extern void ospf_opaque_init (void);
                    102: extern void ospf_opaque_term (void);
                    103: extern int ospf_opaque_type9_lsa_init (struct ospf_interface *oi);
                    104: extern void ospf_opaque_type9_lsa_term (struct ospf_interface *oi);
                    105: extern int ospf_opaque_type10_lsa_init (struct ospf_area *area);
                    106: extern void ospf_opaque_type10_lsa_term (struct ospf_area *area);
                    107: extern int ospf_opaque_type11_lsa_init (struct ospf *ospf);
                    108: extern void ospf_opaque_type11_lsa_term (struct ospf *ospf);
                    109: 
                    110: extern int
                    111: ospf_register_opaque_functab (
                    112:   u_char lsa_type,
                    113:   u_char opaque_type,
                    114:   int (* new_if_hook)(struct interface *ifp),
                    115:   int (* del_if_hook)(struct interface *ifp),
                    116:   void (* ism_change_hook)(struct ospf_interface *oi, int old_status),
                    117:   void (* nsm_change_hook)(struct ospf_neighbor *nbr, int old_status),
                    118:   void (* config_write_router)(struct vty *vty),
                    119:   void (* config_write_if    )(struct vty *vty, struct interface *ifp),
                    120:   void (* config_write_debug )(struct vty *vty),
                    121:   void (* show_opaque_info   )(struct vty *vty, struct ospf_lsa *lsa),
                    122:   int  (* lsa_originator)(void *arg),
                    123:   struct ospf_lsa *(* lsa_refresher )(struct ospf_lsa *lsa),
                    124:   int (* new_lsa_hook)(struct ospf_lsa *lsa),
                    125:   int (* del_lsa_hook)(struct ospf_lsa *lsa)
                    126: );
                    127: extern void ospf_delete_opaque_functab (u_char lsa_type, u_char opaque_type);
                    128: 
                    129: extern int ospf_opaque_new_if (struct interface *ifp);
                    130: extern int ospf_opaque_del_if (struct interface *ifp);
                    131: extern void ospf_opaque_ism_change (struct ospf_interface *oi,
                    132:                                    int old_status);
                    133: extern void ospf_opaque_nsm_change (struct ospf_neighbor *nbr,
                    134:                                    int old_status);
                    135: extern void ospf_opaque_config_write_router (struct vty *vty, struct ospf *);
                    136: extern void ospf_opaque_config_write_if (struct vty *vty,
                    137:                                         struct interface *ifp);
                    138: extern void ospf_opaque_config_write_debug (struct vty *vty);
                    139: extern void show_opaque_info_detail (struct vty *vty, struct ospf_lsa *lsa);
                    140: extern void ospf_opaque_lsa_dump (struct stream *s, u_int16_t length);
                    141: 
                    142: extern void ospf_opaque_lsa_originate_schedule (struct ospf_interface *oi,
                    143:                                                int *init_delay);
                    144: extern struct ospf_lsa *ospf_opaque_lsa_install (struct ospf_lsa *,
                    145:                                                 int rt_recalc);
                    146: extern struct ospf_lsa *ospf_opaque_lsa_refresh (struct ospf_lsa *lsa);
                    147: 
                    148: extern void ospf_opaque_lsa_reoriginate_schedule (void *lsa_type_dependent,
                    149:                                                  u_char lsa_type,
                    150:                                                  u_char opaque_type);
                    151: extern void ospf_opaque_lsa_refresh_schedule (struct ospf_lsa *lsa);
                    152: extern void ospf_opaque_lsa_flush_schedule (struct ospf_lsa *lsa);
                    153: 
                    154: extern void ospf_opaque_adjust_lsreq (struct ospf_neighbor *nbr,
                    155:                                      struct list *lsas);
                    156: extern void ospf_opaque_self_originated_lsa_received (struct ospf_neighbor
                    157:                                                      *nbr,
                    158:                                                      struct ospf_lsa *lsa);
                    159: extern void ospf_opaque_ls_ack_received (struct ospf_neighbor *nbr,
                    160:                                         struct ospf_lsa *lsa);
                    161: 
                    162: extern void htonf (float *src, float *dst);
                    163: extern void ntohf (float *src, float *dst);
                    164: extern struct ospf *oi_to_top (struct ospf_interface *oi);
                    165: 
                    166: #endif /* _ZEBRA_OSPF_OPAQUE_H */

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