if ( network_interface_name_limit > SourceNetworkInterfaceName.size() )
{
strncpy( ifr.ifr_name, SourceNetworkInterfaceName.c_str(), network_interface_name_limit );
- ifr.ifr_addr.sa_family = AF_INET;
+ ifr.ifr_addr.sa_family = AF_INET; // TODO change to AF_INET6 when IPv6
int ioctl_resp = ioctl( Socket.native(), SIOCGIFADDR, &ifr );
if ( ioctl_resp == 0)
{
- return ((uint32_t) ifr.ifr_addr.sa_data[2] & 0xFF) << 24 |
- ((uint32_t) ifr.ifr_addr.sa_data[3] & 0xFF) << 16 |
- ((uint32_t) ifr.ifr_addr.sa_data[4] & 0xFF) << 8 |
- ((uint32_t) ifr.ifr_addr.sa_data[5] & 0xFF);
+ const sockaddr_in *source_sockaddr = reinterpret_cast<const sockaddr_in *>( &ifr.ifr_addr );
+ uint32_t source_ipv4_address = htonl( source_sockaddr->sin_addr.s_addr );
+
+ return source_ipv4_address;
}
}
else
{
- GlobalLogger.error() << "Error: network interface name truncated"
- << endl;
+ GlobalLogger.error() << "Error: network interface name truncated" << endl;
}
return 0;
uint32_t TcpPinger::get_destination_address() const
{
- return ((uint32_t) DestinationEndpoint.data()->sa_data[2] & 0xFF) << 24 |
- ((uint32_t) DestinationEndpoint.data()->sa_data[3] & 0xFF) << 16 |
- ((uint32_t) DestinationEndpoint.data()->sa_data[4] & 0xFF) << 8 |
- ((uint32_t) DestinationEndpoint.data()->sa_data[5] & 0xFF);
+ const sockaddr_in *destination_sockaddr = reinterpret_cast<const sockaddr_in *>( DestinationEndpoint.data() );
+ uint32_t destination_ipv4_address = htonl( destination_sockaddr->sin_addr.s_addr );
+
+ return destination_ipv4_address;
}
void TcpPinger::set_destination_endpoint( const string &destination_ip )