141d61c82SJiaqing Zhao #pragma once 241d61c82SJiaqing Zhao 341d61c82SJiaqing Zhao #include <boost/asio/ip/address.hpp> 4*d5c80ad9SNan Zhou #include <boost/asio/ip/address_v4.hpp> 5*d5c80ad9SNan Zhou #include <boost/asio/ip/address_v6.hpp> 641d61c82SJiaqing Zhao 741d61c82SJiaqing Zhao #include <string> 841d61c82SJiaqing Zhao 941d61c82SJiaqing Zhao namespace redfish 1041d61c82SJiaqing Zhao { 1141d61c82SJiaqing Zhao namespace ip_util 1241d61c82SJiaqing Zhao { 1341d61c82SJiaqing Zhao 1441d61c82SJiaqing Zhao /** 1541d61c82SJiaqing Zhao * @brief Converts boost::asio::ip::address to string 1641d61c82SJiaqing Zhao * Will automatically convert IPv4-mapped IPv6 address back to IPv4. 1741d61c82SJiaqing Zhao * 1841d61c82SJiaqing Zhao * @param[in] ipAddr IP address to convert 1941d61c82SJiaqing Zhao * 2041d61c82SJiaqing Zhao * @return IP address string 2141d61c82SJiaqing Zhao */ 2241d61c82SJiaqing Zhao inline std::string toString(const boost::asio::ip::address& ipAddr) 2341d61c82SJiaqing Zhao { 2441d61c82SJiaqing Zhao if (ipAddr.is_v6() && ipAddr.to_v6().is_v4_mapped()) 2541d61c82SJiaqing Zhao { 2641d61c82SJiaqing Zhao return boost::asio::ip::make_address_v4(boost::asio::ip::v4_mapped, 2741d61c82SJiaqing Zhao ipAddr.to_v6()) 2841d61c82SJiaqing Zhao .to_string(); 2941d61c82SJiaqing Zhao } 3041d61c82SJiaqing Zhao return ipAddr.to_string(); 3141d61c82SJiaqing Zhao } 3241d61c82SJiaqing Zhao 3341d61c82SJiaqing Zhao } // namespace ip_util 3441d61c82SJiaqing Zhao } // namespace redfish 35