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 µ¥ÀÌÅÍ ¹öÆÛ.
|