Browse Source

[master] Fixing use of IfacePtr in iface_mgr_linux.cc and iface_mgr_sun.cc.

This is a fix after merge of #3715.
Marcin Siodelski 10 years ago
parent
commit
5796c0f0e6
2 changed files with 28 additions and 28 deletions
  1. 7 7
      src/lib/dhcp/iface_mgr_linux.cc
  2. 21 21
      src/lib/dhcp/iface_mgr_sun.cc

+ 7 - 7
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<const char*>(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<const uint8_t*>(RTA_DATA(attribs_table[IFLA_ADDRESS])),
-                         RTA_PAYLOAD(attribs_table[IFLA_ADDRESS]));
+            iface->setMac(static_cast<const uint8_t*>(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);
     }
 

+ 21 - 21
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<string, Iface> ifaceLst;
-    ifaceLst::iterator iface_iter;
-    ifaceLst ifaces;
+    typedef map<string, IfacePtr> 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<string, Iface>(ifname, iface));
+        IfacePtr iface(new Iface(ifname, ifindex));
+        iface->setFlags(ifptr->ifa_flags);
+        ifaces.insert(pair<string, IfacePtr>(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<struct sockaddr_dl *>(ifptr->ifa_addr);
             ptr = reinterpret_cast<uint8_t *>(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<struct sockaddr_in6 *>(ifptr->ifa_addr);
-            ptr = reinterpret_cast<uint8_t *>(& adata->sin6_addr);
+            ptr = reinterpret_cast<uint8_t *>(&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<struct sockaddr_in *>(ifptr->ifa_addr);
-            ptr = reinterpret_cast<uint8_t *>(& adata->sin_addr);
+            ptr = reinterpret_cast<uint8_t *>(&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);
     }
 }