diff options
Diffstat (limited to 'sys/net')
-rw-r--r-- | sys/net/if.c | 16 | ||||
-rw-r--r-- | sys/net/if.h | 2 | ||||
-rw-r--r-- | sys/net/if_debug.c | 1 | ||||
-rw-r--r-- | sys/net/if_var.h | 1 |
4 files changed, 20 insertions, 0 deletions
diff --git a/sys/net/if.c b/sys/net/if.c index a5a3a8e..2b7a24a 100644 --- a/sys/net/if.c +++ b/sys/net/if.c @@ -58,6 +58,8 @@ #include <sys/taskqueue.h> #include <sys/domain.h> #include <sys/jail.h> +#include <sys/priv.h> + #include <machine/stdarg.h> #include <vm/uma.h> @@ -2135,6 +2137,20 @@ ifhwioctl(u_long cmd, struct ifnet *ifp, caddr_t data, struct thread *td) free(odescrbuf, M_IFDESCR); break; + case SIOCGIFFIB: + ifr->ifr_fib = ifp->if_fib; + break; + + case SIOCSIFFIB: + error = priv_check(td, PRIV_NET_SETIFFIB); + if (error) + return (error); + if (ifr->ifr_fib >= rt_numfibs) + return (EINVAL); + + ifp->if_fib = ifr->ifr_fib; + break; + case SIOCSIFFLAGS: error = priv_check(td, PRIV_NET_SETIFFLAGS); if (error) diff --git a/sys/net/if.h b/sys/net/if.h index 06521cb..d1f3883 100644 --- a/sys/net/if.h +++ b/sys/net/if.h @@ -325,6 +325,7 @@ struct ifreq { int ifru_media; caddr_t ifru_data; int ifru_cap[2]; + u_int ifru_fib; } ifr_ifru; #define ifr_addr ifr_ifru.ifru_addr /* address */ #define ifr_dstaddr ifr_ifru.ifru_dstaddr /* other end of p-to-p link */ @@ -341,6 +342,7 @@ struct ifreq { #define ifr_reqcap ifr_ifru.ifru_cap[0] /* requested capabilities */ #define ifr_curcap ifr_ifru.ifru_cap[1] /* current capabilities */ #define ifr_index ifr_ifru.ifru_index /* interface index */ +#define ifr_fib ifr_ifru.ifru_fib /* interface fib */ }; #define _SIZEOF_ADDR_IFREQ(ifr) \ diff --git a/sys/net/if_debug.c b/sys/net/if_debug.c index dcf504e..e7319374 100644 --- a/sys/net/if_debug.c +++ b/sys/net/if_debug.c @@ -86,6 +86,7 @@ if_show_ifnet(struct ifnet *ifp) IF_DB_PRINTF("%d", if_snd.ifq_drv_maxlen); IF_DB_PRINTF("%d", if_snd.altq_type); IF_DB_PRINTF("%x", if_snd.altq_flags); + IF_DB_PRINTF("%u", if_fib); #undef IF_DB_PRINTF } diff --git a/sys/net/if_var.h b/sys/net/if_var.h index b3ecb7d..cb1d39c 100644 --- a/sys/net/if_var.h +++ b/sys/net/if_var.h @@ -196,6 +196,7 @@ struct ifnet { void *if_pf_kif; void *if_lagg; /* lagg glue */ u_char if_alloctype; /* if_type at time of allocation */ + u_int if_fib; /* interface FIB */ /* * Spare fields are added so that we can modify sensitive data |