File tree Expand file tree Collapse file tree 2 files changed +7
-51
lines changed Expand file tree Collapse file tree 2 files changed +7
-51
lines changed Original file line number Diff line number Diff line change @@ -100,33 +100,13 @@ pub fn nix_socketaddr_to_sockaddr(sa: *mut nix::sys::socket::sockaddr) -> Option
100
100
let sa: * const nix:: sys:: socket:: sockaddr_in = sa as * const nix:: libc:: sockaddr_in ;
101
101
let sa = & unsafe { * sa } ;
102
102
let ( addr, port) = ( sa. sin_addr . s_addr , sa. sin_port ) ;
103
- (
104
- IpAddr :: V4 ( net:: Ipv4Addr :: new (
105
- ( addr & 0x000000FF ) as u8 ,
106
- ( ( addr & 0x0000FF00 ) >> 8 ) as u8 ,
107
- ( ( addr & 0x00FF0000 ) >> 16 ) as u8 ,
108
- ( ( addr & 0xFF000000 ) >> 24 ) as u8 ,
109
- ) ) ,
110
- port,
111
- )
103
+ ( IpAddr :: V4 ( Into :: into ( u32:: from_be ( addr) ) ) , port)
112
104
}
113
105
AF_INET6 => {
114
106
let sa: * const nix:: sys:: socket:: sockaddr_in6 = sa as * const nix:: libc:: sockaddr_in6 ;
115
107
let sa = & unsafe { * sa } ;
116
108
let ( addr, port) = ( sa. sin6_addr . s6_addr , sa. sin6_port ) ;
117
- (
118
- IpAddr :: V6 ( net:: Ipv6Addr :: new (
119
- addr[ 0 ] as u16 ,
120
- addr[ 1 ] as u16 ,
121
- addr[ 2 ] as u16 ,
122
- addr[ 3 ] as u16 ,
123
- addr[ 4 ] as u16 ,
124
- addr[ 5 ] as u16 ,
125
- addr[ 6 ] as u16 ,
126
- addr[ 7 ] as u16 ,
127
- ) ) ,
128
- port,
129
- )
109
+ ( Into :: into ( addr) , port)
130
110
}
131
111
_ => return None ,
132
112
} ;
Original file line number Diff line number Diff line change @@ -28,35 +28,11 @@ impl Interface {
28
28
}
29
29
30
30
pub fn convert ( addr : SocketAddr , mask : Option < SocketAddr > ) -> Result < IpNet > {
31
- let prefix = if let Some ( mask) = mask {
32
- match ( addr, mask) {
33
- ( SocketAddr :: V4 ( _) , SocketAddr :: V4 ( mask) ) => {
34
- let octets = mask. ip ( ) . octets ( ) ;
35
- let mut prefix = 0 ;
36
- for octet in & octets {
37
- for i in 0 ..8 {
38
- prefix += ( * octet >> ( 7 - i) ) & 0x1 ;
39
- }
40
- }
41
- prefix
42
- }
43
- ( SocketAddr :: V6 ( _) , SocketAddr :: V6 ( mask) ) => {
44
- let octets = mask. ip ( ) . octets ( ) ;
45
- let mut prefix = 0 ;
46
- for octet in & octets {
47
- for i in 0 ..8 {
48
- prefix += ( * octet >> ( 7 - i) ) & 0x1 ;
49
- }
50
- }
51
- prefix
52
- }
53
- _ => return Err ( Error :: ErrInvalidMask ) ,
54
- }
31
+ if let Some ( mask) = mask {
32
+ Ok ( IpNet :: with_netmask ( addr. ip ( ) , mask. ip ( ) ) . map_err ( |_| Error :: ErrInvalidMask ) ?)
55
33
} else {
56
- 32
57
- } ;
58
- let s = format ! ( "{}/{}" , addr. ip( ) , prefix) ;
59
-
60
- Ok ( IpNet :: from_str ( & s) ?)
34
+ Ok ( IpNet :: new ( addr. ip ( ) , if addr. is_ipv4 ( ) { 32 } else { 128 } )
35
+ . expect ( "ipv4 should always work with prefix 32 and ipv6 with prefix 128" ) )
36
+ }
61
37
}
62
38
}
You can’t perform that action at this time.
0 commit comments