NDIS_PACKET_OOB_DATA

typedef struct _NDIS_PACKET_OOB_DATA {

    union {

        ULONGLONG  TimeToSend;

        ULONGLONG  TimeSent;

    };

    ULONGLONG      TimeReceived;

    UINT           HeaderSize;

    UINT           SizeMediaSpecificInfo;

    PVOID          MediaSpecificInformation;

    NDIS_STATUS    Status;

} NDIS_PACKET_OOB_DATA, *PNDIS_PACKET_OOB_DATA;

NDIS_PACKET_OOB_DATA ´Â ATM NICÀ» À§ÇÑ Á¤º¸Ã³·³ ¹Ìµð¾î´Â out-of-band Á¤º¸¸¦ Á¦°øÇϰí, ¿ä±¸Çϰí, ȤÀº Çã¶ôÇÏ´Â µå¶óÀ̹ö¿¡ ÀÇÇØ ±×¸®°í ¸ÖƼÆÐŶ ¼ö½Åµé°ú º¸³»±âµéÀ» Á¦°øÇÏ´Â µå¶óÀ̹öµé¿¡ ÀÇÇØ »ç¿ëµÈ ÆÐŶ µð½ºÅ©¸³ÅÍ¿Í °ü·ÃµÈ out-of-band Á¤º¸¸¦ ÁöÁ¤ÇÑ´Ù.

¸â¹ö

TimeToSend
ÁÖ¾îÁø ÆÐŶÀÌ ³×Æ®¿öÅ©À» ÅëÇØ Àü¼ÛµÇ¾îÁ®¾ß ÇÏ´Â ½Ã½ºÅÛ ½Ã°£ ´ÜÀ§µé·Î ½Ã°£À» ÁöÁ¤ÇÑ´Ù.

ÇÁ·ÎÅäÄݵéÀº NdisSendPackets¿¡ ÆÐŶ µð½ºÅ©¸³ÅÍ ¹è¿­ÀÇ Æ÷ÀÎÅ͵éÀ» Àü´ÞÇϰųª NdisSend¿¡ ÆÐŶ µð½ºÅ©¸³ÅÍ Æ÷ÀÎÅ͸¦ Àü´ÞÇϱâ Àü¿¡ ÀÌ·¯ÇÑ Å¸ÀÓ½ºÅÆÇÁ¸¦ ¼³Á¤ÇÒ ¼ö ÀÖ´Ù.

¾Æ·¡ µå¶óÀ̹öµé¿¡ ÀÇÇØ MiniportSendPackets ȤÀº MiniportSend ÇÔ¼öµéÀº ÁÖ¾îÁø ÆÐŶµéÀÌ ³×Æ®¿öÅ©À» ÅëÇØ Àü¼ÛµÇ¾îÁ®¾ß ÇÒ ¶§¸¦ °áÁ¤Çϱâ À§ÇØ ÀÌ·¯ÇÑ Å¸ÀÓ½ºÅÆÇÁ ÀÇ °ªÀ» °Ë»öÇÒ ¼ö ÀÖ´Ù.

TimeSent
¼ö½ÅµÈ ÆÐŶÀº ¸®¸ðÆ® ³ëµå·ÎºÎÅÍ ³×Æ®¿öÅ©À» °ÉÃÄ ¼ö½ÅµÈ ÆÐŶµéÀÌ Àü¼ÛµÇ¾îÁö´Â ½Ã½ºÅÛ ½Ã°£ ´ÜÀ§·Î ½Ã°£À» ÁöÁ¤ÇÑ´Ù.

´ÜÁö MiniportXxx ÇÔ¼öµéÀÇ ÁýÇÕÀ» ÀͽºÆ÷Æ®ÇÏ´Â NIC µå¶óÀ̹öµé°ú °¡´ÉÇÏ´Ù¸é, ÀÎÅ͹̵ð¾ù µå¶óÀ̹öµéÀº ¼ö½Å ÆÐŶµéÀ» ÀεðÄÉÀÌÆ®Çϱâ Àü¿¡ ÀÌ·¯ÇÑ Å¸ÀÓ½ºÅÆÇÁ¸¦ ¼³Á¤ÇÑ´Ù.

±×·¯ÇÑ ¹Ì´ÏÆ÷Æ® À§¿¡¼­ ¹ÙÀεåµÈ µå¶óÀ̹öµéÀÇ ProtocolReceivePacket ÇÔ¼öµéÀº ¾î¶² ƯÁ¤ ÆÐŶÀÌ ¸®¸ðÆ® ³ëµå·ÎºÎÅÍ Àü¼ÛµÇ¾îÁú ¶§¸¦ °áÁ¤Çϱâ À§ÇØ ÀÌ·¯ÇÑ Å¸ÀÓ ½ºÅÆÇÁÀÇ °ªÀ» °Ë»öÇÒ ¼ö ÀÖ´Ù. ¸¸¾à ProtocolReceive ÇÔ¼ö´Â ÀεðÄÉÀ̼ÇÀÌ Á¦°øµÇ°í ¾Æ·¡ µå¶óÀ̹ö´Â ŸÀÓ½ºÅÆÇÁ¸¦ ¼³Á¤ÇÑ´Ù¸éÀº, ProtocolReceive´Â ÀÌ·¯ÇÑ Å¸ÀÓ½ºÅÆÇÁ¸¦ Æ÷ÇÔÇÏ´Â ÆÐŶÀ» °Ë»öÇϱâ À§ÇØ NdisGetReceivePacket°ú NDIS_GET_ORIGINAL_PACKETÀ» È£ÃâÇÒ ¼ö ÀÖ´Ù.

TimeReceived
³×Æ®¿öÅ©¿¡ ÀÖ´Â ¸®¸ðÆ® ³ëµå·ÎºÎÅÍ ÁÖ¾îÁø ÆÐŶÀÌ NIC¿¡ °Ë»öµÇ¾îÁö´Â ½Ã½ºÅÛ ½Ã°£ ´ÜÀ§·Î ½Ã°£À» ÁöÁ¤ÇÑ´Ù.

´ÜÁö MiniportXxx ÇÔ¼öµéÀÇ ÁýÇÕÀ» ÀͽºÆ÷Æ®ÇÏ´Â NIC µå¶óÀ̹öµé°ú °¡´ÉÇÏ´Ù¸é, ÀÎÅ͹̵ð¾ù µå¶óÀ̹öµéÀº ÆÐŶ µð½ºÅ©¸³Å͵鿡 ´ëÇÑ Çϳª³ª ȤÀº ±× ÀÌ»óÀÇ Æ÷ÀÎÅ͵éÀ» °¡Áú ¼ö ÀÖ´Â ÆÐŶ ¹è¿­·Î NdisMIndicateReceivePacket¸¦ È£ÃâÇϱâ Àü¿¡ ÀÌ·¯ÇÑ Å¸ÀÓ½ºÅÆÇÁµéÀ» ¼³Á¤ÇÑ´Ù. ¾î¶² ±×·¯ÇÑ ¹Ì´ÏÆ÷Æ® À§¿¡ ¹ÙÀεåµÈ µå¶óÀ̹öµéÀÇ ProtocolReceivePacket ÇÔ¼öµéÀº

ÁÖ¾îÁø ÆÐŶ(µé)ÀÌ ¼ö½ÅµÇ¾îÁú ¶§¸¦ °áÁ¤Çϱâ À§ÇØ ÀÌ·¯ÇÑ Å¸ÀÓ½ºÅÆÇÁÀÇ °ªÀ» °Ë»öÇÒ ¼ö ÀÖ´Ù. ¸¸¾à ProtocolReceive ÇÔ¼ö°¡ ÀεðÄÉÀ̼ÇÀÌ ÁÖ¾îÁö°í ¾Æ·¡ µå¶óÀ̹ö°¡ ŸÀÓ½ºÅÆÇÁ¸¦ ¼³Á¤ÇÑ´Ù¸éÀº, ProtocolReceive ÇÔ¼ö´Â ÀÌ·¯ÇÑ Å¸ÀÓ½ºÅÆÇÁ¸¦ Æ÷ÇÔÇÏ´Â ÆÐŶÀ» °Ë»öÇϱâ À§ÇØ NdisGetReceivedPacket °ú NDIS_GET_ORIGINAL_PACKET¸¦ È£ÃâÇÒ ¼ö ÀÖ´Ù.

