ifreq结构中没有IFF_RUNNING标志

时间:2016-08-22 12:21:04

标签: c linux networking ip

我执行了一个简单的测试:

ifdown eth1 ifup eth1

然后我尝试以下列方式获取eth1接口标志:

                 struct ifreq flags_s;
                 int result = 0;
                 int sockfd = socket(AF_INET, SOCK_DGRAM, IPPROTO_IP);

                 (void)strcpy(flags_s.ifr_name, "eth1");
                 flags_s.ifr_flags = 0;

                 result = ioctl(sockfd, SIOCGIFFLAGS, &flags_s);
                 if (-1 == result)
                 {
                    perror("ioctl");
                    close(sockfd);
                 }

                 if (flags_s.ifr_flags & IFF_UP)
                 {
                    fprintf(stderr, "IFF_UPP+\n");
                 }

                 if (flags_s.ifr_flags & IFF_RUNNING)
                 {
                    fprintf(stderr, "IFF_RUNNING+\n");
                 }

在所有情况下,我只看到IFF_UP标志而没有IFF_RUNNING。有人可以解释为什么flags_s.ifr_flags不包含IFF_RUNNING标志? 这是我的netstat -i输出,我们可以看到为eth1设置了标志RUNNING:

Kernel Interface table Iface MTU Met RX-OK RX-ERR RX-DRP RX-OVR TX-OK TX-ERR TX-DRP TX-OVR Flg eth0 1500 0 45387749 0 19798101 0 2572141 0 0 0 BMRU eth1 1500 0 111 0 10484579 0 26 0 0 0 BMRU

同样在ifconfig输出中:UP BROADCAST RUNNING MULTICAST

我有一个使用netlink,rtnetlink的接口监督功能的遗留代码。当接口启动时,程序检查IFF_UP和IFF_RUNNING标志。由于上述问题,此功能无法正常工作。

0 个答案:

没有答案