On 01/04/2013 02:41 PM, Marek Lindner wrote:
On Friday, January 04, 2013 23:12:59 NicoEchániz
wrote:
Selection
class 3 and beyond do change the gateway when a better one
becomes available. But as you correctly pointed out these selection
classes don't consider the announced bandwidth for the simple reason
that nobody cared. In most wireless scenarios (the main playground for
batman-adv) the path towards the gateway turned out to be more critical
than the gateway's pipe to the internet.
Feel free to propose something if you care about having this option. The
necessary code shouldn't be too hard to add. Backward compatibility will
be more difficult to achieve.
I believe that those of us who chose to use selection class 1 would
prefer if it were "dynamic". So if a new gateway appears, then the
client would evaluate with the same previous criteria if it is better or
not (considering "the gateway's advertised throughput as well as the
link quality") and switch accordingly. I see no reason why when someone
chooses selection class 1 she would be expecting to choose the best
available gw once and not ever check again.
If a network is stable, when a new better gw appears in some area it
won't be selected until nodes are restarted, and that might be a long time.
You misread my statement. Nobody needs to be convinced of the usefulness of
such a feature (at least for what concerns myself). Somebody needs to come up
with a solid proposal which then needs to be implemented. That is what I meant
by saying "Feel free to propose something [..]".
Note that switching immediately as soon as a better gateway comes around isn't
the best solution. Imagine a case in which a gateway announcing the highest
bandwidth in your network barely is visible for your gateway client. It will
keep switching between gateways, thereby breaking all your stateful
connections such as: ssh, vpns, video & music streams, etc
Yeah, I agree. The gateway switching should be regulated by a threshold,
so that it won't be switching like crazy when a client has similar
ranking values from more than one gw. See the proposal below...
One other
change that might be interesting would be the addition of a
setting for how much the advertised throughput affects gw selection.
I've seen Jan uses 96/96Mbit as advertised throughput on one router; I
do the same on our "main gateway", but maybe it would be better if we
could actually advertise the real throughput and have a setting to
control how much the bandwidth difference affects the selection.
Again, feel free to propose something which can be discussed.
It could just be implemented as a new setting like: gw_bw_weight
which would regulate how much gw bandwidth/throughput affects best gw
calculation.
I don't know what's the current algorithm but I guess there would be no
problem with backwards compatibility here; if the value is not set, the
default should produce the same result we get now.
So to make the proposal clear:
I'd change options for gw_mode client to something like this:
gw_sel_class [1|2] (1 considers TQ and bw, 2 only considers TQ)
gw_tq_threshold [3...256]
the minimum TQ delta to switch to a better gw, defaults to 20.
gw_bw_weight [value from 0 to 1]
how much does advertised gw bandwidth affect the selection. 0 does not
affect selection, 1 has most effect. Defaults to 1 but has no effect if
gw_sel_class is 2.
For backwards compatibility, if gw_sel_class > 2, it should behave as
the proposed option 2 with gw_tq_threshold set to the actual value. So,
for example gw_sel_class 20 would be "translated" to: gw_sel_class 2,
gw_tq_threshold 20, al least until it's deprecated.
The advantage of this proposal is that we can have a tq_threshold that
can still be used in the mode that considers gw throughput.
I like this better than gateway classes that Jan proposed, as it is less
implementation specific.
Please let me know if anything in this proposal is not sufficiently clear.
cheers,
NicoEchániz
PS: Marek, there are mismatched parenthesis in the new man page text in
this paragraph:
The second (optional) argument specifies the selection class (if
'client' was the first argument) or the gateway bandwidth (if this
node's internet connection bandwidth. Just enter any number (optionally
followed by "kbit" or "mbit") and the batman-adv module will guess
your
appropriate gateway class.