From: Marcin Siodelski Date: Fri, 13 Mar 2015 18:12:39 +0000 (+0100) Subject: [master] Fixing use of IfacePtr in iface_mgr_linux.cc and iface_mgr_sun.cc. X-Git-Tag: trac3764_base~7 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=5796c0f0e657d9849ebf263ca42cd59ff2bb4b1f;p=thirdparty%2Fkea.git [master] Fixing use of IfacePtr in iface_mgr_linux.cc and iface_mgr_sun.cc. This is a fix after merge of #3715. --- diff --git a/src/lib/dhcp/iface_mgr_linux.cc b/src/lib/dhcp/iface_mgr_linux.cc index 783c675bee..4409a25578 100644 --- a/src/lib/dhcp/iface_mgr_linux.cc +++ b/src/lib/dhcp/iface_mgr_linux.cc @@ -1,4 +1,4 @@ -// Copyright (C) 2011-2014 Internet Systems Consortium, Inc. ("ISC") +// Copyright (C) 2011-2015 Internet Systems Consortium, Inc. ("ISC") // // Permission to use, copy, modify, and/or distribute this software for any // purpose with or without fee is hereby granted, provided that the above @@ -474,22 +474,22 @@ void IfaceMgr::detectIfaces() { // into three separate steps for easier debugging. const char* tmp = static_cast(RTA_DATA(attribs_table[IFLA_IFNAME])); string iface_name(tmp); // <--- bogus valgrind warning here - Iface iface = Iface(iface_name, interface_info->ifi_index); + IfacePtr iface(new Iface(iface_name, interface_info->ifi_index)); - iface.setHWType(interface_info->ifi_type); - iface.setFlags(interface_info->ifi_flags); + iface->setHWType(interface_info->ifi_type); + iface->setFlags(interface_info->ifi_flags); // Does interface have LL_ADDR? if (attribs_table[IFLA_ADDRESS]) { - iface.setMac(static_cast(RTA_DATA(attribs_table[IFLA_ADDRESS])), - RTA_PAYLOAD(attribs_table[IFLA_ADDRESS])); + iface->setMac(static_cast(RTA_DATA(attribs_table[IFLA_ADDRESS])), + RTA_PAYLOAD(attribs_table[IFLA_ADDRESS])); } else { // Tunnels can have no LL_ADDR. RTA_PAYLOAD doesn't check it and // try to dereference it in this manner } - nl.ipaddrs_get(iface, addr_info); + nl.ipaddrs_get(*iface, addr_info); ifaces_.push_back(iface); } diff --git a/src/lib/dhcp/iface_mgr_sun.cc b/src/lib/dhcp/iface_mgr_sun.cc index 8a5c34e354..b35154b943 100644 --- a/src/lib/dhcp/iface_mgr_sun.cc +++ b/src/lib/dhcp/iface_mgr_sun.cc @@ -1,4 +1,4 @@ -// Copyright (C) 2011, 2013-2014 Internet Systems Consortium, Inc. ("ISC") +// Copyright (C) 2011, 2013-2015 Internet Systems Consortium, Inc. ("ISC") // // Permission to use, copy, modify, and/or distribute this software for any // purpose with or without fee is hereby granted, provided that the above @@ -39,19 +39,20 @@ namespace dhcp { /// only, as earlier versions did not support getifaddrs() API. void IfaceMgr::detectIfaces() { - struct ifaddrs * iflist = 0, * ifptr = 0; + struct ifaddrs* iflist = 0;// The whole interface list + struct ifaddrs* ifptr = 0; // The interface we're processing now // Gets list of ifaddrs struct - if(getifaddrs(& iflist) != 0) { + if(getifaddrs(&iflist) != 0) { isc_throw(Unexpected, "Network interfaces detection failed."); } - typedef std::map ifaceLst; - ifaceLst::iterator iface_iter; - ifaceLst ifaces; + typedef map IfaceLst; + IfaceLst::iterator iface_iter; + IfaceLst ifaces; // First lookup for getting interfaces ... - for(ifptr = iflist; ifptr != 0; ifptr = ifptr->ifa_next) { + for (ifptr = iflist; ifptr != 0; ifptr = ifptr->ifa_next) { const char * ifname = ifptr->ifa_name; uint ifindex = 0; @@ -66,53 +67,52 @@ IfaceMgr::detectIfaces() { continue; } - Iface iface(ifname, ifindex); - iface.setFlags(ifptr->ifa_flags); - ifaces.insert(pair(ifname, iface)); + IfacePtr iface(new Iface(ifname, ifindex)); + iface->setFlags(ifptr->ifa_flags); + ifaces.insert(pair(ifname, iface)); } // Second lookup to get MAC and IP addresses for (ifptr = iflist; ifptr != 0; ifptr = ifptr->ifa_next) { - iface_iter = ifaces.find(ifptr->ifa_name); if (iface_iter == ifaces.end()) { continue; } // Common byte pointer for following data const uint8_t * ptr = 0; - if (ifptr->ifa_addr->sa_family == AF_LINK) { + if(ifptr->ifa_addr->sa_family == AF_LINK) { // HWAddr struct sockaddr_dl * ldata = reinterpret_cast(ifptr->ifa_addr); ptr = reinterpret_cast(LLADDR(ldata)); - iface_iter->second.setHWType(ldata->sdl_type); - iface_iter->second.setMac(ptr, ldata->sdl_alen); - } else if (ifptr->ifa_addr->sa_family == AF_INET6) { + iface_iter->second->setHWType(ldata->sdl_type); + iface_iter->second->setMac(ptr, ldata->sdl_alen); + } else if(ifptr->ifa_addr->sa_family == AF_INET6) { // IPv6 Addr struct sockaddr_in6 * adata = reinterpret_cast(ifptr->ifa_addr); - ptr = reinterpret_cast(& adata->sin6_addr); + ptr = reinterpret_cast(&adata->sin6_addr); IOAddress a = IOAddress::fromBytes(AF_INET6, ptr); - iface_iter->second.addAddress(a); + iface_iter->second->addAddress(a); } else { // IPv4 Addr struct sockaddr_in * adata = reinterpret_cast(ifptr->ifa_addr); - ptr = reinterpret_cast(& adata->sin_addr); + ptr = reinterpret_cast(&adata->sin_addr); IOAddress a = IOAddress::fromBytes(AF_INET, ptr); - iface_iter->second.addAddress(a); + iface_iter->second->addAddress(a); } } freeifaddrs(iflist); // Interfaces registering - for (ifaceLst::const_iterator iface_iter = ifaces.begin(); + for(IfaceLst::const_iterator iface_iter = ifaces.begin(); iface_iter != ifaces.end(); ++iface_iter) { - ifaces_.push_back(iface_iter->second); + addInterface(iface_iter->second); } }