aboutsummaryrefslogtreecommitdiff
path: root/platform/linux-generic/odp_packet_flags.c
diff options
context:
space:
mode:
authorPetri Savolainen <petri.savolainen@nokia.com>2015-10-21 15:36:44 +0300
committerMaxim Uvarov <maxim.uvarov@linaro.org>2015-10-23 15:07:08 +0300
commite6216bc6a4a5072089ed4c45deaadfdffdd604b2 (patch)
treedc0453b50d1b8e3b216a9f30ca8e99478ff7f7b2 /platform/linux-generic/odp_packet_flags.c
parent86c45cfaa394eb4a5f710bd1f18ce64162076ed5 (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.c24
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)