satz%srijoyce@sri-unix.UUCP (01/06/84)
From: Greg Satz <satz@srijoyce> ifconfig screwed up the command: ifconfig il0 hostname -trailers it would zero out the flag word instead of oring in the correct bit. *** ifconfig.c Sun Sep 25 18:05:11 1983 --- /a/satz/ifconfig.c Thu Jan 5 16:18:05 1984 *************** *** 1,3 #ifndef lint static char sccsid[] = "@(#)ifconfig.c 4.3 (Berkeley) 9/16/83"; #endif --- 1,4 ----- + #ifndef lint static char sccsid[] = "@(#)ifconfig.c 4.5 (Berkeley) 11/2/83"; #endif *************** *** 1,5 #ifndef lint ! static char sccsid[] = "@(#)ifconfig.c 4.3 (Berkeley) 9/16/83"; #endif #include <sys/types.h> --- 1,6 ----- #ifndef lint ! static char sccsid[] = "@(#)ifconfig.c 4.5 (Berkeley) 11/2/83"; #endif #include <sys/types.h> *************** *** 17,23 struct ifreq ifr; struct sockaddr_in sin = { AF_INET }; char name[30]; ! int flags; int s; int setifflags(), setifaddr(); --- 18,24 ----- struct ifreq ifr; struct sockaddr_in sin = { AF_INET }; char name[30]; ! short flags; int s; int setifflags(), setifaddr(); *************** *** 24,30 struct cmd { char *c_name; ! int c_parameter; int (*c_func)(); } cmds[] = { { "up", IFF_UP, setifflags } , --- 25,31 ----- struct cmd { char *c_name; ! short c_parameter; int (*c_func)(); } cmds[] = { { "up", IFF_UP, setifflags } , *************** *** 31,38 { "down", -IFF_UP, setifflags }, { "trailers", -IFF_NOTRAILERS,setifflags }, { "-trailers", IFF_NOTRAILERS, setifflags }, ! { "arp", IFF_NOARP, setifflags }, ! { "-arp", -IFF_NOARP, setifflags }, #ifdef notdef #define EN_SWABIPS 0x100 { "swabips", EN_SWABIPS, setifflags }, --- 32,41 ----- { "down", -IFF_UP, setifflags }, { "trailers", -IFF_NOTRAILERS,setifflags }, { "-trailers", IFF_NOTRAILERS, setifflags }, ! { "arp", -IFF_NOARP, setifflags }, ! { "-arp", IFF_NOARP, setifflags }, ! { "debug", IFF_DEBUG, setifflags }, ! { "-debug", -IFF_DEBUG, setifflags }, #ifdef notdef #define EN_SWABIPS 0x100 { "swabips", EN_SWABIPS, setifflags }, *************** *** 87,93 /*ARGSUSED*/ setifaddr(addr, param) char *addr; ! int param; { getaddr(addr, (struct sockaddr_in *)&ifr.ifr_addr); --- 90,96 ----- /*ARGSUSED*/ setifaddr(addr, param) char *addr; ! short param; { getaddr(addr, (struct sockaddr_in *)&ifr.ifr_addr); *************** *** 98,104 setifflags(vname, value) char *vname; ! int value; { if (value < 0) { --- 101,107 ----- setifflags(vname, value) char *vname; ! short value; { strncpy(ifr.ifr_name, name, sizeof (ifr.ifr_name)); *************** *** 101,106 int value; { if (value < 0) { value = -value; ifr.ifr_flags = (flags &~ value); --- 104,115 ----- short value; { + strncpy(ifr.ifr_name, name, sizeof (ifr.ifr_name)); + if (ioctl(s, SIOCGIFFLAGS, (caddr_t)&ifr) < 0) { + Perror("ioctl (SIOCGIFFLAGS)"); + exit(1); + } + flags = ifr.ifr_flags; if (value < 0) { value = -value; flags &= ~value; *************** *** 103,109 if (value < 0) { value = -value; ! ifr.ifr_flags = (flags &~ value); } else ifr.ifr_flags |= value; strncpy(ifr.ifr_name, name, sizeof (ifr.ifr_name)); --- 112,118 ----- flags = ifr.ifr_flags; if (value < 0) { value = -value; ! flags &= ~value; } else flags |= value; ifr.ifr_flags = flags; *************** *** 105,111 value = -value; ifr.ifr_flags = (flags &~ value); } else ! ifr.ifr_flags |= value; strncpy(ifr.ifr_name, name, sizeof (ifr.ifr_name)); if (ioctl(s, SIOCSIFFLAGS, (caddr_t)&ifr) < 0) Perror(vname); --- 114,121 ----- value = -value; flags &= ~value; } else ! flags |= value; ! ifr.ifr_flags = flags; strncpy(ifr.ifr_name, name, sizeof (ifr.ifr_name)); if (ioctl(s, SIOCSIFFLAGS, (caddr_t)&ifr) < 0) Perror(vname); *************** *** 121,127 sin = (struct sockaddr_in *)&ifr.ifr_addr; printf("%s: %s ", name, inet_ntoa(sin->sin_addr)); #define IFFBITS \ ! "\020\1UP\2BROADCAST\3DEBUG\4ROUTE\5POINTOPOINT\6NOTRAILERS\7RUNNING" printb("flags", flags, IFFBITS); putchar('\n'); } --- 131,137 ----- sin = (struct sockaddr_in *)&ifr.ifr_addr; printf("%s: %s ", name, inet_ntoa(sin->sin_addr)); #define IFFBITS \ ! "\020\1UP\2BROADCAST\3DEBUG\4ROUTE\5POINTOPOINT\6NOTRAILERS\7RUNNING\10NOARP" printb("flags", flags, IFFBITS); putchar('\n'); }