summaryrefslogtreecommitdiffstats
path: root/src/vnet/ip/ip_api.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/vnet/ip/ip_api.c')
-rw-r--r--src/vnet/ip/ip_api.c134
1 files changed, 101 insertions, 33 deletions
diff --git a/src/vnet/ip/ip_api.c b/src/vnet/ip/ip_api.c
index 3e04b9f740c..dd1d1dcaf6c 100644
--- a/src/vnet/ip/ip_api.c
+++ b/src/vnet/ip/ip_api.c
@@ -43,7 +43,9 @@
#include <vnet/fib/ip6_fib.h>
#include <vnet/fib/fib_path_list.h>
#include <vnet/ip/ip6_hop_by_hop.h>
+#include <vnet/ip/reass/ip4_sv_reass.h>
#include <vnet/ip/reass/ip4_full_reass.h>
+#include <vnet/ip/reass/ip6_sv_reass.h>
#include <vnet/ip/reass/ip6_full_reass.h>
#include <vnet/ethernet/arp.h>
#include <vnet/ip/ip_types_api.h>
@@ -2736,23 +2738,51 @@ vl_api_ip_reassembly_set_t_handler (vl_api_ip_reassembly_set_t * mp)
{
vl_api_ip_reassembly_set_reply_t *rmp;
int rv = 0;
- if (mp->is_ip6)
- {
- rv = ip6_full_reass_set (clib_net_to_host_u32 (mp->timeout_ms),
- clib_net_to_host_u32 (mp->max_reassemblies),
- clib_net_to_host_u32
- (mp->max_reassembly_length),
- clib_net_to_host_u32
- (mp->expire_walk_interval_ms));
- }
- else
+ switch ((vl_api_ip_reass_type_t) clib_net_to_host_u32 (mp->type))
{
- rv = ip4_full_reass_set (clib_net_to_host_u32 (mp->timeout_ms),
- clib_net_to_host_u32 (mp->max_reassemblies),
- clib_net_to_host_u32
- (mp->max_reassembly_length),
- clib_net_to_host_u32
- (mp->expire_walk_interval_ms));
+ case IP_REASS_TYPE_FULL:
+ if (mp->is_ip6)
+ {
+ rv = ip6_full_reass_set (clib_net_to_host_u32 (mp->timeout_ms),
+ clib_net_to_host_u32
+ (mp->max_reassemblies),
+ clib_net_to_host_u32
+ (mp->max_reassembly_length),
+ clib_net_to_host_u32
+ (mp->expire_walk_interval_ms));
+ }
+ else
+ {
+ rv = ip4_full_reass_set (clib_net_to_host_u32 (mp->timeout_ms),
+ clib_net_to_host_u32
+ (mp->max_reassemblies),
+ clib_net_to_host_u32
+ (mp->max_reassembly_length),
+ clib_net_to_host_u32
+ (mp->expire_walk_interval_ms));
+ }
+ break;
+ case IP_REASS_TYPE_SHALLOW_VIRTUAL:
+ if (mp->is_ip6)
+ {
+ rv =
+ ip6_sv_reass_set (clib_net_to_host_u32 (mp->timeout_ms),
+ clib_net_to_host_u32 (mp->max_reassemblies),
+ clib_net_to_host_u32
+ (mp->max_reassembly_length),
+ clib_net_to_host_u32
+ (mp->expire_walk_interval_ms));
+ }
+ else
+ {
+ rv = ip4_sv_reass_set (clib_net_to_host_u32 (mp->timeout_ms),
+ clib_net_to_host_u32 (mp->max_reassemblies),
+ clib_net_to_host_u32
+ (mp->max_reassembly_length),
+ clib_net_to_host_u32
+ (mp->expire_walk_interval_ms));
+ }
+ break;
}
REPLY_MACRO (VL_API_IP_REASSEMBLY_SET_REPLY);
@@ -2772,19 +2802,42 @@ vl_api_ip_reassembly_get_t_handler (vl_api_ip_reassembly_get_t * mp)
rmp->_vl_msg_id = ntohs (VL_API_IP_REASSEMBLY_GET_REPLY);
rmp->context = mp->context;
rmp->retval = 0;
- if (mp->is_ip6)
+ u32 timeout_ms;
+ u32 max_reassemblies;
+ u32 max_reassembly_length;
+ u32 expire_walk_interval_ms;
+ switch ((vl_api_ip_reass_type_t) clib_net_to_host_u32 (mp->type))
{
- rmp->is_ip6 = 1;
- ip6_full_reass_get (&rmp->timeout_ms, &rmp->max_reassemblies,
- &rmp->max_reassembly_length,
- &rmp->expire_walk_interval_ms);
- }
- else
- {
- rmp->is_ip6 = 0;
- ip4_full_reass_get (&rmp->timeout_ms, &rmp->max_reassemblies,
- &rmp->max_reassembly_length,
- &rmp->expire_walk_interval_ms);
+ case IP_REASS_TYPE_FULL:
+ if (mp->is_ip6)
+ {
+ rmp->is_ip6 = 1;
+ ip6_full_reass_get (&timeout_ms, &max_reassemblies,
+ &max_reassembly_length,
+ &expire_walk_interval_ms);
+ }
+ else
+ {
+ rmp->is_ip6 = 0;
+ ip4_full_reass_get (&timeout_ms, &max_reassemblies,
+ &max_reassembly_length,
+ &expire_walk_interval_ms);
+ }
+ break;
+ case IP_REASS_TYPE_SHALLOW_VIRTUAL:
+ if (mp->is_ip6)
+ {
+ rmp->is_ip6 = 1;
+ ip6_sv_reass_get (&timeout_ms, &max_reassemblies,
+ &max_reassembly_length, &expire_walk_interval_ms);
+ }
+ else
+ {
+ rmp->is_ip6 = 0;
+ ip4_sv_reass_get (&timeout_ms, &max_reassemblies,
+ &max_reassembly_length, &expire_walk_interval_ms);
+ }
+ break;
}
rmp->timeout_ms = clib_host_to_net_u32 (rmp->timeout_ms);
rmp->max_reassemblies = clib_host_to_net_u32 (rmp->max_reassemblies);
@@ -2799,13 +2852,28 @@ void
{
vl_api_ip_reassembly_enable_disable_reply_t *rmp;
int rv = 0;
- rv = ip4_full_reass_enable_disable (clib_net_to_host_u32 (mp->sw_if_index),
- mp->enable_ip4);
- if (0 == rv)
+ switch ((vl_api_ip_reass_type_t) clib_net_to_host_u32 (mp->type))
{
+ case IP_REASS_TYPE_FULL:
rv =
- ip6_full_reass_enable_disable (clib_net_to_host_u32 (mp->sw_if_index),
- mp->enable_ip6);
+ ip4_full_reass_enable_disable (clib_net_to_host_u32 (mp->sw_if_index),
+ mp->enable_ip4);
+ if (0 == rv)
+ rv =
+ ip6_full_reass_enable_disable (clib_net_to_host_u32
+ (mp->sw_if_index), mp->enable_ip6);
+ break;
+ case IP_REASS_TYPE_SHALLOW_VIRTUAL:
+ rv =
+ ip4_sv_reass_enable_disable (clib_net_to_host_u32 (mp->sw_if_index),
+ mp->enable_ip4);
+ if (0 == rv)
+ {
+ rv =
+ ip6_sv_reass_enable_disable (clib_net_to_host_u32
+ (mp->sw_if_index), mp->enable_ip6);
+ }
+ break;
}
REPLY_MACRO (VL_API_IP_REASSEMBLY_ENABLE_DISABLE_REPLY);