1#![no_std]
8#![recursion_limit = "256"]
11#![allow(stable_features)]
14#![warn(
15 missing_docs,
16 unreachable_patterns,
17 clippy::useless_conversion,
18 clippy::redundant_clone,
19 clippy::precedence
20)]
21extern crate alloc;
22
23mod api;
24mod context;
25mod counters;
26mod lock_ordering;
27mod marker;
28mod state;
29mod time;
30mod transport;
31
32#[cfg(any(test, feature = "testutils"))]
33pub mod testutil;
34
35pub mod data_structures {
37 pub mod rcu {
39 pub use netstack3_base::rcu::{ReadGuard, SynchronizedWriterRcu, WriteGuard};
40 }
41}
42pub mod device {
44 #[path = "."]
45 pub(crate) mod integration {
46 mod base;
47 mod blackhole;
48 mod ethernet;
49 mod loopback;
50 mod pure_ip;
51 mod socket;
52
53 pub(crate) use base::{
54 device_state, device_state_and_core_ctx, get_mtu, ip_device_state,
55 ip_device_state_and_core_ctx,
56 };
57 }
58
59 pub use netstack3_base::{
61 BoundInterfaceMatcher, InterfaceMatcher, InterfaceProperties, StrongDeviceIdentifier,
62 };
63 pub use netstack3_device::blackhole::{BlackholeDevice, BlackholeDeviceId};
64 pub use netstack3_device::ethernet::{
65 EthernetCreationProperties, EthernetDeviceEvent, EthernetDeviceId, EthernetLinkDevice,
66 EthernetWeakDeviceId, MaxEthernetFrameSize, RecvEthernetFrameMeta,
67 };
68 pub use netstack3_device::loopback::{
69 LoopbackCreationProperties, LoopbackDevice, LoopbackDeviceId, LoopbackWeakDeviceId,
70 };
71 pub use netstack3_device::pure_ip::{
72 PureIpDevice, PureIpDeviceCreationProperties, PureIpDeviceId,
73 PureIpDeviceReceiveFrameMetadata, PureIpHeaderParams, PureIpWeakDeviceId,
74 };
75 pub use netstack3_device::queue::{
76 BatchSize, ReceiveQueueBindingsContext, TransmitQueueBindingsContext,
77 TransmitQueueConfiguration,
78 };
79 pub use netstack3_device::{
80 ArpConfiguration, ArpConfigurationUpdate, DeviceClassMatcher, DeviceConfiguration,
81 DeviceConfigurationUpdate, DeviceConfigurationUpdateError, DeviceCounters, DeviceId,
82 DeviceIdAndNameMatcher, DeviceLayerEventDispatcher, DeviceLayerStateTypes, DeviceProvider,
83 DeviceSendFrameError, NdpConfiguration, NdpConfigurationUpdate, WeakDeviceId,
84 };
85}
86
87pub mod device_socket {
89 pub use netstack3_base::{FrameDestination, SendFrameErrorReason};
90 pub use netstack3_device::socket::{
91 DeviceSocketBindingsContext, DeviceSocketMetadata, DeviceSocketTypes, EthernetFrame,
92 EthernetHeaderParams, Frame, IpFrame, Protocol, ReceiveFrameError, ReceivedFrame,
93 SentFrame, SocketId, SocketInfo, TargetDevice, WeakDeviceSocketId,
94 };
95}
96
97pub mod error {
99 pub use netstack3_base::{
100 AddressResolutionFailed, ExistsError, LocalAddressError, NotFoundError, NotSupportedError,
101 RemoteAddressError, SocketError, ZonedAddressError,
102 };
103}
104
105pub mod filter {
107 mod integration;
108
109 pub use netstack3_filter::{
110 Action, BindingsPacketMatcher, FilterApi, FilterBindingsContext, FilterBindingsTypes,
111 FilterIpExt, FilterIpPacket, FilterPacketMetadata, Hook, Interfaces, IpPacket, IpRoutines,
112 MarkAction, NatRoutines, PacketMatcher, ProofOfEgressCheck, RejectType, Routine, Routines,
113 Rule, SocketEgressFilterResult, SocketIngressFilterResult, SocketOpsFilter,
114 SocketOpsFilterBindingContext, TransparentProxy, TransportProtocolMatcher, Tuple,
115 UninstalledRoutine, ValidationError,
116 };
117}
118
119pub mod inspect {
121 pub use netstack3_base::{
122 Inspectable, InspectableValue, Inspector, InspectorDeviceExt, InspectorExt,
123 };
124}
125
126pub mod icmp {
128 pub use netstack3_icmp_echo::{
129 IcmpEchoBindingsContext, IcmpEchoBindingsTypes, IcmpEchoSettings, IcmpSocketId,
130 ReceiveIcmpEchoError,
131 };
132}
133
134pub mod ip {
136 #[path = "."]
137 pub(crate) mod integration {
138 mod base;
139 mod device;
140 mod multicast_forwarding;
141 mod raw;
142
143 pub(crate) use device::CoreCtxWithIpDeviceConfiguration;
144 }
145
146 pub use netstack3_base::{
148 AddressMatcher, AddressMatcherEither, AddressMatcherType, BoundAddressMatcherEither,
149 BoundPortMatcher, Mark, MarkDomain, MarkInDomainMatcher, MarkMatcher, MarkMatchers, Marks,
150 PortMatcher, SubnetMatcher, WrapBroadcastMarker,
151 };
152 pub use netstack3_ip::device::{
153 AddIpAddrSubnetError, AddrSubnetAndManualConfigEither, AddressRemovedReason,
154 CommonAddressConfig, CommonAddressProperties, IidGenerationConfiguration, IidSecret,
155 IpAddressState, IpDeviceConfiguration, IpDeviceConfigurationAndFlags,
156 IpDeviceConfigurationUpdate, IpDeviceEvent, IpDeviceIpExt, Ipv4AddrConfig,
157 Ipv4DeviceConfiguration, Ipv4DeviceConfigurationUpdate, Ipv6AddrManualConfig,
158 Ipv6DeviceConfiguration, Ipv6DeviceConfigurationUpdate, Lifetime,
159 PendingIpDeviceConfigurationUpdate, PreferredLifetime, RouteDiscoveryConfiguration,
160 RouteDiscoveryConfigurationUpdate, SetIpAddressPropertiesError, SlaacConfiguration,
161 SlaacConfigurationUpdate, StableSlaacAddressConfiguration,
162 TemporarySlaacAddressConfiguration, UpdateIpConfigurationError,
163 };
164 pub use netstack3_ip::gmp::{IgmpConfigMode, MldConfigMode};
165 pub use netstack3_ip::multicast_forwarding::{
166 ForwardMulticastRouteError, MulticastForwardingDisabledError, MulticastForwardingEvent,
167 MulticastRoute, MulticastRouteKey, MulticastRouteStats, MulticastRouteTarget,
168 };
169 pub use netstack3_ip::raw::{
170 RawIpSocketIcmpFilter, RawIpSocketIcmpFilterError, RawIpSocketId, RawIpSocketProtocol,
171 RawIpSocketSendToError, RawIpSocketsBindingsContext, RawIpSocketsBindingsTypes,
172 ReceivePacketError, WeakRawIpSocketId,
173 };
174 pub use netstack3_ip::socket::{
175 IpSockCreateAndSendError, IpSockCreationError, IpSockSendError,
176 };
177 pub use netstack3_ip::{
178 IpLayerEvent, IpRoutingBindingsTypes, MarksBindingsContext, ResolveRouteError,
179 RouterAdvertisementEvent, SocketMetadata,
180 };
181}
182
183pub mod neighbor {
185 pub use netstack3_ip::nud::{
187 Event, EventDynamicState, EventKind, EventState, LinkResolutionContext,
188 LinkResolutionNotifier, LinkResolutionResult, MAX_ENTRIES, NeighborRemovalError,
189 NudUserConfig, NudUserConfigUpdate, StaticNeighborInsertionError,
190 TriggerNeighborProbeError,
191 };
192}
193
194pub mod routes {
196 pub use netstack3_base::{Marks, WrapBroadcastMarker};
198 pub use netstack3_ip::{
199 AddRouteError, AddableEntry, AddableEntryEither, AddableMetric, Entry, EntryEither,
200 Generation, Metric, NextHop, RawMetric, ResolvedRoute, RoutableIpAddr, RouteResolveOptions,
201 RoutingTableCookie, RoutingTableId, Rule, RuleAction, RuleMatcher, TrafficOriginMatcher,
202 };
203}
204
205pub mod socket {
207 pub use netstack3_datagram::{
208 ConnInfo, ConnectError, ExpectedConnError, ExpectedUnboundError, ListenerInfo,
209 MulticastInterfaceSelector, MulticastMembershipInterfaceSelector, SendError, SendToError,
210 SetMulticastMembershipError, SocketInfo,
211 };
212
213 pub use netstack3_base::socket::{
214 AddrIsMappedError, NotDualStackCapableError, ReusePortOption, SetDualStackEnabledError,
215 SharingDomain, ShutdownType, SocketCookie, SocketWritableListener, StrictlyZonedAddr,
216 };
217
218 pub use netstack3_base::{
219 IpSocketMatcher, SocketCookieMatcher, SocketTransportProtocolMatcher, TcpSocketMatcher,
220 TcpStateMatcher, UdpSocketMatcher, UdpStateMatcher,
221 };
222}
223
224pub mod sync {
226 use netstack3_sync as _;
231
232 pub use netstack3_base::sync::{
233 DebugReferences, DynDebugReferences, LockGuard, MapRcNotifier, Mutex, PrimaryRc,
234 RcNotifier, ResourceToken, ResourceTokenValue, RwLock, RwLockReadGuard, RwLockWriteGuard,
235 StrongRc, WeakRc,
236 };
237 pub use netstack3_base::{RemoveResourceResult, RemoveResourceResultWithContext};
238}
239
240pub mod tcp {
242 pub use netstack3_base::{FragmentedPayload, Payload, PayloadLen, TcpSocketState};
243 pub use netstack3_tcp::{
244 AcceptError, BindError, BoundInfo, Buffer, BufferLimits, BufferSizes,
245 CongestionControlState, ConnectError, ConnectionError, ConnectionInfo,
246 DEFAULT_FIN_WAIT2_TIMEOUT, IntoBuffers, ListenError, ListenerNotifier, NoConnection,
247 OriginalDestinationError, ReceiveBuffer, SendBuffer, SetDeviceError, SetReuseAddrError,
248 SocketAddr, SocketInfo, SocketOptions, TcpBindingsTypes, TcpSettings,
249 TcpSocketDiagnosticTuple, TcpSocketDiagnostics, TcpSocketId, TcpSocketInfo, UnboundInfo,
250 };
251}
252
253pub mod trace {
255 pub use netstack3_trace::*;
257}
258
259pub mod types {
261 pub use netstack3_base::{BufferSizeSettings, Counter, PositiveIsize, WorkQueueReport};
262}
263
264pub mod udp {
266 pub use netstack3_udp::{
267 ReceiveUdpError, SendError, SendToError, UdpBindingsTypes, UdpPacketMeta,
268 UdpReceiveBindingsContext, UdpRemotePort, UdpSettings, UdpSocketDiagnosticTuple,
269 UdpSocketDiagnostics, UdpSocketId,
270 };
271}
272
273pub use api::CoreApi;
274pub use context::{CoreCtx, UnlockedCoreCtx};
275pub use inspect::Inspector;
276pub use marker::{BindingsContext, BindingsTypes, CoreContext, IpBindingsContext, IpExt};
277pub use netstack3_base::{
278 CtxPair, DeferredResourceRemovalContext, EventContext, InstantBindingsTypes, InstantContext,
279 MapDerefExt, MatcherBindingsTypes, ReferenceNotifiers, RngContext, SettingsContext,
280 TimerBindingsTypes, TimerContext, TxMetadata, TxMetadataBindingsTypes,
281};
282pub use state::{StackState, StackStateBuilder};
283pub use time::{AtomicInstant, Instant, TimerId};
284pub use transport::CoreTxMetadata;
285
286pub use netstack3_device::for_any_device_id;
288pub use netstack3_macros::context_ip_bounds;
289
290