diff options
author | Patrik Flykt <patrik.flykt@linux.intel.com> | 2012-08-28 10:51:30 +0300 |
---|---|---|
committer | Patrik Flykt <patrik.flykt@linux.intel.com> | 2012-08-29 10:57:15 +0300 |
commit | 4e24ba00aca6a3159e9ccb017f202321947967b8 (patch) | |
tree | b2c91e1c2009de2149e44c1308fd9cd3115c8a27 /src | |
parent | d40a1df675ff776b869c6e222d10219f5ebbe01d (diff) | |
download | connman-4e24ba00aca6a3159e9ccb017f202321947967b8.tar.gz connman-4e24ba00aca6a3159e9ccb017f202321947967b8.tar.bz2 connman-4e24ba00aca6a3159e9ccb017f202321947967b8.zip |
inet: Properly remove IPv4 address and set interface down
The interface was not properly set down and thus the services
were not removed.
Fixes BMC#25659
Diffstat (limited to 'src')
-rw-r--r-- | src/inet.c | 8 |
1 files changed, 5 insertions, 3 deletions
@@ -311,7 +311,7 @@ done: int connman_inet_ifdown(int index) { - struct ifreq ifr; + struct ifreq ifr, addr_ifr; struct sockaddr_in *addr; int sk, err; @@ -332,9 +332,11 @@ int connman_inet_ifdown(int index) goto done; } - addr = (struct sockaddr_in *)&ifr.ifr_addr; + memset(&addr_ifr, 0, sizeof(addr_ifr)); + memcpy(&addr_ifr.ifr_name, &ifr.ifr_name, sizeof(ifr.ifr_name)); + addr = (struct sockaddr_in *)&addr_ifr.ifr_addr; addr->sin_family = AF_INET; - if (ioctl(sk, SIOCSIFADDR, &ifr) < 0) + if (ioctl(sk, SIOCSIFADDR, &addr_ifr) < 0) connman_warn("Could not clear IPv4 address index %d", index); if (!(ifr.ifr_flags & IFF_UP)) { |