HeaderSize
ÆÐŶ µð½ºÅ©¸³ÅÍ¿¡ ¿¬°áµÈ Ãʱ⠹öÆÛ µð½ºÅ©¸³ÅÍ¿¡ ÀÇÇØ ¸ÊµÈ ¹öÆÛ³»¿¡ Æ÷ÇԵǴ ¹Ìµð¾ö ƯÁ¤ Çì´õÀÇ ¹ÙÀÌÆ® Å©±â¸¦ ÁöÁ¤ÇÑ´Ù.

Lower-Level µå¶óÀ̹öµéÀº °¢ µå¶óÀ̹öÀÇ MiniportInitialize ÇÔ¼ö°¡ Áö¿øÇϱâ À§ÇØ ¼±ÅÃµÈ ¹Ìµð¾ö¿¡ µû¶ó ¿¬¼ÓµÈ ¼ö½Å ÀεðÄÉÀ̼Ç(µé)À» À§ÇØ ÀÌ ¸â¹ö¸¦ ¼³Á¤ÇÑ´Ù.

±×·¯ÇÑ ¹Ì´ÏÆ÷Æ®À§¿¡ ¹ÙÀεåµÈ µå¶óÀ̹öµéÀÇ ProtocolReceivePacket ÇÔ¼öµéÀº ¹Ìµð¾ö ƯÁ¤ ³×Æ® ÆÐŶÀ» ó¸®ÇÏ´Â ¹æ¹ýÀ» °áÁ¤Çϱâ À§ÇØ ÀÌ·¯ÇÑ ¸â¹öÀÇ °ªÀ» °Ë»öÇÒ ¼ö ÀÖ´Ù.

SizeMediaSpecificInfo
MediaSpecificInformation¿¡¼­ ¹öÆÛÀÇ ¹ÙÀÌÆ® Å©±â¸¦ ÁöÁ¤ÇÑ´Ù.

µå¶óÀ̹ö´Â ¸¸¾à º¸³»¾îÁö°Å³ª ȤÀº ÀεðÄÉÀÌÆ®µÇ´Â ÆÐŶÀ¸·Î out-of-band Á¤º¸¸¦ Á¦°øÇÑ´Ù¸éÀº ÀÌ ¸â¹ö¸¦ ¼³Á¤ÇØ¾ß ÇÑ´Ù.

MediaSpecificInformation
µå¶óÀ̹ö ÇÒ´ç ¹öÆÛÀÇ ÁÖ¼Ò¸¦ ÁöÁ¤ÇÑ´Ù. ÀÌ ¹öÆÛ´Â ÆÐŶ µð½ºÅ©¸³ÅÍ·Î ÁöÁ¤µÈ ³×Æ® ÆÐŶ°ú µ¿¹ÝÇÑ ATM NICÀ» À§ÇÑ Á¤º¸¿Í °°Àº ¾î¶² out-of-band µ¥ÀÌÅ͸¦ Æ÷ÇÔÇÑ´Ù. out-of-band µ¥ÀÌÅÍ´Â ¼ö½Å ÀεðÄÉÀ̼ÇÀ» À§ÇØ ÇÒ´çÇÏ´Â ¹Ì´ÏÆ÷Æ®¿¡ ÀÇÇØ ȤÀº º¸³»±â¸¦ À§ÇØ ÇÒ´çÇÏ´Â ÇÁ·ÎÅäÄÝ¿¡ ÀÇÇØ ¼³Á¤µÇ¾îÁø´Ù.

µå¶óÀ̹ö ŸÀÔÀº ó¸®ÇÏ´Â ¹æ¹ýÀ» °áÁ¤Çϱâ À§ÇØ out-of-band µ¥ÀÌÅÍ ¹öÆÛÀÇ ÁÖ¼Ò¿Í Å©±â¸¦ °Ë»öÇÒ ¼ö Àְųª ȤÀº µé¾î¿À´Â ÆÐŶ µð½ºÅ©¸³ÅÍ·Î ÁöÁ¤µÈ ¼ö½Å ȤÀº º¸³»±â¸¦ ÇØ¼®ÇÒ ¼ö ÀÖ´Ù. ¸¸¾à ProtocolReceive ÇÔ¼ö°¡ ÀεðÄÉÀ̼ÇÀÌ ÁÖ¾îÁö°í ¾Æ·¡ µå¶óÀ̹ö°¡ ÀÌ Á¤º¸¸¦ Á¦°øÇÑ´Ù¸éÀº, ProtocolReceive´Â ÀÌ ¹öÆÛÀÇ °¡»ó ¹üÀ§¸¦ Æ÷ÇÔÇÏ´Â ÆÐŶÀ» °Ë»öÇϱâ À§ÇØ NdisGetReceivePacket°ú NDIS_GET_ORIGINAL_PACKETÀ» È£ÃâÇÒ ¼ö ÀÖ´Ù.

Status
ÆÐŶ µð½ºÅ©¸³ÅÍÀÇ Çö »óÅÂ¿Í ÆÐŶ µð½ºÅ©¸³ÅÍ¿¡ ÁöÁ¤µÈ ¸ðµç µå¶óÀ̹ö ÇÒ´ç ÀÚ¿øµéÀÇ ¼ÒÀ¯±ÇÀ» ÁöÁ¤ÇÑ´Ù.

´ÜÁö lower-level µå¶óÀ̹öµé°ú NDIS°¡ ÀÌ ¸â¹ö¸¦ ¼³Á¤ÇÑ´Ù.

In the Receive Path

¹Ì´ÏÆ÷Æ®´Â °ü·ÃµÈ ÆÐŶ µð½ºÅ©¸³ÅÍ(µé)³»¿¡ ÁöÁ¤µÈ ÇÒ´çµÈ ÀÚ¿øµéÀÇ ¼ÒÀ¯±ÇÀ» ¾ó¸¶³ª °ð ¾òÀ» Çʿ䰡 ÀÖ´ÂÁö¸¦ ÀεðÄÉÀÌÆ®Çϱâ À§ÇØ NdisMIndicateReceivePacketÀ» È£ÃâÇϱâ Àü¿¡ ÀÌ ¸â¹ö¸¦ ¼³Á¤ÇÒ ¼ö ÀÖ´Ù. Á÷·ÄÈ­µÈ µå¶óÀ̹ö´Â ÀεðÄÉÀ̼ÇÀ» À§ÇØ ÆÐŶ µð½ºÅ©¸³ÅÍ·Î ÁöÁ¤µÈ ÀÚ¿øµéÀÌ Áï½Ã Àç»ç¿ëÀ» À§ÇØ Áغñ°¡ µÇ¾ú´ÂÁö¸¦ °áÁ¤Çϱâ À§ÇØ NdisMIndicateReceivePacket ÇÔ¼ö·ÎºÎÅÍ ¸®ÅÏÇÏ´Â ÀÌ·¯ÇÑ °ªÀ» °Ë»öÇÒ ¼ö ÀÖ´Ù. ±×·¯³ª ºñÁ÷·ÄÈ­µÈ ȤÀº ¿¬°á ÁöÇâ ¹Ì´ÏÆ÷Æ®´Â NdisMCoIndicateReceivePacketÀ¸·ÎºÎÅÍ ¸®ÅÏÇÏ´Â ÀÌ·¯ÇÑ °ªÀ» üũÇÒ Çʿ䰡 ¾ø´Ù.

