netadm ÇÁ·ÎÁ§Æ®¿¡¼­ÀÇ °³¹ß. jeho-park, netadm@kernelproject.org v0.1, 15. feb 2006 GPL version 2. netadm ÇÁ·ÎÁ§Æ®¿¡¼­ÀÇ °³¹ß. -------------------------------------------------------------------------------------- ¸ñÂ÷ 1. ¼­·Ð. 2. ¼Ò½º µð·ºÅ丮 ¼³¸í. 3. Àüü ±¸Á¶. 4. ±â´É Ãß°¡ ¹æ¹ý. 5. IPC 6. ÄÚµù ½ºÅ¸ÀÏ. 7. Library Ãß°¡. -------------------------------------------------------------------------------------- 1. ¼­·Ð. º» ¹®¼­´Â netadm ÇÁ·ÎÁ§Æ®¿¡ °³¹ßÀÚ·Î Âü¿©ÇϰíÇ ºÐµé¿¡°Ô ÇöÀç±îÁö netadm ÇÁ·ÎÁ§Æ®¿¡¼­ °³¹ßµÈ °³¹ß ¼Ò½ºÀÇ ±¸Á¶¿¡¼­ ºÎÅÍ °¢°¢ ±¸ÇöµÈ ¸ðµâÀÇ ±¸Á¶µîÀ» ¼³¸íÇÏ¿© óÀ½ Âü¿©ÇϽô ºÐµéÀÇ ºü¸¥ ÀûÀÀÀ» Çϵµ·Ï µ½±â À§ÇÏ¿© ¸¸µé¾îÁ³½À´Ï´Ù. ´õºÒ¾î »õ·Î Âü¿©ÇϽа³¹ßÀںеéÀÌ ÀÌ¹Ì netadmÇÁ·ÎÁ§Æ®¿¡¼­ ¼Ò±âÀÇ ¸ñÀûÀ» À§ÇØ ¸¸µé¾îÁø ³»ºÎ ¶óÀ̺귯¸®¹× ÄÚµù ½ºÅ¸ÀÏÀ» ¼³¸íÇÏ¿© Àϰü¼ºÀÖ´Â Äڵ带 Áö¼ÓÀûÀ¸·Î À¯Áö ¹× ¹ßÀü½ÃÄÑ ±Ã±ØÀûÀ¸·Î ¿øÈ°ÇÑ ÇÁ·ÎÁ§Æ® Ȱµ¿À» À§ÇØ ¸¸µé¾îÁ³½À´Ï´Ù. 2. ¼Ò½º µð·ºÅ丮 ¼³¸í. ÇöÀç netadmÇÁ·ÎÁ§Æ®¿¡¼­´Â gwcÇÁ·Î±×·¥À» °³¹ß ¹× °ü¸® ÁßÀ̸ç gwcÀÇ ÁÖ¿ä ±â´ÉÀº ¸ð´ÏÅ͸µ, QoS ±×¸®°í flow controlÀÔ´Ï´Ù. ¼Ò½º ±¸Á¶´Â °£·«È÷ ¾Æ·¡¿Í °°Àº ±¸Á¶¸¦ °¡Áø´Ù. /gwc +------- /doc: ÂüÁ¶¹®¼­. | +------- /elib: gwc¿¡¼­ »ç¿ëÇÏ´Â ¿ÜºÎÀÇ ¶óÀ̺귯¸®À̸ç, ¹Ì¸® | ÄÄÆÄÀÏµÈ archiveÇüÅ·Π°ü¸®µÇ°í ÀÖ´Ù. | +------- /gwcadmd: wireless°ü·ÃÇÑ ±â´ÉÀ» Á¦°øÇϱâ À§ÇØ ±¸ÇöµÈ | µ¥¸óÀ̸ç, gwc Ãʱ⠼³Ä¡ ½Ã wireless ³»¿ëÀ» | ¼³Á¤ÇÏÁö ¾ÊÀ¸¸é ¾Æ¹« µ¿ÀÛµµ ÇÏÁö ¾ÊÀ¸¸ç ¹«ÇÑ | ·çÇÁ¸¦ µ·´Ù. | ¸¸¾à, wireless ¼³Á¤À» Ãʱ⠼³Ä¡ ½Ã ÇßÀ»¶§´Â | ¹«¼±·£ 802.11a/b/g ¸¦ ±¸ºÐÇÏ¿© Áö¼ÓÀûÀ¸·Î | °ü·Ã Á¤º¸¸¦ ¾÷µ¥ÀÌÆ®¸¦ Çϱ⵵ Çϸç | wireless signal power modulesÀ» Á¦¾îÇÏ´Â ±â´ÉÀ» | »ç¿ë ÇÒ ¼ö ÀÖ´Ù. | +------- /gwccli: cli command | +------- /gwcguid: GUI µ¥¸ó, ¼¼ºÎ ³»¿ëÀº ¾Æ·¡ ³»¿ë ÂüÁ¶. | +------- /gwclib: ³»ºÎ ¶óÀ̺귯¸®, ¼¼ºÎ ³»¿ëÀº ¾Æ·¡ ³»¿ë ÂüÁ¶. | +------- /include: gwclibÀÇ ¼Ò½º¿Í 1:1´ëÀÀµÇ´Â Çì´õÈ­ÀÏ Æ÷ÇÔ. | ¼¼ºÎ ³»¿ëÀº ¾Æ·¡ ³»¿ë ÂüÁ¶. | +------- /pf: ÆÐŶ ÇÊÅ͸µ°ú °ü·ÃÇÏ¿© nfhook Çڵ鷯µîÀ» Á¤ÀÇÇÑ Ä¿³Î ¸ðµâ. | +------- /scripts: ¼³Ä¡ ½ºÅ©¸³(install.sh), ¿î¿µ½ºÅ©¸³(gwc), µðÆúÆ®·Î ¼³Ä¡ ½Ã ½Ã½ºÅÛ¿¡ º¹»çµÉ syslog¼³Á¤È­ÀÏ, ¸¶Áö¸·À¸·Î ¼³Ä¡ ½Ã ½Ã½ºÅÛ¿¡ ¼³Ä¡ µÉ SNMP ¼³Á¤ ¹× MIBÈ­ÀÏÀ» ¾ÐÃàÇÑ gzÈ­ÀÏÀÌ ÀÖ´Ù. gwcÀÇ °æ¿ì ¾Æ·¡ÀÇ ³»¿ëº°·Î Çì´õ¿Í ¼Ò½º È­ÀÏÀÌ ºÐ·ùµÇ¾î ÀÖ½À´Ï´Ù. [Çì´õ È­ÀÏ] h1. ³»ºÎ ÀڷᱸÁ¶¸¦ Á¤ÀÇÇÑ Çì´õ. h2. Àü¿ªÀûÀÎ configuration ¹× °æ·Î¸¦ Á¤ÀÇÇÑ Çì´õ. h3. stringÇüÅÂÀÇ ¸Þ¼¼Áö¸¦ Á¤ÀÇÇÑ Çì´õ. h4. ÇÁ·Î±×·¥ Ư¼º°ú ¹«°üÇÏÁö¸¸ ÀÚÁÖ »ç¿ëµÉ ¶óÀ̺귯¸® ÇÔ¼ö¸¦ ÀͽºÆ÷Æ®ÇÑ Çì´õ. h5. ÇÁ·Î±×·¥ÀÇ ÁÖ¿ä ±â´ÉÀ» ó¸®ÇÒ ÇÁ·Î½ÃÀú ¼±¾ð ¹× ÀͽºÆ÷Æ®ÇÑ Çì´õ. h6. µ¥¸ó¿¡¼­ µ¶¸³ÀûÀ¸·Î »ç¿ëÇÒ ÀڷᱸÁ¶ ¹× ¸ÅÅ©·ÎµîÀ» Á¤ÀÇÇÑ Çì´õ. [¼Ò½º È­ÀÏ] c4. h4°ü·ÃÇÑ ¶óÀ̺귯¸® ÇÔ¼ö Á¤ÀÇ ¼Ò½º. c5. h5°ü·ÃÇÑ ÇÁ·Î±×·¥ÀÇ ÁÖ¿ä ±â´É°ú °ü·ÃÇÑ ÇÁ·Î½ÃÀú¸¦ Á¤ÀÇÇÑ ¼Ò½º. d1. µ¥¸óÀÇ ¸ÞÀÎ ·çƾ°ú °ü·ÃÇØ Á¤ÀÇÇÑ ¼Ò½º. ¾Æ·¡ÀÇ ³»¿ëÀº À§ÀÇ ³»¿ëÀ» ±âÁØÀ¸·Î ÇöÀç gwc ¼Ò½º ±¸¼ºÀ» º¸ÀÔ´Ï´Ù. [Çì´õÈ­ÀÏ] h1. ³»ºÎ ÀڷᱸÁ¶¸¦ Á¤ÀÇÇÑ Çì´õ. °æ·Î: include È­ÀÏ: sysdef.h, sysshm.h ¼¼ºÎ¼³¸í: sysdef.h: °´Ã¼ Á¤ÀÇ sysshm.h: sysdef.h¿¡¼­ Á¤ÀÇÇÑ °´Ã¼¸¦ ÇϳªÀÇ ÀڷᱸÁ¶·Î ±¸¼ºÇϸç, shared memory¸¦ ÅëÇØ ½Ã½ºÅÛ Àü¿ªÀûÀ¸·Î Á¢±Ù °¡´ÉÇϵµ·Ï ÇÔ. h2. Àü¿ªÀûÀÎ configuration ¹× °æ·Î¸¦ Á¤ÀÇÇÑ Çì´õ. °æ·Î: include È­ÀÏ: global.h ¼¼ºÎ¼³¸í: global.h: ÄÄÆÄÀÏ ½ÃÁ¡¿¡ °áÁ¤µÉ ¼ö ÀÖ´Â ¿©·¯ ¸ÅÅ©·Î º¯¼öµîÀ» Á¤ÀÇÇÏ¿´À¸¸ç, ¿©±â¼­ Á¤ÀÇµÈ º¯¼ö´Â ½Ã½ºÅÛ Àü¿ªÀûÀ¸·Î ¾à¼ÓµÈ ¼³Á¤µî°ú ¿¬°üµË´Ï´Ù. °¡·É, ½Ã½ºÅÛ ½ÃÀÛ, Á¾·á¸¦ ¼öÇàÇÏ´Â ½ºÅ©¸³Æ®ÀÇ °æ·Î, ³»ºÎ ÇÁ·Î±×·¥¿¡¼­ ÂüÁ¶ÇÏ´Â ¿ÜºÎ °æ·Î, ÆÐŰÁö ¹öÀü Á¤º¸, IPC¿ëµµÀÇ ÀÓ½ÃÈ­ÀÏ °æ·Î h3. stringÇüÅÂÀÇ ¸Þ¼¼Áö¸¦ Á¤ÀÇÇÑ Çì´õ. °æ·Î: include È­ÀÏ: message.h ¼¼ºÎ ¼³¸í: message.h: ÇÁ·Î±×·¥ ³»ºÎÀûÀ¸·Î »ç¿ëÇÒ ½ºÆ®¸µÀ» Á¤ÀÇÇÑ Çì´õ·Î¼­, °¡·É cli command ÀÇ help¸Þ¼¼Áö, ³»ºÎ ó¸® ¿¡·¯¿Í °ü·ÃµÈ ¸Þ¼¼ÁöµîÀÔ´Ï´Ù. h4. ÇÁ·Î±×·¥ Ư¼º°ú ¹«°üÇÏÁö¸¸ ÀÚÁÖ »ç¿ëµÉ ¶óÀ̺귯¸® ÇÔ¼ö¸¦ ÀͽºÆ÷Æ®ÇÑ Çì´õ. °æ·Î: include È­ÀÏ: confio.h, confutil.h, slog.h, sysioctl.h, sysipc.h, sysnio.h, syssnmp.h, systime.h, sysutil.h ¼¼ºÎ ¼³¸í: confio.h: configurationÈ­ÀÏ¿¡ ´ëÇÑ save, load ±â´ÉÇÔ¼ö ¼±¾ð. confutil.h: IPCµî°ú °ü·ÃµÇ¾î »ç¿ëµÉ À¯Æ¿ÇÔ¼ö ¼±¾ð. slog.h: °³¹ß½Ã ÆíÀǸ¦ À§ÇÑ syslog sysioctl.h: pf¿Í °ü·ÃÇÏ¿© io interface¸¦ À§ÇÑ Çì´õ. sysnio.h: °³¹ß½Ã ÆíÀǸ¦ À§ÇÑ bsd socket°ü·Ã ¶óÀ̺귯¸® Çì´õ. syssnmp.h: snmp ¶óÀ̺귯¸®. systime.h: timiing ¹× timer¸¦ À§ÇÑ ¶óÀ̺귯¸®. sysutil.h: À§ÀÇ ³»¿ë¿¡ ÇØ´çµÇÁö ¾ÊÁö¸¸ ½Ã½ºÅÛ Àü¿ªÀûÀ¸·Î »ç¿ëµÉ ¶óÀ̺귯¸®. h5. ÇÁ·Î±×·¥ÀÇ ÁÖ¿ä ±â´ÉÀ» ó¸®ÇÒ ÇÁ·Î½ÃÀú ¼±¾ð ¹× ÀͽºÆ÷Æ®ÇÑ Çì´õ. °æ·Î: include È­ÀÏ: confproc.h ¼¼ºÎ ¼³¸í: confproc.h: IPC¸¦ ÅëÇØ cli command³ª gui·Î ºÎÅÍ ¿äû ½Ã ½ÇÁúÀûÀÎ ³»ºÎ ¿äû󸮸¦ ÇÏ´Â ·çƾÀÇ Çì´õ. ¼¼ºÎ ¼³¸í: h6. µ¥¸ó¿¡¼­ µ¶¸³ÀûÀ¸·Î »ç¿ëÇÒ ÀڷᱸÁ¶ ¹× ¸ÅÅ©·ÎµîÀ» Á¤ÀÇÇÑ Çì´õ. °æ·Î: gwcguid È­ÀÏ: apc.h, callback.h, dump.h, fwc.h, interface.h, qos.h, support.h ¼¼ºÎ ¼³¸í: apc.h: GUI µ¥¸ó¿¡¼­ ¸ð´ÏÅ͸µ UI °ü·ÃÇÑ ·çƾ ¹× ÀڷᱸÁ¶ Æ÷ÇÔ. callback.h: GUIµ¥¸ó¿¡¼­ callbackÇÔ¼ö °ü·Ã Çì´õ. dump.h: ÇöÀç »ç¿ë ¾ÊÇÔ. fwc.h: GUI µ¥¸ó¿¡¼­ flow control UI °ü·ÃÇÑ ·çƾ ¹× ÀڷᱸÁ¶ Æ÷ÇÔ. interface.h: GUIÀÇ ÁÖ¿ä ·çÆ¾°ú °ü·ÃÇÑ Çì´õ. qos.h: GUI µ¥¸ó¿¡¼­ QoS UI °ü·ÃÇÑ ·çƾ ¹× ÀڷᱸÁ¶ Æ÷ÇÔ. support.h: glade Åø·Î ¸¸µé¾îÁø È­ÀϷμ­ ³»ºÎ callbackµî ó¸® ½Ã »ç¿ëµÇ´Â ³»ºÎ ·çƾ°ü·Ã Çì´õ. [¼Ò½º È­ÀÏ] c4. h4°ü·ÃÇÑ ¶óÀ̺귯¸® ÇÔ¼ö Á¤ÀÇ ¼Ò½º. °æ·Î: gwclib È­ÀÏ: confio.c confutil.c slog.c sysipc.c sysnio.c syssnmp.c systime.c sysutil.c ¼¼ºÎ ¼³¸í: confio.c: configurationÈ­ÀÏ¿¡ ´ëÇÑ save, load ±â´ÉÇÔ¼ö Á¤ÀÇ. confutil.c: IPC À¯Æ¿ÇÔ¼ö Á¤ÀÇ. slog.c: syslog ·¡ÆÛ ÇÔ¼ö Á¤ÀÇ. sysnio.c: ¼ÒÄÏ ÇÔ¼ö¸¦ ³»¿ëº°·Î ¿ä¾àÇÑ ¶óÀ̺귯¸® ÇÔ¼ö Á¤ÀÇ. syssnmp.c: snmp ¶óÀ̺귯¸® ÇÔ¼ö Á¤ÀÇ. systime.c: timiing ¹× timer¸¦ À§ÇÑ ¶óÀ̺귯¸® Á¤ÀÇ. sysutil.c: À§ÀÇ ³»¿ë¿¡ ÇØ´çµÇÁö ¾ÊÁö¸¸ ½Ã½ºÅÛ Àü¿ªÀûÀ¸·Î »ç¿ëµÉ ¶óÀ̺귯¸® Á¤ÀÇ. c5. h5°ü·ÃÇÑ ÇÁ·Î±×·¥ÀÇ ÁÖ¿ä ±â´É°ú °ü·ÃÇÑ ÇÁ·Î½ÃÀú¸¦ Á¤ÀÇÇÑ ¼Ò½º. °æ·Î: gwclib È­ÀÏ: confproc.c ¼¼ºÎ ¼³¸í: confproc.c: syscmd, sysclistÀÇ µÎ ipc¿ëµµÀÇ ÇÔ¼ö¸¦ ÅëÇØ ±Ã±ØÀûÀ¸·Î È£ÃâµÇ´Â °¢°¢ÀÇ ¸í·É¿¡ ´ëÇÑ Ã³¸® ÇÔ¼ö¸¦ Æ÷ÇÔÇÑ´Ù. ±×·¡¼­ cli command¿¡¼­ ½ÇÇà°¡´ÉÇÑ ¸í·ÉµéÀº confproc.cÀÇ °¢ ÇÔ¼öµé°ú 1:1´ëÀÀµÈ´Ù. 3. Àüü ±¸Á¶. ÇöÀç gwc´Â cli command¿Í GUI ÀÎÅÍÆäÀ̽º¸¦ ÅëÇØ °¢°¢ÀÇ ±â´ÉµéÀ» »ç¿ëÀÚ¿¡°Ô Á¦°øÇÕ´Ï´Ù. ³»ºÎÀûÀÎ Àüü ±¸Á¶´Â ¾Æ·¡¿Í °°½À´Ï´Ù. (½Ã½ºÅÛ ¼³Á¤) +--> shared memory | +----> cli command <----> ipc_msg() <--> procedures<-+ | ( gwccli ) /|\ | | | +--> ½Ã½ºÅÛÄÝ »ç¿ëÀÚ <--+ | | | | | | \|/ +----> GUI <-> handler <-> syscmd(), sysclist() ( gwcguid ) [gwc Àüü ±¸Á¶] À§ÀÇ ±×¸²¿¡¼­¿Í °°ÀÌ gwc´Â cli command ¶Ç´Â GUI interface¸¦ ÅëÇØ »ç¿ëÀÚÀÇ ¿äûÀ» ÀÔ·Â ¹Þ¾Æ ÇØ´ç ¿äûÀ» ó¸®ÇÕ´Ï´Ù. cli commandÀÇ »ç¿ëÀÚ ¿äû 󸮴 ¾Æ·¡¿Í °°Àº ÀÏ·ÃÀÇ °úÁ¤À» °ÅĨ´Ï´Ù. a. main() b. gwc¿¡¼­ ÃʱâÈ­ÇÑ shared memory¿¡ attach. c. »ç¿ëÀÚ ¿äû ½ºÆ®¸µ ÀÔ·Â ¹ÞÀ½. d. ipc_msg() È£Ãâ d-1. ipc_msg()³»ºÎÀûÀ¸·Î ÇØ´ç procedureÈ£Ãâ. d-2. ÇØ´ç procedure´Â °íÀ¯ ±â´ÉÀ» »ç¿ëÀÚ ¿äû´ë·Î ó¸®Çϱâ À§ÇØ shared memory¿Í ½Ã½ºÅÛ ÄÝÀ» »ç¿ë. e. ipc_msg()ÀÇ °á°ú¸¦ standard outÀ¸·Î Ãâ·Â. GUI µ¥¸óÀº »ç¿ëÀÚÀÇ ¿äû 󸮸¦ Çϱâ À§ÇØ cli command¿Í À¯»çÇÑ ±â´É ¼öÇàÀ» À¯»çÇÏÁö¸¸ GUI 󸮸¦ À§ÇØ Ãß°¡ÀÇ ³»¿ëÀÌ »ðÀԵ˴ϴÙ. a. main b. GUI È­¸é ÃʱâÈ­ ¹× ¹öưµîÀÇ callbackµî·Ï. c. show window d. gtk_main (), À̺¥Æ® ´ë±â ¸ðµå. e. »ç¿ëÀÚ ¿äû À̺¥Æ® ¹ß»ý. f. case1. »ç¿ëÀÚÀÇ ¿äûÀÌ ´Ü¼øÇÑ Ãâ·Â(list) ¿äû ½Ã sysclist()È£Ãâ. case2. »ç¿ëÀÚÀÇ ¿äûÀÌ Æ¯Á¤ µ¥ÀÌÅ͸¦ ¼³Á¤¿¡ ³Ö°Å³ª applyµîÀÇ ÇüŸé syscmd()¸¦ È£Ãâ. g. sysclist, syscmdÇÔ¼ö´Â ³»ºÎÀûÀ¸·Î cli command¿Í ÅëÀÏÇÏ°Ô ipc_msg()È£Ãâ. g-1. ipc_msg()³»ºÎÀûÀ¸·Î ÇØ´ç procedureÈ£Ãâ. g-2. ÇØ´ç procedure´Â °íÀ¯ ±â´ÉÀ» »ç¿ëÀÚ ¿äû´ë·Î ó¸®Çϱâ À§ÇØ shared h. sysclist()¸¦ È£ÃâÇÑ °æ¿ì ÇØ´ç string list¸¦ GUI¿¡ Ãâ·Â. syscmd()¸¦ È£ÃâÇÑ °æ¿ì ´Ü¼øÈ÷ ¼º°ø ½ÇÆÐ ¿©ºÎ¸¸ GUIÀÇ statusbar³ª ¿¡·¯ À©µµ¿ì·Î Ãâ·Â. 4. ±â´É Ãß°¡ ¹æ¹ý. ¾Æ·¡ÀÇ ³»¿ëÀº À§ÀÇ gwcÀüü ±¸Á¶¸¦ °¨¾ÈÇÏ¿© ½ÇÁ¦ ÇϳªÀÇ ±â´ÉÀ» Ãß°¡ÇÒ ½Ã¿¡ ¼öÇàµÇ´Â ÀÏ·ÃÀÇ °úÁ¤À» º¸¿©ÁÝ´Ï´Ù. 4.1. cli command·Î ±â´É Ãß°¡ ´Ü°è. a. ±â´É ¼³°è -> b. cli ÀÎÅÍÆäÀ̽º ÀÛ¼º -> c. ÀڷᱸÁ¶ Ãß°¡ -> d. Çڵ鷯 ±¸Çö. À§ÀÇ ´Ü°è¸¸À¸·Îµµ cli command¸¦ ÅëÇÑ ÇØ´ç ±â´ÉÀÌ Ãß°¡µË´Ï´Ù. 4.2. GUI ¿¡¼­ ±â´É °³¹ß ´Ü°è. GUI °³¹ßÀº À§¿¡¼­ ÇØ´ç ±â´ÉÀ» cli command±¸ÇöÀÌ ¿Ï·áµÈ ÈÄ, ½ÃÀÛÀÌ µÇ¸ç ¾Æ·¡¿Í °°Àº °³¹ß ´Ü°è¸¦ °ÅĨ´Ï´Ù. e. ±âº» UI ¹× ±â´É¿¡ µû¸¥ À̺¥Æ® (Ãß°¡/»èÁ¦/Àû¿ë)¿¡ µû¸¥ ±âº» ÇÔ¼ö ÇÁ·ÎÅäŸÀÔ °³¹ß -> f. syscmd, sysclist¶õ IPCÇÔ¼ö¸¦ ÅëÇØ Çڵ鷯 È£Ãâ. À§ÀÇ f. °úÁ¤±îÁö ÀÛ¾÷ÇÏ¸é °³·«ÀûÀÎ ±â´ÉÀÇ Àüü ±¸ÇöÀÌ ¿Ï·áµË´Ï´Ù. 4.3. ½ÇÁ¦ ÀÛ¾÷ ½Ã ¼¼ºÎ ³»¿ë. ¾Æ·¡ÀÇ ³»¿ëÀº ¾ÕÀÇ 4.1, 4.2¿¡¼­ º¸ÀÎ a ºÎÅÍ f ´Ü°è¿¡ ´ëÇØ ÀÛ¾÷ ½Ã °ü·ÃµÇ¾î ÀÖ´Â ¼Ò½ºµé°ú °£·«È÷ ´ëÀÀµÇ´Â ÀÛ¾÷À» º¸´Ù ¼¼ºÎÀûÀ¸·Î ¼³¸íÇÕ´Ï´Ù. a. ±â´É ¼³°è. b. cli ÀÎÅÍÆäÀ̽º ÀÛ¼º. b-1. include/sysipc.hÀÇ sys_cmd_e ¿¡ Çڵ鷯ÀÇ index¸¦ Á¤ÀÇ. b-2. include/confproc.h¿¡ Çڵ鷯ÀÇ ÇÔ¼ö ¿øÇü ¼±¾ð. b-3. gwclib/conftab.c ¾ÈÀÇ "cmdtab" table map¿¡ b-1.ÀÇ index¿Í b-2.ÀÇ ÇÔ¼ö Æ÷ÀÎÅÍ ±×¸®°í cli commandÀÇ help¸Þ¼¼Áö À妽º¸¦ ¸ÅÇÎ. b-4. include/message.h¿¡ b-3.¿¡¼­ ¼±¾ðÇÑ help¸Þ¼¼Áö¸¦ Á¤ÀÇ. b-5. gwclib/confproc.c¿¡ b-2.¿¡¼­ ¼±¾ðÇÑ ÇÔ¼ö ¿øÇü Á¤µµÀÇ ÇÔ¼ö skeleton¸¸ Á¤ÀÇ. b-5.ÀÇ °úÁ¤±îÁö ÀÛ¾÷ÀÌ ¿Ï·áµÇ¸é gwcÀÇ ÄÄÆÄÀÏÀÌ ¿øÈ°ÀÌ µÇ¾ß Çϸç cli command½ÇÇàÀÌ °¡´ÉÇÕ´Ï´Ù. ´Ü, ½ÇÁ¦ b-5¿¡¼­ ³»ºÎ ·çƾÀ» ±¸ÇöÇÏÁö ¾Ê¾ÒÀ¸´Ï ÇØ´ç cli command¸¦ ½ÇÇàÇØµµ ¾Æ¹« µ¿ÀÛÀº ¾ÊÇÕ´Ï´Ù. c. ÀڷᱸÁ¶ Ãß°¡. ÀÌÁ¦ ½ÇÁ¦ ±â´ÉÀ» ±¸Çö ¹× gwcÀÇ °øÀ¯¸Þ¸ð¸®¿¡ ÀúÀåµÉ ÀڷᱸÁ¶¸¦ Á¤ÀÇÇÏ´Â ´Ü°èÀÔ´Ï´Ù. sysdef.h ¿¡´Â ÇÊ¿ä·Î ÇÏ´Â object¸¦ Á¤ÀÇÇϸç sysshm.h¿¡´Â sysdef.h¿¡ Á¤ÀÇÇÑ object¸¦ Æ÷ÇÔÇÏ´Â °øÀ¯¸Þ¸ð¸®(sm_t ±¸Á¶Ã¼) ¿¡ ÀûÀýÈ÷ Æ÷ÇÔ½ÃÅ´´Ï´Ù. d. Çڵ鷯 Ãß°¡. b-5.¿¡¼­ ±¸ÇöÇÑ skeletonÇÔ¼ö¿¡ ´ëÇÑ ½ÇÁ¦ ±¸ÇöÀ» ÇÕ´Ï´Ù. ¼³Á¤À» Ãâ·ÂÇÏ´Â ±â´ÉÀÎ °æ¿ì csmÆ÷ÀÎÅ͸¦ ÅëÇØ c.ÀÇ °úÁ¤¿¡¼­ Ãß°¡ÇÑ ÀڷᱸÁ¶¿¡ Á¢±ÙÇϸç, »ç¿ëÀÚ ÀÔ·Â ÀúÀå ½Ã¿¡´Â saveconf ¶óÀ̺귯¸® ÇÔ¼ö¸¦ ÅëÇØ ¼³Á¤È­ÀÏ¿¡ ÀúÀåÀ» ÇÕ´Ï´Ù. ±× ¿Ü¿¡ ÇÊ¿ä ½Ã ½Ã½ºÅÛ ÄÝÀ» È£ÃâÇÏ¿© »ç¿ëÀÚ ¿äûÀ» ÀûÀýÈ÷ ó¸®ÇÕ´Ï´Ù. À§ÀÇ dÀÇ °úÁ¤±îÁö ¿Ï·áµÇ¸é cli command¸¦ ÅëÇØ ½ÇÁ¦ ±â´É ¼öÇàÀÌ °¡´ÉÇØÁý´Ï´Ù. e. ±âº» UI ¹× ±â´É¿¡ µû¸¥ À̺¥Æ® (Ãß°¡/»èÁ¦/Àû¿ë)¿¡ µû¸¥ ±âº» ÇÔ¼ö ÇÁ·ÎÅäŸÀÔ °³¹ß e-1. ±â´É¿¡ µû¸¥ GUI µðÀÚÀÎÀ» ÇÑ ÈÄ glade¿Í °°Àº °³¹ßÅøÀ» »ç¿ëÇÏ¿© gtkÄڵ带 ¸¸µì´Ï´Ù. e-2. e-1. ¿¡¼­ ÃßÃâÇÑ gtkÄڵ带 ÇöÀç gwcguid³»ÀÇ interface.c¿¡ Ãß°¡ÇÕ´Ï´Ù. ´Ü callbackÇÔ¼ö´Â callback.c¿¡ Ãß°¡. f. syscmd, sysclist¶õ IPCÇÔ¼ö¸¦ ÅëÇØ Çڵ鷯 È£Ãâ. e-2¿¡¼­ ±¸ÇöµÈ callbackÇÔ¼ö ¾È¿¡ ½ÇÁ¦ ó¸® (ipc_msg¸¦ ÅëÇØ d.ÀÇ °úÁ¤¿¡¼­ ¿Ï·áÇÑ Çڵ鷯¸¦ ±Ã±ØÀûÀ¸·Î È£ÃâÇϱâ À§ÇØ)À§ÇØ syscmd, sysclist¸¦ »ç¿ëÇÏ¿© GUI ±¸ÇöÀ» ¿Ï·áÇÕ´Ï´Ù. Âü°í·Î ¾Æ·¡´Â GUI µ¥¸ó¿¡¼­ syscmd, sysclist¸¦ »ç¿ë ÇÏ´Â ±¸Ã¼ÀûÀÎ ¼³¸íÀ» ÇÕ´Ï´Ù. 4.4. gwcguid µ¥¸ó¿¡¼­ sysclist, syscmd ¸¦ ÅëÇÑ IPC. 4.4.1. syscmdÇÔ¼ö. ¼³Á¤ ³»¿ëÀ» Ãâ·ÂÇÏ´Â ³»¿ë ¿Ü¿¡ ¸ðµç µ¿ÀÛÀº syscmd()¸¦ È£ÃâÇÏ¿© IPCÇÕ´Ï´Ù. °¡·É ¼³Á¤ÀÇ Ãß°¡ ¶Ç´Â ¼³Á¤ Àû¿ëÀÌ ±× ¿¹ÀÔ´Ï´Ù. void *syscmd(sys_cmd_e cmd, ...); - sys_cmd_e : sysipc.h ¿¡ Á¤ÀÇ - ... : command¿¡ µû¶ó °¡º¯ÀûÀÎ ÀÔ·ÂÀ̹ǷΠconftab.c ¿¡ CMD_XXX¿¡ ¸ÅÇÎµÈ ½ÇÁ¦ ó¸® ÇÔ¼öÀÇ ÀԷ ó¸®¸¦ ÂüÁ¶ÇÑ´Ù. »ç¿ë¿¹) "class name", "class type"À» »ç¿ëÀÚ·Î ºÎÅÍ Àü´Þ¹Þ¾Æ class Ãß°¡ÇÏ´Â ·çƾ. char *error = NULL; char name [OL] char type[10]; strcpy(name, ÀԷ¹ÞÀº°ª); /* class name */ strcpy(type, ÀԷ¹ÞÀº°ª); /* class type */ error = syscmd ( CMD_ADD_TC_CLASS, name, type, EOA); if ( !error ) { /* ¼º°ø */ /* ¼º°ø ½ÃÀÇ window ·çƾ ÄÚµå */ } else { /* ½ÇÆÐ */ /* ½ÇÆÐÇÑ °æ¿ìÀÌ¹Ç·Î ÇØ´ç ÀÌÀ¯¸¦ Ç¥½ÃÇÏ´Â À©µµ¿ì¸¦ »ý¼ºÇÑ´Ù. */ /* ´Ü, ½ÇÆÐ¿øÀÎÀº error[0] ½ºÆ®¸µ¿¡ ÀÖÀ¸¹Ç·Î À̸¦ Ãâ·ÂÇÑ´Ù. */ call error_window ("%s", error); } /* ½ÇÆÐÇÑ °æ¿ì syscmdfree()´Â ¹Ýµå½Ã È£ÃâµÇ¾ßÇÔ, ¼º°øÇÑ °æ¿ì´Â errorÀÌ NULLÀÌÁö¸¸ * È£ÃâÇÏ¸é ±×³É ¸®ÅÏÇϹǷΠ½ÇÆÐ/¼º°ø°ú ¹«°üÇÏ°Ô È£ÃâÇϵµ·Ï Çϴ°Թٶ÷Áü.*/ syscmdfree (error); return; 4.4.2. sysclist ÇÔ¼ö. ¼³Á¤µîÀÇ Á¤º¸¸¦ Ãâ·ÂÇÏ´Â ÇüÅÂÀÇ µ¿ÀÛÀº gwcguidµ¥¸ó¿¡¼­ sysclist¸¦ ÅëÇØ °øÀ¯¸Þ¸ð¸®¿¡ Á¢±ÙÇÕ´Ï´Ù. char ** sysclist(sys_cmd_e cmd, char *what, int *col, int *row) - sys_cmd_e : sysipc.h¿¡ ¹Ì¸® Á¤ÀǵÈcommand ÀÇ À妽º(CMD_XXX..) - what : NULL - col : ¾ò¾î¿Â list(¸®ÅÏ °ªÀÇ)ÀÇ ¿­ÀÇ °³¼ö - row : ¾ò¾î¿Â listÀÇ ÇàÀÇ °³¼ö ¸®ÅÏ °ª char** ÀÎ ÀÌÁ߹迭 ¿¹Á¦) radiusdµ¥¸óÀÇ pid¸¦ ¾ò¾î¿Í¼­ Ãâ·ÂÇÏ´Â ¿¹Á¦. char **list; int cols; int rows; list = sysclist(CMD_GET_RADIUSD_PID, NULL, &cols, &rows); if ( rows == -1 ){ /* ½ÇÆÐ */ /* ½ÇÆÐ ÀÌÀ¯ : list[0] */ /* In this case list, list must not free, because this list is not allot by malloc it just a arry in internally list[0] = &buf , whenever error occur in internally, free first called in internally so we will not need to free again */ error window ("%s", list[0]) return; } else { /* ¼º°ø */ } sysclistfree (list); /* must be called whever success */ return; 4.4.3. syscmdfree/sysclist À¯ÀÇ »çÇ×. À§ÀÇ 2¿¡¼­ º¸ÀÎ »ç¿ë ¿¡¸¦ µû¸£Áö ¾ÊÀ» °æ¿ì memory leak°¡ »ý±â¹Ç·Î ÁÖÀÇÇÑ´Ù! 4.4.4. sysclistÀÇ ¸®ÅϰªÀÎ list list´Â 2Â÷ ¹è¿­ÀÇ ½ÃÀÛ ÁÖ¼Ò¸¦ °¡Áö°í ÀÖ´Ù. ¿¹¸¦ µé¾î pcols =2, prows =3 ÀÎ °æ¿ì, ¾Æ·¡ÀÇ ÇüÅ·Πlist°¡ ³Ñ¾î¿Â´Ù +------------------------------------------------------------ | 0 | 1 | 2 | 3 | 4 | 5 | +------------------------------------------------------------ /| row(1) row(2) row(3) | list 5. IPC. gwc¿¡¼­´Â 2°¡ÁöÀÇ IPC¸¦ »ç¿ëÇϰí ÀÖ½À´Ï´Ù. - shared memory. - unix domain socket. 5.1. shared memory. À§¿¡¼­ÀÇ shared memory´Â ÇöÀç gwcÀÇ configÀÇ Á¤º¸¸¦ ´Ù¸¥ ÇÁ·Î¼¼½º¿Í °øÀ¯Çϱâ À§ÇØ »ç¿ëµÇ¸é ±Ã±ØÀûÀÎ interface ´Â À§¿¡¼­ ¾ð±ÞµÈ ipc_msg, syscmd, sysclistÀÔ´Ï´Ù. À§ÀÇ 3°¡Áö interface¸¦ »ç¿ëÇϱâ À§ÇØ cli command¿Í GUIµ¥¸óÀº °¢°¢ gwcadmd°¡ ÃʱâÈ­ÇÑ °øÀ¯¸Þ¸ð¸®¿¡ attach, detachÇÏ´Â ÀýÂ÷¸¦ °¡Áö¸ç ¾Æ·¡´Â ±×¿Í °ü·ÃµÈ ¶óÀ̺귯¸® ÇÔ¼ö »ç¿ëÀ» º¸¿©ÁÝ´Ï´Ù. 5.1.1. attach, detach. [ attach ¿¹Á¦ ] #include "sysshm.h" extern sm_t *csm; if (cshmattach(&csm) < 0) { printf("Cannot attach SHM '%s'\n", strerror(errno)); ... } [ detach ¿¹Á¦ ] if (cshmdetach(csm) < 0) { printf("Cannot detach SHM '%s'\n", strerror(errno)); ... } 5.1.2. °øÀ¯ ¸Þ¸ð¸® Á¢±Ù ¹× µ¿±âÈ­. À§ÀÇ attach°úÁ¤ÀÌ ¼º°øÇϸé csmÆ÷ÀÎÅ͸¦ ÅëÇØ sm_t¿¡ Á¤ÀÇµÈ shared memory¿¡ Á¢±Ù°¡´ÉÇÏ°Ô µË´Ï´Ù. ÇÏÁö¸¸, °¡±ÞÀû Àüü ½Ã½ºÅÛÀÇ µ¿±âÈ­µîÀ» °¨¾ÈÇÏ¿© ÇÁ·Î¼¼½º¿¡¼­ csmÆ÷ÀÎÅ͸¦ ÅëÇØ °³º°ÀûÀÎ read/write´Â ÇÇÇÏ´Â °ÍÀÌ ÁÁ½À´Ï´Ù. µ¿±âÈ­ ¹®Á¦ ¹ß»ý ½Ã, "memory segment fault" ¶Ç´Â pf¿Í ¿¬°üµÈ °æ¿ì kernel panicÀÌ ¹ß»ýµÉ ¼ö ÀÖ½À´Ï´Ù. shared memory¿¡ ´ëÇÑ µ¿±âÈ­ÀÇ ÇØ°áÃ¥Àº ¿©·¯°¡Áö°¡ ÀÖÀ» ¼ö ÀÖÁö¸¸, ÇöÀç´Â gwcadmdµ¥¸ó¿¡¼­ ¾Æ·¡¿Í °°Àº ¹æ¹ýÀ¸·Î µ¿±âÈ­ ¹®Á¦¸¦ ó¸®Çϰí ÀÖ½À´Ï´Ù. while (csm->shared_mutex == MUTEX_LOCK); /* UNLOCK »óŰ¡ µÉ¶§±îÁö blockingµÊ. */ csm->shared_mutex = MUTEX_LOCK; ó¸®ÇÒ ÄÚµå »ðÀÔ.... csm->shared_mutex = MUTEX_UNLOCK; 5.2. unix domain socket. ÇöÀç gwc´Â unix domain socketÀ» Á»´õ ÆíÇÏ°Ô »ç¿ëÇϱâ À§ÇØ ¾Æ·¡¿Í °°Àº 3°³ÀÇ ÇÔ¼ö¸¦ ·¡ÆÛÇüÅ·ΠÁ¦°øÇÕ´Ï´Ù. int sys_ipclisten(void); int sys_ipcconn(void); int sys_ipcclean(void); ÇöÀç´Â gwccli ¿¡¼­ »ç¿ëÀÚ ¿äûÀ» ¹Þ¾Æ procedure¿¡¼­ gwcadmdµ¥¸ó°ú Åë½ÅÀ» À§ÇØ »ç¿ëÇϰí ÀÖ½À´Ï´Ù. grep·Î ÇØ´ç ºÎºÐÀ» ã¾Æº¸½Ã¸é ÂüÁ¶°¡ »ç¿ë ½Ã À¯¿ëÇÒ ¼ö ÀÖÀ½À» ¾Æ½Ç°Ì´Ï´Ù. 6. ÄÚµù ½ºÅ¸ÀÏ. gnu style·Î ÅëÀϵDZ⸦ ¿øÇÕ´Ï´Ù. ÇöÀç gwc-v0.1-pre2±îÁö´Â gnu styleÀÌ Àß ÁöÄÑÁöÁö ¾Ê¾ÒÁö¸¸ ÃßÈÄ ÀÛ¾÷ ½Ã¿¡´Â indentÀÇ gnu ¿É¼ÇÀ» ÅëÇØ gnu style·Î ÅëÀÏ µÇ¾úÀ¸¸é ÇÕ´Ï´Ù. ¿¹) ±¸ÇöµÈ ¼Ò½ºÈ­ÀÏ ³»¿ë ¸ðµÎ¸¦ gnu style·Î ¹Ù²Ù´Â ¿¹. $indent -gnu test.c 7. Library Ãß°¡. Á¾Á¾ »ç¿ëµÉ °ÍÀ¸·Î ¿¹»óµÇ´Â ·çƾÀº 2Àå "¼Ò½º µð·ºÅ丮 ¼³¸í" Á߹ݺÎÅÍ ¼³¸íµÈ [Çì´õÈ­ÀÏ] [¼Ò½º]ÀÇ ºÐ·ù¸¦ ÂüÁ¶ÇÏ¿© ÇØ´ç ¼Ò½º¿¡ Ãß°¡Çϱ⸦ ÃßõÇÕ´Ï´Ù. Contact to: linuxpark.netadm@gmail.com, 2006. 02. 19. (sun) 22:24:08 KST