7. ½ÃÇèµµ±¸(Test Suite)

test suite´Â CVS ÀúÀå¼Ò¿¡ ÀÖÀ¸¸ç, test suite°¡ Àû¿ëµÇ´Â ¹üÀ§°¡ ³ÐÀ» ¼ö·Ï, ¿©·¯ºÐÀÇ Äڵ尡 ¿Àµ¿ÀÛÀ» ÇÏ´Â °æ¿ì°¡ °ÅÀÇ ¾øÀ» ¼ö ÀÖ´Ù´Â ÀڽۨÀº ´õ Ä¿Áö°Ô µÈ´Ù. »ç¼ÒÇÑ Å×½ºÆ®(trivial test)´Â »ó´çÈ÷ ¾î·Á¿î Å×½ºÆ®(tricky test) ¸¸Å­À̳ª Áß¿äÇϸç, ÀÌ´Â º¹ÀâÇÑ ½ÃÇèÀ» ´Ü¼øÈ­ÇÑ °ÍÀÌ »ç¼ÒÇÑ Å×½ºÆ®À̱⠶§¹®ÀÌ´Ù. ÀÏ´Ü º¹ÀâÇÑ Å×½ºÆ®¸¦ ¼öÇàÇϱâ Àü¿¡ ±âº»ÀûÀÎ ÀÛ¾÷Àº ¸¸Á·ÇÑ´Ù´Â °ÍÀ» ¾Ë ¼ö Àֱ⠶§¹®ÀÌ´Ù.

Å×½ºÆ®´Â ´Ü¼øÇϸç, ±×Àú testsuite/ÀÇ ¼­ºêµð·ºÅ丮¿¡ ÀÖ´Â ½©½ºÅ©¸³Æ®ÀÌ´Ù. ½ÇÇàµÇ´Â ¼ø¼­´Â ¾ËÆÄºª ¼ø¼­´Ù. µû¶ó¼­ `01test'°¡ `02test'º¸´Ù ¸ÕÀú ½ÇÇàµÈ´Ù. ÇöÀç´Â ´Ù¼¸ °³ÀÇ Å×½ºÆ® µð·ºÅ丮°¡ ÀÖ´Ù.

00netfilter/

General netfilter framework tests.

01iptables/

iptables tests.

02conntrack/

connection tracking test.

03NAT/

NAT tests.

04ipchains-compat/

ipchains/ipfwadm compatibility tests.

testsuite/ µð·ºÅ丮 ³»ºÎ¿¡´Â `test.sh'¶ó´Â ½© ½ºÅ©¸³Æ®°¡ Á¸ÀçÇϸç, µÎ°³ÀÇ ´õ¹Ì ÀÎÅÍÆäÀ̽º(tap0¿Í tap1)¸¦ ±¸¼ºÇÏ¿©, forwardingÀ» on ½Ã۰í, ¸ðµç netfilter ¸ðµâÀ» Á¦°ÅÇÏ´Â ¿ªÇÒÀ» ÇÑ´Ù. ±×¸®°í ³ª¼­ ÇÏÀ§ µð·ºÅ丮¿¡ Á¸ÀçÇÏ´Â ¸ðµç ½© ½ºÅ©¸³Æ®¸¦ ¼öÇàÇÏ´Â µ¥ ÀÌÁß Çϳª¶óµµ ¿À·ù°¡ ¹ß»ýÇÏ¸é ¼öÇàÀ» ¸ØÃß°Ô µÈ´Ù. `test.sh'´Â µÎ°³ÀÇ ¿É¼ÇÀ» ³Ñ°Ü¹ÞÀ» ¼ö ÀÖ´Â µ¥, `-v'´Â ¼öÇàÇÏ´Â °¢°¢ÀÇ Å×½ºÆ®¸¦ Ãâ·ÂÇϸç, Ãß°¡ÀûÀÎ test À̸§ÀÌ ÁÖ¾îÁö¸é ÇØ´çÇÏ´Â Å×½ºÆ®°¡ ¹ß°ßµÉ ¶§±îÁö ´Ù¸¥ Å×½ºÆ®´Â ¸ðµÎ °Ç³Ê¶Ù°Ô µÈ´Ù.

