diff options
Diffstat (limited to 'src/vnet/ipsec/ipsec_punt.c')
-rw-r--r-- | src/vnet/ipsec/ipsec_punt.c | 18 |
1 files changed, 18 insertions, 0 deletions
diff --git a/src/vnet/ipsec/ipsec_punt.c b/src/vnet/ipsec/ipsec_punt.c index 357e9596cfc..a08231ab299 100644 --- a/src/vnet/ipsec/ipsec_punt.c +++ b/src/vnet/ipsec/ipsec_punt.c @@ -17,11 +17,27 @@ #include <vnet/ipsec/ipsec.h> #include <vnet/ipsec/ipsec_punt.h> +#include <vnet/ipsec/ipsec_tun.h> static vlib_punt_hdl_t punt_hdl; vlib_punt_reason_t ipsec_punt_reason[IPSEC_PUNT_N_REASONS]; +static void +ipsec_punt_interested_listener (vlib_enable_or_disable_t action, void *data) +{ + if (action == VLIB_ENABLE) + { + ipsec_tun_register_nodes (AF_IP4); + ipsec_tun_register_nodes (AF_IP6); + } + else + { + ipsec_tun_unregister_nodes (AF_IP4); + ipsec_tun_unregister_nodes (AF_IP6); + } +} + static clib_error_t * ipsec_punt_init (vlib_main_t * vm) { @@ -33,6 +49,8 @@ ipsec_punt_init (vlib_main_t * vm) punt_hdl = vlib_punt_client_register ("ipsec"); #define _(s,v) vlib_punt_reason_alloc (punt_hdl, v, \ + ipsec_punt_interested_listener, \ + NULL, \ &ipsec_punt_reason[IPSEC_PUNT_##s]); foreach_ipsec_punt_reason #undef _ |