return true;
}
-static bool netConfigureVs(nsjconf_t* nsjconf) {
+static bool ifaceConfig(const std::string& iface, const std::string& ip, const std::string& mask,
+ const std::string& gw) {
struct ifreq ifr;
memset(&ifr, '\0', sizeof(ifr));
- snprintf(ifr.ifr_name, IF_NAMESIZE, "%s", IFACE_NAME);
+ snprintf(ifr.ifr_name, IF_NAMESIZE, "%s", iface.c_str());
struct in_addr addr;
int sock = socket(AF_INET, SOCK_STREAM, IPPROTO_IP);
return false;
}
- if (inet_pton(AF_INET, nsjconf->iface_vs_ip.c_str(), &addr) != 1) {
- PLOG_E("Cannot convert '%s' into an IPv4 address", nsjconf->iface_vs_ip.c_str());
+ if (inet_pton(AF_INET, ip.c_str(), &addr) != 1) {
+ PLOG_E("Cannot convert '%s' into an IPv4 address", ip.c_str());
close(sock);
return false;
}
if (addr.s_addr == INADDR_ANY) {
- LOG_D("IPv4 address for interface '%s' not set", IFACE_NAME);
+ LOG_D("IPv4 address for interface '%s' not set", iface.c_str());
close(sock);
return true;
}
sa->sin_family = AF_INET;
sa->sin_addr = addr;
if (ioctl(sock, SIOCSIFADDR, &ifr) == -1) {
- PLOG_E("ioctl(iface='%s', SIOCSIFADDR, '%s')", IFACE_NAME,
- nsjconf->iface_vs_ip.c_str());
+ PLOG_E("ioctl(iface='%s', SIOCSIFADDR, '%s')", iface.c_str(), ip.c_str());
close(sock);
return false;
}
- if (inet_pton(AF_INET, nsjconf->iface_vs_nm.c_str(), &addr) != 1) {
- PLOG_E("Cannot convert '%s' into a IPv4 netmask", nsjconf->iface_vs_nm.c_str());
+ if (inet_pton(AF_INET, mask.c_str(), &addr) != 1) {
+ PLOG_E("Cannot convert '%s' into a IPv4 netmask", mask.c_str());
close(sock);
return false;
}
sa->sin_family = AF_INET;
sa->sin_addr = addr;
if (ioctl(sock, SIOCSIFNETMASK, &ifr) == -1) {
- PLOG_E("ioctl(iface='%s', SIOCSIFNETMASK, '%s')", IFACE_NAME,
- nsjconf->iface_vs_nm.c_str());
+ PLOG_E("ioctl(iface='%s', SIOCSIFNETMASK, '%s')", iface.c_str(), mask.c_str());
close(sock);
return false;
}
- if (!ifaceUp(IFACE_NAME)) {
+ if (!ifaceUp(iface.c_str())) {
close(sock);
return false;
}
- if (inet_pton(AF_INET, nsjconf->iface_vs_gw.c_str(), &addr) != 1) {
- PLOG_E("Cannot convert '%s' into a IPv4 GW address", nsjconf->iface_vs_gw.c_str());
+ if (inet_pton(AF_INET, gw.c_str(), &addr) != 1) {
+ PLOG_E("Cannot convert '%s' into a IPv4 GW address", gw.c_str());
close(sock);
return false;
}
if (addr.s_addr == INADDR_ANY) {
- LOG_D("Gateway address for '%s' is not set", IFACE_NAME);
+ LOG_D("Gateway address for '%s' is not set", iface.c_str());
close(sock);
return true;
}
sgate->sin_addr = addr;
rt.rt_flags = RTF_UP | RTF_GATEWAY;
- char rt_dev[] = IFACE_NAME;
+ char rt_dev[IF_NAMESIZE];
+ snprintf(rt_dev, sizeof(rt_dev), "%s", iface.c_str());
rt.rt_dev = rt_dev;
if (ioctl(sock, SIOCADDRT, &rt) == -1) {
- PLOG_E("ioctl(SIOCADDRT, '%s')", nsjconf->iface_vs_gw.c_str());
+ PLOG_E("ioctl(SIOCADDRT, '%s')", gw.c_str());
close(sock);
return false;
}
if (!nsjconf->clone_newnet) {
return true;
}
- if (nsjconf->iface_lo) {
- if (!ifaceUp("lo")) {
- return false;
- }
+ if (nsjconf->iface_lo && !ifaceUp("lo")) {
+ return false;
}
- if (!nsjconf->iface_vs.empty()) {
- if (!netConfigureVs(nsjconf)) {
- return false;
- }
+ if (!nsjconf->iface_vs.empty() && !ifaceConfig(IFACE_NAME, nsjconf->iface_vs_ip,
+ nsjconf->iface_vs_nm, nsjconf->iface_vs_gw)) {
+ return false;
}
return true;
}