On 04/12/2016 05:05 PM, mweglicx wrote:
[...]
diff --git a/lib/netdev-dpdk.c b/lib/netdev-dpdk.c
index e09b471..2295e53 100644
--- a/lib/netdev-dpdk.c
+++ b/lib/netdev-dpdk.c
@@ -1740,31 +1740,31 @@ netdev_dpdk_get_features(const struct netdev *netdev_,
      link = dev->link;
      ovs_mutex_unlock(&dev->mutex);

-    if (link.link_duplex == ETH_LINK_AUTONEG_DUPLEX) {
+    if (link.link_duplex == ETH_LINK_AUTONEG) {

This isn't right, link_duplex is either ETH_LINK_HALF_DUPLEX or ETH_LINK_FULL_DUPLEX. It sort of happens to work because both ETH_LINK_AUTONEG and ETH_LINK_FULL_DUPLEX are defined to 1 and having autonegotiation end up with half-duplex these days isn't that likely.


          if (link.link_speed == ETH_LINK_SPEED_AUTONEG) {
              *current = NETDEV_F_AUTONEG;
          }

Additionally link_speed in DPDK 16.04 reflects the actual negotiated speed and is never ETH_LINK_SPEED_AUTONEG, which is a bitmap flag relevant to link_speeds field.

The autoneg case should be something like this:

@@ -1573,31 +1573,29 @@ netdev_dpdk_get_features(const struct netdev *netdev_,
     link = dev->link;
     ovs_mutex_unlock(&dev->mutex);

-    if (link.link_duplex == ETH_LINK_AUTONEG_DUPLEX) {
-        if (link.link_speed == ETH_LINK_SPEED_AUTONEG) {
-            *current = NETDEV_F_AUTONEG;
-        }
+    if (link.link_autoneg) {
+       *current = NETDEV_F_AUTONEG;
     } else if (link.link_duplex == ETH_LINK_HALF_DUPLEX) {


      } else if (link.link_duplex == ETH_LINK_HALF_DUPLEX) {
-        if (link.link_speed == ETH_LINK_SPEED_10) {
+        if (link.link_speed == ETH_SPEED_NUM_10M) {
              *current = NETDEV_F_10MB_HD;
          }
-        if (link.link_speed == ETH_LINK_SPEED_100) {
+        if (link.link_speed == ETH_SPEED_NUM_100M) {
              *current = NETDEV_F_100MB_HD;
          }
-        if (link.link_speed == ETH_LINK_SPEED_1000) {
+        if (link.link_speed == ETH_SPEED_NUM_1G) {
              *current = NETDEV_F_1GB_HD;
          }
      } else if (link.link_duplex == ETH_LINK_FULL_DUPLEX) {
-        if (link.link_speed == ETH_LINK_SPEED_10) {
+        if (link.link_speed == ETH_SPEED_NUM_10M) {
              *current = NETDEV_F_10MB_FD;
          }
-        if (link.link_speed == ETH_LINK_SPEED_100) {
+        if (link.link_speed == ETH_SPEED_NUM_100M) {
              *current = NETDEV_F_100MB_FD;
          }
-        if (link.link_speed == ETH_LINK_SPEED_1000) {
+        if (link.link_speed == ETH_SPEED_NUM_1G) {
              *current = NETDEV_F_1GB_FD;
          }
-        if (link.link_speed == ETH_LINK_SPEED_10000) {
+        if (link.link_speed == ETH_SPEED_NUM_10G) {
              *current = NETDEV_F_10GB_FD;
          }
      }

The rest looks ok.

As an aside, I've been thinking maybe this is a case where OVS could support both DPDK 2.2 and 16.04. I know its unprecedented but maybe that could change, restricting OVS to just one DPDK version seems unnecessarily strict when talking about differences this trivial.

        - Panu -
_______________________________________________
dev mailing list
dev@openvswitch.org
http://openvswitch.org/mailman/listinfo/dev

Reply via email to