1#![no_std]
8#![recursion_limit = "256"]
11#![allow(stable_features)]
14#![warn(missing_docs, unreachable_patterns, clippy::useless_conversion, clippy::redundant_clone)]
15
16extern crate fakealloc as alloc;
19
20mod api;
21mod context;
22mod counters;
23mod lock_ordering;
24mod marker;
25mod state;
26mod time;
27mod transport;
28
29#[cfg(any(test, feature = "testutils"))]
30pub mod testutil;
31
32pub mod device {
34 #[path = "."]
35 pub(crate) mod integration {
36 mod base;
37 mod blackhole;
38 mod ethernet;
39 mod loopback;
40 mod pure_ip;
41 mod socket;
42
43 pub(crate) use base::{
44 device_state, device_state_and_core_ctx, get_mtu, ip_device_state,
45 ip_device_state_and_core_ctx,
46 };
47 }
48
49 pub use netstack3_base::DeviceNameMatcher;
51 pub use netstack3_device::blackhole::{BlackholeDevice, BlackholeDeviceId};
52 pub use netstack3_device::ethernet::{
53 EthernetCreationProperties, EthernetDeviceId, EthernetLinkDevice, EthernetWeakDeviceId,
54 MaxEthernetFrameSize, RecvEthernetFrameMeta,
55 };
56 pub use netstack3_device::loopback::{
57 LoopbackCreationProperties, LoopbackDevice, LoopbackDeviceId,
58 };
59 pub use netstack3_device::pure_ip::{
60 PureIpDevice, PureIpDeviceCreationProperties, PureIpDeviceId,
61 PureIpDeviceReceiveFrameMetadata, PureIpHeaderParams, PureIpWeakDeviceId,
62 };
63 pub use netstack3_device::queue::{
64 BatchSize, ReceiveQueueBindingsContext, TransmitQueueBindingsContext,
65 TransmitQueueConfiguration,
66 };
67 pub use netstack3_device::{
68 ArpConfiguration, ArpConfigurationUpdate, DeviceClassMatcher, DeviceConfiguration,
69 DeviceConfigurationUpdate, DeviceConfigurationUpdateError, DeviceId,
70 DeviceIdAndNameMatcher, DeviceLayerEventDispatcher, DeviceLayerStateTypes, DeviceProvider,
71 DeviceSendFrameError, NdpConfiguration, NdpConfigurationUpdate, WeakDeviceId,
72 };
73}
74
75pub mod device_socket {
77 pub use netstack3_base::{FrameDestination, SendFrameErrorReason};
78 pub use netstack3_device::socket::{
79 DeviceSocketBindingsContext, DeviceSocketMetadata, DeviceSocketTypes, EthernetFrame,
80 EthernetHeaderParams, Frame, IpFrame, Protocol, ReceivedFrame, SentFrame, SocketId,
81 SocketInfo, TargetDevice, WeakDeviceSocketId,
82 };
83}
84
85pub mod error {
87 pub use netstack3_base::{
88 AddressResolutionFailed, ExistsError, LocalAddressError, NotFoundError, NotSupportedError,
89 RemoteAddressError, SocketError, ZonedAddressError,
90 };
91}
92
93pub mod filter {
95 mod integration;
96
97 pub use netstack3_filter::{
98 Action, AddressMatcher, AddressMatcherType, FilterApi, FilterBindingsContext,
99 FilterBindingsTypes, Hook, InterfaceMatcher, InterfaceProperties, IpRoutines, MarkAction,
100 NatRoutines, PacketMatcher, PortMatcher, ProofOfEgressCheck, Routine, Routines, Rule,
101 TransparentProxy, TransportProtocolMatcher, Tuple, UninstalledRoutine, ValidationError,
102 };
103}
104
105pub mod inspect {
107 pub use netstack3_base::{
108 Inspectable, InspectableValue, Inspector, InspectorDeviceExt, InspectorExt,
109 };
110}
111
112pub mod icmp {
114 pub use netstack3_icmp_echo::{IcmpEchoBindingsContext, IcmpEchoBindingsTypes, IcmpSocketId};
115}
116
117pub mod ip {
119 #[path = "."]
120 pub(crate) mod integration {
121 mod base;
122 mod device;
123 mod multicast_forwarding;
124 mod raw;
125
126 pub(crate) use device::{CoreCtxWithIpDeviceConfiguration, IpAddrCtxSpec};
127 }
128
129 pub use netstack3_base::{Mark, MarkDomain, SubnetMatcher, WrapBroadcastMarker};
131 pub use netstack3_ip::device::{
132 AddIpAddrSubnetError, AddrSubnetAndManualConfigEither, AddressRemovedReason,
133 CommonAddressProperties, IidGenerationConfiguration, IidSecret, IpAddressState,
134 IpDeviceConfiguration, IpDeviceConfigurationAndFlags, IpDeviceConfigurationUpdate,
135 IpDeviceEvent, Ipv4AddrConfig, Ipv4DeviceConfiguration, Ipv4DeviceConfigurationUpdate,
136 Ipv6AddrManualConfig, Ipv6DeviceConfiguration, Ipv6DeviceConfigurationUpdate, Lifetime,
137 PreferredLifetime, SetIpAddressPropertiesError, SlaacConfiguration,
138 SlaacConfigurationUpdate, StableSlaacAddressConfiguration,
139 TemporarySlaacAddressConfiguration, UpdateIpConfigurationError,
140 };
141 pub use netstack3_ip::gmp::{IgmpConfigMode, MldConfigMode};
142 pub use netstack3_ip::multicast_forwarding::{
143 ForwardMulticastRouteError, MulticastForwardingDisabledError, MulticastForwardingEvent,
144 MulticastRoute, MulticastRouteKey, MulticastRouteStats, MulticastRouteTarget,
145 };
146 pub use netstack3_ip::raw::{
147 RawIpSocketIcmpFilter, RawIpSocketIcmpFilterError, RawIpSocketId, RawIpSocketProtocol,
148 RawIpSocketSendToError, RawIpSocketsBindingsContext, RawIpSocketsBindingsTypes,
149 WeakRawIpSocketId,
150 };
151 pub use netstack3_ip::socket::{
152 IpSockCreateAndSendError, IpSockCreationError, IpSockSendError,
153 };
154 pub use netstack3_ip::{IpLayerEvent, ResolveRouteError, RouterAdvertisementEvent};
155}
156
157pub mod neighbor {
159 pub use netstack3_ip::nud::{
161 Event, EventDynamicState, EventKind, EventState, LinkResolutionContext,
162 LinkResolutionNotifier, LinkResolutionResult, NeighborRemovalError, NudUserConfig,
163 NudUserConfigUpdate, StaticNeighborInsertionError, MAX_ENTRIES,
164 };
165}
166
167pub mod routes {
169 pub use netstack3_base::{Marks, WrapBroadcastMarker};
171 pub use netstack3_ip::{
172 AddRouteError, AddableEntry, AddableEntryEither, AddableMetric, Entry, EntryEither,
173 Generation, MarkMatcher, MarkMatchers, Metric, NextHop, RawMetric, ResolvedRoute,
174 RoutableIpAddr, RouteResolveOptions, RoutingTableId, Rule, RuleAction, RuleMatcher,
175 TrafficOriginMatcher,
176 };
177}
178
179pub mod socket {
181 pub use netstack3_datagram::{
182 ConnInfo, ConnectError, ExpectedConnError, ExpectedUnboundError, ListenerInfo,
183 MulticastInterfaceSelector, MulticastMembershipInterfaceSelector, SendError, SendToError,
184 SetMulticastMembershipError, SocketInfo,
185 };
186
187 pub use netstack3_base::socket::{
188 AddrIsMappedError, NotDualStackCapableError, SetDualStackEnabledError, ShutdownType,
189 SocketWritableListener, StrictlyZonedAddr,
190 };
191}
192
193pub mod sync {
195 use netstack3_sync as _;
200
201 pub use netstack3_base::sync::{
202 DebugReferences, DynDebugReferences, LockGuard, MapRcNotifier, Mutex, PrimaryRc,
203 RcNotifier, RwLock, RwLockReadGuard, RwLockWriteGuard, StrongRc, WeakRc,
204 };
205 pub use netstack3_base::{RemoveResourceResult, RemoveResourceResultWithContext};
206}
207
208pub mod tcp {
210 pub use netstack3_base::{FragmentedPayload, Payload, PayloadLen};
211 pub use netstack3_tcp::{
212 AcceptError, BindError, BoundInfo, Buffer, BufferLimits, BufferSizes, ConnectError,
213 ConnectionError, ConnectionInfo, IntoBuffers, ListenError, ListenerNotifier, NoConnection,
214 OriginalDestinationError, ReceiveBuffer, SendBuffer, SetDeviceError, SetReuseAddrError,
215 SocketAddr, SocketInfo, SocketOptions, TcpBindingsTypes, TcpSocketId, UnboundInfo,
216 DEFAULT_FIN_WAIT2_TIMEOUT,
217 };
218}
219
220pub mod trace {
222 pub use netstack3_trace::*;
224}
225
226pub mod types {
228 pub use netstack3_base::{Counter, WorkQueueReport};
229}
230
231pub mod udp {
233 pub use netstack3_udp::{
234 SendError, SendToError, UdpBindingsTypes, UdpPacketMeta, UdpReceiveBindingsContext,
235 UdpRemotePort, UdpSocketId,
236 };
237}
238
239pub use api::CoreApi;
240pub use context::{CoreCtx, UnlockedCoreCtx};
241pub use inspect::Inspector;
242pub use marker::{BindingsContext, BindingsTypes, CoreContext, IpBindingsContext, IpExt};
243pub use netstack3_base::{
244 CtxPair, DeferredResourceRemovalContext, EventContext, InstantBindingsTypes, InstantContext,
245 ReferenceNotifiers, RngContext, TimerBindingsTypes, TimerContext, TxMetadataBindingsTypes,
246};
247pub use state::{StackState, StackStateBuilder};
248pub use time::{AtomicInstant, Instant, TimerId};
249pub use transport::TxMetadata;
250
251pub use netstack3_device::for_any_device_id;
253pub use netstack3_macros::context_ip_bounds;
254
255