CubieBoard中文论坛

 找回密码
 立即注册
搜索
热搜: unable
查看: 7367|回复: 4

CubieBoard网卡能进入混杂(promiscuous)模式吗???

[复制链接]
发表于 2013-11-7 20:03:08 | 显示全部楼层 |阅读模式
CB1,照着网上的教程做了一个最小化的Linux(3.4内核,大概40M)。
编译了个tcpdump,使用时有明显的“device eth0 entered promiscuous mode”,“device eth0 left promiscuous mode”提示,但就是无法抓到其他人的非广播包(检测多次,绝对不是连线问题)。

折腾半天驱动(sunxi_emac),看不出个所以然,但感觉不像是它问题。
不知道是不是物理结构(网卡控制器在CPU中)决定了!

有谁的CubieBoard是能真正的进入混杂模式的???? 有木有!??

给我个希望!或者绝望!!!


回复

使用道具 举报

发表于 2013-11-11 11:44:04 | 显示全部楼层

回帖奖励 +28 金钱

同求~~~是否是驱动问题
回复 支持 反对

使用道具 举报

发表于 2014-1-20 16:08:06 | 显示全部楼层
本帖最后由 ywzjackal 于 2014-1-22 09:50 编辑

可以确定是驱动问题,allwiner只移植了最简单的驱动程序。不能组播是因为他屏蔽了设置rx模式的代码,详细的如下:
不知道如果移出了#IF 0后重新编译内核是否会解决问题。
static const struct net_device_ops sunxi_emac_netdev_ops = {
        .ndo_open                = sunxi_emac_open,
        .ndo_stop                = sunxi_emac_stop,
        .ndo_start_xmit                = sunxi_emac_start_xmit,
        .ndo_tx_timeout                = sunxi_emac_timeout,
        .ndo_set_rx_mode        = sunxi_emac_hash_table,
        .ndo_do_ioctl                = sunxi_emac_ioctl,
        .ndo_change_mtu                = eth_change_mtu,
        .ndo_validate_addr        = eth_validate_addr,
        .ndo_set_mac_address        = sunxi_emac_set_mac_address,
#ifdef CONFIG_NET_POLL_CONTROLLER
        .ndo_poll_controller        = sunxi_emac_poll_controller,
#endif
};

/////

/*
*  Set SUNXI_EMAC multicast address
*/
static void
sunxi_emac_hash_table(struct net_device *dev)
{
#if 0
        sunxi_emac_board_info_t *db = netdev_priv(dev);
        struct dev_mc_list *mcptr = dev->mc_list;
        int mc_cnt = dev->mc_count;
        int i, oft;
        u32 hash_val;
        u16 hash_table[4];
        u8 rcr = RCR_DIS_LONG | RCR_DIS_CRC | RCR_RXEN;
        unsigned long flags;

        sunxi_emac_dbg(db, 1, "entering %s\n", __func__);

        spin_lock_irqsave(&db->lock, flags);

        for (i = 0, oft = SUNXI_EMAC_PAR; i < 6; i++, oft++)
                iow(db, oft, dev->dev_addr);

        /* Clear Hash Table */
        for (i = 0; i < 4; i++)
                hash_table = 0x0;

        /* broadcast address */
        hash_table[3] = 0x8000;

        if (dev->flags & IFF_PROMISC)
                rcr |= RCR_PRMSC;

        if (dev->flags & IFF_ALLMULTI)
                rcr |= RCR_ALL;

        /* the multicast address in Hash Table : 64 bits */
        for (i = 0; i < mc_cnt; i++, mcptr = mcptr->next) {
                hash_val = ether_crc_le(6, mcptr->dmi_addr) & 0x3f;
                hash_table[hash_val / 16] |= (u16) 1 << (hash_val % 16);
        }

        /* Write the hash table to MAC MD table */
        for (i = 0, oft = SUNXI_EMAC_MAR; i < 4; i++) {
                iow(db, oft++, hash_table);
                iow(db, oft++, hash_table >> 8);
        }

        iow(db, SUNXI_EMAC_RCR, rcr);
        spin_unlock_irqrestore(&db->lock, flags);
#endif
}

回复 支持 反对

使用道具 举报

发表于 2014-5-23 16:56:57 | 显示全部楼层
请问有哪位解决了这个混杂模式的问题吗
回复 支持 反对

使用道具 举报

发表于 2014-5-23 17:36:04 | 显示全部楼层
徐越民 发表于 2014-5-23 16:56
请问有哪位解决了这个混杂模式的问题吗

绕个弯吧,用个无线网卡,开monitor模式
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|粤ICP备13051116号|cubie.cc---深刻的嵌入式技术讨论社区

GMT+8, 2024-11-23 22:53 , Processed in 0.020812 second(s), 16 queries .

Powered by Discuz! X3.4

© 2001-2012 Comsenz Inc. | Style by Coxxs

返回顶部