mirror of
https://git.proxmox.com/git/mirror_frr
synced 2025-08-15 09:20:25 +00:00
zebra: Add enum dp_req_result
to lsp install/deletes
Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
This commit is contained in:
parent
ebecd64913
commit
7c5d0e1853
@ -90,9 +90,9 @@ extern int kernel_neigh_update(int cmd, int ifindex, uint32_t addr, char *lla,
|
|||||||
extern int kernel_interface_set_master(struct interface *master,
|
extern int kernel_interface_set_master(struct interface *master,
|
||||||
struct interface *slave);
|
struct interface *slave);
|
||||||
|
|
||||||
extern void kernel_add_lsp(zebra_lsp_t *lsp);
|
extern enum dp_req_result kernel_add_lsp(zebra_lsp_t *lsp);
|
||||||
extern void kernel_upd_lsp(zebra_lsp_t *lsp);
|
extern enum dp_req_result kernel_upd_lsp(zebra_lsp_t *lsp);
|
||||||
extern void kernel_del_lsp(zebra_lsp_t *lsp);
|
extern enum dp_req_result kernel_del_lsp(zebra_lsp_t *lsp);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Add the ability to pass back up the lsp install/delete
|
* Add the ability to pass back up the lsp install/delete
|
||||||
|
@ -860,7 +860,7 @@ static void lsp_uninstall_from_kernel(struct hash_backet *backet, void *ctxt)
|
|||||||
|
|
||||||
lsp = (zebra_lsp_t *)backet->data;
|
lsp = (zebra_lsp_t *)backet->data;
|
||||||
if (CHECK_FLAG(lsp->flags, LSP_FLAG_INSTALLED))
|
if (CHECK_FLAG(lsp->flags, LSP_FLAG_INSTALLED))
|
||||||
kernel_del_lsp(lsp);
|
(void)kernel_del_lsp(lsp);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@ -914,17 +914,31 @@ static wq_item_status lsp_process(struct work_queue *wq, void *data)
|
|||||||
if (newbest) {
|
if (newbest) {
|
||||||
|
|
||||||
UNSET_FLAG(lsp->flags, LSP_FLAG_CHANGED);
|
UNSET_FLAG(lsp->flags, LSP_FLAG_CHANGED);
|
||||||
kernel_add_lsp(lsp);
|
switch (kernel_add_lsp(lsp)) {
|
||||||
|
case DP_REQUEST_QUEUED:
|
||||||
|
zlog_err("No current DataPlane interfaces can return this, please fix");
|
||||||
|
break;
|
||||||
|
case DP_REQUEST_FAILURE:
|
||||||
|
break;
|
||||||
|
case DP_REQUEST_SUCCESS:
|
||||||
zvrf->lsp_installs++;
|
zvrf->lsp_installs++;
|
||||||
|
break;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
/* Installed, may need an update and/or delete. */
|
/* Installed, may need an update and/or delete. */
|
||||||
if (!newbest) {
|
if (!newbest) {
|
||||||
|
|
||||||
kernel_del_lsp(lsp);
|
switch (kernel_del_lsp(lsp)) {
|
||||||
|
case DP_REQUEST_QUEUED:
|
||||||
|
zlog_err("No current DataPlane interfaces can return this, please fix");
|
||||||
|
break;
|
||||||
|
case DP_REQUEST_FAILURE:
|
||||||
|
break;
|
||||||
|
case DP_REQUEST_SUCCESS:
|
||||||
zvrf->lsp_removals++;
|
zvrf->lsp_removals++;
|
||||||
|
break;
|
||||||
|
}
|
||||||
} else if (CHECK_FLAG(lsp->flags, LSP_FLAG_CHANGED)) {
|
} else if (CHECK_FLAG(lsp->flags, LSP_FLAG_CHANGED)) {
|
||||||
zebra_nhlfe_t *nhlfe;
|
zebra_nhlfe_t *nhlfe;
|
||||||
struct nexthop *nexthop;
|
struct nexthop *nexthop;
|
||||||
@ -953,9 +967,16 @@ static wq_item_status lsp_process(struct work_queue *wq, void *data)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
kernel_upd_lsp(lsp);
|
switch (kernel_upd_lsp(lsp)) {
|
||||||
|
case DP_REQUEST_QUEUED:
|
||||||
|
zlog_err("No current DataPlane interfaces can return this, please fix");
|
||||||
|
break;
|
||||||
|
case DP_REQUEST_FAILURE:
|
||||||
|
break;
|
||||||
|
case DP_REQUEST_SUCCESS:
|
||||||
zvrf->lsp_installs++;
|
zvrf->lsp_installs++;
|
||||||
|
break;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -29,13 +29,13 @@
|
|||||||
/*
|
/*
|
||||||
* Install Label Forwarding entry into the kernel.
|
* Install Label Forwarding entry into the kernel.
|
||||||
*/
|
*/
|
||||||
void kernel_add_lsp(zebra_lsp_t *lsp)
|
enum dp_req_result kernel_add_lsp(zebra_lsp_t *lsp)
|
||||||
{
|
{
|
||||||
int ret;
|
int ret;
|
||||||
|
|
||||||
if (!lsp || !lsp->best_nhlfe) { // unexpected
|
if (!lsp || !lsp->best_nhlfe) { // unexpected
|
||||||
kernel_lsp_pass_fail(lsp, DP_INSTALL_FAILURE);
|
kernel_lsp_pass_fail(lsp, DP_INSTALL_FAILURE);
|
||||||
return;
|
return DP_REQUEST_FAILURE;
|
||||||
}
|
}
|
||||||
|
|
||||||
ret = netlink_mpls_multipath(RTM_NEWROUTE, lsp);
|
ret = netlink_mpls_multipath(RTM_NEWROUTE, lsp);
|
||||||
@ -43,6 +43,8 @@ void kernel_add_lsp(zebra_lsp_t *lsp)
|
|||||||
kernel_lsp_pass_fail(lsp,
|
kernel_lsp_pass_fail(lsp,
|
||||||
(!ret) ? DP_INSTALL_SUCCESS
|
(!ret) ? DP_INSTALL_SUCCESS
|
||||||
: DP_INSTALL_FAILURE);
|
: DP_INSTALL_FAILURE);
|
||||||
|
|
||||||
|
return DP_REQUEST_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@ -56,13 +58,13 @@ void kernel_add_lsp(zebra_lsp_t *lsp)
|
|||||||
* through the metric field (before kernel-MPLS). This shouldn't be an issue
|
* through the metric field (before kernel-MPLS). This shouldn't be an issue
|
||||||
* any longer, so REPLACE can be reintroduced.
|
* any longer, so REPLACE can be reintroduced.
|
||||||
*/
|
*/
|
||||||
void kernel_upd_lsp(zebra_lsp_t *lsp)
|
enum dp_req_result kernel_upd_lsp(zebra_lsp_t *lsp)
|
||||||
{
|
{
|
||||||
int ret;
|
int ret;
|
||||||
|
|
||||||
if (!lsp || !lsp->best_nhlfe) { // unexpected
|
if (!lsp || !lsp->best_nhlfe) { // unexpected
|
||||||
kernel_lsp_pass_fail(lsp, DP_INSTALL_FAILURE);
|
kernel_lsp_pass_fail(lsp, DP_INSTALL_FAILURE);
|
||||||
return;
|
return DP_REQUEST_FAILURE;
|
||||||
}
|
}
|
||||||
|
|
||||||
ret = netlink_mpls_multipath(RTM_NEWROUTE, lsp);
|
ret = netlink_mpls_multipath(RTM_NEWROUTE, lsp);
|
||||||
@ -70,23 +72,25 @@ void kernel_upd_lsp(zebra_lsp_t *lsp)
|
|||||||
kernel_lsp_pass_fail(lsp,
|
kernel_lsp_pass_fail(lsp,
|
||||||
(!ret) ? DP_INSTALL_SUCCESS
|
(!ret) ? DP_INSTALL_SUCCESS
|
||||||
: DP_INSTALL_FAILURE);
|
: DP_INSTALL_FAILURE);
|
||||||
|
|
||||||
|
return DP_REQUEST_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Delete Label Forwarding entry from the kernel.
|
* Delete Label Forwarding entry from the kernel.
|
||||||
*/
|
*/
|
||||||
void kernel_del_lsp(zebra_lsp_t *lsp)
|
enum dp_req_result kernel_del_lsp(zebra_lsp_t *lsp)
|
||||||
{
|
{
|
||||||
int ret;
|
int ret;
|
||||||
|
|
||||||
if (!lsp) { // unexpected
|
if (!lsp) { // unexpected
|
||||||
kernel_lsp_pass_fail(lsp, DP_DELETE_FAILURE);
|
kernel_lsp_pass_fail(lsp, DP_DELETE_FAILURE);
|
||||||
return;
|
return DP_REQUEST_FAILURE;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!CHECK_FLAG(lsp->flags, LSP_FLAG_INSTALLED)) {
|
if (!CHECK_FLAG(lsp->flags, LSP_FLAG_INSTALLED)) {
|
||||||
kernel_lsp_pass_fail(lsp, DP_DELETE_FAILURE);
|
kernel_lsp_pass_fail(lsp, DP_DELETE_FAILURE);
|
||||||
return;
|
return DP_REQUEST_FAILURE;
|
||||||
}
|
}
|
||||||
|
|
||||||
ret = netlink_mpls_multipath(RTM_DELROUTE, lsp);
|
ret = netlink_mpls_multipath(RTM_DELROUTE, lsp);
|
||||||
@ -94,6 +98,8 @@ void kernel_del_lsp(zebra_lsp_t *lsp)
|
|||||||
kernel_lsp_pass_fail(lsp,
|
kernel_lsp_pass_fail(lsp,
|
||||||
(!ret) ? DP_DELETE_SUCCESS
|
(!ret) ? DP_DELETE_SUCCESS
|
||||||
: DP_DELETE_FAILURE);
|
: DP_DELETE_FAILURE);
|
||||||
|
|
||||||
|
return DP_REQUEST_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
int mpls_kernel_init(void)
|
int mpls_kernel_init(void)
|
||||||
|
@ -24,18 +24,21 @@
|
|||||||
|
|
||||||
#if !defined(HAVE_NETLINK) && !defined(OPEN_BSD)
|
#if !defined(HAVE_NETLINK) && !defined(OPEN_BSD)
|
||||||
|
|
||||||
void kernel_add_lsp(zebra_lsp_t *lsp)
|
enum dp_req_result kernel_add_lsp(zebra_lsp_t *lsp)
|
||||||
{
|
{
|
||||||
return;
|
return DP_REQUEST_SUCCESS;
|
||||||
}
|
}
|
||||||
void kernel_upd_lsp(zebra_lsp_t *lsp)
|
|
||||||
|
enum dp_req_result kernel_upd_lsp(zebra_lsp_t *lsp)
|
||||||
{
|
{
|
||||||
return;
|
return DP_REQUEST_SUCCESS;
|
||||||
}
|
}
|
||||||
void kernel_del_lsp(zebra_lsp_t *lsp)
|
|
||||||
|
enum dp_req_result kernel_del_lsp(zebra_lsp_t *lsp)
|
||||||
{
|
{
|
||||||
return;
|
return DP_REQUEST_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
int mpls_kernel_init(void)
|
int mpls_kernel_init(void)
|
||||||
{
|
{
|
||||||
return -1;
|
return -1;
|
||||||
|
@ -285,13 +285,13 @@ static int kernel_lsp_cmd(int action, zebra_lsp_t *lsp)
|
|||||||
return (0);
|
return (0);
|
||||||
}
|
}
|
||||||
|
|
||||||
void kernel_add_lsp(zebra_lsp_t *lsp)
|
enum dp_req_result kernel_add_lsp(zebra_lsp_t *lsp)
|
||||||
{
|
{
|
||||||
int ret;
|
int ret;
|
||||||
|
|
||||||
if (!lsp || !lsp->best_nhlfe) { // unexpected
|
if (!lsp || !lsp->best_nhlfe) { // unexpected
|
||||||
kernel_lsp_pass_fail(lsp, DP_INSTALL_FAILURE);
|
kernel_lsp_pass_fail(lsp, DP_INSTALL_FAILURE);
|
||||||
return;
|
return DP_REQUEST_FAILURE;
|
||||||
}
|
}
|
||||||
|
|
||||||
ret = kernel_lsp_cmd(RTM_ADD, lsp);
|
ret = kernel_lsp_cmd(RTM_ADD, lsp);
|
||||||
@ -299,15 +299,17 @@ void kernel_add_lsp(zebra_lsp_t *lsp)
|
|||||||
kernel_lsp_pass_fail(lsp,
|
kernel_lsp_pass_fail(lsp,
|
||||||
(!ret) ? DP_INSTALL_SUCCESS
|
(!ret) ? DP_INSTALL_SUCCESS
|
||||||
: DP_INSTALL_FAILURE);
|
: DP_INSTALL_FAILURE);
|
||||||
|
|
||||||
|
return DP_REQUEST_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
void kernel_upd_lsp(zebra_lsp_t *lsp)
|
enum dp_req_result kernel_upd_lsp(zebra_lsp_t *lsp)
|
||||||
{
|
{
|
||||||
int ret;
|
int ret;
|
||||||
|
|
||||||
if (!lsp || !lsp->best_nhlfe) { // unexpected
|
if (!lsp || !lsp->best_nhlfe) { // unexpected
|
||||||
kernel_lsp_pass_fail(lsp, DP_INSTALL_FAILURE);
|
kernel_lsp_pass_fail(lsp, DP_INSTALL_FAILURE);
|
||||||
return;
|
return DP_REQUEST_FAILURE;
|
||||||
}
|
}
|
||||||
|
|
||||||
ret = kernel_lsp_cmd(RTM_CHANGE, lsp);
|
ret = kernel_lsp_cmd(RTM_CHANGE, lsp);
|
||||||
@ -315,21 +317,21 @@ void kernel_upd_lsp(zebra_lsp_t *lsp)
|
|||||||
kernel_lsp_pass_fail(lsp,
|
kernel_lsp_pass_fail(lsp,
|
||||||
(!ret) ? DP_INSTALL_SUCCESS
|
(!ret) ? DP_INSTALL_SUCCESS
|
||||||
: DP_INSTALL_FAILURE);
|
: DP_INSTALL_FAILURE);
|
||||||
return;
|
return DP_REQUEST_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
void kernel_del_lsp(zebra_lsp_t *lsp)
|
enum dp_req_result kernel_del_lsp(zebra_lsp_t *lsp)
|
||||||
{
|
{
|
||||||
int ret;
|
int ret;
|
||||||
|
|
||||||
if (!lsp) { // unexpected
|
if (!lsp) { // unexpected
|
||||||
kernel_lsp_pass_fail(lsp, DP_DELETE_FAILURE);
|
kernel_lsp_pass_fail(lsp, DP_DELETE_FAILURE);
|
||||||
return;
|
return DP_REQUEST_FAILURE;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!CHECK_FLAG(lsp->flags, LSP_FLAG_INSTALLED)) {
|
if (!CHECK_FLAG(lsp->flags, LSP_FLAG_INSTALLED)) {
|
||||||
kernel_lsp_pass_fail(lsp, DP_DELETE_FAILURE);
|
kernel_lsp_pass_fail(lsp, DP_DELETE_FAILURE);
|
||||||
return;
|
return DP_REQUEST_FAILURE;
|
||||||
}
|
}
|
||||||
|
|
||||||
ret = kernel_lsp_cmd(RTM_DELETE, lsp);
|
ret = kernel_lsp_cmd(RTM_DELETE, lsp);
|
||||||
@ -337,6 +339,8 @@ void kernel_del_lsp(zebra_lsp_t *lsp)
|
|||||||
kernel_lsp_pass_fail(lsp,
|
kernel_lsp_pass_fail(lsp,
|
||||||
(!ret) ? DP_DELETE_SUCCESS
|
(!ret) ? DP_DELETE_SUCCESS
|
||||||
: DP_DELETE_FAILURE);
|
: DP_DELETE_FAILURE);
|
||||||
|
|
||||||
|
return DP_REQUEST_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int kmpw_install(struct zebra_pw *pw)
|
static int kmpw_install(struct zebra_pw *pw)
|
||||||
|
Loading…
Reference in New Issue
Block a user