diff options
Diffstat (limited to 'lib/zclient.h')
| -rw-r--r-- | lib/zclient.h | 31 |
1 files changed, 31 insertions, 0 deletions
diff --git a/lib/zclient.h b/lib/zclient.h index 70304127a2..d1aa42da6d 100644 --- a/lib/zclient.h +++ b/lib/zclient.h @@ -183,8 +183,34 @@ typedef enum { ZEBRA_MLAG_CLIENT_REGISTER, ZEBRA_MLAG_CLIENT_UNREGISTER, ZEBRA_MLAG_FORWARD_MSG, + ZEBRA_ERROR, } zebra_message_types_t; +enum zebra_error_types { + ZEBRA_UNKNOWN_ERROR, /* Error of unknown type */ + ZEBRA_NO_VRF, /* Vrf in header was not found */ + ZEBRA_INVALID_MSG_TYPE, /* No handler found for msg type */ +}; + +static inline const char *zebra_error_type2str(enum zebra_error_types type) +{ + const char *ret = "UNKNOWN"; + + switch (type) { + case ZEBRA_UNKNOWN_ERROR: + ret = "ZEBRA_UNKNOWN_ERROR"; + break; + case ZEBRA_NO_VRF: + ret = "ZEBRA_NO_VRF"; + break; + case ZEBRA_INVALID_MSG_TYPE: + ret = "ZEBRA_INVALID_MSG_TYPE"; + break; + } + + return ret; +} + struct redist_proto { uint8_t enabled; struct list *instances; @@ -280,6 +306,7 @@ struct zclient { int (*mlag_process_up)(void); int (*mlag_process_down)(void); int (*mlag_handle_msg)(struct stream *msg, int len); + int (*handle_error)(enum zebra_error_types error); }; /* Zebra API message flag. */ @@ -547,6 +574,7 @@ extern unsigned short *redist_check_instance(struct redist_proto *, unsigned short); extern void redist_add_instance(struct redist_proto *, unsigned short); extern void redist_del_instance(struct redist_proto *, unsigned short); +extern void redist_del_all_instances(struct redist_proto *red); /* * Send to zebra that the specified vrf is using label to resolve @@ -728,6 +756,9 @@ int zapi_nexthop_from_nexthop(struct zapi_nexthop *znh, extern bool zapi_nexthop_update_decode(struct stream *s, struct zapi_route *nhr); +/* Decode the zebra error message */ +extern bool zapi_error_decode(struct stream *s, enum zebra_error_types *error); + static inline void zapi_route_set_blackhole(struct zapi_route *api, enum blackhole_type bh_type) { |
