Hi Toke, On Sun, May 08, 2022 at 09:09:13PM +0200, Toke Høiland-Jørgensen wrote: > Daniel Gröber <d...@darkboxed.org> writes: > > > --- > > doc/bird.sgml | 21 ++++++++++++++------- > > proto/babel/babel.c | 1 + > > proto/babel/babel.h | 2 ++ > > proto/babel/config.Y | 2 ++ > > 4 files changed, 19 insertions(+), 7 deletions(-) > > > > diff --git a/doc/bird.sgml b/doc/bird.sgml > > index 5e85d8ec..1fdda7bc 100644 > > --- a/doc/bird.sgml > > +++ b/doc/bird.sgml > > @@ -1865,6 +1865,7 @@ protocol babel [<name>] { > > ipv4 { <channel config> }; > > ipv6 [sadr] { <channel config> }; > > randomize router id <switch>; > > + ecmp <switch> [limit <num>]; > > interface <interface pattern> { > > type <wired|wireless>; > > rxcost <number>; > > @@ -1879,7 +1880,7 @@ protocol babel [<name>] { > > check link <switch>; > > next hop ipv4 <address>; > > next hop ipv6 <address>; > > - ecmp <switch> [limit <num>]; > > Just add this in the right place the first time around? Or fold this > into the first patch entirely; doesn't really need to be a separate > patch...
Fixed. > > + ecmp weight <num>; > > authentication none|mac [permissive]; > > password "<text>"; > > password "<text>" { > > @@ -1910,6 +1911,13 @@ protocol babel [<name>] { > > router ID every time it starts up, which avoids this problem at the > > cost > > of not having stable router IDs in the network. Default: no. > > > > + <tag><label id="babel-ecmp">ecmp <m>switch</m> [limit > > <m>number</m>]</tag> > > + > > + Determines whether babel will emit ECMP (equal-cost multipath) > > + routes, allowing to load-balancing traffic across multiple paths. If > > + enabled the maximum number of next-hops to allow can be specified, > > + defaulting to 16. > > + > > <tag><label id="babel-type">type wired|wireless </tag> > > This option specifies the interface type: Wired or wireless. On wired > > interfaces a neighbor is considered unreachable after a small number > > of > > @@ -1984,12 +1992,11 @@ protocol babel [<name>] { > > source for Babel packets will be used. In normal operation, it > > should not > > be necessary to set this option. > > > > - <tag><label id="babel-ecmp">ecmp <m>switch</m> [limit > > <m>number</m>]</tag> > > - > > - Determines whether babel will emit ECMP (equal-cost multipath) > > - routes, allowing to load-balancing traffic across multiple paths. If > > - enabled the maximum number of next-hops to allow can be specified, > > - defaulting to 16. > > + <tag><label id="babel-ecmp-weight">ecmp weight <m>number</m></tag> > > + This specifies the relative weight used for nexthops going through > > + the iface when ECMP is enabled. Larger weight values relative to > > other > > + nexthops attract more traffic. Valid values are 1-256. Default value > > + is 1. > > > > <tag><label id="babel-authentication">authentication none|mac > > [permissive]</tag> > > Selects authentication method to be used. <cf/none/ means that > > packets > > diff --git a/proto/babel/babel.c b/proto/babel/babel.c > > index 4d9c657c..83d9a1d0 100644 > > --- a/proto/babel/babel.c > > +++ b/proto/babel/babel.c > > @@ -639,6 +639,7 @@ babel_nexthop_insert( > > { > > nh->gw = r->next_hop; > > nh->iface = r->neigh->ifa->iface; > > + nh->weight = r->neigh->ifa->cf->ecmp_weight; > > > > /* > > * If we cannot find a reachable neighbour, set the entry to be onlink. > > This > > diff --git a/proto/babel/babel.h b/proto/babel/babel.h > > index 3868dcb2..2ad1ded0 100644 > > --- a/proto/babel/babel.h > > +++ b/proto/babel/babel.h > > @@ -145,6 +145,8 @@ struct babel_iface_config { > > int tx_tos; > > int tx_priority; > > > > + u8 ecmp_weight; > > + > > ip_addr next_hop_ip4; > > ip_addr next_hop_ip6; > > > > diff --git a/proto/babel/config.Y b/proto/babel/config.Y > > index 8f18c790..6f03482a 100644 > > --- a/proto/babel/config.Y > > +++ b/proto/babel/config.Y > > @@ -70,6 +70,7 @@ babel_iface_start: > > BABEL_IFACE->tx_tos = IP_PREC_INTERNET_CONTROL; > > BABEL_IFACE->tx_priority = sk_priority_control; > > BABEL_IFACE->check_link = 1; > > + BABEL_IFACE->ecmp_weight = 0; > > }; > > > > > > @@ -149,6 +150,7 @@ babel_iface_item: > > | AUTHENTICATION NONE { BABEL_IFACE->auth_type = BABEL_AUTH_NONE; } > > | AUTHENTICATION MAC { BABEL_IFACE->auth_type = BABEL_AUTH_MAC; > > BABEL_IFACE->auth_permissive = 0; } > > | AUTHENTICATION MAC PERMISSIVE { BABEL_IFACE->auth_type = > > BABEL_AUTH_MAC; BABEL_IFACE->auth_permissive = 1; } > > + | ECMP WEIGHT expr { BABEL_IFACE->ecmp_weight = $3 - 1; if (($3<1) || > > ($3>256)) cf_error("ECMP weight must be in range 1-256"); } > > | password_list > > ; > > > > -- > > 2.30.2 --Daniel