static char sccsid
[] = "@(#)ifconfig.c 4.7 (Berkeley) %G%";
struct sockaddr_in sin
= { AF_INET
};
int setifflags(), setifaddr();
{ "up", IFF_UP
, setifflags
} ,
{ "down", -IFF_UP
, setifflags
},
{ "trailers", -IFF_NOTRAILERS
,setifflags
},
{ "-trailers", IFF_NOTRAILERS
, setifflags
},
{ "arp", -IFF_NOARP
, setifflags
},
{ "-arp", IFF_NOARP
, setifflags
},
{ "local", IFF_LOCAL
, setifflags
},
{ "-local", -IFF_LOCAL
, setifflags
},
{ "debug", IFF_DEBUG
, setifflags
},
{ "-debug", -IFF_DEBUG
, setifflags
},
{ "swabips", EN_SWABIPS
, setifflags
},
{ "-swabips", -EN_SWABIPS
, setifflags
},
fprintf(stderr
, "usage: ifconfig interface %s %s %s\n",
"[ address ] [ up ] [ down ]",
"[ trailers | -trailers ]",
s
= socket(AF_INET
, SOCK_DGRAM
, 0);
perror("ifconfig: socket");
strncpy(ifr
.ifr_name
, name
, sizeof (ifr
.ifr_name
));
if (ioctl(s
, SIOCGIFFLAGS
, (caddr_t
)&ifr
) < 0) {
Perror("ioctl (SIOCGIFFLAGS)");
for (p
= cmds
; p
->c_name
; p
++)
if (strcmp(*argv
, p
->c_name
) == 0)
(*p
->c_func
)(*argv
, p
->c_parameter
);
strncpy(ifr
.ifr_name
, name
, sizeof (ifr
.ifr_name
));
ifr
.ifr_addr
= *(struct sockaddr
*) &sin
;
if (ioctl(s
, SIOCSIFADDR
, (caddr_t
)&ifr
) < 0)
Perror("ioctl (SIOCSIFADDR)");
* Delay the ioctl to set the interface addr until flags are all set.
* The address interpretation may depend on the flags,
* and the flags may change when the address is set.
strncpy(ifr
.ifr_name
, name
, sizeof (ifr
.ifr_name
));
if (ioctl(s
, SIOCSIFFLAGS
, (caddr_t
)&ifr
) < 0)
int flags
= ifr
.ifr_flags
;
strncpy(ifr
.ifr_name
, name
, sizeof (ifr
.ifr_name
));
if (ioctl(s
, SIOCGIFADDR
, (caddr_t
)&ifr
) < 0)
Perror("ioctl (SIOCGIFADDR)");
sin
= (struct sockaddr_in
*)&ifr
.ifr_addr
;
printf("%s: %s ", name
, inet_ntoa(sin
->sin_addr
));
"\020\1UP\2BROADCAST\3DEBUG\4ROUTE\5POINTOPOINT\6NOTRAILERS\7RUNNING\10NOARP\
printb("flags", flags
, IFFBITS
); putchar('\n');
fprintf(stderr
, "ifconfig: ");
fprintf(stderr
, "%s: ", cmd
);
fprintf(stderr
, "no such interface\n");
fprintf(stderr
, "%s: permission denied\n");
struct in_addr
inet_makeaddr();
sin
->sin_family
= hp
->h_addrtype
;
bcopy(hp
->h_addr
, (char *)&sin
->sin_addr
, hp
->h_length
);
sin
->sin_family
= np
->n_addrtype
;
sin
->sin_addr
= inet_makeaddr(np
->n_net
, INADDR_ANY
);
sin
->sin_family
= AF_INET
;
sin
->sin_addr
.s_addr
= val
;
sin
->sin_addr
= inet_makeaddr(val
, INADDR_ANY
);
fprintf(stderr
, "%s: bad value\n", s
);
* Print a value a la the %b format of the kernel's printf
register unsigned short v
;
for (; (c
= *bits
) > 32; bits
++)
for (; *bits
> 32; bits
++)