The following reply was made to PR kern/183139; it has been noted by GNATS.

From: =?ISO-8859-1?Q?Roger_Pau_Monn=E9?= <[email protected]>
To: Adam McDougall <[email protected]>, <[email protected]>
Cc:  
Subject: Re: kern/183139: ifconfig options on xn0 lost after xen vm migration
 to another server
Date: Tue, 29 Oct 2013 10:42:55 +0100

 On 28/10/13 22:28, Adam McDougall wrote:
 > So far, it almost works as I expect.  It seems to work as long as at
 > least one option is left (example: options=400<LRO>) but if I have none,
 > they all come back on migrate.  Thanks.
 
 Yes, the "resume" condition is not triggered if there isn't any 
 feature enabled. I've updated the patch, now it should work as expected:
 
 ---
 diff --git a/sys/dev/xen/netfront/netfront.c b/sys/dev/xen/netfront/netfront.c
 index f9c72e6..52d8c11 100644
 --- a/sys/dev/xen/netfront/netfront.c
 +++ b/sys/dev/xen/netfront/netfront.c
 @@ -287,6 +287,8 @@ struct netfront_info {
        multicall_entry_t       rx_mcl[NET_RX_RING_SIZE+1];
        mmu_update_t            rx_mmu[NET_RX_RING_SIZE];
        struct ifmedia          sc_media;
 +
 +      bool                    xn_resume;
  };
  
  #define rx_mbufs xn_cdata.xn_rx_chain
 @@ -502,6 +504,7 @@ netfront_resume(device_t dev)
  {
        struct netfront_info *info = device_get_softc(dev);
  
 +      info->xn_resume = true;
        netif_disconnect_backend(info);
        return (0);
  }
 @@ -2024,13 +2027,28 @@ xn_configure_features(struct netfront_info *np)
        int err;
  
        err = 0;
 +
 +      if (!np->xn_resume ||
 +          ((np->xn_ifp->if_capenable & np->xn_ifp->if_capabilities)
 +          != np->xn_ifp->if_capenable)) {
 +              /*
 +               * Check if current enabled capabilities are available,
 +               * if not switch to default capabilities.
 +               */
  #if __FreeBSD_version >= 700000
 -      if ((np->xn_ifp->if_capenable & IFCAP_LRO) != 0)
 -              tcp_lro_free(&np->xn_lro);
 +              if ((np->xn_ifp->if_capenable & IFCAP_LRO) != 0)
 +                      tcp_lro_free(&np->xn_lro);
  #endif
 -      np->xn_ifp->if_capenable =
 -          np->xn_ifp->if_capabilities & ~(IFCAP_LRO|IFCAP_TSO4);
 -      np->xn_ifp->if_hwassist &= ~CSUM_TSO;
 +              np->xn_ifp->if_capenable =
 +                      np->xn_ifp->if_capabilities & ~(IFCAP_LRO|IFCAP_TSO4);
 +              np->xn_ifp->if_hwassist &= ~CSUM_TSO;
 +      } else {
 +              /*
 +               * What we have currently enabled is supported by the
 +               * new host, no need to change anything.
 +               */
 +              return 0;
 +      }
  #if __FreeBSD_version >= 700000
        if (xn_enable_lro && (np->xn_ifp->if_capabilities & IFCAP_LRO) != 0) {
                err = tcp_lro_init(&np->xn_lro);
 
 
_______________________________________________
[email protected] mailing list
http://lists.freebsd.org/mailman/listinfo/freebsd-bugs
To unsubscribe, send any mail to "[email protected]"

Reply via email to