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Àº ÆÐŶ µð½ºÅ©¸³Å͸¦ Á¤ÀÇÇÑ´Ù. üÀÎÈ­µÈ(¿¬°áµÈ) ¹öÆÛ µð½ºÅ©¸³ÅÍ Æ÷ÀÎÅ͵éÀº ¸¹Àº NdisXXX, MiniportXXX, ProtocolXXX ÇÔ¼ö¿¡°Ô Àü´ÞµÇ¾îÁö´Â Æ÷ÀÎÅ͵éÀÌ´Ù.

¸â¹ö

Private
À̰ÍÀº NDIS¿¡ ÀÇÇØ exclusively »ç¿ëÇϵµ·Ï ¿¹¾àµÇ¾ú´Ù. µå¶óÀ̹öµéÀº Àû´çÇÑ NdisXXX ÇÔ¼ö³ª NDIS Á¦°ø ¸ÅÅ©·Î¸¦ È£ÃâÇØ¾ß ÇÑ´Ù. ÀÌ ¿µ¿ªÀÇ ³»¿ëµé¿¡ ¿µÇâÀ» ÁÖ·Á¸éÀº.

MiniportReserved
NIC ¹Ì´ÏÆ÷Æ® µå¶óÀ̹ö¿Í NDIS ÀÎÅ͹̵ð¾ù µå¶óÀ̹öµéÀº ÀÌ·¯ÇÑ 8¹ÙÀÌÆ® ¿µ¿ªÀ» »ç¿ëÇÒ ¼ö ÀÖ´Ù. ±×µé ÀÚ½ÅÀÇ ¸ñÀûÀ» À§ÇÏ¿©, °¢°¢ÀÇ ±×·¯ÇÑ µå¶óÀ̹öµéÀº Ç÷¹½¬ ÆÐŶ µð½ºÅ©¸³Å͵éÀÌ Á¦°øµÇ¾îÁö´Â ÇÑ.

WrapperReserved
À̰ÍÀº NDIS¿¡ ÀÇÇØ exclusivelyÇÏ°Ô »ç¿ëÇϱâ À§ÇØ ¿¹¾àµÇ¾ú´Ù.

MacReserved
À̰ÍÀº ¸®°Å½Ã Ç® ´Ð µå¶óÀ̹ö¿¡ ÀÇÇØ »ç¿ëÀÌ ¿¹¾àµÇ¾ú´Ù.

ProtocolReserved
°í À­Ãþ ÇÁ·ÎÅäÄÝ µå¶óÀ̹ö¿Í NDIS ÀÎÅ͹̵ð¾ù µå¶óÀ̹öµéÀº ÀÌ·¯ÇÑ °¡º¯ Å©±âÀÇ ¿µ¿ªÀ» ±×µé ÀÚ½ÅÀ» À§ÇØ »ç¿ëÇÒ ¼ö ÀÖ´Ù. °¢°¢ÀÇ ±×·¯ÇÑ µå¶óÀ̹ö´Â Ç÷¹½¬ ÆÐŶ µð½ºÅ©¸³ÅÍ¿¡ Á¦°øµÇ¾îÁø´Ù.

ÁÖ¼®

NDIS µå¶óÀ̹öµéÀº NdisAllocatePacket¸¦ È£ÃâÇÏ¿© ¸ðµç ÆÐŶ µð½ºÅ©¸³ÅÍ µéÀ» ÇÒ´çÇÑ´Ù. ±×µéÀº ÀÌ ÆÐŶ µð½ºÅ©¸³Å͵éÀ» »ç¿ëÇÏ¿© NdisMIndicateReceivePacket À¸·Î À­ °èÃþ µå¶óÀ̹öµéÀÌ ¹ÞÀº °ÍµéÀ» ÀÎÁö½Ã۱â À§ÇØ »ç¿ëµÇ¾îÁø´Ù. NDIS µå¶óÀ̹öµéÀº NdisAllocatePacket¸¦ È£ÃâÇØ¾ß ÇÑ´Ù. ±×·¡¼­ ¸ðµç ÆÐŶ µð½ºÅ©¸³Å͵éÀ» ÇÒ´çÇÑ´Ù. ±×µéÀº NdisSendPackets ȤÀº NdisSend ¸¦ »ç¿ëÇØ¼­ ¾Æ·§ °èÃþÀÇ µå¶óÀ̹ö¿¡°Ô º¸³»±â À§ÇØ »ç¿ëµÇ¾îÁø´Ù. ÆÐŶ µð½ºÅ©¸³Å͵éÀº NdisTransferData¿¡°Ô Àü´ÞµÇ¾îÁö´Â °Í°ú ¸¶Âù°¡Áö·Î.

