diff mbox

[ovs-dev,v5,03/16] flow: Introduce parse_dl_type().

Message ID 1469581096-42007-4-git-send-email-diproiettod@vmware.com
State Accepted
Headers show

Commit Message

Daniele Di Proietto July 27, 2016, 12:58 a.m. UTC
The function simply returns the ethernet type of the packet (after
eventually discarding the VLAN tag).  It will be used by a following
commit.

Signed-off-by: Daniele Di Proietto <diproiettod@vmware.com>
Acked-by: Flavio Leitner <fbl@sysclose.org>
---
 lib/flow.c | 14 ++++++++++++--
 lib/flow.h |  1 +
 2 files changed, 13 insertions(+), 2 deletions(-)
diff mbox

Patch

diff --git a/lib/flow.c b/lib/flow.c
index f94b1f2..8cf707b 100644
--- a/lib/flow.c
+++ b/lib/flow.c
@@ -328,7 +328,7 @@  parse_mpls(const void **datap, size_t *sizep)
     return MIN(count, FLOW_MAX_MPLS_LABELS);
 }
 
-static inline ovs_be16
+static inline ALWAYS_INLINE ovs_be16
 parse_vlan(const void **datap, size_t *sizep)
 {
     const struct eth_header *eth = *datap;
@@ -350,7 +350,7 @@  parse_vlan(const void **datap, size_t *sizep)
     return 0;
 }
 
-static inline ovs_be16
+static inline ALWAYS_INLINE ovs_be16
 parse_ethertype(const void **datap, size_t *sizep)
 {
     const struct llc_snap_header *llc;
@@ -827,6 +827,16 @@  miniflow_extract(struct dp_packet *packet, struct miniflow *dst)
     dst->map = mf.map;
 }
 
+ovs_be16
+parse_dl_type(const struct eth_header *data_, size_t size)
+{
+    const void *data = data_;
+
+    parse_vlan(&data, &size);
+
+    return parse_ethertype(&data, &size);
+}
+
 /* For every bit of a field that is wildcarded in 'wildcards', sets the
  * corresponding bit in 'flow' to zero. */
 void
diff --git a/lib/flow.h b/lib/flow.h
index c041e8a..fd9c712 100644
--- a/lib/flow.h
+++ b/lib/flow.h
@@ -108,6 +108,7 @@  void flow_compose(struct dp_packet *, const struct flow *);
 
 bool parse_ipv6_ext_hdrs(const void **datap, size_t *sizep, uint8_t *nw_proto,
                          uint8_t *nw_frag);
+ovs_be16 parse_dl_type(const struct eth_header *data_, size_t size);
 
 static inline uint64_t
 flow_get_xreg(const struct flow *flow, int idx)