ifconfig(8): Don't set network interface capabilities when there is no change.

A quick grep through the kernel code shows network drivers compute the
changed bits of network capabilities after a SIOCSIFCAP IOCTL(2) by
using the bitwise exclusive or operation. When the set capabilities
are equal to the already read capabilities, no action will be taken.

Let ifconfig(8) predict this case and skip the SIOCSIFCAP IOCTL(2)
system call.

Discussed with:	kib@ (revert change in case of issues)
Sponsored by:	NVIDIA Networking

(cherry picked from commit ad8f078f66)
This commit is contained in:
Hans Petter Selasky 2021-11-09 22:07:43 +01:00
parent a889d262a7
commit a8aaed1417

View file

@ -1243,6 +1243,9 @@ setifcap(const char *vname, int value, int s, const struct afswtch *afp)
} else
flags |= value;
flags &= ifr.ifr_reqcap;
/* Check for no change in capabilities. */
if (ifr.ifr_curcap == flags)
return;
ifr.ifr_reqcap = flags;
if (ioctl(s, SIOCSIFCAP, (caddr_t)&ifr) < 0)
Perror(vname);