aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/plugins/sctp/sctp.api27
-rw-r--r--src/plugins/sctp/sctp_api.c29
2 files changed, 30 insertions, 26 deletions
diff --git a/src/plugins/sctp/sctp.api b/src/plugins/sctp/sctp.api
index fb228617216..22d7d6bb5d6 100644
--- a/src/plugins/sctp/sctp.api
+++ b/src/plugins/sctp/sctp.api
@@ -13,14 +13,15 @@
* limitations under the License.
*/
-option version = "1.0.0";
-
+option version = "2.0.0";
+
+import "vnet/ip/ip_types.api";
+
/** \brief Configure SCTP source addresses, for active-open SCTP sessions
SCTP src/dst ports are 16 bits
@param client_index - opaque cookie to identify the sender
@param context - sender context, to match reply w/ request
- @param is_ipv6 - 1 for ipv6, 0 for ipv4
@param vrf_id - fib table / vrf id for local adjacencies
@param src_address - src address that SCTP will use for this sub-conn
@param dst_address - dst address that SCTP will use for this sub-conn
@@ -28,24 +29,22 @@ option version = "1.0.0";
autoreply define sctp_add_src_dst_connection {
u32 client_index;
u32 context;
- u8 is_ipv6;
u32 vrf_id;
- u8 src_address[16];
- u8 dst_address[16];
+ vl_api_address_t src_address;
+ vl_api_address_t dst_address;
};
-
+
autoreply define sctp_del_src_dst_connection {
u32 client_index;
u32 context;
- u8 is_ipv6;
u32 vrf_id;
- u8 src_address[16];
- u8 dst_address[16];
+ vl_api_address_t src_address;
+ vl_api_address_t dst_address;
};
-
+
autoreply define sctp_config {
u32 client_index;
u32 context;
- u8 never_delay_sack;
- u8 never_bundle;
- }; \ No newline at end of file
+ bool never_delay_sack;
+ bool never_bundle;
+ };
diff --git a/src/plugins/sctp/sctp_api.c b/src/plugins/sctp/sctp_api.c
index bc7a69673ec..d804fcb36a4 100644
--- a/src/plugins/sctp/sctp_api.c
+++ b/src/plugins/sctp/sctp_api.c
@@ -21,6 +21,9 @@
#include <vlibapi/api.h>
#include <vlibmemory/api.h>
+#include <vnet/ip/ip_types_api.h>
+#include <vnet/format_fns.h>
+
#include <sctp/sctp.h>
#include <sctp/sctp.api_enum.h>
@@ -36,15 +39,15 @@ static void
vlib_main_t *vm = vlib_get_main ();
vl_api_sctp_add_src_dst_connection_reply_t *rmp;
int rv;
+ ip46_address_t src, dst;
+
+ ip_address_decode (&mp->src_address, &src);
+ ip_address_decode (&mp->dst_address, &dst);
- if (mp->is_ipv6)
- rv = sctp_sub_connection_add_ip6
- (vm,
- (ip6_address_t *) mp->src_address, (ip6_address_t *) mp->dst_address);
+ if (ip46_address_is_ip4 (&src) && ip46_address_is_ip4 (&dst))
+ rv = sctp_sub_connection_add_ip4 (vm, &src.ip4, &dst.ip4);
else
- rv = sctp_sub_connection_add_ip4
- (vm,
- (ip4_address_t *) mp->src_address, (ip4_address_t *) mp->dst_address);
+ rv = sctp_sub_connection_add_ip6 (vm, &src.ip6, &dst.ip6);
REPLY_MACRO (VL_API_SCTP_ADD_SRC_DST_CONNECTION_REPLY);
}
@@ -55,13 +58,15 @@ static void
{
vl_api_sctp_del_src_dst_connection_reply_t *rmp;
int rv;
+ ip46_address_t src, dst;
+
+ ip_address_decode (&mp->src_address, &src);
+ ip_address_decode (&mp->dst_address, &dst);
- if (mp->is_ipv6)
- rv = sctp_sub_connection_del_ip6
- ((ip6_address_t *) mp->src_address, (ip6_address_t *) mp->dst_address);
+ if (ip46_address_is_ip4 (&src) && ip46_address_is_ip4 (&dst))
+ rv = sctp_sub_connection_del_ip4 (&src.ip4, &dst.ip4);
else
- rv = sctp_sub_connection_del_ip4
- ((ip4_address_t *) mp->src_address, (ip4_address_t *) mp->dst_address);
+ rv = sctp_sub_connection_del_ip6 (&src.ip6, &dst.ip6);
REPLY_MACRO (VL_API_SCTP_ADD_SRC_DST_CONNECTION_REPLY);
}