File:  [ELWIX - Embedded LightWeight unIX -] / embedaddon / quagga / ospfd / ospf_apiserver.h
Revision 1.1.1.1 (vendor branch): download - view: text, annotated - select for diffs - revision graph
Tue Feb 21 17:26:12 2012 UTC (12 years, 4 months ago) by misho
Branches: quagga, MAIN
CVS tags: v1_0_20160315, v0_99_22p0, v0_99_22, v0_99_21, v0_99_20_1, v0_99_20, HEAD
quagga

    1: /*
    2:  * Server side of OSPF API.
    3:  * Copyright (C) 2001, 2002 Ralph Keller
    4:  *
    5:  * This file is part of GNU Zebra.
    6:  * 
    7:  * GNU Zebra is free software; you can redistribute it and/or modify
    8:  * it under the terms of the GNU General Public License as published
    9:  * by the Free Software Foundation; either version 2, or (at your
   10:  * option) any later version.
   11:  *
   12:  * GNU Zebra is distributed in the hope that it will be useful, but
   13:  * WITHOUT ANY WARRANTY; without even the implied warranty of
   14:  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
   15:  * General Public License for more details.
   16:  *
   17:  * You should have received a copy of the GNU General Public License
   18:  * along with GNU Zebra; see the file COPYING.  If not, write to the
   19:  * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
   20:  * Boston, MA 02111-1307, USA.
   21:  */
   22: 
   23: #ifndef _OSPF_APISERVER_H
   24: #define _OSPF_APISERVER_H
   25: 
   26: /* MTYPE definition is not reflected to "memory.h". */
   27: #define MTYPE_OSPF_APISERVER MTYPE_TMP
   28: #define MTYPE_OSPF_APISERVER_MSGFILTER MTYPE_TMP
   29: 
   30: /* List of opaque types that application registered */
   31: struct registered_opaque_type
   32: {
   33:   u_char lsa_type;
   34:   u_char opaque_type;
   35: };
   36: 
   37: 
   38: /* Server instance for each accepted client connection. */
   39: struct ospf_apiserver
   40: {
   41:   /* Socket connections for synchronous commands and asynchronous
   42:      notifications */
   43:   int fd_sync;			/* synchronous requests */
   44:   struct sockaddr_in peer_sync;
   45: 
   46:   int fd_async;			/* asynchronous notifications */
   47:   struct sockaddr_in peer_async;
   48: 
   49:   /* List of all opaque types that application registers to use. Using
   50:      a single connection with the OSPF daemon, multiple
   51:      <lsa,opaque_type> pairs can be registered. However, each
   52:      combination can only be registered once by all applications. */
   53:   struct list *opaque_types;		/* of type registered_opaque_type */
   54: 
   55:   /* Temporary storage for LSA instances to be refreshed. */
   56:   struct ospf_lsdb reserve;
   57: 
   58:   /* filter for LSA update/delete notifies */
   59:   struct lsa_filter_type *filter;
   60: 
   61:   /* Fifo buffers for outgoing messages */
   62:   struct msg_fifo *out_sync_fifo;
   63:   struct msg_fifo *out_async_fifo;
   64: 
   65:   /* Read and write threads */
   66:   struct thread *t_sync_read;
   67: #ifdef USE_ASYNC_READ
   68:   struct thread *t_async_read;
   69: #endif /* USE_ASYNC_READ */
   70:   struct thread *t_sync_write;
   71:   struct thread *t_async_write;
   72: };
   73: 
   74: enum event
   75: {
   76:   OSPF_APISERVER_ACCEPT,
   77:   OSPF_APISERVER_SYNC_READ,
   78: #ifdef USE_ASYNC_READ
   79:   OSPF_APISERVER_ASYNC_READ,
   80: #endif /* USE_ASYNC_READ */
   81:   OSPF_APISERVER_SYNC_WRITE,
   82:   OSPF_APISERVER_ASYNC_WRITE
   83: };
   84: 
   85: /* -----------------------------------------------------------
   86:  * Followings are functions to manage client connections.
   87:  * -----------------------------------------------------------
   88:  */
   89: 
   90: extern unsigned short ospf_apiserver_getport (void);
   91: extern int ospf_apiserver_init (void);
   92: extern void ospf_apiserver_term (void);
   93: extern struct ospf_apiserver *ospf_apiserver_new (int fd_sync, int fd_async);
   94: extern void ospf_apiserver_free (struct ospf_apiserver *apiserv);
   95: extern void ospf_apiserver_event (enum event event, int fd,
   96: 			   struct ospf_apiserver *apiserv);
   97: extern int ospf_apiserver_serv_sock_family (unsigned short port, int family);
   98: extern int ospf_apiserver_accept (struct thread *thread);
   99: extern int ospf_apiserver_read (struct thread *thread);
  100: extern int ospf_apiserver_sync_write (struct thread *thread);
  101: extern int ospf_apiserver_async_write (struct thread *thread);
  102: extern int ospf_apiserver_send_reply (struct ospf_apiserver *apiserv,
  103: 			       u_int32_t seqnr, u_char rc);
  104: 
  105: /* -----------------------------------------------------------
  106:  * Followings are message handler functions
  107:  * -----------------------------------------------------------
  108:  */
  109: 
  110: extern int ospf_apiserver_lsa9_originator (void *arg);
  111: extern int ospf_apiserver_lsa10_originator (void *arg);
  112: extern int ospf_apiserver_lsa11_originator (void *arg);
  113: 
  114: extern void ospf_apiserver_clients_notify_all (struct msg *msg);
  115: 
  116: extern void ospf_apiserver_clients_notify_ready_type9 (struct ospf_interface *oi);
  117: extern void ospf_apiserver_clients_notify_ready_type10 (struct ospf_area *area);
  118: extern void ospf_apiserver_clients_notify_ready_type11 (struct ospf *top);
  119: 
  120: extern void ospf_apiserver_clients_notify_new_if (struct ospf_interface *oi);
  121: extern void ospf_apiserver_clients_notify_del_if (struct ospf_interface *oi);
  122: extern void ospf_apiserver_clients_notify_ism_change (struct ospf_interface *oi);
  123: extern void ospf_apiserver_clients_notify_nsm_change (struct ospf_neighbor *nbr);
  124: 
  125: extern int ospf_apiserver_is_ready_type9 (struct ospf_interface *oi);
  126: extern int ospf_apiserver_is_ready_type10 (struct ospf_area *area);
  127: extern int ospf_apiserver_is_ready_type11 (struct ospf *ospf);
  128: 
  129: extern void ospf_apiserver_notify_ready_type9 (struct ospf_apiserver *apiserv);
  130: extern void ospf_apiserver_notify_ready_type10 (struct ospf_apiserver *apiserv);
  131: extern void ospf_apiserver_notify_ready_type11 (struct ospf_apiserver *apiserv);
  132: 
  133: extern int ospf_apiserver_handle_msg (struct ospf_apiserver *apiserv,
  134: 			       struct msg *msg);
  135: extern int ospf_apiserver_handle_register_opaque_type (struct ospf_apiserver
  136: 						*apiserv, struct msg *msg);
  137: extern int ospf_apiserver_handle_unregister_opaque_type (struct ospf_apiserver
  138: 						  *apiserv, struct msg *msg);
  139: extern int ospf_apiserver_handle_register_event (struct ospf_apiserver *apiserv,
  140: 					  struct msg *msg);
  141: extern int ospf_apiserver_handle_originate_request (struct ospf_apiserver *apiserv,
  142: 					     struct msg *msg);
  143: extern int ospf_apiserver_handle_delete_request (struct ospf_apiserver *apiserv,
  144: 					  struct msg *msg);
  145: extern int ospf_apiserver_handle_sync_lsdb (struct ospf_apiserver *apiserv,
  146: 				     struct msg *msg);
  147: 
  148: 
  149: /* -----------------------------------------------------------
  150:  * Followings are functions for LSA origination/deletion
  151:  * -----------------------------------------------------------
  152:  */
  153: 
  154: extern int ospf_apiserver_register_opaque_type (struct ospf_apiserver *apiserver,
  155: 					 u_char lsa_type, u_char opaque_type);
  156: extern int ospf_apiserver_unregister_opaque_type (struct ospf_apiserver *apiserver,
  157: 					   u_char lsa_type,
  158: 					   u_char opaque_type);
  159: extern struct ospf_lsa *ospf_apiserver_opaque_lsa_new (struct ospf_area *area,
  160: 						struct ospf_interface *oi,
  161: 						struct lsa_header *protolsa);
  162: extern struct ospf_interface *ospf_apiserver_if_lookup_by_addr (struct in_addr
  163: 							 address);
  164: extern struct ospf_interface *ospf_apiserver_if_lookup_by_ifp (struct interface
  165: 							*ifp);
  166: extern int ospf_apiserver_originate1 (struct ospf_lsa *lsa);
  167: extern void ospf_apiserver_flood_opaque_lsa (struct ospf_lsa *lsa);
  168: 
  169: 
  170: /* -----------------------------------------------------------
  171:  * Followings are callback functions to handle opaque types 
  172:  * -----------------------------------------------------------
  173:  */
  174: 
  175: extern int ospf_apiserver_new_if (struct interface *ifp);
  176: extern int ospf_apiserver_del_if (struct interface *ifp);
  177: extern void ospf_apiserver_ism_change (struct ospf_interface *oi, int old_status);
  178: extern void ospf_apiserver_nsm_change (struct ospf_neighbor *nbr, int old_status);
  179: extern void ospf_apiserver_config_write_router (struct vty *vty);
  180: extern void ospf_apiserver_config_write_if (struct vty *vty, struct interface *ifp);
  181: extern void ospf_apiserver_show_info (struct vty *vty, struct ospf_lsa *lsa);
  182: extern int ospf_ospf_apiserver_lsa_originator (void *arg);
  183: extern struct ospf_lsa *ospf_apiserver_lsa_refresher (struct ospf_lsa *lsa);
  184: extern void ospf_apiserver_flush_opaque_lsa (struct ospf_apiserver *apiserv,
  185: 				      u_char lsa_type, u_char opaque_type);
  186: 
  187: /* -----------------------------------------------------------
  188:  * Followings are hooks when LSAs are updated or deleted
  189:  * -----------------------------------------------------------
  190:  */
  191: 
  192: 
  193: /* Hooks that are invoked from ospf opaque module */
  194: 
  195: extern int ospf_apiserver_lsa_update (struct ospf_lsa *lsa);
  196: extern int ospf_apiserver_lsa_delete (struct ospf_lsa *lsa);
  197: 
  198: extern void ospf_apiserver_clients_lsa_change_notify (u_char msgtype,
  199: 					       struct ospf_lsa *lsa);
  200: 
  201: #endif /* _OSPF_APISERVER_H */

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