On 14/02/2017 17:52, Simon Horman wrote:
On Wed, Feb 08, 2017 at 05:29:19PM +0200, Roi Dayan wrote:
From: Paul Blakey <pa...@mellanox.com>
To use netdev flow offloading api, dpifs needs to iterate over
added ports. This addition inserts the added dpif ports in a hash map,
The map will also be used to translate dpif ports to netdevs.
Signed-off-by: Paul Blakey <pa...@mellanox.com>
Reviewed-by: Roi Dayan <r...@mellanox.com>
---
lib/dpif.c | 25 ++++++++++++
lib/dpif.h | 2 +
lib/netdev.c | 121 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
lib/netdev.h | 15 ++++++++
4 files changed, 163 insertions(+)
diff --git a/lib/dpif.c b/lib/dpif.c
index 57aa3c6..d4e4c0a 100644
--- a/lib/dpif.c
+++ b/lib/dpif.c
...
@@ -545,6 +560,14 @@ dpif_port_add(struct dpif *dpif, struct netdev *netdev,
odp_port_t *port_nop)
if (!error) {
VLOG_DBG_RL(&dpmsg_rl, "%s: added %s as port %"PRIu32,
dpif_name(dpif), netdev_name, port_no);
+
+ /* temp dpif_port, will be cloned in netdev_hmap_port_add */
+ struct dpif_port dpif_port;
+
+ dpif_port.type = CONST_CAST(char *, netdev_get_type(netdev));
+ dpif_port.name = CONST_CAST(char *, netdev_name);
+ dpif_port.port_no = port_no;
+ netdev_hmap_port_add(netdev, DPIF_HMAP_KEY(dpif), &dpif_port);
I wonder if it would be cleaner to get the dpif_port from the dpif API,
for example by providing a optionally NULL struct dpif_port * parameter to
dpif_class->port_add.
I'm not sure I'm following you here. how would this be done?
we want to same dpif_port and netdev resolution so we can use it later.
right that we use it in dpif_class it self but other classes would want
maybe to use this in the future so it's being handles in dpif_port_add.
} else {
VLOG_WARN_RL(&error_rl, "%s: failed to add %s as port: %s",
dpif_name(dpif), netdev_name, ovs_strerror(error));
...
diff --git a/lib/netdev.h b/lib/netdev.h
index d7d4199..96300c4 100644
--- a/lib/netdev.h
+++ b/lib/netdev.h
@@ -181,6 +181,21 @@ int netdev_init_flow_api(struct netdev *);
extern bool netdev_flow_api_enabled;
void netdev_set_flow_api_enabled(const struct smap *ovs_other_config);
+struct dpif_port;
+int netdev_hmap_port_add(struct netdev *, const void *obj, struct dpif_port *);
+struct netdev *netdev_hmap_port_get(odp_port_t port, const void *obj);
+int netdev_hmap_port_del(odp_port_t port, const void *obj);
+struct netdev_flow_dump **netdev_ports_flow_dumps_create(const void *obj,
+ int *ports);
+void netdev_ports_flow_flush(const void *obj);
Two functions function above are defined in the following patch.
Probably their definitions should go there too.
thanks. will be fixed.
+int netdev_ports_flow_del(const void *obj, const ovs_u128 *ufid,
+ struct dpif_flow_stats *stats);
Likewise, the above patch seems to be defined in patch 17 of this series.
+int netdev_ports_flow_get(const void *obj, struct match *match,
+ struct nlattr **actions,
+ struct dpif_flow_stats *stats,
+ const ovs_u128 *ufid, struct ofpbuf *buf);
The above function is declared in this patch, used in patch 12 and
defined in patch 17. This does not seem correct from a bisection point of
view.
thanks. same for netdev_ports_flow_del. will be fixed.
+odp_port_t netdev_hmap_port_get_byifidx(int ifindex);
+
/* native tunnel APIs */
/* Structure to pass parameters required to build a tunnel header. */
struct netdev_tnl_build_header_params {
--
2.7.4
_______________________________________________
dev mailing list
d...@openvswitch.org
https://mail.openvswitch.org/mailman/listinfo/ovs-dev