File:  [ELWIX - Embedded LightWeight unIX -] / embedaddon / quagga / ospfd / ospf_opaque.h
Revision 1.1.1.2 (vendor branch): download - view: text, annotated - select for diffs - revision graph
Wed Nov 2 10:09:12 2016 UTC (7 years, 8 months ago) by misho
Branches: quagga, MAIN
CVS tags: v1_0_20160315, HEAD
quagga 1.0.20160315

    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>