7.1. Å×½ºÆ®¸¦ À§ÇÑ ½ºÅ©¸³Æ® ÀÛ¼º

¿ì¼± Àû´çÇÑ µð·ºÅ丮¿¡ »õ·Î¿î ÆÄÀÏÀ» »ý¼ºÇϰí, ÀûÀýÇÑ ½Ã±â¿¡ ½ÇÇàÇÒ ¼ö ÀÖµµ·Ï ¹øÈ£¸¦ ºÎ¿©ÇÑ´Ù. ¿¹¸¦ µé¾îº¸¸é, 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À» Áö¿øÇÏÁö ¾Ê´Â´Ù.

7.2. º¯¼ö¿Í ȯ°æ

ÀÏ´Ü tap0¿Í tap1À̶ó´Â µÎ°³ÀÇ ÀÎÅÍÆäÀ̽º¸¦ °¡Áö°í ÀÖ´Ù. °¢ ÀÎÅÍÆäÀ̽ºÀÇ ÁÖ¼Ò´Â $TAP0¿Í $TAP1À̶ó´Â º¯¼ö¿¡ ÀúÀåµÇ¾î ÀÖÀ¸¸ç, ³Ý¸Å½ºÅ©´Â ¸ðµÎ 255.255.255.0ÀÌ´Ù. networkÀº $TAP0NET°ú $TAP1NET¿¡ ÀúÀåµÇ¾î ÀÖ´Ù.

$TMPFILEÀº ÀÓ½ÃÆÄÀÏ·Î, Å×½ºÆ®°¡ Á¾·áµÇ´Â ½ÃÁ¡¿¡¼­ »èÁ¦µÈ´Ù.

¿©·¯ºÐÀÇ ½ºÅ©¸³Æ®´Â testsuite/ µð·ºÅ丮ºÎÅÍ ½ÃÀÛÇØ¼­, ½ºÅ©¸³Æ®°¡ Á¸ÀçÇÏ´Â ¸ðµç µð·ºÅ丮¸¦ ã¾Æ°¡°Ô µÈ´Ù. Áï ¿©·¯ºÐµéÀº iptables°°Àº µµ±¸¸¦ ½ÇÇà½Ã۱â À§Çؼ­´Â `../userspace'·Î ½ÃÀÛÇÏ´Â path¸¦ »ç¿ëÇØ¾ß ÇÑ´Ù.

$VERBOSE¸¦ ¼³Á¤ÇØ ³õÀ¸¸é ¿©·¯ºÐÀÇ ½ºÅ©¸³Æ®´Â º¸´Ù ¸¹Àº Á¤º¸¸¦ Ãâ·ÂÇϰԵȴÙ. Áï, command line¿¡¼­ `-v' ¿É¼ÇÀ» ÁØ °Í°ú µ¿ÀÏÇÑ È¿°ú°¡ µÈ´Ù.

7.3. À¯¿ëÇÑ µµ±¸µé

``tools'' µð·ºÅ丮¿¡´Â ¾µ¸¸ÇÑ testsuite µµ±¸°¡ ¸î °³ ÀÖÀ¸¸ç, °¢ µµ±¸´Â ¹®Á¦°¡ ¹ß»ýÇÑ °æ¿ì non-zero exit status¸¦ ¹ß»ý½Ã۸ç Á¾·áÇÑ´Ù.

7.3.1. gen_ip

