开源无线路由器固件上 Bug 的故事(二)

上一篇文章花了很大的气力讲了开放源代码第三方家用无线路由器固件的基本情况和绕过这个 bug 的办法。绕过 bug 在很多时候不失为一种有效的选择,特别是像之前我遇到的情况:开发组在一年内都没有对 bug report 作出任何响应。所以在失望之余也只好另辟奚径了,再用俗话说一遍就是“惹不起,躲得起”。 下面把话说回来,毕竟文章的主题是 Bug 的故事,所以还是要接着往下说。只是后面的东西更偏向于技术,所以比较枯燥一点。 3. Bug 的认定和定位 这个 Bug 之所以让我记恨于心,的确是因为它太复杂了:从 bug 的发现认定,到 bug 定位和 bugfix,由于没有正式的官方支持,OpenSource Community 这种散兵游勇的开发全靠分散在各地的个人,每一步的进展都很艰难。 这个 Bug 造成的问题是目的MAC地址为 00-80-C2-00-00-03 的 802.1X 多播认证包被无线路由器丢弃(不会转发到 WAN 口),这样在路由器上运行的 Supplicant 程序在发出 logon request 之后便再也收不到回复。问题其实很明显,因为使用同一个程序,把网线插到 PC  上便能通过认证,显然就是路由器处理的问题。 那为什么说 bug 认定是一件麻烦事呢?因为后来才确定这个 bug 只存在于 Broadcom® 公司的 Roboswitch™ 系列交换芯片中。早期的 Linksys WRT54G 路由器使用的是 ADM6996L 交换芯片(ADMTek 已经被 Infineon 收购),在进行认证的时候是没有问题的。所以这个问题在此型号的机器上无法重现,再加上大家都从软件角度来思考(其实这是个硬件问题)。最后导致了两种声音:一种声音坚定地说自己遇到了 OpenWRT [...]

开源无线路由器固件上 Bug 的故事(二)

