[ovs-dev] [PATCH] Update relevant artifacts to add support for DPDK 16.04.

Panu Matilainen pmatilai at redhat.com
Wed Apr 13 07:50:15 UTC 2016


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 -



More information about the dev mailing list