Date: Sat, 27 Jan 2007 21:28:23 +0700 (KRAT) From: Eugene Grosbein <eugen@grosbein.pp.ru> To: FreeBSD-gnats-submit@FreeBSD.org Subject: ports/108430: [patch] RIP is broken in quagga Message-ID: <200701271428.l0RESN4h038947@www.svzserv.kemerovo.su> Resent-Message-ID: <200701271510.l0RFAHMo043055@freefall.freebsd.org>
next in thread | raw e-mail | index | archive | help
>Number: 108430 >Category: ports >Synopsis: [patch] RIP is broken in quagga >Confidential: no >Severity: serious >Priority: high >Responsible: freebsd-ports-bugs >State: open >Quarter: >Keywords: >Date-Required: >Class: sw-bug >Submitter-Id: current-users >Arrival-Date: Sat Jan 27 15:10:17 GMT 2007 >Closed-Date: >Last-Modified: >Originator: Eugene Grosbein >Release: FreeBSD 4.11-STABLE i386 >Organization: Svyaz Service JSC >Environment: System: FreeBSD www.svzserv.kemerovo.su 4.11-STABLE FreeBSD 4.11-STABLE #20: Mon Nov 27 13:23:00 KRAT 2006 eu@www.svzserv.kemerovo.su:/home4/obj/home/src/sys/WWW i386 >Description: Quagga, since version 0.99.3, takes metric value from RTM_NEWADDR message received from routing socket and this value overrides right interface metric learned by quagga at startup time. FreeBSD always returns zero value here (even if one have used 'ifconfig if0 metric N' and quagga does not sanitize it. Then quagga passes zero interface metric to ripd that uses it as hop count increment value (if one does not use 'offset-list in' for interface) thus breaking RIP. >How-To-Repeat: Run quagga/ripd, make ripd obtain a route from network and see that it does not increase its metric when advertizes the route later. Versions 0.99.2 (and earlier) do not behave so. >Fix: This patch adds needed sanity check. 'If' statemend added is always false for all versions of FreeBSD but may become true one day if RTM_NEWADDR would return interface metric set with ifconfig(1). --- zebra/kernel_socket.c.orig Fri Jan 26 10:55:03 2007 +++ zebra/kernel_socket.c Fri Jan 26 10:55:35 2007 @@ -585,6 +585,7 @@ if (ifnlen && strncmp (ifp->name, ifname, INTERFACE_NAMSIZ)) isalias = 1; + if (ifam->ifam_metric) ifp->metric = ifam->ifam_metric; /* Add connected address. */ Eugene Grosbein >Release-Note: >Audit-Trail: >Unformatted:
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200701271428.l0RESN4h038947>