Skip site navigation (1)Skip section navigation (2)
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>