阅读:1650回复:10
释放包的问题,很急!!!!
大家好,我现在的课题遇到了这样一个问题:
在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); |
|
|
沙发#
发布于:2004-01-06 09:17
先查表,如果要释放就不必拷贝,直接返回不行么?
:D |
|
板凳#
发布于:2004-01-06 09:18
返回NDIS_STATUS_NOT_ACCEPTED 就可以。
|
|
地板#
发布于:2004-01-06 09:51
返回NDIS_STATUS_NOT_ACCEPTED ,是什么意思啊?
我现在把程序改为: ......................... NdisFreeBuffer(pPacketBuffer); NdisFreeMemory(pPacketContent,2000,0); NdisDprFreePacket(MyPacket); pAdapt->IndicateRcvComplete = TRUE; return(NDIS_STATUS_SUCCESS); 但还是有重启的现象 |
|
|
地下室#
发布于:2004-01-06 09:59
我说说我在论坛上看到得吧?
在PtReceive里面收到Packet之后, if(这个Packet因为什么原因不符合要求) (那个Packet不是你分配的也不用你在这里释放)直接返回。 return NDIS_STATUS_NOT_ACCEPTED; 下面在复制Packet到MyPacket,Indicate。。。 |
|
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] |
|
|
6楼#
发布于:2004-01-07 10:31
真的很急也!那位大虾能帮忙看看?万分感谢
呜呜.................................... |
|
|
7楼#
发布于:2004-01-08 11:57
关注...
我顶 |
|
|
8楼#
发布于:2004-01-08 16:48
不太明白,试试先让NDIS状态返回NDIS_STATUS_PENDING.
|
|
|
论坛版主
|
9楼#
发布于:2004-01-09 21:50
你释放的PACKET释放对没有啊?上面下来的那个不要管它,你直接返回成功就行了,只有你再MPSEND里面分配的那个才由你自己释放,你说的MPSEND不能重入我认为不是这个原因,关键是你的代码中不要把返回给上层的东西弄乱了,不要把这个包的PACKET返回给另外一个MPSEND发送的那个。如果不行,你再说详细一点儿,你没有详细说你是怎么做的(NIDS)。
|
|
10楼#
发布于:2004-01-12 22:31
程序总是运行一段时间就蹦了,我现在发现自己程序中的一个严重问题,就是指针,我把它设为全局变量了,所以在循环时会变成null,一定会死的。
但是改后的程序还是不太稳定,不知道还有什么原因? |
|
|