LinuxÍøÇŵÄʵÏÖ·ÖÎö
±¾ÎÄ·ÖÎöÁËlinux 2.4.xÄں˵ÄÍøÇŵÄʵÏÖ·½·¨£¬²¢ÇÒÃèÊöÁËÈçºÎʹÓÃ2.4ÖеÄÍøÇÅ¡£ÍøÇÅ£¬ÀàËÆÓÚÖÐ¼ÌÆ÷£¬Á¬½Ó¾ÖÓòÍøÖÐÁ½¸ö»òÕß¶à¸öÍø¶Î¡£ËüÓëÖÐ¼ÌÆ÷µÄ²»Í¬Ö®´¦¾ÍÔÚÓÚËüÄܹ»½âÎöËüÊÕ·¢µÄÊý¾Ý£¬¶ÁȡĿ±êµØÖ·ÐÅÏ¢£¨MAC£©£¬²¢¾ö¶¨ÊÇ·ñÏòËùÁ¬½ÓÍøÂçµÄÆäËûÍø¶Îת·¢Êý¾Ý°ü¡£ÎªÁËÄܹ»¾ö²ßÏòÄǸöÍø¶Î·¢ËÍÊý¾Ý°ü£¬ÍøÇÅѧϰ½ÓÊÕµ½Êý¾Ý°üµÄÔ´MACµØÖ·£¬ÔÚ±¾µØ½¨Á¢Ò»¸öÒÔMACºÍ¶Ë¿ÚΪ¼Ç¼ÏîµÄÐÅÏ¢Êý¾Ý¿â¡£
LinuxÄÚºËÍøÇŵÄʵÏÖ·ÖÎö
Linux Äں˷ֱðÔÚ2.2 ºÍ 2.4ÄÚºËÖÐʵÏÖÁËÍøÇÅ¡£µ«ÊÇ2.2 ÄÚºËºÍ 2.4Äں˵ÄʵÏÖÓкܴóµÄÇø±ð£¬2.4ÖеÄʵÏÖ¼¸ºõÊÇÈ«²¿ÖØÐ´ÁËËùÓеÄʵÏÖ´úÂë¡£±¾ÎÄÒÔ2.4.0Äں˰汾ΪÀý½øÐзÖÎö¡£
ÔÚ·ÖÎö¾ßÌåµÄʵÏÖ֮ǰ£¬ÏÈÃèÊö¼¸¸ö¸ÅÄÓÐÖúÓÚ¶ÔÍøÇŵŦÄܼ°ÊµÏÖÓиüÉîµÄÀí½â¡£
³åÍ»Óò
Ò»¸ö³åÍ»ÓòÓÉËùÓÐÄܹ»¿´µ½Í¬Ò»¸ö³åÍ»»òÕß±»¸Ã³åÍ»Éæ¼°µ½µÄÉ豸×é³É¡£ÒÔÌ«ÍøÊ¹ÓÃC S M A / C D£¨Carrier Sense Multiple Access with Collision Detection£¬´øÓгåÍ»¼à²âµÄÔØ²¨ÕìÌý¶àÖ··ÃÎÊ£©¼¼ÊõÀ´±£Ö¤Í¬Ò»Ê±¿Ì£¬Ö»ÓÐÒ»¸ö½ÚµãÄܹ»ÔÚ³åÍ»ÓòÄÚ´«ËÍÊý¾Ý¡£ÍøÇÅ»òÕß½»»»»ú£¬¹¹³ÉÁËÒ»¸ö³åÍ»ÓòµÄ±ß½ç¡£È±Ê¡Çé¿öÏ£¬ÍøÇÅÖеÄÿ¸ö¶Ë¿Úʵ¼ÊÉϾÍÊÇÒ»¸ö³åÍ»ÓòµÄ½áÊøµã¡£
¹ã²¥Óò
Ò»¸ö¹ã²¥ÓòÓÉËùÓÐÄܹ»¿´µ½Ò»¸ö¹ã²¥Êý¾Ý°üµÄÉ豸×é³É¡£Ò»¸ö·ÓÉÆ÷£¬¹¹³ÉÒ»¸ö¹ã²¥ÓòµÄ±ß½ç¡£ÍøÇÅÄܹ»ÑÓÉìµ½µÄ×î´ó·¶Î§¾ÍÊÇÒ»¸ö¹ã²¥Óò¡£È±Ê¡µÄÇé¿öÏ£¬Ò»¸öÍøÇÅ»ò½»»»»úµÄËùÓж˿ÚÔÚͬһ¸ö¹ã²¥ÓòÖС£VLAN¼¼Êõ¿ÉÒ԰ѽ»»»»ú»òÕßÍøÇŵIJ»Í¬¶Ë¿Ú·Ö¸î³É²»Í¬µÄ¹ã²¥Óò¡£Ò»°ãÇé¿öÏ£¬ Ò»¸ö¹ã²¥Óò´ú±íÒ»¸öÂß¼Íø¶Î¡£
ÍøÇÅÖеÄCAM±í
ÍøÇźͽ»»»»úÒ»Ñù£¬ÎªÁËÄܹ»ÊµÏÖ¶ÔÊý¾Ý°üµÄת·¢£¬ÍøÇű£´æ×ÅÐí¶à£¨MAC£¬¶Ë¿Ú£©Ïî¡£ËùÓеÄÕâЩÏî×é³ÉÒ»¸ö±í£¬½Ð×öCAM±í¡£Ã¿¸öÏîÓг¬Ê±»úÖÆ£¬Èç¹ûÒ»¶¨Ê±¼äÄÚδ½ÓÊÕµ½ÒÔÕâ¸öMACΪԴMACµØÖ·µÄÊý¾Ý°ü£¬Õâ¸öÏî¾Í»á±»É¾³ý¡£
ͼ1£ºÒ»¸ö½»»»ÍøÂçµÄÂ߼ͼ
ÔÚLinuxÄÚºËÍøÇŵÄʵÏÖÖУ¬Ò»¸öÂß¼Íø¶ÎÓÃnet_bridge½á¹¹Ìå±íʾ¡£Ò»¸öÂß¼Íø¶ÎÐèÒª±£ÁôµÄÐÅÏ¢ÓУº
±¾Âß¼Íø¶ÎÖÐËùÓеĶ˿Ú(port_list) ÿ¸ö¶Ë¿ÚÓÃnet_bridge_port½á¹¹ÌåÀ´±íʾ£¬´Ónet_bridge_port½á¹¹ÌåÖпÉÒÔ¿´³ö£¬ËüÖ÷ÒªÓÐ:
Âß¼Íø¶ÎÖеÄÏÂÒ»¸ö¶Ë¿Ú(next)
±¾¶Ë¿ÚËùÊôµÄÂß¼Íø¶Î(br)
±¾¶Ë¿ÚËùÖ¸ÏòµÄÎïÀíÍø¿¨£¨dev£©
±¾¶Ë¿ÚÔÚÍøÇÅÖеıàºÅ(port_no)
ÓÃÓÚÉú³ÉÊ÷¹ÜÀíµÄÐÅÏ¢
Ò»¸öÂß¼Íø¶ÎÖпÉÒÔ¾ßÓкܶà¸ö¶Ë¿Ú£¬ËùÓеĶ˿ڶ¼¹ÒÔÚÒÔport_listΪÁ´±íÍ·µÄÁ´±íÉÏ¡£ ±¾Íø¶ÎÖÐCAM±í£¨hash[BR_HASH_SIZE]£© CAM±í
Ïà¹ØÎĵµ£º
ÔÚlinux»·¾³Ï±à³ÌÓÐÒ»¸öºÜÈÃÈËÍ·ÌÛµÄÎÊÌâ¾ÍÊÇÐźŶÔϵͳµ÷ÓõĸÉÈÅ£¬ÔÚϵͳµ÷Óùý³ÌÖÐÈç¹ûÊܵ½ÐźŵĸÉÈÅ£¬
²¿·Öϵͳµ÷ÓûὫerrnoÉèÖóÉEINTR£¬ÎÒÃDz»µÃ²»±àдÏÂÃæµÄ´íÎó´¦Àí´úÂëÀ´·ÀÖ¹ÕâÖÖÇé¿öµÄ·¢Éú£º
syscall:
int ret = syscall(...);
if (ret < 0 && EINTER == errno)
goto syscall;
el ......
LinuxÌṩÁË´óÁ¿µÄÃüÁÀûÓÃËü¿ÉÒÔÓÐЧµØÍê³É´óÁ¿µÄ¹¤×÷£¬Èç´ÅÅ̲Ù×÷¡¢Îļþ´æÈ¡¡¢Ä¿Â¼²Ù×÷¡¢½ø³Ì¹ÜÀí¡¢ÎļþȨÏÞÉ趨µÈ¡£ËùÒÔ£¬ÔÚLinuxϵͳÉϹ¤×÷Àë²»¿ªÊ¹ÓÃϵͳÌṩµÄÃüÁî¡£ÒªÏëÕæÕýÀí½âLinuxϵͳ£¬¾Í±ØÐë´ÓLinuxÃüÁîѧÆð£¬Í¨¹ý»ù´¡µÄÃüÁîѧϰ¿ÉÒÔ½øÒ»²½Àí½âLinuxϵͳ¡£
²»Í¬Linux·¢ÐаæµÄÃüÁîÊýÁ¿²»Ò»Ñù£¬µ«Linux·¢ÐÐ°æ± ......
/*
socket selectÄ£ÐÍ£¬·þÎñ¶Ë
¾ø´ó¶àÊý×¢ÊÍ×Ô¼ºÐ´µÄ£¬²Î¿¼man
*/
#include <sys/types.h>
#include <sys/socket.h>
#include <sys/wait.h>
#include <stdio.h>
#include <stdlib.h>
#include <errno.h>
#include <string.h>
#include <sys/un.h>
#include &l ......
¶ÀÌØµÄ¿ª·¢Ä£Ê½Ôì¾ÍÁ˽ñÌì°Ù¼ÒÕùÃùµÄLinux£¬¸÷¸ö·¢ÐаæµÄÃû×Ö¶¼´ú±íÄÄЩº¬ÒåÄØ£¿ÏÂÃæÊÇһЩ³£Óõİ汾£¬¸ÐÐËȤµÄÅóÓÑÒ»ÆðÀ´¿´£º 1-UbuntuÕâ»òÐíÊǽñÌì×î³£¼ûµÄÒ»¸öLinux·¢ÐаæÁË£¬UbuntuÊÇÒ»¸öÄϷǵÄÃñ×å¹ÛÄ×ÅÑÛÓÚÈËÃÇÖ®¼äµÄÖҳϺÍÁªÏµ¡£¸Ã´ÊÀ´×ÔÓÚ×æÂ³ÓïºÍ¿ÆÈøÓï¡£´óÒâÊÇ“È˵À´ýÈË”(¶ÔËûÈËÈÊ´È)¡£ÁíÒ»ÖÖ·Ò ......
6.7.1 LinuxʹÓõĻº´æ
²»¹ÜÔÚÓ²¼þÉè¼Æ»¹ÊÇÈí¼þÉè¼ÆÖУ¬¸ßËÙ»º´æÊÇ»ñµÃ¸ßÐÔÄܵij£ÓÃÊֶΡ£Linux ʹÓÃÁ˶àÖÖºÍÄÚ´æ¹ÜÀíÏà¹ØµÄ¸ßËÙ»º´æ¡£
1£® »º³åÇø¸ßËÙ»º´æ£º
»º³åÇø¸ßËÙ»º´æÖаüº¬ÁËÓÉ¿éÉ豸ʹÓõÄÊý¾Ý»º³åÇø¡£ÕâЩ»º³åÇøÖаüº¬ÁË´ÓÉ豸ÖжÁÈ¡µÄÊý¾Ý¿é»òдÈëÉ豸µÄÊý¾Ý¿é¡£»º³åÇø¸ßËÙ»º´æÓÉÉ豸±êʶºÅºÍ¿é±êºÅË÷Òý£¬Ò ......