°¢ ÆÐŶ µð½ºÅ©¸³Å͵éÀ» ¿¬°áÇÔÀ¸·Î½á(chained to) Çϳª³ª ±× ÀÌ»óÀÇ ¹öÆÛ µð½ºÅ©¸³Å͵éÀ» ³×Æ®¿öÅ© ÆÐŶ µ¥ÀÌÅ͸¦ Æ÷ÇÔÇÏ´Â ¹öÆÛµé¿¡ ¸ÊÇÎÇÑ´Ù. ÆÐŶ µ¥ÀÌÅ͵éÀº ¹Þ´Â °ÍÀ̰ųª º¸³»´Â °ÍÀÌ´Ù. NIC µå¶óÀ̹öµé°ú ÀÎÅ͹̵ð¾ù µå¶óÀ̹öµéÀº ÆÐŶ µð½ºÅ©¸³Å͵éÀ» ÇÒ´çÇÒ ¼ö ÀÖ´Ù. receive indicationsÀ» À§ÇØ °ÅÀÇ 16¹ÙÀÌÆ®ÀÇ ProtocolReserved °ø°£À¸·Î.

³·Àº ·¹º§ NDIS µå¶óÀ̹öµé¿¡ ÀÇÇØ ÇÒ´çµÈ ¹öÆÛµéÀº ¹öÆÛ µð½ºÅ©¸³ÅÍ¿¡ ÀÇÇØ ¸ÊµÇ¾î¾ß ÇÑ´Ù. ¹öÆÛ µð½ºÅ©¸³Å͵éÀº NdisAllocateBufferÇÔ¼ö·Î buffer pool·ÎºÎÅÍ ÇÒ´çµÇ¾îÁø´Ù. ´ÜÁö ³ôÀº ·¹º§ÀÇ À©µµ¿ìÁî NT ÇÁ·ÎÅäÄݵéÀº MDL ¼Â¾÷À» »ç¿ëÇÒ ¼ö ÀÖ´Ù. ¾ÆÁ÷ ³ôÀº ·¹º§ µå¶óÀ̹ö¿¡¼­ NDIS_BUFFER ŸÀÔ µð½ºÅ©¸³Å͸¦ À§ÇÑ ´ë¿ëÀ¸·Î ....

NDIS µå¶óÀ̹öµéÀº ÀüÇüÀûÀ¸·Î ±×µéÀÇ Á÷°üÀûÀÎ(respective) XxxReserved ¿µ¿ªÀ» »ç¿ëÇÒ ¼ö ÀÖ´Ù. ¾Æ¿ô½ºÅÂÆÃÇÑ Àü¼Û(outstanding transfers)¿¡ ´ëÇÑ ÆÐŶ ´ç »óŸ¦ À¯ÁöÇϱâ À§ÇØ.... ¿¹¸¦ µé¾î, ÇÁ·ÎÅäÄÝÀº lookahead µ¥ÀÌÅ͸¦ Æ÷ÇÔÇÏ´Â ÇÁ·ÎÅäÄÝ ÇÒ´ç ¹öÆÛ¿¡ ´ëÇÑ Æ÷ÀÎÅ͸¦ ÀúÀåÇÑ´Ù. ±×°ÍÀÇ ProtocolReceive ÇÔ¼ö°¡ ÀÌ¹Ì Ä«ÇÇ Çß´ø, ÆÐŶ µð½ºÅ©¸³ÅÍÀÇ ProtocolReserved ¿µ¿ª³»¿¡, ÇÁ·ÎÅäÄÝÀº NdisTransferData¿¡ ´ëÇÑ È£Ãâ·Î ÇÒ´çÇÑ´Ù.

ÇϳªÀÇ µå¶óÀ̹ö´Â MiniportReserved ¿µ¿ªÀ» »ç¿ëÇÑ´Ù. ÇϳªÀÇ µå¶óÀ̹ö´Â ProtocolReserved ¿µ¿ªÀ» »ç¿ëÇÑ´Ù. ƯÁ¤ ÆÐŶ µð½ºÅ©¸³ÅͰ¡ Àü¼Û ¿¬»ê¿¡ »ç¿ëµÇ¾îÁö´Â µ¿¾È¿¡(transfer operation). °á°úÀûÀ¸·Î, NDIS Intermediate µå¶óÀ̹öµéÀº MiniportXxx¿Í ProtocolXxx ÇÔ¼öµé ´Ù °¡Áö´Â, ÀÌ·¯ÇÑ ¿µ¿ªÀ» »ç¿ëÇÒ ¼ö ¾ø´Ù. ±×µé ÀÚ½ÅÀÇ ¸ñÀûÀ¸·Î µé¾î¿À´Â ÆÐŶ µð½ºÅ©¸³Å͵éÀ» À§ÇØ.

