1#![no_std]
10#![warn(
11 missing_docs,
12 unreachable_patterns,
13 clippy::useless_conversion,
14 clippy::redundant_clone,
15 clippy::precedence
16)]
17
18extern crate alloc;
19
20#[path = "."]
21mod internal {
22 #[macro_use]
23 pub(super) mod path_mtu;
24
25 pub(super) mod api;
26 pub(super) mod base;
27 pub(super) mod counters;
28 pub(super) mod device;
29 pub(super) mod fragmentation;
30 pub(super) mod gmp;
31 pub(super) mod icmp;
32 pub(super) mod ipv6;
33 pub(super) mod local_delivery;
34 pub(super) mod multicast_forwarding;
35 pub(super) mod raw;
36 pub(super) mod reassembly;
37 pub(super) mod routing;
38 pub(super) mod sas;
39 pub(super) mod socket;
40 pub(super) mod types;
41 pub(super) mod uninstantiable;
42}
43
44pub mod device {
46 pub use crate::internal::device::api::{
47 AddIpAddrSubnetError, AddrSubnetAndManualConfigEither, DeviceIpAnyApi, DeviceIpApi,
48 SetIpAddressPropertiesError,
49 };
50 pub use crate::internal::device::config::{
51 IpDeviceConfigurationAndFlags, IpDeviceConfigurationHandler, IpDeviceConfigurationUpdate,
52 Ipv4DeviceConfigurationUpdate, Ipv6DeviceConfigurationUpdate, UpdateIpConfigurationError,
53 };
54 pub use crate::internal::device::dad::{
55 DadAddressContext, DadAddressStateRef, DadContext, DadHandler, DadState, DadStateRef,
56 DadTimerId, IPV4_DAD_ANNOUNCE_NUM, Ipv4DadAddressInfo, Ipv4DadSendData,
57 Ipv6DadAddressContext, Ipv6DadSendData, OwnedNdpNonce,
58 };
59 pub use crate::internal::device::opaque_iid::{IidSecret, OpaqueIid, OpaqueIidNonce};
60 pub use crate::internal::device::route_discovery::{
61 Ipv6DiscoveredRoute, Ipv6DiscoveredRoutesContext, Ipv6RouteDiscoveryBindingsContext,
62 Ipv6RouteDiscoveryContext, Ipv6RouteDiscoveryState,
63 };
64 pub use crate::internal::device::router_solicitation::{
65 MAX_RTR_SOLICITATION_DELAY, RTR_SOLICITATION_INTERVAL, RsContext, RsHandler, RsState,
66 RsTimerId,
67 };
68 pub use crate::internal::device::slaac::{
69 IidGenerationConfiguration, InnerSlaacTimerId, SLAAC_MIN_REGEN_ADVANCE, SlaacAddressEntry,
70 SlaacAddressEntryMut, SlaacAddresses, SlaacBindingsContext, SlaacConfigAndState,
71 SlaacConfiguration, SlaacConfigurationUpdate, SlaacContext, SlaacCounters, SlaacState,
72 SlaacTimerId, StableSlaacAddressConfiguration, TemporarySlaacAddressConfiguration,
73 };
74 pub use crate::internal::device::state::{
75 AddressId, AddressIdIter, CommonAddressConfig, CommonAddressProperties, DefaultHopLimit,
76 DualStackIpDeviceState, IpAddressData, IpAddressEntry, IpAddressFlags, IpDeviceAddresses,
77 IpDeviceConfiguration, IpDeviceFlags, IpDeviceMulticastGroups, IpDeviceStateBindingsTypes,
78 IpDeviceStateIpExt, Ipv4AddrConfig, Ipv4DeviceConfiguration, Ipv6AddrConfig,
79 Ipv6AddrManualConfig, Ipv6AddrSlaacConfig, Ipv6DeviceConfiguration,
80 Ipv6NetworkLearnedParameters, Lifetime, PreferredLifetime, PrimaryAddressId, SlaacConfig,
81 TemporarySlaacConfig, WeakAddressId,
82 };
83 pub use crate::internal::device::{
84 AddressRemovedReason, DelIpAddr, IpAddressState, IpDeviceAddressContext,
85 IpDeviceBindingsContext, IpDeviceConfigurationContext, IpDeviceEvent, IpDeviceHandler,
86 IpDeviceIpExt, IpDeviceSendContext, IpDeviceStateContext, IpDeviceTimerId,
87 Ipv4DeviceTimerId, Ipv6DeviceConfigurationContext, Ipv6DeviceContext, Ipv6DeviceHandler,
88 Ipv6DeviceTimerId, Ipv6LinkLayerAddr, WithIpDeviceConfigurationMutInner,
89 WithIpv6DeviceConfigurationMutInner, add_ip_addr_subnet_with_config,
90 clear_ipv4_device_state, clear_ipv6_device_state, del_ip_addr_inner, get_ipv4_addr_subnet,
91 get_ipv6_hop_limit, is_ip_device_enabled, is_ip_multicast_forwarding_enabled,
92 is_ip_unicast_forwarding_enabled, join_ip_multicast, join_ip_multicast_with_config,
93 leave_ip_multicast, leave_ip_multicast_with_config, on_arp_packet, receive_igmp_packet,
94 };
95
96 #[cfg(any(test, feature = "testutils"))]
98 pub mod testutil {
99 pub use crate::internal::device::slaac::testutil::{
100 calculate_slaac_addr_sub, collect_slaac_timers_integration,
101 };
102 pub use crate::internal::device::testutil::{
103 with_assigned_ipv4_addr_subnets, with_assigned_ipv6_addr_subnets,
104 };
105 }
106}
107
108pub mod gmp {
110 pub use crate::internal::gmp::igmp::{
111 IGMP_DEFAULT_UNSOLICITED_REPORT_INTERVAL, IgmpConfigMode, IgmpContext, IgmpContextMarker,
112 IgmpCounters, IgmpSendContext, IgmpStateContext, IgmpTimerId, IgmpTypeLayout,
113 };
114 pub use crate::internal::gmp::mld::{
115 MLD_DEFAULT_UNSOLICITED_REPORT_INTERVAL, MldConfigMode, MldContext, MldContextMarker,
116 MldCounters, MldSendContext, MldStateContext, MldTimerId, MldTypeLayout,
117 };
118 pub use crate::internal::gmp::{
119 GmpGroupState, GmpHandler, GmpQueryHandler, GmpState, GmpStateRef, GmpTimerId, IpExt,
120 MulticastGroupSet,
121 };
122}
123
124pub mod icmp {
126 pub use crate::internal::icmp::{
127 EchoTransportContextMarker, IcmpBindingsContext, IcmpBindingsTypes, IcmpIpTransportContext,
128 IcmpRxCounters, IcmpRxCountersInner, IcmpState, IcmpStateContext, IcmpTxCounters,
129 IcmpTxCountersInner, Icmpv4StateBuilder, InnerIcmpContext, InnerIcmpv4Context, NdpCounters,
130 NdpMessage, NdpRxCounters, NdpTxCounters, REQUIRED_NDP_IP_PACKET_HOP_LIMIT,
131 send_icmpv4_host_unreachable, send_icmpv6_address_unreachable, send_ndp_packet,
132 };
133
134 #[cfg(any(test, feature = "testutils"))]
136 pub mod testutil {
137 pub use crate::internal::icmp::testutil::{
138 neighbor_advertisement_ip_packet, neighbor_solicitation_ip_packet,
139 };
140 }
141}
142
143pub mod marker {
145 pub use crate::internal::base::{UseIpSocketContextBlanket, UseTransportIpContextBlanket};
146 pub use crate::internal::socket::{
147 OptionDelegationMarker, UseDeviceIpSocketHandlerBlanket, UseIpSocketHandlerBlanket,
148 };
149}
150
151pub mod nud {
153 pub use crate::internal::device::nud::api::{
154 NeighborApi, NeighborRemovalError, StaticNeighborInsertionError,
155 };
156 pub use crate::internal::device::nud::{
157 ConfirmationFlags, Delay, DelegateNudContext, DynamicNeighborState,
158 DynamicNeighborUpdateSource, Event, EventDynamicState, EventKind, EventState, Incomplete,
159 LinkResolutionContext, LinkResolutionNotifier, LinkResolutionResult, MAX_ENTRIES,
160 NeighborState, NudBindingsContext, NudBindingsTypes, NudConfigContext, NudContext,
161 NudCounters, NudCountersInner, NudHandler, NudIcmpContext, NudIpHandler, NudSenderContext,
162 NudState, NudTimerId, NudUserConfig, NudUserConfigUpdate, Reachable, Stale,
163 UseDelegateNudContext, confirm_reachable,
164 };
165 pub use crate::internal::device::state::IPV6_RETRANS_TIMER_DEFAULT;
166
167 #[cfg(any(test, feature = "testutils"))]
169 pub mod testutil {
170 pub use crate::internal::device::nud::testutil::{
171 FakeLinkResolutionNotifier, assert_dynamic_neighbor_state,
172 assert_dynamic_neighbor_with_addr, assert_neighbor_unknown,
173 };
174 }
175}
176
177pub mod socket {
179 pub use crate::internal::socket::{
180 DefaultIpSocketOptions, DelegatedRouteResolutionOptions, DelegatedSendOptions,
181 DeviceIpSocketHandler, IpSock, IpSockCreateAndSendError, IpSockCreationError,
182 IpSockDefinition, IpSockSendError, IpSocketArgs, IpSocketBindingsContext, IpSocketContext,
183 IpSocketHandler, MmsError, RouteResolutionOptions, SendOneShotIpPacketError, SendOptions,
184 SocketHopLimits,
185 };
186
187 #[cfg(any(test, feature = "testutils"))]
189 pub mod testutil {
190 pub use crate::internal::socket::testutil::{
191 FakeDeviceConfig, FakeDualStackIpSocketCtx, FakeIpSocketCtx, InnerFakeIpSocketCtx,
192 };
193 }
194}
195
196pub mod multicast_forwarding {
198 pub use crate::internal::multicast_forwarding::api::{
199 MulticastForwardingApi, MulticastForwardingDisabledError,
200 };
201 pub use crate::internal::multicast_forwarding::counters::MulticastForwardingCounters;
202 pub use crate::internal::multicast_forwarding::packet_queue::MulticastForwardingPendingPackets;
203 pub use crate::internal::multicast_forwarding::route::{
204 ForwardMulticastRouteError, MulticastRoute, MulticastRouteKey, MulticastRouteStats,
205 MulticastRouteTarget, MulticastRouteTargets,
206 };
207 pub use crate::internal::multicast_forwarding::state::{
208 MulticastForwardingEnabledState, MulticastForwardingPendingPacketsContext,
209 MulticastForwardingState, MulticastForwardingStateContext, MulticastRouteTable,
210 MulticastRouteTableContext,
211 };
212 pub use crate::internal::multicast_forwarding::{
213 MulticastForwardingBindingsContext, MulticastForwardingBindingsTypes,
214 MulticastForwardingDeviceContext, MulticastForwardingEvent, MulticastForwardingTimerId,
215 };
216}
217
218pub mod raw {
220 pub use crate::internal::raw::counters::RawIpSocketCounters;
221 pub use crate::internal::raw::filter::RawIpSocketIcmpFilter;
222 pub use crate::internal::raw::protocol::RawIpSocketProtocol;
223 pub use crate::internal::raw::state::{RawIpSocketLockedState, RawIpSocketState};
224 pub use crate::internal::raw::{
225 RawIpSocketApi, RawIpSocketIcmpFilterError, RawIpSocketId, RawIpSocketMap,
226 RawIpSocketMapContext, RawIpSocketSendToError, RawIpSocketStateContext,
227 RawIpSocketsBindingsContext, RawIpSocketsBindingsTypes, ReceivePacketError,
228 WeakRawIpSocketId,
229 };
230}
231
232pub use internal::api::{RouteResolveOptions, RoutesAnyApi, RoutesApi, RoutesApiTableId};
233pub use internal::base::{
234 AddressStatus, BaseRoutingTableState, BaseTransportIpContext, DEFAULT_HOP_LIMITS, DEFAULT_TTL,
235 DeviceIpLayerMetadata, DropReason, FilterHandlerProvider, HopLimits, IPV6_DEFAULT_SUBNET,
236 IpDeviceConfirmReachableContext, IpDeviceContext, IpDeviceEgressStateContext,
237 IpDeviceIngressStateContext, IpDeviceMtuContext, IpLayerBindingsContext, IpLayerContext,
238 IpLayerEvent, IpLayerHandler, IpLayerIpExt, IpLayerTimerId, IpPacketDestination,
239 IpRouteTableContext, IpRouteTablesContext, IpSendFrameError, IpSendFrameErrorReason,
240 IpStateContext, IpStateInner, IpTransportContext, IpTransportDispatchContext,
241 Ipv4PresentAddressStatus, Ipv4State, Ipv4StateBuilder, Ipv6PresentAddressStatus, Ipv6State,
242 Ipv6StateBuilder, MulticastMembershipHandler, NdpBindingsContext, ReceivePacketAction,
243 ResolveRouteError, RouterAdvertisementEvent, RoutingTableCookie, RoutingTableId,
244 SendIpPacketMeta, TransportIpContext, TransportReceiveError, gen_ip_packet_id,
245 receive_ipv4_packet, receive_ipv4_packet_action, receive_ipv6_packet,
246 receive_ipv6_packet_action, resolve_output_route_to_destination,
247};
248pub use internal::counters::{IpCounters, Ipv6RxCounters};
249pub use internal::fragmentation::FragmentationCounters;
250pub use internal::local_delivery::{
251 IpHeaderInfo, LocalDeliveryPacketInfo, ReceiveIpPacketMeta, TransparentLocalDelivery,
252};
253pub use internal::path_mtu::{PmtuCache, PmtuContext};
254pub use internal::reassembly::{FragmentContext, FragmentTimerId, IpPacketFragmentCache};
255pub use internal::routing::rules::{
256 Rule, RuleAction, RuleMatcher, RulesTable, TrafficOriginMatcher,
257};
258pub use internal::routing::{
259 AddRouteError, IpRoutingBindingsTypes, IpRoutingDeviceContext, NonLocalSrcAddrPolicy,
260 PacketOrigin, RoutingTable, request_context_add_route, request_context_del_routes,
261};
262pub use internal::sas::IpSasHandler;
263pub use internal::types::{
264 AddableEntry, AddableEntryEither, AddableMetric, Destination, Entry, EntryEither, Generation,
265 InternalForwarding, Metric, NextHop, RawMetric, ResolvedRoute, RoutableIpAddr,
266};
267
268#[cfg(any(test, feature = "testutils"))]
270pub mod testutil {
271 pub use crate::internal::base::testutil::DualStackSendIpPacketMeta;
272 pub use crate::internal::counters::testutil::IpCounterExpectations;
273 pub use crate::internal::local_delivery::testutil::FakeIpHeaderInfo;
274 pub use crate::internal::routing::testutil::{
275 add_route, del_device_routes, del_routes_to_subnet, set_rules,
276 };
277}