Line data Source code
1 : #ifndef HEADER_fd_src_util_net_fd_ip6_h 2 : #define HEADER_fd_src_util_net_fd_ip6_h 3 : 4 : #include "../bits/fd_bits.h" 5 : 6 : static inline void 7 : fd_ip6_addr_ip4_mapped( uchar ip6_addr[16], 8 0 : uint const ip4_addr ) { 9 0 : memset( ip6_addr, 0, 10 ); 10 0 : ip6_addr[ 10 ] = (uchar)0xff; 11 0 : ip6_addr[ 11 ] = (uchar)0xff; 12 0 : memcpy( ip6_addr+12, &ip4_addr, 4 ); 13 0 : } 14 : 15 : static inline int 16 0 : fd_ip6_addr_is_ip4_mapped( uchar const ip6_addr[16] ) { 17 0 : return ( 18 0 : (ip6_addr[ 0 ]==0x00) & (ip6_addr[ 1 ]==0x00) & 19 0 : (ip6_addr[ 2 ]==0x00) & (ip6_addr[ 3 ]==0x00) & 20 0 : (ip6_addr[ 4 ]==0x00) & (ip6_addr[ 5 ]==0x00) & 21 0 : (ip6_addr[ 6 ]==0x00) & (ip6_addr[ 7 ]==0x00) & 22 0 : (ip6_addr[ 8 ]==0x00) & (ip6_addr[ 9 ]==0x00) & 23 0 : (ip6_addr[ 10 ]==0xff) & (ip6_addr[ 11 ]==0xff) 24 0 : ); 25 0 : } 26 : 27 : static inline uint 28 0 : fd_ip6_addr_to_ip4( uchar const ip6_addr[16] ) { 29 0 : uint ip4_addr; 30 0 : memcpy( &ip4_addr, ip6_addr+12, 4 ); 31 0 : return ip4_addr; 32 0 : } 33 : 34 : #endif /* HEADER_fd_src_util_net_fd_ip6_h */