funny ECMP
Ingo Flaschberger
if at xip.at
Tue Aug 24 00:33:06 UTC 2010
Dear Li,
nice to hear from you.
1st: i have send in a bugfix:
http://www.freebsd.org/cgi/query-pr.cgi?pr=149917
>>
>> I have changed the route selection code of ecmp to
>> balance only between routes of the same weight.
>> (see attached file)
>
>> As Qing Li mentioned months ago, there are problems with static routes
>> and interfaces.
>>
>
> Do you have the exact link to the email thread?
> There were no pending ECMP related issues since my last round of
> commits
> as far as I can remember.
http://lists.freebsd.org/pipermail/freebsd-net/2010-January/024420.html
http://lists.freebsd.org/pipermail/freebsd-net/2010-February/024539.html
>> Example 1:
>> ifconfig em1 alias 10.13.13.90/24
>> ping 10.13.13.95 ok
>> route add 10.13.13.0/24 10.11.11.1 -weight 2
>> ping 10.13.13.95 broken (arpresolve: can't allocate llinfo for
>> 10.13.13.95)
>>
>
> Could you please explain a bit on exactly what you try to
> accomplish here with this configuration?
rebuilding my core-routers.
it's a very special setup:
2 redundat core routers, connected via ospf (quagga),
vrrp to server-side.
currently I use a very modfied ucarp version because freebsd 6 only allows
on route.
problem is with standard freebsd and carp, that there is at the failover
router a via ospf received route
to the server-side interface. when now carp tries to add the route during
failover, it fails. and seconds later the ospf route times out.
so, i hoped to use carp, quagga and freebsd ecmp to be able to avoid this
problems now.
so I need route-merics (weights?) to prefer direct interface routes
(connected) before static ones.
perhaps I also need to change quagga to send also the merics to the
kernel, as in differnce to, for example, cisco router, connected and
static routes have the same weight.
>> deleting the last static multipath routes seems to affect?, destroy?
>> the interface route.
>> system crashes in:
>> /usr/src/sys/net/route.c:370
>> rn = rnh->rnh_matchaddr(dst, rnh);
>> if (rn && ((rn->rn_flags & RNF_ROOT) == 0)) {
>> newrt = rt = RNTORT(rn);
>> here -> RT_LOCK(newrt);
>> RT_ADDREF(newrt);
>> if (needlock)
>>
>
> I will take a look.
thanks.
Kind regards,
Ingo Flaschberger
More information about the freebsd-net
mailing list