DP_DELETE_FAILURE,
};
+enum dp_req_result {
+ DP_REQUEST_QUEUED,
+ DP_REQUEST_SUCCESS,
+ DP_REQUEST_FAILURE,
+};
+
/*
* Install/delete the specified prefix p from the kernel
*
* semantics so we will end up with a delete than
* a re-add.
*/
-extern void kernel_route_rib(struct route_node *rn, struct prefix *p,
- struct prefix *src_p, struct route_entry *old,
- struct route_entry *new);
+extern enum dp_req_result kernel_route_rib(struct route_node *rn,
+ struct prefix *p,
+ struct prefix *src_p,
+ struct route_entry *old,
+ struct route_entry *new);
/*
* So route install/failure may not be immediately known
return suc;
}
-void kernel_route_rib(struct route_node *rn, struct prefix *p,
- struct prefix *src_p,
+enum dp_req_result kernel_route_rib(struct route_node *rn,
+ struct prefix *p,
+ struct prefix *src_p,
struct route_entry *old,
struct route_entry *new)
{
kernel_route_rib_pass_fail(rn, p, new,
(!ret) ? DP_INSTALL_SUCCESS
: DP_INSTALL_FAILURE);
- return;
+ return DP_REQUEST_SUCCESS;
}
if (old) {
: DP_DELETE_FAILURE);
}
- return;
+ return DP_REQUEST_SUCCESS;
}
int kernel_neigh_update(int add, int ifindex, uint32_t addr, char *lla,
return 0;
}
-void kernel_route_rib(struct route_node *rn, struct prefix *p,
- struct prefix *src_p, struct route_entry *old,
- struct route_entry *new)
+enum dp_req_result kernel_route_rib(struct route_node *rn,
+ struct prefix *p,
+ struct prefix *src_p,
+ struct route_entry *old,
+ struct route_entry *new)
{
int route = 0;
? DP_DELETE_SUCCESS
: DP_DELETE_FAILURE);
}
+
+ return DP_REQUEST_SUCCESS;
}
int kernel_neigh_update(int add, int ifindex, uint32_t addr, char *lla,
* the kernel.
*/
hook_call(rib_update, rn, "installing in kernel");
- kernel_route_rib(rn, p, src_p, old, re);
- zvrf->installs++;
+ switch (kernel_route_rib(rn, p, src_p, old, re)) {
+ case DP_REQUEST_QUEUED:
+ zlog_err("No current known DataPlane interfaces can return this, please fix");
+ break;
+ case DP_REQUEST_FAILURE:
+ zlog_err("No current known Rib Install Failure cases, please fix");
+ break;
+ case DP_REQUEST_SUCCESS:
+ zvrf->installs++;
+ break;
+ }
return;
}
* the kernel.
*/
hook_call(rib_update, rn, "uninstalling from kernel");
- kernel_route_rib(rn, p, src_p, re, NULL);
- if (zvrf)
- zvrf->removals++;
+ switch (kernel_route_rib(rn, p, src_p, re, NULL)) {
+ case DP_REQUEST_QUEUED:
+ zlog_err("No current known DataPlane interfaces can return this, please fix");
+ break;
+ case DP_REQUEST_FAILURE:
+ zlog_err("No current known RIB Install Failure cases, please fix");
+ break;
+ case DP_REQUEST_SUCCESS:
+ if (zvrf)
+ zvrf->removals++;
+ break;
+ }
return;
}