/*
* Utility that prepares a route update and enqueues it for processing
*/
-static int dplane_route_update_internal(struct route_node *rn,
- struct route_entry *re,
- struct route_entry *old_re,
- dplane_op_e op)
+static enum zebra_dplane_result
+dplane_route_update_internal(struct route_node *rn,
+ struct route_entry *re,
+ struct route_entry *old_re,
+ dplane_op_e op)
{
+ enum zebra_dplane_result result = ZEBRA_DPLANE_REQUEST_FAILURE;
int ret = EINVAL;
dplane_ctx_h ctx = NULL;
}
done:
- if (ret != AOK && ctx) {
+ if (ret == AOK) {
+ result = ZEBRA_DPLANE_REQUEST_QUEUED;
+ } else if (ctx) {
dplane_ctx_free(&ctx);
- }
+ }
- return (ret);
+ return (result);
}
/*
* Enqueue a route 'add' for the dataplane.
*/
-int dplane_route_add(struct route_node *rn,
- struct route_entry *re)
+enum zebra_dplane_result dplane_route_add(struct route_node *rn,
+ struct route_entry *re)
{
- int ret = EINVAL;
+ enum zebra_dplane_result ret = ZEBRA_DPLANE_REQUEST_FAILURE;
if (rn == NULL || re == NULL) {
goto done;
DPLANE_OP_ROUTE_INSTALL);
done:
-
return (ret);
}
/*
* Enqueue a route update for the dataplane.
*/
-int dplane_route_update(struct route_node *rn,
- struct route_entry *re,
- struct route_entry *old_re)
+enum zebra_dplane_result dplane_route_update(struct route_node *rn,
+ struct route_entry *re,
+ struct route_entry *old_re)
{
- int ret = EINVAL;
+ enum zebra_dplane_result ret = ZEBRA_DPLANE_REQUEST_FAILURE;
if (rn == NULL || re == NULL) {
goto done;
ret = dplane_route_update_internal(rn, re, old_re,
DPLANE_OP_ROUTE_UPDATE);
-
done:
-
return (ret);
}
/*
* Enqueue a route removal for the dataplane.
*/
-int dplane_route_delete(struct route_node *rn,
- struct route_entry *re)
+enum zebra_dplane_result dplane_route_delete(struct route_node *rn,
+ struct route_entry *re)
{
- int ret = EINVAL;
+ enum zebra_dplane_result ret = ZEBRA_DPLANE_REQUEST_FAILURE;
if (rn == NULL || re == NULL) {
goto done;
DPLANE_OP_ROUTE_DELETE);
done:
-
return (ret);
}
} dplane_op_e;
-/*
- * Enqueue a route removal for the dataplane.
- */
-
/*
* Opaque context block used to exchange info between the main zebra
* context and the dataplane module(s). If these are two independent pthreads,
/*
* Enqueue route change operations for the dataplane.
*/
-int dplane_route_add(struct route_node *rn,
- struct route_entry *re);
+enum zebra_dplane_result dplane_route_add(struct route_node *rn,
+ struct route_entry *re);
-int dplane_route_update(struct route_node *rn,
- struct route_entry *re,
- struct route_entry *old_re);
+enum zebra_dplane_result dplane_route_update(struct route_node *rn,
+ struct route_entry *re,
+ struct route_entry *old_re);
-int dplane_route_delete(struct route_node *rn,
- struct route_entry *re);
+enum zebra_dplane_result dplane_route_delete(struct route_node *rn,
+ struct route_entry *re);
/* Opaque handle to a dataplane provider plugin */
typedef struct zebra_dplane_provider_s *dplane_provider_h;