阅读:1793回复:10
一个对passthru有意思的修改,请求指点(给分)
passthru中数据的传输是primary网卡负责接受,secondary负责发送数据,我想把他们修改成每个网卡都是双工的,就是都能同时的收发,而且能平衡他们的流量。
我仔细看了passthru的源码,大致的熟悉了,其中数据的传输的具体细节还不是很清楚,只能做以下的修改。 修改之后,安装,能用,但是好像有很多的丢包问题而影响了效率 而且重启后,就只能是双工的发送,单工的接受了,不知道是不是我没有处理pnp事件?!! 请指教! 3x ------------------------------ 在precomp.h中定义: //************************************** BOOLEAN isPrimaryTurn_send=TRUE; //MPSend BOOLEAN isPrimaryTurn_sends=TRUE; //MPSendPackets BOOLEAN isPrimaryTurn_receive=TRUE; //PtReceive BOOLEAN isPrimaryTurn_receivep=TRUE; //PtReceivePacket //*************************************** MPSend(MPSendPackets同): //********************************************* //修改这个地方,实现两个网卡的交替使用 //ASSERT (pAdapt->pSecondaryAdapt); //pAdapt = pAdapt->pSecondaryAdapt; if(isPrimaryTurn_send) { pAdapt=pAdapt->pPrimaryAdapt; isPrimaryTurn_send=FALSE; DBGPRINTPRO(LEV_1,\"send is Pri. the val is: %d\",pAdapt->isSecondary) } else { pAdapt=pAdapt->pSecondaryAdapt; isPrimaryTurn_send=TRUE; DBGPRINTPRO(LEV_1,\"send is 2nd. the val is: %d\",! pAdapt->isSecondary) } //************************************************** PtReceive(PtReceivePacket同): //************************** //how to change here /* if(pAdapt->isSecondary) { DBGPRINT(\"PASSTHRU GETTING RECIEVES ON SECONDARY\\n\"); ASSERT(0); } */ //********************************************* //修改这个地方,实现两个网卡的交替使用 //ASSERT (pAdapt->pSecondaryAdapt); //pAdapt = pAdapt->pSecondaryAdapt; if(isPrimaryTurn_receive) { pAdapt=pAdapt->pPrimaryAdapt; isPrimaryTurn_receive=FALSE; } else { pAdapt=pAdapt->pSecondaryAdapt; isPrimaryTurn_receive=TRUE; } //************************************************** PtReceiveComplete(PtSendComplete,PtTransferDataComplete,PtReceiveComplete,MPTransferData) //********************************************* //修改这个地方, //ASSERT (pAdapt->pSecondaryAdapt); //pAdapt = pAdapt->pSecondaryAdapt; //************************************************** |
|
最新喜欢:dregs |
沙发#
发布于:2003-05-26 16:25
同时我这里能提供下列信息的查询,希望和大家交一个朋友:
CNKI(中国学术期刊) ?清华同方会议论文数据库 ?维普全文数据库 ?中国重机商务网 ?中国博硕士学位论文库 ?河北省高等学校数字图书馆 ?全国期刊联合目录 ?万方数据库 ?国务院发展研究中心信息网 ?PQDD(国际博硕士论文数据库) ?中国大陆地区UMI博士论文全文数据库 ?EI(美国工程索引,请取消代理使用) ?Elsevier ?Kluwer ?WOSP(国际科技会议录索引) ?Springer― Link全文期刊 ?Infobank(中国资讯行) ?科学(网络版) ?Nature在线 ?美国Maney出版公司及英国皇家学会网络版期刊 |
|
板凳#
发布于:2003-05-26 16:36
因为你发送出去的报文的mac地址只能是一块网卡的mac地址,所以只会有一个网卡收包
|
|
|
地板#
发布于:2003-05-26 17:14
你的机器上装了两块网卡么??
你的secondadapter是怎么得到的?你实现了LBFO? 如果没有,那你的secondadapter压根就是第一块网卡。 |
|
|
地下室#
发布于:2003-05-26 18:42
如果要改成同时\"收发\", 还需要解决如下问题:
1. 如何通过ROUTER. 每个IP地址对应于一个MAC地址. 2. 同时发送时, 需要修改以太网帧的SOURCE MAC地址段, 与相的 物理以太网卡的MAC地址对应. 3. 需要在初始化时分配好NDIS descriptors , NDIS_BUFFER等. 4. 当其中之一的物理卡不正常工作时, 怎样告诉上层的PROTOCOL DRIVER.同时, 还要解决问题1. 总之, 如改成同时\"收发\", 需要做很多工作. |
|
5楼#
发布于:2003-05-26 22:09
谢谢各位的提醒,我总结一下我得到的问题了:
1)我安装了两个一样的网卡,为的就是实现LBFO; 2)我在网卡ip设置的时候将两个网卡的IP设置成一样的,因为PASSTHRU只是将PRIMARY网卡暴露,这样外面只是看到了一个地址,而且当一个网卡失效后,提升第二快网卡,这样还可以使用那个IP地址(我想省下一个IP地址); 3)我没有修改包里面的MAC地址,所以导致了发送数据不能正确的接受,最后导致了流失了数据包,重复的几率很大,才出现了效率很低的现象。但是要是修改了MAC地址,是不是要把网卡的接收方式设置成混合模式才行?不然他们对于接受包是不是会有丢包可能 4)对于“初始化时分配好NDIS descriptors , NDIS_BUFFER“我没有考虑过,我想知道PASSTHRU中的初始化,还不能? 5)对于“物理卡不正常工作时, 怎样告诉上层的PROTOCOL DRIVER.同时”,其实在网卡提升得过程中,应该已经实现了,我认为最主要的是那个网卡恢复回来的时候,我们竟怎么做? 谢谢以上的几位朋友的提示和帮助,请继续帮助我,分是不会少的,(: 我会块块的修改代码,再来请教大家 谢谢 |
|
6楼#
发布于:2003-05-27 08:51
你就只安装两块网卡????这样就能实现LBFO了么?
你的bundleid怎么修改的??? |
|
|
7楼#
发布于:2003-05-27 11:19
我在两个网卡的各自得BundleID处都设置成1,
上面那个属性param1我没有设置的。 这样应该没有问题的吧。 而且我看到了那个现象:两个网卡交替的发送数据报,就是那个发送报数字显示的地方,依次的增大 |
|
8楼#
发布于:2003-05-27 14:19
你修改的bundleid是在sfilter下面修改的还是在网卡的下面修改的?
|
|
|
9楼#
发布于:2003-05-27 15:17
使用sfilter修改的。
这个有什么关系吗?我看那个好像修该成功了,能工作的 :) |
|
10楼#
发布于:2003-06-08 20:43
最近没有时间修改了
先奉上分 谢谢楼上大家 |
|