In the Send Path

Á÷·ÄÈ­µÈ ¹Ì´ÏÆ÷Æ®´Â ºñµ¿±âÀûÀ¸·Î ¿ä±¸¸¦ ¿Ï¼ºÇÒ °ÍÀ̶ó°í NDIS¿¡°Ô ¾Ë¸®´Â ȤÀº ¸î¸î ȤÀº ¸ðµç µé¾î¿À´Â ÆÐŶ ¹è¿­À» NDIS°¡ ´Ù½Ã Å¥¿¡ ÀúÀåÇÏ°í ³ªÁß¿¡ MiniportSendPackets ÇÔ¼ö¿¡°Ô ÀÌ·¯ÇÑ ÆÐŶ µð½ºÅ©¸³Å͵éÀ» ´Ù½Ã Á¦ÃâÇϵµ·Ï ¿ä±¸Çϱâ À§ÇØ µé¾î¿À´Â º¸³»±â¸¦ Áï½Ã ¿Ï¼ºÇϱâ À§ÇØ MiniportSendPackets ÇÔ¼ö³»¿¡ ÀÌ ¸â¹ö¸¦ ¼³Á¤ÇÒ ¼ö ÀÖ´Ù.

ÇÁ·ÎÅäÄÝÀº NdisSendPackets ȤÀº NdisSend¿¡ ´ëÇÑ È£Ãâ·ÎºÎÅÍ ¸®ÅÏÇÏ´Â º¸³»±âÀÇ ¿Ï¼º »óŸ¦ °áÁ¤Çϱâ À§ÇØ ÀÌ °ªÀ» °Ë»öÇÒ ¼ö ¾ø´Ù.

ºñÁ÷·ÄÈ­µÈ ȤÀº ¿¬°á ÁöÇâ ¹Ì´ÏÆ÷Æ®´Â NDIS°¡ ¸î¸î ȤÀº ¸ðµç µé¾î¿À´Â ÆÐŶ ¹è¿­À» NDIS°¡ ´Ù½Ã Å¥¿¡ ÀúÀåÇÏ´Â ¿ä±¸(Status ¸â¹ö¸¦ ¼³Á¤ÇÔÀ¸·Î½á) ȤÀº µ¿±âÀûÀ¸·Î ¸ÖƼ ÆÐŶ º¸³»±â¸¦ ¿Ï¼ºÇÒ ¼ö ¾ø´Ù. ±× ´ë½Å¿¡, ºñÁ÷·ÄÈ­µÈ ȤÀº ¿¬°á ÁöÇâ ¹Ì´ÏÆ÷Æ®´Â ¸¸¾à Áï½Ã µ¥ÀÌÅ͸¦ º¸³¾ ¼ö ¾ø´Ù¸éÀº ³»ºÎÀûÀ¸·Î ¸ðµç µé¾î¿À´Â ÆÐŶ ¹è¿­À» Å¥¿¡ ÀúÀåÇØ¾ß Çϰí Ç×»ó ¹è¿­³»¿¡ °¢ ÆÐŶÀ» À§ÇØ ºñµ¿±âÀûÀ¸·Î NdisMSendComplete(ȤÀº NdisMCoSendComplete)·Î ºñµ¿±âÀûÀ¸·Î ¸ÖƼ ÆÐŶ º¸³»±â¸¦ ¿Ï¼ºÇØ¾ß ÇÑ´Ù.

ÁÖ¼®

NdisAllocatePacket·Î ÇÒ´çµÈ ¸ðµç ÆÐŶ µð½ºÅ©¸³ÅÍ´Â °ü·ÃµÈ NDIS_PACKET_OOB_DATA ºí·°À» °¡Áø´Ù. ´ÜÁö Àü¼ÛµÇ¾îÁö´Â °¢ ³×Æ®¿öÅ© ÆÐŶÀ» °¡Áö´Â, ¸ÖƼÆÐŶ º¸³»±âµé°ú ȤÀº ¼ö½ÅµéÀ» Áö¿øÇÏ´Â µå¶óÀ̹öµé°ú ÆÐŶ ¿ì¼±±Ç°ú °°Àº out-of-band Á¤º¸¸¦ Áö¿øÇÏ´Â µå¶óÀ̹öµéÀº OOB ºí·°À» »ç¿ëÇÑ´Ù. ±×·³¿¡µµ ºÒ±¸Çϰí, ¹Ù¿îµåµÈ µå¶óÀ̹ö »çÀÌ¿¡ Àü¼ÛµéÀ» À§ÇØ ÆÐŶ µð½ºÅ©¸³Å͵éÀ» ÇÒ´çÇÏ´Â NDIS µå¶óÀ̹ö´Â ÃʱâÈ­ÇÒ ¶§ °¢ ±×·¯ÇÑ NDIS µå¶óÀ̹ö´Â Ç×»ó ÇÒ´çÇÏ´Â ÆÐŶ pool·ÎºÎÅÍ NdisAllocatePacketÀ¸·Î ÀÌ·¯ÇÑ ÆÐŶ µð½ºÅ©¸³Å͵éÀ» ÇÒ´çÇØ¾ß ÇÑ´Ù.

ÀϹÝÀûÀ¸·Î, ³ôÀº ´É·Â(capacity)ÀÇ ¹ö½º ¸¶½ºÅÍ DMA NICµéÀÇ µå¶óÀ̹öµéÀº ±×·¯ÇÑ NIC µå¶óÀ̹ö´Â ¸ÖƼ ÆÐŶ Àü¼ÛµéÀ» Áö¿øÇÔÀ¸·Î½á °¡Àå Å« ÆÛÆ÷¸Õ½º À̵æµéÀ» ¸¸µé±â ¶§¹®¿¡ ¸ÖƼÆÐŶ ¼ö½Åµé°ú º¸³»±âµéÀ» Áö¿øÇÒ °ÍÀÌ´Ù. ±×·¯ÇÑ ¾Æ·¡ NIC µå¶óÀ̹ö¿Í ¹ÙÀεåµÈ ÇÁ·ÎÅäÄÝÀº ¶ÇÇÑ ÃÖ´ë ÆÛÆ÷¸Õ½º¸¦ À§ÇØ ¸ÖƼÆÐŶ º¸³»±âµé°ú ¼ö½ÅµéÀ» ¶ÇÇÑ Áö¿øÇØ¾ß ÇÑ´Ù.

±×·¯ÇÑ ÇÁ·ÎÅäÄÝÀº ¶ÇÇÑ ¸ÖƼ ÆÐŶ Àü¼Û Áö¿ø¾øÀÌ ¶ÇÇϳªÀÇ NIC µå¶óÀ̹ö¿Í ¹ÙÀεåµÈ´Ù¸éÀº NDIS´Â Ç×»ó ÇÁ·ÎÅäÄÝÀÇ ProtocolReceive ÇÔ¼ö¸¦ È£ÃâÇÔÀ¸·Î½á ±×¸®°í NIC µå¶óÀ̹öÀÇ MiniportSend ÇÔ¼ö´Â È£Ãâ´ç ÇϳªÀÇ ÆÐŶÀ¸·Î È£ÃâÇÔÀ¸·Î½á ¾çÂÊ µå¶óÀ̹ö¿¡ Åõ¸íÇÑ ½ÄÀ¸·Î ¸ÖƼ ÆÐŶ º¸³»±âµé°ú ÇϳªÀÇ ÆÐŶ ¼ö½ÅµéÀ» ´Ù·é´Ù. À¯»çÇϰÔ, ¸¸¾à ¸ÖƼ ÆÐŶ Àü¼ÛµéÀ» Áö¿øÇÏÁö ¾Ê´Â ÇÁ·ÎÅäÄÝÀº ±×·¸°Ô ÇÏ´Â NIC µå¶óÀ̹öµé°ú ¹ÙÀεåµÈ´Ù¸éÀº, NDIS´Â ¸ÖƼÆÐŶ ¼ö½Å ÀεðÄÉÀ̼ǵé°ú ÇϳªÀÇ ÆÐŶ º¸³»±â¸¦ ºñ·Ï ¾Æ·¡ NIC µå¶óÀ̹öÀÇ MiniportSendPackets ÇÔ¼ö°¡ ´ÜÁö ±×·¯ÇÑ ÇÁ·ÎÅäÄݷκÎÅÍ NdisSend ¿¡ ´ëÇÑ È£Ãâ´ç ÇϳªÀÇ º¸³»±â ¿ä±¸°¡ Á¦°øµÇÁö¸¸Àº ¾çÂÊ µå¶óÀ̹öµé¿¡ Åõ¸íÇÑ ½ÄÀ¸·Î ´Ù·é´Ù.

