📄 if_var.h
字号:
/* if_var.h - network interface variable header file */ /* * Copyright (c) 2001-2005 Wind River Systems, Inc. * * The right to copy, distribute, modify or otherwise make use * of this software may be licensed only pursuant to the terms * of an applicable Wind River license agreement. */ /* * 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. All advertising materials mentioning features or use of this software * must display the following acknowledgement: * This product includes software developed by the University of * California, Berkeley and its contributors. * 4. 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. * * From: @(#)if.h 8.1 (Berkeley) 6/10/93 * $FreeBSD: src/sys/net/if_var.h,v 1.62 2003/11/12 03:14:29 rwatson Exp $ * $FreeBSD: src/sys/net/if_var.h,v 1.18.2.15 2002/06/28 12:36:54 luigi Exp $ *//*modification history--------------------02h,21sep05,kch Added if_xname[] to ifnet structure, introduced if_name() macro to replace if_name() routine for backward compatibility. Also added if_initname() prototype (merged from FreeBSD 5.x if_var.h,v 1.84.2.6) (SPR #112724).02g,29aug05,kch Added if_nvlans counter to ifnet structure (SPR #112068).02f,26aug05,dlk Add section tags.02e,26aug05,kch Removed pTagData pointer from ifnet structure.02d,12aug05,kch Moved ifclone prototypes to if_clone.h.02c,04aug05,vvv clarified comments for if_index and ifIndex (SPR #106657)02b,16jul05,dlk Added intrqFlush() declaration for VIRTUAL_STACK case.02a,25jun05,dlk Added INTRQ_QJOB definition.01z,24jun05,wap Add link state support01y,09may05,vvv added include for if.h01x,19apr05,rp merged from comp_wn_ipv6_mld_interim-dev01w,07feb05,vvv _KERNEL cleanup01v,10sep04,kc Added VLAN_TAG define to protect pTagData in ifnet structure.01u,12jul04,vvv fixed compiler warning01t,28may04,niq Merging from base6 label POST_ITER5_FRZ16_REBASE (ver /main/vdt/base6_itn5_networking-int/1)01s,14may04,kc Added pTagData to struct ifnet for L2 VLAN Tagging support.01r,25feb04,nee Adding if6_resolve to ifnet01q,24feb04,dlk Add closing brace if __cplusplus is defined.01p,03feb04,wap Add extra structure fields for checksum offload support01o,02feb04,dlk Restore interface output queues (repair IF_ENQUEUE()).01n,20nov03,niq osdep.h cleanup01m,04nov03,rlm Ran batch header path update for header re-org.01l,03nov03,rlm Removed wrn/coreip/ prefix from #includes for header re-org.01k,23oct03,rlm updated #includes for header re-org01j,24sep03,kkz Rebasing with BASE6_ITER2_FRZ7 - added IF_DEQUEUEIF macro01i,08aug03,nee Merging from label ACCORDION_BASE6_MERGE_BASELINE in accordion codeline to Base601h,01feb03,pas merge from FreeBSD 4.7 - added clone support, polling; changed if_queue_drop() to if_handoff()01g,18sep02,nee removed ifr_type from ifreq structure01f,09sep02,hsh add c++ protection01e,24aug02,nee extended ifnet for admin control;defined admin states for boot/up/down01d,13feb02,ham changed for tornado build.01c,06oct01,ann removing the prototypes for ether_output and ether_output_frame01b,11sep01,ann adding the if_resolve func pointer that is missing01a,16jul01,ham created from FreeBSD4.3.*/#ifndef _NET_IF_VAR_H_#define _NET_IF_VAR_H_/* * 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 three 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 */#ifdef __cplusplus extern "C" {#endif #ifdef __STDC__/* * Forward structure declarations for function prototypes [sic]. */struct mbuf;struct proc;struct rtentry;struct socket;struct ether_header;#endif /* __STDC_ */#include <sys/queue.h> /* get TAILQ macros */#include <net/mbuf.h>#include <net/systm.h> /* XXX */#ifdef VIRTUAL_STACK#include <netinet/vsLib.h>#endif /* VIRTUAL_STACK */#include <net/unixLib.h>#include <net/if.h> /* needed for struct if_data */#include <jobQueueLib.h>TAILQ_HEAD(ifnethead, ifnet); /* we use TAILQs so that the order of */TAILQ_HEAD(ifaddrhead, ifaddr); /* instantiation is preserved in the list */TAILQ_HEAD(ifprefixhead, ifprefix);LIST_HEAD(ifmultihead, ifmultiaddr);/* * Structure defining a queue for a network interface. */struct ifqueue { struct mbuf *ifq_head; struct mbuf *ifq_tail; int ifq_len; int ifq_maxlen; int ifq_drops;};/* Job for dequeueing packets on protocol input queues (loopback only) */typedef struct _INTRQ_QJOB{ QJOB job; struct ifqueue * ifq; void (* input) (struct mbuf *);#ifdef VIRTUAL_STACK int vsnum;#endif} INTRQ_QJOB;/* * Structure defining a network interface. * * (Would like to call this struct ``if'', but C isn't PL/1.) *//* * NB: For FreeBSD, it is assumed that each NIC driver's softc starts with * one of these structures, typically held within an arpcom structure. * * struct <foo>_softc { * struct arpcom { * struct ifnet ac_if; * ... * } <arpcom> ; * ... * }; * * The assumption is used in a number of places, including many * files in sys/net, device drivers, and sys/dev/mii.c:miibus_attach(). * * Unfortunately devices' softc are opaque, so we depend on this layout * to locate the struct ifnet from the softc in the generic code. * * Note that not all fields are used by drivers in the FreeBSD source * tree. However, who knows what third party software does with fields * marked as "unused", such as if_ipending, if_done, and if_poll*, * so any attemt to redefine their meaning might end up in binary * compatibility problems, even if the size of struct ifnet, and * the size and position of its fields do not change. * We just have to live with that. */struct ifnet { void *if_softc; /* pointer to driver state */ char if_xname[IFNAMSIZ]; /* external name (name + unit) */ char *if_name; /* name, e.g. ``en'' or ``lo'' */ TAILQ_ENTRY(ifnet) if_link; /* all struct ifnets are chained */ struct ifaddrhead if_addrhead; /* linked list of addresses per if */ int if_pcount; /* number of promiscuous listeners */ struct bpf_if *if_bpf; /* packet filter structure */ UINT32 ifIndex; /* External index for this if. It */ /* is the index used by the MIBs. */ /* It was added specifically for */ /* MIB compliance (monotonically */ /* increasing index by default). */ u_short if_index; /* Internal index for this if. It */ /* is the index used by the stack. */ /* An index can be re-used. */ short if_unit; /* sub-unit for lower level driver */ short if_timer; /* time 'til if_watchdog called */ u_short if_nvlans; /* number of active vlans */ long if_flags; /* up/down, broadcast, etc. */ int if_ipending; /* interrupts pending */ void *if_linkmib; /* link-type-specific MIB data */ size_t if_linkmiblen; /* length of above data */ struct if_data if_data; struct ifmultihead if_multiaddrs; /* multicast addresses configured */ int if_amcount; /* number of all-multicast requests *//* procedure handles */ int (*if_output) /* output routine (enqueue) */ (struct ifnet *, struct mbuf *, struct sockaddr *, struct rtentry *); void (*if_start) /* initiate output routine */ (struct ifnet *); union { int (*if_done) /* output complete routine */ (struct ifnet *); /* (XXX not used) */ int uif_capabilities; /* interface capabilities */ } _u1; int (*if_ioctl) /* ioctl routine */ (struct ifnet *, u_long, caddr_t); void (*if_watchdog) /* timer routine */ (struct ifnet *); union { int (*if_poll_recv) /* polled receive routine */ (struct ifnet *, int *); int uif_capenable; /* enabled features */ } _u2; int (*if_poll_xmit) /* polled transmit routine */ (struct ifnet *, int *); void (*if_poll_intren) /* polled interrupt reenable routine */ (struct ifnet *); void (*if_poll_slowinput) /* input routine for slow devices */ (struct ifnet *, struct mbuf *); void (*if_init) /* Init routine */ (void *);/* Clarinet - added this func pointer as it is used in the WRS code */ int (*if_resolve)(); /* arp resolve at driver level */ int (*if6_resolve)(); /* nd resolve at driver level */ int (*if_resolvemulti) /* validate/resolve multicast */ (struct ifnet *, struct sockaddr **, struct sockaddr *); struct ifqueue if_snd; /* output queue */ struct ifqueue *if_poll_slowq; /* input queue for slow devices */ struct ifprefixhead if_prefixhead; /* list of prefixes per if *//* Clarinet - added this cookie that holds the drv_ctrl pointer */ void * pCookie; /* data for IP over MUX attachment */ int if_adminstatus; int admin_inet_status; int admin_inet6_status; /* RFC 2465, admin status control for IPv6 */ uint32_t if_csum_flags_tx; uint32_t if_csum_flags_rx;#ifdef VIRTUAL_STACK VSNUM vsNum;#endif /* VIRTUAL_STACK */ /* for IPV6, if_afdata[AF_INET6] points to in6_ifextra data structure */ void *if_afdata[AF_MAX]; /* int if_afdata_initialized; */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -