@@ -85,7 +85,8 @@ struct netdev {
/* Functions to control flow offloading. */
OVSRCU_TYPE(const struct netdev_flow_api *) flow_api;
- struct netdev_hw_info hw_info; /* offload-capable netdev info */
+ const char *dpif_type; /* Type of dpif this netdev belongs to. */
+ struct netdev_hw_info hw_info; /* Offload-capable netdev info. */
};
static inline void
@@ -1893,6 +1893,22 @@ netdev_get_class(const struct netdev *netdev)
return netdev->netdev_class;
}
+/* Set the type of 'dpif' this 'netdev' belongs to. */
+void
+netdev_set_dpif_type(struct netdev *netdev, const char *type)
+{
+ netdev->dpif_type = type;
+}
+
+/* Returns the type of 'dpif' this 'netdev' belongs to.
+ *
+ * The caller must not free the returned value. */
+const char *
+netdev_get_dpif_type(const struct netdev *netdev)
+{
+ return netdev->dpif_type;
+}
+
/* Returns the netdev with 'name' or NULL if there is none.
*
* The caller must free the returned netdev with netdev_close(). */
@@ -179,6 +179,8 @@ bool netdev_mtu_is_user_config(struct netdev *);
int netdev_get_ifindex(const struct netdev *);
int netdev_set_tx_multiq(struct netdev *, unsigned int n_txq);
enum netdev_pt_mode netdev_get_pt_mode(const struct netdev *);
+void netdev_set_dpif_type(struct netdev *, const char *);
+const char *netdev_get_dpif_type(const struct netdev *);
/* Packet reception. */
int netdev_rxq_open(struct netdev *, struct netdev_rxq **, int id);
Storing of the dpif type of the owning datapath interface will allow us to easily distinguish, for example, userspace tunneling ports from the system ones. This is required in terms of HW offloading to avoid offloading of userspace flows to kernel interfaces that doesn't belong to userspace datapath, but have same dpif_port names. Signed-off-by: Ilya Maximets <i.maximets@ovn.org> --- lib/netdev-provider.h | 3 ++- lib/netdev.c | 16 ++++++++++++++++ lib/netdev.h | 2 ++ 3 files changed, 20 insertions(+), 1 deletion(-)