Buddha
驱动老牛
驱动老牛
  • 注册日期2001-04-29
  • 最后登录2013-05-18
  • 粉丝0
  • 关注0
  • 积分2分
  • 威望17点
  • 贡献值0点
  • 好评度3点
  • 原创分0分
  • 专家分0分
阅读:1600回复:6

packet历程中发送的问题

楼主#
更多 发布于:2002-11-01 17:17
在packet历程中数据发送的部分(write.c)中,每次发送数据包都是先
NdisAllocatePacket(
&Status,
&pPacket,
pDevExt->PacketPool
);
return STATUS_INSUFFICIENT_RESOURCES;
}

RESERVED(pPacket)->Irp=Irp;
NdisChainBufferAtFront(pPacket,Irp->MdlAddress);

然后在SendComplete里面
NdisFreePacket(pPacket);
如果我想把同一个数据包发送多次,可不可以重复调用NdisSend,而不每次都NdisAllocatePacket呢?我在最后全部发送完成的SendComplete里在统一的NdisFreePacket,可以么?

还有我在pDevExt->PacketPool的时候指定长度为16,因此我在重复发送数据包的时候很快就会把PacketPool分配光了(因为在SendComplete里才释放,而当我发送长包的时候,sendcomplete经常要过很久才能被调用似的),不知大家有什么解决的办法么?

