TUNSIFINFO now expects IFF_MULTICAST to be OR'd with either IFF_POINTOPOINT

or IFF_BROADCAST.  If it's not, the IFF_MULTICAST is removed.

This is in line with how NetBSD & OpenBSD do it.
This commit is contained in:
brian 2001-08-25 09:12:57 +00:00
parent 72b8990119
commit 72dc54c8ff

View File

@ -572,14 +572,12 @@ tunioctl(dev_t dev, u_long cmd, caddr_t data, int flag, struct proc *p)
if (tp->tun_if.if_flags & IFF_UP)
return(EBUSY);
switch (*(int *)data) {
switch (*(int *)data & ~IFF_MULTICAST) {
case IFF_POINTOPOINT:
tp->tun_if.if_flags |= IFF_POINTOPOINT;
tp->tun_if.if_flags &= ~IFF_BROADCAST;
break;
case IFF_BROADCAST:
tp->tun_if.if_flags &= ~IFF_POINTOPOINT;
tp->tun_if.if_flags |= IFF_BROADCAST;
tp->tun_if.if_flags &=
~(IFF_BROADCAST|IFF_POINTOPOINT|IFF_MULTICAST);
tp->tun_if.if_flags |= *(int *)data;
break;
default:
return(EINVAL);