jukebox
驱动牛犊
驱动牛犊
  • 注册日期2001-08-25
  • 最后登录2002-03-13
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:2081回复:3

用passthru实现nat,遇到一些问题.......

楼主#
更多 发布于:2001-11-21 21:21
1.在做地址转换的时候,怎么知道本机还有哪些未用的port,从里面分配一个来改写ip包中的源地址port?
返回的时候再释放这个port,以供下一次分配.
有相应的函数,还是需要自己写,怎么实现呢?

2.在PtRecivePacket里,
能不能先NdisAllocatePacket(......,newpacket,....),
接着NdisAllocateMemory(VirtualAddress,.....),
然后将原有packet里的buffer链表依次copy到VirtualAddress所指的空间,
再NdisAllocateBuffer(....,newbuffer,..,VirtualAddress,...),
再循环调用NdisUnchainBufferAtFront(packet,buffer)和NdisFreeBuffer(buffer)释放原packet占用的内存.
.............(这里可以对newbuffer进行处理,过滤).
把copy好的newbuffer用NdisChainBufferAtFront(newpacket,newbuffer)链接到newpacket上.
下面再转发的时候,就转发这个新构造的packet.新分配的内存,packet在PtReceiveComplete的时候进行释放.
这样处理可行么?
或者直接把新的buffer用NdisChainBufferAtFront()链结到原packet中,再转发它.可以么?

3.对于NDIS_PACKET这个结构
typedef struct _NDIS_PACKET {

NDIS_PACKET_PRIVATE Private;
union {
struct {
UCHAR MiniportReserved[2*sizeof(PVOID)];
UCHAR WrapperReserved[2*sizeof(PVOID)];
};
struct {
UCHAR MiniportReservedEx[3*sizeof(PVOID)];
UCHAR WrapperReservedEx[sizeof(PVOID)];
};
struct {
UCHAR MacReserved[4*sizeof(PVOID)];
};
};
ULONG_PTR Reserved[2];
UCHAR ProtocolReserved[1];
} NDIS_PACKET, *PNDIS_PACKET, **PPNDIS_PACKET;

看了介绍后仍不太明白,有很多疑问.
例如:NDIS_PACKET_PRIVATE这个结构,我就不知道它的具体定义,在ddk中找不到.对于Packet->Private.Head这样的应用自然不明白了.
别的地方有更详细的介绍么?


4.我用的是2000ddk编译,softice4.0调试.不知道DBGPRINT()的输出在哪里能看到?


5.ndis的相关信息来源除了ddk文档和驱动开发网(driverdevelop.com)以外,还有哪些网站有详细介绍或讨论?


谢谢指教!

最新喜欢:

antspowerantspo...
liuhb
驱动牛犊
驱动牛犊
  • 注册日期2001-09-25
  • 最后登录2002-03-06
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2001-11-27 11:35

typedef struct _NDIS_PACKET_PRIVATE
{
UINT PhysicalCount; // number of physical pages in packet.
UINT TotalLength; // Total amount of data in the packet.
PNDIS_BUFFER Head; // first buffer in the chain
PNDIS_BUFFER Tail; // last buffer in the chain

// if Head is NULL the chain is empty; Tail doesn\'t have to be NULL also

PNDIS_PACKET_POOL Pool; // so we know where to free it back to
UINT Count;
ULONG Flags;
BOOLEAN ValidCounts;
UCHAR NdisPacketFlags; // See fPACKET_xxx bits below
USHORT NdisPacketOobOffset;
} NDIS_PACKET_PRIVATE, * PNDIS_PACKET_PRIVATE;


www.pcausa.com

混在深圳
jukebox
驱动牛犊
驱动牛犊
  • 注册日期2001-08-25
  • 最后登录2002-03-13
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2001-11-27 14:13
非常感谢!

还剩下一个问题,请大家帮忙:

1.在做地址转换的时候,怎么知道本机还有哪些未用的port,从里面分配一个来改写ip包中的源地址port?
返回的时候再释放这个port,以供下一次分配.
有相应的函数,还是需要自己写,怎么实现呢?


谢谢!
jukebox
驱动牛犊
驱动牛犊
  • 注册日期2001-08-25
  • 最后登录2002-03-13
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地板#
发布于:2001-11-29 08:26
 版主啊,帮帮忙吧.......

还有,我觉得firstbuffer包含headbuffer+lookaheadbuffer,不知对不对?
游客

返回顶部