NDIS DDK Driver Sample for Fasr Forward Path Support 

NDIS ŽºÅ© ¿ÀÇÁ·Îµå(task offload) ´É·ÂÀº ¸¶ÀÌÅ©·Î¼ÒÇÁÆ® À©µµ¿ìÁî 2000 DDK ¹®¼­³»¿¡ ¹®¼­È­ µÇ¾î ÀÖ´Ù. À©µµ¿ìÁî 2000 RC3 DDK ³»¿¡¼­ »õ·Î¿î »ùÇà ÄÚµå´Â NDIS ¹Ì´ÏÆ÷Æ® µå¶óÀ̹ö³»¿¡¼­ Fast Forward Path(FFP)Áö¿øÀ» Ãß°¡ÇÏ´Â ¹æ¹ýÀ» Áõ¸íÇÏ´Â(demonstrates) °ÍÀ» Á¦°øÇÑ´Ù. ÀÌ ³»¿ëÀº µå¶óÀ̹ö °³¹ßÀÚ°¡ »ç¿ëÇϱâ À§ÇØ ÀÌ µå¶óÀ̹ö »ùÇðú °ü·ÃµÈ ¹é±×¶ó¿îµå Á¤º¸¸¦ Á¦°øÇÑ´Ù. 

FFP´Â ¾î¶»°Ô ¸ÖƼÆ÷Æ® ³×Æ®¿öÅ© ¾î´ðÅ͵é°ú(IEEE 802.3, DIX, TR, Fast-Ethernet, FDDI, µîµî) ȤÀº µÎ°³ ȤÀº ´õ À¯»çÇÑ ÇϳªÀÇ Æ÷Æ®´Ì ³×Æ®¿öÅ© ¾î´ðÅ͵éÀÌ À©µµ¿ìÁî 2000 ¿î¿µÃ¼Á¦ ½Ã½ºÅÛ¿¡¼­ ¶ó¿ìÆÃ ÄÚµå¿Í °áÇÕÇØ¼­ ½Ã½ºÅÛ ÆÛÆ÷¸Õ½º(¼º´É)¸¦ Çâ»ó½Ã۱â À§ÇØ »ç¿ëµÉ ¼ö ÀÖ´ÂÁö¸¦ Á¤ÀÇÇÑ´Ù. ÆÐŶ Æ÷¿öµù À²Àº ¸ÖƼ Æ÷µå ¾î´ðÅÍ¿¡¼­ ȤÀº À¯»çÇÑ ¾î´ðÅ͵鿡¼­ È£½ºÆ® ÇÁ·Î¼¼¼­¸¦ ÆÐŶµéÀÌ Áö³ªÁö ¾Ê°í ÇϳªÀÇ Æ÷Æ®¿¡¼­ ´Ù¸¥ Æ÷Æ®·Î ÆÐŶµéÀ» Æ÷¿öµù ÇÔÀ¸·Î½á ¸Å¿ì Áõ°¡½Ãų ¼ö ÀÖ´Ù. ±×·¯¹Ç·Î CPU¿¡¼­ ÀÎÅÚ¸®ÀüÆ® ¾î´ðÅÍ·Î Æ÷¿öµù °áÁ¤À» ó¸®ÇÏ´Â ÀÓ¹«(task)ÀÇ ºÎÇϸ¦ Àû°Ô ÇÑ´Ù. 

µÎ°³ÀÇ ³×Æ®¿öÅ© ÀÎÅÍÆäÀ̽º¸¦ °¡Áø ³×Æ®¿öÅ© ¾î´ðÅ͸¦ °í·ÁÇØº¸ÀÚ : NET1 °ú NET2. ÆÐŶÀÌ NET1¿¡ µµÂøÇÏ°í ³×Æ®¿öÅ© ¾î´ðÅÍ¿¡ ÀÇÇØ NDIS µå¶óÀ̹ö¿¡ Áö½ÃµÇ¾ú´Ù. ±×·¯¸éÀº ÆÐŶÀº ¶ó¿ìÅÍ·Î ÀεðÄÉÀÌÆ®µÈ´Ù. ¶ó¿ìÅÍ´Â ÆÐŶÀ» ºÐ¼®Çϰí(looks at) ÆÐŶ ÇÊÅ͸µ Äڵ带 ÅëÇÏ¿© ±×°ÍÀ» NET2·Î Æ÷¿öµå ÇÑ´Ù. 

