xref: /openbmc/bmcweb/features/redfish/include/utils/ip_utils.hpp (revision d5c80ad9c07b94465d8ea62d2b6f87c30cac765e)
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