summaryrefslogtreecommitdiffstats
path: root/usr.sbin
diff options
context:
space:
mode:
authorsobomax <sobomax@FreeBSD.org>2002-08-29 12:52:28 +0000
committersobomax <sobomax@FreeBSD.org>2002-08-29 12:52:28 +0000
commit1b5413df630ad344a5a866e4f975d1a6ecc97b6b (patch)
treebf6fa5bf3cde5d37361cdaf648e7b799b38c9f19 /usr.sbin
parentf3872b5db52561c99009ec5d27daca1d178a656d (diff)
downloadFreeBSD-src-1b5413df630ad344a5a866e4f975d1a6ecc97b6b.zip
FreeBSD-src-1b5413df630ad344a5a866e4f975d1a6ecc97b6b.tar.gz
Correctly handle ifr.ifr_flags/ifr.ifr_flagshigh like ifconfig(8) does.
MFC after: 1 day
Diffstat (limited to 'usr.sbin')
-rw-r--r--usr.sbin/gifconfig/gifconfig.c5
-rw-r--r--usr.sbin/ppp/iface.c9
2 files changed, 9 insertions, 5 deletions
diff --git a/usr.sbin/gifconfig/gifconfig.c b/usr.sbin/gifconfig/gifconfig.c
index b803236..e7fc1c0 100644
--- a/usr.sbin/gifconfig/gifconfig.c
+++ b/usr.sbin/gifconfig/gifconfig.c
@@ -454,14 +454,15 @@ setifflags(vname, value)
exit(1);
}
strncpy(ifr.ifr_name, name, sizeof (ifr.ifr_name));
- flags = ifr.ifr_flags;
+ flags = (ifr.ifr_flags & 0xffff) | (ifr.ifr_flagshigh << 16);
if (value < 0) {
value = -value;
flags &= ~value;
} else
flags |= value;
- ifr.ifr_flags = flags;
+ ifr.ifr_flags = flags & 0xffff;
+ ifr.ifr_flagshigh = flags >> 16;
if (ioctl(s, SIOCSIFFLAGS, (caddr_t)&ifr) < 0)
Perror(vname);
}
diff --git a/usr.sbin/ppp/iface.c b/usr.sbin/ppp/iface.c
index 05951d4..e29bf75 100644
--- a/usr.sbin/ppp/iface.c
+++ b/usr.sbin/ppp/iface.c
@@ -548,7 +548,7 @@ static int
iface_ChangeFlags(const char *ifname, int flags, int how)
{
struct ifreq ifrq;
- int s;
+ int s, new_flags;
s = ID0socket(PF_INET, SOCK_DGRAM, 0);
if (s < 0) {
@@ -565,11 +565,14 @@ iface_ChangeFlags(const char *ifname, int flags, int how)
close(s);
return 0;
}
+ new_flags = (ifrq.ifr_flags & 0xffff) | (ifrq.ifr_flagshigh << 16);
if (how == IFACE_ADDFLAGS)
- ifrq.ifr_flags |= flags;
+ new_flags |= flags;
else
- ifrq.ifr_flags &= ~flags;
+ new_flags &= ~flags;
+ ifrq.ifr_flags = new_flags & 0xffff;
+ ifrq.ifr_flagshigh = new_flags >> 16;
if (ID0ioctl(s, SIOCSIFFLAGS, &ifrq) < 0) {
log_Printf(LogERROR, "iface_ChangeFlags: ioctl(SIOCSIFFLAGS): %s\n",
OpenPOWER on IntegriCloud