From 4e6014fc9e8611eef16d9267151f1039ff00c190 Mon Sep 17 00:00:00 2001 From: Jakub Grajciar Date: Tue, 24 Jul 2018 14:00:41 +0200 Subject: [PATCH] avf: api fix avf_create_reply returns software index for the new interface Change-Id: I8a6b1a1985b072efafa24eb258b1f2cb1bea1110 Signed-off-by: Jakub Grajciar --- src/plugins/avf/avf.api | 15 ++++++++++++++- src/plugins/avf/avf.h | 1 + src/plugins/avf/avf_api.c | 14 +++++++++----- src/plugins/avf/device.c | 2 +- 4 files changed, 25 insertions(+), 7 deletions(-) diff --git a/src/plugins/avf/avf.api b/src/plugins/avf/avf.api index 096d45b8c82..cbded705e49 100644 --- a/src/plugins/avf/avf.api +++ b/src/plugins/avf/avf.api @@ -27,7 +27,7 @@ option version = "1.0.0"; @param txq_size - transmit queue size */ -autoreply define avf_create +define avf_create { u32 client_index; u32 context; @@ -38,6 +38,19 @@ autoreply define avf_create u16 txq_size; }; +/** \brief + @param context - sender context, to match reply w/ request + @param retval - return value for request + @param sw_if_index - software index for the new avf interface +*/ + +define avf_create_reply +{ + u32 context; + i32 retval; + u32 sw_if_index; +}; + /** \brief @param client_index - opaque cookie to identify the sender @param context - sender context, to match reply w/ request diff --git a/src/plugins/avf/avf.h b/src/plugins/avf/avf.h index 32bbb46fde4..14d78195f76 100644 --- a/src/plugins/avf/avf.h +++ b/src/plugins/avf/avf.h @@ -204,6 +204,7 @@ typedef struct u16 txq_size; /* return */ int rv; + u32 sw_if_index; clib_error_t *error; } avf_create_if_args_t; diff --git a/src/plugins/avf/avf_api.c b/src/plugins/avf/avf_api.c index 7c5925244ca..3bb720b27f2 100644 --- a/src/plugins/avf/avf_api.c +++ b/src/plugins/avf/avf_api.c @@ -62,20 +62,24 @@ vl_api_avf_create_t_handler (vl_api_avf_create_t * mp) avf_main_t *am = &avf_main; vl_api_avf_create_reply_t *rmp; avf_create_if_args_t args; - int rv = 0; + int rv; memset (&args, 0, sizeof (avf_create_if_args_t)); args.enable_elog = ntohl (mp->enable_elog); args.addr.as_u32 = ntohl (mp->pci_addr); - args.rxq_size = ntohl (mp->rxq_size); - args.txq_size = ntohl (mp->txq_size); + args.rxq_size = ntohs (mp->rxq_size); + args.txq_size = ntohs (mp->txq_size); avf_create_if (vm, &args); - rv = args.rv; - REPLY_MACRO (VL_API_AVF_CREATE_REPLY + am->msg_id_base); + /* *INDENT-OFF* */ + REPLY_MACRO2 (VL_API_AVF_CREATE_REPLY + am->msg_id_base, + ({ + rmp->sw_if_index = ntohl (args.sw_if_index); + })); + /* *INDENT-ON* */ } static void diff --git a/src/plugins/avf/device.c b/src/plugins/avf/device.c index be2205b6169..0e9a8bfe517 100644 --- a/src/plugins/avf/device.c +++ b/src/plugins/avf/device.c @@ -1171,7 +1171,7 @@ avf_create_if (vlib_main_t * vm, avf_create_if_args_t * args) goto error; vnet_sw_interface_t *sw = vnet_get_hw_sw_interface (vnm, ad->hw_if_index); - ad->sw_if_index = sw->sw_if_index; + args->sw_if_index = ad->sw_if_index = sw->sw_if_index; vnet_hw_interface_t *hw = vnet_get_hw_interface (vnm, ad->hw_if_index); hw->flags |= VNET_HW_INTERFACE_FLAG_SUPPORTS_INT_MODE; -- 2.16.6