@@ -968,6 +968,10 @@ mlx5_devx_cmd_query_hca_attr(void *ctx,
max_geneve_tlv_options);
attr->max_geneve_tlv_option_data_len = MLX5_GET(cmd_hca_cap, hcattr,
max_geneve_tlv_option_data_len);
+ attr->geneve_tlv_option_offset = MLX5_GET(cmd_hca_cap, hcattr,
+ geneve_tlv_option_offset);
+ attr->geneve_tlv_sample = MLX5_GET(cmd_hca_cap, hcattr,
+ geneve_tlv_sample);
attr->query_match_sample_info = MLX5_GET(cmd_hca_cap, hcattr,
query_match_sample_info);
attr->qos.sup = MLX5_GET(cmd_hca_cap, hcattr, qos);
@@ -2886,11 +2890,21 @@ mlx5_devx_cmd_create_geneve_tlv_option(void *ctx,
MLX5_CMD_OP_CREATE_GENERAL_OBJECT);
MLX5_SET(general_obj_in_cmd_hdr, hdr, obj_type,
MLX5_GENERAL_OBJ_TYPE_GENEVE_TLV_OPT);
- MLX5_SET(geneve_tlv_option, opt, option_class,
- rte_be_to_cpu_16(attr->option_class));
MLX5_SET(geneve_tlv_option, opt, option_type, attr->option_type);
MLX5_SET(geneve_tlv_option, opt, option_data_length,
attr->option_data_len);
+ if (attr->option_class_ignore)
+ MLX5_SET(geneve_tlv_option, opt, option_class_ignore,
+ attr->option_class_ignore);
+ else
+ MLX5_SET(geneve_tlv_option, opt, option_class,
+ rte_be_to_cpu_16(attr->option_class));
+ if (attr->offset_valid) {
+ MLX5_SET(geneve_tlv_option, opt, sample_offset_valid,
+ attr->offset_valid);
+ MLX5_SET(geneve_tlv_option, opt, sample_offset,
+ attr->sample_offset);
+ }
geneve_tlv_opt_obj->obj = mlx5_glue->devx_obj_create(ctx, in,
sizeof(in), out,
sizeof(out));
@@ -212,8 +212,10 @@ struct mlx5_hca_attr {
uint32_t lro_timer_supported_periods[MLX5_LRO_NUM_SUPP_PERIODS];
uint16_t lro_min_mss_size;
uint32_t flex_parser_protocols;
- uint32_t max_geneve_tlv_options;
- uint32_t max_geneve_tlv_option_data_len;
+ uint32_t max_geneve_tlv_options:8;
+ uint32_t max_geneve_tlv_option_data_len:5;
+ uint32_t geneve_tlv_sample:1;
+ uint32_t geneve_tlv_option_offset:1;
uint32_t hairpin:1;
uint32_t log_max_hairpin_queues:5;
uint32_t log_max_hairpin_wq_data_sz:5;
@@ -675,6 +677,9 @@ struct mlx5_devx_geneve_tlv_option_attr {
uint32_t option_class:16;
uint32_t option_type:8;
uint32_t option_data_len:5;
+ uint32_t option_class_ignore:1;
+ uint32_t offset_valid:1;
+ uint32_t sample_offset:8;
};
/* mlx5_devx_cmds.c */
@@ -1854,7 +1854,9 @@ struct mlx5_ifc_cmd_hca_cap_bits {
u8 num_of_uars_per_page[0x20];
u8 flex_parser_protocols[0x20];
u8 max_geneve_tlv_options[0x8];
- u8 reserved_at_568[0x3];
+ u8 geneve_tlv_sample[0x1];
+ u8 geneve_tlv_option_offset[0x1];
+ u8 reserved_at_56a[0x1];
u8 max_geneve_tlv_option_data_len[0x5];
u8 flex_parser_header_modify[0x1];
u8 reserved_at_571[0x2];
@@ -3424,16 +3426,21 @@ struct mlx5_ifc_virtio_q_counters_bits {
struct mlx5_ifc_geneve_tlv_option_bits {
u8 modify_field_select[0x40];
- u8 reserved_at_40[0x18];
+ u8 reserved_at_40[0x8];
+ u8 sample_offset[0x8];
+ u8 sample_id_valid[0x1];
+ u8 sample_offset_valid[0x1];
+ u8 option_class_ignore[0x1];
+ u8 reserved_at_53[0x5];
u8 geneve_option_fte_index[0x8];
u8 option_class[0x10];
u8 option_type[0x8];
u8 reserved_at_78[0x3];
u8 option_data_length[0x5];
- u8 reserved_at_80[0x180];
+ u8 geneve_sample_field_id[0x20];
+ u8 reserved_at_a0[0x160];
};
-
enum mlx5_ifc_rtc_update_mode {
MLX5_IFC_RTC_STE_UPDATE_MODE_BY_HASH = 0x0,
MLX5_IFC_RTC_STE_UPDATE_MODE_BY_OFFSET = 0x1,