阅读:1369回复:1
sirroom兄弟,你的那个分片后发送返回怎么处理的?(我开了一个队列,将MyPacket指针存入队列)
sirroom兄,现在我也在研究使用PASSTHRU作VPN,由于加密接口调用于
MPSend不在一个中断级别,所以只好开了一个队列,每来一个报文,就讲myPacket指针放入队列,在发送线程中调用加密后将重新组装后的报发送出去。但是与你碰到同样的问题就是NDISSend返回成功或PENDING怎么处理的问题,NdisIMCopySendCompletePerPacketInfo 怎么办?,还有原来的MPSend怎么返回? 不知道你现在是怎么解决的? 下面是你原来的问题: 在passthru中,偶对一个原始的IP包进行处理后,包变大了,现在一个包要变成两个才能发出去。用MPSend来说吧。 (当然,这个IP包是指一个完整的IP包,如果上面给的包就是分段的,得先重组) upper layer给的包是Packet,偶再分配一个MyPacket,对这个MyPacket偶进行处理后,这个包长度增加,要将其分为MyPacket1与MyPacket2才能发送。 代码这里偶应该如何处理 NdisSend(&Status, pAdapt->BindingHandle, MyPacket1); if (Status != NDIS_STATUS_PENDING) { //这个函数现在偶该怎么办??? NdisIMCopySendCompletePerPacketInfo ( Packet, MyPacket); NdisFreePacket(MyPacket); } 是不是象这样就没办法用这个函数处理,如果不用,程序其它地方要注意什么问题。 当然类似的在ptreceivepacket中,偶收到两个包,还原处理完了就只有一个包,也就是说MyPacket1与MyPacket2(收到的包)在处理过后就只有MyPacket了,MiniportReserved中保留的东东怎么办。 |
|
最新喜欢:wang2_... |
沙发#
发布于:2003-01-06 22:49
如果ndissend返回的不是pending,就判断一下packet是不是你分配的,是就释放,不是就把状态传给系统,如果返回pending,就给系统返回pending,然后在sendcomplete里面做判断,同样处理
|
|
|