1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
|
/*
* Client side of OSPF API.
* Copyright (C) 2001, 2002, 2003 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_APICLIENT_H
#define _OSPF_APICLIENT_H
#define MTYPE_OSPF_APICLIENT 0
/* Structure for the OSPF API client */
struct ospf_apiclient
{
/* Sockets for sync requests and async notifications */
int fd_sync;
int fd_async;
/* Pointer to callback functions */
void (*ready_notify) (u_char lsa_type, u_char opaque_type,
struct in_addr addr);
void (*new_if) (struct in_addr ifaddr, struct in_addr area_id);
void (*del_if) (struct in_addr ifaddr);
void (*ism_change) (struct in_addr ifaddr, struct in_addr area_id,
u_char status);
void (*nsm_change) (struct in_addr ifaddr, struct in_addr nbraddr,
struct in_addr router_id, u_char status);
void (*update_notify) (struct in_addr ifaddr, struct in_addr area_id,
u_char self_origin,
struct lsa_header * lsa);
void (*delete_notify) (struct in_addr ifaddr, struct in_addr area_id,
u_char self_origin,
struct lsa_header * lsa);
};
/* ---------------------------------------------------------
* API function prototypes.
* --------------------------------------------------------- */
/* Open connection to OSPF daemon. Two ports will be allocated on
client, sync channel at syncport and reverse channel at syncport+1 */
struct ospf_apiclient *ospf_apiclient_connect (char *host, int syncport);
/* Shutdown connection to OSPF daemon. */
int ospf_apiclient_close (struct ospf_apiclient *oclient);
/* Synchronous request to register opaque type. */
int ospf_apiclient_register_opaque_type (struct ospf_apiclient *oclient,
u_char ltype, u_char otype);
/* Synchronous request to register event mask. */
int ospf_apiclient_register_events (struct ospf_apiclient *oclient,
u_int32_t mask);
/* Register callback functions.*/
void ospf_apiclient_register_callback (struct ospf_apiclient *oclient,
void (*ready_notify) (u_char lsa_type,
u_char
opaque_type,
struct in_addr
addr),
void (*new_if) (struct in_addr ifaddr,
struct in_addr
area_id),
void (*del_if) (struct in_addr ifaddr),
void (*ism_change) (struct in_addr
ifaddr,
struct in_addr
area_id,
u_char status),
void (*nsm_change) (struct in_addr
ifaddr,
struct in_addr
nbraddr,
struct in_addr
router_id,
u_char status),
void (*update_notify) (struct in_addr
ifaddr,
struct in_addr
area_id,
u_char selforig,
struct
lsa_header *
lsa),
void (*delete_notify) (struct in_addr
ifaddr,
struct in_addr
area_id,
u_char selforig,
struct
lsa_header *
lsa));
/* Synchronous request to synchronize LSDB. */
int ospf_apiclient_sync_lsdb (struct ospf_apiclient *oclient);
/* Synchronous request to originate or update opaque LSA. */
int
ospf_apiclient_lsa_originate(struct ospf_apiclient *oclient,
struct in_addr ifaddr,
struct in_addr area_id,
u_char lsa_type,
u_char opaque_type, u_int32_t opaque_id,
void *opaquedata, int opaquelen);
/* Synchronous request to delete opaque LSA. Parameter opaque_id is in
host byte order */
int ospf_apiclient_lsa_delete (struct ospf_apiclient *oclient,
struct in_addr area_id, u_char lsa_type,
u_char opaque_type, u_int32_t opaque_id);
/* Fetch async message and handle it */
int ospf_apiclient_handle_async (struct ospf_apiclient *oclient);
#endif /* _OSPF_APICLIENT_H */
|