其实我感觉我的思路可能有问题,我总觉得重复发包不应该是这种模式,可是我对ndis理解不多,大家有什么好办法,提示一下我吧
 :( :( :(

[编辑 -  11/1/02 by  Buddha]
<table style="filter: glow(color=sky blue, strength=10)"> <font color=white> 猫生病了, 老鼠大声朗诵诗集, 并修剪盆花. 猫生病了, 老鼠慢慢刷牙洗脸, 并打扫房间. 猫生病了, 老鼠倚在窗边欣赏夜色, 并对流星许愿. 猫生病了, 老鼠也病了, 它说:"我还是习惯那种时时紧张, 处处小心, 夜夜逃亡的生活." 午夜, 我听到老鼠在叹息, 且不再读诗了. </font></table>
gjpland
驱动小牛
驱动小牛
  • 注册日期2001-09-13
  • 最后登录2011-03-22
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2002-11-01 17:36
在packet历程中数据发送的部分(write.c)中,每次发送数据包都是先
NdisAllocatePacket(
&Status,
&pPacket,
pDevExt->PacketPool
);
return STATUS_INSUFFICIENT_RESOURCES;
}

RESERVED(pPacket)->Irp=Irp;
NdisChainBufferAtFront(pPacket,Irp->MdlAddress);

然后在SendComplete里面
NdisFreePacket(pPacket);
如果我想把同一个数据包发送多次,可不可以重复调用NdisSend,而不每次都NdisAllocatePacket呢?我在最后全部发送完成的SendComplete里在统一的NdisFreePacket,可以么?

还有我在pDevExt->PacketPool的时候指定长度为16,因此我在重复发送数据包的时候很快就会把PacketPool分配光了(因为在SendComplete里才释放,而当我发送长包的时候,sendcomplete经常要过很久才能被调用似的),不知大家有什么解决的办法么?

其实我感觉我的思路可能有问题,我总觉得重复发包不应该是这种模式,可是我对ndis理解不多,大家有什么好办法,提示一下我吧
 :)

你需要的这种情况下,
Packet是必须的要重新分配的,PACKET内的BUFFER是不必的,
我思故我在,脑袋不会坏.
Buddha
驱动老牛
驱动老牛
  • 注册日期2001-04-29
  • 最后登录2013-05-18
  • 粉丝0
  • 关注0
  • 积分2分
  • 威望17点
  • 贡献值0点
  • 好评度3点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2002-11-01 17:41
你需要的这种情况下,
Packet是必须的要重新分配的,PACKET内的BUFFER是不必的,
 


怎么解释?
PACKET内的BUFFER是不必的
我每次都在pDevExt->PacketPool中重新分配一个pPacket,但我觉得这样是不是会影响我的效率?
而且足要的问题是我的pDevExt->PacketPool是有限的(16个),每次都分配很快就分光了呀
<table style="filter: glow(color=sky blue, strength=10)"> <font color=white> 猫生病了, 老鼠大声朗诵诗集, 并修剪盆花. 猫生病了, 老鼠慢慢刷牙洗脸, 并打扫房间. 猫生病了, 老鼠倚在窗边欣赏夜色, 并对流星许愿. 猫生病了, 老鼠也病了, 它说:"我还是习惯那种时时紧张, 处处小心, 夜夜逃亡的生活." 午夜, 我听到老鼠在叹息, 且不再读诗了. </font></table>
Buddha
驱动老牛
驱动老牛
  • 注册日期2001-04-29
  • 最后登录2013-05-18
  • 粉丝0
  • 关注0
  • 积分2分
  • 威望17点
  • 贡献值0点
  • 好评度3点
  • 原创分0分
  • 专家分0分
地板#
发布于:2002-11-01 19:41
如果不NdisFreePacket(pPacket);只能发几个包,然后必然死记,很奇怪,要么你就不能,为什么要发4,5个才死呢?
<table style="filter: glow(color=sky blue, strength=10)"> <font color=white> 猫生病了, 老鼠大声朗诵诗集, 并修剪盆花. 猫生病了, 老鼠慢慢刷牙洗脸, 并打扫房间. 猫生病了, 老鼠倚在窗边欣赏夜色, 并对流星许愿. 猫生病了, 老鼠也病了, 它说:"我还是习惯那种时时紧张, 处处小心, 夜夜逃亡的生活." 午夜, 我听到老鼠在叹息, 且不再读诗了. </font></table>
magicx
驱动老牛
驱动老牛
  • 注册日期2002-02-22
  • 最后登录2014-08-18
  • 粉丝1
  • 关注0
  • 积分-14分
  • 威望13点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2002-11-01 21:28
[quote]你需要的这种情况下,
Packet是必须的要重新分配的,PACKET内的BUFFER是不必的,
 


怎么解释?
PACKET内的BUFFER是不必的
我每次都在pDevExt->PacketPool中重新分配一个pPacket,但我觉得这样是不是会影响我的效率?
而且足要的问题是我的pDevExt->PacketPool是有限的(16个),每次都分配很快就分光了呀
 [/quote]
这个偶也曾经试过(失败!)

“Packet是必须的要重新分配的”,最后还是一个“时空”交换      :D

用一下这有点好处:
NdisReinitializePacket

NdisSendPackets

[color=red]大头鬼! :P[/color]
gjpland
驱动小牛
驱动小牛
  • 注册日期2001-09-13
  • 最后登录2011-03-22
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2002-11-03 18:49
[quote][quote]你需要的这种情况下,
Packet是必须的要重新分配的,PACKET内的BUFFER是不必的,
 





怎么解释?
PACKET内的BUFFER是不必的
我每次都在pDevExt->PacketPool中重新分配一个pPacket,但我觉得这样是不是会影响我的效率?
而且足要的问题是我的pDevExt->PacketPool是有限的(16个),每次都分配很快就分光了呀
 [/quote]
这个偶也曾经试过(失败!)

“Packet是必须的要重新分配的”,最后还是一个“时空”交换      :D

用一下这有点好处:
NdisReinitializePacket

NdisSendPackets

 [/quote]
本人语文水平太差了。再加上工作时间回的贴子,所以上次回贴没有表达清楚:(
其实很简单,Packet这个结构果里有着很多关于该包的单独信息,包括公开和NDIS未公开的东西,有的是用来上下层传递包的MEDIUM SPECFICITY,MINIPORT处理包的状态等,所以相互间(Protocol -->ndis-->miniport)关系很复杂。所以不可能像你这样重用。
我思故我在,脑袋不会坏.
Buddha
驱动老牛
驱动老牛
  • 注册日期2001-04-29
  • 最后登录2013-05-18
  • 粉丝0
  • 关注0
  • 积分2分
  • 威望17点
  • 贡献值0点
  • 好评度3点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2002-11-05 09:35
感谢各位的指点,我现在用的是死循环加事件的方式,虽然不死机,可是系统资源占用严重:(
<table style="filter: glow(color=sky blue, strength=10)"> <font color=white> 猫生病了, 老鼠大声朗诵诗集, 并修剪盆花. 猫生病了, 老鼠慢慢刷牙洗脸, 并打扫房间. 猫生病了, 老鼠倚在窗边欣赏夜色, 并对流星许愿. 猫生病了, 老鼠也病了, 它说:"我还是习惯那种时时紧张, 处处小心, 夜夜逃亡的生活." 午夜, 我听到老鼠在叹息, 且不再读诗了. </font></table>
游客

返回顶部