From ba92d511ddacf863fafaaa14c0577f30ee57d092 Mon Sep 17 00:00:00 2001 From: Fan Zhang Date: Fri, 11 Sep 2015 14:35:45 +0100 Subject: [PATCH] port: move metadata offset reference at mbuf head This patch relates to ABI change proposed for librte_port. Macros to access the packet meta-data stored within the packet buffer has been adjusted to cover the packet mbuf structure. The LIBABIVER number is incremented. Signed-off-by: Fan Zhang Acked-by: Cristian Dumitrescu --- app/test-pipeline/main.h | 2 ++ app/test-pipeline/pipeline_hash.c | 34 +++++++++++---------- app/test-pipeline/pipeline_lpm.c | 2 +- app/test-pipeline/pipeline_lpm_ipv6.c | 2 +- app/test/test_table.h | 8 +++-- app/test/test_table_combined.c | 28 ++++++++--------- app/test/test_table_pipeline.c | 3 +- app/test/test_table_tables.c | 44 ++++++++++++++------------- doc/guides/rel_notes/deprecation.rst | 5 --- doc/guides/rel_notes/release_2_2.rst | 6 +++- lib/librte_port/Makefile | 2 +- lib/librte_port/rte_port.h | 2 +- 12 files changed, 74 insertions(+), 64 deletions(-) diff --git a/app/test-pipeline/main.h b/app/test-pipeline/main.h index 0c90fc3a45..8dcd4592ab 100644 --- a/app/test-pipeline/main.h +++ b/app/test-pipeline/main.h @@ -137,4 +137,6 @@ void app_main_loop_tx(void); #define APP_FLUSH 0x3FF #endif +#define APP_METADATA_OFFSET(offset) (sizeof(struct rte_mbuf) + (offset)) + #endif /* _MAIN_H_ */ diff --git a/app/test-pipeline/pipeline_hash.c b/app/test-pipeline/pipeline_hash.c index 548615fad2..5e4e17f7b6 100644 --- a/app/test-pipeline/pipeline_hash.c +++ b/app/test-pipeline/pipeline_hash.c @@ -163,8 +163,8 @@ app_main_loop_worker_pipeline_hash(void) { .n_buckets_ext = 1 << 21, .f_hash = test_hash, .seed = 0, - .signature_offset = 0, - .key_offset = 32, + .signature_offset = APP_METADATA_OFFSET(0), + .key_offset = APP_METADATA_OFFSET(32), }; struct rte_pipeline_table_params table_params = { @@ -214,8 +214,8 @@ app_main_loop_worker_pipeline_hash(void) { struct rte_table_hash_key8_ext_params table_hash_params = { .n_entries = 1 << 24, .n_entries_ext = 1 << 23, - .signature_offset = 0, - .key_offset = 32, + .signature_offset = APP_METADATA_OFFSET(0), + .key_offset = APP_METADATA_OFFSET(32), .f_hash = test_hash, .seed = 0, }; @@ -238,8 +238,8 @@ app_main_loop_worker_pipeline_hash(void) { { struct rte_table_hash_key8_lru_params table_hash_params = { .n_entries = 1 << 24, - .signature_offset = 0, - .key_offset = 32, + .signature_offset = APP_METADATA_OFFSET(0), + .key_offset = APP_METADATA_OFFSET(32), .f_hash = test_hash, .seed = 0, }; @@ -263,8 +263,8 @@ app_main_loop_worker_pipeline_hash(void) { struct rte_table_hash_key16_ext_params table_hash_params = { .n_entries = 1 << 24, .n_entries_ext = 1 << 23, - .signature_offset = 0, - .key_offset = 32, + .signature_offset = APP_METADATA_OFFSET(0), + .key_offset = APP_METADATA_OFFSET(32), .f_hash = test_hash, .seed = 0, }; @@ -287,8 +287,8 @@ app_main_loop_worker_pipeline_hash(void) { { struct rte_table_hash_key16_lru_params table_hash_params = { .n_entries = 1 << 24, - .signature_offset = 0, - .key_offset = 32, + .signature_offset = APP_METADATA_OFFSET(0), + .key_offset = APP_METADATA_OFFSET(32), .f_hash = test_hash, .seed = 0, }; @@ -312,8 +312,8 @@ app_main_loop_worker_pipeline_hash(void) { struct rte_table_hash_key32_ext_params table_hash_params = { .n_entries = 1 << 24, .n_entries_ext = 1 << 23, - .signature_offset = 0, - .key_offset = 32, + .signature_offset = APP_METADATA_OFFSET(0), + .key_offset = APP_METADATA_OFFSET(32), .f_hash = test_hash, .seed = 0, }; @@ -337,8 +337,8 @@ app_main_loop_worker_pipeline_hash(void) { { struct rte_table_hash_key32_lru_params table_hash_params = { .n_entries = 1 << 24, - .signature_offset = 0, - .key_offset = 32, + .signature_offset = APP_METADATA_OFFSET(0), + .key_offset = APP_METADATA_OFFSET(32), .f_hash = test_hash, .seed = 0, }; @@ -456,8 +456,10 @@ app_main_loop_rx_metadata(void) { m = app.mbuf_rx.array[j]; m_data = rte_pktmbuf_mtod(m, uint8_t *); - signature = RTE_MBUF_METADATA_UINT32_PTR(m, 0); - key = RTE_MBUF_METADATA_UINT8_PTR(m, 32); + signature = RTE_MBUF_METADATA_UINT32_PTR(m, + APP_METADATA_OFFSET(0)); + key = RTE_MBUF_METADATA_UINT8_PTR(m, + APP_METADATA_OFFSET(32)); if (RTE_ETH_IS_IPV4_HDR(m->packet_type)) { ip_hdr = (struct ipv4_hdr *) diff --git a/app/test-pipeline/pipeline_lpm.c b/app/test-pipeline/pipeline_lpm.c index c03799cf64..2d7bc012c7 100644 --- a/app/test-pipeline/pipeline_lpm.c +++ b/app/test-pipeline/pipeline_lpm.c @@ -116,7 +116,7 @@ app_main_loop_worker_pipeline_lpm(void) { .n_rules = 1 << 24, .entry_unique_size = sizeof(struct rte_pipeline_table_entry), - .offset = 32, + .offset = APP_METADATA_OFFSET(32), }; struct rte_pipeline_table_params table_params = { diff --git a/app/test-pipeline/pipeline_lpm_ipv6.c b/app/test-pipeline/pipeline_lpm_ipv6.c index 02b7a9c839..c895b624cd 100644 --- a/app/test-pipeline/pipeline_lpm_ipv6.c +++ b/app/test-pipeline/pipeline_lpm_ipv6.c @@ -118,7 +118,7 @@ app_main_loop_worker_pipeline_lpm_ipv6(void) { .number_tbl8s = 1 << 21, .entry_unique_size = sizeof(struct rte_pipeline_table_entry), - .offset = 32, + .offset = APP_METADATA_OFFSET(32), }; struct rte_pipeline_table_params table_params = { diff --git a/app/test/test_table.h b/app/test/test_table.h index accc6f897a..84d1845a3d 100644 --- a/app/test/test_table.h +++ b/app/test/test_table.h @@ -78,6 +78,8 @@ #define MP_FLAGS 0 /* Macros */ +#define APP_METADATA_OFFSET(offset) (sizeof(struct rte_mbuf) + (offset)) + #define RING_ENQUEUE(ring, value) do { \ struct rte_mbuf *m; \ uint32_t *k32, *signature; \ @@ -86,8 +88,10 @@ m = rte_pktmbuf_alloc(pool); \ if (m == NULL) \ return -1; \ - signature = RTE_MBUF_METADATA_UINT32_PTR(m, 0); \ - key = RTE_MBUF_METADATA_UINT8_PTR(m, 32); \ + signature = RTE_MBUF_METADATA_UINT32_PTR(m, \ + APP_METADATA_OFFSET(0)); \ + key = RTE_MBUF_METADATA_UINT8_PTR(m, \ + APP_METADATA_OFFSET(32)); \ k32 = (uint32_t *) key; \ k32[0] = (value); \ *signature = pipeline_test_hash(key, 0, 0); \ diff --git a/app/test/test_table_combined.c b/app/test/test_table_combined.c index f5c7c9b3f1..18daeecc10 100644 --- a/app/test/test_table_combined.c +++ b/app/test/test_table_combined.c @@ -296,7 +296,7 @@ test_table_lpm_combined(void) .name = "LPM", .n_rules = 1 << 16, .entry_unique_size = 8, - .offset = 0, + .offset = APP_METADATA_OFFSET(0), }; struct rte_table_lpm_key lpm_key = { @@ -357,7 +357,7 @@ test_table_lpm_ipv6_combined(void) .n_rules = 1 << 16, .number_tbl8s = 1 << 13, .entry_unique_size = 8, - .offset = 32, + .offset = APP_METADATA_OFFSET(32), }; struct rte_table_lpm_ipv6_key lpm_ipv6_key = { @@ -419,8 +419,8 @@ test_table_hash8lru(void) .n_entries = 1<<24, .f_hash = pipeline_test_hash, .seed = 0, - .signature_offset = 0, - .key_offset = 32, + .signature_offset = APP_METADATA_OFFSET(0), + .key_offset = APP_METADATA_OFFSET(32), }; uint8_t key8lru[8]; @@ -477,8 +477,8 @@ test_table_hash16lru(void) .n_entries = 1<<16, .f_hash = pipeline_test_hash, .seed = 0, - .signature_offset = 0, - .key_offset = 32, + .signature_offset = APP_METADATA_OFFSET(0), + .key_offset = APP_METADATA_OFFSET(32), }; uint8_t key16lru[16]; @@ -535,8 +535,8 @@ test_table_hash32lru(void) .n_entries = 1<<16, .f_hash = pipeline_test_hash, .seed = 0, - .signature_offset = 0, - .key_offset = 32, + .signature_offset = APP_METADATA_OFFSET(0), + .key_offset = APP_METADATA_OFFSET(32), }; uint8_t key32lru[32]; @@ -594,8 +594,8 @@ test_table_hash8ext(void) .n_entries_ext = 1<<15, .f_hash = pipeline_test_hash, .seed = 0, - .signature_offset = 0, - .key_offset = 32, + .signature_offset = APP_METADATA_OFFSET(0), + .key_offset = APP_METADATA_OFFSET(32), }; uint8_t key8ext[8]; @@ -660,8 +660,8 @@ test_table_hash16ext(void) .n_entries_ext = 1<<15, .f_hash = pipeline_test_hash, .seed = 0, - .signature_offset = 0, - .key_offset = 32, + .signature_offset = APP_METADATA_OFFSET(0), + .key_offset = APP_METADATA_OFFSET(32), }; uint8_t key16ext[16]; @@ -726,8 +726,8 @@ test_table_hash32ext(void) .n_entries_ext = 1<<15, .f_hash = pipeline_test_hash, .seed = 0, - .signature_offset = 0, - .key_offset = 32, + .signature_offset = APP_METADATA_OFFSET(0), + .key_offset = APP_METADATA_OFFSET(32), }; uint8_t key32ext[32]; diff --git a/app/test/test_table_pipeline.c b/app/test/test_table_pipeline.c index a0a9e04922..ff07cdaeed 100644 --- a/app/test/test_table_pipeline.c +++ b/app/test/test_table_pipeline.c @@ -457,7 +457,8 @@ test_pipeline_single_filter(int test_type, int expected_count) rte_panic("Failed to alloc mbuf from pool\n"); return -1; } - key = RTE_MBUF_METADATA_UINT8_PTR(m, 32); + key = RTE_MBUF_METADATA_UINT8_PTR(m, + APP_METADATA_OFFSET(32)); k32 = (uint32_t *) key; k32[0] = 0xadadadad >> (j % 2); diff --git a/app/test/test_table_tables.c b/app/test/test_table_tables.c index 9d75fbf436..cf7c62d07c 100644 --- a/app/test/test_table_tables.c +++ b/app/test/test_table_tables.c @@ -52,8 +52,10 @@ table_test table_tests[] = { uint32_t *k32, *signature; \ uint8_t *key; \ mbuf = rte_pktmbuf_alloc(pool); \ - signature = RTE_MBUF_METADATA_UINT32_PTR(mbuf, 0); \ - key = RTE_MBUF_METADATA_UINT8_PTR(mbuf, 32); \ + signature = RTE_MBUF_METADATA_UINT32_PTR(mbuf, \ + APP_METADATA_OFFSET(0)); \ + key = RTE_MBUF_METADATA_UINT8_PTR(mbuf, \ + APP_METADATA_OFFSET(32)); \ memset(key, 0, 32); \ k32 = (uint32_t *) key; \ k32[0] = (value); \ @@ -206,7 +208,7 @@ test_table_array(void) /* Initialize params and create tables */ struct rte_table_array_params array_params = { .n_entries = 7, - .offset = 1 + .offset = APP_METADATA_OFFSET(1) }; table = rte_table_array_ops.f_create(NULL, 0, 1); @@ -226,13 +228,13 @@ test_table_array(void) return -3; array_params.n_entries = 1 << 24; - array_params.offset = 1; + array_params.offset = APP_METADATA_OFFSET(1); table = rte_table_array_ops.f_create(&array_params, 0, 1); if (table == NULL) return -4; - array_params.offset = 32; + array_params.offset = APP_METADATA_OFFSET(32); table = rte_table_array_ops.f_create(&array_params, 0, 1); if (table == NULL) @@ -325,7 +327,7 @@ test_table_lpm(void) .name = "LPM", .n_rules = 1 << 24, .entry_unique_size = entry_size, - .offset = 1 + .offset = APP_METADATA_OFFSET(1) }; table = rte_table_lpm_ops.f_create(NULL, 0, entry_size); @@ -346,7 +348,7 @@ test_table_lpm(void) return -3; lpm_params.n_rules = 1 << 24; - lpm_params.offset = 32; + lpm_params.offset = APP_METADATA_OFFSET(32); lpm_params.entry_unique_size = 0; table = rte_table_lpm_ops.f_create(&lpm_params, 0, entry_size); @@ -490,7 +492,7 @@ test_table_lpm_ipv6(void) .n_rules = 1 << 24, .number_tbl8s = 1 << 21, .entry_unique_size = entry_size, - .offset = 32 + .offset = APP_METADATA_OFFSET(32) }; table = rte_table_lpm_ipv6_ops.f_create(NULL, 0, entry_size); @@ -528,7 +530,7 @@ test_table_lpm_ipv6(void) return -6; lpm_params.entry_unique_size = entry_size; - lpm_params.offset = 32; + lpm_params.offset = APP_METADATA_OFFSET(32); table = rte_table_lpm_ipv6_ops.f_create(&lpm_params, 0, entry_size); if (table == NULL) @@ -666,8 +668,8 @@ test_table_hash_lru_generic(struct rte_table_ops *ops) .n_entries = 1 << 10, .f_hash = pipeline_test_hash, .seed = 0, - .signature_offset = 1, - .key_offset = 32 + .signature_offset = APP_METADATA_OFFSET(1), + .key_offset = APP_METADATA_OFFSET(32) }; hash_params.n_entries = 0; @@ -677,20 +679,20 @@ test_table_hash_lru_generic(struct rte_table_ops *ops) return -1; hash_params.n_entries = 1 << 10; - hash_params.signature_offset = 1; + hash_params.signature_offset = APP_METADATA_OFFSET(1); table = ops->f_create(&hash_params, 0, 1); if (table == NULL) return -2; - hash_params.signature_offset = 0; - hash_params.key_offset = 1; + hash_params.signature_offset = APP_METADATA_OFFSET(0); + hash_params.key_offset = APP_METADATA_OFFSET(1); table = ops->f_create(&hash_params, 0, 1); if (table == NULL) return -3; - hash_params.key_offset = 32; + hash_params.key_offset = APP_METADATA_OFFSET(32); hash_params.f_hash = NULL; table = ops->f_create(&hash_params, 0, 1); @@ -781,8 +783,8 @@ test_table_hash_ext_generic(struct rte_table_ops *ops) .n_entries_ext = 1 << 4, .f_hash = pipeline_test_hash, .seed = 0, - .signature_offset = 1, - .key_offset = 32 + .signature_offset = APP_METADATA_OFFSET(1), + .key_offset = APP_METADATA_OFFSET(32) }; hash_params.n_entries = 0; @@ -798,19 +800,19 @@ test_table_hash_ext_generic(struct rte_table_ops *ops) return -2; hash_params.n_entries_ext = 1 << 4; - hash_params.signature_offset = 1; + hash_params.signature_offset = APP_METADATA_OFFSET(1); table = ops->f_create(&hash_params, 0, 1); if (table == NULL) return -2; - hash_params.signature_offset = 0; - hash_params.key_offset = 1; + hash_params.signature_offset = APP_METADATA_OFFSET(0); + hash_params.key_offset = APP_METADATA_OFFSET(1); table = ops->f_create(&hash_params, 0, 1); if (table == NULL) return -3; - hash_params.key_offset = 32; + hash_params.key_offset = APP_METADATA_OFFSET(32); hash_params.f_hash = NULL; table = ops->f_create(&hash_params, 0, 1); diff --git a/doc/guides/rel_notes/deprecation.rst b/doc/guides/rel_notes/deprecation.rst index 1f47e3dd97..018a11967f 100644 --- a/doc/guides/rel_notes/deprecation.rst +++ b/doc/guides/rel_notes/deprecation.rst @@ -45,11 +45,6 @@ Deprecation Notices the value of macros CFG_NAME_LEN and CFG_NAME_VAL will be increased. Most likely, the new values will be 64 and 256, respectively. -* librte_port: Macros to access the packet meta-data stored within the - packet buffer will be adjusted to cover the packet mbuf structure as well, - as currently they are able to access any packet buffer location except the - packet mbuf structure. - * librte_table: New functions for table entry bulk add/delete will be added to the table operations structure. diff --git a/doc/guides/rel_notes/release_2_2.rst b/doc/guides/rel_notes/release_2_2.rst index 5a62bc67f9..89cba4dbd3 100644 --- a/doc/guides/rel_notes/release_2_2.rst +++ b/doc/guides/rel_notes/release_2_2.rst @@ -101,6 +101,10 @@ ABI Changes * librte_table LPM: A new parameter to hold the table name will be added to the LPM table parameter structure. +* librte_port: Macros to access the packet meta-data stored within the packet + buffer has been adjusted to cover the packet mbuf structure. + + Shared Library Versions ----------------------- @@ -127,7 +131,7 @@ The libraries prepended with a plus sign were incremented in this version. librte_pipeline.so.1 librte_pmd_bond.so.1 + librte_pmd_ring.so.2 - librte_port.so.1 + + librte_port.so.2 librte_power.so.1 librte_reorder.so.1 librte_ring.so.1 diff --git a/lib/librte_port/Makefile b/lib/librte_port/Makefile index ddbb38388e..410053ea98 100644 --- a/lib/librte_port/Makefile +++ b/lib/librte_port/Makefile @@ -41,7 +41,7 @@ CFLAGS += $(WERROR_FLAGS) EXPORT_MAP := rte_port_version.map -LIBABIVER := 1 +LIBABIVER := 2 # # all source are stored in SRCS-y diff --git a/lib/librte_port/rte_port.h b/lib/librte_port/rte_port.h index 396c7e91bf..00b97a91e7 100644 --- a/lib/librte_port/rte_port.h +++ b/lib/librte_port/rte_port.h @@ -55,7 +55,7 @@ extern "C" { * just beyond the end of the mbuf data structure returned by a port */ #define RTE_MBUF_METADATA_UINT8_PTR(mbuf, offset) \ - (&((uint8_t *) &(mbuf)[1])[offset]) + (&((uint8_t *)(mbuf))[offset]) #define RTE_MBUF_METADATA_UINT16_PTR(mbuf, offset) \ ((uint16_t *) RTE_MBUF_METADATA_UINT8_PTR(mbuf, offset)) #define RTE_MBUF_METADATA_UINT32_PTR(mbuf, offset) \ -- 2.20.1