Annotation of embedaddon/quagga/ospfd/ospf_opaque.h, revision 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>