ºìÁªLinuxÃÅ»§
Linux°ïÖú

LinuxºÍFreeBSD libnet·¢ËÍ»úÖÆ¶Ô±È

·¢²¼Ê±¼ä:2007-11-29 00:00:30À´Ô´:ºìÁª×÷Õß:Gifotce
Ñо¿libnet´úÂëÒÔ¼°Êµ¼Ê²âÊÔ£º
·¢ÏÖÔÚFreebsdÖУ¬Êµ¼Ê·¢Ë͵ÄÊý¾ÝÖ¡²»Äܳ¬¹ý2034£¬¼ÓÉÏ14×Ö½ÚÕýºÃÊÇ2048ÁË
ÔÚLinuxÖУ¬LibNet²ÉÈ¡ÁËRAW SOCKETµÄ·½Ê½·¢ËÍÊý¾Ýsocket(PF_SOCKET,SOCK_RAW,htons(ETH_P_ALL))
FreebsdÖл»ÁË»úÖÆ£¬Ê¹ÓõÄÊÇbpfÇý¶¯·½Ê½¡£
²é¿´BPFÔ´´úÂ룬·¢ÏÖÄÚºËʵÏÖʱ
bpf.c:248
if ((unsigned)len > MCLBYTES)
return (EIO);
¶øMCLBYTEºêȱʡ¶¨ÒåΪ2048£¬ÔÚÄÚºËÅäÖÃÎļþsys/params.h:144ÐÐ
/*
* Constants related to network buffer management.
* MCLBYTES must be no larger than PAGE_SIZE.
*/
#ifndef MSIZE
#define MSIZE 256 /* size of an mbuf */
#endif /* MSIZE */
#ifndef MCLSHIFT
#define MCLSHIFT 11 /* convert bytes to mbuf clusters */
#endif /* MCLSHIFT */
#define MCLBYTES (1 << MCLSHIFT) /* size of an mbuf cluster */
#define MJUMPAGESIZE PAGE_SIZE /* jumbo cluster 4k */
#define MJUM9BYTES (9 * 1024) /* jumbo cluster 9k */
#define MJUM16BYTES (16 * 1024) /* jumbo cluster 16k */
ÔÚÅäÖÃÄÚºËʱӦ¸Ã¿ÉÒÔͨ¹ýÅäÖÃ
MCLSHIFT 12 À´½«»º³åÇøÌá¸ßµ½4096
µ«ÊÇÎÒÏë·¢ËÍ8KµÄÊý¾Ý°üÔõô°ì£¿
/*
* Constants related to network buffer management.
* MCLBYTES must be no larger than PAGE_SIZE.
*/
רÃÅÓÐÒ»¸öÌáʾҪÇó²»ÄÜ´óÓÚPAGE_SIZE£¬ÄѵÀÎÒ»¹Òª¸Ä¶¯PAGE_SIZE£¿¸Ä¶¯ºó¶Ôϵͳ»á²»»áÔì³É½Ï´óÓ°Ï죿£¿
¿´ÁËϵͳԴÂ룬ÔÚIA64ÖУ¬PAGE_SIZEĬÈÏΪ8K£¬ÔÚÆäÆäËûÌåϵÖУ¬°üÀ¨AMD64£¬¶¼ÊÇ4096
ΪºÎ£¿´ýÑо¿
¿´À´RAW SOCKETÐÔÄÜÊÇÒª¸ß¡£
ÏÂÀ´ÔÙÑо¿bfpÔ´Âë°É
ÎÄÕÂÆÀÂÛ

¹²ÓÐ 0 ÌõÆÀÂÛ