Using Timestamps

ÆÐŶ µð½ºÅ©¸³Å͵é°ú °ü·ÃµÈ NDIS_PACKET_OOB_DATA ºí·°µé³»¿¡ ¼³Á¤µÈ ¸ðµç ŸÀÓ½ºÅÆÇÁµéÀº 12:00 a.m., January 1, 1601 ÀÌ·¡ 100-nanosecond ½Ã°£°£°ÝÀÇ ¼ö·Î ½Ã½ºÅÛ ½Ã°£ ´ÜÀ§µé·Î Ç¥ÇöµÇ¾îÁø´Ù.

NDIS µå¶óÀ̹öµéÀº NDIS_SET_PACKET_TIME_XXX ¸ÅÅ©·ÎµéÀ» »ç¿ëÇÏ¿© ÀÌ·¯ÇÑ Å¸ÀÓ½ºÅÆÇÁµéÀ» ¼³Á¤ÇÒ ¶§ NdisGetCurrentSystemTimeÀ» È£ÃâÇÒ ¼ö ÀÖ´Ù. ¾ÆÁ÷µµ »óÀ§ ·¹º§ µå¶óÀ̹öµé ȤÀº ½Ã½ºÅÛ ¿ä¼ÒµéÀº ÀÌ·¯ÇÑ Å¸ÀÓ½ºÅÆÇÁµéÀ» ¿£µåÀ¯Àúµé¿¡°Ô ´õ ÀǹÌÀÖ´Â ·ÎÄà ƯÁ¤ °ªµé·Î º¯È¯ÇÒ ¼ö ÀÖ´Ù.

Supplying Out-of-Band Information with Packets

SizeMediaSpecificInfo¿Í MediaSpecificInformation ¸â¹öµé³»¿¡¼­ ÁöÁ¤µÈ ¾î¶² out-of-band Á¤º¸´Â ¹Ìµð¾ö ŸÀÓ Æ¯Á¤ÀÌ´Ù. ¿¹¸¦ µé¾î, ¸î¸î ŸÀÔµéÀÇ ¹Ìµð¾î´Â ±×µéÀÌ º¸³»´Â °¢ ÆÐŶÀ» À§ÇÑ ÆÐŶ ¿ì¼±±ÇÀ» ÁöÁ¤ÇÏ´Â ÇÁ·ÎÅäÄݵéÀ» ¿ä±¸ÇÏ°í ±×µéÀÌ ÀεðÄÉÀÌÆ®ÇÏ´Â °¢ ¼ö½Å ÆÐŶ¿¡ ÆÐŶ ¿ì¼±±ÇÀ» ÁöÁ¤ÇÏ´Â NIC µå¶óÀ̹öµéÀ» ¿ä±¸ÇÑ´Ù. ±×·¯ÇÑ NIC µå¶óÀ̹ö´Â ÀÌ·¯ÇÑ Å¸ÀÓµéÀÇ ¹Ìµð¾î ¿ä±¸µéÀ» ½ÇÇàÇϱâ À§ÇØ NdisM(Co)IndicateReceivePacketÀ» È£ÃâÇØ¾ß ÇÑ´Ù.

NDIS°¡ 0¿¡¼­ 7±îÁö ¿ì¼±±Ç °ªµéÀ» À§ÇÑ Áö¿øÀ» Á¦°øÇÏ´Â ¹Ý¸é, ¸î¸î ¹Ìµð¾î´Â ´ÜÁö µÎ ·¹º§ÀÇ ¿ì¼±±ÇÀ» Áö¿øÇÑ´Ù. ÀÌ·¯ÇÑ Å¸ÀÔÀÇ ¹Ìµð¾î¸¦ À§ÇØ, NDIS µå¶óÀ̹öµéÀº ¹Ìµð¾ö ƯÁ¤ ÀϹÝÀûÀÎ ¿ì¼±±Ç °ªÀ» 0¿¡¼­ 3À¸·Î °ªµéÀ» ¸ÊÇØ¾ß Çϰí(Ç×»ó ±×·¯ÇÑ ¹Ìµð¾î ŸÀÔµéÀ» À§ÇØ 0) ¹Ìµð¾ö ƯÁ¤ ³ôÀº ¿ì¼±±Ç °ªÀ» 4¿¡¼­ 7·Î °ªµéÀ»( ±×·¯ÇÑ ¹Ìµð¾î ŸÀÔÀ» À§ÇØ Ç×»ó Çϳª) ¸ÊÇØ¾ß ÇÑ´Ù.

MediaSpecificInformation¿¡ ¹öÆÛ³»¿¡ °¢°¢ÀÇ ·¹ÄÚµåµéÀÇ ±¸Á¶Ã¼´Â ´ÙÀ½°ú °°ÀÌ Á¤ÀǵǾîÁø´Ù.


typedef struct MediaSpecificInformation

{

   UINT NextEntryOffset;

   NDIS_CLASS_ID ClassId;

   UINT Size;

   UCHAR ClassInformation[1];

} MEDIA_SPECIFIC_INFORMATION;

ÀÌ ±¸Á¶Ã¼ÀÇ ¸â¹öµéÀº ´ÙÀ½ÀÇ Á¤º¸¸¦ Æ÷ÇÔÇÑ´Ù:

NextEntryOffset
´ÙÀ½ ·¹Äڵ峻¿¡ ÀÌ ¸â¹ö³»¿¡ ¹ÙÀÌÆ® ¿É¼ÂÀ» ÁöÁ¤ÇÑ´Ù. 0Àº ¹öÆÛ³»¿¡ ¸¶Áö¸· ·¹Äڵ带 °¡¸®Å²´Ù. ¸¶Áö¸· ·¹Äڵ忡 ¸ðµç ³²¾ÆÀÖ´Â ¸â¹öµéÀÇ °ªµéÀº ¶ÇÇÑ 0ÀÌ´Ù. ÀÌ ¸â¹öÀÇ °ªÀÌ 4¹ÙÀÌÆ® Á¤·ÄÀÌ µÉ °ÍÀÌ´Ù.

ClassId
·¹ÄÚµåÀÇ Å¸ÀÔÀ» ÁöÁ¤ÇÑ´Ù. °¡´ÉÇÑ °ªµéÀº ´ÙÀ½ÀÇ ÇϳªÀÌ´Ù:

NdisClass802_3Priority
ÀÌ °ªÀ» ´õ ÀÌ»ó »ç¿ëÇÏÁö ¾Ê´Â´Ù. ÆÐŶ ´ç ¿ì¼±±ÇÀº NDIS_PACKET_EXTENSION ±¸Á¶Ã¼³»¿¡ Æ÷ÇԵǾî ÀÖ´Â ¹è¿­ÀÇ ¸â¹öÀÌ´Ù. µå¶óÀ̹öµéÀº ÆÐŶ µð½ºÅ©¸³ÅͷκÎÅÍ ÆÐŶ ¿ì¼±±Ç¿¡ Á¢±ÙÇϱâ À§ÇØ NDIS_PER_PACKET_INFO_FROM_PACKET ȤÀº NDIS_PACKET_EXTENSION_FROM_PACKET ¸ÅÅ©·ÎµéÀ» »ç¿ëÇÑ´Ù.

