summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/plugins/avf/avf.api15
-rw-r--r--src/plugins/avf/avf.h1
-rw-r--r--src/plugins/avf/avf_api.c14
-rw-r--r--src/plugins/avf/device.c2
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;
@@ -39,6 +39,19 @@ autoreply define avf_create
};
/** \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
@param sw_if_index - interface index
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;