2016-07-07 24 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'兼容,根據上面這些定義的註釋。 –