NdisClassWirelessWanMbxMailbox
¾Æ·¡ NIC µå¶óÀ̹ö´Â ¸ÞÀϹڽº Ç÷¡±×°¡ °ü·ÃµÈ ÆÐŶÀ» À§ÇØ ¼³Á¤µÉ °ÍÀÎÁö¸¦(1 = ¸ÞÀÏ ¹Ú½º Ç÷¡±× ¼³Á¤, 0 = ¸ÞÀϹڽº Ç÷¡±×¸¦ ¼³Á¤¾ÈÇÔ.) °áÁ¤Çϱâ À§ÇØ ClassInformation¿¡ ULONG Å©±â ·¹Äڵ带 Á¶»çÇÑ´Ù.

NdisClassIrdaPacketInfo
¾Æ·¡ IrDA NIC µå¶óÀ̹ö´Â Àü¼ÛµÉ ÇÁ·¹ÀÓÀ» Ãß°¡ÇØ¾ß ÇÏ´Â Frame(BOF) Ç÷¡±×µéÀÇ Ãß°¡ÀûÀÎ BeginnignÀÇ ¼ö¿Í NICÀÌ Àü¼ÛÀ» ½ÃÀÛÇÒ ¼ö ÀÖ±â Àü¿¡ Àü¼ÛÀ» ¼ö½Å ÈÄ¿¡ ±â´Ù·Á¾ß ÇÏ´Â (¸¶ÀÌÅ©·Î ÃÊ·Î) ÃÖ¼Ò ½Ã°£À» °áÁ¤Çϱâ À§ÇØ ClassInformation ³»¿¡ NDIS_IRDA_PACKET_INFO¸¦ Á¶»çÇÑ´Ù.

NDIS_IRDA_PACKET_INFO ±¸Á¶Ã¼´Â ´ÙÀ½°ú °°ÀÌ Á¤ÀǵȴÙ:


typedef struct _NDIS_IRDA_PACKET_INFO

{

   UINT ExtraBOFs;

   UINT MinTurnAroundTime;

} NDIS_IRDA_PACKET_INFO, *PNDIS_IRDA_PACKET_INFO;

NdisClassAtmAALInfo
ATM NICÀ» À§ÇØ ¾Æ·¡ NDIS µå¶óÀ̹ö¿¡°Ô ÆÐŶÀ» º¸³»±â Àü¿¡, ÇÁ·ÎÅäÄÝ µå¶óÀ̹ö´Â ClassInformation¿¡ ATM_AAL_OOB_INFO ±¸Á¶Ã¼³»¿¡ Àû´çÇÑ Á¤º¸¸¦ ¼³Á¤ÇÑ´Ù.

ATM_AAL_OOB_INFO ±¸Á¶Ã¼´Â ´ÙÀ½°ú °°ÀÌ Á¤ÀǵȴÙ:


typedef struct _ATM_AAL_OOB_INFO

{

   ATM_AAL_TYPE AalType;

   union

   {

      struct _ATM_AAL5_INFO

      {

          BOOLEAN CellLossPriority;

          UCHAR PayLoadTypeIdentifier;

      } ATM_AAL5_INFO;

      struct _ATM_AAL0_INFO

      {

         BOOLEAN CellLossPriority;

         UCHAR PayLoadTypeIdentifier;

      } ATM_AAL0_INFO;

   };

} ATM_AAL_OOB_INFO, *PATM_AAL_OOB_INFO;

AAL5 ÆÐŶÀ» º¸³¾ ¶§, ÇÁ·ÎÅäÄÝÀº ¹Ì´ÏÆ÷Æ®°¡ ATM ÆÐŶ Çì´õÀÇ ÀÀ´äÇÏ´Â ÇʵåµéÀ» ¼³Á¤ÇØ¾ß ÇÏ´Â °ªµé¿¡ ´ëÇØ ATM_AAL5_INFO ±¸Á¶Ã¼ÀÇ ¸â¹öµéÀ»(CellLostPriority, UserToUserIndication, CommonPartIndicator) ¼³Á¤ÇØ¾ß ÇÑ´Ù. AAL0 ÆÐŶÀ» º¸³¾ ¶§, ÇÁ·ÎÅäÄÝÀº ¹Ì´ÏÆ÷Æ®°¡ ATM ¼¿ Çì´õÀÇ ÀÀ´äÇÏ´Â ÇʵåµéÀ» ¼³Á¤ÇØ¾ß ÇÏ´Â °ªµé¿¡ ´ëÇØ ATM_AAL0_INFO ±¸Á¶Ã¼ÀÇ ¸â¹öµéÀ»(CellLossPriority, CommonPartIndicator) ¼³Á¤ÇØ¾ß ÇÑ´Ù.

¾Æ·¡ µå¶óÀ̹ö´Â AAL5 ÆÐŶ Çì´õ ȤÀº AAL0 ¼¿ Çì´õ³»¿¡ ÇʵåµéÀ» À§ÇÑ °ªµéÀ» ¾ò±â À§ÇØ ATM_AAL_OOB_INFO ±¸Á¶Ã¼¸¦ Á¶»çÇØ¾ß ÇÑ´Ù.

Size
4¹ÙÀÌÆ® °æ°è·Î ´ÙÀ½ ·¹ÄÚµåÀÇ NextEntryOffset¸¦ Á¤·ÄÇϱâ À§ÇØ ÇÊ¿äÇÑ ¾î¶² ÆÐµùÀ» Æ÷ÇÔÇÏ´Â ClassInformation ¹è¿­³»¿¡ ¹ÙÀÌÆ® ¼öµéÀ» ÁöÁ¤ÇÑ´Ù.

ClassInformation
ÀÌ ·¹Äڵ带 À§ÇÑ out-of-band Á¤º¸¸¦ ÁöÁ¤ÇÑ´Ù.
NDIS_CLASS_ID ŸÀÔÀº NDIS Á¤ÀÇ ¿­°ÅÀÌ´Ù.(enumeration) ´ëºÎºÐÀÇ ·¹ÄÚµåµéÀ» À§ÇÑ °øÅë Ŭ·¡½º ºÐ·ù(classifications)µéÀº ½Ã½ºÅÛ Á¤ÀÇ °ªµé·Î ÁöÁ¤µÉ °ÍÀÌ´Ù. ±×·¯³ª, ÀÌ·¯ÇÑ ¿­°Å¿¡¼­ °ªµéÀÇ ¹üÀ§´Â º¥´õ Á¤ÀÇ ½ÃÇèÀûÀΠŬ·¡½ºµéÀ» À§ÇØ »ç¿ëµÉ °ÍÀÌ´Ù.

Setting Status Before Making Receive Indications

´ÜÁö ¾Æ·¡ ·¹º§ NDIS µå¶óÀ̹öµéÀº ¼ö½Å ÀεðÄÉÀ̼ǵéÀ» À§ÇØ ÀÌ·¯ÇÑ ±¸Á¶Ã¼ÀÇ Status ¸â¹ö¸¦ »ç¿ëÇÑ´Ù. ±×·¯ÇÑ µå¶óÀ̹ö°¡ NdisMIndicateReceivePacket ÇÔ¼ö¸¦ È£ÃâÇϱâ Àü¿¡, ´ÙÀ½°ú °°Àº °ªµé·Î ÀεðÄÉÀÌÆ®µÇ¾îÁö´Â ¹è¿­³»¿¡ Çϳª³ª ȤÀº ±× ÀÌ»óÀÇ ÆÐŶ µð½ºÅ©¸³Å͵éÀ» À§ÇØ NDIS_SET_PACKET_STATUS·Î Status¸¦ ¼³Á¤ÇÑ´Ù:

