blob: 1e302151f82a582f000f68b81040b50ddf2c14a1 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
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]
|