@@ -198,6 +198,104 @@ pub enum Timeout {
198
198
Send = c:: SO_SNDTIMEO as _ ,
199
199
}
200
200
201
+ /// A type for holding raw integer IPv4 Path MTU Discovery options.
202
+ pub type RawIpv4PathMtuDiscovery = i32 ;
203
+
204
+ /// IPv4 Path MTU Discovery option values (`IP_PMTUDISC_*`) for use with
205
+ /// [`set_ip_mtu_discover`] and [`ip_mtu_discover`].
206
+ ///
207
+ /// # References
208
+ /// - [Linux]
209
+ /// - [Linux INET header]
210
+ ///
211
+ /// [Linux]: https://man7.org/linux/man-pages/man7/ip.7.html
212
+ /// [Linux INET header]: https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/include/uapi/linux/in.h?h=v6.14#n135
213
+ #[ derive( Debug , Clone , Copy , Eq , PartialEq , Hash ) ]
214
+ #[ repr( transparent) ]
215
+ pub struct Ipv4PathMtuDiscovery ( RawIpv4PathMtuDiscovery ) ;
216
+
217
+ impl Ipv4PathMtuDiscovery {
218
+ /// `IP_PMTUDISC_DONT`
219
+ #[ doc( alias = "IP_PMTUDISC_DONT" ) ]
220
+ pub const DONT : Self = Self ( c:: IP_PMTUDISC_DONT as _ ) ;
221
+ /// `IP_PMTUDISC_WANT`
222
+ #[ doc( alias = "IP_PMTUDISC_WANT" ) ]
223
+ pub const WANT : Self = Self ( c:: IP_PMTUDISC_WANT as _ ) ;
224
+ /// `IP_PMTUDISC_DO`
225
+ #[ doc( alias = "IP_PMTUDISC_DO" ) ]
226
+ pub const DO : Self = Self ( c:: IP_PMTUDISC_DO as _ ) ;
227
+ /// `IP_PMTUDISC_PROBE`
228
+ #[ doc( alias = "IP_PMTUDISC_PROBE" ) ]
229
+ pub const PROBE : Self = Self ( c:: IP_PMTUDISC_PROBE as _ ) ;
230
+ /// `IP_PMTUDISC_INTERFACE`
231
+ #[ doc( alias = "IP_PMTUDISC_INTERFACE" ) ]
232
+ pub const INTERFACE : Self = Self ( c:: IP_PMTUDISC_INTERFACE as _ ) ;
233
+ /// `IP_PMTUDISC_OMIT`
234
+ #[ doc( alias = "IP_PMTUDISC_OMIT" ) ]
235
+ pub const OMIT : Self = Self ( c:: IP_PMTUDISC_OMIT as _ ) ;
236
+
237
+ /// Constructs an option from a raw integer.
238
+ #[ inline]
239
+ pub const fn from_raw ( raw : RawIpv4PathMtuDiscovery ) -> Self {
240
+ Self ( raw)
241
+ }
242
+
243
+ /// Returns the raw integer for this option.
244
+ #[ inline]
245
+ pub const fn as_raw ( self ) -> RawIpv4PathMtuDiscovery {
246
+ self . 0
247
+ }
248
+ }
249
+
250
+ /// A type for holding raw integer IPv6 Path MTU Discovery options.
251
+ pub type RawIpv6PathMtuDiscovery = i32 ;
252
+
253
+ /// IPv6 Path MTU Discovery option values (`IPV6_PMTUDISC_*`) for use with
254
+ /// [`set_ipv6_mtu_discover`] and [`ipv6_mtu_discover`].
255
+ ///
256
+ /// # References
257
+ /// - [Linux]
258
+ /// - [Linux INET6 header]
259
+ ///
260
+ /// [Linux]: https://man7.org/linux/man-pages/man7/ipv6.7.html
261
+ /// [Linux INET6 header]: https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/include/uapi/linux/in6.h?h=v6.14#n185
262
+ #[ derive( Debug , Clone , Copy , Eq , PartialEq , Hash ) ]
263
+ #[ repr( transparent) ]
264
+ pub struct Ipv6PathMtuDiscovery ( RawIpv6PathMtuDiscovery ) ;
265
+
266
+ impl Ipv6PathMtuDiscovery {
267
+ /// `IPV6_PMTUDISC_DONT`
268
+ #[ doc( alias = "IPV6_PMTUDISC_DONT" ) ]
269
+ pub const DONT : Self = Self ( c:: IPV6_PMTUDISC_DONT as _ ) ;
270
+ /// `IPV6_PMTUDISC_WANT`
271
+ #[ doc( alias = "IPV6_PMTUDISC_WANT" ) ]
272
+ pub const WANT : Self = Self ( c:: IPV6_PMTUDISC_WANT as _ ) ;
273
+ /// `IPV6_PMTUDISC_DO`
274
+ #[ doc( alias = "IPV6_PMTUDISC_DO" ) ]
275
+ pub const DO : Self = Self ( c:: IPV6_PMTUDISC_DO as _ ) ;
276
+ /// `IPV6_PMTUDISC_PROBE`
277
+ #[ doc( alias = "IPV6_PMTUDISC_PROBE" ) ]
278
+ pub const PROBE : Self = Self ( c:: IPV6_PMTUDISC_PROBE as _ ) ;
279
+ /// `IPV6_PMTUDISC_INTERFACE`
280
+ #[ doc( alias = "IPV6_PMTUDISC_INTERFACE" ) ]
281
+ pub const INTERFACE : Self = Self ( c:: IPV6_PMTUDISC_INTERFACE as _ ) ;
282
+ /// `IPV6_PMTUDISC_OMIT`
283
+ #[ doc( alias = "IPV6_PMTUDISC_OMIT" ) ]
284
+ pub const OMIT : Self = Self ( c:: IPV6_PMTUDISC_OMIT as _ ) ;
285
+
286
+ /// Constructs an option from a raw integer.
287
+ #[ inline]
288
+ pub const fn from_raw ( raw : RawIpv6PathMtuDiscovery ) -> Self {
289
+ Self ( raw)
290
+ }
291
+
292
+ /// Returns the raw integer for this option.
293
+ #[ inline]
294
+ pub const fn as_raw ( self ) -> RawIpv6PathMtuDiscovery {
295
+ self . 0
296
+ }
297
+ }
298
+
201
299
/// `getsockopt(fd, SOL_SOCKET, SO_TYPE)`—Returns the type of a socket.
202
300
///
203
301
/// See the [module-level documentation] for more.
@@ -686,6 +784,50 @@ pub fn ipv6_mtu<Fd: AsFd>(fd: Fd) -> io::Result<u32> {
686
784
backend:: net:: sockopt:: ipv6_mtu ( fd. as_fd ( ) )
687
785
}
688
786
787
+ /// `setsockopt(fd, IPPROTO_IP, IP_MTU_DISCOVER, value)`
788
+ ///
789
+ /// See the [module-level documentation] for more.
790
+ ///
791
+ /// [module-level documentation]: self#references-for-get_ip_-and-set_ip_-functions
792
+ #[ inline]
793
+ #[ doc( alias = "IP_MTU_DISCOVER" ) ]
794
+ pub fn set_ip_mtu_discover < Fd : AsFd > ( fd : Fd , value : Ipv4PathMtuDiscovery ) -> io:: Result < ( ) > {
795
+ backend:: net:: sockopt:: set_ip_mtu_discover ( fd. as_fd ( ) , value)
796
+ }
797
+
798
+ /// `getsockopt(fd, IPPROTO_IP, IP_MTU_DISCOVER)`
799
+ ///
800
+ /// See the [module-level documentation] for more.
801
+ ///
802
+ /// [module-level documentation]: self#references-for-get_ip_-and-set_ip_-functions
803
+ #[ inline]
804
+ #[ doc( alias = "IP_MTU_DISCOVER" ) ]
805
+ pub fn ip_mtu_discover < Fd : AsFd > ( fd : Fd ) -> io:: Result < Ipv4PathMtuDiscovery > {
806
+ backend:: net:: sockopt:: ip_mtu_discover ( fd. as_fd ( ) )
807
+ }
808
+
809
+ /// `setsockopt(fd, IPPROTO_IPV6, IPV6_MTU_DISCOVER, value)`
810
+ ///
811
+ /// See the [module-level documentation] for more.
812
+ ///
813
+ /// [module-level documentation]: self#references-for-get_ipv6_-and-set_ipv6_-functions
814
+ #[ inline]
815
+ #[ doc( alias = "IPV6_MTU_DISCOVER" ) ]
816
+ pub fn set_ipv6_mtu_discover < Fd : AsFd > ( fd : Fd , value : Ipv6PathMtuDiscovery ) -> io:: Result < ( ) > {
817
+ backend:: net:: sockopt:: set_ipv6_mtu_discover ( fd. as_fd ( ) , value)
818
+ }
819
+
820
+ /// `getsockopt(fd, IPPROTO_IPV6, IPV6_MTU_DISCOVER)`
821
+ ///
822
+ /// See the [module-level documentation] for more.
823
+ ///
824
+ /// [module-level documentation]: self#references-for-get_ipv6_-and-set_ipv6_-functions
825
+ #[ inline]
826
+ #[ doc( alias = "IPV6_MTU_DISCOVER" ) ]
827
+ pub fn ipv6_mtu_discover < Fd : AsFd > ( fd : Fd ) -> io:: Result < Ipv6PathMtuDiscovery > {
828
+ backend:: net:: sockopt:: ipv6_mtu_discover ( fd. as_fd ( ) )
829
+ }
830
+
689
831
/// `setsockopt(fd, IPPROTO_IP, IP_MULTICAST_IF, value)`
690
832
///
691
833
/// See the [module-level documentation] for more.
0 commit comments