Date: Tue, 6 Apr 2010 20:27:14 GMT From: Mark Harrison <mark@mivok.net> To: freebsd-gnats-submit@FreeBSD.org Subject: misc/145440: Multiple fib support (setfib) in /etc/rc.d/routing Message-ID: <201004062027.o36KREh8032605@www.freebsd.org> Resent-Message-ID: <201004062030.o36KU7Ju002769@freefall.freebsd.org>
next in thread | raw e-mail | index | archive | help
>Number: 145440 >Category: misc >Synopsis: Multiple fib support (setfib) in /etc/rc.d/routing >Confidential: no >Severity: non-critical >Priority: low >Responsible: freebsd-bugs >State: open >Quarter: >Keywords: >Date-Required: >Class: change-request >Submitter-Id: current-users >Arrival-Date: Tue Apr 06 20:30:06 UTC 2010 >Closed-Date: >Last-Modified: >Originator: Mark Harrison >Release: 8.0-RELEASE-p2 >Organization: OmniTI >Environment: FreeBSD gatling.office.omniti.com 8.0-RELEASE-p2 FreeBSD 8.0-RELEASE-p2 #0: Sat Apr 3 13:15:36 EDT 2010 root@gatling.office.omniti.com:/usr/obj/usr/src/sys/OMNIKERN amd64 >Description: It is not possible to set up static/default routes for alternate fib on startup via rc.conf. The current method is to use rc.local and manually run 'setfib <n> route add ...' >How-To-Repeat: Recompile the kernel with multiple fib support (sysctl net.fibs should be > 1). Try to set up static routes for a fib > 0. >Fix: This patch adds support for setting up static routes in alternate fibs in rc.conf. For fibs other than 0, append _fib<n> to the relevant configuration options normally dealt with by the routing rc script. E.g. static_routes_fib1="foo bar" defaultrouter_fib1="10.0.0.1" This requires that multiple fib support be compiled into the kernel. In addition, the stop function flushes routes for all fibs on the system. Patch attached with submission follows: --- /jails/test/etc/rc.d/routing 2009-11-21 09:31:36.000000000 -0500 +++ /etc/rc.d/routing 2010-04-06 16:12:01.050390660 -0400 @@ -27,36 +27,60 @@ routing_stop() { - route -n flush + fibcount=`sysctl -n net.fibs` + [ -z $fibcount ] && fibcount=1 + i=0 + while [ $i -lt $fibcount ]; do + setfib $i route -n flush + i=$((i + 1)) + done } static_start() { - case ${defaultrouter} in - [Nn][Oo] | '') - ;; - *) - static_routes="default ${static_routes}" - route_default="default ${defaultrouter}" - ;; - esac - - # Setup static routes. This should be done before router discovery. - # - if [ -n "${static_routes}" ]; then - for i in ${static_routes}; do - eval route_args=\$route_${i} - route add ${route_args} - done - fi - # Now ATM static routes - # - if [ -n "${natm_static_routes}" ]; then - for i in ${natm_static_routes}; do - eval route_args=\$route_${i} - atmconfig natm add ${route_args} - done - fi + fib=0 + setfib='' + while : ; do + if [ $fib -gt 0 ]; then + eval defaultrouter=\$defaultrouter_fib${fib} + eval static_routes=\$static_routes_fib${fib} + eval natm_static_routes=\$natm_static_routes_fib${fib} + setfib="setfib $fib" + [ -z "${defaultrouter}" -a -z "${static_routes}" -a \ + -z "${natm_static_routes}" ] && break + fi + + case ${defaultrouter} in + [Nn][Oo] | '') + ;; + *) + static_routes="default ${static_routes}" + route_default="default ${defaultrouter}" + ;; + esac + + # Setup static routes. This should be done before router + # discovery. + # + if [ -n "${static_routes}" ]; then + for i in ${static_routes}; do + eval route_args=\$route_${i} + ${setfib} route add ${route_args} + done + fi + # Now ATM static routes + # + if [ -n "${natm_static_routes}" ]; then + for i in ${natm_static_routes}; do + eval route_args=\$route_${i} + ${setfib} atmconfig natm add ${route_args} + done + fi + + # Loop through all fib configs + # + fib=$((fib + 1)) + done } _ropts_initdone= >Release-Note: >Audit-Trail: >Unformatted:
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201004062027.o36KREh8032605>