summaryrefslogtreecommitdiffstats
path: root/lib/mlag.h
diff options
context:
space:
mode:
Diffstat (limited to 'lib/mlag.h')
-rw-r--r--lib/mlag.h84
1 files changed, 82 insertions, 2 deletions
diff --git a/lib/mlag.h b/lib/mlag.h
index d461fdc44..942d4be3b 100644
--- a/lib/mlag.h
+++ b/lib/mlag.h
@@ -26,6 +26,10 @@
extern "C" {
#endif
+#include "lib/if.h"
+#include "lib/vrf.h"
+#include "lib/stream.h"
+
#define MLAG_BUF_LIMIT 2048
enum mlag_role {
@@ -34,9 +38,26 @@ enum mlag_role {
MLAG_ROLE_SECONDARY
};
+enum mlag_state {
+ MLAG_STATE_DOWN,
+ MLAG_STATE_RUNNING,
+};
+
+enum mlag_frr_state {
+ MLAG_FRR_STATE_NONE,
+ MLAG_FRR_STATE_DOWN,
+ MLAG_FRR_STATE_UP,
+};
+
+enum mlag_owner {
+ MLAG_OWNER_NONE,
+ MLAG_OWNER_INTERFACE,
+ MLAG_OWNER_VXLAN,
+};
+
/*
* This message definition should match mlag.proto
- * Beacuse mesasge registartion is based on this
+ * Because message registration is based on this
*/
enum mlag_msg_type {
MLAG_MSG_NONE = 0,
@@ -53,8 +74,67 @@ enum mlag_msg_type {
MLAG_PEER_FRR_STATUS = 12,
};
-extern char *mlag_role2str(enum mlag_role role, char *buf, size_t size);
+struct mlag_frr_status {
+ enum mlag_frr_state frr_state;
+};
+
+struct mlag_status {
+ char peerlink_rif[INTERFACE_NAMSIZ];
+ enum mlag_role my_role;
+ enum mlag_state peer_state;
+};
+#define MLAG_ROLE_STRSIZE 16
+
+struct mlag_vxlan {
+ uint32_t anycast_ip;
+ uint32_t local_ip;
+};
+
+struct mlag_mroute_add {
+ char vrf_name[VRF_NAMSIZ];
+ uint32_t source_ip;
+ uint32_t group_ip;
+ uint32_t cost_to_rp;
+ enum mlag_owner owner_id;
+ bool am_i_dr;
+ bool am_i_dual_active;
+ vrf_id_t vrf_id;
+ char intf_name[INTERFACE_NAMSIZ];
+};
+
+struct mlag_mroute_del {
+ char vrf_name[VRF_NAMSIZ];
+ uint32_t source_ip;
+ uint32_t group_ip;
+ enum mlag_owner owner_id;
+ vrf_id_t vrf_id;
+ char intf_name[INTERFACE_NAMSIZ];
+};
+
+struct mlag_msg {
+ enum mlag_msg_type msg_type;
+ uint16_t data_len;
+ uint16_t msg_cnt;
+ uint8_t data[0];
+}__attribute__((packed));
+
+
+extern char *mlag_role2str(enum mlag_role role, char *buf, size_t size);
+extern char *zebra_mlag_lib_msgid_to_str(enum mlag_msg_type msg_type, char *buf,
+ size_t size);
+extern int zebra_mlag_lib_decode_mlag_hdr(struct stream *s,
+ struct mlag_msg *msg);
+extern int zebra_mlag_lib_decode_mroute_add(struct stream *s,
+ struct mlag_mroute_add *msg);
+extern int zebra_mlag_lib_decode_mroute_del(struct stream *s,
+ struct mlag_mroute_del *msg);
+extern int zebra_mlag_lib_decode_mlag_status(struct stream *s,
+ struct mlag_status *msg);
+extern int zebra_mlag_lib_decode_vxlan_update(struct stream *s,
+ struct mlag_vxlan *msg);
+extern int zebra_mlag_lib_decode_frr_status(struct stream *s,
+ struct mlag_frr_status *msg);
#ifdef __cplusplus
}
#endif