±× ´ë½Å¿¡ NDIS intermediate µå¶óÀ̹öµéÀº °¢ µé¾î¿À´Â ÆÐŶÀ» ´Ù½Ã ÆÐŰÁöÈ­ ÇÑ´Ù. Ç÷¹½¬ ÆÐŶ µð½ºÅ©¸³Åͳ»¿¡ ±×°ÍÀÌ Àü¼Û ¿ä±¸·Î Àü´ÞÇϱâ Àü¿¡ ¾Æ·§ °èÃþ µå¶óÀ̹ö³ª À­ °èÃþ µå¶óÀ̹ö¿¡.

ÀÌ·¯ÇÑ Àü·«Àº NDIS intermediate µå¶óÀ̹ö¿Í ¾Æ·§ °èÃþ µå¶óÀ̹ö °¢°¢ÀÌ MiniportReserved ¿µ¿ªÀ» »ç¿ëÇϱâ À§ÇØ °¡Áö°í, intermediate µå¶óÀ̹ö¿Í À­ °èÃþ ÇÁ·ÎÅäÄÝ °¢°¢ÀÌ ProtocolReserved ¿µ¿ªÀ» »ç¿ëÇϱâ À§ÇØ °¡Áö°í, intermediate µå¶óÀ̹ö´Â Æí¸®ÇÏ°í °æÁ¦ÀûÀÎ ¹æ¹ýÀ¸·Î ¸ðµç ÇöÀç Àü¼Û¿¡ ´ëÇØ¼­ ÆÐŶ ´ç »óÅ Á¤º¸¸¦ À¯ÁöÇÏ´Â °ÍÀ» È®½ÇÈ÷ ÇÑ´Ù. À̰ÍÀº ¶ÇÇÑ NDIS°¡ °¢ ÆÐŶ µð½ºÅ©¸³ÅÍÀÇ Private ºÎºÐ¿¡ ¿Ã¹Ù¸¥ Á¤º¸¸¦ °¡Áö´Â °ÍÀ» È®½ÇÈ÷ ÇÑ´Ù.

µå¶óÀ̹öµéÀº ³×Æ®¿öÅ© Àü¼Û¿¡¼­ ¾Æ¿ô¿Àºê ¹êµå µ¥ÀÌÅ͸¦ °ø±ÞÇÏ°í ¼ÒºñÇÑ´Ù. µå¶óÀ̹öµéÀº ¸ÖƼ ÆÐŶ ¸®½Ãºêµé°ú º¸³»´Â °ÍÀ» °ø±ÞÇϱâ À§ÇØ ¸â¹ö ƯÁ¤ NDIS_GET/SET_XXX ¸ÅÅ©·Î¸¦ »ç¿ëÇØ¾ß ÇÑ´Ù. ȤÀº NDIS_OOB_DATA_FROM_PACKET ¸ÅÅ©·Î¸¦ »ç¿ëÇØ¼­ °¢ ÆÐŶ µð½ºÅ©¸³ÅÍ¿Í °ü·ÃµÈ NDIS_PACKET_OOB_DATA ºí·°À» Á¢±ÙÇϱâ À§ÇØ »ç¿ëÇØ¾ß ÇÑ´Ù.

ÇÁ·ÎÅäÄÝ µå¶óÀ̹ö´Â NdisSendPackets or NdisSend¸¦ ÆÐŶ µð½ºÅ©¸³ÅͷΠȣÃâÇÒ ¶§, ±×°ÍÀÌ ÆÐŶ µð½ºÅ©¸³ÅͰ¡ ProtocolSendComplete ÇÔ¼ö·Î ¸®Å쵃 ¶§±îÁö ´ÙÀ½°ú °°Àº ¼ÒÀ¯¸¦ ±¸º°ÇÑ´Ù:

  • ÇÁ·ÎÅäÄÝ ÇÒ´ç µð½ºÅ©¸³Å͵é
  • ÆÐŶ µð½ºÅ©¸³ÅÍ¿¡ ÀÇÇØ ¿¬°áµÈ(chained to) ¹öÆÛ µð½ºÅ©¸³ÅÍ¿¡ ÀÇÇØ ¸ÊµÈ ¸ðµç µ¥ÀÌÅÍ ¹öÆÛµé.
  • °¢°¢ ÇÁ·ÎÅäÄÝ ÇÏ´ç ÆÐŶ µð½ºÅ©¸³ÅÍ¿Í °ü·ÃµÈ ¸ðµç NDIS_PACKET_OOB_DATA ºí·°µé.
  • °ü·Ã ¹öÆÛ µð½ºÅ©¸³Å͸¦ À§ÇØ NDIS_PACKET_OOB_DATA ºí·°À¸·Î ÁöÁ¤µÈ out-of-band µ¥ÀÌÅÍ ¹öÆÛ.