- 论坛徽章:
- 11
|
内核版本:2.6.32-5- static inline unsigned compare_ether_addr(const u8 *addr1, const u8 *addr2)
- {
- const u16 *a = (const u16 *) addr1;
- const u16 *b = (const u16 *) addr2;
- BUILD_BUG_ON(ETH_ALEN != 6);
- return ((a[0] ^ b[0]) | (a[1] ^ b[1]) | (a[2] ^ b[2])) != 0;
- }
复制代码 eth_type_trans()通过compare_ether_addr_64bits()基于目标MAC地址对帧的类型pkt_type进行判断
而compare_ether_addr_64bits()会根据CPU架构是否可以对未对齐的内存进行有效访问而选择不同的处理方式
若选择调用compare_ether_addr()的话,这里只比较了网卡的MAC地址与数据帧目标MAC地址的前3个字节
难道仅前3字节相匹配就可以判断出两个mac地址相同或不同吗?
这样的话,若数据帧的目标mac地址为00:00:00:aa:aa:aa,接收帧的网卡mac为,00:00:00:bb:bb:bb,岂不是就可以判断为该帧就是发往本机的(pkt_type == PACKET_HOST)?
甚是不解,请各位大神指点一下,谢谢。 |
|