<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>知也无涯802.1x</title>
	<atom:link href="http://blog.xiaoding.org/post/tag/8021x/feed" rel="self" type="application/rss+xml" />
	<link>http://blog.xiaoding.org</link>
	<description>什么都略懂一点，生活会多彩一些</description>
	<lastBuildDate>Tue, 03 Aug 2010 18:01:34 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.6</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>开源无线路由器固件上 Bug 的故事（二）</title>
		<link>http://blog.xiaoding.org/post/bug-story-on-open-source-routers-2.html</link>
		<comments>http://blog.xiaoding.org/post/bug-story-on-open-source-routers-2.html#comments</comments>
		<pubDate>Thu, 30 Apr 2009 18:25:56 +0000</pubDate>
		<dc:creator>xiaoding</dc:creator>
				<category><![CDATA[我爱无线]]></category>
		<category><![CDATA[802.1x]]></category>
		<category><![CDATA[固件]]></category>
		<category><![CDATA[无线]]></category>

		<guid isPermaLink="false">http://blog.xiaoding.org/?p=142</guid>
		<description><![CDATA[上一篇文章花了很大的气力讲了开放源代码第三方家用无线路由器固件的基本情况和绕过这个 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 [...]]]></description>
			<content:encoded><![CDATA[<p><a title="开源无线路由器固件上 Bug 的故事（一）" href="http://blog.xiaoding.org/post/bug-story-on-open-source-routers.html" target="_blank">上一篇文章</a>花了很大的气力讲了开放源代码第三方家用无线路由器固件的基本情况和绕过这个 bug 的办法。绕过 bug 在很多时候不失为一种有效的选择，特别是像之前我遇到的情况：开发组在一年内都没有对 bug report 作出任何响应。所以在失望之余也只好另辟奚径了，再用俗话说一遍就是“惹不起，躲得起”。 <img src='http://blog.xiaoding.org/wordpress/wp-includes/images/smilies/icon_wink.gif' alt=':wink:' class='wp-smiley' /> </p>
<p>下面把话说回来，毕竟文章的主题是 Bug 的故事，所以还是要接着往下说。只是后面的东西更偏向于技术，所以比较枯燥一点。</p>
<h4>3. Bug 的认定和定位</h4>
<p>这个 Bug 之所以让我记恨于心，的确是因为它太复杂了：从 bug 的发现认定，到 bug 定位和 bugfix，由于没有正式的官方支持，OpenSource Community 这种散兵游勇的开发全靠分散在各地的个人，每一步的进展都很艰难。</p>
<p>这个 Bug 造成的问题是目的MAC地址为 00-80-C2-00-00-03 的 802.1X 多播认证包被无线路由器丢弃（不会转发到 WAN 口），这样在路由器上运行的 Supplicant 程序在发出 logon request 之后便再也收不到回复。问题其实很明显，因为使用同一个程序，把网线插到 PC  上便能通过认证，显然就是路由器处理的问题。</p>
<p>那为什么说 bug 认定是一件麻烦事呢？因为后来才确定这个 bug 只存在于 Broadcom® 公司的 Roboswitch™ 系列交换芯片中。早期的 Linksys WRT54G 路由器使用的是 ADM6996L 交换芯片（ADMTek 已经被 Infineon 收购），在进行认证的时候是没有问题的。所以这个问题在此型号的机器上无法重现，再加上大家都从软件角度来思考（其实这是个硬件问题）。最后导致了两种声音：一种声音坚定地说自己遇到了 OpenWRT 的 bug，另一种声音说，这个 bug 在我的机器上无法重现，不能认定。这两种声音可以在 OpenWRT Trac 上的 <a title="Openwrt Trac Ticket 1862" href="https://dev.openwrt.org/ticket/1862" target="_blank">Ticket 1862</a> 看到。</p>
<p> 接下来有人发现“It has also worked for me on WRT54G 1.0-2.0. On WRT54G 4.0 it does not work.”，大家这才意识到这是 BCM5325 交换芯片搞的鬼。后来的 BCM5352 和 BCM5354 芯片内部都集成了一个交换模块，因此也理所当然地继承了这个 bug 。</p>
<p>修订：根据 jacky235 的消息，8230-4 和 WZR-G108 使用了 BCM5325A2KQM 交换芯片，但可以通过认证。而 OpenWRT Ticket 1862 上出现问题的是 BCM5325E 交换芯片，此芯片支持额外的管理功能和 802.1x EAPOL filtering 。所以将出问题的交换芯片定位到 BCM5325E 上面。集成了交换芯片的 BCM5352 和BCM5354 依然有问题，这个我自己可以证实。</p>
<p>此 Bug 的产生机理是什么呢？其实话说回来，这本来是 Braodcom 设计出来的 feature ，目的是为了使交换芯片的工作模式更加灵活一些，可是 Broadcom 的保守和封锁让这个 feature 在这里适得其反。（关于bug 和feature 的辩证关系，请看 <a title="atppp - This is a feature." href="http://blog.wuxinan.net/archives/449" target="_self">atppp 的文章</a>）如果芯片工作在 Default Mode ，那么会丢弃 802.1x 认证多播包 00-80-c2-00-00-03 ，如果芯片工作在 Frame-Management Mode ，则会把此包转发到 Frame Management Port 。如此简单的逻辑</p>
<h4>4. Bugfix 和当前问题</h4>
<p>这个 bug 的修复就更棘手了。人们总算搞清楚了问题的所在，但就是没办法去修复它。因为你无论是 Google、Yahoo 还是百度都找不到详细的 BCM5325 芯片资料。所有宣称有 Datasheet 的网站上下载回来的只有两页纸的 Product Brief。这东东在 Broadcom 自己的网站上就能下载到，无非就是花一页纸吹了一下自己这个芯片有如何如何的 feature 云云，然后再花了一页纸作 Overview，扔一个架构图上去完事儿，真是印证了 Brief 这个词。</p>
<p>后来我才从某个网页上无意得知，Broadcom 的 Datasheet 一般是不公开的。只在有渠道的代理商那儿有，只有从人家那儿拿货然后签订一个保密协议，人家才会给你一份 PDF 文档。当然给你的文档是没法传播的：每一页纸上面都斜贯着长长的一串水印——谁泄露出去了谁承担责任。Broadcom 这招的确狠，可也给 bugfix 工作设置了最大的屏障。</p>
<p>针对这个 bug 给出解决方案的是 Jouke Witteveen。他的解决方案没有去 patch OpenWRT，而是给 wpa_supplicant 上的 wired Driver 作出了修正。他提出了一个新的 roboswitch driver 专门用于 Roboswitch 上的 802.1X 认证。我现在寝室里用的 Buffalo WHR-HP-G54 上就使用此程序通过了学校的 802.1X 认证。然后再运行一个 mytunet 来打开网关上的出校访问权限。这样就可以在全天时间使用无线网络了。（熄灯停电时除外……）</p>
<p>这个 bugfix 我用了大半年了，还是比较顺利的。只是最近在<a title="恩山无线论坛" href="http://www.right.com.cn/forum" target="_blank">恩山无线论坛</a>上看到了很多人受困于 H3C 和锐捷的私有 802.1X 认证。于是有人打算在路由器上运行 Linux 版的认证程序从而通过校园网认证。无奈的是这个 bug 再一次阻止了一大部分人的企图…… 很多人新买的路由器比如 WHR-HP-G54、WL-520gU、WHR-G125 等都有 roboswitch 的身影，移植过来的认证程序在 PC 上跑跑当然可以，可惜是没有针对性地解决 Broadcom roboswitch 的问题。自然也逃不过此 bug 的追杀，恩山上铩羽而归的人不在少数。</p>
<p>幸运一些的人有两种可能。一种是使用的 Belkin 7231-4p（不管有没有经过恩山无线的改版）它使用了 ADM6996L 交换芯片，没有此问题。另外一种是像 <a title="WL-520gU 通过锐捷认证" href="http://www.felix021.com/blog/read.php?1467" target="_self">felix021</a> 同学那样的，虽然路由器是使用 BCM5354 芯片的 WL-520gU，但校园网认证协议使用广播包（MAC为 FF-FF-FF-FF-FF-FF）而不是多播包。所有的交换模块接到了广播包当然是无条件转发。因此也能顺利通过认证。</p>
<p>不幸运的该怎么办呢？ <img src='http://blog.xiaoding.org/wordpress/wp-includes/images/smilies/icon_twisted.gif' alt=':twisted:' class='wp-smiley' />   可以移植 Jouke Witteveen 在 roboswitch 中使用过的方法，在私有协议的认证程序中加入 Broadcom 芯片的支持，则有希望通过认证了。我已经跟 Jouke Witteveen 取得联系，他毫无保留地提供了一份 leaked document 给我作参考，十分感谢。 <img src='http://blog.xiaoding.org/wordpress/wp-includes/images/smilies/icon_smile.gif' alt=':smile:' class='wp-smiley' /> </p>
<p>PS: 发现 Wordpress 链接到自己文章的时候会发送 pingback，看上去真傻……只好装了一个 No-self-ping 插件。</p>
By the time  your rss reader get this post here is <strong> 25 </strong>comments ,Welcome you come to leave your opinion !<h3  class="related_post_title">相关文章</h3><ul class="related_post"><li>2009/04/28 -- <a href="http://blog.xiaoding.org/post/bug-story-on-open-source-routers.html" title="开源路由器固件上 Bug 的故事（一）">开源路由器固件上 Bug 的故事（一）</a> (10)</li><li>2009/06/27 -- <a href="http://blog.xiaoding.org/post/wireless-router-tx-power-measure.html" title="无线路由器功率的一点消息">无线路由器功率的一点消息</a> (6)</li><li>2009/10/13 -- <a href="http://blog.xiaoding.org/post/using-microsoft-arc-mouse.html" title="Microsoft Arc Mouse使用手记">Microsoft Arc Mouse使用手记</a> (6)</li><li>2009/03/15 -- <a href="http://blog.xiaoding.org/post/crack-be-for-time-wireless.html" title="破解了避风塘的无线密码">破解了避风塘的无线密码</a> (0)</li></ul>]]></content:encoded>
			<wfw:commentRss>http://blog.xiaoding.org/post/bug-story-on-open-source-routers-2.html/feed</wfw:commentRss>
		<slash:comments>25</slash:comments>
		</item>
		<item>
		<title>开源路由器固件上 Bug 的故事（一）</title>
		<link>http://blog.xiaoding.org/post/bug-story-on-open-source-routers.html</link>
		<comments>http://blog.xiaoding.org/post/bug-story-on-open-source-routers.html#comments</comments>
		<pubDate>Tue, 28 Apr 2009 07:51:24 +0000</pubDate>
		<dc:creator>xiaoding</dc:creator>
				<category><![CDATA[我爱无线]]></category>
		<category><![CDATA[802.1x]]></category>
		<category><![CDATA[固件]]></category>
		<category><![CDATA[无线]]></category>

		<guid isPermaLink="false">http://blog.xiaoding.org/?p=138</guid>
		<description><![CDATA[前段时间在 atppp 的博客上读到了“纪念一个 Bug”，这让我想起了 OpenWRT 开源固件上面关于 Broadcom 交换芯片的一个 bug，所以也来写个文章纪念一下。
1. Linksys 开源路由器固件的起源和发展
OpenWRT 这个项目最早起源于 Linksys 的 WRT54G 家用无线路由器固件。WRT54G 这款无线路由器（台灣同胞稱作“無線基地台”或者“無線IP分享器”）是 2003 年 802.11g 无线网络兴起时在家用领域的领军人物，引来叫好一片。于是有人研究了它的软件系统，赫然发现它是一个基于 Linux 的嵌入式系统。所以根据 GPL 这一个病毒一样的协议要求 Linksys 开放源代码。Linksys 架不住压力，于是根据 GPL 开放了源代码（现在还可以在 Linksys 的网站上下载）。这一开放，就使得第三方固件雨后春笋一般蓬勃发展起来。OpenWRT 是最特别的一个。因为别家都是在 Linksys 的源代码基础上添砖加瓦，唯有 OpenWRT 是重新构造一个完整功能的路由器固件。
然而做 OpenWRT 的都是一群高人，他们注重扩展性、可定制性却忽视了普通大众的需求。做出来的东西只能用命令行玩玩，这让习惯从浏览器里配置无线路由器的劳苦大众无所适从。所以后来有了 Seavsoft 做了收费但带有 Web UI 的固件，再后来又有了 DD-WRT，DD-WRT 从 v23 的成熟发展到今天 v24 sp2 的功能多样而不失易用性，的确为开源无线路由器的发展立下了汗马功劳。
Tomato 是 DD-WRT 之外异军突起的一个优秀固件。它注重于简单、实用、高效，并且以优雅的 AJAX Web [...]]]></description>
			<content:encoded><![CDATA[<p>前段时间在 <a title="atppp's blog" href="http://blog.wuxinan.net" target="_blank">atppp</a> 的博客上读到了“<a title="纪念一个 Bug" href="http://blog.wuxinan.net/archives/522">纪念一个 Bug</a>”，这让我想起了 OpenWRT 开源固件上面关于 Broadcom 交换芯片的一个 bug，所以也来写个文章纪念一下。</p>
<h4>1. Linksys 开源路由器固件的起源和发展</h4>
<p><a title="OpenWRT" href="http://www.openwrt.org">OpenWRT</a> 这个项目最早起源于 Linksys 的 WRT54G 家用无线路由器固件。WRT54G 这款无线路由器（台灣同胞稱作“無線基地台”或者“無線IP分享器”）是 2003 年 802.11g 无线网络兴起时在家用领域的领军人物，引来叫好一片。于是有人研究了它的软件系统，赫然发现它是一个基于 Linux 的嵌入式系统。所以根据 GPL 这一个病毒一样的协议要求 Linksys 开放源代码。Linksys 架不住压力，于是根据 GPL 开放了源代码（现在还可以在 Linksys 的网站上下载）。这一开放，就使得第三方固件雨后春笋一般蓬勃发展起来。OpenWRT 是最特别的一个。因为别家都是在 Linksys 的源代码基础上添砖加瓦，唯有 OpenWRT 是重新构造一个完整功能的路由器固件。</p>
<p>然而做 OpenWRT 的都是一群高人，他们注重扩展性、可定制性却忽视了普通大众的需求。做出来的东西只能用命令行玩玩，这让习惯从浏览器里配置无线路由器的劳苦大众无所适从。所以后来有了 Seavsoft 做了收费但带有 Web UI 的固件，再后来又有了 <a title="DD-WRT" href="http://www.dd-wrt.com" target="_blank">DD-WRT</a>，DD-WRT 从 v23 的成熟发展到今天 v24 sp2 的功能多样而不失易用性，的确为开源无线路由器的发展立下了汗马功劳。</p>
<p><a title="Tomato Firmware" href="http://www.polarcloud.com/tomato" target="_blank">Tomato</a> 是 DD-WRT 之外异军突起的一个优秀固件。它注重于简单、实用、高效，并且以优雅的 AJAX Web UI 和高效的 QoS 功能赢得了广泛支持。作者原来是 HyperWRT 开发小组的一员，后来跑出来自立门户开发 HyperWRT + Tofu 固件，就演变成了今天的 Tomato Firmware 。</p>
<p>（汗 <img src='http://blog.xiaoding.org/wordpress/wp-includes/images/smilies/icon_mrgreen.gif' alt=':mrgreen:' class='wp-smiley' />  说了个背景就说了这么多！）</p>
<h4>2. 关于 802.1X 认证的 bug</h4>
<p>因为面向家用和小企业市场，家用路由器的连接方式主要是 PPPoE 和 LAN 接入。但是现在众多学校等接入单位觉得对于 LAN 接入不方便对用户的控制和管理，于是把原本为无线网络设计的 802.1X 认证体系引入到了 LAN 网络中。802.1X 是一个二层的访问控制协议，用户只有认证之后，交换机才开放相应的端口，允许用户接入。这就是传说中的“基于端口”的管理。</p>
<p>众多学校引入了 IEEE 802.1X 之后，导致市面上的家用无线路由统统作废，因为这些设备压根就没有支持 802.1X 这回事（当然现在国内的 TP-LINK 已经顺应国情推出了支持 802.1X 认证的产品）。更可恶的是，国内的锐捷、H3C 推出了802.1x 的自有扩展协议，只能使用自己研制的客户端上网。而这些客户端无一例外地“附赠”了禁止NAT、多网卡的功能。妄图以多角度、多手段来扼杀同学们突破限制的种种企图。</p>
<p>俗话说“道高一尺，魔高一丈”，又说“上有政策，下有对策”，Linux 版本的 802.1x 客户端也自然而然的产生了。而开源固件又正好是基于 Linux 制作的。这些小路由器们个个都有支持 MIPS 指令集的 CPU，外加 4-32 MB 不等的 Flash ROM 和 RAM，本身就是一个五脏俱全的嵌入式 Linux 系统。这样就可以想办法将认证程序移植到开源固件中。</p>
<p>我去买了个 <a title="Buffalo WHR-G125 125Mbps High Speed Wireless Router" href="http://www.buffalo-technology.com/products/wireless/wireless-g-125-high-speed/wireless-g-high-speed-router-whr-g125/" target="_blank">Buffalo  WHR-G125</a> ，在 Ubuntu Linux 下半生不熟地用交叉编译工具编译出学校校园网的认证程序 mytunet，满怀希望地放上去跑，没想到程序一直停滞在“Send logon request &#8230;” 这一步，压根没有收到服务器的响应。但把网线换到 PC 上又可以正常登录。看来是某个地方有问题了。</p>
<p>后来在 Google 上使劲搜，终于找到了问题的原因，OpenWRT 的 Trac 上有两个编号为 <a title="Ticket 1687 - OpenWRT Trac" href="https://dev.openwrt.org/ticket/1687" target="_blank">1687</a> 和 <a title="Ticket 1862 - OpenWRT Trac" href="https://dev.openwrt.org/ticket/1862" target="_self">1862</a> 的 Ticket 说明了这个问题。</p>
<p>1687 放出来以后，人家没仔细看就把这个 ticket 关掉了，后面又有人 reopen ，然后再度被关闭。如此往复了几次，就晾在那没人理了。</p>
<p>1862 就更无奈了，Bug 放出来一年没有人理，四楼的哥们一怒之下来了一段抱怨的话：</p>
<blockquote><p>Judging the fact that this bug is now lingering on for more than a year (since I first pointed it out) and the zero respons from the openwrt team, I came to the understanding that the openwrt team is more interested in fancy apps than a good working tcp stack. Shame shame shame.</p></blockquote>
<p>俺七个月以前看到这个状态的时候，也觉得很无奈。人家开发者压根不鸟你，只好自己也参与讨论，然后以 Scott Liu 的身份在上面用蹩脚的英语提了提自己的意见完事。</p>
<p>后来把这个路由器在水木二手版上折价买掉了，360买回来的东西拿回来没过十天转出去的时候就是 260 了，价格掉得真快。期间有幸得到<a title="Kxn's eXercise Notes" href="http://blog.kangkang.org" target="_blank">康神</a>的指导，倍感荣幸。神说俺体察了一下网络上的民情，发现这是 Broadcom 交换芯片的硬伤，只是俺精力不如从前没工夫去 patch 了，你把它出掉是明智的。神又给我指了一条明路，说神自己的 Dell TrueMobile 2300 可以发送和接收 EAP 认证包，不存在上面的问题，指示我去买一个使用了 6996L 交换芯片的机器就没问题。</p>
<p>幸得神助，又在淘宝上淘了一个 Linksys WRT54GS <span style="text-decoration:line-through">v1.1</span> v1.0 （感谢 hyspace 指正） ，序列号以 CGN1 开头，特意跟店家确认了是 6996L 交换芯片。拿回来刷好固件，试了试，果然毫无问题地通过了校园 802.1X 认证！回来跟康神报告，神 cong 了一下又很谦虚地说“其实原因你自己之前也说了……”云云。向 atppp 学习随时随地拜康神！</p>
<p>买到了没有 bug 的硬件，这个问题基本上靠以段落了。下一段的 bugfix 又是后话。</p>
By the time  your rss reader get this post here is <strong> 10 </strong>comments ,Welcome you come to leave your opinion !<h3  class="related_post_title">相关文章</h3><ul class="related_post"><li>2009/05/01 -- <a href="http://blog.xiaoding.org/post/bug-story-on-open-source-routers-2.html" title="开源无线路由器固件上 Bug 的故事（二）">开源无线路由器固件上 Bug 的故事（二）</a> (25)</li><li>2009/06/27 -- <a href="http://blog.xiaoding.org/post/wireless-router-tx-power-measure.html" title="无线路由器功率的一点消息">无线路由器功率的一点消息</a> (6)</li><li>2009/10/13 -- <a href="http://blog.xiaoding.org/post/using-microsoft-arc-mouse.html" title="Microsoft Arc Mouse使用手记">Microsoft Arc Mouse使用手记</a> (6)</li><li>2009/03/15 -- <a href="http://blog.xiaoding.org/post/crack-be-for-time-wireless.html" title="破解了避风塘的无线密码">破解了避风塘的无线密码</a> (0)</li></ul>]]></content:encoded>
			<wfw:commentRss>http://blog.xiaoding.org/post/bug-story-on-open-source-routers.html/feed</wfw:commentRss>
		<slash:comments>10</slash:comments>
		</item>
	</channel>
</rss>