NDIS_STATUS_SUCCESS
µå¶óÀ̹ö°¡ ÆÐŶ µð½ºÅ©¸³ÅͰ¡ MiniportReturnPacket¿¡ ´ëÇØ ¸®Å쵃 ¶§±îÁö NdisM(Co)IndicateReceivePacketÀ¸·Î ÀεðÄÉÀÌÆ®ÇÏ·Á´Â ÆÐŶÀÇ ¼ÒÀ¯±ÇÀ» ¾çµµÇÒ °ÍÀ̶ó°í NDIS¿¡°Ô ¸»ÇÑ´Ù.

ÀεðÄÉÀ̼ÇÀ» ¼ö½ÅÇÑ ÇÁ·ÎÅäÄݵéÀº °ü½ÉÀִ Ŭ¶óÀÌ¾ðÆ®µé¿¡°Ô ÀεðÄÉÀÌÆ®µÈ µ¥ÀÌÅ͸¦ Æ÷¿öµå Çϱâ À§ÇØ °¡´ÉÇÑÇÑ È¤Àº ÀεðÄÉÀÌÆ®µÈ net ÆÐŶ µ¥ÀÌÅ͸¦ º¹»çÇϱâ À§ÇØ ÆÐŶ¿¡ Á¦°øµÈ ¾î¶² out-of-band Á¤º¸¿Í ÆÐŶ µð½ºÅ©¸³ÅÍ¿¡ ¿¬°áµÈ ¹öÆÛ µð½ºÅ©¸³ÅÍ¿¡ ÀÇÇØ ¸ÊµÈ ¸ðµç ¹öÆÛ¿¡ µû¶ó ÆÐŶ µð½ºÅ©¸³Å͸¦ »ç¿ëÇÒ ¼ö ÀÖ´Ù.

NDIS_STATUS_RESOURCES
µå¶óÀ̹ö´Â NdisM(Co)IndicateReceivePacket ÇÔ¼ö·Î ÀεðÄÉÀÌÆ®ÇÏ·Á°í ÇÏ´Â ÆÐŶÀÇ ¼ÒÀ¯±ÇÀ» º¸À¯ÇÒ °ÍÀ̶ó°í NDIS¿¡°Ô ¸»ÇÑ´Ù. ÀÌ ÆÐŶÀº ¹ÙÀεåµÈ ÇÁ·ÎÅäÄݵéÀÇ ProtocolReceive ȤÀº ProtocolCoReceivePacket ÇÔ¼öµé¿¡°Ô ÀεðÄÉÀÌÆ®µÉ °ÍÀÌ´Ù.

ÀÌ »óŸ¦ ¼³Á¤ÇÏ´Â °ÍÀº ¹ÙÀεåµÈ ÇÁ·ÎÅäÄݵ鿡°Ô ´õ ºü¸£°Ô ÀεðÄÉÀÌÆ®ÇÏ´Â µå¶óÀ̹ö¿¡°Ô °¢ ÆÐŶ µð½ºÅ©¸³Å͵éÀÇ »ó´ëÀûÀ¸·Î ¿¬°áµÈ ¹öÆÛ µð½ºÅ©¸³Åӵ鿡 ÀÇÇØ(¾Ö¸Å) ¸Þ¸ð¸®ÀÇ °¢ ÆÐŶ µð½ºÅ©¸³ÅÍÀ» À§ÇØ out-of-band µ¥ÀÌÅÍ ºí·°³»¿¡ ¾î¶² ¹Ìµð¾ö ƯÁ¤ ¹öÆÛÀÇ °¢ ±×·¯ÇÑ ÆÐŶ µð½ºÅ©¸³ÅÍÀÇ ¼ÒÀ¯±ÇÀ» ¸®ÅÏÇϵµ·Ï ÇÑ´Ù. ÇÁ·ÎÅäÄݵéÀº Ŭ¶óÀÌ¾ðÆ®µé¿¡°Ô µ¥ÀÌÅ͸¦ Æ÷¿öµåÇϰí ÀεðÄÉÀ̼ǵé·ÎºÎÅÍ º¹»çÇÏ´Â µ¥ÀÌÅ͸¦ ÈÄó¸®Çϱâ(postprocessing) ½ÃÀÛÇϱâ À§ÇØ ProtocolReceiveComplete ÇÔ¼öµé¿¡ ˆ¿³ª È£ÃâÀ» ±â´Ù·Á¾ß ÇÑ´Ù.

ÀεðÄÉÀÌÆ®ÇÏ´Â µå¶óÀ̹ö´Â ¸¸¾à ÆÐŶ pool°ú ¹öÆÛ pool¿¡¼­ ³·Àº ½ÇÇàÀ» ÇÑ´Ù¸éÀº ÀÌ·¯ÇÑ »óŸ¦ ¼³Á¤ÇÒ ¼ö ÀÖ´Ù. ÀεðÄÉÀÌÆ®ÇÏ´Â NIC µå¶óÀ̹ö´Â ¸¸¾à ³ôÀº ³×Æ®¿öÅ© Æ®·¡Çȶ§¹®¿¡ NIC ¼ö½Å ¹öÆÛµé¿¡ ´ëÇØ ³·Àº ½ÇÇàÀ» ÇÑ´Ù¸éÀº ÀÌ·¯ÇÑ »óŸ¦ ¼³Á¤ÇÒ ¼ö ÀÖ´Ù. ¹ö½º¸¶½ºÅÍ DMA NIC µå¶óÀ̹ö´Â Ãß°¡ÀûÀÎ NIC ¼ö½Å ¹öÆÛ °ø°£À» ¾ò±â À§ÇØ ÀÌ·¯ÇÑ È¯°æµé¿¡¼­ NdisMAllocateSharedMemoryAsync ÇÔ¼ö¸¦ È£ÃâÇÒ °ÍÀÌ´Ù.

ºñÁ÷·ÄÈ­µÈ ȤÀº ¿¬°á ÁöÇâ ¹Ì´ÏÆ÷Æ® µå¶óÀ̹ö´Â ÆÐŶ µð½ºÅ©¸³Å͸¦ À§·Î ÀεðÄÉÀÌÆ®Çϱâ Àü¿¡ ·ÎÄà º¯¼ö³»¿¡ out-of-band µ¥ÀÌÅÍ ºí·°ÀÇ Status ¸â¹ö¸¦ ÀúÀåÇØ¾ß ÇÑ´Ù. ´õ ÀÚ¼¼ÇÑ ¼³¸íÀÌ ¾Æ·¡ ¼³¸íÇϵíÀÌ, NdisMIndicateReceivePacket ÇÔ¼ö°¡ ¸®ÅÏÇÒ ¶§, ºñÁ÷·ÄÈ­µÈ ¹Ì´ÏÆ÷Æ® µå¶óÀ̹ö´Â Áï½Ã ÆÐŶ µð½ºÅ©¸³ÅÍ¿Í °ü·ÃµÈ ¹öÆÛµéÀ» Àç¿ä±¸ÇÒ ¼ö ÀÖ´ÂÁö¸¦ °áÁ¤Çϱâ À§ÇØ ÀúÀåµÈ ÆÐŶ Status ¸¦ Ã¼Å©ÇØ¾ß ÇÑ´Ù.

Getting Status on Return from NdisMIndicateReceivePacket

Á÷·ÄÈ­µÈ µå¶óÀ̹ö°¡ ¸î¸î ¼öÀÇ ÆÐŶ µð½ºÅ©¸³Å͵éÀ» À§ÇØ Status¸¦ ¼³Á¤ÇÏ°í ÆÐŶ µð½ºÅ©¸³Å͵鿡 ´ëÇÑ ¹è¿­ Æ÷ÀÎÅ͵é·Î NdisMIndicateReceivePacketÀ» È£ÃâÇÑ ÈÄ¿¡, NdisMIndicateReceivePacketÀ» NDIS¿¡ ÀÇÇØ ¼³Á¤µÈ Status °ªÀ» °Ë»öÇϱâ À§ÇØ Á¦¾î¸¦ ¸®ÅÏÇÒ ¶§ NDIS_GET_PACKET_STATUS ¸ÅÅ©·Î¸¦ »ç¿ëÇØ¾ß ÇÑ´Ù.

