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

From: Adam McDougall <mcdou...@egr.msu.edu>
To: Roger Pau =?iso-8859-1?Q?Monn=E9?= <roger....@citrix.com>
Cc: bug-follo...@freebsd.org
Subject: Re: kern/183139: ifconfig options on xn0 lost after xen vm migration
 to another server
Date: Wed, 30 Oct 2013 16:58:28 -0400

 Thanks, this works!
 
 On Tue, Oct 29, 2013 at 10:42:55AM +0100, Roger Pau Monné wrote:
 
   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);
   
   
_______________________________________________
freebsd-bugs@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/freebsd-bugs
To unsubscribe, send any mail to "freebsd-bugs-unsubscr...@freebsd.org"

Reply via email to