IP ÆÐŶÀ» »ý¼ºÇÏ´Â ÇÔ¼ö·Î, IP ÆÐŶÀ» Ç¥ÁØ ÀÔ·ÂÀ¸·Î Ãâ·ÂÇÑ´Ù. ¿©·¯ºÐµéÀº Ç¥ÁØ Ãâ·ÂÀ» /dev/tap0¿Í /dev/tap1À¸·Î Àü¼ÛÇÏ¿© tap0¿Í tap1¿¡ ÆÐŶÀ» º¸³¾ ¼ö ÀÖ´Ù. (/dev/tap0¿Í /dev/tap1ÀÌ Á¸ÀçÇÏÁö ¾ÊÀ¸¸é testsuite°¡ ÃÖÃÊ ½ÇÇà µÉ ¶§ »ý¼ºµÈ´Ù.)

FRAG=offset,length

ÆÐŶÀ» »ý¼ºÇϰí, offset°ú length ¸¸Å­ ÆÐŶÀ» Á¶°¢ ³½´Ù.

MF

ÆÐŶÀÇ `More Fragments' ºñÆ®¸¦ ¼³Á¤ÇÑ´Ù.

MAC=xx:xx:xx:xx:xx:xx

ÆÐŶ¿¡ ¼Ò½º MAC ÁÖ¼Ò¸¦ ¼³Á¤ÇÑ´Ù.

TOS=tos

ÆÐŶ¿¡ ´ëÇÏ¿© TOS Çʵ带 ¼³Á¤ÇÑ´Ù. 0-255.

´ÙÀ½Àº °­Á¦ ¿É¼ÇÀÌ´Ù.

source ip

ÆÐŶÀÇ ¼Ò½º IP ÁÖ¼Ò

dest ip

ÆÐŶÀÇ ¸ñÀûÁö ÁÖ¼Ò

length

Çì´õ¸¦ Æ÷ÇÔÇÑ ÆÐŶÀÇ ±æÀÌ

protocol

ÆÐŶÀÇ ÇÁ·ÎÅäÄÝ ¹øÈ£, (¿¹: 17 = UDP)

°¢ Àü´ÞÀÎÀÚ´Â ÇÁ·ÎÅäÄÝ¿¡ µû¶ó ´Þ¶óÁø´Ù. UDP(17)ÀÎ °æ¿ì ¼Ò½º¿Í ¸ñÀûÁö Æ÷Æ® ¹øÈ£°¡ µÈ´Ù. ICMP(1)ÀÎ °æ¿ì´Â ICMP ¸Þ½ÃÁöÀÇ Äڵ尡 µÈ´Ù. ŸÀÔÀÌ 0 ¶Ç´Â 8(ping-reply ¶Ç´Â ping)ÀÎ °æ¿ì´Â, µÎ°³ÀÇ ÀÎÀÚ·Î ID¿Í sequence Çʵ尡 ´õ ÇÊ¿äÇÏ´Ù. TCPÀÎ °æ¿ì´Â ¼Ò½º¿Í ¸ñÀûÁö Æ÷Æ® ±×¸®°í Ç÷¢(``SYN'', ``SYN/ACK'', ``ACK'', ``RST'' ¶Ç´Â ``FIN'')ÀÌ ÇÊ¿äÇÏ´Ù. ¼¼°³ÀÇ Ãß°¡ ¿É¼ÇÀÌ ÀÖ´Â µ¥, ``OPT='' ´ÙÀ½¿¡´Â Äĸ¶·Î ºÐ¸®µÈ ¿É¼ÇµéÀÌ ¿À°í, ``SYN='' ´ÙÀ½¿¡´Â ½ÃÄö½º ¹øÈ£, ``ACK='' ´ÙÀ½¿¡µµ ½ÃÄö½º ¹øÈ£°¡ È£´Ù. ¸¶Áö¸·À¸·Î, ``DATA=''À̶ó´Â Ãß°¡ ¿É¼ÇÀº Ç¥ÁØÀÔ·ÂÀÇ ³»¿ëÀ» °¡µæ ä¿î TCP ÆÐŶÀÇ ºÎÇϸ¦ ÀǹÌÇÑ´Ù.

7.3.2. rcv_ip

`rcv_ip'¸¦ »ç¿ëÇϸé IP ÆÐŶÀ» º¼ ¼ö ÀÖÀ¸¸ç, °¡´ÉÇÑ get_ip·Î µé¾î¿À´Â ¿ø·¡ÀÇ °ª¿¡ °¡±õ°Ô ¸í·É Çà¿¡ Ãâ·ÂÇÑ´Ù.(fragments´Â Á¦¿Ü)

