From: bisdhdh Date: Fri, 25 Oct 2019 18:58:57 +0000 (+0530) Subject: bgpd: Zebra lib for Graceful Restart. X-Git-Tag: frr-7.5.1~848^2~7 X-Git-Url: https://git.proxmox.com/?a=commitdiff_plain;h=eb451ee5894fc4c6b00ecf010c9ec7ad4a9dec22;p=mirror_frr.git 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 Signed-off-by: Soman K S --- diff --git a/lib/zclient.c b/lib/zclient.c index b2c74cd0b..150edc127 100644 --- a/lib/zclient.c +++ b/lib/zclient.c @@ -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; +} diff --git a/lib/zclient.h b/lib/zclient.h index d1aa42da6..bbc70c383 100644 --- a/lib/zclient.h +++ b/lib/zclient.h @@ -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 */