]> git.proxmox.com Git - mirror_frr.git/blob - zebra/zebra_mlag.h
Merge pull request #13649 from donaldsharp/unlock_the_node_or_else
[mirror_frr.git] / zebra / zebra_mlag.h
1 // SPDX-License-Identifier: GPL-2.0-or-later
2 /* Zebra mlag header.
3 * Copyright (C) 2018 Cumulus Networks, Inc.
4 * Donald Sharp
5 */
6 #ifndef __ZEBRA_MLAG_H__
7 #define __ZEBRA_MLAG_H__
8
9 #include "mlag.h"
10 #include "zclient.h"
11 #include "zebra/zserv.h"
12
13 #ifdef __cplusplus
14 extern "C" {
15 #endif
16
17 #define ZEBRA_MLAG_BUF_LIMIT 32768
18 #define ZEBRA_MLAG_LEN_SIZE 4
19
20 DECLARE_HOOK(zebra_mlag_private_write_data,
21 (uint8_t *data, uint32_t len), (data, len));
22 DECLARE_HOOK(zebra_mlag_private_monitor_state, (), ());
23 DECLARE_HOOK(zebra_mlag_private_open_channel, (), ());
24 DECLARE_HOOK(zebra_mlag_private_close_channel, (), ());
25 DECLARE_HOOK(zebra_mlag_private_cleanup_data, (), ());
26
27 extern uint8_t mlag_wr_buffer[ZEBRA_MLAG_BUF_LIMIT];
28 extern uint8_t mlag_rd_buffer[ZEBRA_MLAG_BUF_LIMIT];
29
30 static inline void zebra_mlag_reset_read_buffer(void)
31 {
32 memset(mlag_wr_buffer, 0, ZEBRA_MLAG_BUF_LIMIT);
33 }
34
35 enum zebra_mlag_state {
36 MLAG_UP = 1,
37 MLAG_DOWN = 2,
38 };
39
40 void zebra_mlag_init(void);
41 void zebra_mlag_terminate(void);
42 enum mlag_role zebra_mlag_get_role(void);
43 void zebra_mlag_client_register(ZAPI_HANDLER_ARGS);
44 void zebra_mlag_client_unregister(ZAPI_HANDLER_ARGS);
45 void zebra_mlag_forward_client_msg(ZAPI_HANDLER_ARGS);
46 void zebra_mlag_send_register(void);
47 void zebra_mlag_send_deregister(void);
48 void zebra_mlag_handle_process_state(enum zebra_mlag_state state);
49 void zebra_mlag_process_mlag_data(uint8_t *data, uint32_t len);
50
51 /*
52 * ProtoBuffer Api's
53 */
54 int zebra_mlag_protobuf_encode_client_data(struct stream *s,
55 uint32_t *msg_type);
56 int zebra_mlag_protobuf_decode_message(struct stream *s, uint8_t *data,
57 uint32_t len);
58 #ifdef __cplusplus
59 }
60 #endif
61
62 #endif