2016-07-07 53 views
1

我正在使用free-electrons.com在内核源代码中导航。 我想知道什么是IFF_PROMISC在下面的代码片段。我可以看到它的定义为如何用它来comprehand定义x x和按位运算?

#define IFF_PROMISC      IFF_PROMISC 

在Linux的/有/ uapi/LINUX/if.h中,我应该看到类似

#define IFF_PROMISC      (unsigned long)12  //0xC
而不是其他。请解释此类定义的含义,以及在此句子之前的预处理器将替换哪些位。的 IFF_PROMISC

static int __dev_set_promiscuity(struct net_device *dev, int inc, bool notify) 
{ 
     unsigned int old_flags = dev->flags; 
     kuid_t uid; 
     kgid_t gid; 

     ASSERT_RTNL(); 

     dev->flags |= IFF_PROMISC; 
     dev->promiscuity += inc; 
+0

提供的链接请。 – 2501

+0

@ 2501这里是链接到功能http://lxr.free-electrons.com/source/net/core/dev.c#L6008,这里是链接定义http://lxr.free-electrons.com/ source/include/uapi/linux/if.h#L114 – Alex

回答

1

值在enum net_device_flags这是在同一文件include/uapi/linux/if.h设置。它就在您参考的#define行之前。

如果你看一下这个文件include/uapi/linux/if.h,你可以看到:

enum net_device_flags { 
    /* */ 
    /* Many other values - too I removed for brevity */ 
    IFF_NOARP      = 1<<7, /* sysfs */ 
    IFF_PROMISC      = 1<<8, /* sysfs */ 
    IFF_ALLMULTI     = 1<<9, /* sysfs */ 
    /* Many other values - too I removed for brevity */ 
    /* */ 
}; 

然后是#define如下:

#define IFF_PROMISC      IFF_PROMISC 
+1

您可能想解释为什么这样做,因为OP由此困惑。 – 2501

+0

@ 2501不知道为什么这样做。但它表明'IFF_PROMISC'有一个与OP相关的数值,就像OP期望的那样。 – sps

+1

@ 2501为了与glibc'net/if.h'兼容,根据上面这些定义的注释。 –