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