@@ -15,34 +15,44 @@ VLIB_REGISTER_LOG_CLASS (dev_log, static) = {
1515 .subclass_name = "config" ,
1616};
1717
18+ typedef struct
19+ {
20+ vnet_dev_api_create_port_if_args_t intf ;
21+ vnet_dev_api_port_set_rss_key_args_t rss_key_args ;
22+ } port_config_t ;
23+
1824static clib_error_t *
1925vnet_dev_config_one_interface (vlib_main_t * vm , unformat_input_t * input ,
20- vnet_dev_api_create_port_if_args_t * args )
26+ port_config_t * args )
2127{
2228 clib_error_t * err = 0 ;
2329
24- log_debug (0 , "port %u %U" , args -> port_id , format_unformat_input , input );
30+ log_debug (0 , "port %u %U" , args -> intf .port_id , format_unformat_input ,
31+ input );
2532
2633 while (unformat_check_input (input ) != UNFORMAT_END_OF_INPUT )
2734 {
2835 u32 n ;
2936
30- if (unformat (input , "name %U" , unformat_c_string_array , args -> intf_name ,
31- sizeof (args -> intf_name )))
37+ if (unformat (input , "name %U" , unformat_c_string_array ,
38+ args -> intf . intf_name , sizeof (args -> intf . intf_name )))
3239 ;
3340 else if (unformat (input , "num-rx-queues %u" , & n ))
34- args -> num_rx_queues = n ;
41+ args -> intf . num_rx_queues = n ;
3542 else if (unformat (input , "num-tx-queues %u" , & n ))
36- args -> num_tx_queues = n ;
43+ args -> intf . num_tx_queues = n ;
3744 else if (unformat (input , "rx-queue-size %u" , & n ))
38- args -> rx_queue_size = n ;
45+ args -> intf . rx_queue_size = n ;
3946 else if (unformat (input , "tx-queue-size %u" , & n ))
40- args -> tx_queue_size = n ;
47+ args -> intf .tx_queue_size = n ;
48+ else if (unformat (input , "rss-key %U" , unformat_vnet_dev_rss_key ,
49+ & args -> rss_key_args .rss_key ))
50+ ;
4151 else if (unformat (input , "flags %U" , unformat_vnet_dev_port_flags ,
42- & args -> flags ))
52+ & args -> intf . flags ))
4353 ;
4454 else if (unformat (input , "args %U" , unformat_single_quoted_string ,
45- & args -> args ))
55+ & args -> intf . args ))
4656 ;
4757 else
4858 {
@@ -112,15 +122,14 @@ vnet_dev_config_driver_args (vlib_main_t *vm, unformat_input_t *input,
112122
113123 return err ;
114124}
115-
116125static clib_error_t *
117126vnet_dev_config_one_device (vlib_main_t * vm , unformat_input_t * input ,
118127 char * device_id )
119128{
120129 log_debug (0 , "device %s %U" , device_id , format_unformat_input , input );
121130 clib_error_t * err = 0 ;
122131 vnet_dev_api_attach_args_t args = {};
123- vnet_dev_api_create_port_if_args_t * if_args_vec = 0 , * if_args ;
132+ port_config_t * ports = 0 , * p ;
124133
125134 while (unformat_check_input (input ) != UNFORMAT_END_OF_INPUT )
126135 {
@@ -139,10 +148,9 @@ vnet_dev_config_one_device (vlib_main_t *vm, unformat_input_t *input,
139148 else if (unformat (input , "port %u %U" , & n , unformat_vlib_cli_sub_input ,
140149 & sub_input ))
141150 {
142- vnet_dev_api_create_port_if_args_t * if_args ;
143- vec_add2 (if_args_vec , if_args , 1 );
144- if_args -> port_id = n ;
145- err = vnet_dev_config_one_interface (vm , & sub_input , if_args );
151+ vec_add2 (ports , p , 1 );
152+ p -> intf .port_id = n ;
153+ err = vnet_dev_config_one_interface (vm , & sub_input , p );
146154 unformat_free (& sub_input );
147155 if (err )
148156 break ;
@@ -165,12 +173,21 @@ vnet_dev_config_one_device (vlib_main_t *vm, unformat_input_t *input,
165173
166174 if (rv == VNET_DEV_OK )
167175 {
168- vec_foreach (if_args , if_args_vec )
176+ vec_foreach (p , ports )
169177 {
170- if_args -> dev_index = args .dev_index ;
171- rv = vnet_dev_api_create_port_if (vm , if_args );
178+ p -> intf . dev_index = args .dev_index ;
179+ rv = vnet_dev_api_create_port_if (vm , & p -> intf );
172180 if (rv != VNET_DEV_OK )
173181 break ;
182+ if (p -> rss_key_args .rss_key .length )
183+ {
184+ vnet_dev_api_port_set_rss_key_args_t * rka = & p -> rss_key_args ;
185+ rka -> port_id = p -> intf .port_id ;
186+ rka -> dev_index = p -> intf .dev_index ;
187+ rv = vnet_dev_api_port_set_rss_key (vm , rka );
188+ if (rv != VNET_DEV_OK )
189+ break ;
190+ }
174191 }
175192 }
176193
@@ -179,7 +196,7 @@ vnet_dev_config_one_device (vlib_main_t *vm, unformat_input_t *input,
179196 format_vnet_dev_rv , rv , device_id );
180197 }
181198
182- vec_free (if_args_vec );
199+ vec_free (ports );
183200 return err ;
184201}
185202
0 commit comments