summaryrefslogtreecommitdiff
path: root/osnet/LinuxEthernetTap.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'osnet/LinuxEthernetTap.cpp')
-rw-r--r--osnet/LinuxEthernetTap.cpp9
1 files changed, 7 insertions, 2 deletions
diff --git a/osnet/LinuxEthernetTap.cpp b/osnet/LinuxEthernetTap.cpp
index 7e20b75f..1bd066c3 100644
--- a/osnet/LinuxEthernetTap.cpp
+++ b/osnet/LinuxEthernetTap.cpp
@@ -224,8 +224,13 @@ bool LinuxEthernetTap::addIP(const InetAddress &ip)
long cpid = (long)vfork();
if (cpid == 0) {
Utils::redirectUnixOutputs("/dev/null",(const char *)0);
- ::execl("/sbin/ip","/sbin/ip","addr","add",ip.toString().c_str(),"dev",_dev.c_str(),(const char *)0);
- ::execl("/usr/sbin/ip","/usr/sbin/ip","addr","add",ip.toString().c_str(),"dev",_dev.c_str(),(const char *)0);
+ if (ip.isV4()) {
+ ::execl("/sbin/ip","/sbin/ip","addr","add",ip.toString().c_str(),"broadcast",ip.broadcast().toIpString().c_str(),"dev",_dev.c_str(),(const char *)0);
+ ::execl("/usr/sbin/ip","/usr/sbin/ip","addr","add",ip.toString().c_str(),"broadcast",ip.broadcast().toIpString().c_str(),"dev",_dev.c_str(),(const char *)0);
+ } else {
+ ::execl("/sbin/ip","/sbin/ip","addr","add",ip.toString().c_str(),"dev",_dev.c_str(),(const char *)0);
+ ::execl("/usr/sbin/ip","/usr/sbin/ip","addr","add",ip.toString().c_str(),"dev",_dev.c_str(),(const char *)0);
+ }
::_exit(-1);
} else if (cpid > 0) {
int exitcode = -1;