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>