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

1.1       misho       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>