Á÷·ÄÈ­µÈ µå¶óÀ̹ö°¡ NDIS_STATUS_SUCCESS·Î ÀεðÄÉÀÌÆ®ÇÏ´Â °¢ ÆÐŶ µð½ºÅ©¸³ÅÍ¿Í °ü·ÃµÈ NDIS_PACKET_OOB_DATA ºí·°³»¿¡ ¸®ÅÏµÈ Status °ªÀº ÀεðÄÉÀÌÆ® ÇÏ´Â µå¶óÀ̹ö°¡ ´ÙÀ½°ú °°ÀÌ ´ÙÀ½ ÇÏ´Â °Í¿¡ ´ëÇÑ °ÍÀ» °áÁ¤ÇÑ´Ù:

NDIS_STATUS_SUCCESS
¸¸¾à NdisMIndicateReceivePacket¿¡ ´ëÇÑ ¹Ì´ÏÆ÷Æ®ÀÇ È£Ãâ·ÎºÎÅÍ ¸®ÅϰªÀ» ¼³Á¤ÇÑ´Ù¸éÀº ¹Ì´ÏÆ÷Æ®´Â ´ÙÀ½ÀÇ ¼ÒÀ¯¿øÀ» ´Ù½Ã ¾ò´Â´Ù:

  • ÆÐŶ µð½ºÅ©¸³ÅÍ
  • ÆÐŶ µð½ºÅ©¸³ÅÍ¿Í °ü·ÃµÈ ±×¸®°í ÀÌ ºí·°³»¿¡ ÁöÁ¤µÈ ¾î¶² ¹Ìµð¾î ƯÁ¤ Á¤º¸ÀÇ °ü·ÃµÈ out-of-band µ¥ÀÌÅÍ ºí·°
  • ÆÐŶ µð½ºÅ©¸³ÅÍ¿¡ ¿¬°áµÈ ¹öÆÛ µð½ºÅ©¸³ÅÍ¿¡ ÀÇÇØ ¸ÊµÈ ¸ðµç ¹öÆÛµé
NDIS´Â ÀÌ¹Ì ¼³¸íÇßµíÀÌ ÀεðÄÉÀÌÆ®ÇÏ´Â µå¶óÀ̹ö°¡ NDIS_STATUS_RESOURCES·Î ¼³Á¤ÇÑ ¾î¶² ÆÐŶ µð½ºÅ©¸³Å͵éÀº NDIS_STATUS_SUCCESS·Î NdisMIndicateReceivePacket¿¡ ´ëÇÑ È£Ãâ·ÎºÎÅÍ ¸®Å쵃 °ÍÀ̶ó°í º¸ÀåÇÑ´Ù.

µå¶óÀ̹ö´Â Áï½Ã ¿¬¼ÓµÈ ¼ö½Å ÀεðÄÉÀ̼ǵéÀ» À§ÇØ ¹Ìµð¾î ƯÁ¤ Á¤º¸ ¹öÆÛ¿Í out-of-band ºí·°, ÀÌ·¯ÇÑ µð½ºÅ©¸³Å͵éÀ» ÁغñÇÒ ¼ö ÀÖ´Ù.

NDIS_STATUS_PENDING
¸¸¾à NdisMIndicateReceivePacketÀ¸·ÎºÎÅÍ ¸®ÅϰªÀ» ÀÌ °ªÀ¸·Î ¼³Á¤µÈ´Ù¸éÀº, ÇÁ·ÎÅäÄݵéÀº ÆÐŶ µð½ºÅ©¸³ÅͰ¡ ÀεðÄÉÀÌÆ®ÇÏ´Â µå¶óÀ̹öÀÇ MiniportReturnPacket ÇÔ¼ö¿¡ ´ëÇØ ¸®ÅϵǾîÁú ¶§±îÁö ÆÐŶ µð½ºÅ©¸³ÅÍ·Î ¿¬°áµÈ ¹öÆÛ µð½ºÅ©¸³Å͵鿡 ÀÇÇØ ¸ÊµÈ ¸ðµç ¹öÆÛµéÀÇ, ÀÌ·¯ÇÑ ºí·°³»¿¡ ÁöÁ¤µÈ ¾î¶² ¹öÆÛÀÇ, °ü·ÃµÈ out-of-band µ¥ÀÌÅÍ ºí·°ÀÇ, ÆÐŶ µð½ºÅ©¸³ÅÍÀÇ ¼ÒÀ¯±ÇÀ» º¸À¯ÇÑ´Ù.
Á÷·ÄÈ­µÈ ȤÀº ¿¬°á ÁöÇâ ¹Ì´ÏÆ÷Æ® µå¶óÀ̹ö´Â NdisMIndicateReceivePacketÀÇ ¸®ÅϰªÀ¸·Î ÀεðÄÉÀÌÆ®µÈ ÆÐŶµéÀÇ Status °ªÀ» Á¶»çÇÒ Çʿ䰡 ¾ø´Ù. ±× ´ë½Å¿¡, ºñÁ÷·ÄÈ­µÈ ¹Ì´ÏÆ÷Æ® µå¶óÀ̹ö´Â ÆÐŶ µð½ºÅ©¸³Å͸¦ À§·Î ÀεðÄÉÀÌÆ®Çϱâ Àü¿¡ ·ÎÄà º¯¼ö³»¿¡ ÆÐŶÀÇ Status¸¦ ÀúÀåÇØ¾ß ÇÑ´Ù. NdisMIndicateReceivePacket ÇÔ¼ö°¡ ¸®ÅÏÇÒ ¶§, ¹Ì´ÏÆ÷Æ® µå¶óÀ̹ö´Â ÀúÀåµÈ ÆÐŶ Status¸¦ Ã¼Å©ÇØ¾ß ÇÑ´Ù. ¸¸¾à ¹Ì´ÏÆ÷Æ® µå¶óÀ̹ö°¡ ÆÐŶ µð½ºÅ©¸³Å͸¦ À§·Î ÀεðÄÉÀÌÆ®Çϱâ Àü¿¡ ÆÐŶÀÇ Status °ªÀ» NDIS_STATUS_RESOURCES·Î ¼³Á¤ÇÑ´Ù¸éÀº, ÀÚ½ÅÀÇ MiniportReturnPacket ÇÔ¼ö¸¦ È£ÃâÇÔÀ¸·Î½á NdisMIndicateReceivePacketÀÌ ¸®ÅÏÈÄ¿¡ Áï½Ã ÆÐŶ µð½ºÅ©¸³Å͸¦ Àç¿ä±¸ÇØ¾ß ÇÑ´Ù. ÀÌ·¯ÇÑ °æ¿ì¿¡, NDIS´Â ÆÐŶ µð½ºÅ©¸³Å͸¦ ¸®ÅÏÇϱâ À§ÇØ ¹Ì´ÏÆ÷Æ® µå¶óÀ̹öÀÇ MiniportReturnPacket ÇÔ¼ö¸¦ È£ÃâÇÏÁö ¾Ê´Â´Ù. ¸¸¾à ¹Ì´ÏÆ÷Æ® µå¶óÀ̹ö°¡ ÆÐŶ µð½ºÅ©¸³Å͸¦ À§·Î ÀεðÄÉÀÌÆ®Çϱâ Àü¿¡ ÆÐŶÀÇ Status¸¦ NDIS_STATUS_SUCCESS·Î ¼³Á¤ÇÑ´Ù¸éÀº ¹Ì´ÏÆ÷Æ® µå¶óÀ̹ö´Â NDIS°¡ °è¼ÓÇØ¼­ ¹Ì´ÏÆ÷Æ® µå¶óÀ̹öÀÇ MiniportReturnPacket ÇÔ¼ö¿¡ ´ëÇÑ ÆÐŶ µð½ºÅ©¸³Å͸¦ ¸®ÅÏÇÒ ¶§±îÁö ÆÐŶ µð½ºÅ©¸³Å͸¦ Àç¿ä±¸ÇÒ Çʿ䰡 ¾ø´Ù.

