summaryrefslogtreecommitdiffstats
path: root/mlag
diff options
context:
space:
mode:
authorDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-28 09:53:30 +0000
committerDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-28 09:53:30 +0000
commit2c7cac91ed6e7db0f6937923d2b57f97dbdbc337 (patch)
treec05dc0f8e6aa3accc84e3e5cffc933ed94941383 /mlag
parentInitial commit. (diff)
downloadfrr-2c7cac91ed6e7db0f6937923d2b57f97dbdbc337.tar.xz
frr-2c7cac91ed6e7db0f6937923d2b57f97dbdbc337.zip
Adding upstream version 8.4.4.upstream/8.4.4upstream
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'mlag')
-rw-r--r--mlag/mlag.proto186
-rw-r--r--mlag/subdir.am19
2 files changed, 205 insertions, 0 deletions
diff --git a/mlag/mlag.proto b/mlag/mlag.proto
new file mode 100644
index 0000000..1e30215
--- /dev/null
+++ b/mlag/mlag.proto
@@ -0,0 +1,186 @@
+// See README.txt for information and build instructions.
+//
+// Note: START and END tags are used in comments to define sections used in
+// tutorials. They are not part of the syntax for Protocol Buffers.
+//
+// To get an in-depth walkthrough of this file and the related examples, see:
+// https://developers.google.com/protocol-buffers/docs/tutorials
+
+// [START declaration]
+syntax = "proto3";
+//package tutorial;
+
+/*
+ * This Contains the Message structures used for PIM MLAG Active-Active support.
+ * Mainly there were two types of messages
+ *
+ * 1. Messages sent from PIM (Node-1) to PIM (Node-2)
+ * 2. Messages sent from CLAG to PIM (status Messages)
+ *
+ * ProtoBuf supports maximum 32 fields, so to make it more generic message
+ * encoding is like below.
+ * __________________________________________
+ * | | |
+ * | Header | bytes |
+ * ___________________________________________
+ *
+ *
+ * Header carries Information about
+ * 1) what Message it is carrying
+ * 2) Bytes carries the actual payload encoded with protobuf
+ *
+ *
+ * Limitations
+ *=============
+ * Since message-type is 32-bit, there were no real limitations on number of
+ * messages Infra can support, but each message can carry only 32 fields.
+ *
+ */
+
+
+// [START messages]
+message ZebraMlag_Header {
+ enum MessageType {
+ ZEBRA_MLAG_NONE = 0; //Invalid message-type
+ ZEBRA_MLAG_REGISTER = 1;
+ ZEBRA_MLAG_DEREGISTER = 2;
+ ZEBRA_MLAG_STATUS_UPDATE = 3;
+ ZEBRA_MLAG_MROUTE_ADD = 4;
+ ZEBRA_MLAG_MROUTE_DEL = 5;
+ ZEBRA_MLAG_DUMP = 6;
+ ZEBRA_MLAG_MROUTE_ADD_BULK = 7;
+ ZEBRA_MLAG_MROUTE_DEL_BULK = 8;
+ ZEBRA_MLAG_PIM_CFG_DUMP = 10;
+ ZEBRA_MLAG_VXLAN_UPDATE = 11;
+ ZEBRA_MLAG_ZEBRA_STATUS_UPDATE = 12;
+ }
+
+ /*
+ * tells what type of message this payload carries
+ */
+ MessageType type = 1;
+
+ /*
+ * Length of payload
+ */
+ uint32 len = 2;
+
+ /*
+ * Actual Encoded payload
+ */
+ bytes data = 3;
+}
+
+
+/*
+ * ZEBRA_MLAG_REGISTER & ZEBRA_MLAG_DEREGISTER
+ *
+ * After the MLAGD is up, First Zebra has to register to send any data,
+ * otherwise MLAGD will not accept any data from the client.
+ * De-register will be used for the Data cleanup at MLAGD
+ * These are NULL payload message currently
+ */
+
+/*
+ * ZEBRA_MLAG_STATUS_UPDATE
+ *
+ * This message will be posted by CLAGD(an external control plane manager
+ * which monitors CLAG failures) to inform peerlink/CLAG Failure
+ * to zebra, after the failure Notification Node with primary role will
+ * forward the Traffic and Node with standby will drop the traffic
+ */
+
+message ZebraMlagStatusUpdate {
+ enum ClagState {
+ CLAG_STATE_DOWN = 0;
+ CLAG_STATE_RUNNING = 1;
+ }
+
+ enum ClagRole {
+ CLAG_ROLE_NONE = 0;
+ CLAG_ROLE_PRIMAY = 1;
+ CLAG_ROLE_SECONDARY = 2;
+ }
+
+ string peerlink = 1;
+ ClagRole my_role = 2;
+ ClagState peer_state = 3;
+}
+
+/*
+ * ZEBRA_MLAG_VXLAN_UPDATE
+ *
+ * This message will be posted by CLAGD(an external control plane Manager
+ * which is responsible for MCLAG) to inform zebra obout anycast/local
+ * ip updates.
+ */
+message ZebraMlagVxlanUpdate {
+ uint32 anycast_ip = 1;
+ uint32 local_ip = 2;
+}
+
+/*
+ * ZebraMlagZebraStatusUpdate
+ *
+ * This message will be posted by CLAGD to advertise FRR state
+ * Change Information to peer
+ */
+
+message ZebraMlagZebraStatusUpdate{
+ enum FrrState {
+ FRR_STATE_NONE = 0;
+ FRR_STATE_DOWN = 1;
+ FRR_STATE_UP = 2;
+ }
+
+ FrrState peer_frrstate = 1;
+}
+
+/*
+ * ZEBRA_MLAG_MROUTE_ADD & ZEBRA_MLAG_MROUTE_DEL
+ *
+ * These messages will be sent from PIM (Node-1) to PIM (Node-2) to perform
+ * DF Election for each Mcast flow. Elected DF will forward the traffic
+ * towards the host and loser will keep the OIL as empty, so that only single
+ * copy will be sent to host
+ * This message will be posted with any change in the params.
+ *
+ * ZEBRA_MLAG_MROUTE_DEL is mainly to delete the record at MLAGD when the
+ * mcast flow is deleted.
+ * key for the MLAGD lookup is (vrf_id, source_ip & group_ip)
+ */
+
+message ZebraMlagMrouteAdd {
+ string vrf_name = 1;
+ uint32 source_ip = 2;
+ uint32 group_ip = 3;
+ /*
+ * This is the IGP Cost to reach Configured RP in case of (*,G) or
+ * Cost to the source in case of (S,G) entry
+ */
+ uint32 cost_to_rp = 4;
+ uint32 owner_id = 5;
+ bool am_i_DR = 6;
+ bool am_i_Dual_active = 7;
+ uint32 vrf_id = 8;
+ string intf_name = 9;
+}
+
+message ZebraMlagMrouteDel {
+ string vrf_name = 1;
+ uint32 source_ip = 2;
+ uint32 group_ip = 3;
+ uint32 owner_id = 4;
+ uint32 vrf_id = 5;
+ string intf_name = 6;
+}
+
+message ZebraMlagMrouteAddBulk {
+ repeated ZebraMlagMrouteAdd mroute_add = 1;
+}
+
+message ZebraMlagMrouteDelBulk {
+ repeated ZebraMlagMrouteDel mroute_del = 1;
+}
+
+// [END messages]
diff --git a/mlag/subdir.am b/mlag/subdir.am
new file mode 100644
index 0000000..376eea8
--- /dev/null
+++ b/mlag/subdir.am
@@ -0,0 +1,19 @@
+if HAVE_PROTOBUF3
+lib_LTLIBRARIES += mlag/libmlag_pb.la
+endif
+
+mlag_libmlag_pb_la_LDFLAGS = $(LIB_LDFLAGS) -version-info 0:0:0
+mlag_libmlag_pb_la_CPPFLAGS = $(AM_CPPFLAGS) $(PROTOBUF_C_CFLAGS)
+mlag_libmlag_pb_la_SOURCES = \
+ # end
+
+nodist_mlag_libmlag_pb_la_SOURCES = \
+ mlag/mlag.pb-c.c \
+ # end
+
+CLEANFILES += \
+ mlag/mlag.pb-c.c \
+ mlag/mlag.pb-c.h \
+ # end
+
+EXTRA_DIST += mlag/mlag.proto