]>
git.proxmox.com Git - mirror_frr.git/blob - lib/mlag.c
1 // SPDX-License-Identifier: GPL-2.0-or-later
3 * Copyright (C) 2018 Cumulus Networks, Inc.
10 char *mlag_role2str(enum mlag_role role
, char *buf
, size_t size
)
14 snprintf(buf
, size
, "NONE");
16 case MLAG_ROLE_PRIMARY
:
17 snprintf(buf
, size
, "PRIMARY");
19 case MLAG_ROLE_SECONDARY
:
20 snprintf(buf
, size
, "SECONDARY");
27 char *mlag_lib_msgid_to_str(enum mlag_msg_type msg_type
, char *buf
, size_t size
)
31 snprintf(buf
, size
, "Register");
34 snprintf(buf
, size
, "De-Register");
37 snprintf(buf
, size
, "Mroute add");
40 snprintf(buf
, size
, "Mroute del");
43 snprintf(buf
, size
, "Mlag Replay");
45 case MLAG_MROUTE_ADD_BULK
:
46 snprintf(buf
, size
, "Mroute Add Batch");
48 case MLAG_MROUTE_DEL_BULK
:
49 snprintf(buf
, size
, "Mroute Del Batch");
51 case MLAG_STATUS_UPDATE
:
52 snprintf(buf
, size
, "Mlag Status");
54 case MLAG_VXLAN_UPDATE
:
55 snprintf(buf
, size
, "Mlag vxlan update");
57 case MLAG_PEER_FRR_STATUS
:
58 snprintf(buf
, size
, "Mlag Peer FRR Status");
60 case MLAG_PIM_CFG_DUMP
:
61 snprintf(buf
, size
, "Mlag Pim Configuration Dump");
64 snprintf(buf
, size
, "Unknown %d", msg_type
);
71 int mlag_lib_decode_mlag_hdr(struct stream
*s
, struct mlag_msg
*msg
,
74 #define LIB_MLAG_HDR_LENGTH 8
75 if (s
== NULL
|| msg
== NULL
)
78 *length
= stream_get_endp(s
);
80 if (*length
< LIB_MLAG_HDR_LENGTH
)
83 *length
-= LIB_MLAG_HDR_LENGTH
;
85 STREAM_GETL(s
, msg
->msg_type
);
86 STREAM_GETW(s
, msg
->data_len
);
87 STREAM_GETW(s
, msg
->msg_cnt
);
94 #define MLAG_MROUTE_ADD_LENGTH \
95 (VRF_NAMSIZ + INTERFACE_NAMSIZ + 4 + 4 + 4 + 4 + 1 + 1 + 4)
97 int mlag_lib_decode_mroute_add(struct stream
*s
, struct mlag_mroute_add
*msg
,
100 if (s
== NULL
|| msg
== NULL
|| *length
< MLAG_MROUTE_ADD_LENGTH
)
103 STREAM_GET(msg
->vrf_name
, s
, VRF_NAMSIZ
);
104 STREAM_GETL(s
, msg
->source_ip
);
105 STREAM_GETL(s
, msg
->group_ip
);
106 STREAM_GETL(s
, msg
->cost_to_rp
);
107 STREAM_GETL(s
, msg
->owner_id
);
108 STREAM_GETC(s
, msg
->am_i_dr
);
109 STREAM_GETC(s
, msg
->am_i_dual_active
);
110 STREAM_GETL(s
, msg
->vrf_id
);
111 STREAM_GET(msg
->intf_name
, s
, INTERFACE_NAMSIZ
);
118 #define MLAG_MROUTE_DEL_LENGTH (VRF_NAMSIZ + INTERFACE_NAMSIZ + 4 + 4 + 4 + 4)
120 int mlag_lib_decode_mroute_del(struct stream
*s
, struct mlag_mroute_del
*msg
,
123 if (s
== NULL
|| msg
== NULL
|| *length
< MLAG_MROUTE_DEL_LENGTH
)
126 STREAM_GET(msg
->vrf_name
, s
, VRF_NAMSIZ
);
127 STREAM_GETL(s
, msg
->source_ip
);
128 STREAM_GETL(s
, msg
->group_ip
);
129 STREAM_GETL(s
, msg
->owner_id
);
130 STREAM_GETL(s
, msg
->vrf_id
);
131 STREAM_GET(msg
->intf_name
, s
, INTERFACE_NAMSIZ
);
138 int mlag_lib_decode_mlag_status(struct stream
*s
, struct mlag_status
*msg
)
140 if (s
== NULL
|| msg
== NULL
)
143 STREAM_GET(msg
->peerlink_rif
, s
, INTERFACE_NAMSIZ
);
144 STREAM_GETL(s
, msg
->my_role
);
145 STREAM_GETL(s
, msg
->peer_state
);
151 int mlag_lib_decode_vxlan_update(struct stream
*s
, struct mlag_vxlan
*msg
)
153 if (s
== NULL
|| msg
== NULL
)
156 STREAM_GETL(s
, msg
->anycast_ip
);
157 STREAM_GETL(s
, msg
->local_ip
);
164 int mlag_lib_decode_frr_status(struct stream
*s
, struct mlag_frr_status
*msg
)
166 if (s
== NULL
|| msg
== NULL
)
169 STREAM_GETL(s
, msg
->frr_state
);