diff options
Diffstat (limited to 'src/vnet/pg/pg_api.c')
-rw-r--r-- | src/vnet/pg/pg_api.c | 39 |
1 files changed, 33 insertions, 6 deletions
diff --git a/src/vnet/pg/pg_api.c b/src/vnet/pg/pg_api.c index 57fb40cdda4..68953533b07 100644 --- a/src/vnet/pg/pg_api.c +++ b/src/vnet/pg/pg_api.c @@ -33,11 +33,24 @@ vl_api_pg_create_interface_t_handler (vl_api_pg_create_interface_t * mp) { vl_api_pg_create_interface_reply_t *rmp; int rv = 0; + u32 pg_if_id = ~0; pg_main_t *pg = &pg_main; - u32 pg_if_id = - pg_interface_add_or_get (pg, ntohl (mp->interface_id), mp->gso_enabled, - ntohl (mp->gso_size), 0, PG_MODE_ETHERNET); + pg_interface_args_t args = { 0 }; + + args.mode = PG_MODE_ETHERNET; + args.gso_size = 0; + args.hw_addr_set = 0; + args.flags = 0; + args.if_id = ntohl (mp->interface_id); + + if (mp->gso_enabled) + { + args.flags = PG_INTERFACE_FLAG_GSO; + args.gso_size = ntohl (mp->gso_size); + } + + pg_if_id = pg_interface_add_or_get (pg, &args); pg_interface_t *pi = pool_elt_at_index (pg->interfaces, pg_if_id); REPLY_MACRO2(VL_API_PG_CREATE_INTERFACE_REPLY, @@ -51,11 +64,25 @@ vl_api_pg_create_interface_v2_t_handler (vl_api_pg_create_interface_v2_t *mp) { vl_api_pg_create_interface_v2_reply_t *rmp; int rv = 0; + u32 pg_if_id = ~0; pg_main_t *pg = &pg_main; - u32 pg_if_id = - pg_interface_add_or_get (pg, ntohl (mp->interface_id), mp->gso_enabled, - ntohl (mp->gso_size), 0, (u8) mp->mode); + + pg_interface_args_t args = { 0 }; + + args.mode = (pg_interface_mode_t) mp->mode; + args.gso_size = 0; + args.hw_addr_set = 0; + args.flags = 0; + args.if_id = ntohl (mp->interface_id); + + if (mp->gso_enabled) + { + args.flags = PG_INTERFACE_FLAG_GSO; + args.gso_size = ntohl (mp->gso_size); + } + + pg_if_id = pg_interface_add_or_get (pg, &args); pg_interface_t *pi = pool_elt_at_index (pg->interfaces, pg_if_id); REPLY_MACRO2 (VL_API_PG_CREATE_INTERFACE_V2_REPLY, |