diff options
-rw-r--r-- | src/plugins/sctp/sctp.api | 27 | ||||
-rw-r--r-- | src/plugins/sctp/sctp_api.c | 29 |
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); } |