donkeyyun
驱动牛犊
驱动牛犊
  • 注册日期2003-12-07
  • 最后登录2006-08-07
  • 粉丝0
  • 关注0
  • 积分12分
  • 威望3点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:1650回复:10

释放包的问题,很急!!!!

楼主#
更多 发布于:2004-01-05 11:34
大家好,我现在的课题遇到了这样一个问题:
    在PTReceive中,收到一个packet,复制到MyPacket中。查找路由表后,发现要把MyPacket释放掉。那我是不是必须欺骗Ndis,告诉它Packet已成功发送到上层了。但这一部分的代码我不太明白,现把我写的贴出来,请各位赐教。

.............
NDIS_SET_PACKET_STATUS(MyPacket,NDIS_STATUS_RESOURCES);

NdisIMCopySendCompletePerPacketInfo (Packet, MyPacket);

NdisFreeBuffer(pPacketBuffer);//释放原来分配的buffer和memory

NdisFreeMemory(pPacketContent,2000,0);
       NdisDprFreePacket(MyPacket);

return(NDIS_STATUS_SUCCESS);


花落满怀,暗香盈袖,淡淡欢喜淡淡愁。
cloudycro
驱动牛犊
驱动牛犊
  • 注册日期2003-12-02
  • 最后登录2006-02-08
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2004-01-06 09:17
先查表,如果要释放就不必拷贝,直接返回不行么?
 :D
cloudycro
驱动牛犊
驱动牛犊
  • 注册日期2003-12-02
  • 最后登录2006-02-08
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2004-01-06 09:18
返回NDIS_STATUS_NOT_ACCEPTED 就可以。
donkeyyun
驱动牛犊
驱动牛犊
  • 注册日期2003-12-07
  • 最后登录2006-08-07
  • 粉丝0
  • 关注0
  • 积分12分
  • 威望3点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地板#
发布于:2004-01-06 09:51
返回NDIS_STATUS_NOT_ACCEPTED ,是什么意思啊?

我现在把程序改为:
.........................
NdisFreeBuffer(pPacketBuffer);

NdisFreeMemory(pPacketContent,2000,0);
     NdisDprFreePacket(MyPacket);

pAdapt->IndicateRcvComplete = TRUE;

return(NDIS_STATUS_SUCCESS);

但还是有重启的现象
花落满怀,暗香盈袖,淡淡欢喜淡淡愁。
cloudycro
驱动牛犊
驱动牛犊
  • 注册日期2003-12-02
  • 最后登录2006-02-08
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2004-01-06 09:59
我说说我在论坛上看到得吧?
在PtReceive里面收到Packet之后,
if(这个Packet因为什么原因不符合要求)
(那个Packet不是你分配的也不用你在这里释放)直接返回。
return NDIS_STATUS_NOT_ACCEPTED;

下面在复制Packet到MyPacket,Indicate。。。
donkeyyun
驱动牛犊
驱动牛犊
  • 注册日期2003-12-07
  • 最后登录2006-08-07
  • 粉丝0
  • 关注0
  • 积分12分
  • 威望3点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2004-01-06 23:42
 :(现在有一个新问题,想问问大家,有没有人遇到过?????

我的程序流程大概如下:
MpSend中收到上层传下来的包,判断ip还是arp?
如果是arp,就查路由表,能匹配就构成arp应答发给系统;不能匹配就向路由报错,直接释放掉packet。
如果是ip,查路由表,能匹配就发出了;不能匹配就向路由报错,直接释放掉packet。

现在出现的问题是:加载程序后,几台机器之间同时互相ping,过一段时间,时间长短不确定,有时就会死机,兰屏。

softice弹出来(我加载了),显示:break due to page fault(0eh) fault=0000。这时候,从打印出来的调试信息看,是有两个mpsend重叠了。(本来是应该mpsend-ptsendcomplete-mpsend-ptsendcomplete-mpsend-ptsendcomplete...这样的顺序的),但是现在是 mpsend-mpsend-ptsendcomplete-page fault !!!

我觉得应该是mpsend和ptsendcomplete之间的问题。会不会是上层发了很多个包,imd反应不过来,导致mpsend重入照成的呢?打印的调试信息过多会不会有影响呢?

究竟为什么哪?
请大家帮帮忙!

[编辑 -  1/7/04 by  donkeyyun]
花落满怀,暗香盈袖,淡淡欢喜淡淡愁。
donkeyyun
驱动牛犊
驱动牛犊
  • 注册日期2003-12-07
  • 最后登录2006-08-07
  • 粉丝0
  • 关注0
  • 积分12分
  • 威望3点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2004-01-07 10:31
真的很急也!那位大虾能帮忙看看?万分感谢
呜呜....................................
花落满怀,暗香盈袖,淡淡欢喜淡淡愁。
cc_file
驱动牛犊
驱动牛犊
  • 注册日期2003-05-12
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
7楼#
发布于:2004-01-08 11:57
关注...

我顶
我站在人群中,笑容如阳光般的灿烂,但是你可知道,我心底的忧伤...
ljjlovernet
驱动小牛
驱动小牛
  • 注册日期2003-10-10
  • 最后登录2004-12-04
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
8楼#
发布于:2004-01-08 16:48
不太明白,试试先让NDIS状态返回NDIS_STATUS_PENDING.
我是来学习的。不打扫卫生
wxl_50685330
论坛版主
论坛版主
  • 注册日期2002-11-19
  • 最后登录2018-09-25
  • 粉丝0
  • 关注0
  • 积分1000分
  • 威望521点
  • 贡献值0点
  • 好评度419点
  • 原创分0分
  • 专家分0分
9楼#
发布于:2004-01-09 21:50
你释放的PACKET释放对没有啊?上面下来的那个不要管它,你直接返回成功就行了,只有你再MPSEND里面分配的那个才由你自己释放,你说的MPSEND不能重入我认为不是这个原因,关键是你的代码中不要把返回给上层的东西弄乱了,不要把这个包的PACKET返回给另外一个MPSEND发送的那个。如果不行,你再说详细一点儿,你没有详细说你是怎么做的(NIDS)。
根据地的兄弟们,团结就是力量
donkeyyun
驱动牛犊
驱动牛犊
  • 注册日期2003-12-07
  • 最后登录2006-08-07
  • 粉丝0
  • 关注0
  • 积分12分
  • 威望3点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
10楼#
发布于:2004-01-12 22:31
程序总是运行一段时间就蹦了,我现在发现自己程序中的一个严重问题,就是指针,我把它设为全局变量了,所以在循环时会变成null,一定会死的。

但是改后的程序还是不太稳定,不知道还有什么原因?
花落满怀,暗香盈袖,淡淡欢喜淡淡愁。
游客

返回顶部