diff options
author | paul <paul> | 2003-03-17 02:10:58 +0100 |
---|---|---|
committer | paul <paul> | 2003-03-17 02:10:58 +0100 |
commit | 2d33f157898e50c2855cd014a9f50696dca8a77b (patch) | |
tree | 72663785bce70ff0d6d0646e4eaf6d46b1806aad /ospfd/ospf_apiserver.h | |
parent | configure.ac is redundant. (diff) | |
download | frr-2d33f157898e50c2855cd014a9f50696dca8a77b.tar.xz frr-2d33f157898e50c2855cd014a9f50696dca8a77b.zip |
Addition of OSPF-API - Amir Guindehi <nospam.amir@datacore.ch>
Diffstat (limited to 'ospfd/ospf_apiserver.h')
-rw-r--r-- | ospfd/ospf_apiserver.h | 201 |
1 files changed, 201 insertions, 0 deletions
diff --git a/ospfd/ospf_apiserver.h b/ospfd/ospf_apiserver.h new file mode 100644 index 000000000..c7145782f --- /dev/null +++ b/ospfd/ospf_apiserver.h @@ -0,0 +1,201 @@ +/* + * Server side of OSPF API. + * Copyright (C) 2001, 2002 Ralph Keller + * + * This file is part of GNU Zebra. + * + * GNU Zebra is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published + * by the Free Software Foundation; either version 2, or (at your + * option) any later version. + * + * GNU Zebra is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GNU Zebra; see the file COPYING. If not, write to the + * Free Software Foundation, Inc., 59 Temple Place - Suite 330, + * Boston, MA 02111-1307, USA. + */ + +#ifndef _OSPF_APISERVER_H +#define _OSPF_APISERVER_H + +/* MTYPE definition is not reflected to "memory.h". */ +#define MTYPE_OSPF_APISERVER MTYPE_TMP +#define MTYPE_OSPF_APISERVER_MSGFILTER MTYPE_TMP + +/* List of opaque types that application registered */ +struct registered_opaque_type +{ + u_char lsa_type; + u_char opaque_type; +}; + + +/* Server instance for each accepted client connection. */ +struct ospf_apiserver +{ + /* Socket connections for synchronous commands and asynchronous + notifications */ + int fd_sync; /* synchronous requests */ + struct sockaddr_in peer_sync; + + int fd_async; /* asynchronous notifications */ + struct sockaddr_in peer_async; + + /* List of all opaque types that application registers to use. Using + a single connection with the OSPF daemon, multiple + <lsa,opaque_type> pairs can be registered. However, each + combination can only be registered once by all applications. */ + list opaque_types; /* of type registered_opaque_type */ + + /* Temporary storage for LSA instances to be refreshed. */ + struct ospf_lsdb reserve; + + /* filter for LSA update/delete notifies */ + struct lsa_filter_type *filter; + + /* Fifo buffers for outgoing messages */ + struct msg_fifo *out_sync_fifo; + struct msg_fifo *out_async_fifo; + + /* Read and write threads */ + struct thread *t_sync_read; +#ifdef USE_ASYNC_READ + struct thread *t_async_read; +#endif /* USE_ASYNC_READ */ + struct thread *t_sync_write; + struct thread *t_async_write; +}; + +enum event +{ + OSPF_APISERVER_ACCEPT, + OSPF_APISERVER_SYNC_READ, +#ifdef USE_ASYNC_READ + OSPF_APISERVER_ASYNC_READ, +#endif /* USE_ASYNC_READ */ + OSPF_APISERVER_SYNC_WRITE, + OSPF_APISERVER_ASYNC_WRITE +}; + +/* ----------------------------------------------------------- + * Followings are functions to manage client connections. + * ----------------------------------------------------------- + */ + +unsigned short ospf_apiserver_getport (void); +int ospf_apiserver_init (void); +void ospf_apiserver_term (void); +struct ospf_apiserver *ospf_apiserver_new (int fd_sync, int fd_async); +void ospf_apiserver_free (struct ospf_apiserver *apiserv); +void ospf_apiserver_event (enum event event, int fd, + struct ospf_apiserver *apiserv); +int ospf_apiserver_serv_sock_family (unsigned short port, int family); +int ospf_apiserver_accept (struct thread *thread); +int ospf_apiserver_read (struct thread *thread); +int ospf_apiserver_sync_write (struct thread *thread); +int ospf_apiserver_async_write (struct thread *thread); +int ospf_apiserver_send_reply (struct ospf_apiserver *apiserv, + u_int32_t seqnr, u_char rc); + +/* ----------------------------------------------------------- + * Followings are message handler functions + * ----------------------------------------------------------- + */ + +int ospf_apiserver_lsa9_originator (void *arg); +int ospf_apiserver_lsa10_originator (void *arg); +int ospf_apiserver_lsa11_originator (void *arg); + +void ospf_apiserver_clients_notify_all (struct msg *msg); + +void ospf_apiserver_clients_notify_ready_type9 (struct ospf_interface *oi); +void ospf_apiserver_clients_notify_ready_type10 (struct ospf_area *area); +void ospf_apiserver_clients_notify_ready_type11 (struct ospf *top); + +void ospf_apiserver_clients_notify_new_if (struct ospf_interface *oi); +void ospf_apiserver_clients_notify_del_if (struct ospf_interface *oi); +void ospf_apiserver_clients_notify_ism_change (struct ospf_interface *oi); +void ospf_apiserver_clients_notify_nsm_change (struct ospf_neighbor *nbr); + +int ospf_apiserver_is_ready_type9 (struct ospf_interface *oi); +int ospf_apiserver_is_ready_type10 (struct ospf_area *area); +int ospf_apiserver_is_ready_type11 (struct ospf *ospf); + +void ospf_apiserver_notify_ready_type9 (struct ospf_apiserver *apiserv); +void ospf_apiserver_notify_ready_type10 (struct ospf_apiserver *apiserv); +void ospf_apiserver_notify_ready_type11 (struct ospf_apiserver *apiserv); + +int ospf_apiserver_handle_msg (struct ospf_apiserver *apiserv, + struct msg *msg); +int ospf_apiserver_handle_register_opaque_type (struct ospf_apiserver + *apiserv, struct msg *msg); +int ospf_apiserver_handle_unregister_opaque_type (struct ospf_apiserver + *apiserv, struct msg *msg); +int ospf_apiserver_handle_register_event (struct ospf_apiserver *apiserv, + struct msg *msg); +int ospf_apiserver_handle_originate_request (struct ospf_apiserver *apiserv, + struct msg *msg); +int ospf_apiserver_handle_delete_request (struct ospf_apiserver *apiserv, + struct msg *msg); +int ospf_apiserver_handle_sync_lsdb (struct ospf_apiserver *apiserv, + struct msg *msg); + + +/* ----------------------------------------------------------- + * Followings are functions for LSA origination/deletion + * ----------------------------------------------------------- + */ + +int ospf_apiserver_register_opaque_type (struct ospf_apiserver *apiserver, + u_char lsa_type, u_char opaque_type); +int ospf_apiserver_unregister_opaque_type (struct ospf_apiserver *apiserver, + u_char lsa_type, + u_char opaque_type); +struct ospf_lsa *ospf_apiserver_opaque_lsa_new (struct ospf_area *area, + struct ospf_interface *oi, + struct lsa_header *protolsa); +struct ospf_interface *ospf_apiserver_if_lookup_by_addr (struct in_addr + address); +struct ospf_interface *ospf_apiserver_if_lookup_by_ifp (struct interface + *ifp); +int ospf_apiserver_originate1 (struct ospf_lsa *lsa); +void ospf_apiserver_flood_opaque_lsa (struct ospf_lsa *lsa); + + +/* ----------------------------------------------------------- + * Followings are callback functions to handle opaque types + * ----------------------------------------------------------- + */ + +int ospf_apiserver_new_if (struct interface *ifp); +int ospf_apiserver_del_if (struct interface *ifp); +void ospf_apiserver_ism_change (struct ospf_interface *oi, int old_status); +void ospf_apiserver_nsm_change (struct ospf_neighbor *nbr, int old_status); +void ospf_apiserver_config_write_router (struct vty *vty); +void ospf_apiserver_config_write_if (struct vty *vty, struct interface *ifp); +void ospf_apiserver_show_info (struct vty *vty, struct ospf_lsa *lsa); +int ospf_ospf_apiserver_lsa_originator (void *arg); +void ospf_apiserver_lsa_refresher (struct ospf_lsa *lsa); +void ospf_apiserver_flush_opaque_lsa (struct ospf_apiserver *apiserv, + u_char lsa_type, u_char opaque_type); + +/* ----------------------------------------------------------- + * Followings are hooks when LSAs are updated or deleted + * ----------------------------------------------------------- + */ + + +/* Hooks that are invoked from ospf opaque module */ + +int ospf_apiserver_lsa_update (struct ospf_lsa *lsa); +int ospf_apiserver_lsa_delete (struct ospf_lsa *lsa); + +void ospf_apiserver_clients_lsa_change_notify (u_char msgtype, + struct ospf_lsa *lsa); + +#endif /* _OSPF_APISERVER_H */ |