diff --git a/services/ethernetmanager/include/dev_interface_state.h b/services/ethernetmanager/include/dev_interface_state.h index c84feffa96bd2375347bf3ec2e4ef5c4c5f6fd65..d19c930abb8d7d79016f2cb9554c3c9f9e992433 100644 --- a/services/ethernetmanager/include/dev_interface_state.h +++ b/services/ethernetmanager/include/dev_interface_state.h @@ -77,6 +77,7 @@ private: INetAddr &targetNetAddr); void GetRoutePrefixlen(const std::string &bySrcAddr, const std::vector &fromAddrList, INetAddr &targetNetAddr); + uint8_t GetIpType(const std::string ipAddr); private: ConnLinkState connLinkState_ = UNREGISTERED; diff --git a/services/ethernetmanager/src/dev_interface_state.cpp b/services/ethernetmanager/src/dev_interface_state.cpp index c4df40f8886179f128ce22ef6c91aee493ccead4..f5925d5ada35d524d1f27ee78da845ad3a0ca085 100644 --- a/services/ethernetmanager/src/dev_interface_state.cpp +++ b/services/ethernetmanager/src/dev_interface_state.cpp @@ -239,6 +239,7 @@ void DevInterfaceState::UpdateLinkInfo() Route route; route.iface_ = devName_; route.destination_ = netAddr; + route.destination_.type_ = GetIpType(netAddr.address_); GetTargetNetAddrWithSameFamily(netAddr.address_, ifCfg_->ipStatic_.gatewayList_, route.gateway_); linkInfo_->routeList_.push_back(route); } @@ -273,6 +274,7 @@ void DevInterfaceState::UpdateLanLinkInfo() Route route; route.iface_ = devName_; route.destination_ = netAddr; + route.destination_.type_ = GetIpType(netAddr.address_); GetRoutePrefixlen(netAddr.address_, ifCfg_->ipStatic_.netMaskList_, route.destination_); GetTargetNetAddrWithSameFamily(netAddr.address_, ifCfg_->ipStatic_.gatewayList_, route.gateway_); linkInfo_->routeList_.push_back(route); @@ -303,6 +305,7 @@ void DevInterfaceState::UpdateLanLinkInfo(const sptr &confi Route routeStc; routeStc.iface_ = devName_; routeStc.destination_ = routeAddr; + routeStc.destination_.type_ = GetIpType(routeAddr.address_); GetRoutePrefixlen(routeAddr.address_, config->netMaskList_, routeStc.destination_); GetTargetNetAddrWithSameFamily(routeAddr.address_, config->gatewayList_, routeStc.gateway_); linkInfo_->routeList_.push_back(routeStc); @@ -335,6 +338,7 @@ void DevInterfaceState::UpdateLinkInfo(const sptr &config) Route routeStc; routeStc.iface_ = devName_; routeStc.destination_ = routeAddr; + routeStc.destination_.type_ = GetIpType(routeAddr.address_); GetTargetNetAddrWithSameFamily(routeAddr.address_, config->gatewayList_, routeStc.gateway_); linkInfo_->routeList_.push_back(routeStc); } @@ -371,7 +375,7 @@ void DevInterfaceState::CreateLocalRoute(const std::string &iface, const std::ve : GetIpv4Prefix(ipAddr.address_, netMaskList); Route localRoute; localRoute.iface_ = iface; - localRoute.destination_.type_ = family; + localRoute.destination_.type_ = GetIpType(ipAddr.address_); localRoute.destination_.address_ = routeAddr; localRoute.destination_.prefixlen_ = ipAddr.prefixlen_; localRoute.gateway_.address_ = (family == AF_INET) ? DEFAULT_ROUTE_ADDR : ""; @@ -467,5 +471,17 @@ void DevInterfaceState::GetDumpInfo(std::string &info) data.append(TAB + TAB + "BearerType :" + std::to_string(bearerType_) + "\n"); info.append(data); } + +uint8_t DevInterfaceState::GetIpType(const std::string ipAddr) +{ + auto family = CommonUtils::GetAddrFamily(ipAddr); + if (family == AF_INET) { + return INetAddr::IpType::IPV4; + } else if (family == AF_INET6) { + return INetAddr::IpType::IPV6; + } else { + return INetAddr::IpType::UNKNOWN; + } +} } // namespace NetManagerStandard } // namespace OHOS diff --git a/test/ethernetmanager/unittest/ethernet_manager_test/dev_interface_state_test.cpp b/test/ethernetmanager/unittest/ethernet_manager_test/dev_interface_state_test.cpp index 67915522e68f83a25375883eded5cb2a5b45fb4b..fc0cda0af1093444d56229adcafa62b7e9265fb4 100644 --- a/test/ethernetmanager/unittest/ethernet_manager_test/dev_interface_state_test.cpp +++ b/test/ethernetmanager/unittest/ethernet_manager_test/dev_interface_state_test.cpp @@ -347,5 +347,16 @@ HWTEST_F(DevInterfaceStateTest, GetDumpInfoTest001, TestSize.Level0) devInterfaceState.GetDumpInfo(info); EXPECT_NE(info, ""); } + +HWTEST_F(DevInterfaceStateTest, GetIpType001, TestSize.Level0) +{ + DevInterfaceState devInterfaceState; + std::string ip1 = "192.168.1.1"; + EXPECT_EQ(devInterfaceState.GetIpType(ip1), 1); + std::string ip2 = "::1"; + EXPECT_EQ(devInterfaceState.GetIpType(ip2), 2); + std::string ip3 = "wrong ip"; + EXPECT_EQ(devInterfaceState.GetIpType(ip3), 0); +} } // namespace NetManagerStandard } // namespace OHOS \ No newline at end of file