@@ -378,7 +378,8 @@ endif
if DPDK_NETDEV
lib_libopenvswitch_la_SOURCES += \
lib/dpdk.c \
- lib/netdev-dpdk.c
+ lib/netdev-dpdk.c \
+ lib/hw-pipeline.h
else
lib_libopenvswitch_la_SOURCES += \
lib/dpdk-stub.c
new file mode 100644
@@ -0,0 +1,31 @@
+/*
+ * hw-pipeline.h
+ *
+ * Created on: 13 Oct 2016
+ * Author: sugeshch
+ */
+
+#ifndef LIB_HW_PIPELINE_H_
+#define LIB_HW_PIPELINE_H_
+#include "unistd.h"
+#include "stdio.h"
+#include "sys/types.h"
+#include "sys/stat.h"
+#include "errno.h"
+#include "fcntl.h"
+#include "flow.h"
+#include "dpif-netdev.h"
+
+#define HW_NO_FREE_FLOW_TAG 0xffffffff
+
+enum pipeline_id {
+ DEFAULT_SW_PIPELINE = 0,
+ HW_OFFLOAD_PIPELINE
+};
+
+struct pipeline_md {
+ uint16_t id;
+ uint32_t flow_tag;
+};
+
+#endif /* LIB_HW_PIPELINE_H_ */
@@ -1493,6 +1493,7 @@ netdev_bsd_update_flags(struct netdev *netdev_, enum netdev_flags off,
CONSTRUCT, \
netdev_bsd_destruct, \
netdev_bsd_dealloc, \
+ NULL, /* get pipeline */ \
NULL, /* get_config */ \
NULL, /* set_config */ \
NULL, /* get_tunnel_config */ \
@@ -55,6 +55,7 @@
#include "unaligned.h"
#include "timeval.h"
#include "unixctl.h"
+#include "hw-pipeline.h"
VLOG_DEFINE_THIS_MODULE(netdev_dpdk);
static struct vlog_rate_limit rl = VLOG_RATE_LIMIT_INIT(5, 20);
@@ -1125,6 +1126,29 @@ netdev_dpdk_get_config(const struct netdev *netdev, struct smap *args)
return 0;
}
+void
+netdev_dpdk_get_pipeline(__attribute__ ((unused))const struct netdev *netdev,
+ struct dp_packet *packet,
+ void *pipeline_res)
+{
+ struct pipeline_md *ppl_md = pipeline_res;
+ struct rte_mbuf *mbuf;
+
+ /*
+ * * DPDK pipeline is defined by the ol_flags n the packet,
+ * */
+ mbuf = (struct rte_mbuf *)packet;
+
+ if (mbuf->ol_flags & PKT_RX_FDIR_ID) {
+ ppl_md->id = HW_OFFLOAD_PIPELINE;
+ ppl_md->flow_tag = mbuf->hash.fdir.hi;
+ }
+ else{
+ ppl_md->id = DEFAULT_SW_PIPELINE;
+ ppl_md->flow_tag = HW_NO_FREE_FLOW_TAG;
+ }
+}
+
static struct netdev_dpdk *
netdev_dpdk_lookup_by_port_id(dpdk_port_t port_id)
OVS_REQUIRES(dpdk_mutex)
@@ -3253,6 +3277,7 @@ unlock:
CONSTRUCT, \
DESTRUCT, \
netdev_dpdk_dealloc, \
+ netdev_dpdk_get_pipeline, \
netdev_dpdk_get_config, \
SET_CONFIG, \
NULL, /* get_tunnel_config */ \
@@ -17,17 +17,25 @@
#ifndef NETDEV_DPDK_H
#define NETDEV_DPDK_H
-#include <config.h>
-
#include "openvswitch/compiler.h"
+#include "openvswitch/types.h"
struct dp_packet;
+struct netdev;
+struct dp_netdev;
+struct rte_flow_attr;
+struct rte_flow_item;
+struct rte_flow_action;
+struct rte_flow_error;
#ifdef DPDK_NETDEV
void netdev_dpdk_register(void);
void free_dpdk_buf(struct dp_packet *);
-
+void
+netdev_dpdk_get_pipeline(__attribute__ ((unused))const struct netdev *netdev,
+ struct dp_packet *packet,
+ void *pipeline_res);
#else
static inline void
@@ -1358,6 +1358,7 @@ netdev_dummy_update_flags(struct netdev *netdev_,
netdev_dummy_construct, \
netdev_dummy_destruct, \
netdev_dummy_dealloc, \
+ NULL, \
netdev_dummy_get_config, \
netdev_dummy_set_config, \
NULL, /* get_tunnel_config */ \
@@ -2819,6 +2819,7 @@ netdev_linux_update_flags(struct netdev *netdev_, enum netdev_flags off,
CONSTRUCT, \
netdev_linux_destruct, \
netdev_linux_dealloc, \
+ NULL, \
NULL, /* get_config */ \
NULL, /* set_config */ \
NULL, /* get_tunnel_config */ \
@@ -274,7 +274,12 @@ struct netdev_class {
int (*construct)(struct netdev *);
void (*destruct)(struct netdev *);
void (*dealloc)(struct netdev *);
-
+ /* Get the pipeline information for the netdev.
+ * This will return the pipe_line id and
+ * status of pipeline for packet processing.
+ */
+ void (*get_pipeline)(const struct netdev *netdev, struct dp_packet *packet,
+ void *pipeline_res);
/* Fetches the device 'netdev''s configuration, storing it in 'args'.
* The caller owns 'args' and pre-initializes it to an empty smap.
*
@@ -849,6 +849,7 @@ netdev_vport_get_ifindex(const struct netdev *netdev_)
netdev_vport_construct, \
netdev_vport_destruct, \
netdev_vport_dealloc, \
+ NULL, \
GET_CONFIG, \
SET_CONFIG, \
GET_TUNNEL_CONFIG, \
The HW set the mark id that represents matching rule. The hw-pipeline reads the mark id from fdir.hi Signed-off-by: Shachar Beiser <shacharbe@mellanox.com> --- lib/automake.mk | 3 ++- lib/hw-pipeline.h | 31 +++++++++++++++++++++++++++++++ lib/netdev-bsd.c | 1 + lib/netdev-dpdk.c | 25 +++++++++++++++++++++++++ lib/netdev-dpdk.h | 14 +++++++++++--- lib/netdev-dummy.c | 1 + lib/netdev-linux.c | 1 + lib/netdev-provider.h | 7 ++++++- lib/netdev-vport.c | 1 + 9 files changed, 79 insertions(+), 5 deletions(-) create mode 100644 lib/hw-pipeline.h