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

Reply via email to