summaryrefslogtreecommitdiffstats
path: root/zebra/zapi_msg.h
blob: dad40c200df58647f0f284acf778cf7ba7663f6a (plain)
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
/*
 * Zebra API message creation & consumption.
 * Portions:
 *   Copyright (C) 1997-1999  Kunihiro Ishiguro
 *   Copyright (C) 2015-2018  Cumulus Networks, Inc.
 *   et al.
 *
 * This program 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 of the License, or (at your option)
 * any later version.
 *
 * This program 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 this program; see the file COPYING; if not, write to the Free Software
 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
 */

#include "lib/if.h"
#include "lib/vrf.h"
#include "lib/zclient.h"
#include "lib/pbr.h"

#include "zebra/rib.h"
#include "zebra/zserv.h"
#include "zebra/zebra_pbr.h"
#include "zebra/zebra_errors.h"
#include "zebra/label_manager.h"
#include "zebra/zebra_srv6.h"


#ifdef __cplusplus
extern "C" {
#endif

/*
 * This is called to process inbound ZAPI messages.
 *
 * client
 *    the client datastructure
 *
 * fifo
 *    a batch of messages
 */
extern void zserv_handle_commands(struct zserv *client,
				  struct stream_fifo *fifo);

extern int zsend_vrf_add(struct zserv *zclient, struct zebra_vrf *zvrf);
extern int zsend_vrf_delete(struct zserv *zclient, struct zebra_vrf *zvrf);
extern int zsend_interface_add(struct zserv *zclient, struct interface *ifp);
extern int zsend_interface_delete(struct zserv *zclient, struct interface *ifp);
extern int zsend_interface_addresses(struct zserv *zclient,
				     struct interface *ifp);
extern int zsend_interface_address(int cmd, struct zserv *zclient,
				   struct interface *ifp,
				   struct connected *ifc);
extern void nbr_connected_add_ipv6(struct interface *ifp,
				   struct in6_addr *address);
extern void nbr_connected_delete_ipv6(struct interface *ifp,
				      struct in6_addr *address);
extern int zsend_interface_update(int cmd, struct zserv *client,
				  struct interface *ifp);
extern int zsend_redistribute_route(int cmd, struct zserv *zclient,
				    const struct prefix *p,
				    const struct prefix *src_p,
				    const struct route_entry *re);

extern int zsend_router_id_update(struct zserv *zclient, afi_t afi,
				  struct prefix *p, vrf_id_t vrf_id);
extern int zsend_interface_vrf_update(struct zserv *zclient,
				      struct interface *ifp, vrf_id_t vrf_id);
extern int zsend_interface_link_params(struct zserv *zclient,
				       struct interface *ifp);
extern int zsend_pw_update(struct zserv *client, struct zebra_pw *pw);
extern int zsend_route_notify_owner(struct route_entry *re,
				    const struct prefix *p,
				    enum zapi_route_notify_owner note,
				    afi_t afi, safi_t safi);
extern int zsend_route_notify_owner_ctx(const struct zebra_dplane_ctx *ctx,
					enum zapi_route_notify_owner note);

extern void zsend_rule_notify_owner(const struct zebra_dplane_ctx *ctx,
				    enum zapi_rule_notify_owner note);

extern void zsend_iptable_notify_owner(const struct zebra_dplane_ctx *ctx,
				       enum zapi_iptable_notify_owner note);
extern void zsend_ipset_notify_owner(const struct zebra_dplane_ctx *ctx,
				     enum zapi_ipset_notify_owner note);
extern void
zsend_ipset_entry_notify_owner(const struct zebra_dplane_ctx *ctx,
			       enum zapi_ipset_entry_notify_owner note);
extern bool zserv_nexthop_num_warn(const char *caller, const struct prefix *p,
				   const unsigned int nexthop_num);

extern void zsend_capabilities_all_clients(void);
extern int zsend_assign_label_chunk_response(struct zserv *client,
					     vrf_id_t vrf_id,
					     struct label_manager_chunk *lmc);
extern int zsend_label_manager_connect_response(struct zserv *client,
						vrf_id_t vrf_id,
						unsigned short result);
extern int zsend_sr_policy_notify_status(uint32_t color,
					 struct ipaddr *endpoint, char *name,
					 int status);
extern void zsend_nhrp_neighbor_notify(int cmd, struct interface *ifp,
				       struct ipaddr *ipaddr, int ndm_state,
				       union sockunion *link_layer_ipv4);

extern int zsend_client_close_notify(struct zserv *client,
				     struct zserv *closed_client);

int zsend_nhg_notify(uint16_t type, uint16_t instance, uint32_t session_id,
		     uint32_t id, enum zapi_nhg_notify_owner note);

extern void zapi_opaque_free(struct opaque *opaque);

extern int zsend_zebra_srv6_locator_add(struct zserv *client,
					struct srv6_locator *loc);
extern int zsend_zebra_srv6_locator_delete(struct zserv *client,
					   struct srv6_locator *loc);
extern int zsend_srv6_manager_get_locator_chunk_response(struct zserv *client,
		vrf_id_t vrf_id, struct srv6_locator *loc);

#ifdef __cplusplus
}
#endif