Lines 545-561
interface_set_mtu_priv(char *ifname, u_i
Link Here
|
545 |
{ |
545 |
{ |
546 |
struct ifreq ifr; |
546 |
struct ifreq ifr; |
547 |
int sock; |
547 |
int sock; |
|
|
548 |
u_int16_t old_mtu; |
548 |
|
549 |
|
549 |
if ((sock = socket(AF_INET, SOCK_DGRAM, 0)) == -1) |
550 |
if ((sock = socket(AF_INET, SOCK_DGRAM, 0)) == -1) |
550 |
error("Can't create socket"); |
551 |
error("Can't create socket"); |
551 |
|
552 |
|
552 |
memset(&ifr, 0, sizeof(ifr)); |
553 |
memset(&ifr, 0, sizeof(ifr)); |
|
|
554 |
old_mtu = 0; |
553 |
|
555 |
|
554 |
strlcpy(ifr.ifr_name, ifname, sizeof(ifr.ifr_name)); |
556 |
strlcpy(ifr.ifr_name, ifname, sizeof(ifr.ifr_name)); |
555 |
ifr.ifr_mtu = mtu; |
|
|
556 |
|
557 |
|
557 |
if (ioctl(sock, SIOCSIFMTU, &ifr) == -1) |
558 |
if (ioctl(sock, SIOCGIFMTU, (caddr_t)&ifr) == -1) |
558 |
warning("SIOCSIFMTU failed (%d): %s", mtu, |
559 |
warning("SIOCGIFMTU failed (%s): %s", ifname, |
559 |
strerror(errno)); |
560 |
strerror(errno)); |
|
|
561 |
else |
562 |
old_mtu = ifr.ifr_mtu; |
563 |
|
564 |
if (mtu != old_mtu) { |
565 |
ifr.ifr_mtu = mtu; |
566 |
|
567 |
if (ioctl(sock, SIOCSIFMTU, &ifr) == -1) |
568 |
warning("SIOCSIFMTU failed (%d): %s", mtu, |
569 |
strerror(errno)); |
570 |
} |
571 |
|
560 |
close(sock); |
572 |
close(sock); |
561 |
} |
573 |
} |