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