FreeBSD/Linux Kernel Cross Reference
sys/net/if_private.h
1 /*-
2 * SPDX-License-Identifier: BSD-3-Clause
3 *
4 * Copyright (c) 1982, 1986, 1989, 1993
5 * The Regents of the University of California. All rights reserved.
6 *
7 * Redistribution and use in source and binary forms, with or without
8 * modification, are permitted provided that the following conditions
9 * are met:
10 * 1. Redistributions of source code must retain the above copyright
11 * notice, this list of conditions and the following disclaimer.
12 * 2. Redistributions in binary form must reproduce the above copyright
13 * notice, this list of conditions and the following disclaimer in the
14 * documentation and/or other materials provided with the distribution.
15 * 3. Neither the name of the University nor the names of its contributors
16 * may be used to endorse or promote products derived from this software
17 * without specific prior written permission.
18 *
19 * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
20 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
21 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
22 * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
23 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
24 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
25 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
26 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
27 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
28 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
29 * SUCH DAMAGE.
30 *
31 * From: @(#)if.h 8.1 (Berkeley) 6/10/93
32 */
33
34 #ifndef _NET_IF_PRIVATE_H_
35 #define _NET_IF_PRIVATE_H_
36
37 #ifdef _KERNEL
38 /*
39 * Structure defining a network interface.
40 */
41 struct ifnet {
42 /* General book keeping of interface lists. */
43 CK_STAILQ_ENTRY(ifnet) if_link; /* all struct ifnets are chained (CK_) */
44 LIST_ENTRY(ifnet) if_clones; /* interfaces of a cloner */
45 CK_STAILQ_HEAD(, ifg_list) if_groups; /* linked list of groups per if (CK_) */
46 /* protected by if_addr_lock */
47 u_char if_alloctype; /* if_type at time of allocation */
48 uint8_t if_numa_domain; /* NUMA domain of device */
49 /* Driver and protocol specific information that remains stable. */
50 void *if_softc; /* pointer to driver state */
51 void *if_llsoftc; /* link layer softc */
52 void *if_l2com; /* pointer to protocol bits */
53 const char *if_dname; /* driver name */
54 int if_dunit; /* unit or IF_DUNIT_NONE */
55 u_short if_index; /* numeric abbreviation for this if */
56 u_short if_idxgen; /* ... and its generation count */
57 char if_xname[IFNAMSIZ]; /* external name (name + unit) */
58 char *if_description; /* interface description */
59
60 /* Variable fields that are touched by the stack and drivers. */
61 int if_flags; /* up/down, broadcast, etc. */
62 int if_drv_flags; /* driver-managed status flags */
63 int if_capabilities; /* interface features & capabilities */
64 int if_capabilities2; /* part 2 */
65 int if_capenable; /* enabled features & capabilities */
66 int if_capenable2; /* part 2 */
67 void *if_linkmib; /* link-type-specific MIB data */
68 size_t if_linkmiblen; /* length of above data */
69 u_int if_refcount; /* reference count */
70
71 /* These fields are shared with struct if_data. */
72 uint8_t if_type; /* ethernet, tokenring, etc */
73 uint8_t if_addrlen; /* media address length */
74 uint8_t if_hdrlen; /* media header length */
75 uint8_t if_link_state; /* current link state */
76 uint32_t if_mtu; /* maximum transmission unit */
77 uint32_t if_metric; /* routing metric (external only) */
78 uint64_t if_baudrate; /* linespeed */
79 uint64_t if_hwassist; /* HW offload capabilities, see IFCAP */
80 time_t if_epoch; /* uptime at attach or stat reset */
81 struct timeval if_lastchange; /* time of last administrative change */
82
83 struct ifaltq if_snd; /* output queue (includes altq) */
84 struct task if_linktask; /* task for link change events */
85 struct task if_addmultitask; /* task for SIOCADDMULTI */
86
87 /* Addresses of different protocol families assigned to this if. */
88 struct mtx if_addr_lock; /* lock to protect address lists */
89 /*
90 * if_addrhead is the list of all addresses associated to
91 * an interface.
92 * Some code in the kernel assumes that first element
93 * of the list has type AF_LINK, and contains sockaddr_dl
94 * addresses which store the link-level address and the name
95 * of the interface.
96 * However, access to the AF_LINK address through this
97 * field is deprecated. Use if_addr instead.
98 */
99 struct ifaddrhead if_addrhead; /* linked list of addresses per if */
100 struct ifmultihead if_multiaddrs; /* multicast addresses configured */
101 int if_amcount; /* number of all-multicast requests */
102 struct ifaddr *if_addr; /* pointer to link-level address */
103 void *if_hw_addr; /* hardware link-level address */
104 const u_int8_t *if_broadcastaddr; /* linklevel broadcast bytestring */
105 struct mtx if_afdata_lock;
106 void *if_afdata[AF_MAX];
107 int if_afdata_initialized;
108
109 /* Additional features hung off the interface. */
110 u_int if_fib; /* interface FIB */
111 struct vnet *if_vnet; /* pointer to network stack instance */
112 struct vnet *if_home_vnet; /* where this ifnet originates from */
113 struct ifvlantrunk *if_vlantrunk; /* pointer to 802.1q data */
114 struct bpf_if *if_bpf; /* packet filter structure */
115 int if_pcount; /* number of promiscuous listeners */
116 void *if_bridge; /* bridge glue */
117 void *if_lagg; /* lagg glue */
118 void *if_pf_kif; /* pf glue */
119 struct carp_if *if_carp; /* carp interface structure */
120 struct label *if_label; /* interface MAC label */
121 struct netmap_adapter *if_netmap; /* netmap(4) softc */
122
123 /* Various procedures of the layer2 encapsulation and drivers. */
124 if_output_fn_t if_output; /* output routine (enqueue) */
125 if_input_fn_t if_input; /* input routine (from h/w driver) */
126 struct mbuf *(*if_bridge_input)(struct ifnet *, struct mbuf *);
127 int (*if_bridge_output)(struct ifnet *, struct mbuf *, struct sockaddr *,
128 struct rtentry *);
129 void (*if_bridge_linkstate)(struct ifnet *ifp);
130 if_start_fn_t if_start; /* initiate output routine */
131 if_ioctl_fn_t if_ioctl; /* ioctl routine */
132 if_init_fn_t if_init; /* Init routine */
133 int (*if_resolvemulti) /* validate/resolve multicast */
134 (struct ifnet *, struct sockaddr **, struct sockaddr *);
135 if_qflush_fn_t if_qflush; /* flush any queue */
136 if_transmit_fn_t if_transmit; /* initiate output routine */
137
138 void (*if_reassign) /* reassign to vnet routine */
139 (struct ifnet *, struct vnet *, char *);
140 if_get_counter_t if_get_counter; /* get counter values */
141 int (*if_requestencap) /* make link header from request */
142 (struct ifnet *, struct if_encap_req *);
143
144 /* Statistics. */
145 counter_u64_t if_counters[IFCOUNTERS];
146
147 /* Stuff that's only temporary and doesn't belong here. */
148
149 /*
150 * Network adapter TSO limits:
151 * ===========================
152 *
153 * If the "if_hw_tsomax" field is zero the maximum segment
154 * length limit does not apply. If the "if_hw_tsomaxsegcount"
155 * or the "if_hw_tsomaxsegsize" field is zero the TSO segment
156 * count limit does not apply. If all three fields are zero,
157 * there is no TSO limit.
158 *
159 * NOTE: The TSO limits should reflect the values used in the
160 * BUSDMA tag a network adapter is using to load a mbuf chain
161 * for transmission. The TCP/IP network stack will subtract
162 * space for all linklevel and protocol level headers and
163 * ensure that the full mbuf chain passed to the network
164 * adapter fits within the given limits.
165 */
166 u_int if_hw_tsomax; /* TSO maximum size in bytes */
167 u_int if_hw_tsomaxsegcount; /* TSO maximum segment count */
168 u_int if_hw_tsomaxsegsize; /* TSO maximum segment size in bytes */
169
170 /*
171 * Network adapter send tag support:
172 */
173 if_snd_tag_alloc_t *if_snd_tag_alloc;
174
175 /* Ratelimit (packet pacing) */
176 if_ratelimit_query_t *if_ratelimit_query;
177 if_ratelimit_setup_t *if_ratelimit_setup;
178
179 /* Ethernet PCP */
180 uint8_t if_pcp;
181
182 /*
183 * Debugnet (Netdump) hooks to be called while in db/panic.
184 */
185 struct debugnet_methods *if_debugnet_methods;
186 struct epoch_context if_epoch_ctx;
187
188 /*
189 * Spare fields to be added before branching a stable branch, so
190 * that structure can be enhanced without changing the kernel
191 * binary interface.
192 */
193 int if_ispare[4]; /* general use */
194 };
195
196 #endif /* _KERNEL */
197
198 #endif /* _NET_IF_PRIVATE_H_ */
Cache object: 8a44652e0fa3c93d21b895dd31b31cd4
|