³×Æ®¿öÅ© ¾î´ðÅÍ´Â NET2·Î º¸³»Áø ÆÐŶÀÌ Packet Identifier tuple¸¦ Á¶»çÇÔÀ¸·Î½á NET1¿¡¼­ ¼ö½ÅµÈ ÆÐŶ°ú °°Àº Áö¸¦ °áÁ¤ÇÒ ¼ö ÀÖ´Ù. ¸¸¾à ±×·¸´Ù¸éÀº ³×Æ®¿öÅ© ¾î´ðÅÍ´Â ¹ÛÀ¸·Î ³ª°¡´Â ÆÐŶ Çϵå¿þ¾î ÁÖ¼Ò¿Í ÇÔ²², Packet Identifier tuple¸¦Fast Forwarding Cache(FFC)¿¡ Ãß°¡ÇÒ ¼ö ÀÖ´Ù. ¿¬¼ÓÇØ¼­ ÆÐŶÀÌ NET1¿¡ µµÂøÇÒ ¶§¸¶´Ù, ³×Æ®¿öÅ© ¾î´ðÅÍ´Â FFC¿¡ ¾î¶² Packet Identifier tuple¿Í ÀÏÄ¡ÇÏ´ÂÁö¸¦ ¾Ë±â À§ÇØ Á¶»çÇÑ´Ù. ¸¸¾à ±×·¸´Ù¸éÀº È£½ºÆ®¸¦ ÀÎÅÍ·´Æ®ÇÏ´Â °Í ¾øÀÌ ÆÐŶÀ» Æ÷¿öµåÇÒ °ÍÀÌ´Ù. 

FFP´Â ¶ÇÇÑ ÇϳªÀÇ NDIS ¹Ì´ÏÆ÷Æ® µå¶óÀ̹ö¸¦ °¡Áö´Â ¸ÖƼÇà ³×Æ®¿öÅ© ¾î´ðÅ͵éÀ» °¡·ÎÁú·¯ »ç¿ëµÇ¾îÁú ¼ö ÀÖ´Ù. ÀÌ·¯ÇÑ ¸ðµ¨¿¡¼­, óÀ½ ÆÐŶÀÌ ³×Æ®¿öÅ© ¾î´ðÅÍ #1¿¡ NET1À¸·Î µé¾î¿À°í ³×Æ®¿öÅ© ¾î´ðÅÍ #2·Î NET2·Î Æ÷¿öµåÇÑ´Ù. °è¼ÓÇØ¼­, ³×Æ®¿öÅ© ¾î´ðÅÍ #1Àº È£½ºÆ®¸¦ ÀÎÅÍ·´Æ® ÇÏ´Â °Í ¾øÀÌ °øÀ¯µÈ PC ¹ö½º¸¦ ÅëÇØ ³×Æ®¿öÅ© ¾î´ðÅÍ #2·Î ÆÐŶÀ» Æ÷¿öµåÇÑ´Ù. ÀÌ·¯ÇÑ ±¸Á¶(scheme)´Â µÎ°³ÀÇ ¾î´ðÅ͵éÀ» ÅëÇØ µé¾î¿À´Â ÆÐŶ ij½¬¸¦ À¯ÁöÇÏ´Â °ÍÀ» ¿ä±¸ÇÑ´Ù. 

FFP´Â ¶ÇÇÑ È£½ºÆ® ÇÁ·Î¼¼¼­¸¦ ÀÎÅÍ·´Æ® ÇÏ´Â °Í ¾øÀÌ ÆÐŶ ÇÊÅ͸µÀ» ÇÏ´Â µ¥ »ç¿ëµÇ¾î Áú ¼ö ÀÖ´Ù. ±×µéÀÇÆ÷¿öµù ÆÐ½º¿¡¼­ ÆÐŶ ÇÊÅ͵éÀ» °¡Áö´Â ´õ ³ôÀº ÃþÀÇ ÇÁ·ÎÅäÄÝ µå¶óÀ̹öµéÀº ¶ÇÇÑ ¾î´ðÅÍ FFP ij½¬³»¿¡ "DISCARD" ij½¬ ¿£Æ®¸®µéÀ» ¼³Á¤ÇÒ ¼ö ÀÖ´Ù. ij½¬ ³»ÀÇ "DISCARD" tuple°ú µé¾î¿À´Â ÆÐŶÀ» ÀÏÄ¡ÇÏÀÚ¸¶ÀÚ, ÆÐŶÀº Áï½Ã ±×°ÍÀ» µå¶óÀ̹ö¿¡ ÀεðÄÉÀÌÆ® ÇÏ´Â °Í ¾øÀÌ ³×Æ®¿öÅ© ¾î´ðÅÍ¿¡ ÀÇÇØ ¹«½ÃµÇ¾î Á®¾ß ÇÑ´Ù.(discard) 

