bgpd: Zebra lib for Graceful Restart.

These changes are for Zebra lib in order to supportGraceful Restart
feature. These changes are addedtemporarily, until Zebra Graceful
Restart lib Pr is merged.

Signed-off-by: Biswajit Sadhu <sadhub@vmware.com>
Signed-off-by: Soman K S <somanks@vmware.com>
This commit is contained in:
bisdhdh 2019-10-26 00:28:57 +05:30
parent 2d3dd828db
commit eb451ee589
2 changed files with 49 additions and 0 deletions

View file

@ -3299,3 +3299,31 @@ void zclient_interface_set_master(struct zclient *client,
stream_putw_at(s, 0, stream_get_endp(s));
zclient_send_message(client);
}
/* Process capabilities message from zebra */
int zapi_capabilities_decode(struct stream *s, struct zapi_cap *api)
{
memset(api, 0, sizeof(*api));
STREAM_GETL(s, api->cap);
switch (api->cap) {
case ZEBRA_CLIENT_GR_CAPABILITIES:
case ZEBRA_CLIENT_RIB_STALE_TIME:
STREAM_GETL(s, api->stale_removal_time);
STREAM_GETL(s, api->vrf_id);
break;
case ZEBRA_CLIENT_ROUTE_UPDATE_COMPLETE:
case ZEBRA_CLIENT_ROUTE_UPDATE_PENDING:
STREAM_GETL(s, api->afi);
STREAM_GETL(s, api->safi);
STREAM_GETL(s, api->vrf_id);
break;
case ZEBRA_CLIENT_GR_DISABLE:
STREAM_GETL(s, api->vrf_id);
break;
default:
break;
}
stream_failure:
return 0;
}

View file

@ -73,6 +73,14 @@ typedef uint16_t zebra_size_t;
#define ZEBRA_FEC_REGISTER_LABEL 0x1
#define ZEBRA_FEC_REGISTER_LABEL_INDEX 0x2
/* Client Graceful Restart */
#define ZEBRA_CLIENT_GR_CAPABILITIES 0x1
#define ZEBRA_CLIENT_ROUTE_UPDATE_COMPLETE 0x2
#define ZEBRA_CLIENT_ROUTE_UPDATE_PENDING 0x3
#define ZEBRA_CLIENT_GR_DISABLE 0x4
#define ZEBRA_CLIENT_RIB_STALE_TIME 0x5
#define ZEBRA_CLIENT_GR_ENABLED(X) (X & ZEBRA_CLIENT_GR_CAPABILITIES)
extern struct sockaddr_storage zclient_addr;
extern socklen_t zclient_addr_len;
@ -184,6 +192,7 @@ typedef enum {
ZEBRA_MLAG_CLIENT_UNREGISTER,
ZEBRA_MLAG_FORWARD_MSG,
ZEBRA_ERROR,
ZEBRA_CLIENT_CAPABILITIES
} zebra_message_types_t;
enum zebra_error_types {
@ -222,6 +231,15 @@ struct zclient_capabilities {
enum mlag_role role;
};
/* Graceful Restart Capabilities message */
struct zapi_cap {
uint32_t cap;
uint32_t stale_removal_time;
afi_t afi;
safi_t safi;
vrf_id_t vrf_id;
};
/* Structure for the zebra client. */
struct zclient {
/* The thread master we schedule ourselves on */
@ -776,4 +794,7 @@ extern void zclient_send_mlag_deregister(struct zclient *client);
extern void zclient_send_mlag_data(struct zclient *client,
struct stream *client_s);
extern int zclient_capabilities_send(uint32_t cmd, struct zclient *zclient,
struct zapi_cap *api);
extern int zapi_capabilities_decode(struct stream *s, struct zapi_cap *api);
#endif /* _ZEBRA_ZCLIENT_H */