diff options
author | Bogdan Pricope <bogdan.pricope@linaro.org> | 2018-05-02 11:29:48 +0300 |
---|---|---|
committer | Maxim Uvarov <maxim.uvarov@linaro.org> | 2018-05-14 18:07:04 +0300 |
commit | df1c292ed40d4c2c480917f1eab06a046c93c3b1 (patch) | |
tree | 7f5be2a98b54e30cc3ffcac26b42f85ded52317d | |
parent | 49c671e80fd2c88b6f36337ebd1cd4748eb8bae1 (diff) |
linux-gen: classification: permit packet parsing at pktio level
This change is needed to support pktio specific parsers.
Signed-off-by: Bogdan Pricope <bogdan.pricope@linaro.org>
Reviewed-and-tested-by: Matias Elo <matias.elo@nokia.com>
Signed-off-by: Maxim Uvarov <maxim.uvarov@linaro.org>
-rw-r--r-- | platform/linux-generic/include/odp_classification_internal.h | 2 | ||||
-rw-r--r-- | platform/linux-generic/odp_classification.c | 12 | ||||
-rw-r--r-- | platform/linux-generic/pktio/dpdk.c | 4 | ||||
-rw-r--r-- | platform/linux-generic/pktio/loop.c | 2 | ||||
-rw-r--r-- | platform/linux-generic/pktio/netmap.c | 2 | ||||
-rw-r--r-- | platform/linux-generic/pktio/socket.c | 3 | ||||
-rw-r--r-- | platform/linux-generic/pktio/socket_mmap.c | 3 | ||||
-rw-r--r-- | platform/linux-generic/pktio/tap.c | 2 |
8 files changed, 17 insertions, 13 deletions
diff --git a/platform/linux-generic/include/odp_classification_internal.h b/platform/linux-generic/include/odp_classification_internal.h index 47f80dc25..84d605e6b 100644 --- a/platform/linux-generic/include/odp_classification_internal.h +++ b/platform/linux-generic/include/odp_classification_internal.h @@ -39,7 +39,7 @@ selects destination queue and packet pool based on selected PMR and CoS. **/ int cls_classify_packet(pktio_entry_t *entry, const uint8_t *base, uint16_t pkt_len, uint32_t seg_len, odp_pool_t *pool, - odp_packet_hdr_t *pkt_hdr); + odp_packet_hdr_t *pkt_hdr, odp_bool_t parse); /** Packet IO classifier init diff --git a/platform/linux-generic/odp_classification.c b/platform/linux-generic/odp_classification.c index 14720924c..46fcf67ee 100644 --- a/platform/linux-generic/odp_classification.c +++ b/platform/linux-generic/odp_classification.c @@ -987,17 +987,19 @@ static uint32_t packet_rss_hash(odp_packet_hdr_t *pkt_hdr, */ int cls_classify_packet(pktio_entry_t *entry, const uint8_t *base, uint16_t pkt_len, uint32_t seg_len, odp_pool_t *pool, - odp_packet_hdr_t *pkt_hdr) + odp_packet_hdr_t *pkt_hdr, odp_bool_t parse) { cos_t *cos; uint32_t tbl_index; uint32_t hash; - packet_parse_reset(pkt_hdr); - packet_set_len(pkt_hdr, pkt_len); + if (parse) { + packet_parse_reset(pkt_hdr); + packet_set_len(pkt_hdr, pkt_len); - packet_parse_common(&pkt_hdr->p, base, pkt_len, seg_len, - ODP_PROTO_LAYER_ALL); + packet_parse_common(&pkt_hdr->p, base, pkt_len, seg_len, + ODP_PROTO_LAYER_ALL); + } cos = cls_select_cos(entry, base, pkt_hdr); if (cos == NULL) diff --git a/platform/linux-generic/pktio/dpdk.c b/platform/linux-generic/pktio/dpdk.c index 14d59d8e0..c8d7d0d44 100644 --- a/platform/linux-generic/pktio/dpdk.c +++ b/platform/linux-generic/pktio/dpdk.c @@ -533,7 +533,7 @@ static inline int mbuf_to_pkt(pktio_entry_t *pktio_entry, if (cls_classify_packet(pktio_entry, (const uint8_t *)data, pkt_len, pkt_len, &pool, - &parsed_hdr)) + &parsed_hdr, true)) goto fail; } @@ -778,7 +778,7 @@ static inline int mbuf_to_pkt_zero(pktio_entry_t *pktio_entry, if (cls_classify_packet(pktio_entry, (const uint8_t *)data, pkt_len, pkt_len, &pool, - &parsed_hdr)) + &parsed_hdr, true)) ODP_ERR("Unable to classify packet\n"); rte_pktmbuf_free(mbuf); continue; diff --git a/platform/linux-generic/pktio/loop.c b/platform/linux-generic/pktio/loop.c index fc80e8019..779e4c62b 100644 --- a/platform/linux-generic/pktio/loop.c +++ b/platform/linux-generic/pktio/loop.c @@ -131,7 +131,7 @@ static int loopback_recv(pktio_entry_t *pktio_entry, int index ODP_UNUSED, ret = cls_classify_packet(pktio_entry, pkt_addr, pkt_len, seg_len, - &new_pool, pkt_hdr); + &new_pool, pkt_hdr, true); if (ret) { failed++; odp_packet_free(pkt); diff --git a/platform/linux-generic/pktio/netmap.c b/platform/linux-generic/pktio/netmap.c index 835d81ebb..567bc9f95 100644 --- a/platform/linux-generic/pktio/netmap.c +++ b/platform/linux-generic/pktio/netmap.c @@ -705,7 +705,7 @@ static inline int netmap_pkt_to_odp(pktio_entry_t *pktio_entry, if (pktio_cls_enabled(pktio_entry)) { if (cls_classify_packet(pktio_entry, (const uint8_t *)slot.buf, len, - len, &pool, &parsed_hdr)) + len, &pool, &parsed_hdr, true)) goto fail; } diff --git a/platform/linux-generic/pktio/socket.c b/platform/linux-generic/pktio/socket.c index f6f3288c2..8b7200e6f 100644 --- a/platform/linux-generic/pktio/socket.c +++ b/platform/linux-generic/pktio/socket.c @@ -655,7 +655,8 @@ static int sock_mmsg_recv(pktio_entry_t *pktio_entry, int index ODP_UNUSED, seg_len = msgvec[i].msg_hdr.msg_iov->iov_len; if (cls_classify_packet(pktio_entry, base, pkt_len, - seg_len, &pool, pkt_hdr)) { + seg_len, &pool, pkt_hdr, + true)) { ODP_ERR("cls_classify_packet failed"); odp_packet_free(pkt); continue; diff --git a/platform/linux-generic/pktio/socket_mmap.c b/platform/linux-generic/pktio/socket_mmap.c index deaa6da15..847eb71ad 100644 --- a/platform/linux-generic/pktio/socket_mmap.c +++ b/platform/linux-generic/pktio/socket_mmap.c @@ -228,7 +228,8 @@ static inline unsigned pkt_mmap_v2_rx(pktio_entry_t *pktio_entry, if (pktio_cls_enabled(pktio_entry)) { if (cls_classify_packet(pktio_entry, pkt_buf, pkt_len, - pkt_len, &pool, &parsed_hdr)) { + pkt_len, &pool, &parsed_hdr, + true)) { mmap_rx_user_ready(ppd.raw); /* drop */ frame_num = next_frame_num; continue; diff --git a/platform/linux-generic/pktio/tap.c b/platform/linux-generic/pktio/tap.c index 56f90b31b..af766e0de 100644 --- a/platform/linux-generic/pktio/tap.c +++ b/platform/linux-generic/pktio/tap.c @@ -264,7 +264,7 @@ static odp_packet_t pack_odp_pkt(pktio_entry_t *pktio_entry, const void *data, if (pktio_cls_enabled(pktio_entry)) { if (cls_classify_packet(pktio_entry, data, len, len, &pktio_entry->s.pkt_tap.pool, - &parsed_hdr)) { + &parsed_hdr, true)) { return ODP_PACKET_INVALID; } } |