]> git.proxmox.com Git - mirror_frr.git/blobdiff - lib/mlag.h
Merge pull request #5473 from yasuhiro-ohara-ntt/ospf6d-self-orig-maxage-fix
[mirror_frr.git] / lib / mlag.h
index d461fdc44e99944ad95cf9dfc2da2c372a2dc6a3..c531fb5b68772f87d26c257f5403c7b9a577dd8b 100644 (file)
 extern "C" {
 #endif
 
+#include "lib/if.h"
+#include "lib/vrf.h"
+#include "lib/stream.h"
+
+#define MLAG_MSG_NULL_PAYLOAD 0
+#define MLAG_MSG_NO_BATCH 1
 #define MLAG_BUF_LIMIT 2048
 
 enum mlag_role {
@@ -34,9 +40,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 +76,66 @@ 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 *mlag_lib_msgid_to_str(enum mlag_msg_type msg_type, char *buf,
+                                  size_t size);
+extern int mlag_lib_decode_mlag_hdr(struct stream *s, struct mlag_msg *msg);
+extern int mlag_lib_decode_mroute_add(struct stream *s,
+                                     struct mlag_mroute_add *msg);
+extern int mlag_lib_decode_mroute_del(struct stream *s,
+                                     struct mlag_mroute_del *msg);
+extern int mlag_lib_decode_mlag_status(struct stream *s,
+                                      struct mlag_status *msg);
+extern int mlag_lib_decode_vxlan_update(struct stream *s,
+                                       struct mlag_vxlan *msg);
+extern int mlag_lib_decode_frr_status(struct stream *s,
+                                     struct mlag_frr_status *msg);
 #ifdef __cplusplus
 }
 #endif