C语言中的ifup(8)等效代码

C语言中的ifup(8)等效代码,c,linux,C,Linux,我一直在搜索ifup的源代码,但找不到任何源代码。相反,我做了一点修改,得到了以下代码: int ifup(char interface[]) { struct ifreq ifr[64]; struct ifconf ifc; int i, fd; int numif; int shaper; if ((fd = socket(AF_INET, SOCK_DGRAM, 0)) < 0) { fprintf(stderr,

我一直在搜索
ifup
的源代码,但找不到任何源代码。相反,我做了一点修改,得到了以下代码:

int ifup(char interface[])
{
    struct ifreq ifr[64];
    struct ifconf ifc;
    int i, fd;
    int numif;
    int shaper;

    if ((fd = socket(AF_INET, SOCK_DGRAM, 0)) < 0) {
        fprintf(stderr, "ifdown: ");
        perror("socket");
        return -1;
    }
    ifc.ifc_len = sizeof(ifr);
    ifc.ifc_req = ifr;

    if (ioctl(fd, SIOCGIFCONF, &ifc) < 0) {
        fprintf(stderr, "ifup: ");
        perror("SIOCGIFCONF");
        close(fd);
        return -1;
    }
    numif = ifc.ifc_len / sizeof(struct ifreq);

    for (shaper = 1; shaper >= 0; shaper--) {
        for (i = 0; i < numif; i++) {
            if (strcmp(ifr[i].ifr_name, interface) == 0){
                ifr[i].ifr_flags |= (IFF_UP);
                if (ioctl(fd, SIOCSIFFLAGS, &ifr[i]) < 0) {
                    fprintf(stderr, "ifup: shutdown ");
                    perror(ifr[i].ifr_name);
                }
            }
        }
    }
    close(fd);

    return 0;
}
除非我通过网络管理器再次断开并连接到路由器

如果从终端使用,则不存在此类问题


有谁能告诉我,要使上述代码作为
ifup(8)
工作,还需要对其执行哪些操作?

在到达外部主机之前,您还必须设置路由

您必须设置默认路由
ifup
命令自动为您设置默认路线。在调用
ifup
之前和之后运行
$route-n
可以看到这一点


顺便说一句,谢谢你的代码,它非常有用。

在你的系统上试试
Where is
,看看,有时它会附带源代码。Debians iUp的源代码可以在这里找到:Ubuntu的iUpDown可以从这里下载:
connect: Network is unreachable