test suite´Â CVS ÀúÀå¼Ò¿¡ ÀÖÀ¸¸ç, test suite°¡ Àû¿ëµÇ´Â ¹üÀ§°¡ ³ÐÀ» ¼ö·Ï, ¿©·¯ºÐÀÇ Äڵ尡 ¿Àµ¿ÀÛÀ» ÇÏ´Â °æ¿ì°¡ °ÅÀÇ ¾øÀ» ¼ö ÀÖ´Ù´Â ÀڽۨÀº ´õ Ä¿Áö°Ô µÈ´Ù. »ç¼ÒÇÑ Å×½ºÆ®(trivial test)´Â »ó´çÈ÷ ¾î·Á¿î Å×½ºÆ®(tricky test) ¸¸ÅÀ̳ª Áß¿äÇϸç, ÀÌ´Â º¹ÀâÇÑ ½ÃÇèÀ» ´Ü¼øÈÇÑ °ÍÀÌ »ç¼ÒÇÑ Å×½ºÆ®À̱⠶§¹®ÀÌ´Ù. ÀÏ´Ü º¹ÀâÇÑ Å×½ºÆ®¸¦ ¼öÇàÇϱâ Àü¿¡ ±âº»ÀûÀÎ ÀÛ¾÷Àº ¸¸Á·ÇÑ´Ù´Â °ÍÀ» ¾Ë ¼ö Àֱ⠶§¹®ÀÌ´Ù.
Å×½ºÆ®´Â ´Ü¼øÇϸç, ±×Àú testsuite/ÀÇ ¼ºêµð·ºÅ丮¿¡ ÀÖ´Â ½©½ºÅ©¸³Æ®ÀÌ´Ù. ½ÇÇàµÇ´Â ¼ø¼´Â ¾ËÆÄºª ¼ø¼´Ù. µû¶ó¼ `01test'°¡ `02test'º¸´Ù ¸ÕÀú ½ÇÇàµÈ´Ù. ÇöÀç´Â ´Ù¼¸ °³ÀÇ Å×½ºÆ® µð·ºÅ丮°¡ ÀÖ´Ù.
General netfilter framework tests.
iptables tests.
connection tracking test.
NAT tests.
ipchains/ipfwadm compatibility tests.
¿ì¼± Àû´çÇÑ µð·ºÅ丮¿¡ »õ·Î¿î ÆÄÀÏÀ» »ý¼ºÇϰí, ÀûÀýÇÑ ½Ã±â¿¡ ½ÇÇàÇÒ ¼ö ÀÖµµ·Ï ¹øÈ£¸¦ ºÎ¿©ÇÑ´Ù. ¿¹¸¦ µé¾îº¸¸é, ICMP reply tracking (02conntrack/02reply.sh)À» Å×½ºÆ®Çϱâ À§Çؼ´Â ¿ÜºÎ·Î ³ª°¡´Â ICMP°¡ ÀûÀýÇÏ°Ô ÃßÀûµÇ°í ÀÖ´Â Áö¸¦ ¸ÕÀú È®ÀÎÇØ¾ßÇÑ´Ù(02conntrack/01simple.sh).
ÀÛÀº Å©±âÀÇ ÆÄÀÏÀ» ¸¹ÀÌ ¸¸µé¾î¼, °¢°¢ÀÇ ÆÄÀÏÀº ÇÑ °¡Áö ºÐ¾ß¸¸ ´ã´çÇϵµ·Ï ÇÏ´Â °ÍÀÌ ÁÁÀ» °ÍÀ̸ç, ±× ÀÌÀ¯´Â testsuite¸¦ ½ÇÇà½ÃŲ »ç¶÷µéÀÌ ¹®Á¦¸¦ Áï°¢ ¾Ë¾Æ ³¾ ¼ö ÀÖµµ·Ï ÇÒ ¼ö Àֱ⠶§¹®ÀÌ´Ù.
Å×½ºÆ® µµÁß ¹®Á¦°¡ ¹ß»ýÇϸé, ±×³É `exit 1'À» ÇÏ¸é µÇ°í, ±×·¯¸é failure°¡ ¹ß»ýÇÑ´Ù. Áï, ¿©·¯ºÐµéÀÌ ¹®Á¦°¡ ¹ß»ýÇÑ °ÍÀ» °¨ÁöÇÒ ¼ö ÀÖ°Ô µÇ¸é, ÀûÀýÇÑ ¸Þ½ÃÁö¸¦ Ãâ·ÂÇÏ´Â °ÍÀÌ ÁÁ´Ù. ¹®Á¦°¡ ¹ß»ýÇÏÁö ¾Ê¾Ò´Ù¸é, `exit 0'·Î Á¾·áÇÏ¸é µÈ´Ù. ½ºÅ©¸³Æ®ÀÇ ÃÖ»óÀ§¿¡¼ `set -e'¸¦ »ç¿ëÇϰųª, °¢ ¸í·ÉÀÇ ¸¶Áö¸·¿¡ `|| exit 1'À» Ãß°¡ÇÏ¿© °¢ ¸í·ÉÀÇ ¼º°ø¿©ºÎ¸¦ È®ÀÎÇØ¾ß ÇÑ´Ù.
helper ÇÔ¼öÀÎ `load_module'¿Í `remove_module'´Â ¸ðµâÀ» ¿Ã¸®°Å³ª ³»¸®´Â µ¥ »ç¿ëÇÒ ¼ö ÀÖ´Â µ¥, Ưº°È÷ Å×½ºÆ®¶ó°í ÁöÁ¤ÇÏÁö ¾Ê´Â ÇÑ testsuite¿¡¼´Â autoloadingÀ» Áö¿øÇÏÁö ¾Ê´Â´Ù.
ÀÏ´Ü tap0¿Í tap1À̶ó´Â µÎ°³ÀÇ ÀÎÅÍÆäÀ̽º¸¦ °¡Áö°í ÀÖ´Ù. °¢ ÀÎÅÍÆäÀ̽ºÀÇ ÁÖ¼Ò´Â $TAP0¿Í $TAP1À̶ó´Â º¯¼ö¿¡ ÀúÀåµÇ¾î ÀÖÀ¸¸ç, ³Ý¸Å½ºÅ©´Â ¸ðµÎ 255.255.255.0ÀÌ´Ù. networkÀº $TAP0NET°ú $TAP1NET¿¡ ÀúÀåµÇ¾î ÀÖ´Ù.
$TMPFILEÀº ÀÓ½ÃÆÄÀÏ·Î, Å×½ºÆ®°¡ Á¾·áµÇ´Â ½ÃÁ¡¿¡¼ »èÁ¦µÈ´Ù.
¿©·¯ºÐÀÇ ½ºÅ©¸³Æ®´Â testsuite/ µð·ºÅ丮ºÎÅÍ ½ÃÀÛÇØ¼, ½ºÅ©¸³Æ®°¡ Á¸ÀçÇÏ´Â ¸ðµç µð·ºÅ丮¸¦ ã¾Æ°¡°Ô µÈ´Ù. Áï ¿©·¯ºÐµéÀº iptables°°Àº µµ±¸¸¦ ½ÇÇà½Ã۱â À§Çؼ´Â `../userspace'·Î ½ÃÀÛÇÏ´Â path¸¦ »ç¿ëÇØ¾ß ÇÑ´Ù.
$VERBOSE¸¦ ¼³Á¤ÇØ ³õÀ¸¸é ¿©·¯ºÐÀÇ ½ºÅ©¸³Æ®´Â º¸´Ù ¸¹Àº Á¤º¸¸¦ Ãâ·ÂÇϰԵȴÙ. Áï, command line¿¡¼ `-v' ¿É¼ÇÀ» ÁØ °Í°ú µ¿ÀÏÇÑ È¿°ú°¡ µÈ´Ù.
``tools'' µð·ºÅ丮¿¡´Â ¾µ¸¸ÇÑ testsuite µµ±¸°¡ ¸î °³ ÀÖÀ¸¸ç, °¢ µµ±¸´Â ¹®Á¦°¡ ¹ß»ýÇÑ °æ¿ì non-zero exit status¸¦ ¹ß»ý½Ã۸ç Á¾·áÇÑ´Ù.
IP ÆÐŶÀ» »ý¼ºÇÏ´Â ÇÔ¼ö·Î, IP ÆÐŶÀ» Ç¥ÁØ ÀÔ·ÂÀ¸·Î Ãâ·ÂÇÑ´Ù. ¿©·¯ºÐµéÀº Ç¥ÁØ Ãâ·ÂÀ» /dev/tap0¿Í /dev/tap1À¸·Î Àü¼ÛÇÏ¿© tap0¿Í tap1¿¡ ÆÐŶÀ» º¸³¾ ¼ö ÀÖ´Ù. (/dev/tap0¿Í /dev/tap1ÀÌ Á¸ÀçÇÏÁö ¾ÊÀ¸¸é testsuite°¡ ÃÖÃÊ ½ÇÇà µÉ ¶§ »ý¼ºµÈ´Ù.)
ÆÐŶÀ» »ý¼ºÇϰí, offset°ú length ¸¸Å ÆÐŶÀ» Á¶°¢ ³½´Ù.
ÆÐŶÀÇ `More Fragments' ºñÆ®¸¦ ¼³Á¤ÇÑ´Ù.
ÆÐŶ¿¡ ¼Ò½º MAC ÁÖ¼Ò¸¦ ¼³Á¤ÇÑ´Ù.
ÆÐŶ¿¡ ´ëÇÏ¿© TOS Çʵ带 ¼³Á¤ÇÑ´Ù. 0-255.
´ÙÀ½Àº °Á¦ ¿É¼ÇÀÌ´Ù.
ÆÐŶÀÇ ¼Ò½º IP ÁÖ¼Ò
ÆÐŶÀÇ ¸ñÀûÁö ÁÖ¼Ò
Çì´õ¸¦ Æ÷ÇÔÇÑ ÆÐŶÀÇ ±æÀÌ
ÆÐŶÀÇ ÇÁ·ÎÅäÄÝ ¹øÈ£, (¿¹: 17 = UDP)
`rcv_ip'¸¦ »ç¿ëÇϸé IP ÆÐŶÀ» º¼ ¼ö ÀÖÀ¸¸ç, °¡´ÉÇÑ get_ip·Î µé¾î¿À´Â ¿ø·¡ÀÇ °ª¿¡ °¡±õ°Ô ¸í·É Çà¿¡ Ãâ·ÂÇÑ´Ù.(fragments´Â Á¦¿Ü)
ÀÌ ÇÔ¼ö´Â ÆÐŶÀ» ºÐ¼®ÇÏ´Â µ¥ ¸Å¿ì À¯¿ëÇϸç, ´ÙÀ½°ú °°Àº °Á¦ ¿É¼ÇÀÌ µÎ°³ ÀÖ´Ù.
Ç¥ÁØÀÔ·ÂÀ¸·ÎºÎÅÍ ÆÐŶÀ» ±â´Ù¸®´Â ÃÖ´ë ½Ã°£À¸·Î ÃÊ´ÜÀ§·Î Ç¥½ÃµÈ´Ù.
¼ö½ÅÇϰíÀÚ ÇÏ´Â ÆÐŶÀÇ ¼ö
´ÙÀ½ ½ºÅ©¸³Æ®´Â `rcv_ip'¸¦ »ç¿ëÇϴ ǥÁØÀ» º¸ÀÎ °ÍÀÌ´Ù.
# Set up job control, so we can use & in shell scripts. set -m # Wait two seconds for one packet from tap0 ../tools/rcv_ip 2 1 < /dev/tap0 > $TMPFILE & # Make sure that rcv_ip has started running. sleep 1 # Send a ping packet ../tools/gen_ip $TAP1NET.2 $TAP0NET.2 100 1 8 0 55 57 > /dev/tap1 || exit 1 # Wait for rcv_ip, if wait %../tools/rcv_ip; then : else echo rcv_ip failed: cat $TMPFILE exit 1 fi |
Ç¥ÁØÀÔ·ÂÀ¸·ÎºÎÅÍ ÆÐŶ(¿¹¸¦ µé¸é, gen_ip·Î »ý¼ºµÈ ÆÐŶ)À» ÃëÇϰí, ICMP ¿¡·¯·Î º¯È¯½ÃŲ´Ù.
¼¼°³ÀÇ Àü´ÞÀÎÀÚ·Î ¼Ò½º IP ÁÖ¼Ò, ŸÀÔ°ú Äڵ带 ¹Þ´Â´Ù. ¸ñÀûÁö ÀÔ·ÂÀº Ç¥ÁØÀÔ·ÂÀ¸·ÎºÎÅÍ ¹ÞÀº ¼Ò½º IP ÁÖ¼Ò·Î ¼³Á¤µÈ´Ù.
Ç¥ÁØÀÔ·ÂÀ¸·ÎºÎÅÍ ÆÐŶÀ» ¾ò¾î¼ raw ¼ÒÄÏÀ¸·Î Àü´ÞÇÑ´Ù. ·ÎÄÿ¡¼ »ý¼ºµÈ ÆÐŶÀÇ ¸ð¾çÀ» º¸¿©ÁØ´Ù(ethertap ÀåÄ¡ Áß Çϳª·Î ÀÔ·ÂµÈ ÆÐŶÀ¸·ÎºÎÅÍ ºÐ¸®ÇÏ´Â °æ¿ì, ¿ÜºÎ¿¡¼ »ý¼ºµÈ ÆÐŶó·³ º¸ÀδÙ).
¸ðµç µµ±¸´Â ÀÐ°í ¾²±â¸¦ Çѹø ÇÒ ¶§ ¸ðµç °ÍÀ» ÇÒ ¼ö ÀÖ´Ù°í °¡Á¤ÇÑ´Ù. Áï ethertap ÀåÄ¡¿¡ ´ëÇØ¼´Â »ç½ÇÀÌÁö¸¸, pipe¸¦ ÀÌ¿ëÇÏ¿© ¾à°£ º¹ÀâÇÑ ÀÛ¾÷À» ÇÒ ¶§´Â ¹Ýµå½Ã ¿Ç´Ù°í ¸»ÇÒ ¼ö´Â ¾ø´Ù.
ÆÐŶÀ» ÀÚ¸£±â À§Çؼ dd¸¦ »ç¿ëÇÒ ¼ö ÀÖ´Ù. dd´Â ÀÏȸ¼º ÀÛ¾÷À¸·Î ÆÐŶÀ» Ãâ·ÂÇϱâ À§ÇØ »ç¿ëÇÒ ¼ö ÀÖ´Â obs(output block size)¶ó´Â ¿É¼ÇÀÌ ÀÖ´Ù.
ù ¹øÂ°¿¡ ¼º°øÇϵµ·Ï Å×½ºÆ®ÇÏ´Â °ÍÀÌ ÁÁ´Ù. Áï, ÆÐŶÀÌ ¼º°øÀûÀ¸·Î ºí·° µÇµµ·Ï Å×½ºÆ®ÇØ¾ß ÇÑ´Ù. óÀ½¿¡´Â ÆÐŶÀÌ Á¤»óÀûÀ¸·Î Åë°úÇϵµ·Ï Å×½ºÆ®¸¦ ÇÏ°í ³ª¼, ÀϺΠÆÐŶÀÌ ºí·° µÇµµ·Ï Å×½ºÆ®ÇØ¾ß ÇÑ´Ù. ±×·¸Áö ¾ÊÀ¸¸é, ¾û¶×ÇÑ ¿À·ù·Î ÀÎÇØ ÆÐŶÀÌ ÁøÇàÇÏ´Â °ÍÀ» ÁßÁö½Ãų ¼ö µµ ÀÖ´Ù.
¾Æ¹«°Å³ª ¸· º¸³»°í ³ª¼ ¾î¶² °á°ú°¡ ÀϾ´Â È®ÀÎÇÏÁö ¸»°í, Á¤È®ÇÑ Å×½ºÆ®¸¦ ÇÒ ¼ö ÀÖµµ·Ï ÇØ¾ßÇÑ´Ù. Á¤È®ÇÑ Å×½ºÆ®°¡ Àß ¸øµÈ °æ¿ì¶ó¸é, ¹«¾ùÀÌ Àß ¸ø µÇ¾ú´ÂÁö ¾Ë ¼ö ÀÖÁö¸¸, ·£´ý Å×½ºÆ®°¡ À߸ø µÇ¸é ÀüÇô µµ¿òÀÌ µÇÁö ¾Ê´Â´Ù.
¾Æ¹«·± ¸Þ½ÃÁöµµ ³²±âÁö ¾Ê°í Å×½ºÆ®°¡ ½ÇÆÐÇÑ °æ¿ì, ¾î¶² ¸í·ÉÀÌ ½ÇÇàµÇ°í ÀÖ´ÂÁö ¾Ë¾Æº¸±â À§ÇØ ½ºÅ©¸³Æ®ÀÇ ¸Ç À§¿¡ `-x'¸¦ Ãß°¡ ÇÒ ¼ö ÀÖ´Ù. Áï, `#!/bin/sh -x'.
Å×½ºÆ®°¡ ºÒ±ÔÄ¢ÀûÀ¸·Î ½ÇÆÐÇϸé, ¸ðµç ¿ÜºÎ ÀåÄ¡¸¦ Â÷´ÜÇϰųª ÇÏ´Â ½ÄÀ¸·Î, ·£´ý ³×Æ®¿÷ Æ®·¡ÇÈ¿¡ ´ëÇÏ¿© È®ÀÎÇØ º¸´Â °ÍÀÌ ÁÁ´Ù. ¿¹¸¦ µé¸é,Andrew Tridgelló·³ µ¿ÀÏÇÑ ³×Æ®¿÷ »ó¿¡ ÀÖÀ¸¸é, À©µµ¿ìÀÇ ºê·Îµå ij½ºÆÃ¿¡ ÀÇÇØ ¼ö¸¹Àº °£¼·À» ¹Þ°Ô µÈ´Ù.