|
@@ -97,10 +97,10 @@ LinuxEthernetTap::LinuxEthernetTap(
|
|
|
std::string devmapbuf;
|
|
|
Dictionary devmap;
|
|
|
if (OSUtils::readFile((_homePath + ZT_PATH_SEPARATOR_S + "devicemap").c_str(),devmapbuf)) {
|
|
|
- devmap.fromString(devmapbuf);
|
|
|
- std::string desiredDevice(devmap.get(nwids,""));
|
|
|
- if (desiredDevice.length() > 2) {
|
|
|
- Utils::scopy(ifr.ifr_name,sizeof(ifr.ifr_name),desiredDevice.c_str());
|
|
|
+ devmap.load(devmapbuf.c_str());
|
|
|
+ char desiredDevice[128];
|
|
|
+ if (devmap.get(nwids,desiredDevice,sizeof(desiredDevice)) > 0) {
|
|
|
+ Utils::scopy(ifr.ifr_name,sizeof(ifr.ifr_name),desiredDevice);
|
|
|
Utils::snprintf(procpath,sizeof(procpath),"/proc/sys/net/ipv4/conf/%s",ifr.ifr_name);
|
|
|
recalledDevice = (stat(procpath,&sbuf) != 0);
|
|
|
}
|
|
@@ -174,8 +174,9 @@ LinuxEthernetTap::LinuxEthernetTap(
|
|
|
|
|
|
(void)::pipe(_shutdownSignalPipe);
|
|
|
|
|
|
- devmap[nwids] = _dev;
|
|
|
- OSUtils::writeFile((_homePath + ZT_PATH_SEPARATOR_S + "devicemap").c_str(),devmap.toString());
|
|
|
+ devmap.erase(nwids);
|
|
|
+ devmap.add(nwids,_dev.c_str());
|
|
|
+ OSUtils::writeFile((_homePath + ZT_PATH_SEPARATOR_S + "devicemap").c_str(),(const void *)devmap.data(),devmap.sizeBytes());
|
|
|
|
|
|
_thread = Thread::start(this);
|
|
|
}
|