Donghai Han's Weblog Donghai Han's Weblog

星期一 四月 03, 2006

整整一个月前,老板发信给我说要链接我的blog,然后就问我:
All I have been able to find so far was:
http://blogs.sun.com/roller/page/hdh?anchor=first_one_has_to_be
Is that all?
嗯,这个,我狂汗,是啊,申请了blog接近一年,却是连个坑都没有挖,惭愧
于是下决心,写!

这个决心一下,又是一个月过去了,申请blog已经超过一年了,今天不再下决心了,直接动手吧。

这里借用赵本山、宋丹丹和崔永元的一个著名小品的题目:昨天今天明天:

昨天,我在三层以上写代码,今天,我在二层做研发,明天,明天星期二吧?

好,废话少说,现在我正在参与的项目叫做 Ethernet bridge module for Solaris
这个项目就是在Solaris上实现以太网桥,也就是二层交换的功能。当前的目标很简单,就是实现基本的
桥接功能,包括生成树算法的实现。另外,一个间接的好处(也非常重要)就是让Solaris能够成为各种主流
虚拟机软件的宿主系统,包括VMware和Xen。

既然是网桥,那么其功能也就没有什么特别之处了,不过由于Solaris协议栈的实现采用了STREAMS与DLPI,在
Bridge的实现上就有些复杂之处了。譬如说一个很微妙的地方就在于回环(loopback)处理。

关于这个内容,我们的老大,Mike Ditto已经在OpenSolaris的
论坛上发表了意见:http://www.opensolaris.org/jive/message.jspa?messageID=28615
(在该讨论内容的底部)
另外,对这个主题感兴趣的朋友还可以参考GLDv3的源代码:
mac_txloop

i_dls_link_ether_loopback
它们一个是GLDv3 mac层的通用函数,另一个是以太网处理的相关函数。

简单点说,我们要解决的主要有以下三点:
1 数据包的发送者不再收到它自己发送的数据包,这一点对于Bridge非常重要,因为Bridge做的就是将数据包
从一个接口“桥接”到另一个(或者多个)接口,而在另一个接口发送这些数据包的时候,在当前的实现中,
这个数据包会被回环给Bridge,增加了额外的处理负担。
2 如果被发送的数据包的目的地址包含了本接口的mac地址(可以是等于,也可能是一个组播地址),就一定要
把该数据包送给合适的接收方。这一点对IP协议栈很重要,因为在当前的实现中,IP栈是没有考虑接受回环
的数据包的,原因很简单,没有需求,发送方只有一个,就是IP自己。但是加入Bridge之后就不同了,我们就
要考虑让IP接收通过Bridge转送过来的,发给本机的,针对当前接口的MAC地址的数据包了。
3 同2,从另一个角度考虑,要不要把这个数据包真正发送到网络上去,这是比较微妙的一个问题,当前还没有
定论,有时间我会再写一篇来专门讨论。

之所以要这么处理这些问题,原因就在于我们选择了做一个“守法”的DLPI公民,将Bridge实现为与IP并行的
DLS用户,而不是像各种BSD与Linux那样将Bridge“插入”到IP与网卡驱动之间,这更多的是一种哲学或者说
美学上的选择,性能的优劣,就等我们做完才知道了。

最后,再借用一下这个我很喜欢的小品的名字:
昨天,我只能在Linux/Windows上使用虚拟机,今天,我们要改变它,明天,明天确实是星期二。
评论:

写得很好,支持一下!

发表于 chengfang 在 2006年04月03日, 08:04 下午 CST #

多谢!你的也不错,尤其是关于玻璃鱼的那个!

发表于 Donghai 在 2006年04月04日, 01:34 下午 CST #

If you are still interested in the use of resume metadata and integrating them into FOAF (or it's usccessor), you might be interested in my vision (see blog link above, then checkout my website (right panel of blog)), then join the discussion board (see #2 ERADC on right panel).wow gold Well, I think that a generic skill ontology would be useful. For example you can mix my reads, speaks and writes schema with this skill ontology and say something like (in Notation3) skill:Advanced [ lang:master "en" ] . Of course, my ontology isn't the only one you could mix with this. I can think of another ontology where you can say that you know how to write a program in, i.e., Python or C/C++.wow gold Anyway, it's just a thought :)

发表于 wow gold 在 2006年04月20日, 09:34 下午 CST #

发表一条评论:
  • HTML语法: 禁用