[ovs-dev] [PATCH 01/10] netdev: New field 'is_pmd' in netdev_class.

Ilya Maximets i.maximets at samsung.com
Mon Mar 14 15:18:11 UTC 2016


Made to simplify creation of derived classes.

Signed-off-by: Ilya Maximets <i.maximets at samsung.com>
---
 lib/netdev-bsd.c      |  1 +
 lib/netdev-dpdk.c     |  1 +
 lib/netdev-dummy.c    |  1 +
 lib/netdev-linux.c    |  1 +
 lib/netdev-provider.h |  3 +++
 lib/netdev-vport.c    | 20 +++++++++++---------
 lib/netdev-windows.c  |  1 +
 lib/netdev.c          |  5 +----
 8 files changed, 20 insertions(+), 13 deletions(-)

diff --git a/lib/netdev-bsd.c b/lib/netdev-bsd.c
index edf04bf..b148714 100644
--- a/lib/netdev-bsd.c
+++ b/lib/netdev-bsd.c
@@ -1547,6 +1547,7 @@ netdev_bsd_update_flags(struct netdev *netdev_, enum netdev_flags off,
                          GET_FEATURES)               \
 {                                                    \
     NAME,                                            \
+    false, /* is_pmd */                              \
                                                      \
     NULL, /* init */                                 \
     netdev_bsd_run,                                  \
diff --git a/lib/netdev-dpdk.c b/lib/netdev-dpdk.c
index f402354..6ac0eec 100644
--- a/lib/netdev-dpdk.c
+++ b/lib/netdev-dpdk.c
@@ -2641,6 +2641,7 @@ static const struct dpdk_qos_ops egress_policer_ops = {
     GET_CARRIER, GET_STATS, GET_FEATURES, GET_STATUS, RXQ_RECV)          \
 {                                                             \
     NAME,                                                     \
+    true,                       /* is_pmd */                  \
     INIT,                       /* init */                    \
     NULL,                       /* netdev_dpdk_run */         \
     NULL,                       /* netdev_dpdk_wait */        \
diff --git a/lib/netdev-dummy.c b/lib/netdev-dummy.c
index ccd4a0a..6fa1169 100644
--- a/lib/netdev-dummy.c
+++ b/lib/netdev-dummy.c
@@ -1195,6 +1195,7 @@ netdev_dummy_update_flags(struct netdev *netdev_,
 
 static const struct netdev_class dummy_class = {
     "dummy",
+    false,                      /* is_pmd */
     NULL,                       /* init */
     netdev_dummy_run,
     netdev_dummy_wait,
diff --git a/lib/netdev-linux.c b/lib/netdev-linux.c
index 570677e..dd39f0e 100644
--- a/lib/netdev-linux.c
+++ b/lib/netdev-linux.c
@@ -2840,6 +2840,7 @@ netdev_linux_update_flags(struct netdev *netdev_, enum netdev_flags off,
                            GET_FEATURES, GET_STATUS)            \
 {                                                               \
     NAME,                                                       \
+    false,                      /* is_pmd */                    \
                                                                 \
     NULL,                                                       \
     netdev_linux_run,                                           \
diff --git a/lib/netdev-provider.h b/lib/netdev-provider.h
index 1952a02..77aec4e 100644
--- a/lib/netdev-provider.h
+++ b/lib/netdev-provider.h
@@ -205,6 +205,9 @@ struct netdev_class {
      * the system. */
     const char *type;
 
+    /* If 'true' then this netdev should be polled by PMD threads. */
+    bool is_pmd;
+
 /* ## ------------------- ## */
 /* ## Top-Level Functions ## */
 /* ## ------------------- ## */
diff --git a/lib/netdev-vport.c b/lib/netdev-vport.c
index df6d8cf..4ba146d 100644
--- a/lib/netdev-vport.c
+++ b/lib/netdev-vport.c
@@ -1549,11 +1549,12 @@ netdev_vport_range(struct unixctl_conn *conn, int argc,
 
 #define TUNNEL_CLASS(NAME, DPIF_PORT, BUILD_HEADER, PUSH_HEADER, POP_HEADER)   \
     { DPIF_PORT,                                                               \
-        { NAME, VPORT_FUNCTIONS(get_tunnel_config,                             \
-                                set_tunnel_config,                             \
-                                get_netdev_tunnel_config,                      \
-                                tunnel_get_status,                             \
-                                BUILD_HEADER, PUSH_HEADER, POP_HEADER) }}
+        { NAME, false,                                                         \
+          VPORT_FUNCTIONS(get_tunnel_config,                                   \
+                          set_tunnel_config,                                   \
+                          get_netdev_tunnel_config,                            \
+                          tunnel_get_status,                                   \
+                          BUILD_HEADER, PUSH_HEADER, POP_HEADER) }}
 
 void
 netdev_vport_tunnel_register(void)
@@ -1595,9 +1596,10 @@ netdev_vport_patch_register(void)
 {
     static const struct vport_class patch_class =
         { NULL,
-            { "patch", VPORT_FUNCTIONS(get_patch_config,
-                                       set_patch_config,
-                                       NULL,
-                                       NULL, NULL, NULL, NULL) }};
+            { "patch", false,
+              VPORT_FUNCTIONS(get_patch_config,
+                              set_patch_config,
+                              NULL,
+                              NULL, NULL, NULL, NULL) }};
     netdev_register_provider(&patch_class.netdev_class);
 }
diff --git a/lib/netdev-windows.c b/lib/netdev-windows.c
index 093175f..ab91632 100644
--- a/lib/netdev-windows.c
+++ b/lib/netdev-windows.c
@@ -490,6 +490,7 @@ netdev_windows_internal_construct(struct netdev *netdev_)
 #define NETDEV_WINDOWS_CLASS(NAME, CONSTRUCT)                           \
 {                                                                       \
     .type               = NAME,                                         \
+    .is_pmd             = false,                                        \
     .alloc              = netdev_windows_alloc,                         \
     .construct          = CONSTRUCT,                                    \
     .destruct           = netdev_windows_destruct,                      \
diff --git a/lib/netdev.c b/lib/netdev.c
index 150f8d8..83b0300 100644
--- a/lib/netdev.c
+++ b/lib/netdev.c
@@ -115,10 +115,7 @@ netdev_requested_n_rxq(const struct netdev *netdev)
 bool
 netdev_is_pmd(const struct netdev *netdev)
 {
-    return (!strcmp(netdev->netdev_class->type, "dpdk") ||
-            !strcmp(netdev->netdev_class->type, "dpdkr") ||
-            !strcmp(netdev->netdev_class->type, "dpdkvhostcuse") ||
-            !strcmp(netdev->netdev_class->type, "dpdkvhostuser"));
+    return netdev->netdev_class->is_pmd;
 }
 
 static void
-- 
2.5.0




More information about the dev mailing list