Close
May 1st, 2009 Add a comment
Home » 我爱无线 » 开源无线路由器固件上 Bug 的故事(二)
Comments (25) Trackback Leave a comment
  1. May 1st, 2009 at 11:44 | #1

    原来如此,看来还是俺RP好阿XD

  2. wfhwfh
    May 1st, 2009 at 19:43 | #2

    拜读大作,原来LZ是恩山的tmqhliu

  3. jacky235
    May 1st, 2009 at 21:33 | #3

    那8230-4和wzr-g108都是BCM5325(用的是tomato固件)
    我们网络是多播的
    用的是xclient源码编译的客户端,正常拨号
    ………………………………….

  4. May 1st, 2009 at 22:30 | #4

    @jacky235
    十分感谢你的反馈!
    我刚才又搜索了一下,了解到 BCM5325 交换芯片分为几个型号。根据拆解图片,8230-4 和 WZR-G108 都是使用的 BCM5325A2KQM ,而根据 WRT54G 的 Wikipedia 页面,它使用的是 BCM5325EKQM。对比了一下 BCM5325 和 BCM5325E 的 Product Brief(官网上有下载,但 Datasheet 不公开),我判断是这两种芯片上还是有差别的。BCM5325E 的 Product Brief 上说:

    In addition, BCM5325E supports other advance L2 managed features including port-based and 802.1Q VLAN, 802.1x EAPOL protocol filtering, IGMP snooping, and mirroring.

    所以这个 bug 应该被缩小到 BCM5325E 交换芯片了。不管怎么说,你能通过认证,值得恭喜~!

  5. May 1st, 2009 at 22:33 | #5

    @Felix021
    哈哈~~ 可喜可贺!RP 这个东西是守恒的!

  6. May 1st, 2009 at 22:34 | #6

    @whfwfh
    Hoho~~ 被你发现啦~!有什么问题欢迎探讨~!

  7. May 1st, 2009 at 22:37 | #7

    囧。。。RP守恒阿。。。不要。。

  8. jacky235
    May 1st, 2009 at 22:39 | #8

    呵呵。

  9. May 3rd, 2009 at 00:50 | #9

    最近我们公司外销也在研究开源软件这档子事,不过不是我负责

  10. May 3rd, 2009 at 00:50 | #10

    另外你主题换的挺勤快啊~

  11. May 3rd, 2009 at 03:48 | #11

    @陶陶
    开源的东西在遵守协议的情况下拿来做商业应用还是有它自己的成本和维护优势的。之前磊科就发布了 NW618 支持 DD-WRT。TP-Link 在国内占据消费级市场的条件下是该向中高端发力了。一如 Windows Server 向 Unix 争夺市场一样。

    换主题是因为我之前一直在等作者发布这个…… 他发布不久我就连忙换上了。这个主题比较精致,适合我的喜好。 :smile:

  12. June 23rd, 2009 at 09:54 | #12

    嗯~我的是7231,只是拿到手的时候已经毕业了……

  13. Awayfar
    October 19th, 2009 at 09:29 | #13

    “移植 Jouke Witteveen 在 roboswitch 中使用过的方法,在私有协议的认证程序中加入 Broadcom 芯片的支持,则有希望通过认证了。”

    这个貌似有点难度啊,Jouke给出的认证程序应该是标准的supplicant,那个roboswitch 的driver用到自定协议的认证程序里边不知道博主解决了没有?

    呵呵,不过这些东西都是一时兴起吧,希望博主都还有研究这个东东的兴趣,呵呵!

    刚入手一台150N,准备试试把客户端移植到路由器里边去,谢谢博主这篇文章,启发很大啊!

  14. October 19th, 2009 at 21:34 | #14

    @Awayfar
    我跟 Jouke Witteveen 联系过,他解释了他的方法原理,现在我能明白。只是我当前没有登录 802.1x 的需求,再加上我没有 Linux 下嵌入式 C 语言编程的经验,所以一时恐难以完成。
    前几个月有一位读者曾发信给我说好像已经移植了这个方法。不知道他为什么没有发布。
    建议你先移植看看,如果有问题再仔细下来研究研究。
    至于文章,发出来就是给人看的,能帮助到个把人,很是欣慰。 :-)

  15. Oo笨蛋
    December 5th, 2009 at 19:42 | #15

    你好,看了这篇文章才知道自己遇上这个bug了。
    我学校采用的是中兴的认证,linux下的认证程序自己基本已经写好了(本人学软件开发的),在ubuntu下可以正常登录,但是在编译给路由运行后发现无法发出数据包,反复查看不知道是什么原因,后来查看了这篇文章才知道自己是遇上bug了。
    我的交换机芯片是bcm5354,学校采用广播认证,目前无解,看到你的文章说“移植 Jouke Witteveen 在 roboswitch 中使用过的方法,在私有协议的认证程序中加入 Broadcom 芯片的支持,则有希望通过认证了。”很希望了解该如何加入该支持。如果方便的话可以发份资料到我邮箱吗?万分感谢!我的邮箱是zzb402953049@qq.com

  16. December 6th, 2009 at 00:21 | #16

    @Oo笨蛋
    已经把参考文档通过邮件发给你,请查收。
    不过你说“学校采用广播认证”这个是否为笔误?如果是广播认证的话是可以通过的,因为广播包可以顺利地传达到 WAN 口上,而多播包则由于芯片内部的 logic 导致无法成功转发。关于广播包的处理方法你可以参考一楼的 Felix021 同学,他在已经在 WL-520gU 上成功了的,因为这机器也是 BCM5354 的芯片。

  17. morfast
    April 6th, 2010 at 10:29 | #17

    如果使用锐捷私有组播地址的话,会不会有上述问题?

  18. April 7th, 2010 at 09:21 | #18

    @morfast
    得先确定一下锐捷的私有组播地址是哪个,然后查询一下芯片的手册看看这个地址有没有被设成特殊地址加以区别对待。

  19. morfast
    April 7th, 2010 at 09:56 | #19

    嗯,不过后来我试了下,我们学校不管是使用标准组播地址,锐捷私有组播地址,广播地址,还是使用认证服务器的物理地址(抓包得到,单播),都能通过认证,应该是可以避开这个bug了。
    你所说的相关的手册哪里能下载到?

  20. linchenlc
    April 11th, 2010 at 00:57 | #20

    你好,很早前就看过你这篇文章,当时没留意。最近换了个网络环境,变成了发送多播包认证,发现改了认证软件为多播也死活认证不上,各个方面都检查到了,最后才发现是遇到这个bug了.
    看到你说有roboswitch driver 相关的资料,能否发一份给我,邮箱 linchen987(at)gmail.com
    谢谢了 :smile:

Comment pages
1 2
Comments rss
emoticons
提示: 回复作者请直接填写评论。要回复其它人,请点击此人评论右侧的“回复小箭头”,再继续填写评论。你的评论将会被自动发送给此人。
Allowed tags: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> <pre lang="" line="" escaped="">
Trackbacks (0 ) Detail Trackback