aboutsummaryrefslogtreecommitdiffstats
path: root/src/vnet/tcp
diff options
context:
space:
mode:
Diffstat (limited to 'src/vnet/tcp')
-rw-r--r--src/vnet/tcp/tcp.api16
-rw-r--r--src/vnet/tcp/tcp_api.c24
2 files changed, 25 insertions, 15 deletions
diff --git a/src/vnet/tcp/tcp.api b/src/vnet/tcp/tcp.api
index cfef9d62848..d745e0268b0 100644
--- a/src/vnet/tcp/tcp.api
+++ b/src/vnet/tcp/tcp.api
@@ -13,8 +13,10 @@
* limitations under the License.
*/
-option version = "1.0.0";
-
+option version = "2.0.0";
+
+import "vnet/ip/ip_types.api";
+
/** \brief Configure TCP source addresses, for active-open TCP sessions
TCP src/dst ports are 16 bits, with the low-order 1024 ports
@@ -22,9 +24,9 @@ option version = "1.0.0";
source IP addresses if one wishes to initiate a large number of
connections.
- Each of those addresses needs to have a receive adjacency -
+ Each of those addresses needs to have a receive adjacency -
either a /32 or a /128 - and vpp needs to answer (proxy) arps or
- neighbor discovery requests for the addresses.
+ neighbor discovery requests for the addresses.
@param client_index - opaque cookie to identify the sender
@param context - sender context, to match reply w/ request
@@ -36,9 +38,7 @@ option version = "1.0.0";
autoreply define tcp_configure_src_addresses {
u32 client_index;
u32 context;
- u8 is_ipv6;
u32 vrf_id;
- u8 first_address[16];
- u8 last_address[16];
+ vl_api_address_t first_address;
+ vl_api_address_t last_address;
};
-
diff --git a/src/vnet/tcp/tcp_api.c b/src/vnet/tcp/tcp_api.c
index db488e1c52a..ac4314f0e83 100644
--- a/src/vnet/tcp/tcp_api.c
+++ b/src/vnet/tcp/tcp_api.c
@@ -22,6 +22,8 @@
#include <vnet/tcp/tcp.h>
+#include <vnet/ip/ip_types_api.h>
+
#include <vnet/vnet_msg_enum.h>
#define vl_typedefs /* define message structures */
@@ -51,20 +53,28 @@ static void
vl_api_tcp_configure_src_addresses_reply_t *rmp;
u32 vrf_id;
int rv;
+ ip46_address_t first_address, last_address;
+ ip46_type_t fa_af, la_af;
vrf_id = clib_net_to_host_u32 (mp->vrf_id);
- if (mp->is_ipv6)
+ fa_af = ip_address_decode (&mp->first_address, &first_address);
+ la_af = ip_address_decode (&mp->last_address, &last_address);
+
+ if (fa_af != la_af)
+ {
+ rv = VNET_API_ERROR_INVALID_VALUE;
+ goto error;
+ }
+
+ if (fa_af == IP46_TYPE_IP6)
rv = tcp_configure_v6_source_address_range
- (vm,
- (ip6_address_t *) mp->first_address,
- (ip6_address_t *) mp->last_address, vrf_id);
+ (vm, &first_address.ip6, &last_address.ip6, vrf_id);
else
rv = tcp_configure_v4_source_address_range
- (vm,
- (ip4_address_t *) mp->first_address,
- (ip4_address_t *) mp->last_address, vrf_id);
+ (vm, &first_address.ip4, &last_address.ip4, vrf_id);
+error:
REPLY_MACRO (VL_API_TCP_CONFIGURE_SRC_ADDRESSES_REPLY);
}