¸¶ÀÌÅ©·Î¼ÒÇÁÆ®¿¡¼­ Å×½ºÆ® ÈÄ ¿ì¸®´Â ¶ó¿ìÆÃ ½Ã³ª¸®¿À¸¦ À§ÇØ ´Ù¸¥ Çϵå¿þ¾î¿Í ¼ÒÇÁÆ®¿þ¾î ÃÖÀûÈ­¸¦ Á¶ÇÕÇÑ FFP Áö¿ø ¾î´ðÅ͵éÀ» »ç¿ëÇßÀ» ¶§ ÆÐŶ Æ÷¿öµù À²ÀÌ 200% Áõ°¡¸¦ º¼ ¼ö ÀÖ¾ú´Ù.(FFP ¾øÀÌ ÃÊ´ç 40K ÆÐŶµéÀÌ FFP·Î ÃÊ´ç 120K ÆÐŶµé·Î). 

NDIS ÀÎÅÍÆäÀ̽º´Â FFP¸¦ Áö¿øÇϱâ À§ÇØ ³íÀÇ µÇ¾ú´Ù.(argumented) FFP¸¦ Áö¿øÇÏ´Â ³×Æ®¿öÅ© ¾î´ðÅÍ/µå¶óÀ̹ö´Â NDIS¿¡¼­ »õ·Î¿î °´Ã¼ ID(OIDs) ¸¦ À§ÇÑ Áö¿øÀ» ½ÇÇàÇØ¾ß ÇÑ´Ù. FFP¸¦ Áö¿øÇÏ´Â ³×Æ®¿öÅ© ¾î´ðÅ͵éÀº ÀÌ·¯ÇÑ OIDµéÀ» »ç¿ëÇØ¼­ NDIS¸¦ ÅëÇØ ÇÁ·ÎÅäÄÝ ½ºÅõ鿡 ´ëÇÑ Áö¿øÀ» ÀεðÄÉÀÌÆ®ÇÑ´Ù. ÇÁ·ÎÅäÄÝ µå¶óÀ̹öµéÀº FFP¸¦ Áö¿øÇÏ´Â ³×Æ®¿öÅ© ¾î´ðÅ͵é°ú (NdisRequest¸¦ ÅëÇØ) Åë½ÅÇϱâ À§ÇØ ÀÌ·¯ÇÑ OIDµéÀ» »ç¿ëÇÏ¿©, FFP ÇàÀ§¸¦ Á¦¾îÇÒ ¼ö ÀÖ´Ù. 

Call to action for NDIS miniports: 

  • ¸¸¾à ´ç½ÅÀÌ ³×Æ®¿öÅ© ¾î´ðÅÍ Á¦Á¶ÀÚ¶ó¸é, Çϵå¿þ¾î³»¿¡¼­¿Í NDIS miniport driver ³»¿¡¼­ Fast Forward Áö¿øÀ» ½ÇÇàÇØ¶ó(Implement). RRAS¸¦ »ç¿ëÇÑ small office ¶ó¿ìÅ͵é°ú ÀÎÅÍ³Ý ¿¬°á °øÀ¯( Internet Connection Sharing)À» Áö¿øÇϴ Ȩ PCÀ» Æ÷ÇÔÇÏ¿©. 
  • °ü·ÃµÈ NDIS ¹Ì´ÏÆ÷Æ® µå¶óÀ̹ö °³¹ßÀ» ´ëÇÑ ´õ ÀÚ¼¼ÇÑ ³»¿ëÀº Windows 2000 RC3 DDK¸¦ ºÁ¶ó.