diff options
author | Petri Savolainen <petri.savolainen@nokia.com> | 2015-10-21 15:36:44 +0300 |
---|---|---|
committer | Maxim Uvarov <maxim.uvarov@linaro.org> | 2015-10-23 15:07:08 +0300 |
commit | e6216bc6a4a5072089ed4c45deaadfdffdd604b2 (patch) | |
tree | dc0453b50d1b8e3b216a9f30ca8e99478ff7f7b2 /platform/linux-generic/odp_packet_flags.c | |
parent | 86c45cfaa394eb4a5f710bd1f18ce64162076ed5 (diff) |
linux-generic: pktio: fill in L2 parse results by default
Optimize and simplify packet parsing. Fill in L2 metadata
allways in packet input. Perform full packet parsing only
if other than L2 metadata is requested. Perform parsing only
for packets received from the network (disable parsing of
user created packets).
Signed-off-by: Petri Savolainen <petri.savolainen@nokia.com>
Reviewed-by: Bill Fischofer <bill.fischofer@linaro.org>
Signed-off-by: Maxim Uvarov <maxim.uvarov@linaro.org>
Diffstat (limited to 'platform/linux-generic/odp_packet_flags.c')
-rw-r--r-- | platform/linux-generic/odp_packet_flags.c | 24 |
1 files changed, 15 insertions, 9 deletions
diff --git a/platform/linux-generic/odp_packet_flags.c b/platform/linux-generic/odp_packet_flags.c index ea308f711..dbc313748 100644 --- a/platform/linux-generic/odp_packet_flags.c +++ b/platform/linux-generic/odp_packet_flags.c @@ -9,23 +9,23 @@ #define retflag(p, x) do { \ odp_packet_hdr_t *pkt_hdr = odp_packet_hdr(p); \ - if (pkt_hdr->input_flags.unparsed) \ - _odp_packet_parse(pkt_hdr); \ + if (packet_parse_not_complete(pkt_hdr)) \ + packet_parse_full(pkt_hdr); \ return pkt_hdr->x; \ } while (0) #define setflag(p, x, v) do { \ odp_packet_hdr_t *pkt_hdr = odp_packet_hdr(p); \ - if (pkt_hdr->input_flags.unparsed) \ - _odp_packet_parse(pkt_hdr); \ + if (packet_parse_not_complete(pkt_hdr)) \ + packet_parse_full(pkt_hdr); \ pkt_hdr->x = v & 1; \ } while (0) int odp_packet_has_error(odp_packet_t pkt) { odp_packet_hdr_t *pkt_hdr = odp_packet_hdr(pkt); - if (pkt_hdr->input_flags.unparsed) - _odp_packet_parse(pkt_hdr); + if (packet_parse_not_complete(pkt_hdr)) + packet_parse_full(pkt_hdr); return odp_packet_hdr(pkt)->error_flags.all != 0; } @@ -33,7 +33,9 @@ int odp_packet_has_error(odp_packet_t pkt) int odp_packet_has_l2(odp_packet_t pkt) { - retflag(pkt, input_flags.l2); + odp_packet_hdr_t *pkt_hdr = odp_packet_hdr(pkt); + + return pkt_hdr->input_flags.l2; } int odp_packet_has_l3(odp_packet_t pkt) @@ -48,12 +50,16 @@ int odp_packet_has_l4(odp_packet_t pkt) int odp_packet_has_eth(odp_packet_t pkt) { - retflag(pkt, input_flags.eth); + odp_packet_hdr_t *pkt_hdr = odp_packet_hdr(pkt); + + return pkt_hdr->input_flags.eth; } int odp_packet_has_jumbo(odp_packet_t pkt) { - retflag(pkt, input_flags.jumbo); + odp_packet_hdr_t *pkt_hdr = odp_packet_hdr(pkt); + + return pkt_hdr->input_flags.jumbo; } int odp_packet_has_vlan(odp_packet_t pkt) |