diff options
author | 2013-11-21 17:32:12 +0000 | |
---|---|---|
committer | 2013-11-21 17:32:12 +0000 | |
commit | 8992daf0cfb7a02f53b346d1a7a27f8b289d5910 (patch) | |
tree | f78352cdc7aaf394ea35e714772fb21882c32ed2 | |
parent | Make the bit string unsigned char * in printb() and printb_status(). (diff) | |
download | wireguard-openbsd-8992daf0cfb7a02f53b346d1a7a27f8b289d5910.tar.xz wireguard-openbsd-8992daf0cfb7a02f53b346d1a7a27f8b289d5910.zip |
split kernel parts of the if.h into a separate header file if_var.h
which allows us to modify ifnet structure in a relatively safe way;
discussed with deraadt, ok mpi
-rw-r--r-- | sys/net/if.h | 493 | ||||
-rw-r--r-- | sys/net/if_var.h | 531 | ||||
-rw-r--r-- | usr.bin/netstat/if.c | 3 | ||||
-rw-r--r-- | usr.bin/netstat/mroute6.c | 3 | ||||
-rw-r--r-- | usr.bin/netstat/net80211.c | 3 | ||||
-rw-r--r-- | usr.bin/netstat/route.c | 3 | ||||
-rw-r--r-- | usr.bin/netstat/show.c | 3 | ||||
-rw-r--r-- | usr.sbin/snmpd/snmpd.h | 22 |
8 files changed, 566 insertions, 495 deletions
diff --git a/sys/net/if.h b/sys/net/if.h index b7d1b3c547c..240bb2bd76d 100644 --- a/sys/net/if.h +++ b/sys/net/if.h @@ -1,8 +1,7 @@ -/* $OpenBSD: if.h,v 1.152 2013/11/09 06:38:42 dlg Exp $ */ +/* $OpenBSD: if.h,v 1.153 2013/11/21 17:32:12 mikeb Exp $ */ /* $NetBSD: if.h,v 1.23 1996/05/07 02:40:27 thorpej Exp $ */ /* - * Copyright (c) 2012-2013 Henning Brauer <henning@openbsd.org> * Copyright (c) 1982, 1986, 1989, 1993 * The Regents of the University of California. All rights reserved. * @@ -60,65 +59,6 @@ __END_DECLS #if __BSD_VISIBLE -#include <sys/queue.h> -#include <sys/tree.h> -#include <altq/if_altq.h> -#ifdef _KERNEL -#include <net/hfsc.h> -#endif - -/* - * Structures defining a network interface, providing a packet - * transport mechanism (ala level 0 of the PUP protocols). - * - * Each interface accepts output datagrams of a specified maximum - * length, and provides higher level routines with input datagrams - * received from its medium. - * - * Output occurs when the routine if_output is called, with four parameters: - * (*ifp->if_output)(ifp, m, dst, rt) - * Here m is the mbuf chain to be sent and dst is the destination address. - * The output routine encapsulates the supplied datagram if necessary, - * and then transmits it on its medium. - * - * On input, each interface unwraps the data received by it, and either - * places it on the input queue of an internetwork datagram routine - * and posts the associated software interrupt, or passes the datagram to a raw - * packet input routine. - * - * Routines exist for locating interfaces by their addresses - * or for locating an interface on a certain network, as well as more general - * routing and gateway routines maintaining information used to locate - * interfaces. These routines live in the files if.c and route.c - */ - -#include <sys/time.h> - -struct mbuf; -struct proc; -struct rtentry; -struct socket; -struct ether_header; -struct arpcom; -struct rt_addrinfo; -struct ifnet; -struct hfsc_if; - -/* - * Structure describing a `cloning' interface. - */ -struct if_clone { - LIST_ENTRY(if_clone) ifc_list; /* on list of cloners */ - const char *ifc_name; /* name of device, e.g. `gif' */ - size_t ifc_namelen; /* length of name */ - - int (*ifc_create)(struct if_clone *, int); - int (*ifc_destroy)(struct ifnet *); -}; - -#define IF_CLONE_INITIALIZER(name, create, destroy) \ - { { 0 }, name, sizeof(name) - 1, create, destroy } - /* * Structure used to query names of interface cloners. */ @@ -175,22 +115,6 @@ struct if_data { #define IFQ_DEFPRIO 3 /* - * Structure defining a queue for a network interface. - * XXX keep in sync with struct ifaltq. - */ -struct ifqueue { - struct { - struct mbuf *head; - struct mbuf *tail; - } ifq_q[IFQ_NQUEUES]; - int ifq_len; - int ifq_maxlen; - int ifq_drops; - struct hfsc_if *ifq_hfsc; - struct timeout *ifq_congestion; -}; - -/* * Values for if_link_state. */ #define LINK_STATE_UNKNOWN 0 /* link unknown */ @@ -216,8 +140,7 @@ struct if_status_description { #define LINK_STATE_DESC_MATCH(_ifs, _t, _s) \ (((_ifs)->ifs_type == (_t) || (_ifs)->ifs_type == 0) && \ (_ifs)->ifs_state == (_s)) - - + #define LINK_STATE_DESCRIPTIONS { \ { IFT_ETHER, LINK_STATE_DOWN, "no carrier" }, \ @@ -242,13 +165,6 @@ struct if_status_description { { 0, 0, NULL } \ } -/* - * Structure defining a queue for a network interface. - * - * (Would like to call this struct ``if'', but C isn't PL/1.) - */ -TAILQ_HEAD(ifnet_head, ifnet); /* the actual queue head */ - /* Traditional BSD name for length of interface external name. */ #define IFNAMSIZ IF_NAMESIZE @@ -257,82 +173,6 @@ TAILQ_HEAD(ifnet_head, ifnet); /* the actual queue head */ */ #define IFDESCRSIZE 64 -struct ifnet { /* and the entries */ - void *if_softc; /* lower-level data for this if */ - TAILQ_ENTRY(ifnet) if_list; /* all struct ifnets are chained */ - TAILQ_ENTRY(ifnet) if_txlist; /* list of ifnets ready to tx */ - TAILQ_HEAD(, ifaddr) if_addrlist; /* linked list of addresses per if */ - TAILQ_HEAD(, ifg_list) if_groups; /* linked list of groups per if */ - struct hook_desc_head *if_addrhooks; /* address change callbacks */ - struct hook_desc_head *if_linkstatehooks; /* link change callbacks */ - struct hook_desc_head *if_detachhooks; /* detach callbacks */ - char if_xname[IFNAMSIZ]; /* external name (name + unit) */ - int if_pcount; /* number of promiscuous listeners */ - caddr_t if_bpf; /* packet filter structure */ - caddr_t if_bridgeport; /* used by bridge ports */ - caddr_t if_tp; /* used by trunk ports */ - caddr_t if_pf_kif; /* pf interface abstraction */ - union { - caddr_t carp_s; /* carp structure (used by !carp ifs) */ - struct ifnet *carp_d; /* ptr to carpdev (used by carp ifs) */ - } if_carp_ptr; -#define if_carp if_carp_ptr.carp_s -#define if_carpdev if_carp_ptr.carp_d - u_short if_index; /* numeric abbreviation for this if */ - short if_timer; /* time 'til if_watchdog called */ - short if_flags; /* up/down, broadcast, etc. */ - int if_xflags; /* extra softnet flags */ - struct if_data if_data; /* stats and other data about if */ - u_int32_t if_hardmtu; /* maximum MTU device supports */ - u_int if_rdomain; /* routing instance */ - char if_description[IFDESCRSIZE]; /* interface description */ - u_short if_rtlabelid; /* next route label */ - u_int8_t if_priority; - - /* procedure handles */ - /* output routine (enqueue) */ - int (*if_output)(struct ifnet *, struct mbuf *, struct sockaddr *, - struct rtentry *); - - /* link level output function */ - int (*if_ll_output)(struct ifnet *, struct mbuf *, - struct sockaddr *, struct rtentry *); - /* initiate output routine */ - void (*if_start)(struct ifnet *); - /* ioctl routine */ - int (*if_ioctl)(struct ifnet *, u_long, caddr_t); - /* stop routine */ - int (*if_stop)(struct ifnet *, int); - /* timer routine */ - void (*if_watchdog)(struct ifnet *); - int (*if_wol)(struct ifnet *, int); - struct ifaddr *if_lladdr; /* pointer to link-level address */ - struct ifaltq if_snd; /* output queue (includes altq) */ - struct sockaddr_dl *if_sadl; /* pointer to our sockaddr_dl */ - - void *if_afdata[AF_MAX]; -}; -#define if_mtu if_data.ifi_mtu -#define if_type if_data.ifi_type -#define if_addrlen if_data.ifi_addrlen -#define if_hdrlen if_data.ifi_hdrlen -#define if_metric if_data.ifi_metric -#define if_link_state if_data.ifi_link_state -#define if_baudrate if_data.ifi_baudrate -#define if_ipackets if_data.ifi_ipackets -#define if_ierrors if_data.ifi_ierrors -#define if_opackets if_data.ifi_opackets -#define if_oerrors if_data.ifi_oerrors -#define if_collisions if_data.ifi_collisions -#define if_ibytes if_data.ifi_ibytes -#define if_obytes if_data.ifi_obytes -#define if_imcasts if_data.ifi_imcasts -#define if_omcasts if_data.ifi_omcasts -#define if_iqdrops if_data.ifi_iqdrops -#define if_noproto if_data.ifi_noproto -#define if_lastchange if_data.ifi_lastchange -#define if_capabilities if_data.ifi_capabilities - #define IFF_UP 0x1 /* interface is up */ #define IFF_BROADCAST 0x2 /* broadcast address valid */ #define IFF_DEBUG 0x4 /* turn on debugging */ @@ -384,85 +224,6 @@ struct ifnet { /* and the entries */ #define IFCAP_CSUM_MASK (IFCAP_CSUM_IPv4 | IFCAP_CSUM_TCPv4 | \ IFCAP_CSUM_UDPv4 | IFCAP_CSUM_TCPv6 | IFCAP_CSUM_UDPv6) -/* - * Output queues (ifp->if_snd) and internetwork datagram level (pup level 1) - * input routines have queues of messages stored on ifqueue structures - * (defined above). Entries are added to and deleted from these structures - * by these macros, which should be called with ipl raised to splnet(). - */ -#define IF_QFULL(ifq) ((ifq)->ifq_len >= (ifq)->ifq_maxlen) -#define IF_DROP(ifq) ((ifq)->ifq_drops++) -#define IF_ENQUEUE(ifq, m) \ -do { \ - (m)->m_nextpkt = NULL; \ - if ((ifq)->ifq_q[(m)->m_pkthdr.pf.prio].tail == NULL) \ - (ifq)->ifq_q[(m)->m_pkthdr.pf.prio].head = m; \ - else \ - (ifq)->ifq_q[(m)->m_pkthdr.pf.prio].tail->m_nextpkt = m; \ - (ifq)->ifq_q[(m)->m_pkthdr.pf.prio].tail = m; \ - (ifq)->ifq_len++; \ -} while (/* CONSTCOND */0) -#define IF_PREPEND(ifq, m) \ -do { \ - (m)->m_nextpkt = (ifq)->ifq_q[(m)->m_pkthdr.pf.prio].head; \ - if ((ifq)->ifq_q[(m)->m_pkthdr.pf.prio].tail == NULL) \ - (ifq)->ifq_q[(m)->m_pkthdr.pf.prio].tail = (m); \ - (ifq)->ifq_q[(m)->m_pkthdr.pf.prio].head = (m); \ - (ifq)->ifq_len++; \ -} while (/* CONSTCOND */0) - -#define IF_POLL(ifq, m) \ -do { \ - int if_dequeue_prio = IFQ_MAXPRIO; \ - do { \ - (m) = (ifq)->ifq_q[if_dequeue_prio].head; \ - } while (!(m) && --if_dequeue_prio >= 0); \ -} while (/* CONSTCOND */0) - -#define IF_DEQUEUE(ifq, m) \ -do { \ - int if_dequeue_prio = IFQ_MAXPRIO; \ - do { \ - (m) = (ifq)->ifq_q[if_dequeue_prio].head; \ - if (m) { \ - if (((ifq)->ifq_q[if_dequeue_prio].head = \ - (m)->m_nextpkt) == NULL) \ - (ifq)->ifq_q[if_dequeue_prio].tail = NULL; \ - (m)->m_nextpkt = NULL; \ - (ifq)->ifq_len--; \ - } \ - } while (!(m) && --if_dequeue_prio >= 0); \ -} while (/* CONSTCOND */0) - -#define IF_INPUT_ENQUEUE(ifq, m) \ -do { \ - if (IF_QFULL(ifq)) { \ - IF_DROP(ifq); \ - m_freem(m); \ - if (!(ifq)->ifq_congestion) \ - if_congestion(ifq); \ - } else \ - IF_ENQUEUE(ifq, m); \ -} while (/* CONSTCOND */0) - -#define IF_PURGE(ifq) \ -do { \ - struct mbuf *__m0; \ - \ - for (;;) { \ - IF_DEQUEUE((ifq), __m0); \ - if (__m0 == NULL) \ - break; \ - else \ - m_freem(__m0); \ - } \ -} while (/* CONSTCOND */0) -#define IF_LEN(ifq) ((ifq)->ifq_len) -#define IF_IS_EMPTY(ifq) ((ifq)->ifq_len == 0) - -#define IFQ_MAXLEN 256 -#define IFNET_SLOWHZ 1 /* granularity is 1 second */ - /* symbolic names for terminal (per-protocol) CTL_IFQ_ nodes */ #define IFQCTL_LEN 1 #define IFQCTL_MAXLEN 2 @@ -480,35 +241,6 @@ do { \ } /* - * The ifaddr structure contains information about one address - * of an interface. They are maintained by the different address families, - * are allocated and attached when an address is set, and are linked - * together so all addresses for an interface can be located. - */ -struct ifaddr { - struct sockaddr *ifa_addr; /* address of interface */ - struct sockaddr *ifa_dstaddr; /* other end of p-to-p link */ -#define ifa_broadaddr ifa_dstaddr /* broadcast address interface */ - struct sockaddr *ifa_netmask; /* used to determine subnet */ - struct ifnet *ifa_ifp; /* back-pointer to interface */ - TAILQ_ENTRY(ifaddr) ifa_list; /* list of addresses for interface */ - /* check or clean routes (+ or -)'d */ - void (*ifa_rtrequest)(int, struct rtentry *); - u_int ifa_flags; /* mostly rt_flags for cloning */ - u_int ifa_refcnt; /* count of references */ - int ifa_metric; /* cost of going out this interface */ -}; -#define IFA_ROUTE RTF_UP /* route installed */ - -struct ifaddr_item { - RB_ENTRY(ifaddr_item) ifai_entry; - struct sockaddr *ifai_addr; - struct ifaddr *ifai_ifa; - struct ifaddr_item *ifai_next; - u_int ifai_rdomain; -}; - -/* * Message format for use in obtaining information about interfaces * from sysctl and the routing socket. */ @@ -545,7 +277,6 @@ struct ifa_msghdr { int ifam_metric; /* value of ifa_metric */ }; - /* * Message format announcing the arrival or departure of a network interface. */ @@ -569,25 +300,6 @@ struct if_announcemsghdr { #define IFG_ALL "all" /* group contains all interfaces */ #define IFG_EGRESS "egress" /* if(s) default route(s) point to */ -struct ifg_group { - char ifg_group[IFNAMSIZ]; - u_int ifg_refcnt; - caddr_t ifg_pf_kif; - int ifg_carp_demoted; - TAILQ_HEAD(, ifg_member) ifg_members; - TAILQ_ENTRY(ifg_group) ifg_next; -}; - -struct ifg_member { - TAILQ_ENTRY(ifg_member) ifgm_next; - struct ifnet *ifgm_ifp; -}; - -struct ifg_list { - struct ifg_group *ifgl_group; - TAILQ_ENTRY(ifg_list) ifgl_next; -}; - struct ifg_req { union { char ifgrqu_group[IFNAMSIZ]; @@ -709,205 +421,8 @@ struct if_laddrreq { #include <net/if_arp.h> #ifdef _KERNEL -#define IFAFREE(ifa) \ -do { \ - if ((ifa)->ifa_refcnt <= 0) \ - ifafree(ifa); \ - else \ - (ifa)->ifa_refcnt--; \ -} while (/* CONSTCOND */0) - -/* XXX the IFQ_ macros are a giant mess right now. cleanup once altq gone. */ - -#ifdef ALTQ - -/* XXX pattr unused */ -/* if_snd becomes ifqueue when altq is gone and the casts go away */ -#define IFQ_ENQUEUE(ifq, m, pattr, err) \ -do { \ - if (HFSC_ENABLED((ifq))) \ - (err) = hfsc_enqueue(((struct ifqueue *)(ifq)), (m)); \ - else if (ALTQ_IS_ENABLED((ifq))) { \ - m->m_pkthdr.pf.prio = IFQ_MAXPRIO; \ - ALTQ_ENQUEUE((ifq), (m), (pattr), (err)); \ - } else { \ - if (IF_QFULL((ifq))) { \ - m_freem((m)); \ - (err) = ENOBUFS; \ - } else { \ - IF_ENQUEUE((ifq), (m)); \ - (err) = 0; \ - } \ - } \ - if ((err)) \ - (ifq)->ifq_drops++; \ -} while (/* CONSTCOND */0) - -#define IFQ_DEQUEUE(ifq, m) \ -do { \ - if (HFSC_ENABLED((ifq))) \ - (m) = hfsc_dequeue(((struct ifqueue *)(ifq)), 1); \ - else if (OLDTBR_IS_ENABLED((ifq))) \ - (m) = oldtbr_dequeue((ifq), ALTDQ_REMOVE); \ - else if (ALTQ_IS_ENABLED((ifq))) \ - ALTQ_DEQUEUE((ifq), (m)); \ - else \ - IF_DEQUEUE((ifq), (m)); \ -} while (/* CONSTCOND */0) - -#define IFQ_POLL(ifq, m) \ -do { \ - if (HFSC_ENABLED((ifq))) \ - (m) = hfsc_dequeue(((struct ifqueue *)(ifq)), 0); \ - else if (OLDTBR_IS_ENABLED((ifq))) \ - (m) = oldtbr_dequeue((ifq), ALTDQ_POLL); \ - else if (ALTQ_IS_ENABLED((ifq))) \ - ALTQ_POLL((ifq), (m)); \ - else \ - IF_POLL((ifq), (m)); \ -} while (/* CONSTCOND */0) - -#define IFQ_PURGE(ifq) \ -do { \ - if (HFSC_ENABLED((ifq))) \ - hfsc_purge(((struct ifqueue *)(ifq))); \ - else if (ALTQ_IS_ENABLED((ifq))) \ - ALTQ_PURGE(ifq); \ - else \ - IF_PURGE((ifq)); \ -} while (/* CONSTCOND */0) - -#define IFQ_SET_READY(ifq) \ -do { \ - ((ifq)->altq_flags |= ALTQF_READY); \ -} while (/* CONSTCOND */0) - -#else /* !ALTQ */ - -/* XXX pattr unused */ -#define IFQ_ENQUEUE(ifq, m, pattr, err) \ -do { \ - if (HFSC_ENABLED(ifq)) \ - (err) = hfsc_enqueue(((struct ifqueue *)(ifq)), m); \ - else { \ - if (IF_QFULL((ifq))) { \ - m_freem((m)); \ - (err) = ENOBUFS; \ - } else { \ - IF_ENQUEUE((ifq), (m)); \ - (err) = 0; \ - } \ - } \ - if ((err)) \ - (ifq)->ifq_drops++; \ -} while (/* CONSTCOND */0) - -#define IFQ_DEQUEUE(ifq, m) \ -do { \ - if (HFSC_ENABLED((ifq))) \ - (m) = hfsc_dequeue(((struct ifqueue *)(ifq)), 1); \ - else \ - IF_DEQUEUE((ifq), (m)); \ -} while (/* CONSTCOND */0) - -#define IFQ_POLL(ifq, m) \ -do { \ - if (HFSC_ENABLED((ifq))) \ - (m) = hfsc_dequeue(((struct ifqueue *)(ifq)), 0); \ - else \ - IF_POLL((ifq), (m)); \ -} while (/* CONSTCOND */0) - -#define IFQ_PURGE(ifq) \ -do { \ - if (HFSC_ENABLED((ifq))) \ - hfsc_purge(((struct ifqueue *)(ifq))); \ - else \ - IF_PURGE((ifq)); \ -} while (/* CONSTCOND */0) - -#define IFQ_SET_READY(ifq) /* nothing */ - -#endif /* ALTQ */ - -#define IFQ_LEN(ifq) IF_LEN(ifq) -#define IFQ_IS_EMPTY(ifq) ((ifq)->ifq_len == 0) -#define IFQ_INC_LEN(ifq) ((ifq)->ifq_len++) -#define IFQ_DEC_LEN(ifq) (--(ifq)->ifq_len) -#define IFQ_INC_DROPS(ifq) ((ifq)->ifq_drops++) -#define IFQ_SET_MAXLEN(ifq, len) ((ifq)->ifq_maxlen = (len)) - -/* default interface priorities */ -#define IF_WIRED_DEFAULT_PRIORITY 0 -#define IF_WIRELESS_DEFAULT_PRIORITY 4 - -extern struct ifnet_head ifnet; -extern struct ifnet *lo0ifp; - -#define ether_input_mbuf(ifp, m) ether_input((ifp), NULL, (m)) - -void ether_ifattach(struct ifnet *); -void ether_ifdetach(struct ifnet *); -int ether_ioctl(struct ifnet *, struct arpcom *, u_long, caddr_t); -void ether_input(struct ifnet *, struct ether_header *, struct mbuf *); -int ether_output(struct ifnet *, - struct mbuf *, struct sockaddr *, struct rtentry *); -char *ether_sprintf(u_char *); - -void if_alloc_sadl(struct ifnet *); -void if_free_sadl(struct ifnet *); -void if_attach(struct ifnet *); -void if_attachdomain(void); -void if_attachtail(struct ifnet *); -void if_attachhead(struct ifnet *); -void if_detach(struct ifnet *); -void if_down(struct ifnet *); -void if_downall(void); -void if_link_state_change(struct ifnet *); -void if_slowtimo(void *); -void if_up(struct ifnet *); -int ifconf(u_long, caddr_t); -void ifinit(void); -int ifioctl(struct socket *, u_long, caddr_t, struct proc *); -int ifpromisc(struct ifnet *, int); -struct ifg_group *if_creategroup(const char *); -int if_addgroup(struct ifnet *, const char *); -int if_delgroup(struct ifnet *, const char *); -void if_group_routechange(struct sockaddr *, struct sockaddr *); -struct ifnet *ifunit(const char *); -struct ifnet *if_get(unsigned int); -void if_start(struct ifnet *); -void ifnewlladdr(struct ifnet *); - -struct ifaddr *ifa_ifwithaddr(struct sockaddr *, u_int); -struct ifaddr *ifa_ifwithdstaddr(struct sockaddr *, u_int); -struct ifaddr *ifa_ifwithnet(struct sockaddr *, u_int); -struct ifaddr *ifa_ifwithroute(int, struct sockaddr *, - struct sockaddr *, u_int); -struct ifaddr *ifaof_ifpforaddr(struct sockaddr *, struct ifnet *); -void ifafree(struct ifaddr *); -void link_rtrequest(int, struct rtentry *); - -void if_clone_attach(struct if_clone *); -void if_clone_detach(struct if_clone *); - -int if_clone_create(const char *); -int if_clone_destroy(const char *); - -void if_congestion(struct ifqueue *); -int sysctl_ifq(int *, u_int, void *, size_t *, void *, size_t, - struct ifqueue *); - -int loioctl(struct ifnet *, u_long, caddr_t); -void loopattach(int); -int looutput(struct ifnet *, - struct mbuf *, struct sockaddr *, struct rtentry *); -void lortrequest(int, struct rtentry *); -void ifa_add(struct ifnet *, struct ifaddr *); -void ifa_del(struct ifnet *, struct ifaddr *); -void ifa_update_broadaddr(struct ifnet *, struct ifaddr *, - struct sockaddr *); -#endif /* _KERNEL */ +#include <net/if_var.h> +#endif #endif /* __BSD_VISIBLE */ diff --git a/sys/net/if_var.h b/sys/net/if_var.h new file mode 100644 index 00000000000..5d7f8c406b3 --- /dev/null +++ b/sys/net/if_var.h @@ -0,0 +1,531 @@ +/* $OpenBSD: if_var.h,v 1.1 2013/11/21 17:32:12 mikeb Exp $ */ +/* $NetBSD: if.h,v 1.23 1996/05/07 02:40:27 thorpej Exp $ */ + +/* + * Copyright (c) 2012-2013 Henning Brauer <henning@openbsd.org> + * Copyright (c) 1982, 1986, 1989, 1993 + * The Regents of the University of California. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * @(#)if.h 8.1 (Berkeley) 6/10/93 + */ + +#ifndef _NET_IF_VAR_H_ +#define _NET_IF_VAR_H_ + +#include <sys/queue.h> +#include <sys/tree.h> +#include <altq/if_altq.h> +#ifdef _KERNEL +#include <net/hfsc.h> +#endif + +/* + * Structures defining a network interface, providing a packet + * transport mechanism (ala level 0 of the PUP protocols). + * + * Each interface accepts output datagrams of a specified maximum + * length, and provides higher level routines with input datagrams + * received from its medium. + * + * Output occurs when the routine if_output is called, with four parameters: + * (*ifp->if_output)(ifp, m, dst, rt) + * Here m is the mbuf chain to be sent and dst is the destination address. + * The output routine encapsulates the supplied datagram if necessary, + * and then transmits it on its medium. + * + * On input, each interface unwraps the data received by it, and either + * places it on the input queue of an internetwork datagram routine + * and posts the associated software interrupt, or passes the datagram to a raw + * packet input routine. + * + * Routines exist for locating interfaces by their addresses + * or for locating an interface on a certain network, as well as more general + * routing and gateway routines maintaining information used to locate + * interfaces. These routines live in the files if.c and route.c + */ + +#include <sys/time.h> + +struct mbuf; +struct proc; +struct rtentry; +struct socket; +struct ether_header; +struct arpcom; +struct rt_addrinfo; +struct ifnet; +struct hfsc_if; + +/* + * Structure describing a `cloning' interface. + */ +struct if_clone { + LIST_ENTRY(if_clone) ifc_list; /* on list of cloners */ + const char *ifc_name; /* name of device, e.g. `gif' */ + size_t ifc_namelen; /* length of name */ + + int (*ifc_create)(struct if_clone *, int); + int (*ifc_destroy)(struct ifnet *); +}; + +#define IF_CLONE_INITIALIZER(name, create, destroy) \ + { { 0 }, name, sizeof(name) - 1, create, destroy } + +/* + * Structure defining a queue for a network interface. + * XXX keep in sync with struct ifaltq. + */ +struct ifqueue { + struct { + struct mbuf *head; + struct mbuf *tail; + } ifq_q[IFQ_NQUEUES]; + int ifq_len; + int ifq_maxlen; + int ifq_drops; + struct hfsc_if *ifq_hfsc; + struct timeout *ifq_congestion; +}; + +/* + * Structure defining a queue for a network interface. + * + * (Would like to call this struct ``if'', but C isn't PL/1.) + */ +TAILQ_HEAD(ifnet_head, ifnet); /* the actual queue head */ + +struct ifnet { /* and the entries */ + void *if_softc; /* lower-level data for this if */ + TAILQ_ENTRY(ifnet) if_list; /* all struct ifnets are chained */ + TAILQ_ENTRY(ifnet) if_txlist; /* list of ifnets ready to tx */ + TAILQ_HEAD(, ifaddr) if_addrlist; /* linked list of addresses per if */ + TAILQ_HEAD(, ifg_list) if_groups; /* linked list of groups per if */ + struct hook_desc_head *if_addrhooks; /* address change callbacks */ + struct hook_desc_head *if_linkstatehooks; /* link change callbacks */ + struct hook_desc_head *if_detachhooks; /* detach callbacks */ + char if_xname[IFNAMSIZ]; /* external name (name + unit) */ + int if_pcount; /* number of promiscuous listeners */ + caddr_t if_bpf; /* packet filter structure */ + caddr_t if_bridgeport; /* used by bridge ports */ + caddr_t if_tp; /* used by trunk ports */ + caddr_t if_pf_kif; /* pf interface abstraction */ + union { + caddr_t carp_s; /* carp structure (used by !carp ifs) */ + struct ifnet *carp_d; /* ptr to carpdev (used by carp ifs) */ + } if_carp_ptr; +#define if_carp if_carp_ptr.carp_s +#define if_carpdev if_carp_ptr.carp_d + u_short if_index; /* numeric abbreviation for this if */ + short if_timer; /* time 'til if_watchdog called */ + short if_flags; /* up/down, broadcast, etc. */ + int if_xflags; /* extra softnet flags */ + struct if_data if_data; /* stats and other data about if */ + u_int32_t if_hardmtu; /* maximum MTU device supports */ + u_int if_rdomain; /* routing instance */ + char if_description[IFDESCRSIZE]; /* interface description */ + u_short if_rtlabelid; /* next route label */ + u_int8_t if_priority; + + /* procedure handles */ + /* output routine (enqueue) */ + int (*if_output)(struct ifnet *, struct mbuf *, struct sockaddr *, + struct rtentry *); + + /* link level output function */ + int (*if_ll_output)(struct ifnet *, struct mbuf *, + struct sockaddr *, struct rtentry *); + /* initiate output routine */ + void (*if_start)(struct ifnet *); + /* ioctl routine */ + int (*if_ioctl)(struct ifnet *, u_long, caddr_t); + /* stop routine */ + int (*if_stop)(struct ifnet *, int); + /* timer routine */ + void (*if_watchdog)(struct ifnet *); + int (*if_wol)(struct ifnet *, int); + struct ifaddr *if_lladdr; /* pointer to link-level address */ + struct ifaltq if_snd; /* output queue (includes altq) */ + struct sockaddr_dl *if_sadl; /* pointer to our sockaddr_dl */ + + void *if_afdata[AF_MAX]; +}; +#define if_mtu if_data.ifi_mtu +#define if_type if_data.ifi_type +#define if_addrlen if_data.ifi_addrlen +#define if_hdrlen if_data.ifi_hdrlen +#define if_metric if_data.ifi_metric +#define if_link_state if_data.ifi_link_state +#define if_baudrate if_data.ifi_baudrate +#define if_ipackets if_data.ifi_ipackets +#define if_ierrors if_data.ifi_ierrors +#define if_opackets if_data.ifi_opackets +#define if_oerrors if_data.ifi_oerrors +#define if_collisions if_data.ifi_collisions +#define if_ibytes if_data.ifi_ibytes +#define if_obytes if_data.ifi_obytes +#define if_imcasts if_data.ifi_imcasts +#define if_omcasts if_data.ifi_omcasts +#define if_iqdrops if_data.ifi_iqdrops +#define if_noproto if_data.ifi_noproto +#define if_lastchange if_data.ifi_lastchange +#define if_capabilities if_data.ifi_capabilities + +#ifdef _KERNEL +/* + * Output queues (ifp->if_snd) and internetwork datagram level (pup level 1) + * input routines have queues of messages stored on ifqueue structures + * (defined above). Entries are added to and deleted from these structures + * by these macros, which should be called with ipl raised to splnet(). + */ +#define IF_QFULL(ifq) ((ifq)->ifq_len >= (ifq)->ifq_maxlen) +#define IF_DROP(ifq) ((ifq)->ifq_drops++) +#define IF_ENQUEUE(ifq, m) \ +do { \ + (m)->m_nextpkt = NULL; \ + if ((ifq)->ifq_q[(m)->m_pkthdr.pf.prio].tail == NULL) \ + (ifq)->ifq_q[(m)->m_pkthdr.pf.prio].head = m; \ + else \ + (ifq)->ifq_q[(m)->m_pkthdr.pf.prio].tail->m_nextpkt = m; \ + (ifq)->ifq_q[(m)->m_pkthdr.pf.prio].tail = m; \ + (ifq)->ifq_len++; \ +} while (/* CONSTCOND */0) +#define IF_PREPEND(ifq, m) \ +do { \ + (m)->m_nextpkt = (ifq)->ifq_q[(m)->m_pkthdr.pf.prio].head; \ + if ((ifq)->ifq_q[(m)->m_pkthdr.pf.prio].tail == NULL) \ + (ifq)->ifq_q[(m)->m_pkthdr.pf.prio].tail = (m); \ + (ifq)->ifq_q[(m)->m_pkthdr.pf.prio].head = (m); \ + (ifq)->ifq_len++; \ +} while (/* CONSTCOND */0) + +#define IF_POLL(ifq, m) \ +do { \ + int if_dequeue_prio = IFQ_MAXPRIO; \ + do { \ + (m) = (ifq)->ifq_q[if_dequeue_prio].head; \ + } while (!(m) && --if_dequeue_prio >= 0); \ +} while (/* CONSTCOND */0) + +#define IF_DEQUEUE(ifq, m) \ +do { \ + int if_dequeue_prio = IFQ_MAXPRIO; \ + do { \ + (m) = (ifq)->ifq_q[if_dequeue_prio].head; \ + if (m) { \ + if (((ifq)->ifq_q[if_dequeue_prio].head = \ + (m)->m_nextpkt) == NULL) \ + (ifq)->ifq_q[if_dequeue_prio].tail = NULL; \ + (m)->m_nextpkt = NULL; \ + (ifq)->ifq_len--; \ + } \ + } while (!(m) && --if_dequeue_prio >= 0); \ +} while (/* CONSTCOND */0) + +#define IF_INPUT_ENQUEUE(ifq, m) \ +do { \ + if (IF_QFULL(ifq)) { \ + IF_DROP(ifq); \ + m_freem(m); \ + if (!(ifq)->ifq_congestion) \ + if_congestion(ifq); \ + } else \ + IF_ENQUEUE(ifq, m); \ +} while (/* CONSTCOND */0) + +#define IF_PURGE(ifq) \ +do { \ + struct mbuf *__m0; \ + \ + for (;;) { \ + IF_DEQUEUE((ifq), __m0); \ + if (__m0 == NULL) \ + break; \ + else \ + m_freem(__m0); \ + } \ +} while (/* CONSTCOND */0) +#define IF_LEN(ifq) ((ifq)->ifq_len) +#define IF_IS_EMPTY(ifq) ((ifq)->ifq_len == 0) + +#define IFQ_MAXLEN 256 +#define IFNET_SLOWHZ 1 /* granularity is 1 second */ +#endif + +/* + * The ifaddr structure contains information about one address + * of an interface. They are maintained by the different address families, + * are allocated and attached when an address is set, and are linked + * together so all addresses for an interface can be located. + */ +struct ifaddr { + struct sockaddr *ifa_addr; /* address of interface */ + struct sockaddr *ifa_dstaddr; /* other end of p-to-p link */ +#define ifa_broadaddr ifa_dstaddr /* broadcast address interface */ + struct sockaddr *ifa_netmask; /* used to determine subnet */ + struct ifnet *ifa_ifp; /* back-pointer to interface */ + TAILQ_ENTRY(ifaddr) ifa_list; /* list of addresses for interface */ + /* check or clean routes (+ or -)'d */ + void (*ifa_rtrequest)(int, struct rtentry *); + u_int ifa_flags; /* mostly rt_flags for cloning */ + u_int ifa_refcnt; /* count of references */ + int ifa_metric; /* cost of going out this interface */ +}; +#define IFA_ROUTE RTF_UP /* route installed */ + +struct ifaddr_item { + RB_ENTRY(ifaddr_item) ifai_entry; + struct sockaddr *ifai_addr; + struct ifaddr *ifai_ifa; + struct ifaddr_item *ifai_next; + u_int ifai_rdomain; +}; + +/* + * interface groups + */ + +struct ifg_group { + char ifg_group[IFNAMSIZ]; + u_int ifg_refcnt; + caddr_t ifg_pf_kif; + int ifg_carp_demoted; + TAILQ_HEAD(, ifg_member) ifg_members; + TAILQ_ENTRY(ifg_group) ifg_next; +}; + +struct ifg_member { + TAILQ_ENTRY(ifg_member) ifgm_next; + struct ifnet *ifgm_ifp; +}; + +struct ifg_list { + struct ifg_group *ifgl_group; + TAILQ_ENTRY(ifg_list) ifgl_next; +}; + +#ifdef _KERNEL +#define IFAFREE(ifa) \ +do { \ + if ((ifa)->ifa_refcnt <= 0) \ + ifafree(ifa); \ + else \ + (ifa)->ifa_refcnt--; \ +} while (/* CONSTCOND */0) + +/* XXX the IFQ_ macros are a giant mess right now. cleanup once altq gone. */ + +#ifdef ALTQ + +/* XXX pattr unused */ +/* if_snd becomes ifqueue when altq is gone and the casts go away */ +#define IFQ_ENQUEUE(ifq, m, pattr, err) \ +do { \ + if (HFSC_ENABLED((ifq))) \ + (err) = hfsc_enqueue(((struct ifqueue *)(ifq)), (m)); \ + else if (ALTQ_IS_ENABLED((ifq))) { \ + m->m_pkthdr.pf.prio = IFQ_MAXPRIO; \ + ALTQ_ENQUEUE((ifq), (m), (pattr), (err)); \ + } else { \ + if (IF_QFULL((ifq))) { \ + m_freem((m)); \ + (err) = ENOBUFS; \ + } else { \ + IF_ENQUEUE((ifq), (m)); \ + (err) = 0; \ + } \ + } \ + if ((err)) \ + (ifq)->ifq_drops++; \ +} while (/* CONSTCOND */0) + +#define IFQ_DEQUEUE(ifq, m) \ +do { \ + if (HFSC_ENABLED((ifq))) \ + (m) = hfsc_dequeue(((struct ifqueue *)(ifq)), 1); \ + else if (OLDTBR_IS_ENABLED((ifq))) \ + (m) = oldtbr_dequeue((ifq), ALTDQ_REMOVE); \ + else if (ALTQ_IS_ENABLED((ifq))) \ + ALTQ_DEQUEUE((ifq), (m)); \ + else \ + IF_DEQUEUE((ifq), (m)); \ +} while (/* CONSTCOND */0) + +#define IFQ_POLL(ifq, m) \ +do { \ + if (HFSC_ENABLED((ifq))) \ + (m) = hfsc_dequeue(((struct ifqueue *)(ifq)), 0); \ + else if (OLDTBR_IS_ENABLED((ifq))) \ + (m) = oldtbr_dequeue((ifq), ALTDQ_POLL); \ + else if (ALTQ_IS_ENABLED((ifq))) \ + ALTQ_POLL((ifq), (m)); \ + else \ + IF_POLL((ifq), (m)); \ +} while (/* CONSTCOND */0) + +#define IFQ_PURGE(ifq) \ +do { \ + if (HFSC_ENABLED((ifq))) \ + hfsc_purge(((struct ifqueue *)(ifq))); \ + else if (ALTQ_IS_ENABLED((ifq))) \ + ALTQ_PURGE(ifq); \ + else \ + IF_PURGE((ifq)); \ +} while (/* CONSTCOND */0) + +#define IFQ_SET_READY(ifq) \ +do { \ + ((ifq)->altq_flags |= ALTQF_READY); \ +} while (/* CONSTCOND */0) + +#else /* !ALTQ */ + +/* XXX pattr unused */ +#define IFQ_ENQUEUE(ifq, m, pattr, err) \ +do { \ + if (HFSC_ENABLED(ifq)) \ + (err) = hfsc_enqueue(((struct ifqueue *)(ifq)), m); \ + else { \ + if (IF_QFULL((ifq))) { \ + m_freem((m)); \ + (err) = ENOBUFS; \ + } else { \ + IF_ENQUEUE((ifq), (m)); \ + (err) = 0; \ + } \ + } \ + if ((err)) \ + (ifq)->ifq_drops++; \ +} while (/* CONSTCOND */0) + +#define IFQ_DEQUEUE(ifq, m) \ +do { \ + if (HFSC_ENABLED((ifq))) \ + (m) = hfsc_dequeue(((struct ifqueue *)(ifq)), 1); \ + else \ + IF_DEQUEUE((ifq), (m)); \ +} while (/* CONSTCOND */0) + +#define IFQ_POLL(ifq, m) \ +do { \ + if (HFSC_ENABLED((ifq))) \ + (m) = hfsc_dequeue(((struct ifqueue *)(ifq)), 0); \ + else \ + IF_POLL((ifq), (m)); \ +} while (/* CONSTCOND */0) + +#define IFQ_PURGE(ifq) \ +do { \ + if (HFSC_ENABLED((ifq))) \ + hfsc_purge(((struct ifqueue *)(ifq))); \ + else \ + IF_PURGE((ifq)); \ +} while (/* CONSTCOND */0) + +#define IFQ_SET_READY(ifq) /* nothing */ + +#endif /* ALTQ */ + +#define IFQ_LEN(ifq) IF_LEN(ifq) +#define IFQ_IS_EMPTY(ifq) ((ifq)->ifq_len == 0) +#define IFQ_INC_LEN(ifq) ((ifq)->ifq_len++) +#define IFQ_DEC_LEN(ifq) (--(ifq)->ifq_len) +#define IFQ_INC_DROPS(ifq) ((ifq)->ifq_drops++) +#define IFQ_SET_MAXLEN(ifq, len) ((ifq)->ifq_maxlen = (len)) + +/* default interface priorities */ +#define IF_WIRED_DEFAULT_PRIORITY 0 +#define IF_WIRELESS_DEFAULT_PRIORITY 4 + +extern struct ifnet_head ifnet; +extern struct ifnet *lo0ifp; + +#define ether_input_mbuf(ifp, m) ether_input((ifp), NULL, (m)) + +void ether_ifattach(struct ifnet *); +void ether_ifdetach(struct ifnet *); +int ether_ioctl(struct ifnet *, struct arpcom *, u_long, caddr_t); +void ether_input(struct ifnet *, struct ether_header *, struct mbuf *); +int ether_output(struct ifnet *, + struct mbuf *, struct sockaddr *, struct rtentry *); +char *ether_sprintf(u_char *); + +void if_alloc_sadl(struct ifnet *); +void if_free_sadl(struct ifnet *); +void if_attach(struct ifnet *); +void if_attachdomain(void); +void if_attachtail(struct ifnet *); +void if_attachhead(struct ifnet *); +void if_detach(struct ifnet *); +void if_down(struct ifnet *); +void if_downall(void); +void if_link_state_change(struct ifnet *); +void if_slowtimo(void *); +void if_up(struct ifnet *); +int ifconf(u_long, caddr_t); +void ifinit(void); +int ifioctl(struct socket *, u_long, caddr_t, struct proc *); +int ifpromisc(struct ifnet *, int); +struct ifg_group *if_creategroup(const char *); +int if_addgroup(struct ifnet *, const char *); +int if_delgroup(struct ifnet *, const char *); +void if_group_routechange(struct sockaddr *, struct sockaddr *); +struct ifnet *ifunit(const char *); +struct ifnet *if_get(unsigned int); +void if_start(struct ifnet *); +void ifnewlladdr(struct ifnet *); + +struct ifaddr *ifa_ifwithaddr(struct sockaddr *, u_int); +struct ifaddr *ifa_ifwithdstaddr(struct sockaddr *, u_int); +struct ifaddr *ifa_ifwithnet(struct sockaddr *, u_int); +struct ifaddr *ifa_ifwithroute(int, struct sockaddr *, + struct sockaddr *, u_int); +struct ifaddr *ifaof_ifpforaddr(struct sockaddr *, struct ifnet *); +void ifafree(struct ifaddr *); +void link_rtrequest(int, struct rtentry *); + +void if_clone_attach(struct if_clone *); +void if_clone_detach(struct if_clone *); + +int if_clone_create(const char *); +int if_clone_destroy(const char *); + +void if_congestion(struct ifqueue *); +int sysctl_ifq(int *, u_int, void *, size_t *, void *, size_t, + struct ifqueue *); + +int loioctl(struct ifnet *, u_long, caddr_t); +void loopattach(int); +int looutput(struct ifnet *, + struct mbuf *, struct sockaddr *, struct rtentry *); +void lortrequest(int, struct rtentry *); +void ifa_add(struct ifnet *, struct ifaddr *); +void ifa_del(struct ifnet *, struct ifaddr *); +void ifa_update_broadaddr(struct ifnet *, struct ifaddr *, + struct sockaddr *); +#endif /* _KERNEL */ + +#endif /* _NET_IF_VAR_H_ */ diff --git a/usr.bin/netstat/if.c b/usr.bin/netstat/if.c index 1cc7e070536..13acb68b99b 100644 --- a/usr.bin/netstat/if.c +++ b/usr.bin/netstat/if.c @@ -1,4 +1,4 @@ -/* $OpenBSD: if.c,v 1.66 2012/08/26 19:42:53 tedu Exp $ */ +/* $OpenBSD: if.c,v 1.67 2013/11/21 17:32:13 mikeb Exp $ */ /* $NetBSD: if.c,v 1.16.4.2 1996/06/07 21:46:46 thorpej Exp $ */ /* @@ -38,6 +38,7 @@ #include <sys/sysctl.h> #include <net/if.h> +#include <net/if_var.h> #include <net/if_dl.h> #include <net/if_types.h> #include <net/route.h> diff --git a/usr.bin/netstat/mroute6.c b/usr.bin/netstat/mroute6.c index d92c15fcddb..93249e3683e 100644 --- a/usr.bin/netstat/mroute6.c +++ b/usr.bin/netstat/mroute6.c @@ -1,4 +1,4 @@ -/* $OpenBSD: mroute6.c,v 1.11 2009/02/07 15:06:04 chl Exp $ */ +/* $OpenBSD: mroute6.c,v 1.12 2013/11/21 17:32:13 mikeb Exp $ */ /* * Copyright (C) 1998 WIDE Project. @@ -72,6 +72,7 @@ #include <sys/sysctl.h> #include <net/if.h> +#include <net/if_var.h> #include <netinet/in.h> diff --git a/usr.bin/netstat/net80211.c b/usr.bin/netstat/net80211.c index 8f34d06bc81..b4ed7cc0019 100644 --- a/usr.bin/netstat/net80211.c +++ b/usr.bin/netstat/net80211.c @@ -1,4 +1,4 @@ -/* $OpenBSD: net80211.c,v 1.9 2012/12/05 23:20:25 deraadt Exp $ */ +/* $OpenBSD: net80211.c,v 1.10 2013/11/21 17:32:13 mikeb Exp $ */ /* * Copyright (c) 2005 Reyk Floeter <reyk@openbsd.org> @@ -23,6 +23,7 @@ #include <sys/ioctl.h> #include <net/if.h> +#include <net/if_var.h> #include <netinet/in.h> #include <netinet/in_systm.h> diff --git a/usr.bin/netstat/route.c b/usr.bin/netstat/route.c index fc5281d05b8..eefb9b301bb 100644 --- a/usr.bin/netstat/route.c +++ b/usr.bin/netstat/route.c @@ -1,4 +1,4 @@ -/* $OpenBSD: route.c,v 1.91 2013/09/29 10:45:40 bluhm Exp $ */ +/* $OpenBSD: route.c,v 1.92 2013/11/21 17:32:13 mikeb Exp $ */ /* $NetBSD: route.c,v 1.15 1996/05/07 02:55:06 thorpej Exp $ */ /* @@ -35,6 +35,7 @@ #include <sys/socket.h> #include <net/if.h> +#include <net/if_var.h> #include <net/if_dl.h> #include <net/if_types.h> #define _KERNEL diff --git a/usr.bin/netstat/show.c b/usr.bin/netstat/show.c index 67295e3c6ba..963e140a7f0 100644 --- a/usr.bin/netstat/show.c +++ b/usr.bin/netstat/show.c @@ -1,4 +1,4 @@ -/* $OpenBSD: show.c,v 1.39 2013/11/13 21:19:30 deraadt Exp $ */ +/* $OpenBSD: show.c,v 1.40 2013/11/21 17:32:13 mikeb Exp $ */ /* $NetBSD: show.c,v 1.1 1996/11/15 18:01:41 gwr Exp $ */ /* @@ -36,6 +36,7 @@ #include <sys/sysctl.h> #include <net/if.h> +#include <net/if_var.h> #include <net/if_dl.h> #include <net/if_types.h> #include <net/pfkeyv2.h> diff --git a/usr.sbin/snmpd/snmpd.h b/usr.sbin/snmpd/snmpd.h index 6a84df3bd06..067bf02fde4 100644 --- a/usr.sbin/snmpd/snmpd.h +++ b/usr.sbin/snmpd/snmpd.h @@ -1,4 +1,4 @@ -/* $OpenBSD: snmpd.h,v 1.47 2013/10/17 08:42:44 reyk Exp $ */ +/* $OpenBSD: snmpd.h,v 1.48 2013/11/21 17:32:13 mikeb Exp $ */ /* * Copyright (c) 2007, 2008, 2012 Reyk Floeter <reyk@openbsd.org> @@ -217,6 +217,26 @@ struct kif { int if_flags; u_short if_index; }; +#define if_mtu if_data.ifi_mtu +#define if_type if_data.ifi_type +#define if_addrlen if_data.ifi_addrlen +#define if_hdrlen if_data.ifi_hdrlen +#define if_metric if_data.ifi_metric +#define if_link_state if_data.ifi_link_state +#define if_baudrate if_data.ifi_baudrate +#define if_ipackets if_data.ifi_ipackets +#define if_ierrors if_data.ifi_ierrors +#define if_opackets if_data.ifi_opackets +#define if_oerrors if_data.ifi_oerrors +#define if_collisions if_data.ifi_collisions +#define if_ibytes if_data.ifi_ibytes +#define if_obytes if_data.ifi_obytes +#define if_imcasts if_data.ifi_imcasts +#define if_omcasts if_data.ifi_omcasts +#define if_iqdrops if_data.ifi_iqdrops +#define if_noproto if_data.ifi_noproto +#define if_lastchange if_data.ifi_lastchange +#define if_capabilities if_data.ifi_capabilities #define F_CONNECTED 0x0001 #define F_STATIC 0x0002 |