mpls: implement state change callbacks
There was already a basic type defined, but nothing more. This implements callbacks similar to ip4_enable_disable_interface_callback_t. Type: feature Change-Id: I34fcb146ca68af4eb8cdd244529eb149f884284d Signed-off-by: Adrian Pistol <vifino@posteo.net>
This commit is contained in:

committed by
Neale Ranns

parent
06f1290703
commit
ae48ffb503
@ -22,6 +22,14 @@
|
|||||||
#include <vnet/adj/adj_midchain.h>
|
#include <vnet/adj/adj_midchain.h>
|
||||||
#include <vnet/dpo/classify_dpo.h>
|
#include <vnet/dpo/classify_dpo.h>
|
||||||
|
|
||||||
|
typedef struct
|
||||||
|
{
|
||||||
|
mpls_interface_state_change_function_t *function;
|
||||||
|
uword function_opaque;
|
||||||
|
} mpls_interface_state_change_callback_t;
|
||||||
|
|
||||||
|
/** Functions to call when interface becomes MPLS enabled/disabled. */
|
||||||
|
static mpls_interface_state_change_callback_t *state_change_callbacks;
|
||||||
|
|
||||||
u8
|
u8
|
||||||
mpls_sw_interface_is_enabled (u32 sw_if_index)
|
mpls_sw_interface_is_enabled (u32 sw_if_index)
|
||||||
@ -34,6 +42,17 @@ mpls_sw_interface_is_enabled (u32 sw_if_index)
|
|||||||
return (mm->mpls_enabled_by_sw_if_index[sw_if_index]);
|
return (mm->mpls_enabled_by_sw_if_index[sw_if_index]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
mpls_interface_state_change_add_callback (
|
||||||
|
mpls_interface_state_change_function_t *function, uword opaque)
|
||||||
|
{
|
||||||
|
mpls_interface_state_change_callback_t cb = {
|
||||||
|
.function = function,
|
||||||
|
.function_opaque = opaque,
|
||||||
|
};
|
||||||
|
vec_add1 (state_change_callbacks, cb);
|
||||||
|
}
|
||||||
|
|
||||||
int
|
int
|
||||||
mpls_sw_interface_enable_disable (mpls_main_t *mm, u32 sw_if_index,
|
mpls_sw_interface_enable_disable (mpls_main_t *mm, u32 sw_if_index,
|
||||||
u8 is_enable)
|
u8 is_enable)
|
||||||
@ -81,6 +100,12 @@ mpls_sw_interface_enable_disable (mpls_main_t *mm, u32 sw_if_index,
|
|||||||
else if (hi->l3_if_count)
|
else if (hi->l3_if_count)
|
||||||
hi->l3_if_count--;
|
hi->l3_if_count--;
|
||||||
|
|
||||||
|
{
|
||||||
|
mpls_interface_state_change_callback_t *cb;
|
||||||
|
vec_foreach (cb, state_change_callbacks)
|
||||||
|
cb->function (mm, cb->function_opaque, sw_if_index, is_enable);
|
||||||
|
}
|
||||||
|
|
||||||
return (0);
|
return (0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -23,14 +23,18 @@
|
|||||||
#include <vnet/fib/fib_node.h>
|
#include <vnet/fib/fib_node.h>
|
||||||
#include <vnet/adj/adj.h>
|
#include <vnet/adj/adj.h>
|
||||||
|
|
||||||
|
struct mpls_main_t;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Definition of a callback for receiving MPLS interface state change
|
* @brief Definition of a callback for receiving MPLS interface state change
|
||||||
* notifications
|
* notifications
|
||||||
*/
|
*/
|
||||||
typedef void (*mpls_interface_state_change_callback_t) (u32 sw_if_index,
|
typedef void (mpls_interface_state_change_function_t) (struct mpls_main_t *mm,
|
||||||
u32 is_enable);
|
uword opaque,
|
||||||
|
u32 sw_if_index,
|
||||||
|
u32 is_enable);
|
||||||
|
|
||||||
typedef struct
|
typedef struct mpls_main_t
|
||||||
{
|
{
|
||||||
/* MPLS FIB index for each software interface */
|
/* MPLS FIB index for each software interface */
|
||||||
u32 *fib_index_by_sw_if_index;
|
u32 *fib_index_by_sw_if_index;
|
||||||
@ -77,11 +81,14 @@ unformat_function_t unformat_mpls_unicast_label;
|
|||||||
unformat_function_t unformat_mpls_header;
|
unformat_function_t unformat_mpls_header;
|
||||||
unformat_function_t unformat_pg_mpls_header;
|
unformat_function_t unformat_pg_mpls_header;
|
||||||
|
|
||||||
|
u8 mpls_sw_interface_is_enabled (u32 sw_if_index);
|
||||||
|
|
||||||
|
void mpls_interface_state_change_add_callback (
|
||||||
|
mpls_interface_state_change_function_t *function, uword opaque);
|
||||||
|
|
||||||
int mpls_sw_interface_enable_disable (mpls_main_t *mm, u32 sw_if_index,
|
int mpls_sw_interface_enable_disable (mpls_main_t *mm, u32 sw_if_index,
|
||||||
u8 is_enable);
|
u8 is_enable);
|
||||||
|
|
||||||
u8 mpls_sw_interface_is_enabled (u32 sw_if_index);
|
|
||||||
|
|
||||||
int mpls_dest_cmp (void *a1, void *a2);
|
int mpls_dest_cmp (void *a1, void *a2);
|
||||||
|
|
||||||
int mpls_fib_index_cmp (void *a1, void *a2);
|
int mpls_fib_index_cmp (void *a1, void *a2);
|
||||||
|
Reference in New Issue
Block a user