netdev_priv

#define	NETDEV_ALIGN		32
#define	NETDEV_ALIGN_CONST	(NETDEV_ALIGN - 1)

static inline void *netdev_priv(struct net_device *dev)
{
	return (char *)dev + ((sizeof(struct net_device)
					+ NETDEV_ALIGN_CONST)
				& ~NETDEV_ALIGN_CONST);
}

其中,

(sizeof(struct net_device) + NETDEV_ALIGN_CONST) & ~NETDEV_ALIGN_CONST

该句的运算结果:

    当 0 < sizeof(struct net_device) <= 32,结果为32;

    当 32 < sizeof(struct net_device) <= 64,结果为64;

    当 64 < sizeof(struct net_device) <= 96,结果为96;

    。。。。

由此可见该句是为了保证运算结果为32的整数倍。

以下是自己的理解:

    NETDEV_ALIGN_CONST的值为31,取反之后就是 1111 1111 1111 1111 1111 1111 1110 0000,该值和任何一个数字做 & 运算,结果一定是32的整数倍。

    至于此处为什么要取32的整数倍,楼主表示还没有研究透彻,待续吧。。。

你可能感兴趣的:(netdev_priv)