1*41d61c82SJiaqing Zhao #pragma once 2*41d61c82SJiaqing Zhao 3*41d61c82SJiaqing Zhao #include <boost/asio/ip/address.hpp> 4*41d61c82SJiaqing Zhao 5*41d61c82SJiaqing Zhao #include <string> 6*41d61c82SJiaqing Zhao 7*41d61c82SJiaqing Zhao namespace redfish 8*41d61c82SJiaqing Zhao { 9*41d61c82SJiaqing Zhao namespace ip_util 10*41d61c82SJiaqing Zhao { 11*41d61c82SJiaqing Zhao 12*41d61c82SJiaqing Zhao /** 13*41d61c82SJiaqing Zhao * @brief Converts boost::asio::ip::address to string 14*41d61c82SJiaqing Zhao * Will automatically convert IPv4-mapped IPv6 address back to IPv4. 15*41d61c82SJiaqing Zhao * 16*41d61c82SJiaqing Zhao * @param[in] ipAddr IP address to convert 17*41d61c82SJiaqing Zhao * 18*41d61c82SJiaqing Zhao * @return IP address string 19*41d61c82SJiaqing Zhao */ 20*41d61c82SJiaqing Zhao inline std::string toString(const boost::asio::ip::address& ipAddr) 21*41d61c82SJiaqing Zhao { 22*41d61c82SJiaqing Zhao if (ipAddr.is_v6() && ipAddr.to_v6().is_v4_mapped()) 23*41d61c82SJiaqing Zhao { 24*41d61c82SJiaqing Zhao return boost::asio::ip::make_address_v4(boost::asio::ip::v4_mapped, 25*41d61c82SJiaqing Zhao ipAddr.to_v6()) 26*41d61c82SJiaqing Zhao .to_string(); 27*41d61c82SJiaqing Zhao } 28*41d61c82SJiaqing Zhao return ipAddr.to_string(); 29*41d61c82SJiaqing Zhao } 30*41d61c82SJiaqing Zhao 31*41d61c82SJiaqing Zhao } // namespace ip_util 32*41d61c82SJiaqing Zhao } // namespace redfish 33