! ! Hide kernel option ROUTETABLES evaluations in the implementation ! rather than the header file. With this also move RT_MAXFIBS and ! RT_NUMFIBS into the implemantion to avoid further usage in other ! code. ! ! This allows users to change the number of FIBs from 1..RT_MAXFIBS(16) ! dynamically using the tunable without the need to change the kernel ! config for the maximum anymore. This means that thet multi-FIB ! feature is now fully available with GENERIC kernels. ! The kernel option ROUTETABLES can still be used to set the default ! numbers of FIBs in absence of the tunable. ! ! Reviewed by: ! MFC after: 2 weeks ! Index: sys/net/route.c =================================================================== --- sys/net/route.c (revision 233003) +++ sys/net/route.c (working copy) @@ -68,6 +68,24 @@ #include +/* We use 4 bits in the mbuf flags, thus we are limited to 16 FIBS. */ +#define RT_MAXFIBS 16 + +/* Kernel config default option. */ +#ifdef ROUTETABLES +#if ROUTETABLES <= 0 +#error "ROUTETABLES defined too low" +#endif +#if ROUTETABLES > RT_MAXFIBS +#error "ROUTETABLES defined too big" +#endif +#define RT_NUMFIBS ROUTETABLES +#endif /* ROUTETABLES */ +/* Initialize to default if not otherwise set. */ +#ifndef RT_NUMFIBS +#define RT_NUMFIBS 1 +#endif + u_int rt_numfibs = RT_NUMFIBS; SYSCTL_UINT(_net, OID_AUTO, fibs, CTLFLAG_RD, &rt_numfibs, 0, ""); /* Index: sys/net/route.h =================================================================== --- sys/net/route.h (revision 233003) +++ sys/net/route.h (working copy) @@ -90,27 +90,6 @@ struct rt_metrics { #define RTM_RTTUNIT 1000000 /* units for rtt, rttvar, as units per sec */ #define RTTTOPRHZ(r) ((r) / (RTM_RTTUNIT / PR_SLOWHZ)) -/* MRT compile-time constants */ -#ifdef _KERNEL - #ifndef ROUTETABLES - #define RT_NUMFIBS 1 - #define RT_MAXFIBS 1 - #else - /* while we use 4 bits in the mbuf flags, we are limited to 16 */ - #define RT_MAXFIBS 16 - #if ROUTETABLES > RT_MAXFIBS - #define RT_NUMFIBS RT_MAXFIBS - #error "ROUTETABLES defined too big" - #else - #if ROUTETABLES == 0 - #define RT_NUMFIBS 1 - #else - #define RT_NUMFIBS ROUTETABLES - #endif - #endif - #endif -#endif - #define RT_DEFAULT_FIB 0 /* Explicitly mark fib=0 restricted cases */ extern u_int rt_numfibs; /* number fo usable routing tables */ /*