diff -c of ifconfig.c

satz%srijoyce at sri-unix.UUCP satz%srijoyce at sri-unix.UUCP
Fri Jan 6 10:22:55 AEST 1984


From:  Greg Satz <satz at 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');
  }
  



More information about the Comp.unix.wizards mailing list