1 // SPDX-License-Identifier: GPL-2.0-or-later
3 * Copyright (C) 2018 Cumulus Networks, Inc.
6 #ifndef __ZEBRA_MLAG_H__
7 #define __ZEBRA_MLAG_H__
11 #include "zebra/zserv.h"
17 #define ZEBRA_MLAG_BUF_LIMIT 32768
18 #define ZEBRA_MLAG_LEN_SIZE 4
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
, (), ());
27 extern uint8_t mlag_wr_buffer
[ZEBRA_MLAG_BUF_LIMIT
];
28 extern uint8_t mlag_rd_buffer
[ZEBRA_MLAG_BUF_LIMIT
];
30 static inline void zebra_mlag_reset_read_buffer(void)
32 memset(mlag_wr_buffer
, 0, ZEBRA_MLAG_BUF_LIMIT
);
35 enum zebra_mlag_state
{
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
);
54 int zebra_mlag_protobuf_encode_client_data(struct stream
*s
,
56 int zebra_mlag_protobuf_decode_message(struct stream
*s
, uint8_t *data
,