Setting Status in MiniportSendPackets

´ÜÁö MiniportSendPackets ÇÔ¼öµéÀ» °¡Áö´Â ¾Æ·¡ Á÷·ÄÈ­µÈ NDIS µå¶óÀ̹öµéÀº º¸³»±â¸¦ ÁöÁ¤ÇÏ´Â ÆÐŶ µð½ºÅ©¸³Å͵éÀ» À§ÇÑ ÀÌ·¯ÇÑ ±¸Á¶Ã¼ÀÇ Status ¸â¹ö¸¦ »ç¿ëÇÒ ¼ö ÀÖ´Ù. ±×·¯ÇÑ µå¶óÀ̹öÀÇ MiniportSendPackets ÇÔ¼ö´Â ´ÙÀ½°ú °°ÀÌ ÀÔ·Â ¹è¿­³»¿¡¼­ ÆÐŶ µð½ºÅ©¸³Å͵é°ú °ü·ÃµÈ out-of-band µ¥ÀÌÅÍ ºí·°µé³»¿¡ Status ¸â¹ö¸¦ ¼³Á¤ÇÑ´Ù:

  • ¸¸¾à µå¶óÀ̹ö´Â ºñµ¿±âÀûÀ¸·Î º¸³»±â ¿¬»êÀ» ¿Ï¼ºÇÒ °ÍÀ̶ó¸éÀº, MiniportSendPackets ÇÔ¼ö´Â ÁÖ¾îÁø ÆÐŶ µð½ºÅ©¸³Å͸¦ À§ÇØ Status ¸â¹ö¸¦ NDIS_STATUS_PENDING·Î ¼³Á¤ÇÑ´Ù.
  • ¸¸¾à µå¶óÀ̹ö°¡ Çö ÀÚ¿ø ºÎÁ·¶§¹®¿¡ ÁÖ¾îÁø ÆÐŶ ¹è¿­³»¿¡¼­ ¸ðµç º¸³»±âµéÀ» ó¸®ÇÒ ¼ö ¾ø´Ù¸éÀº, MiniportSendPackets ÇÔ¼ö´Â ÇϳªÀÇ ÆÐŶ µð½ºÅ©¸³Å͸¦ À§ÇÑ Status ¸â¹ö³»¿¡ NDIS_STATUS_RESOURCES·Î ¼³Á¤ÇÑ´Ù.

    NDIS´Â ³»ºÎÀûÀ¸·Î µå¶óÀ̹ö°¡ óÀ½ ¹ß»ýÇÏ´Â °ÍÀÌ ¹«¾ùÀεçÁö°£¿¡ NdisMSendResourcesAvailable ȤÀº NdisMSendComplete¸¦ È£ÃâÇÒ ¶§ MiniportSendPackets ÇÔ¼ö¿¡ ´ëÇÑ ÀçÁ¦Ãâ¼ø¼­¸¦ À§ÇØ °°Àº ¼ø¼­·Î ³»ºÎÀûÀ¸·Î ÀÌ·¯ÇÑ ÆÐŶ µð½ºÅ©¸³Å͵éÀ» Å¥¿¡ ÀúÀåÇÑ´Ù. NDIS´Â ÀÌ·¯ÇÑ ¹Ì´ÏÆ÷Æ® ¼³Á¤ »óÅ °ªÀ» ÇÁ·ÎÅäÄÝ¿¡°Ô NDIS_STATUS_PENDING À¸·Î ¹Ý¿µÇÑ´Ù.

  • ¸¸¾à MiniportSendPackets ÇÔ¼ö°¡ Á¦¾î¸¦ ¸®ÅÏÇϱâ Àü¿¡ ÁÖ¾îÁø º¸³»±â ¿ä±¸¸¦ ¿Ï¼ºÇÒ °Í À̶ó¸éÀº, NDIS°¡ º¸³»±â¸¦ ÃʱâÈ­ÇÑ ÇÁ·ÎÅäÄÝ¿¡°Ô ´Ù½Ã ÀÌ·¯ÇÑ »óÅ °ªÀ» ¹Ý¿µÇÒ ¼ö ÀÖ±â À§Çؼ­ µå¶óÀ̹ö °áÁ¤ »óÅ °ªÀ¸·Î ÁÖ¾îÁø ÆÐŶ µð½ºÅ©¸³ÅÍÀ» À§ÇØ Status ¸â¹ö¸¦ ¼³Á¤ÇØ¾ß ÇÑ´Ù.
±×·¸Áö ¾Ê´Â´Ù¸éÀº ±×·¯ÇÑ µå¶óÀ̹ö´Â ÆÐŶ µð½ºÅ©¸³ÅÍ·Î NdisMSendCompleteÀ» È£ÃâÇÒ ¶§ °¢ ÆÐŶÀ» À§ÇØ ¿Ï¼º »óŸ¦ Á¦°øÇÑ´Ù. MiniportSendPackets ÇÔ¼öµé ´ë½Å¿¡ MiniportSend¸¦ °¡Áö´Â µå¶óÀ̹öµéÀº °¢ µé¾î¿À´Â º¸³»±â ÆÐŶÀ» À§ÇØ »óŰªÀ» ¸®ÅÏÇÏ°í ±×·¡¼­ ±×·¯ÇÑ µå¶óÀ̹ö´Â °áÄÚ º¸³»±â·Î ÁöÁ¤µÈ ÆÐŶ µð½ºÅ©¸³Å͸¦ À§ÇØ out-of-band µ¥ÀÌÅÍ ºí·°ÀÇ Status ¸â¹ö¸¦ ¼³Á¤ÇÏÁö ¾Ê´Â´Ù.

ÇÁ·ÎÅäÄݵéÀº NdisSendPackets ȤÀº NdisSend·ÎºÎÅÍ ¸®ÅÏµÈ °ü·ÃµÈ OOB ºí·°ÀÇ Status ¸â¹ö·Î ºÎÅÍ ÇÁ·ÎÅäÄÝ ÇÒ´ç ÆÐŶ µð½ºÅ©¸³Å͸¦ À§ÇØ ¿Ï¼º »óŸ¦ °áÁ¤ÇÒ ¼ö ¾ø´Ù. ÀÌ·¯ÇÑ °ªÀº NDIS°¡ ¾Æ·¡ µå¶óÀ̹öÀÇ MiniportSendPackets °ú ȤÀº MiniportSend ÇÔ¼öµé¿¡ ´ëÇØ º¸³»±â ÆÐŶµéÀ» Á¦ÃâÇÏ°í ´Ù½Ã Å¥¿¡ ÀúÀåÇÏ°í ´Ù½Ã Á¦ÃâÇÏ´Â °Íó·³ µ¿ÀûÀ¸·Î º¯È­ÇÒ ¼ö ÀÖ´Ù.

ÇÁ·ÎÅäÄÝÀº ProtocolSendComplete ÇÔ¼ö°¡ ÆÐŶ µð½ºÅ©¸³ÅͷΠȣÃâµÉ ¶§±îÁö ±×·¯ÇÑ ÇÁ·ÎÅäÄÝ ÇÒ´ç ÆÐŶ µð½ºÅ©¸³Å͸¦ À§ÇØ OOB µ¥ÀÌÅÍ ºí·°À» Á¢±ÙÇϱâ À§ÇØ NDIS_GET_PACKET_XXX ¸ÅÅ©·Î ȤÀº NDIS_OOB_DATA_FROM_PACKET¸¦ »ç¿ëÇÒ ¼ö ¾ø´Ù.