- 论坛徽章:
- 0
|
原帖由 qks5201314 于 2008-6-28 13:21 发表 ![]()
版主,我不知道你的那个函数是在哪里的,不知道头文件是什么的?能告诉一下吗?或者告诉我去哪找也行;谢谢
ifconfig源码好像有,在net-tools包里![](static/image/smiley/default/icon_mrgreen.gif)
//ifconfig.c
/* Fetch the inteface configuration from the kernel. */
static int
if_fetch(char *ifname, struct interface *ife)
{
struct ifreq ifr;
memset((char *) ife, 0, sizeof(struct interface));
strcpy(ife->name, ifname);
strcpy(ifr.ifr_name, ifname);
if (ioctl(skfd, SIOCGIFFLAGS, &ifr) < 0) return(-1);
ife->flags = ifr.ifr_flags;
strcpy(ifr.ifr_name, ifname);
if (ioctl(inet_sock, SIOCGIFADDR, &ifr) < 0) {
memset(&ife->addr, 0, sizeof(struct sockaddr));
} else ife->addr = ifr.ifr_addr;
strcpy(ifr.ifr_name, ifname);
if (ioctl(skfd, SIOCGIFHWADDR, &ifr) < 0) {
memset(ife->hwaddr, 0, 32);
} else memcpy(ife->hwaddr,ifr.ifr_hwaddr.sa_data,8);
ife->type=ifr.ifr_hwaddr.sa_family;
strcpy(ifr.ifr_name, ifname);
if (ioctl(skfd, SIOCGIFMETRIC, &ifr) < 0) {
ife->metric = 0;
} else ife->metric = ifr.ifr_metric;
strcpy(ifr.ifr_name, ifname);
if (ioctl(skfd, SIOCGIFMTU, &ifr) < 0) {
ife->mtu = 0;
} else ife->mtu = ifr.ifr_mtu;
strcpy(ifr.ifr_name, ifname);
if (ioctl(skfd, SIOCGIFMAP, &ifr) < 0) {
memset(&ife->map, 0, sizeof(struct ifmap));
} else memcpy(&ife->map,&ifr.ifr_map,sizeof(struct ifmap));
strcpy(ifr.ifr_name, ifname);
if (ioctl(inet_sock, SIOCGIFDSTADDR, &ifr) < 0) {
memset(&ife->dstaddr, 0, sizeof(struct sockaddr));
} else ife->dstaddr = ifr.ifr_dstaddr;
strcpy(ifr.ifr_name, ifname);
if (ioctl(inet_sock, SIOCGIFBRDADDR, &ifr) < 0) {
memset(&ife->broadaddr, 0, sizeof(struct sockaddr));
} else ife->broadaddr = ifr.ifr_broadaddr;
strcpy(ifr.ifr_name, ifname);
if (ioctl(inet_sock, SIOCGIFNETMASK, &ifr) < 0) {
memset(&ife->netmask, 0, sizeof(struct sockaddr));
} else ife->netmask = ifr.ifr_netmask; |
[ 本帖最后由 贺兰云天 于 2008-6-28 14:47 编辑 ] |
|