]> git.proxmox.com Git - mirror_frr.git/commitdiff
bgpd: Zebra lib for Graceful Restart.
authorbisdhdh <biswajit.sadhu@gmail.com>
Fri, 25 Oct 2019 18:58:57 +0000 (00:28 +0530)
committerbisdhdh <biswajit.sadhu@gmail.com>
Thu, 23 Jan 2020 04:06:33 +0000 (09:36 +0530)
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>
lib/zclient.c
lib/zclient.h

index b2c74cd0b90875201a155cd9fa019e9947e1ebc8..150edc1276a1119adc72b22423386df0fb43224b 100644 (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;
+}
index d1aa42da6d2ae078a5c16c255c17f017308c2330..bbc70c3835989541d4da368b9ad482ec3c7766a7 100644 (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 */