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, Routine, Routines, Rule,
113 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 };
191}
192
193pub mod routes {
195 pub use netstack3_base::{Marks, WrapBroadcastMarker};
197 pub use netstack3_ip::{
198 AddRouteError, AddableEntry, AddableEntryEither, AddableMetric, Entry, EntryEither,
199 Generation, Metric, NextHop, RawMetric, ResolvedRoute, RoutableIpAddr, RouteResolveOptions,
200 RoutingTableCookie, RoutingTableId, Rule, RuleAction, RuleMatcher, TrafficOriginMatcher,
201 };
202}
203
204pub mod socket {
206 pub use netstack3_datagram::{
207 ConnInfo, ConnectError, ExpectedConnError, ExpectedUnboundError, ListenerInfo,
208 MulticastInterfaceSelector, MulticastMembershipInterfaceSelector, SendError, SendToError,
209 SetMulticastMembershipError, SocketInfo,
210 };
211
212 pub use netstack3_base::socket::{
213 AddrIsMappedError, NotDualStackCapableError, ReusePortOption, SetDualStackEnabledError,
214 SharingDomain, ShutdownType, SocketCookie, SocketWritableListener, StrictlyZonedAddr,
215 };
216
217 pub use netstack3_base::{
218 IpSocketMatcher, SocketCookieMatcher, SocketTransportProtocolMatcher, TcpSocketMatcher,
219 TcpStateMatcher, UdpSocketMatcher, UdpStateMatcher,
220 };
221}
222
223pub mod sync {
225 use netstack3_sync as _;
230
231 pub use netstack3_base::sync::{
232 DebugReferences, DynDebugReferences, LockGuard, MapRcNotifier, Mutex, PrimaryRc,
233 RcNotifier, ResourceToken, ResourceTokenValue, RwLock, RwLockReadGuard, RwLockWriteGuard,
234 StrongRc, WeakRc,
235 };
236 pub use netstack3_base::{RemoveResourceResult, RemoveResourceResultWithContext};
237}
238
239pub mod tcp {
241 pub use netstack3_base::{FragmentedPayload, Payload, PayloadLen, TcpSocketState};
242 pub use netstack3_tcp::{
243 AcceptError, BindError, BoundInfo, Buffer, BufferLimits, BufferSizes,
244 CongestionControlState, ConnectError, ConnectionError, ConnectionInfo,
245 DEFAULT_FIN_WAIT2_TIMEOUT, IntoBuffers, ListenError, ListenerNotifier, NoConnection,
246 OriginalDestinationError, ReceiveBuffer, SendBuffer, SetDeviceError, SetReuseAddrError,
247 SocketAddr, SocketInfo, SocketOptions, TcpBindingsTypes, TcpSettings,
248 TcpSocketDiagnosticTuple, TcpSocketDiagnostics, TcpSocketId, TcpSocketInfo, UnboundInfo,
249 };
250}
251
252pub mod trace {
254 pub use netstack3_trace::*;
256}
257
258pub mod types {
260 pub use netstack3_base::{BufferSizeSettings, Counter, PositiveIsize, WorkQueueReport};
261}
262
263pub mod udp {
265 pub use netstack3_udp::{
266 ReceiveUdpError, SendError, SendToError, UdpBindingsTypes, UdpPacketMeta,
267 UdpReceiveBindingsContext, UdpRemotePort, UdpSettings, UdpSocketDiagnosticTuple,
268 UdpSocketDiagnostics, UdpSocketId,
269 };
270}
271
272pub use api::CoreApi;
273pub use context::{CoreCtx, UnlockedCoreCtx};
274pub use inspect::Inspector;
275pub use marker::{BindingsContext, BindingsTypes, CoreContext, IpBindingsContext, IpExt};
276pub use netstack3_base::{
277 CtxPair, DeferredResourceRemovalContext, EventContext, InstantBindingsTypes, InstantContext,
278 MapDerefExt, MatcherBindingsTypes, ReferenceNotifiers, RngContext, SettingsContext,
279 TimerBindingsTypes, TimerContext, TxMetadata, TxMetadataBindingsTypes,
280};
281pub use state::{StackState, StackStateBuilder};
282pub use time::{AtomicInstant, Instant, TimerId};
283pub use transport::CoreTxMetadata;
284
285pub use netstack3_device::for_any_device_id;
287pub use netstack3_macros::context_ip_bounds;
288
289