ÀÌ ÇÔ¼ö´Â ÆÐŶÀ» ºÐ¼®ÇÏ´Â µ¥ ¸Å¿ì À¯¿ëÇϸç, ´ÙÀ½°ú °°Àº °­Á¦ ¿É¼ÇÀÌ µÎ°³ ÀÖ´Ù.

wait time

Ç¥ÁØÀÔ·ÂÀ¸·ÎºÎÅÍ ÆÐŶÀ» ±â´Ù¸®´Â ÃÖ´ë ½Ã°£À¸·Î ÃÊ´ÜÀ§·Î Ç¥½ÃµÈ´Ù.

iterations

¼ö½ÅÇϰíÀÚ ÇÏ´Â ÆÐŶÀÇ ¼ö

``DATA''¶ó´Â Ãß°¡ ¿É¼ÇÀÌ ÀÖÀ¸¸ç, ÆÐŶ Çì´õ ´ÙÀ½¿¡ ÆÐŶÀÇ ºÎÇϸ¦ Ç¥ÁØÃâ·ÂÀ¸·Î Ãâ·ÂÇÑ´Ù.

´ÙÀ½ ½ºÅ©¸³Æ®´Â `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
				

7.3.3. get_err

Ç¥ÁØÀÔ·ÂÀ¸·ÎºÎÅÍ ÆÐŶ(¿¹¸¦ µé¸é, gen_ip·Î »ý¼ºµÈ ÆÐŶ)À» ÃëÇϰí, ICMP ¿¡·¯·Î º¯È¯½ÃŲ´Ù.

¼¼°³ÀÇ Àü´ÞÀÎÀÚ·Î ¼Ò½º IP ÁÖ¼Ò, ŸÀÔ°ú Äڵ带 ¹Þ´Â´Ù. ¸ñÀûÁö ÀÔ·ÂÀº Ç¥ÁØÀÔ·ÂÀ¸·ÎºÎÅÍ ¹ÞÀº ¼Ò½º IP ÁÖ¼Ò·Î ¼³Á¤µÈ´Ù.

7.3.4. local_ip

Ç¥ÁØÀÔ·ÂÀ¸·ÎºÎÅÍ ÆÐŶÀ» ¾ò¾î¼­ raw ¼ÒÄÏÀ¸·Î Àü´ÞÇÑ´Ù. ·ÎÄÿ¡¼­ »ý¼ºµÈ ÆÐŶÀÇ ¸ð¾çÀ» º¸¿©ÁØ´Ù(ethertap ÀåÄ¡ Áß Çϳª·Î ÀÔ·ÂµÈ ÆÐŶÀ¸·ÎºÎÅÍ ºÐ¸®ÇÏ´Â °æ¿ì, ¿ÜºÎ¿¡¼­ »ý¼ºµÈ ÆÐŶó·³ º¸ÀδÙ).

7.4. »ý°¢³ª´Â ´ë·Î ÇÏ´Â Ãæ°í

¸ðµç µµ±¸´Â ÀÐ°í ¾²±â¸¦ Çѹø ÇÒ ¶§ ¸ðµç °ÍÀ» ÇÒ ¼ö ÀÖ´Ù°í °¡Á¤ÇÑ´Ù. Áï ethertap ÀåÄ¡¿¡ ´ëÇØ¼­´Â »ç½ÇÀÌÁö¸¸, pipe¸¦ ÀÌ¿ëÇÏ¿© ¾à°£ º¹ÀâÇÑ ÀÛ¾÷À» ÇÒ ¶§´Â ¹Ýµå½Ã ¿Ç´Ù°í ¸»ÇÒ ¼ö´Â ¾ø´Ù.

ÆÐŶÀ» ÀÚ¸£±â À§Çؼ­ dd¸¦ »ç¿ëÇÒ ¼ö ÀÖ´Ù. dd´Â ÀÏȸ¼º ÀÛ¾÷À¸·Î ÆÐŶÀ» Ãâ·ÂÇϱâ À§ÇØ »ç¿ëÇÒ ¼ö ÀÖ´Â obs(output block size)¶ó´Â ¿É¼ÇÀÌ ÀÖ´Ù.

ù ¹øÂ°¿¡ ¼º°øÇϵµ·Ï Å×½ºÆ®ÇÏ´Â °ÍÀÌ ÁÁ´Ù. Áï, ÆÐŶÀÌ ¼º°øÀûÀ¸·Î ºí·° µÇµµ·Ï Å×½ºÆ®ÇØ¾ß ÇÑ´Ù. óÀ½¿¡´Â ÆÐŶÀÌ Á¤»óÀûÀ¸·Î Åë°úÇϵµ·Ï Å×½ºÆ®¸¦ ÇÏ°í ³ª¼­, ÀϺΠÆÐŶÀÌ ºí·° µÇµµ·Ï Å×½ºÆ®ÇØ¾ß ÇÑ´Ù. ±×·¸Áö ¾ÊÀ¸¸é, ¾û¶×ÇÑ ¿À·ù·Î ÀÎÇØ ÆÐŶÀÌ ÁøÇàÇÏ´Â °ÍÀ» ÁßÁö½Ãų ¼ö µµ ÀÖ´Ù.

¾Æ¹«°Å³ª ¸· º¸³»°í ³ª¼­ ¾î¶² °á°ú°¡ ÀϾ´Â È®ÀÎÇÏÁö ¸»°í, Á¤È®ÇÑ Å×½ºÆ®¸¦ ÇÒ ¼ö ÀÖµµ·Ï ÇØ¾ßÇÑ´Ù. Á¤È®ÇÑ Å×½ºÆ®°¡ Àß ¸øµÈ °æ¿ì¶ó¸é, ¹«¾ùÀÌ Àß ¸ø µÇ¾ú´ÂÁö ¾Ë ¼ö ÀÖÁö¸¸, ·£´ý Å×½ºÆ®°¡ À߸ø µÇ¸é ÀüÇô µµ¿òÀÌ µÇÁö ¾Ê´Â´Ù.

¾Æ¹«·± ¸Þ½ÃÁöµµ ³²±âÁö ¾Ê°í Å×½ºÆ®°¡ ½ÇÆÐÇÑ °æ¿ì, ¾î¶² ¸í·ÉÀÌ ½ÇÇàµÇ°í ÀÖ´ÂÁö ¾Ë¾Æº¸±â À§ÇØ ½ºÅ©¸³Æ®ÀÇ ¸Ç À§¿¡ `-x'¸¦ Ãß°¡ ÇÒ ¼ö ÀÖ´Ù. Áï, `#!/bin/sh -x'.

Å×½ºÆ®°¡ ºÒ±ÔÄ¢ÀûÀ¸·Î ½ÇÆÐÇϸé, ¸ðµç ¿ÜºÎ ÀåÄ¡¸¦ Â÷´ÜÇϰųª ÇÏ´Â ½ÄÀ¸·Î, ·£´ý ³×Æ®¿÷ Æ®·¡ÇÈ¿¡ ´ëÇÏ¿© È®ÀÎÇØ º¸´Â °ÍÀÌ ÁÁ´Ù. ¿¹¸¦ µé¸é,Andrew Tridgelló·³ µ¿ÀÏÇÑ ³×Æ®¿÷ »ó¿¡ ÀÖÀ¸¸é, À©µµ¿ìÀÇ ºê·Îµå ij½ºÆÃ¿¡ ÀÇÇØ ¼ö¸¹Àº °£¼·À» ¹Þ°Ô µÈ´Ù.