请大家对帮忙看看这几行代码的问题在那?
代码部分如下:unsigned char *dest;
dest= skb->mac.ethernet->h_dest;
printk("[%s %d] ==========dest=%02x\n", __FILE__, __LINE__,dest);// 会在这挂掉
/* broadcast packet limit */
if(dest & 0x01)
2.6的skb_buff中
/* Link layer header */
union
{
struct ethhdr *ethernet;//2.6.13中没有。我为了方便加入本项
unsigned char *raw;
} mac;
这几行代码在2.4上没有问题,我拿到2.6上一直有问题,而且在br_input.c 上也有相同的用法,不知问题在那?另外我去掉struct ethhdr *ethernet项,用2.6中的用法,改为
const unsigned char *dest = eth_hdr(skb)->h_dest;
printk("[%s %d] ==========dest=%02x\n", __FILE__, __LINE__,dest);
static inline struct ethhdr *eth_hdr(const struct sk_buff *skb)
{
return (struct ethhdr *)skb->mac.raw;
}
还是有相同问题, ethernet->h_dest
ethernet在哪赋的值?
回复 #2 emmoblin 的帖子
ethernet 与raw同为mac的共同体,所以只要raw有值就行了,这个问题找到了,是因为skb->mac.raw没有在之前赋指针skb->data,所以直接就用了,导致skb->mac.raw=NULL,所以会去错,看来skb->mac.raw=skb->data的动作是在驱动中做的了。
页:
[1]