diff --git a/sys/net/route/route_ctl.h b/sys/net/route/route_ctl.h index 7a4ed804feb..d3c457cdeaa 100644 --- a/sys/net/route/route_ctl.h +++ b/sys/net/route/route_ctl.h @@ -35,6 +35,8 @@ #ifndef _NET_ROUTE_ROUTE_CTL_H_ #define _NET_ROUTE_ROUTE_CTL_H_ +struct rib_head *rt_tables_get_rnh_safe(uint32_t table, sa_family_t family); + struct rib_cmd_info { uint8_t rc_cmd; /* RTM_ADD|RTM_DEL|RTM_CHANGE */ uint8_t spare[3]; diff --git a/sys/net/route/route_tables.c b/sys/net/route/route_tables.c index be67556915d..31696e84748 100644 --- a/sys/net/route/route_tables.c +++ b/sys/net/route/route_tables.c @@ -54,6 +54,7 @@ __FBSDID("$FreeBSD$"); #include #include +#include #include /* Kernel config default option. */ @@ -387,6 +388,16 @@ rt_tables_get_rnh(uint32_t table, sa_family_t family) return (rt_tables_get_rnh_ptr(table, family)); } +struct rib_head * +rt_tables_get_rnh_safe(uint32_t table, sa_family_t family) +{ + if (__predict_false(table >= V_rt_numfibs)) + return (NULL); + if (__predict_false(family >= (AF_MAX + 1))) + return (NULL); + return (rt_tables_get_rnh_ptr(table, family)); +} + u_int rt_tables_get_gen(uint32_t table, sa_family_t family) {