请教唐先生和各位高手 "qnx6的网络协议下的convert模块是否要与协议分开写?“

我想写一个绕开tcp/ip协议直接调io-net接口函数的程序,是不是convert模块要独立写出来,是的话,将来怎么挂到io-net上去呢?
先谢谢了。

这个有点复杂。你所说的“绕开tcp/ip协议直接调io-net接口函数的程序”是不是想要直接从网卡输出ethernet数据包的意思?

还是说,你有一个自己的基于ethernet的协议需要实现?

是的,网卡驱动已经存在,现在是想写一个的直接从网卡输出和接收ethernet数据包程序.thanks for your attention

那样的话,你可以直接写一个Filter模块,它被加载入io-net,在你的网卡驱动上面。所有收到的数据包都先经过它。

你可以直接在Filter模块里生成数据包并tx_down()它,也可以让你的filter模块登记一个路径名,而把它自己变成一个资源管理器,这样,别的进程就可以利用这个服务 read/write 你的filter模块了。

再问一句,Filter模块怎样才能被加载入io-net呢?
thanks for your attention

io-net -p /full/path/myfilter.so filter_option1,filter_option2

or

io-net

mount -Tio-net -o filter_option1,fitler_option2 /full/path/myfilter.so

非常感谢。这个filter是FILTER ABOVE 还是FILTER BELOW,为什么不能做成CONVERTOR?
filter挂上去后是否已经自动运行了,是不是马上可以看到运行结果。(printf输出结果)

从你的情况来看,这个应该是"en"/"en"的Filter Above。

也可以做成convertor,但是通常convertor只处理有限的几种数据包。比如 ip<->en的convertor(ARP)只关心(Ether包的Type域) 0x0800 (IP数据包)和 0x0806 (ARP包). 而Filter则通常是收所有的包。

无论Filter还是别的模块,都必须有一个 io_net_dll_entry的结构,里面定义了初始化函数。在挂上去的时候,这个初始化函数被调用。模块可以在这个初始化函数里进行登录等一系列操作。在登录完成后,模块的相关数据包处理函数会被调用。

模块是在io-net的空间运行,如果在模块中printf(),就要看io-net的stdout指向何处。通常启动的io-net是在后台启动的,它没有标准输出。如果你在shell里重新启动了io-net,那你就可以printf()了。

非常感谢