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