confused_ddk
驱动牛犊
驱动牛犊
  • 注册日期2009-04-16
  • 最后登录2011-02-16
  • 粉丝0
  • 关注0
  • 积分25分
  • 威望221点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:1647回复:5

问个问题

楼主#
更多 发布于:2009-04-16 23:38
如果在passthru中对payload进行加密,由于原始数据长度接近MTU,加密后长度超过1500,此时需要对package进行fragment,应该如何处理?

多谢。
confused_ddk
驱动牛犊
驱动牛犊
  • 注册日期2009-04-16
  • 最后登录2011-02-16
  • 粉丝0
  • 关注0
  • 积分25分
  • 威望221点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2009-04-18 15:15
自己回答吧,http://bbs.driverdevelop.com/read.php?tid=12522,虽然我对驱动了解不深,但以为构造pmtu,似乎不是那么的稳妥,比如发送pmtu的时机等等,尤须思考。
confused_ddk
驱动牛犊
驱动牛犊
  • 注册日期2009-04-16
  • 最后登录2011-02-16
  • 粉丝0
  • 关注0
  • 积分25分
  • 威望221点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2009-04-18 15:16
顺便贴个别人的ipsec的source code,http://blog.csdn.net/Mycro/archive/2006/03/01/613195.aspx
confused_ddk
驱动牛犊
驱动牛犊
  • 注册日期2009-04-16
  • 最后登录2011-02-16
  • 粉丝0
  • 关注0
  • 积分25分
  • 威望221点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地板#
发布于:2009-04-18 15:18
再来一个,那谁谁写的psudo code。

 EncapPktTech.rar
confused_ddk
驱动牛犊
驱动牛犊
  • 注册日期2009-04-16
  • 最后登录2011-02-16
  • 粉丝0
  • 关注0
  • 积分25分
  • 威望221点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2009-04-20 10:37
I thought that is answer for my problem eventually, copy from yahoo group.

///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
You need to filter the OID_GEN_MAXIMUM_TOTAL_SIZE and
OID_GEN_MAXIMUM_FRAME_SIZE queries in the completion path. There you will
see the values returned by the lower-level NIC. Stash these, and remember
that they can be greater than 1514 and 1500 for 1Gbe NICs with Jumbo frames.
Modify the value returned to higher-level protocols by subtracting the
length of your extra header. Verify that you have made this mod correctly
using OIDScope.
confused_ddk
驱动牛犊
驱动牛犊
  • 注册日期2009-04-16
  • 最后登录2011-02-16
  • 粉丝0
  • 关注0
  • 积分25分
  • 威望221点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2009-04-20 10:49
Ohooooooooo,  code also givennnnnnnnnnnn.

if (Oid == OID_GEN_MAXIMUM_FRAME_SIZE && ConfigData.LanMTU && !Adapter->bWanAdapter)
{
    if (IMReqBuffer->ReqBuffer.RequestType == NdisRequestQueryInformation)
    {
        if (IMReqBuffer->ReqBuffer.DATA.QUERY_INFORMATION.InformationBufferLength == sizeof(INT))
        {
            INT OrgSize =
                *((PULONG)IMReqBuffer->ReqBuffer.DATA.QUERY_INFORMATION.InformationBuffer);
            if (OrgSize > ConfigData.LanMTU)
            {
                *((PULONG)IMReqBuffer->ReqBuffer.DATA.QUERY_INFORMATION.InformationBuffer) = ConfigData.LanMTU;
                IMReqBuffer->ReqBuffer.DATA.QUERY_INFORMATION.BytesWritten = sizeof(INT);
                ImDbgOut(DBG_INFO, DBG_INIT, ("Spoofing FRAME_SIZE for %.08X: %d, %d\n", Adapter, ConfigData.LanMTU, OrgSize));
            }
            else
            {
                ImDbgOut(DBG_INFO, DBG_INIT, ("NOT Spoofing FRAME_SIZE for %.08X: %d, %d\n", Adapter, ConfigData.LanMTU, OrgSize));
            }
        }
    }
}

if (Oid == OID_GEN_MAXIMUM_TOTAL_SIZE && ConfigData.LanMTU && !Adapter->bWanAdapter)
{
    if (IMReqBuffer->ReqBuffer.RequestType == NdisRequestQueryInformation)
    {
        if (IMReqBuffer->ReqBuffer.DATA.QUERY_INFORMATION.InformationBufferLength == sizeof(INT))
        {
            INT OrgSize =
                *((PULONG)IMReqBuffer->ReqBuffer.DATA.QUERY_INFORMATION.InformationBuffer);
            INT Size = Adapter->TotalSize ? Adapter->TotalSize : MAXETH8023LEN;
            if (OrgSize > Size && ConfigData.LanMTU)
            {
                Size -= MAXETH8023LEN - ConfigData.LanMTU;
                *((PULONG)IMReqBuffer->ReqBuffer.DATA.QUERY_INFORMATION.InformationBuffer) = Size;
                IMReqBuffer->ReqBuffer.DATA.QUERY_INFORMATION.BytesWritten = sizeof(INT);
                ImDbgOut(DBG_INFO, DBG_INIT, ("Spoofing TOTAL_SIZE for %.08X: %d (%d, %d, %d)\n",
                    Adapter, Size, Adapter->TotalSize, ConfigData.LanMTU, OrgSize));
            }
            else
            {
                ImDbgOut(DBG_INFO, DBG_INIT,
                    ("NOT Spoofing TOTAL_SIZE for %.08X: %d (%d, %d, %d)\n", Adapter, Size, Adapter->TotalSize, ConfigData.LanMTU, OrgSize));
            }
        }
    }
}
游客

返回顶部