⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 net.c

📁 linux 安装程序
💻 C
📖 第 1 页 / 共 5 页
字号:
             */            if (primary == AF_INET) {                if (ipcomps->ipv4) {                    if (inet_pton(AF_INET, ipcomps->ipv4, &addr) >= 1) {                        newCfg->dev.ip = ip_addr_in(&addr);                        newCfg->dev.set |= PUMP_INTFINFO_HAS_IP;                    }                }            } else if (primary == AF_INET6) {                if (ipcomps->ipv6) {                    if (inet_pton(AF_INET6, ipcomps->ipv6, &addr) >= 1) {                        newCfg->dev.ip = ip_addr_in6(&addr6);                        newCfg->dev.set |= PUMP_INTFINFO_HAS_IP;                    }                }            }        }        if (ipcomps->ns) {            if (inet_pton(AF_INET, ipcomps->ns, &addr) >= 1) {                cfg->dev.dnsServers[0] = ip_addr_in(&addr);                cfg->dev.set |= PUMP_NETINFO_HAS_DNS;                if (cfg->dev.numDns < 1)                    cfg->dev.numDns = 1;            } else if (inet_pton(AF_INET6, ipcomps->ns, &addr6) >= 1) {                cfg->dev.dnsServers[0] = ip_addr_in6(&addr6);                cfg->dev.set |= PUMP_NETINFO_HAS_DNS;                if (cfg->dev.numDns < 1)                    cfg->dev.numDns = 1;            }        }        /* user selected back, but we've saved what they entered already */        if (answer == back) {            newtFormDestroy(f);            newtPopWindow();            return LOADER_BACK;        }        /* we might be done now */        if (have[IPV4] != 2) {            newtWinMessage(_("Missing Information"), _("Retry"),                           _("You must enter both a valid IPv4 address and a "                             "network mask or CIDR prefix."));        }        if (have[IPV6] != 2) {            newtWinMessage(_("Missing Information"), _("Retry"),                           _("You must enter both a valid IPv6 address and a "                             "CIDR prefix."));        }        strcpy(newCfg->dev.device, device);        newCfg->isDynamic = 0;    }    newtFormDestroy(f);    newtPopWindow();    return LOADER_OK;}void debugNetworkInfo(struct networkDeviceConfig *cfg) {    int i;    char *buf = NULL;    logMessage(DEBUGLVL, "device = %s", cfg->dev.device);    if (cfg->dev.set & PUMP_INTFINFO_HAS_IPV4_IP)        logMessage(DEBUGLVL, "ipv4 = %s", ip_text(cfg->dev.ipv4, buf, 0));    if (cfg->dev.set & PUMP_INTFINFO_HAS_BROADCAST)        logMessage(DEBUGLVL,"broadcast = %s",ip_text(cfg->dev.broadcast,buf,0));    if (cfg->dev.set & PUMP_INTFINFO_HAS_NETMASK)        logMessage(DEBUGLVL, "netmask = %s", ip_text(cfg->dev.netmask, buf, 0));    if (cfg->dev.set & PUMP_INTFINFO_HAS_NETWORK)        logMessage(DEBUGLVL, "network = %s", ip_text(cfg->dev.network, buf, 0));    if (cfg->dev.set & PUMP_INTFINFO_HAS_IPV6_IP)        logMessage(DEBUGLVL, "ipv6 = %s", ip_text(cfg->dev.ipv6, buf, 0));    if (cfg->dev.set & PUMP_INTFINFO_HAS_IPV6_PREFIX)        logMessage(DEBUGLVL, "ipv6_prefixlen = %d", cfg->dev.ipv6_prefixlen);    if (cfg->dev.set & PUMP_NETINFO_HAS_GATEWAY)        logMessage(DEBUGLVL, "gateway = %s", ip_text(cfg->dev.gateway, buf, 0));    if (cfg->dev.set & PUMP_NETINFO_HAS_DNS)        for (i=0; i < cfg->dev.numDns; i++)            logMessage(DEBUGLVL, "dns[%d] = %s", i,                       ip_text(cfg->dev.dnsServers[i], buf, 0));}int setupWireless(struct networkDeviceConfig *dev) {    /* wireless config needs to be set up before we can bring the interface     * up */    if (!is_wireless_interface(dev->dev.device))        return 0;    if (dev->essid) {        logMessage(INFO, "setting essid for %s to %s", dev->dev.device,                   dev->essid);        if (set_essid(dev->dev.device, dev->essid) < 0) {            logMessage(ERROR, "failed to set essid: %s", strerror(errno));        }        if (dev->wepkey) {            logMessage(INFO, "setting encryption key for %s", dev->dev.device);            if (set_wep_key(dev->dev.device, dev->wepkey) < 0) {                logMessage(ERROR, "failed to set wep key: %s", strerror(errno));        }        }    }    return 0;}void netlogger(void *arg, int priority, char *fmt, va_list va) {    int p;    char *buf = NULL;    if (priority == LOG_ERR)        p = ERROR;    else if (priority == LOG_INFO)        p = INFO;    else if (priority == LOG_DEBUG)        p = DEBUGLVL;    else if (priority == LOG_FATAL)        p = CRITICAL;    else        p = INFO;    if (vasprintf(&buf, fmt, va) != -1) {        logMessage(p, "%s", buf);        free(buf);    } else {        logMessage(ERROR, "unable to log network message");    }    return;}char *doDhcp(struct networkDeviceConfig *dev) {    struct pumpNetIntf *i;    char *r = NULL, *class = NULL;    time_t timeout = 45;    int loglevel;    DHCP_Preference pref = 0;    struct utsname kv;    i = &dev->dev;    if (dev->vendor_class != NULL) {        class = dev->vendor_class;    } else {        if (uname(&kv) == -1) {            logMessage(ERROR, "failure running uname() in doDhcp()");            class = "anaconda";        } else {            int ret;            ret = asprintf(&class, "anaconda-%s %s %s",                           kv.sysname, kv.release, kv.machine);            logMessage(DEBUGLVL, "sending %s as dhcp vendor-class", class);        }    }    if (getLogLevel() == DEBUGLVL)        loglevel = LOG_DEBUG;    else        loglevel = LOG_INFO;    /* dhcp preferences are in /usr/include/libdhcp/dhcp_nic.h */    /* calling function should catch ipv4Choice & ipv6Choice both being ' ' */    if (dev->noipv4 || dev->ipv4method == IPV4_MANUAL_METHOD) {        /* IPv4 disabled entirely -or- manual IPv4 config selected */        pref |= DHCPv4_DISABLE;    }    /* IPv6 enabled -and- auto neighbor discovery selected */    /* IPv6 disabled entirely -or- manual IPv6 config selected */    if ((!dev->noipv6 && dev->ipv6method == IPV6_AUTO_METHOD) ||        (dev->noipv6 || dev->ipv6method == IPV6_MANUAL_METHOD)) {        pref |= DHCPv6_DISABLE | DHCPv6_DISABLE_ADDRESSES;    }    /* disable some things for this DHCP call */    pref |= DHCPv6_DISABLE_RESOLVER | DHCPv4_DISABLE_HOSTNAME_SET;    /* don't try to run the client if DHCPv4 and DHCPv6 are disabled */    if (!(pref & DHCPv4_DISABLE) || !(pref & DHCPv6_DISABLE))        r = pumpDhcpClassRun(i,0L,class,pref,0,timeout,netlogger,loglevel);    return r;}int configureNetwork(struct networkDeviceConfig * dev) {    char *rc;    setupWireless(dev);    rc = pumpSetupInterface(&dev->dev);    if (rc != NULL) {        logMessage(INFO, "result of pumpSetupInterface is %s", rc);        return 1;    }    /* we need to wait for a link after setting up the interface as some     * switches decide to reconfigure themselves after that (#115825)     */    waitForLink((char *)&dev->dev.device);    return 0;}int writeNetInfo(const char * fn, struct networkDeviceConfig * dev) {    FILE * f;    int i;    struct device ** devices;    char ret[48];    ip_addr_t *tip;    devices = probeDevices(CLASS_NETWORK, BUS_UNSPEC, PROBE_LOADED);    if (!devices)        return 0;    for (i = 0; devices[i]; i++)        if (!strcmp(devices[i]->device, dev->dev.device)) break;        if (!(f = fopen(fn, "w"))) return -1;    fprintf(f, "DEVICE=%s\n", dev->dev.device);    fprintf(f, "ONBOOT=yes\n");    if (dev->isDynamic) {        fprintf(f, "BOOTPROTO=dhcp\n");    } else {        fprintf(f, "BOOTPROTO=static\n");        tip = &(dev->dev.ipv4);        inet_ntop(tip->sa_family, IP_ADDR(tip), ret, IP_STRLEN(tip));        fprintf(f, "IPADDR=%s\n", ret);        tip = &(dev->dev.netmask);        inet_ntop(tip->sa_family, IP_ADDR(tip), ret, IP_STRLEN(tip));        fprintf(f, "NETMASK=%s\n", ret);        if (dev->dev.set & PUMP_NETINFO_HAS_GATEWAY) {            tip = &(dev->dev.gateway);            inet_ntop(tip->sa_family, IP_ADDR(tip), ret, IP_STRLEN(tip));            fprintf(f, "GATEWAY=%s\n", ret);        }        if (dev->dev.set & PUMP_INTFINFO_HAS_BROADCAST) {          tip = &(dev->dev.broadcast);          inet_ntop(tip->sa_family, IP_ADDR(tip), ret, IP_STRLEN(tip));          fprintf(f, "BROADCAST=%s\n", ret);        }    }    if (!dev->noipv6) {        if (dev->ipv6method == IPV6_AUTO_METHOD) {           fprintf(f, "IPV6_AUTOCONF=yes\n");        } else if (dev->ipv6method == IPV6_DHCP_METHOD) {           fprintf(f, "IPV6ADDR=dhcp\n");        } else {           tip = &(dev->dev.ipv6);           inet_ntop(tip->sa_family, IP_ADDR(tip), ret, IP_STRLEN(tip));           fprintf(f, "IPV6ADDR=%s/%d\n", ret, dev->dev.ipv6_prefixlen);        }    }    if (dev->dev.set & PUMP_NETINFO_HAS_HOSTNAME)        fprintf(f, "HOSTNAME=%s\n", dev->dev.hostname);    if (dev->dev.set & PUMP_NETINFO_HAS_DOMAIN)        fprintf(f, "DOMAIN=%s\n", dev->dev.domain);    if (dev->mtu)        fprintf(f, "MTU=%d\n", dev->mtu);    if (dev->peerid)        fprintf(f, "PEERID=%s\n", dev->peerid);    if (dev->subchannels)        fprintf(f, "SUBCHANNELS=%s\n", dev->subchannels);    if (dev->portname)        fprintf(f, "PORTNAME=%s\n", dev->portname);    if (dev->nettype)        fprintf(f, "NETTYPE=%s\n", dev->nettype);    if (dev->ctcprot)        fprintf(f, "CTCPROT=%s\n", dev->ctcprot);    if (dev->essid)        fprintf(f, "ESSID=%s\n", dev->essid);    if (dev->wepkey)        fprintf(f, "KEY=%s\n", dev->wepkey);        fclose(f);    return 0;}int writeResolvConf(struct networkDeviceConfig * net) {    char * filename = "/etc/resolv.conf";    FILE * f;    int i;    char ret[48];    ip_addr_t *tip;#if defined(__s390__) || defined(__s390x__)    return 0;#endif    if (!(net->dev.set & PUMP_NETINFO_HAS_DOMAIN) && !net->dev.numDns)        return LOADER_ERROR;    f = fopen(filename, "w");    if (!f) {        logMessage(ERROR, "Cannot create %s: %s\n", filename, strerror(errno));        return LOADER_ERROR;    }    if (net->dev.set & PUMP_NETINFO_HAS_DOMAIN)        fprintf(f, "search %s\n", net->dev.domain);    for (i = 0; i < net->dev.numDns; i++) {        tip = &(net->dev.dnsServers[i]);        inet_ntop(tip->sa_family, IP_ADDR(tip), ret, IP_STRLEN(tip));        fprintf(f, "nameserver %s\n", ret);    }    fclose(f);    res_init();         /* reinit the resolver so DNS changes take affect */    return 0;}int findHostAndDomain(struct networkDeviceConfig * dev) {    char * name, * chptr;    char ret[48];    ip_addr_t *tip;    if (!FL_TESTING(flags)) {        writeResolvConf(dev);    }    if (dev->dev.numDns == 0) {        logMessage(ERROR, "no DNS servers, can't look up hostname");        return 1;    }    if (!(dev->dev.set & PUMP_NETINFO_HAS_HOSTNAME)) {        if (!FL_CMDLINE(flags))            winStatus(50, 3, NULL,                       _("Determining host name and domain..."));        else            printf("Determining host name and domain...\n");        tip = &(dev->dev.ip);        inet_ntop(tip->sa_family, IP_ADDR(tip), ret, IP_STRLEN(tip));        name = mygethostbyaddr(ret, tip->sa_family);        if (!FL_CMDLINE(flags))            newtPopWindow();        if (!name) {            logMessage(WARNING, "reverse name lookup failed");            return 1;        }        logMessage(INFO, "reverse name lookup worked");        dev->dev.hostname = strdup(name);        dev->dev.set |= PUMP_NETINFO_HAS_HOSTNAME;    } else {        name = dev->dev.hostname;    }    if (!(dev->dev.set & PUMP_NETINFO_HAS_DOMAIN)) {        for (chptr = name; *chptr && (*chptr != '.'); chptr++) ;        if (*chptr == '.') {            if (dev->dev.domain) free(dev->dev.domain);            dev->dev.domain = strdup(chptr + 1);            dev->dev.set |= PUMP_NETINFO_HAS_DOMAIN;        }    }    return 0;}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -