+clib_error_t *
+avf_op_config_rss_lut (vlib_main_t * vm, avf_device_t * ad)
+{
+ int msg_len = sizeof (virtchnl_rss_lut_t) + ad->rss_lut_size - 1;
+ int i;
+ u8 msg[msg_len];
+ virtchnl_rss_lut_t *rl;
+
+ clib_memset (msg, 0, msg_len);
+ rl = (virtchnl_rss_lut_t *) msg;
+ rl->vsi_id = ad->vsi_id;
+ rl->lut_entries = ad->rss_lut_size;
+ for (i = 0; i < ad->rss_lut_size; i++)
+ rl->lut[i] = i % ad->n_rx_queues;
+
+ avf_log_debug (ad, "config_rss_lut: vsi_id %u rss_lut_size %u lut %U",
+ rl->vsi_id, rl->lut_entries, format_hex_bytes, rl->lut,
+ rl->lut_entries);
+
+ return avf_send_to_pf (vm, ad, VIRTCHNL_OP_CONFIG_RSS_LUT, msg, msg_len, 0,
+ 0);
+}
+
+clib_error_t *
+avf_op_config_rss_key (vlib_main_t * vm, avf_device_t * ad)
+{
+ int msg_len = sizeof (virtchnl_rss_key_t) + ad->rss_key_size - 1;
+ int i;
+ u8 msg[msg_len];
+ virtchnl_rss_key_t *rk;
+
+ clib_memset (msg, 0, msg_len);
+ rk = (virtchnl_rss_key_t *) msg;
+ rk->vsi_id = ad->vsi_id;
+ rk->key_len = ad->rss_key_size;
+ u32 seed = random_default_seed ();
+ for (i = 0; i < ad->rss_key_size; i++)
+ rk->key[i] = (u8) random_u32 (&seed);
+
+ avf_log_debug (ad, "config_rss_key: vsi_id %u rss_key_size %u key %U",
+ rk->vsi_id, rk->key_len, format_hex_bytes, rk->key,
+ rk->key_len);
+
+ return avf_send_to_pf (vm, ad, VIRTCHNL_OP_CONFIG_RSS_KEY, msg, msg_len, 0,
+ 0);
+}
+