Defaults for if_capenable and detecting user initiated changes

John Baldwin jhb at freebsd.org
Mon Dec 9 16:31:18 UTC 2013


On Friday, December 06, 2013 11:25:48 am Justin T. Gibbs wrote:
> On Dec 3, 2013, at 10:13 AM, John Baldwin <jhb at freebsd.org> wrote:
> 
> > On Wednesday, November 27, 2013 12:59:08 pm Justin T. Gibbs wrote:
> >> Hi net,
> >> 
> >> I’m reviewing a patch from Roger Pau Monné for the Xen netfront driver.  The 
> > goal of the change is to avoid disturbing the user’s settings for the 
> > interface just because the backend device has changed or the connection to the 
> > backend was reset.  I’ve attached the latest version of the patch.
> >> 
> >> The current patch leaves the interface settings alone if they can be 
> > supported by the newly attached backend.  What would be ideal is to enable 
> > capabilities that default to being enabled if they were not explicitly 
> > disabled by the user and can be supported by the new backend.  Unfortunately, 
> > I don’t think the if_capenable and if_capabilities fields are descriptive 
> > enough to deal with an interface whose capabilities can change at runtime.  
> > Just as can be done with link speed, some of these settings need to allow an 
> > “auto/default” setting in addition to on or off.  This would allow the user to 
> > explicitly disable a capability if needed, but generally allow the system to 
> > chose the most optimal settings when they are supported.  Would this be 
> > difficult to add?
> > 
> > Couldn't you maintain this state in the Xen netfront driver's softc?
> > You already get the ioctls that track changes to the capenable field,
> > so you when a change explicitly disables a capability you can set that
> > in a 'forced off' or 'forced on' field.  Perhaps more of a 'forced'
> > field that you just update by doing:
> > 
> > 	sc->capforced |= (oldcapenable ^ newcapenable)
> > 
> > However, it's not clear to me if you can get the underlying adapters
> > initial capenable list.  If so, I think capforced should be all you
> > need to handle this (though it might be easier if you have separate
> > forcedon and forcedoff fields).
> > 
> > -- 
> > John Baldwin
> 
> Certainly this could be done in the Xen driver.  The reason I posted my question, however, was to ask whether this should be more generically 
tracked by the if layer instead of handled by the underlying driver.  Lots of user interfaces support a “restore defaults” capability (e.g. for the 
novice administrator who screws up, or as a step in writing a script/procedure that starts by getting to a known state), so I think this is 
interesting for more than this particular Xen issue.

Hmm.  In terms of drivers where capenable can change at runtime, I think
Xen's netfront is unique in that regard.  However, it might be nice to know
what the defaults are (basically, what the initial setting of if_capenable
is).  You could even just cache that when if_attach() is called without
needing to  change any drivers, just add a new ifnet field that if_attach()
sets.

-- 
John Baldwin


More information about the freebsd-net mailing list