mpo_init
¡¡¡¡²ßÂÔ¼ÓÔØÊ¼þ¡£µ±Ç°½ø³ÌÕý³ÖÓвßÂÔÁ´±íÉϵĻ¥³âËø£¬Òò´ËÊÇ·Ç˯Ãߵģ¬¶ÔÆäËûÄÚºË×ÓϵͳµÄµ÷ÓÃÒ²ÐëÉ÷ÖØ¡£ Èç¹ûÐèÒªÔÚ²ßÂÔ³õʼ»¯½×¶Î½øÐпÉÄÜÔì³É˯Ãß×èÈûµÄ´æ´¢·ÖÅä²Ù×÷£¬¿ÉÒÔ½«ËüÃÇ·ÅÔÚÒ»¸öµ¥¶ÀµÄÄ£¿é SYSINIT() ¹ý³ÌÖм¯ÖнøÐС£
mpo_destroy
¡¡¡¡²ßÂÔ¼ÓÔØÊ¼þ¡£±ØÐë³ÖÓвßÂÔÁ´±í»¥³âËø£¬Òò´ËÐèÒªÉ÷ÖØÐÐÊ¡£
mpo_syscall
¡¡¡¡¸ÃÈë¿Úº¯ÊýÌṩ²ßÂÔ¸´ÓõÄϵͳµ÷Óã¬ÕâÑù²ßÂÔÄ£¿é²»ÐèҪΪÆäÏòÓû§½ø³ÌÌṩµÄÿһ¸ö¶îÍâ·þÎñ¶ø×¢²áרÓõÄϵͳµ÷ÓᣠÓÉÓ¦ÓóÌÐòÌṩµÄ²ßÂÔ×¢²áÃû×ÖÀ´È·¶¨ÌṩÆäËùÉêÇë·þÎñµÄÌØ¶¨²ßÂÔ£¬ËùÓвÎÊý½«Í¨¹ý¸ÃÈë¿Úº¯Êý´«µÝ¸ø±»µ÷ÓõIJßÂÔ¡£ µ±ÊµÏÖзþÎñʱ£¬°²È«Ä£¿é±ØÐëÔÚ±ØÒªÊ±Í¨¹ý MAC ¿ò¼Üµ÷ÓÃÏàÓ¦µÄ·ÃÎÊ¿ØÖƼì²é»úÖÆ¡£ ±È·½Ëµ£¬¼ÙÈçÒ»¸ö²ßÂÔʵÏÖÁËijÖÖ¶îÍâµÄÐźŹ¦ÄÜ£¬ÄÇôËüÓ¦¸Ãµ÷ÓÃÏà¹ØµÄÐźŷÃÎÊ¿ØÖƼì²é£¬ÒÔ½ÓÊÜ MAC ¿ò¼ÜÖÐ×¢²áµÄÆäËû²ßÂԵļì²é¡£
×¢Òâ: ²»Í¬µÄÄ£¿éÐèÒª²¢·¢µØÊÖ¶¯½øÐÐ
copyin()
¿½±´ÏµÍ³µ÷ÓÃÊý¾Ý¡£
mpo_thread_userret
¡¡¡¡Ê¹ÓøÃÈë¿Úº¯Êý£¬²ßÂÔÄ£¿éÄܹ»ÔÚÏ̷߳µ»ØÓû§¿Õ¼äʱ£¨ÏµÍ³µ÷Ó÷µ»Ø¡¢Òì³£·µ»ØµÈµÈ£©½øÐÐ MAC Ïà¹ØµÄ´¦Àí¹¤×÷¡£ ʹÓö¯Ì¬½ø³Ì±ê¼ÇµÄ²ßÂÔÐèҪʹÓøÃÈë¿Úº¯Êý£¬ÒòΪÔÚ´¦Àíϵͳµ÷ÓõĹý³ÌÖУ¬²¢²»ÊÇÔÚÈÎÒâʱ¿Ì¶¼ÄÜÉêÇëµ½½ø³ÌËøµÄ£» ½ø³ÌµÄ±ê¼Ç¿ÉÄܱíʾ´«Í³µÄÈÏÖ¤ÐÅÏ¢¡¢½ø³ÌÀúÊ·¼Ç¼»òÕ߯äËûÊý¾Ý¡£ÎªÊ¹ÓøÃÈë¿Úº¯Êý£¬¶Ô½ø³ÌÐÅÈÎ×´Ëù×÷µÄÐÞ¸Ä ¿ÉÄܱ»´æ·ÅÔÚ p_label ,¸ÃÓòÊÜÒ»¸ö½ø³Ì¼¶×ÔÐýËøµÄ±£»¤£»½ÓÏÂÀ´£¬ÉèÖÃÏ̼߳¶µÄTDF_ASTPENDING ±ê־λºÍ½ø³Ì¼¶µÄPS_MACPENDM±ê־룬±íÃ÷½«µ÷¶ÈÒ»¸ö¶Ô userret Èë¿Úº¯ÊýµÄµ÷Óá£Í¨¹ý¸ÃÈë¿Úº¯Êý£¬ ²ßÂÔ¿ÉÒÔÔÚÏà¶Ô¼òµ¥µÄͬ²½ÉÏÏÂÎÄÖд´½¨ÐÅÈÎ×´µÄÌæ´úÆ·¡£²ßÂÔ±à³ÌÈËÔ±±ØÐëÇå³þ£¬ÐèÒª±£Ö¤Óëµ÷¶ÈÒ»¸ö AST Ïà¹ØµÄʼþÖ´ÐдÎÐò£¬ ͬʱËùÖ´ÐÐµÄ AST ¿ÉÄܸܺ´ÔÓ£¬¶øÇÒÔÚ´¦Àí¶àÏß³ÌÓ¦ÓóÌÐòʱ¿ÉÄܱ»ÖØÈë¡£
mpo_init_bpfdesc_label
¡¡¡¡ÎªÒ»¸öнüʵÀý»¯µÄ bpfdesc£¨BPF ÃèÊö×Ó£©³õʼ»¯±ê¼Ç¡£¿ÉÒÔ˯Ãß¡£
mpo_init_cred_label
¡¡¡¡ÎªÒ»¸öнüʵÀý»¯µÄÓû§ÐÅÈÎ×´³õʼ»¯±ê¼Ç¡£¿ÉÒÔ˯Ãß¡£
mpo_init_devfsdirent_label
¡¡¡¡ÎªÒ»¸öнüʵÀý»¯µÄ devfs¡¡±íÏî³õʼ»¯±ê¼Ç¡£¿ÉÒÔ˯Ãß¡£
mpo_init_ifnet_label
¡¡¡¡ÎªÒ»¸öнüʵÀý»¯µÄÍøÂç½Ó¿Ú³õʼ»¯±ê¼Ç¡£¿ÉÒÔ˯Ãß¡£
mpo_init_ipq_label
²ÎÊý | ˵Ã÷ | Ëø¶¨ |
---|---|---|
label |
½«±»Ó¦ÓõÄбê¼Ç | |
flag |
˯Ãß/²»Ë¯Ãß malloc(9); ²Î¼ûÏÂÎÄ |
¡¡¡¡ÎªÒ»¸öнüʵÀý»¯µÄ IP ·ÖÆ¬ÖØ×é¶ÓÁгõʼ»¯±ê¼Ç¡£ÆäÖеÄflag
Óò¿ÉÄÜÈ¡M_WAITOK
»òM_NOWAIT
Ö®Ò»£¬ÓÃÀ´±ÜÃâÔڸóõʼ»¯µ÷ÓÃÖÐÒòΪ malloc(9) ¶ø½øÈë˯Ãß¡£IP
·ÖÆ¬ÖØ×é¶ÓÁеķÖÅä²Ù×÷ͨ³£ÊÇÔÚ
¶ÔÐÔÄÜÓÐÑϸñÒªÇóµÄ»·¾³Ï½øÐеģ¬Òò´ËʵÏÖ´úÂë±ØÐëСÐĵرÜÃâ˯Ãߺͳ¤Ê±¼äµÄ²Ù×÷¡£IP
·ÖÆ¬ÖØ×é¶ÓÁзÖÅä²Ù×÷ʧ°ÜʱÉÏÊöÈë¿Úº¯Êý½«Ê§°Ü·µ»Ø¡£
mpo_init_mbuf_label
²ÎÊý | ˵Ã÷ | Ëø¶¨ |
---|---|---|
flag |
˯Ãß/²»Ë¯Ãß malloc(9); ²Î¼ûÏÂÎÄ | |
label |
½«±»³õʼ»¯µÄ²ßÂÔ±ê¼Ç |
¡¡¡¡ÎªÒ»¸öнüʵÀý»¯µÄ mbuf Êý¾Ý°üÍ·²¿£¨mbuf
£©³õʼ»¯±ê¼Ç¡£ ÆäÖеÄflag
µÄÖµ¿ÉÄÜÈ¡M_WAITOK
ºÍM_NOWAIT
Ö®Ò»£¬ ÓÃÀ´±ÜÃâÔڸóõʼ»¯µ÷ÓÃÖÐÒòΪ malloc(9) ¶ø½øÈë˯Ãß¡£Mbuf
Í·²¿µÄ·ÖÅä²Ù×÷³£³£ÔÚ¶ÔÐÔÄÜÓÐÑϸñÒªÇóµÄ»·¾³Ï±»Æµ·±Ö´ÐУ¬
Òò´ËʵÏÖ´úÂë±ØÐëСÐĵرÜÃâ˯Ãߺͳ¤Ê±¼äµÄ²Ù×÷¡£ÉÏÊöÈë¿Úº¯ÊýÔÚ Mbuf
Í·²¿·ÖÅä²Ù×÷ʧ°Üʱ½«Ê§°Ü·µ»Ø¡£
mpo_init_mount_label
¡¡¡¡ÎªÒ»¸öнüʵÀý»¯µÄ mount µã³õʼ»¯±ê¼Ç¡£¿ÉÒÔ˯Ãß¡£
mpo_init_mount_fs_label
¡¡¡¡ÎªÒ»¸öнü¼ÓÔØµÄÎļþϵͳ³õʼ»¯±ê¼Ç¡£¿ÉÒÔ˯Ãß¡£
mpo_init_pipe_label
¡¡¡¡ÎªÒ»¸ö¸Õ¸ÕʵÀý»¯µÄ¹ÜµÀ³õʼ»¯°²È«±ê¼Ç¡£¿ÉÒÔ˯Ãß¡£
mpo_init_socket_label
²ÎÊý | ˵Ã÷ | Ëø¶¨ |
---|---|---|
label |
½«±»³õʼ»¯µÄбê¼Ç | |
flag |
malloc(9) flags |
¡¡¡¡ÎªÒ»¸ö¸Õ¸ÕʵÀý»¯µÄÌ×½Ó×Ö³õʼ»¯°²È«±ê¼Ç¡£ÆäÖÐµÄ flag
ÓòµÄÖµ±ØÐë±»Ö¸¶¨Îª M_WAITOK
ºÍM_NOWAIT
Ö®Ò»£¬ÒÔ±ÜÃâÔڸóõʼ»¯³ÌÖÐʹÓÿÉÄÜ˯ÃßµÄmalloc(9) ¡£
mpo_init_socket_peer_label
²ÎÊý | ˵Ã÷ | Ëø¶¨ |
---|---|---|
label |
½«±»³õʼ»¯µÄбê¼Ç | |
flag |
malloc(9) flags |
¡¡¡¡Îª¸Õ¸ÕʵÀý»¯µÄÌ×½Ó×Ö¶ÔµÈÌå½øÐбê¼ÇµÄ³õʼ»¯¡£ÆäÖÐµÄ flag
ÓòµÄÖµ±ØÐë±»Ö¸¶¨Îª M_WAITOK
ºÍ
M_NOWAIT
Ö®Ò»£¬ÒÔ±ÜÃâÔڸóõʼ»¯³ÌÖÐʹÓÿÉÄÜ˯ÃßµÄ malloc(9)¡£
mpo_init_proc_label
¡¡¡¡ÎªÒ»¸ö¸Õ¸ÕʵÀý»¯µÄ½ø³Ì³õʼ»¯°²È«±ê¼Ç¡£¿ÉÒÔ˯Ãß¡£
mpo_init_vnode_label
¡¡¡¡ÎªÒ»¸ö¸Õ¸ÕʵÀý»¯µÄ vnode ³õʼ»¯°²È«±ê¼Ç¡£¿ÉÒÔ˯Ãß¡£
mpo_destroy_bpfdesc_label
¡¡¡¡Ïú»ÙÒ»¸ö BPF ÃèÊö×ÓÉϵıê¼Ç¡£ÔÚ¸ÃÈë¿Úº¯ÊýÖУ¬²ßÂÔÓ¦µ±ÊÍ·ÅËùÓÐÔÚÄÚ²¿·ÖÅäÓë
label
Ïà¹ØÁªµÄ´æ´¢¿Õ¼ä£¬ÒÔ±ãÏú»Ù¸Ã±ê¼Ç¡£
mpo_destroy_cred_label
¡¡¡¡Ïú»ÙÒ»¸öÐÅÈÎ×´Éϵıê¼Ç¡£ÔÚ¸ÃÈë¿Úº¯ÊýÖУ¬²ßÂÔÓ¦µ±ÊÍ·ÅËùÓÐÔÚÄÚ²¿·ÖÅäµÄÓë
label
Ïà¹ØÁªµÄ´æ´¢¿Õ¼ä£¬ÒÔ±ãÏú»Ù¸Ã±ê¼Ç¡£
mpo_destroy_devfsdirent_label
¡¡¡¡Ïú»ÙÒ»¸ö devfs ±íÏîÉϵıê¼Ç¡£ÔÚ¸ÃÈë¿Úº¯ÊýÖУ¬²ßÂÔÓ¦µ±ÊÍ·ÅËùÓÐÔÚÄÚ²¿·ÖÅäµÄÓë
label
Ïà¹ØÁªµÄ´æ´¢¿Õ¼ä£¬ÒÔ±ãÏú»Ù¸Ã±ê¼Ç¡£
mpo_destroy_ifnet_label
¡¡¡¡Ïú»ÙÓëÒ»¸öÒÑɾ³ý½Ó¿ÚÏà¹ØÁªµÄ±ê¼Ç¡£ÔÚ¸ÃÈë¿Úº¯ÊýÖУ¬²ßÂÔÓ¦µ±ÊÍ·ÅËùÓÐÔÚÄÚ²¿·ÖÅäµÄÓë
label
Ïà¹ØÁªµÄ´æ´¢¿Õ¼ä£¬ÒÔ±ãÏú»Ù¸Ã±ê¼Ç¡£
mpo_destroy_ipq_label
¡¡¡¡Ïú»ÙÓëÒ»¸ö IP ·ÖƬ¶ÓÁÐÏà¹ØÁªµÄ±ê¼Ç¡£ÔÚ¸ÃÈë¿Úº¯ÊýÖУ¬²ßÂÔÓ¦µ±ÊÍ·ÅËùÓÐÔÚÄÚ²¿·ÖÅäµÄÓë
label
Ïà¹ØÁªµÄ´æ´¢¿Õ¼ä£¬ÒÔ±ãÏú»Ù¸Ã±ê¼Ç¡£
mpo_destroy_mbuf_label
¡¡¡¡Ïú»ÙÓëÒ»¸ö Mbuf Ïà¹ØÁªµÄ±ê¼Ç¡£ÔÚ¸ÃÈë¿Úº¯ÊýÖУ¬²ßÂÔÓ¦µ±ÊÍ·ÅËùÓÐÔÚÄÚ²¿·ÖÅäµÄÓë
label
Ïà¹ØÁªµÄ´æ´¢¿Õ¼ä£¬ÒÔ±ãÏú»Ù¸Ã±ê¼Ç¡£
mpo_destroy_mount_label
¡¡¡¡Ïú»ÙÓëÒ»¸ö mount µãÏà¹ØÁªµÄ±ê¼Ç¡£ÔÚ¸ÃÈë¿Úº¯ÊýÖУ¬²ßÂÔÓ¦µ±ÊÍ·ÅËùÓÐÔÚÄÚ²¿·ÖÅäµÄÓë
mntlabel
Ïà¹ØÁªµÄ´æ´¢¿Õ¼ä£¬ÒÔ±ãÏú»Ù¸Ã±ê¼Ç¡£
mpo_destroy_mount_label
¡¡¡¡Ïú»ÙÓëÒ»¸ö mount µãÏà¹ØÁªµÄ±ê¼Ç¡£ÔÚ¸ÃÈë¿Úº¯ÊýÖУ¬²ßÂÔÓ¦µ±ÊÍ·ÅËùÓÐÔÚÄÚ²¿·ÖÅäµÄ£¬Óë
mntlabel
ºÍfslabel
Ïà¹ØÁªµÄ´æ´¢¿Õ¼ä£¬ÒÔ±ãÏú»Ù¸Ã±ê¼Ç¡£
mpo_destroy_socket_label
¡¡¡¡Ïú»ÙÓëÒ»¸öÌ×½Ó×ÖÏà¹ØÁªµÄ±ê¼Ç¡£ÔÚ¸ÃÈë¿Úº¯ÊýÖУ¬²ßÂÔÓ¦µ±ÊÍ·ÅËùÓÐÔÚÄÚ²¿·ÖÅäµÄ£¬Óë
label
Ïà¹ØÁªµÄ´æ´¢¿Õ¼ä£¬ÒÔ±ãÏú»Ù¸Ã±ê¼Ç¡£
mpo_destroy_socket_peer_label
¡¡¡¡Ïú»ÙÓëÒ»¸öÌ×½Ó×ÖÏà¹ØÁªµÄ¶ÔµÈʵÌå±ê¼Ç¡£ÔÚ¸ÃÈë¿Úº¯ÊýÖУ¬²ßÂÔÓ¦µ±ÊÍ·ÅËùÓÐÔÚÄÚ²¿·ÖÅäµÄ£¬Óë
label
Ïà¹ØÁªµÄ´æ´¢¿Õ¼ä£¬ÒÔ±ãÏú»Ù¸Ã±ê¼Ç¡£
mpo_destroy_pipe_label
¡¡¡¡Ïú»ÙÒ»¸ö¹ÜµÀµÄ±ê¼Ç¡£ÔÚ¸ÃÈë¿Úº¯ÊýÖУ¬²ßÂÔÓ¦µ±ÊÍ·ÅËùÓÐÔÚÄÚ²¿·ÖÅäµÄ£¬Óë label
Ïà¹ØÁªµÄ´æ´¢¿Õ¼ä£¬ÒÔ±ãÏú»Ù¸Ã±ê¼Ç¡£
mpo_destroy_proc_label
¡¡¡¡Ïú»ÙÒ»¸ö½ø³ÌµÄ±ê¼Ç¡£ÔÚ¸ÃÈë¿Úº¯ÊýÖУ¬²ßÂÔÓ¦µ±ÊÍ·ÅËùÓÐÔÚÄÚ²¿·ÖÅäµÄ£¬Óë label
Ïà¹ØÁªµÄ´æ´¢¿Õ¼ä£¬ÒÔ±ãÏú»Ù¸Ã±ê¼Ç¡£
mpo_destroy_vnode_label
¡¡¡¡Ïú»ÙÒ»¸ö vnode µÄ±ê¼Ç¡£ÔÚ¸ÃÈë¿Úº¯ÊýÖУ¬²ßÂÔÓ¦µ±ÊÍ·ÅËùÓÐÔÚÄÚ²¿·ÖÅäµÄ£¬Óë
label
Ïà¹ØÁªµÄ´æ´¢¿Õ¼ä£¬ÒÔ±ãÏú»Ù¸Ã±ê¼Ç¡£
mpo_copy_mbuf_label
¡¡¡¡½« src
Öеıê¼ÇÐÅÏ¢¿½±´µ½ dest
ÖС£
mpo_copy_pipe_label
¡¡¡¡½« src
Öеıê¼ÇÐÅÏ¢¿½±´ÖÁ dest
¡£
mpo_copy_vnode_label
¡¡¡¡½« src
Öеıê¼ÇÐÅÏ¢¿½±´ÖÁ dest
¡£
mpo_externalize_cred_label
int mpo_externalize_cred_label
(struct label *label,
char *element_name, struct sbuf *sb, int *claimed);
²ÎÊý | ˵Ã÷ | Ëø¶¨ |
---|---|---|
label |
½«ÓÃÍⲿÐÎʽ±íʾµÄ±ê¼Ç | |
element_name |
ÐèÒªÍⲿ±íʾ±ê¼ÇµÄ²ßÂÔµÄÃû×Ö | |
sb |
ÓÃÀ´´æ·Å±ê¼ÇµÄÎı¾±íʾÐÎʽµÄ×Ö·ûbuffer | |
claimed |
Èç¹û¿ÉÒÔÌî³äelement_data Óò£¬ÔòÆäÊýÖµµÝÔö |
¡¡¡¡¸ù¾Ý´«ÈëµÄ±ê¼Ç½á¹¹£¬²úÉúÒ»¸öÒÔÍⲿÐÎʽ±íʾµÄ±ê¼Ç¡£ Ò»¸öÍⲿÐÎʽ±ê¼Ç£¬ÊDZê¼ÇÄÚÈݵÄÎı¾±íʾ£¬ËüÓÉÓû§¼¶µÄÓ¦ÓóÌÐòʹÓã¬ÊÇÓû§¿É¶ÁµÄ¡£ ĿǰµÄMACʵÏÖ·½°¸½«ÒÀ´Îµ÷ÓòßÂÔµÄÏàÓ¦Èë¿Úº¯Êý£¬Òò´Ë£¬ ¾ßÌå²ßÂÔµÄʵÏÖ´úÂ룬ÐèÒªÔÚÌîдsb֮ǰ£¬Ïȼì²éelement_nameÖÐÖ¸¶¨µÄÃû×Ö¡£ Èç¹ûelement_nameÖеÄÄÚÈÝÓëÄãµÄ²ßÂÔÃû×Ö²»Ïà·û£¬ÔòÖ±½Ó·µ»Ø0¡£ ½öµ±×ª»»±ê¼ÇÊý¾ÝµÄ¹ý³ÌÖгöÏÖ´íÎóʱ£¬²Å·µ»Ø·Ç0Öµ¡£ Ò»µ©²ßÂÔ¾ö¶¨Ìîдelement_data£¬µÝÔö*claimµÄÊýÖµ¡£
mpo_externalize_ifnet_label
int mpo_externalize_ifnet_label
(struct label
*label, char *element_name, struct sbuf *sb, int *claimed);
²ÎÊý | ˵Ã÷ | Ëø¶¨ |
---|---|---|
label |
½«ÓÃÍⲿÐÎʽ±íʾµÄ±ê¼Ç | |
element_name |
ÐèÒªÍⲿ±íʾ±ê¼ÇµÄ²ßÂÔµÄÃû×Ö | |
sb |
ÓÃÀ´´æ·Å±ê¼ÇµÄÎı¾±íʾÐÎʽµÄ×Ö·ûbuffer | |
claimed |
Èç¹û¿ÉÒÔÌî³äelement_data Óò£¬ÔòÆäÊýÖµµÝÔö |
¡¡¡¡¸ù¾Ý´«ÈëµÄ±ê¼Ç½á¹¹£¬²úÉúÒ»¸öÒÔÍⲿÐÎʽ±íʾµÄ±ê¼Ç¡£ Ò»¸öÍⲿÐÎʽ±ê¼Ç£¬ÊDZê¼ÇÄÚÈݵÄÎı¾±íʾ£¬ËüÓÉÓû§¼¶µÄÓ¦ÓóÌÐòʹÓã¬ÊÇÓû§¿É¶ÁµÄ¡£ ĿǰµÄMACʵÏÖ·½°¸½«ÒÀ´Îµ÷ÓòßÂÔµÄÏàÓ¦Èë¿Úº¯Êý£¬Òò´Ë£¬ ¾ßÌå²ßÂÔµÄʵÏÖ´úÂ룬ÐèÒªÔÚÌîдsb֮ǰ£¬Ïȼì²éelement_nameÖÐÖ¸¶¨µÄÃû×Ö¡£ Èç¹ûelement_nameÖеÄÄÚÈÝÓëÄãµÄ²ßÂÔÃû×Ö²»Ïà·û£¬ÔòÖ±½Ó·µ»Ø0¡£ ½öµ±×ª»»±ê¼ÇÊý¾ÝµÄ¹ý³ÌÖгöÏÖ´íÎóʱ£¬²Å·µ»Ø·Ç0Öµ¡£ Ò»µ©²ßÂÔ¾ö¶¨Ìîдelement_data£¬µÝÔö*claimµÄÊýÖµ¡£
mpo_externalize_pipe_label
int mpo_externalize_pipe_label
(struct label *label,
char *element_name, struct sbuf *sb, int *claimed);
²ÎÊý | ˵Ã÷ | Ëø¶¨ |
---|---|---|
label |
½«ÓÃÍⲿÐÎʽ±íʾµÄ±ê¼Ç | |
element_name |
ÐèÒªÍⲿ±íʾ±ê¼ÇµÄ²ßÂÔµÄÃû×Ö | |
sb |
ÓÃÀ´´æ·Å±ê¼ÇµÄÎı¾±íʾÐÎʽµÄ×Ö·ûbuffer | |
claimed |
Èç¹û¿ÉÒÔÌî³äelement_data Óò£¬ÔòÆäÊýÖµµÝÔö |
¡¡¡¡¸ù¾Ý´«ÈëµÄ±ê¼Ç½á¹¹£¬²úÉúÒ»¸öÒÔÍⲿÐÎʽ±íʾµÄ±ê¼Ç¡£ Ò»¸öÍⲿÐÎʽ±ê¼Ç£¬ÊDZê¼ÇÄÚÈݵÄÎı¾±íʾ£¬ËüÓÉÓû§¼¶µÄÓ¦ÓóÌÐòʹÓã¬ÊÇÓû§¿É¶ÁµÄ¡£ ĿǰµÄMACʵÏÖ·½°¸½«ÒÀ´Îµ÷ÓòßÂÔµÄÏàÓ¦Èë¿Úº¯Êý£¬Òò´Ë£¬ ¾ßÌå²ßÂÔµÄʵÏÖ´úÂ룬ÐèÒªÔÚÌîдsb֮ǰ£¬Ïȼì²éelement_nameÖÐÖ¸¶¨µÄÃû×Ö¡£ Èç¹ûelement_nameÖеÄÄÚÈÝÓëÄãµÄ²ßÂÔÃû×Ö²»Ïà·û£¬ÔòÖ±½Ó·µ»Ø0¡£ ½öµ±×ª»»±ê¼ÇÊý¾ÝµÄ¹ý³ÌÖгöÏÖ´íÎóʱ£¬²Å·µ»Ø·Ç0Öµ¡£ Ò»µ©²ßÂÔ¾ö¶¨Ìîдelement_data£¬µÝÔö*claimµÄÊýÖµ¡£
mpo_externalize_socket_label
int mpo_externalize_socket_label
(struct label
*label, char *element_name, struct sbuf *sb, int *claimed);
²ÎÊý | ˵Ã÷ | Ëø¶¨ |
---|---|---|
label |
½«ÓÃÍⲿÐÎʽ±íʾµÄ±ê¼Ç | |
element_name |
ÐèÒªÍⲿ±íʾ±ê¼ÇµÄ²ßÂÔµÄÃû×Ö | |
sb |
ÓÃÀ´´æ·Å±ê¼ÇµÄÎı¾±íʾÐÎʽµÄ×Ö·ûbuffer | |
claimed |
Èç¹û¿ÉÒÔÌî³äelement_data Óò£¬ÔòÆäÊýÖµµÝÔö |
¡¡¡¡¸ù¾Ý´«ÈëµÄ±ê¼Ç½á¹¹£¬²úÉúÒ»¸öÒÔÍⲿÐÎʽ±íʾµÄ±ê¼Ç¡£ Ò»¸öÍⲿÐÎʽ±ê¼Ç£¬ÊDZê¼ÇÄÚÈݵÄÎı¾±íʾ£¬ËüÓÉÓû§¼¶µÄÓ¦ÓóÌÐòʹÓã¬ÊÇÓû§¿É¶ÁµÄ¡£ ĿǰµÄMACʵÏÖ·½°¸½«ÒÀ´Îµ÷ÓòßÂÔµÄÏàÓ¦Èë¿Úº¯Êý£¬Òò´Ë£¬ ¾ßÌå²ßÂÔµÄʵÏÖ´úÂ룬ÐèÒªÔÚÌîдsb֮ǰ£¬Ïȼì²éelement_nameÖÐÖ¸¶¨µÄÃû×Ö¡£ Èç¹ûelement_nameÖеÄÄÚÈÝÓëÄãµÄ²ßÂÔÃû×Ö²»Ïà·û£¬ÔòÖ±½Ó·µ»Ø0¡£ ½öµ±×ª»»±ê¼ÇÊý¾ÝµÄ¹ý³ÌÖгöÏÖ´íÎóʱ£¬²Å·µ»Ø·Ç0Öµ¡£ Ò»µ©²ßÂÔ¾ö¶¨Ìîдelement_data£¬µÝÔö*claimµÄÊýÖµ¡£
mpo_externalize_socket_peer_label
int mpo_externalize_socket_peer_label
(struct label
*label, char *element_name, struct sbuf *sb, int *claimed);
²ÎÊý | ˵Ã÷ | Ëø¶¨ |
---|---|---|
label |
½«ÓÃÍⲿÐÎʽ±íʾµÄ±ê¼Ç | |
element_name |
ÐèÒªÍⲿ±íʾ±ê¼ÇµÄ²ßÂÔµÄÃû×Ö | |
sb |
ÓÃÀ´´æ·Å±ê¼ÇµÄÎı¾±íʾÐÎʽµÄ×Ö·ûbuffer | |
claimed |
Èç¹û¿ÉÒÔÌî³äelement_data Óò£¬ÔòÆäÊýÖµµÝÔö |
¡¡¡¡¸ù¾Ý´«ÈëµÄ±ê¼Ç½á¹¹£¬²úÉúÒ»¸öÒÔÍⲿÐÎʽ±íʾµÄ±ê¼Ç¡£ Ò»¸öÍⲿÐÎʽ±ê¼Ç£¬ÊDZê¼ÇÄÚÈݵÄÎı¾±íʾ£¬ËüÓÉÓû§¼¶µÄÓ¦ÓóÌÐòʹÓã¬ÊÇÓû§¿É¶ÁµÄ¡£ ĿǰµÄMACʵÏÖ·½°¸½«ÒÀ´Îµ÷ÓòßÂÔµÄÏàÓ¦Èë¿Úº¯Êý£¬Òò´Ë£¬ ¾ßÌå²ßÂÔµÄʵÏÖ´úÂ룬ÐèÒªÔÚÌîдsb֮ǰ£¬Ïȼì²éelement_nameÖÐÖ¸¶¨µÄÃû×Ö¡£ Èç¹ûelement_nameÖеÄÄÚÈÝÓëÄãµÄ²ßÂÔÃû×Ö²»Ïà·û£¬ÔòÖ±½Ó·µ»Ø0¡£ ½öµ±×ª»»±ê¼ÇÊý¾ÝµÄ¹ý³ÌÖгöÏÖ´íÎóʱ£¬²Å·µ»Ø·Ç0Öµ¡£ Ò»µ©²ßÂÔ¾ö¶¨Ìîдelement_data£¬µÝÔö*claimµÄÊýÖµ¡£
mpo_externalize_vnode_label
int mpo_externalize_vnode_label
(struct label
*label, char *element_name, struct sbuf *sb, int *claimed);
²ÎÊý | ˵Ã÷ | Ëø¶¨ |
---|---|---|
label |
½«ÓÃÍⲿÐÎʽ±íʾµÄ±ê¼Ç | |
element_name |
ÐèÒªÍⲿ±íʾ±ê¼ÇµÄ²ßÂÔµÄÃû×Ö | |
sb |
ÓÃÀ´´æ·Å±ê¼ÇµÄÎı¾±íʾÐÎʽµÄ×Ö·ûbuffer | |
claimed |
Èç¹û¿ÉÒÔÌî³äelement_data Óò£¬ÔòÆäÊýÖµµÝÔö |
¡¡¡¡¸ù¾Ý´«ÈëµÄ±ê¼Ç½á¹¹£¬²úÉúÒ»¸öÒÔÍⲿÐÎʽ±íʾµÄ±ê¼Ç¡£ Ò»¸öÍⲿÐÎʽ±ê¼Ç£¬ÊDZê¼ÇÄÚÈݵÄÎı¾±íʾ£¬ËüÓÉÓû§¼¶µÄÓ¦ÓóÌÐòʹÓã¬ÊÇÓû§¿É¶ÁµÄ¡£ ĿǰµÄMACʵÏÖ·½°¸½«ÒÀ´Îµ÷ÓòßÂÔµÄÏàÓ¦Èë¿Úº¯Êý£¬Òò´Ë£¬ ¾ßÌå²ßÂÔµÄʵÏÖ´úÂ룬ÐèÒªÔÚÌîдsb֮ǰ£¬Ïȼì²éelement_nameÖÐÖ¸¶¨µÄÃû×Ö¡£ Èç¹ûelement_nameÖеÄÄÚÈÝÓëÄãµÄ²ßÂÔÃû×Ö²»Ïà·û£¬ÔòÖ±½Ó·µ»Ø0¡£ ½öµ±×ª»»±ê¼ÇÊý¾ÝµÄ¹ý³ÌÖгöÏÖ´íÎóʱ£¬²Å·µ»Ø·Ç0Öµ¡£ Ò»µ©²ßÂÔ¾ö¶¨Ìîдelement_data£¬µÝÔö*claimµÄÊýÖµ¡£
mpo_internalize_cred_label
int mpo_internalize_cred_label
(struct label *label,
char *element_name, char *element_data, int *claimed);
²ÎÊý | ˵Ã÷ | Ëø¶¨ |
---|---|---|
label |
½«±»Ìî³äµÄ±ê¼Ç | |
element_name |
ÐèÒªÄÚ²¿±íʾ±ê¼ÇµÄ²ßÂÔµÄÃû×Ö | |
element_data |
ÐèÒª±»×ª»»µÄÎı¾Êý¾Ý | |
claimed |
Èç¹ûÊý¾Ý±»Õýȷת»»£¬ÔòÆäÊýÖµµÝÔö |
¡¡¡¡¸ù¾ÝÒ»¸öÎı¾ÐÎʽµÄÍⲿ±íʾ±ê¼ÇÊý¾Ý£¬´´½¨Ò»¸öÄÚ²¿ÐÎʽµÄ±ê¼Ç½á¹¹¡£ ĿǰµÄMAC·½°¸½«ÒÀ´Îµ÷ÓÃËùÓвßÂÔµÄÏà¹ØÈë¿Úº¯Êý£¬À´ÏìÓ¦±ê¼ÇµÄÄÚ²¿×ª»»ÇëÇó£¬ Òò´Ë£¬ÊµÏÖ´úÂë±ØÐëÊ×ÏÈͨ¹ý±È½Ïelement_nameÖеÄÄÚÈݺÍ×Ô¼ºµÄ²ßÂÔÃû×Ö£¬ À´È·¶¨ÊÇ·ñÐèҪת»»element_dataÖдæ·ÅµÄÊý¾Ý¡£ ÀàËÆµÄ£¬Èç¹ûÃû×Ö²»Æ¥Åä»òÕßÊý¾Ýת»»²Ù×÷³É¹¦£¬¸Ãº¯Êý·µ»Ø0£¬²¢µÝÔö*claimedµÄÖµ¡£
mpo_internalize_ifnet_label
int mpo_internalize_ifnet_label
(struct label
*label, char *element_name, char *element_data, int *claimed);
²ÎÊý | ˵Ã÷ | Ëø¶¨ |
---|---|---|
label |
½«±»Ìî³äµÄ±ê¼Ç | |
element_name |
ÐèÒªÄÚ²¿±íʾ±ê¼ÇµÄ²ßÂÔµÄÃû×Ö | |
element_data |
ÐèÒª±»×ª»»µÄÎı¾Êý¾Ý | |
claimed |
Èç¹ûÊý¾Ý±»Õýȷת»»£¬ÔòÆäÊýÖµµÝÔö |
¡¡¡¡¸ù¾ÝÒ»¸öÎı¾ÐÎʽµÄÍⲿ±íʾ±ê¼ÇÊý¾Ý£¬´´½¨Ò»¸öÄÚ²¿ÐÎʽµÄ±ê¼Ç½á¹¹¡£ ĿǰµÄMAC·½°¸½«ÒÀ´Îµ÷ÓÃËùÓвßÂÔµÄÏà¹ØÈë¿Úº¯Êý£¬À´ÏìÓ¦±ê¼ÇµÄÄÚ²¿×ª»»ÇëÇó£¬ Òò´Ë£¬ÊµÏÖ´úÂë±ØÐëÊ×ÏÈͨ¹ý±È½Ïelement_nameÖеÄÄÚÈݺÍ×Ô¼ºµÄ²ßÂÔÃû×Ö£¬ À´È·¶¨ÊÇ·ñÐèҪת»»element_dataÖдæ·ÅµÄÊý¾Ý¡£ ÀàËÆµÄ£¬Èç¹ûÃû×Ö²»Æ¥Åä»òÕßÊý¾Ýת»»²Ù×÷³É¹¦£¬¸Ãº¯Êý·µ»Ø0£¬²¢µÝÔö*claimedµÄÖµ¡£
mpo_internalize_pipe_label
int mpo_internalize_pipe_label
(struct label *label,
char *element_name, char *element_data, int *claimed);
²ÎÊý | ˵Ã÷ | Ëø¶¨ |
---|---|---|
label |
½«±»Ìî³äµÄ±ê¼Ç | |
element_name |
ÐèÒªÄÚ²¿±íʾ±ê¼ÇµÄ²ßÂÔµÄÃû×Ö | |
element_data |
ÐèÒª±»×ª»»µÄÎı¾Êý¾Ý | |
claimed |
Èç¹ûÊý¾Ý±»Õýȷת»»£¬ÔòÆäÊýÖµµÝÔö |
¡¡¡¡¸ù¾ÝÒ»¸öÎı¾ÐÎʽµÄÍⲿ±íʾ±ê¼ÇÊý¾Ý£¬´´½¨Ò»¸öÄÚ²¿ÐÎʽµÄ±ê¼Ç½á¹¹¡£ ĿǰµÄMAC·½°¸½«ÒÀ´Îµ÷ÓÃËùÓвßÂÔµÄÏà¹ØÈë¿Úº¯Êý£¬À´ÏìÓ¦±ê¼ÇµÄÄÚ²¿×ª»»ÇëÇó£¬ Òò´Ë£¬ÊµÏÖ´úÂë±ØÐëÊ×ÏÈͨ¹ý±È½Ïelement_nameÖеÄÄÚÈݺÍ×Ô¼ºµÄ²ßÂÔÃû×Ö£¬ À´È·¶¨ÊÇ·ñÐèҪת»»element_dataÖдæ·ÅµÄÊý¾Ý¡£ ÀàËÆµÄ£¬Èç¹ûÃû×Ö²»Æ¥Åä»òÕßÊý¾Ýת»»²Ù×÷³É¹¦£¬¸Ãº¯Êý·µ»Ø0£¬²¢µÝÔö*claimedµÄÖµ¡£
mpo_internalize_socket_label
int mpo_internalize_socket_label
(struct label
*label, char *element_name, char *element_data, int *claimed);
²ÎÊý | ˵Ã÷ | Ëø¶¨ |
---|---|---|
label |
½«±»Ìî³äµÄ±ê¼Ç | |
element_name |
ÐèÒªÄÚ²¿±íʾ±ê¼ÇµÄ²ßÂÔµÄÃû×Ö | |
element_data |
ÐèÒª±»×ª»»µÄÎı¾Êý¾Ý | |
claimed |
Èç¹ûÊý¾Ý±»Õýȷת»»£¬ÔòÆäÊýÖµµÝÔö |
¡¡¡¡¸ù¾ÝÒ»¸öÎı¾ÐÎʽµÄÍⲿ±íʾ±ê¼ÇÊý¾Ý£¬´´½¨Ò»¸öÄÚ²¿ÐÎʽµÄ±ê¼Ç½á¹¹¡£ ĿǰµÄMAC·½°¸½«ÒÀ´Îµ÷ÓÃËùÓвßÂÔµÄÏà¹ØÈë¿Úº¯Êý£¬À´ÏìÓ¦±ê¼ÇµÄÄÚ²¿×ª»»ÇëÇó£¬ Òò´Ë£¬ÊµÏÖ´úÂë±ØÐëÊ×ÏÈͨ¹ý±È½Ïelement_nameÖеÄÄÚÈݺÍ×Ô¼ºµÄ²ßÂÔÃû×Ö£¬ À´È·¶¨ÊÇ·ñÐèҪת»»element_dataÖдæ·ÅµÄÊý¾Ý¡£ ÀàËÆµÄ£¬Èç¹ûÃû×Ö²»Æ¥Åä»òÕßÊý¾Ýת»»²Ù×÷³É¹¦£¬¸Ãº¯Êý·µ»Ø0£¬²¢µÝÔö*claimedµÄÖµ¡£
mpo_internalize_vnode_label
int mpo_internalize_vnode_label
(struct label
*label, char *element_name, char *element_data, int *claimed);
²ÎÊý | ˵Ã÷ | Ëø¶¨ |
---|---|---|
label |
½«±»Ìî³äµÄ±ê¼Ç | |
element_name |
ÐèÒªÄÚ²¿±íʾ±ê¼ÇµÄ²ßÂÔµÄÃû×Ö | |
element_data |
ÐèÒª±»×ª»»µÄÎı¾Êý¾Ý | |
claimed |
Èç¹ûÊý¾Ý±»Õýȷת»»£¬ÔòÆäÊýÖµµÝÔö |
¡¡¡¡¸ù¾ÝÒ»¸öÎı¾ÐÎʽµÄÍⲿ±íʾ±ê¼ÇÊý¾Ý£¬´´½¨Ò»¸öÄÚ²¿ÐÎʽµÄ±ê¼Ç½á¹¹¡£ ĿǰµÄMAC·½°¸½«ÒÀ´Îµ÷ÓÃËùÓвßÂÔµÄÏà¹ØÈë¿Úº¯Êý£¬À´ÏìÓ¦±ê¼ÇµÄÄÚ²¿×ª»»ÇëÇó£¬ Òò´Ë£¬ÊµÏÖ´úÂë±ØÐëÊ×ÏÈͨ¹ý±È½Ïelement_nameÖеÄÄÚÈݺÍ×Ô¼ºµÄ²ßÂÔÃû×Ö£¬ À´È·¶¨ÊÇ·ñÐèҪת»»element_dataÖдæ·ÅµÄÊý¾Ý¡£ ÀàËÆµÄ£¬Èç¹ûÃû×Ö²»Æ¥Åä»òÕßÊý¾Ýת»»²Ù×÷³É¹¦£¬¸Ãº¯Êý·µ»Ø0£¬²¢µÝÔö*claimedµÄÖµ¡£
¡¡¡¡²ßÂÔÄ£¿éʹÓÃMAC ¿ò¼ÜÌṩµÄ¡°±ê¼Çʼþ¡±ÀàÈë¿Úº¯Êý£¬¶ÔÄں˶ÔÏóµÄ±ê¼Ç½øÐвÙ×÷¡£²ßÂÔÄ£¿é½«¸ÐÐËȤµÄ±»±ê¼ÇÄں˶ÔÏóµÄÏà¹ØÉúÃüÖÜÆÚʼþ ×¢²áÔÚÇ¡µ±µÄÈë¿ÚµãÉÏ¡£¶ÔÏóµÄ³õʼ»¯¡¢´´½¨ºÍÏú»Ùʼþ¾ùÌṩÁ˹³×ӵ㡣ÔÚijЩ¶ÔÏóÉÏ»¹¿ÉÒÔʵÏÖÖØÐ±ê¼Ç£¬¼´£¬ÔÊÐíÓû§½ø³Ì¸Ä±ä¶ÔÏóÉϵıê¼ÇÖµ¡£ ¶ÔijЩ¶ÔÏó¿ÉÒÔʵÏÖÆäÌØ¶¨µÄ¶ÔÏóʼþ£¬±ÈÈçÓë IP ÖØ×éÏà¹ØµÄ±ê¼Çʼþ¡£Ò»¸öµäÐ͵ı»±ê¼Ç¶ÔÏóÔÚÆäÉúÃüÖÜÆÚÖн«ÓµÓÐÏÂÁÐÈë¿Úº¯Êý£º
±ê¼Ç³õʼ»¯ o £¨¶ÔÏóÏà¹ØµÄµÈ´ý£© \ ±ê¼Ç´´½¨ o \ ÖØÐ±ê¼Çʼþ£¬ o--<--. ¸÷ÖÖ¶ÔÏóÏà¹ØµÄ£¬ | | ·ÃÎÊ¿ØÖÆÊ¼þ ~-->--o \ ±ê¼ÇÏú»Ù o
¡¡¡¡Ê¹Óñê¼Ç³õʼ»¯Èë¿Úº¯Êý£¬²ßÂÔ¿ÉÒÔÒÔÒ»ÖÖͳһµÄ¡¢Óë¶ÔÏóʹÓû·¾³Î޹صķ½Ê½ÉèÖñê¼ÇµÄ³õʼֵ¡£ ·ÖÅä¸øÒ»¸ö²ßÂÔµÄȱʡ slot ֵΪ0£¬ÕâÑù²»Ê¹Óñê¼ÇµÄ²ßÂÔ¿ÉÄܲ¢²»ÐèÒªÖ´ÐÐרÃŵijõʼ»¯²Ù×÷¡£
¡¡¡¡±ê¼ÇµÄ´´½¨Ê¼þ·¢ÉúÔÚ½«Ò»¸öÄÚºËÊý¾Ý½á¹¹Í¬Ò»¸öÕæÊµµÄÄں˶ÔÏóÏà¹ØÁª£¨Äں˶ÔÏóʵÀý»¯£©µÄʱ¿Ì¡£ ÀýÈ磬ÔÚÕæÕý±»Ê¹ÓÃ֮ǰ£¬ÔÚÒ»¸ö»º³å³ØÄÚÒÑ·ÖÅäµÄ mbuf Êý¾Ý½á¹¹£¬½«±£³ÖΪ¡°Î´Ê¹Óá±×´Ì¬¡£ Òò´Ë£¬mbuf µÄ·ÖÅä²Ù×÷½«µ¼ÖÂÕë¶Ô¸Ã mbuf µÄ±ê¼Ç³õʼ»¯²Ù×÷£¬¶ø mbuf µÄ´´½¨²Ù×÷Ôò±»ÍƳٵ½¸Ã mbuf ÕæÕýÓëÒ»¸öÊý¾Ý±¨Ïà¹ØÁªµÄʱ¿Ì¡£ ͨ³££¬µ÷ÓÃÕß½«»áÌṩ´´½¨Ê¼þµÄÉÏÏÂÎÄ£¬°üÀ¨´´½¨»·¾³¡¢´´½¨¹ý³ÌÖÐÉæ¼°µÄÆäËû¶ÔÏóµÄ±ê¼ÇµÈ¡£ÀýÈ磬µ±Ò»¸öÌ×½Ó×Ö´´½¨Ò»¸ö mbuf ʱ£¬ ³ýÁËд´½¨µÄ mbuf ¼°Æä±ê¼ÇÖ®Í⣬×÷Ϊ´´½¨ÕßµÄÌ×½Ó×ÖÓëÆä±ê¼ÇÒ²±»Ìá½»¸ø²ßÂÔ¼ì²é¡£ ²»ÌᳫÔÚ´´½¨¶ÔÏóʱ¾ÍΪÆä·ÖÅäÄÚ´æµÄÔÒòÓÐÁ½¸ö£º´´½¨²Ù×÷¿ÉÄÜ·¢ÉúÔÚ¶ÔÐÔÄÜÓÐÑϸñÒªÇóµÄÄں˽ӿÚÉÏ£» ¶øÇÒ£¬ÒòΪ´´½¨µ÷Óò»ÔÊÐíʧ°Ü£¬ËùÒÔÎÞ·¨±¨¸æÄÚ´æ·ÖÅäʧ°Ü¡£
¡¡¡¡¶ÔÏóÌØÓеÄʼþÒ»°ã²»»áÒý·¢ÆäËûµÄ±ê¼Çʼþ£¬µ«ÊÇÔÚ¶ÔÏóÉÏÏÂÎÄ·¢Éú¸Ä±äʱ£¬²ßÂÔʹÓÃËüÃÇ¿ÉÒÔ¶ÔÏà¹Ø±ê¼Ç½øÐÐÐ޸Ļò¸üвÙ×÷¡£
ÀýÈ磬ÔÚMAC_UPDATE_IPQ
Èë¿Úº¯ÊýÖ®ÄÚ£¬Ä³¸ö IP
·ÖÆ¬ÖØ×é¶ÓÁеıê¼Ç¿ÉÄÜ»áÒòΪ¶ÓÁÐÖнÓÊÕÁËÐ嵀 mbuf ¶ø±»¸üС£
¡¡¡¡·ÃÎÊ¿ØÖÆÊ¼þ½«ÔÚºóÐøÕ½ÚÖÐÏêϸÌÖÂÛ¡£
¡¡¡¡²ßÂÔͨ¹ýÖ´Ðбê¼ÇÏú»Ù²Ù×÷£¬ÊÍ·ÅΪÆä·ÖÅäµÄ´æ´¢¿Õ¼ä»òά»¤µÄ״̬£¬Ö®ºóÄں˲ſÉÒÔÖØÓûòÕßÊͷŶÔÏóµÄÄÚºËÊý¾Ý½á¹¹¡£
¡¡¡¡³ýÁËÓëÌØ¶¨Äں˶ÔÏó°ó¶¨µÄÆÕͨ±ê¼ÇÖ®Í⣬»¹ÓÐÒ»ÖÖ¶îÍâµÄ±ê¼ÇÀàÐÍ£ºÁÙʱ±ê¼Ç¡£ÕâЩ±ê¼ÇÓÃÓÚ´æ·ÅÓÉÓû§½ø³ÌÌá½»µÄ¸üÐÂÐÅÏ¢¡£
ËüÃǵijõʼ»¯ºÍÏú»Ù²Ù×÷ÓëÆäËû±ê¼ÇÒ»Ñù£¬Ö»ÊÇ´´½¨Ê¼þ£¬MAC_INTERNALIZE
£¬ÂÔÓв»Í¬£º
¸Ãº¯Êý½ÓÊÜÓû§Ìá½»µÄ±ê¼Ç£¬¸ºÔð½«Æäת»¯ÎªÄں˱íʾÐÎʽ¡£
mpo_associate_vnode_devfs
void mpo_associate_vnode_devfs
(struct mount *mp,
struct label *fslabel, struct devfs_dirent *de, struct label *delabel, struct vnode *vp,
struct label *vlabel);
²ÎÊý | ˵Ã÷ | Ëø¶¨ |
---|---|---|
mp |
Devfs ¹ÒÔØµã | |
fslabel |
Devfs Îļþϵͳ±ê¼Ç (mp->mnt_fslabel ) |
|
de |
Devfs Ŀ¼Ïî | |
delabel |
Óë de Ïà¹ØÁªµÄ²ßÂÔ±ê¼Ç |
|
vp |
Óë de Ïà¹ØÁªµÄ vnode |
|
vlabel |
Óë vp Ïà¹ØÁªµÄ²ßÂÔ±ê¼Ç |
¡¡¡¡¸ù¾Ý²ÎÊý de
´«ÈëµÄ devfs
Ŀ¼Ïî¼°Æä±ê¼ÇÐÅÏ¢£¬ÎªÒ»¸öнü´´½¨µÄ devfs vnode Ìî³ä±ê¼Ç£¨vlabel
£©¡£
mpo_associate_vnode_extattr
int mpo_associate_vnode_extattr
(struct mount *mp,
struct label *fslabel, struct vnode *vp, struct label *vlabel);
²ÎÊý | ˵Ã÷ | Ëø¶¨ |
---|---|---|
mp |
Îļþϵͳ¹ÒÔØµã | |
fslabel |
Îļþϵͳ±ê¼Ç | |
vp |
½«±»±ê¼ÇµÄ vnode | |
vlabel |
Óë vp Ïà¹ØÁªµÄ²ßÂÔ±ê¼Ç |
¡¡¡¡´ÓÎļþϵͳÀ©Õ¹ÊôÐÔÖжÁÈ¡ vp
µÄ±ê¼Ç¡£³É¹¦£¬·µ»Ø
0¡£ ²»³É¹¦£¬ÔòÔÚ errno
Ö¸¶¨µÄÏàÓ¦µÄ´íÎó±àÂë¡£ Èç¹ûÎļþϵͳ²»Ö§³ÖÀ©Õ¹ÊôÐԵĶÁÈ¡²Ù×÷£¬Ôò¿ÉÒÔ¿¼Âǽ« fslabel
¿½±´ÖÁ vlabel
¡£
mpo_associate_vnode_singlelabel
void mpo_associate_vnode_singlelabel
(struct mount
*mp, struct label *fslabel, struct vnode *vp, struct label *vlabel);
²ÎÊý | ˵Ã÷ | Ëø¶¨ |
---|---|---|
mp |
Îļþϵͳ¹ÒÔØµã | |
fslabel |
Îļþϵͳ±ê¼Ç | |
vp |
½«±»±ê¼ÇµÄ vnode | |
vlabel |
Óë vp Ïà¹ØÁªµÄ²ßÂÔ±ê¼Ç |
¡¡¡¡ÔڷǶàÖØ±ê¼ÇÎļþϵͳÉÏ£¬Ê¹ÓøÃÈë¿Úº¯Êý£¬¸ù¾ÝÎļþϵͳ±ê¼Ç£¬fslabel
£¬ Ϊ vp
ÉèÖòßÂÔ±ê¼Ç¡£
mpo_create_devfs_device
²ÎÊý | ˵Ã÷ | Ëø¶¨ |
---|---|---|
dev |
devfs_dirent ¶ÔÓ¦µÄÉ豸 |
|
devfs_dirent |
½«±»±ê¼ÇµÄ Devfs Ŀ¼Ïî | |
label |
½«±»ÌîдµÄ devfs_dirent ±ê¼Ç |
¡¡¡¡Îª´«ÈëÉ豸н¨µÄ devfs_dirent Ìîд±ê¼Ç¡£¸Ãº¯Êý½«ÔÚÉ豸Îļþϵͳ¼ÓÔØ¡¢Öع¹»òÌí¼ÓÐÂÉ豸ʱ±»µ÷Óá£
mpo_create_devfs_directory
void mpo_create_devfs_directory
(char *dirname, int
dirnamelen, struct devfs_dirent *devfs_dirent, struct label *label);
²ÎÊý | ˵Ã÷ | Ëø¶¨ |
---|---|---|
dirname |
н¨Ä¿Â¼µÄÃû×Ö | |
namelen |
×Ö·û´® dirname µÄ³¤¶È |
|
devfs_dirent |
н¨Ä¿Â¼ÔÚ Devfs ÖжÔÓ¦µÄĿ¼Ïî |
¡¡¡¡Îª´«ÈëĿ¼²ÎÊýµÄн¨ devfs_dirent Ìîд±ê¼Ç¡£¸Ãº¯Êý½«ÔÚ¼ÓÔØ¡¢Öع¹É豸Îļþϵͳ£¬»òÕßÌí¼ÓÒ»¸öÐèÒªÖ¸¶¨Ä¿Â¼½á¹¹µÄÐÂÉ豸ʱ±»µ÷Óá£
mpo_create_devfs_symlink
void mpo_create_devfs_symlink
(struct ucred *cred,
struct mount *mp, struct devfs_dirent *dd, struct label *ddlabel, struct devfs_dirent
*de, struct label *delabel);
²ÎÊý | ˵Ã÷ | Ëø¶¨ |
---|---|---|
cred |
Ö÷ÌåÐÅÈÎ×´ | |
mp |
devfs ¹ÒÔØµã | |
dd |
Á´½ÓÄ¿±ê | |
ddlabel |
Óë dd Ïà¹ØÁªµÄ±ê¼Ç |
|
de |
·ûºÅÁ´½ÓÏî | |
delabel |
Óë de Ïà¹ØÁªµÄ²ßÂÔ±ê¼Ç |
¡¡¡¡ÎªÐ½ü´´½¨µÄ
devfs(5)
·ûºÅÁ´½ÓÏîÌîд±ê¼Ç£¨delabel
£©¡£
mpo_create_vnode_extattr
int mpo_create_vnode_extattr
(struct ucred *cred,
struct mount *mp, struct label *fslabel, struct vnode *dvp, struct label *dlabel, struct
vnode *vp, struct label *vlabel, struct componentname *cnp);
²ÎÊý | ˵Ã÷ | Ëø¶¨ |
---|---|---|
cred |
Ö÷ÌåÐÅÈÎ×´ | |
mount |
Îļþϵͳ¹ÒÔØµã | |
label |
Îļþϵͳ±ê¼Ç | |
dvp |
¸¸Ä¿Â¼ vnode | |
dlabel |
Óë dvp Ïà¹ØÁªµÄ²ßÂÔ±ê¼Ç |
|
vp |
д´½¨µÄ vnode | |
vlabel |
Óë vp Ïà¹ØÁªµÄ²ßÂÔ±ê¼Ç |
|
cnp |
vp ÖеÄ×ÓÓòÃû×Ö |
¡¡¡¡½« vp
µÄ±ê¼ÇдÈëÎļþÀ©Õ¹ÊôÐÔ¡£³É¹¦£¬½«±ê¼ÇÌîÈë
vlabel
£¬ ²¢·µ»Ø 0¡£·ñÔò£¬·µ»Ø¶ÔÓ¦µÄ´íÎó±àÂë¡£
mpo_create_mount
void mpo_create_mount
(struct ucred *cred, struct
mount *mp, struct label *mnt, struct label *fslabel);
²ÎÊý | ˵Ã÷ | Ëø¶¨ |
---|---|---|
cred |
Ö÷ÌåÐÅÈÎ×´ | |
mp |
¿ÍÌ壻½«±»¹ÒÔØµÄÎļþϵͳ | |
mntlabel |
½«±»ÌîдµÄ mp µÄ²ßÂÔ±ê¼Ç |
|
fslabel |
½«±»¹ÒÔØµ½ mp µÄÎļþϵͳµÄ²ßÂÔ±ê¼Ç¡£ |
¡¡¡¡Îª´«ÈëµÄÖ÷ÌåÐÅÈÎ×´Ëù´´½¨µÄ¹ÒÔØµãÌîд±ê¼Ç¡£¸Ãº¯Êý½«ÔÚÎļþϵͳ¹ÒÔØÊ±±»µ÷Óá£
mpo_create_root_mount
void mpo_create_root_mount
(struct ucred *cred,
struct mount *mp, struct label *mntlabel, struct label *fslabel);
²ÎÊý | ˵Ã÷ | Ëø¶¨ |
---|---|---|
¼û µÚ 6.7.3.1.8 ½Ú. |
¡¡¡¡Îª´«ÈëµÄÖ÷ÌåÐÅÈÎ×´Ëù´´½¨µÄ¹ÒÔØµãÌîд±ê¼Ç¡£¸Ãº¯Êý½«ÔÚ¹ÒÔØ¸ùÎļþϵͳʱ£¬mpo_create_mount; Ö®ºó±»µ÷Óá£
mpo_relabel_vnode
void mpo_relabel_vnode
(struct ucred *cred, struct
vnode *vp, struct label *vnodelabel, struct label *newlabel);
²ÎÊý | ˵Ã÷ | Ëø¶¨ |
---|---|---|
cred |
Ö÷ÌåÐÅÈÎ×´ | |
vp |
½«±»ÖØÐ±ê¼ÇµÄ vnode | |
vnodelabel |
vp ÏÖÓеIJßÂÔ±ê¼Ç |
|
newlabel |
½«È¡´úvnodelabel µÄУ¨¿ÉÄÜÖ»ÊDz¿·Ö£©±ê¼Ç |
¡¡¡¡¸ù¾Ý´«ÈëµÄбê¼ÇºÍÖ÷ÌåÐÅÈÎ×´£¬¸üвÎÊý vnode µÄ±ê¼Ç¡£
mpo_setlabel_vnode_extattr
int mpo_setlabel_vnode_extattr
(struct ucred *cred,
struct vnode *vp, struct label *vlabel, struct label *intlabel);
²ÎÊý | ˵Ã÷ | Ëø¶¨ |
---|---|---|
cred |
Ö÷ÌåÐÅÈÎ×´ | |
vp |
д³ö±ê¼ÇËù¶ÔÓ¦µÄ vnode | |
vlabel |
vp µÄ²ßÂÔ±ê¼Ç |
|
intlabel |
½«±»Ð´Èë´ÅÅ̵ıê¼Ç |
¡¡¡¡½«²ÎÊý intlabel
¸ø³öµÄ±ê¼ÇÐÅϢдÈëÖ¸¶¨ vnode
µÄÀ©Õ¹ÊôÐÔ¡£ ¸Ãº¯Êý±» vop_stdcreatevnode_ea
Ëùµ÷Óá£
mpo_update_devfsdirent
void mpo_update_devfsdirent
(struct devfs_dirent
*devfs_dirent, struct label *direntlabel, struct vnode *vp, struct label
*vnodelabel);
²ÎÊý | ˵Ã÷ | Ëø¶¨ |
---|---|---|
devfs_dirent |
¿ÍÌ壻devfs Ŀ¼Ïî | |
direntlabel |
½«±»¸üеÄdevfs_dirent µÄ²ßÂÔ±ê¼Ç |
|
vp |
¸¸ vnode | ÒÑËø¶¨ |
vnodelabel |
vp µÄ²ßÂÔ±ê¼Ç |
¡¡¡¡¸ù¾ÝËù´«ÈëµÄ devfs vnode ±ê¼Ç£¬¶Ô devfs_dirent
µÄ±ê¼Ç½øÐиüС£ ÖØÐ±ê¼ÇÒ»¸ö devfs vnode
µÄ²Ù×÷³É¹¦Ö®ºó£¬½«µ÷Óøú¯ÊýÀ´È·Èϱê¼ÇµÄ¸Ä±ä£¬Èç´Ë£¬¼´Ê¹ÏàÓ¦µÄ vnode
Êý¾Ý½á¹¹±»Äں˻ØÊÕÖØÓ㬠Ҳ²»»á¶ªÊ§±ê¼ÇµÄÐÂ״̬¡£ÁíÍ⣬ÔÚ devfs
ÖÐн¨Ò»¸ö·ûºÅÁ´½Óʱ£¬½ô½Ó×Åmac_vnode_create_from_vnode
£¬
Ò²½«µ÷Óøú¯Êý£¬¶Ô vnode ±ê¼Ç½øÐгõʼ»¯²Ù×÷¡£
mpo_create_mbuf_from_socket
void mpo_create_mbuf_from_socket
(struct socket *so,
struct label *socketlabel, struct mbuf *m, struct label *mbuflabel);
²ÎÊý | ˵Ã÷ | Ëø¶¨ |
---|---|---|
socket |
Ì×½Ó×Ö | Ì×½Ó×ÖËø¶¨ WIP |
socketlabel |
socket µÄ²ßÂÔ±ê¼Ç |
|
m |
¿ÍÌ壻mbuf | |
mbuflabel |
½«±»ÌîдµÄ m µÄ²ßÂÔ±ê¼Ç |
¡¡¡¡¸ù¾Ý´«ÈëµÄÌ×½Ó×Ö±ê¼ÇΪд´½¨µÄmbufÍ·²¿ÉèÖñê¼Ç¡£ ÿµ±Ì×½Ó×Ö²úÉúÒ»¸öеÄÊý¾Ý±¨»òÕßÏûÏ¢£¬²¢½«Æä´æ´¢ÔÚ²ÎÊý mbuf ÖÐʱ£¬½«µ÷Óøú¯Êý¡£
mpo_create_pipe
¡¡¡¡¸ù¾Ý´«ÈëµÄÖ÷ÌåÐÅÈÎ×´²ÎÊý£¬ÉèÖÃн¨¹ÜµÀµÄ±ê¼Ç¡£Ã¿µ±Ò»¸öйܵÀ±»´´½¨£¬¸Ãº¯Êý½«±»µ÷Óá£
mpo_create_socket
¡¡¡¡¸ù¾Ý´«ÈëµÄÖ÷ÌåÐÅÈÎ×´²ÎÊý£¬ÉèÖÃн¨Ì×½Ó×ֵıê¼Ç¡£Ã¿µ±Ð½¨Ò»¸öÌ×½Ó×Ö£¬¸Ãº¯Êý½«±»µ÷Óá£
mpo_create_socket_from_socket
void mpo_create_socket_from_socket
(struct socket
*oldsocket, struct label *oldsocketlabel, struct socket *newsocket, struct label
*newsocketlabel);
²ÎÊý | ˵Ã÷ | Ëø¶¨ |
---|---|---|
oldsocket |
¼àÌýÌ×½Ó×Ö | |
oldsocketlabel |
oldsocket µÄ²ßÂÔ±ê¼Ç |
|
newsocket |
н¨Ì×½Ó×Ö | |
newsocketlabel |
newsocket µÄ²ßÂÔ±ê¼Ç |
¡¡¡¡¸ù¾Ý listen(2) Ì×½Ó×Ö
oldsocket
£¬ Ϊн¨ accept(2) µÄÌ×½Ó×Ö
newsocket
£¬ÉèÖñê¼Ç¡£
mpo_relabel_pipe
void mpo_relabel_pipe
(struct ucred *cred, struct
pipe *pipe, struct label *oldlabel, struct label *newlabel);
²ÎÊý | ˵Ã÷ | Ëø¶¨ |
---|---|---|
cred |
Ö÷ÌåÐÅÈÎ×´ | |
pipe |
¹ÜµÀ | |
oldlabel |
pipe µÄµ±Ç°²ßÂÔ±ê¼Ç |
|
newlabel |
½«Îªpipe ÉèÖõÄеIJßÂÔ±ê¼Ç |
¡¡¡¡Îªpipe
ÉèÖÃбê¼Çnewlabel
¡£
mpo_relabel_socket
void mpo_relabel_socket
(struct ucred *cred, struct
socket *so, struct label *oldlabel, struct label *newlabel);
²ÎÊý | ˵Ã÷ | Ëø¶¨ |
---|---|---|
cred |
Ö÷ÌåÐÅÈÎ×´ | ²»¿É¸Ä±ä |
so |
¿ÍÌ壻Ì×½Ó×Ö | |
oldlabel |
so µÄµ±Ç°±ê¼Ç |
|
newlabel |
½«Îªsocket ÉèÖõÄбê¼Ç |
¡¡¡¡¸ù¾Ý´«ÈëµÄ±ê¼Ç²ÎÊý£¬¶ÔÌ×½Ó×ֵĵ±Ç°±ê¼Ç½øÐиüС£
mpo_set_socket_peer_from_mbuf
void mpo_set_socket_peer_from_mbuf
(struct mbuf
*mbuf, struct label *mbuflabel, struct label *oldlabel, struct label
*newlabel);
²ÎÊý | ˵Ã÷ | Ëø¶¨ |
---|---|---|
mbuf |
´ÓÌ×½Ó×Ö½ÓÊÕµ½µÄµÚÒ»¸öÊý¾Ý±¨ | |
mbuflabel |
mbuf µÄ±ê¼Ç |
|
oldlabel |
Ì×½Ó×ֵĵ±Ç°±ê¼Ç | |
newlabel |
½«ÎªÌ×½Ó×ÖÌîдµÄ²ßÂÔ±ê¼Ç |
¡¡¡¡¸ù¾Ý´«ÈëµÄ mbuf ±ê¼Ç£¬ÉèÖÃij¸ö stream Ì×½Ó×ֵĶԵȱêÖ¾¡£ ³ýUnixÓòµÄÌ×½Ó×ÖÖ®Í⣬ÿµ±Ò»¸ö stream Ì×½Ó×Ö½ÓÊÕµ½µÚÒ»¸öÊý¾Ý±¨Ê±£¬¸Ãº¯Êý½«±»µ÷Óá£
mpo_set_socket_peer_from_socket
void mpo_set_socket_peer_from_socket
(struct socket
*oldsocket, struct label *oldsocketlabel, struct socket *newsocket, struct label
*newsocketpeerlabel);
²ÎÊý | ˵Ã÷ | Ëø¶¨ |
---|---|---|
oldsocket |
±¾µØÌ×½Ó×Ö | |
oldsocketlabel |
oldsocket µÄ²ßÂÔ±ê¼Ç |
|
newsocket |
¶ÔµÈÌ×½Ó×Ö | |
newsocketpeerlabel |
½«Îªnewsocket ÌîдµÄ²ßÂÔ±ê¼Ç |
¡¡¡¡¸ù¾Ý´«ÈëµÄÔ¶³ÌÌ×½Ó×ֶ˵㣬Ϊһ¸ö stream UNIX ÓëÌ×½Ó×ÖÉèÖöԵȱê¼Ç¡£ ÿµ±ÏàÓ¦µÄÌ×½Ó×Ö¶ÔÖ®¼ä½øÐÐÁ¬½Óʱ£¬¸Ãº¯Êý½«ÔÚÁ½¶Ë·Ö±ð±»µ÷Óá£
mpo_create_bpfdesc
¡¡¡¡¸ù¾Ý´«ÈëµÄÖ÷ÌåÐÅÈÎ×´²ÎÊý£¬ÎªÐ½¨µÄ BPF ÃèÊö×ÓÉèÖñê¼Ç¡£ µ±½ø³Ì´ò¿ª BPF É豸½Úµãʱ£¬¸Ãº¯Êý½«±»µ÷Óá£
mpo_create_ifnet
¡¡¡¡ÎªÐ½¨µÄÍøÂç½Ó¿ÚÉèÖñê¼Ç¡£¸Ãº¯ÊýÔÚÒÔÏÂÇé¿öϱ»µ÷Ó㺠µ±Ò»¸öеÄÎïÀí½Ó¿Ú±äΪ¿ÉÓÃʱ£¬»òÕßµ±Ò»¸öα½Ó¿ÚÔÚÒýµ¼Ê±»òÓÉÓÚij¸öÓû§²Ù×÷¶øÊµÀý»¯Ê±¡£
mpo_create_ipq
void mpo_create_ipq
(struct mbuf *fragment, struct
label *fragmentlabel, struct ipq *ipq, struct label *ipqlabel);
²ÎÊý | ˵Ã÷ | Ëø¶¨ |
---|---|---|
fragment |
µÚÒ»¸ö±»½ÓÊÕµÄ IP ·ÖƬ | |
fragmentlabel |
fragment µÄ²ßÂÔ±ê¼Ç |
|
ipq |
½«±»±ê¼ÇµÄ IP ÖØ×é¶ÓÁÐ | |
ipqlabel |
½«Îªipq ÌîдµÄ²ßÂÔ±ê¼Ç |
¡¡¡¡¸ù¾ÝµÚÒ»¸ö½ÓÊÕµ½µÄ·ÖƬµÄ mbuf Í·²¿ÐÅÏ¢£¬ÎªÐ½¨µÄ IP ·ÖÆ¬ÖØ×é¶ÓÁÐÉèÖñê¼Ç¡£
mpo_create_datagram_from_ipq
void mpo_create_create_datagram_from_ipq
(struct ipq
*ipq, struct label *ipqlabel, struct mbuf *datagram, struct label
*datagramlabel);
²ÎÊý | ˵Ã÷ | Ëø¶¨ |
---|---|---|
ipq |
IP ÖØ×é¶ÓÁÐ | |
ipqlabel |
ipq µÄ²ßÂÔ±ê¼Ç |
|
datagram |
½«±»±ê¼ÇµÄÊý¾Ý±¨ | |
datagramlabel |
½«Îªdatagramlabel ÌîдµÄ²ßÂÔ±ê¼Ç |
¡¡¡¡¸ù¾Ý IP ·ÖÆ¬ÖØ×é¶ÓÁУ¬Îª¸Õ¸ÕÖØ×éÍê±ÏµÄ IP Êý¾Ý±¨ÉèÖñê¼Ç¡£
mpo_create_fragment
void mpo_create_fragment
(struct mbuf *datagram,
struct label *datagramlabel, struct mbuf *fragment, struct label
*fragmentlabel);
²ÎÊý | ˵Ã÷ | Ëø¶¨ |
---|---|---|
datagram |
Êý¾Ý±¨ | |
datagramlabel |
datagram µÄ²ßÂÔ±ê¼Ç |
|
fragment |
½«±»±ê¼ÇµÄ·ÖƬ | |
fragmentlabel |
½«Îªdatagram ÌîдµÄ²ßÂÔ±ê¼Ç |
¡¡¡¡¸ù¾ÝÊý¾Ý±¨Ëù¶ÔÓ¦µÄ mbuf Í·²¿ÐÅÏ¢£¬ÎªÆäн¨µÄ·ÖƬµÄ mbuf Í·²¿ÉèÖñê¼Ç¡£
mpo_create_mbuf_from_mbuf
void mpo_create_mbuf_from_mbuf
(struct mbuf
*oldmbuf, struct label *oldmbuflabel, struct mbuf *newmbuf, struct label
*newmbuflabel);
²ÎÊý | ˵Ã÷ | Ëø¶¨ |
---|---|---|
oldmbuf |
ÒÑÓеģ¨Ô´£©mbuf | |
oldmbuflabel |
oldmbuf µÄ²ßÂÔ±ê¼Ç |
|
newmbuf |
½«±»±ê¼ÇµÄн¨ mbuf | |
newmbuflabel |
½«Îªnewmbuf ÌîдµÄ²ßÂÔ±ê¼Ç |
¡¡¡¡¸ù¾Ýij¸öÏÖÓÐÊý¾Ý±¨µÄ mbuf Í·²¿ÐÅÏ¢£¬ÎªÐ½¨Êý¾Ý±¨µÄ mbuf Í·²¿ÉèÖñê¼Ç¡£ÔÚÐí¶àÌõ¼þϽ«»áµ÷Óøú¯Êý£¬ ±ÈÈ磬ÓÉÓÚ¶ÔÆëÒªÇó¶øÖØÐ·ÖÅäij¸ö mbuf ʱ¡£
mpo_create_mbuf_linklayer
void mpo_create_mbuf_linklayer
(struct ifnet *ifnet,
struct label *ifnetlabel, struct mbuf *mbuf, struct label *mbuflabel);
²ÎÊý | ˵Ã÷ | Ëø¶¨ |
---|---|---|
ifnet |
ÍøÂç½Ó¿Ú | |
ifnetlabel |
ifnet µÄ²ßÂÔ±ê¼Ç |
|
mbuf |
н¨Êý¾Ý±¨µÄ mbuf Í·²¿ | |
mbuflabel |
½«Îªmbuf ÌîдµÄ²ßÂÔ±ê¼Ç |
¡¡¡¡ÎªÔÚ¸ø¶¨½Ó¿ÚÉÏÓÉÓÚij¸öÁ´Â·²ãÏìÓ¦¶øÐ½¨µÄÊý¾Ý±¨µÄmbufÍ·²¿ÉèÖñê¼Ç¡£ ¸Ãº¯Êý½«ÔÚÈô¸ÉÌõ¼þϱ»µ÷Ó㬱ÈÈçµ±IPv4ºÍIPv6ÐÒéÕ»ÔÚÏìÓ¦ARP»òÕßND6ʱ¡£
mpo_create_mbuf_from_bpfdesc
void mpo_create_mbuf_from_bpfdesc
(struct bpf_d
*bpf_d, struct label *bpflabel, struct mbuf *mbuf, struct label *mbuflabel);
²ÎÊý | ˵Ã÷ | Ëø¶¨ |
---|---|---|
bpf_d |
BPF ÃèÊö×Ó | |
bpflabel |
bpflabel µÄ²ßÂÔ±ê¼Ç |
|
mbuf |
½«±»±ê¼ÇµÄн¨ mbuf | |
mbuflabel |
½«Îªmbuf ÌîдµÄ²ßÂÔ±ê¼Ç |
¡¡¡¡ÎªÊ¹ÓòÎÊý BPF ÃèÊö×Ó´´½¨µÄÐÂÊý¾Ý±¨µÄ mbuf Í·²¿ÉèÖñê¼Ç¡£ µ±¶Ô²ÎÊý BPF ÃèÊö×ÓËù¹ØÁªµÄ BPF É豸½øÐÐд²Ù×÷ʱ£¬¸Ãº¯Êý½«±»µ÷Óá£
mpo_create_mbuf_from_ifnet
void mpo_create_mbuf_from_ifnet
(struct ifnet
*ifnet, struct label *ifnetlabel, struct mbuf *mbuf, struct label *mbuflabel);
²ÎÊý | ˵Ã÷ | Ëø¶¨ |
---|---|---|
ifnet |
ÍøÂç½Ó¿Ú | |
ifnetlabel |
ifnetlabel µÄ²ßÂÔ±ê¼Ç |
|
mbuf |
н¨Êý¾Ý±¨µÄ mbuf Í·²¿ | |
mbuflabel |
½«Îªmbuf ÌîдµÄ²ßÂÔ±ê¼Ç |
¡¡¡¡Îª´ÓÍøÂç½Ó¿Ú²ÎÊý´´½¨µÄÊý¾Ý±¨µÄ mbuf Í·²¿ÉèÖñê¼Ç¡£
mpo_create_mbuf_multicast_encap
void mpo_create_mbuf_multicast_encap
(struct mbuf
*oldmbuf, struct label *oldmbuflabel, struct ifnet *ifnet, struct label *ifnetlabel,
struct mbuf *newmbuf, struct label *newmbuflabel);
²ÎÊý | ˵Ã÷ | Ëø¶¨ |
---|---|---|
oldmbuf |
ÏÖÓÐÊý¾Ý±¨µÄ mbuf Í·²¿ | |
oldmbuflabel |
oldmbuf µÄ²ßÂÔ±ê¼Ç |
|
ifnet |
ÍøÂç½Ó¿Ú | |
ifnetlabel |
ifnet µÄ²ßÂÔ±ê¼Ç |
|
newmbuf |
½«±»±ê¼ÇµÄн¨Êý¾Ý±¨ mbuf Í·²¿ | |
newmbuflabel |
½«Îªnewmbuf ÌîдµÄ²ßÂÔ±ê¼Ç |
¡¡¡¡µ±´«ÈëµÄÒÑÓÐÊý¾Ý±¨±»¸ø¶¨¶à²¥·â×°½Ó¿Ú£¨multicast encapsulation interface£©´¦Àíʱ±»µ÷Ó㬠Ϊд´½¨µÄÊý¾Ý±¨ËùÔÚ mbuf Í·²¿ÉèÖñê¼Ç¡£ ÿµ±Ê¹ÓøÃÐéÄâ½Ó¿Ú´«µÝÒ»¸ömbufʱ£¬½«µ÷Óøú¯Êý¡£
mpo_create_mbuf_netlayer
void mpo_create_mbuf_netlayer
(struct mbuf *oldmbuf,
struct label *oldmbuflabel, struct mbuf *newmbuf, struct label *newmbuflabel);
²ÎÊý | ˵Ã÷ | Ëø¶¨ |
---|---|---|
oldmbuf |
½ÓÊÕµÄÊý¾Ý±¨ | |
oldmbuflabel |
oldmbuf µÄ²ßÂÔ±ê¼Ç |
|
newmbuf |
н¨Êý¾Ý±¨ | |
newmbuflabel |
newmbuf µÄ²ßÂÔ±ê¼Ç |
¡¡¡¡ÎªÓÉ IP ¶ÑÕ»ÒòΪÏìÓ¦½ÓÊÕÊý¾Ý±¨£¨oldmbuf
£©¶øÐ½¨µÄÊý¾Ý±¨ÉèÖÃÆä mbuf Í·²¿µÄ±ê¼Ç¡£
Ðí¶àÇé¿öÏÂÐèÒªµ÷Óøú¯Êý£¬±ÈÈ磬ÏìÓ¦ ICMP ÇëÇóÊý¾Ý±¨Ê±¡£
mpo_fragment_match
int mpo_fragment_match
(struct mbuf *fragment,
struct label *fragmentlabel, struct ipq *ipq, struct label *ipqlabel);
²ÎÊý | ˵Ã÷ | Ëø¶¨ |
---|---|---|
fragment |
IP Êý¾Ý±¨·ÖƬ | |
fragmentlabel |
fragment µÄ²ßÂÔ±ê¼Ç |
|
ipq |
IP ·ÖÆ¬ÖØ×é¶ÓÁÐ | |
ipqlabel |
ipq µÄ²ßÂÔ±ê¼Ç |
¡¡¡¡¸ù¾ÝËù´«ÈëµÄ IP ·ÖÆ¬ÖØ×é¶ÓÁУ¨ipq
£©µÄ±ê¼Ç£¬
¼ì²é°üº¬Ò»¸ö IP Êý¾Ý±¨£¨fragment
£©µÄ mbuf
µÄÍ·²¿ÊÇ·ñ·ûºÏÆäÒªÇó¡£ ·ûºÏ£¬Ôò·µ»Ø1¡£·ñÔò£¬·µ»Ø0¡£ ÿµ± IP
¶ÑÕ»³¢ÊÔ½«Ò»¸ö¸Õ¸Õ½ÓÊÕµ½µÄ·ÖƬ·ÅÈëij¸öÒÑÓÐµÄ·ÖÆ¬ÖØ×é¶ÓÁÐÖÐʱ£¬½«µ÷Óøú¯Êý½øÐа²È«¼ì²é£»
Èç¹ûʧ°Ü£¬½«Îª·ÖÆ¬ÖØÐÂʵÀý»¯Ò»¸öÐ嵀ᅮ¬ÖØ×é¶ÓÁС£
²ßÂÔ¿ÉÒÔÀûÓøÃÈë¿Úº¯Êý£¬¸ù¾Ý±ê¼Ç»òÕ߯äËûÐÅÏ¢×èÖ¹²»ÆÚÍûµÄ IP ·ÖÆ¬ÖØ×é¡£
mpo_relabel_ifnet
void mpo_relabel_ifnet
(struct ucred *cred, struct
ifnet *ifnet, struct label *ifnetlabel, struct label *newlabel);
²ÎÊý | ˵Ã÷ | Ëø¶¨ |
---|---|---|
cred |
Ö÷ÌåÐÅÈÎ×´ | |
ifnet |
¿ÍÌå£»ÍøÂç½Ó¿Ú | |
ifnetlabel |
ifnet µÄ²ßÂÔ±ê¼Ç |
|
newlabel |
½«Îªifnet ÉèÖõÄбê¼Ç |
¡¡¡¡¸ù¾ÝËù´«ÈëµÄбê¼Ç£¬newlabel
£¬ÒÔ¼°Ö÷ÌåÐÅÈÎ×´£¬
cred
£¬¶ÔÍøÂç½Ó¿ÚµÄ±ê¼Ç½øÐиüС£
mpo_update_ipq
void mpo_update_ipq
(struct mbuf *fragment, struct
label *fragmentlabel, struct ipq *ipq, struct label *ipqlabel);
²ÎÊý | ˵Ã÷ | Ëø¶¨ |
---|---|---|
mbuf |
IP ·ÖƬ | |
mbuflabel |
mbuf µÄ²ßÂÔ±ê¼Ç |
|
ipq |
IP ·ÖÆ¬ÖØ×é¶ÓÁÐ | |
ipqlabel |
½«±»¸üеÄipq µÄµ±Ç°²ßÂÔ±ê¼Ç |
¡¡¡¡¸ù¾ÝËù´«ÈëµÄ IP ·ÖƬ mbuf Í·²¿£¨mbuf
£©Îª½ÓÊÕ ËüµÄ
IP ·ÖÆ¬ÖØ×é¶ÓÁУ¨ipq
£©µÄ±ê¼Ç½øÐиüС£
mpo_create_cred
¡¡¡¡¸ù¾ÝËù´«ÈëµÄÖ÷ÌåÐÅÈÎ×´£¬ÎªÐ½¨µÄÖ÷ÌåÐÅÈÎ×´ÉèÖñê¼Ç¡£ ÿµ±ÎªÒ»¸öн¨µÄ struct ucredµ÷Óà crcopy(9) ʱ£¬½«µ÷Óô˺¯Êý¡£ ¸Ãº¯Êý²»Ó¦Óë½ø³Ì¸´ÖÆ£¨forking£©»òÕß´´½¨Ê¼þ»ìΪһ̸¡£
mpo_execve_transition
void mpo_execve_transition
(struct ucred *old,
struct ucred *new, struct vnode *vp, struct label *vnodelabel);
²ÎÊý | ˵Ã÷ | Ëø¶¨ |
---|---|---|
old |
ÒÑÓеÄÖ÷ÌåÐÅÈÎ×´ | ²»¿É¸Ä±ä |
new |
½«±»±ê¼ÇµÄÐÂÖ÷ÌåÐÅÈÎ×´ | |
vp |
½«±»Ö´ÐеÄÎļþ | Òѱ»Ëø¶¨ |
vnodelabel |
vp µÄ²ßÂÔ±ê¼Ç |
¡¡¡¡Ò»¸öÓµÓÐÐÅÈÎ×´old
µÄÖ÷ÌåÓÉÓÚÖ´ÐÐ(vp
Îļþ¶øµ¼Ö±ê¼Çת»»Ê±£¬
¸Ãº¯Êý¸ù¾Ývnode±ê¼ÇΪ¸ÃÖ÷ÌåÖØÐ±ê¼ÇΪnew
¡£
ÿµ±Ò»¸ö½ø³ÌÇëÇóÖ´ÐÐvnodeÎļþ£¬¶øÍ¨¹ý Èë¿Úº¯Êýmpo_execve_will_transition
Óгɹ¦·µ»ØµÄ²ßÂÔʱ£¬½«µ÷Óøú¯Êý¡£
²ßÂÔÄ£¿é¿ÉÒÔͨ¹ý´«ÈëÁ½¸öÖ÷ÌåÐÅÈÎ×´ºÍ¼òµ¥µØµ÷Óà mpo_create_cred
À´ÊµÏÖ¸ÃÈë¿Úº¯Êý£¬ so as not to implement a
transitioning event. Ò»µ©²ßÂÔʵÏÖÁËmpo_create_cred
º¯Êý£¬¼´Ê¹Ã»ÓÐʵÏÖ mpo_execve_will_transition
£¬Ò²Ó¦¸ÃʵÏָú¯Êý¡£
mpo_execve_will_transition
²ÎÊý | ˵Ã÷ | Ëø¶¨ |
---|---|---|
old |
ÔÚÖ´ÐÐexecve(2)֮ǰµÄÖ÷ÌåÐÅÈÎ×´ | ²»¿É¸Ä±ä |
vp |
½«±»Ö´ÐеÄÎļþ | |
vnodelabel |
vp µÄ²ßÂÔ±ê¼Ç |
¡¡¡¡ÓɲßÂÔ¾ö¶¨£¬µ±²ÎÊýÖ÷ÌåÐÅÈÎ×´Ö´ÐвÎÊý vnode
ʱ£¬ÊÇ·ñÐèÒª½øÐÐÒ»¸ö±ê¼Çת»»²Ù×÷¡£Èç¹ûÐèÒª£¬·µ»Ø1£»
·ñÔò£¬·µ»Ø0¡£¼´Ê¹Ò»¸ö²ßÂÔ·µ»Ø0£¬ËüÒ²±ØÐëΪ×Ô¼º²»ÆÚÍûµÄ¶Ô mpo_execve_transition
µÄµ÷ÓÃ×÷ºÃ×¼±¸£¬ÒòΪֻҪÓÐÆäËûÈκÎÒ»¸ö²ßÂÔÒªÇóת»»£¬¾Í½«Ö´Ðд˺¯Êý¡£
mpo_create_proc0
¡¡¡¡Îª½ø³Ì0£¬ËùÓÐÄں˽ø³ÌµÄ׿ÏÈ£¬´´½¨Ö÷ÌåÐÅÈÎ×´¡£
mpo_create_proc1
¡¡¡¡Îª½ø³Ì1£¬ËùÓÐÓû§½ø³ÌµÄ׿ÏÈ£¬´´½¨Ö÷ÌåÐÅÈÎ×´¡£
mpo_relabel_cred
¡¡¡¡¸ù¾Ý´«ÈëµÄбê¼Ç£¬¶ÔÖ÷ÌåÐÅÈÎ×´Éϵıê¼Ç½øÐиüС£
¡¡¡¡Í¨¹ý·ÃÎÊ¿ØÖÆÈë¿Úº¯Êý£¬²ßÂÔÄ£¿éÄÜÓ°ÏìÄں˵ķÃÎÊ¿ØÖƾö²ß¡£
ͨ³£Çé¿öÏ£¬²»ÊǾø¶Ô£¬Ò»¸ö·ÃÎÊ¿ØÖÆÈë¿Úº¯ÊýµÄ²ÎÊýÓУ¬Ò»¸ö»òÕßÈô¸É¸öÊÚȨÐÅÈÎ×´£¬ºÍÏà¹Ø²Ù×÷Éæ¼°µÄÆäËûÈκζÔÏóµÄÐÅÏ¢£¨ÆäÖпÉÄܰüº¬±ê¼Ç£©¡£
·ÃÎÊ¿ØÖÆÈë¿Úº¯Êý·µ»Ø0£¬±íʾÔÊÐí¸Ã²Ù×÷£»·ñÔò£¬·µ»ØÒ»¸ö errno(2)
´íÎó±àÂë¡£µ÷ÓøÃÈë¿Úº¯Êý£¬½«±éÀúËùÓÐϵͳע²áµÄ²ßÂÔÄ£¿é£¬ÖðÒ»½øÐÐ
²ßÂÔÏà¹ØµÄ¼ì²éºÍ¾ö²ß£¬Ö®ºó°´ÕÕÏÂÊö·½·¨×éºÏ²»Í¬²ßÂԵķµ»Ø½á¹û£ºÖ»Óе±ËùÓеÄÄ£¿é¾ùÔÊÐí¸Ã²Ù×÷ʱ£¬²Å³É¹¦·µ»Ø¡£
·ñÔò£¬Èç¹ûÓÐÒ»¸ö»òÕßÈô¸ÉÄ£¿éʧ°Ü·µ»Ø£¬ÔòÕû¸ö¼ì²é²»Í¨¹ý¡£Èç¹ûÓжà¸öÄ£¿éµÄ¼ì²é³ö´í·µ»Ø£¬½«Óɶ¨ÒåÔÚkern_mac.c
ÖÐµÄ error_select()
º¯Êý´ÓËüÃÇ·µ»ØµÄ´íÎó±àÂëÖУ¬Ñ¡ÔñÒ»¸öºÏÊʵ쬷µ»Ø¸øÓû§¡£
¡¡¡¡Èç¹ûËùÓвßÂÔÄ£¿é·µ»ØµÄ´íÎó±àÂë¾ùûÓгöÏÖÔÚÉÏÊöÓÅÏȼ¶ÐòÁбíÖУ¬ÔòÈÎÒâÑ¡ÔñÒ»¸ö·µ»Ø¡£ Ñ¡Ôñ´íÎó±àÂëµÄÒ»°ã´ÎÐòΪ£ºÄں˴íÎó£¬ÎÞЧµÄ²ÎÊý£¬¶ÔÏó²»´æÔÚ£¬·ÃÎʱ»¾Ü¾ø£¬ºÍÆäËû´íÎó¡£
mpo_check_bpfdesc_receive
int mpo_check_bpfdesc_receive
(struct bpf_d *bpf_d,
struct label *bpflabel, struct ifnet *ifnet, struct label *ifnetlabel);
²ÎÊý | ˵Ã÷ | Ëø¶¨ |
---|---|---|
bpf_d |
Ö÷Ì壻BPF ÃèÊö×Ó | |
bpflabel |
bpf_d µÄ²ßÂÔ±ê¼Ç |
|
ifnet |
¿ÍÌå£»ÍøÂç½Ó¿Ú | |
ifnetlabel |
ifnet µÄ²ßÂÔ±ê¼Ç |
¡¡¡¡¾ö¶¨ MAC ¿ò¼ÜÊÇ·ñÓ¦¸ÃÔÊÐí½«ÓɲÎÊý½Ó¿Ú½ÓÊÕµ½µÄÊý¾Ý±¨´«µÝ¸øÓÉ BPF
ÃèÊö×ÓËù¶ÔÓ¦µÄ»º³åÇø¡£³É¹¦£¬Ôò·µ»Ø0£»
·ñÔò£¬·µ»Ø´íÎó±àÂëÐÅÏ¢errno
¡£½¨ÒéʹÓõĴíÎó±àÂëÓУºEACCES£¬ÓÃÓÚ±ê¼Ç²»·ûµÄÇé¿ö£» EPERM£¬ÓÃÓÚȱÉÙÌØÈ¨µÄÇé¿ö¡£
mpo_check_kenv_dump
¡¡¡¡¾ö¶¨Ïà¹ØÖ÷ÌåÊÇ·ñÓ¦¸Ã±»ÔÊÐí²éѯÄں˻·¾³×´Ì¬£¨²Î¿¼ kenv(2)£©¡£
mpo_check_kenv_get
¡¡¡¡¾ö¶¨Ïà¹ØÖ÷ÌåÊÇ·ñ¿ÉÒÔ²éѯÄÚºËÖиø¶¨»·¾³±äÁ¿µÄ״̬¡£
mpo_check_kenv_set
¡¡¡¡¾ö¶¨Ïà¹ØÖ÷ÌåÊÇ·ñÓÐȨÉèÖøø¶¨Äں˻·¾³±äÁ¿µÄÖµ¡£
mpo_check_kenv_unset
¡¡¡¡¾ö¶¨Ïà¹ØÖ÷ÌåÊÇ·ñÓÐȨÇå³ý¸ø¶¨µÄÄں˻·¾³±äÁ¿µÄÉèÖá£
mpo_check_kld_load
¡¡¡¡¾ö¶¨Ïà¹ØÖ÷ÌåÊÇ·ñÓÐȨ¼ÓÔØ¸ø¶¨µÄÄ£¿éÎļþ¡£
mpo_check_kld_stat
¡¡¡¡¾ö¶¨Ïà¹ØÖ÷ÌåÊÇ·ñÓÐȨ·ÃÎÊÄں˵ļÓÔØÄ£¿éÎļþÁ´±íÒÔ¼°Ïà¹ØµÄͳ¼ÆÊý¾Ý¡£
mpo_check_kld_unload
¡¡¡¡¾ö¶¨Ïà¹ØÖ÷ÌåÊÇ·ñÓÐÈ¨Ð¶ÔØÒ»¸öÄÚºËÄ£¿é¡£
mpo_check_pipe_ioctl
int mpo_check_pipe_ioctl
(struct ucred *cred, struct
pipe *pipe, struct label *pipelabel, unsigned long cmd, void *data);
²ÎÊý | ˵Ã÷ | Ëø¶¨ |
---|---|---|
cred |
Ö÷ÌåÐÅÈÎ×´ | |
pipe |
¹ÜµÀ | |
pipelabel |
pipe µÄ²ßÂÔ±ê¼Ç |
|
cmd |
ioctl(2) ÃüÁî | |
data |
ioctl(2) Êý¾Ý |
¡¡¡¡¾ö¶¨Ïà¹ØÖ÷ÌåÊÇ·ñÓÐȨµ÷ÓÃÖ¸¶¨µÄ ioctl(2) ϵͳµ÷Óá£
mpo_check_pipe_poll
¡¡¡¡¾ö¶¨Ïà¹ØÖ÷ÌåÊÇ·ñÓÐȨ¶Ô¹ÜµÀpipe
Ö´ÐÐpoll²Ù×÷¡£
mpo_check_pipe_read
¡¡¡¡¾ö¶¨¸ÃÖ÷ÌåÊÇ·ñÓÐȨ¶ÁÈ¡pipe
¡£
mpo_check_pipe_relabel
int mpo_check_pipe_relabel
(struct ucred *cred,
struct pipe *pipe, struct label *pipelabel, struct label *newlabel);
²ÎÊý | ˵Ã÷ | Ëø¶¨ |
---|---|---|
cred |
Ö÷ÌåÐÅÈÎ×´ | |
pipe |
¹ÜµÀ | |
pipelabel |
pipe µÄµ±Ç°²ßÂÔ±ê¼Ç |
|
newlabel |
½«Îªpipelabel ÉèÖõÄбê¼Ç |
¡¡¡¡¾ö¶¨¸ÃÖ÷ÌåÊÇ·ñÓÐȨΪpipe
ÖØÐÂÉèÖñê¼Ç¡£
mpo_check_pipe_stat
¡¡¡¡¾ö¶¨¸ÃÖ÷ÌåÊÇ·ñÓÐȨ²éѯÓëpipe
Ïà¹ØµÄͳ¼ÆÐÅÏ¢¡£
mpo_check_pipe_write
¡¡¡¡¾ö¶¨¸ÃÖ÷ÌåÊÇ·ñÓÐȨдpipe
¡£
mpo_check_socket_bind
mpo_check_socket_connect
int mpo_check_socket_connect
(struct ucred *cred,
struct socket *socket, struct label *socketlabel, struct sockaddr *sockaddr);
²ÎÊý | ˵Ã÷ | Ëø¶¨ |
---|---|---|
cred |
Ö÷ÌåÐÅÈÎ×´ | |
socket |
½«±»Á¬½ÓµÄÌ×½Ó×Ö | |
socketlabel |
socket µÄ²ßÂÔ±ê¼Ç |
|
sockaddr |
socket µÄµØÖ· |
¡¡¡¡¾ö¶¨¸ÃÖ÷Ì壨cred
£©ÊÇ·ñÓÐȨ½«Ì×½Ó×Ö£¨socket
£©°ó¶¨µ½µØÖ· sockaddr
¡£³É¹¦£¬·µ»Ø0£¬·ñÔò·µ»ØÒ»¸ö´íÎó±àÂëerrno
¡£
½¨Òé²ÉÓõĴíÎó±àÂëÓУºEACCES£¬ÓÃÓÚ±ê¼Ç²»·ûµÄÇé¿ö£»EPERM£¬ÓÃÓÚÌØÈ¨²»×ãµÄÇé¿ö¡£
mpo_check_socket_receive
¡¡¡¡¾ö¶¨¸ÃÖ÷ÌåÊÇ·ñÓÐȨ²éѯÌ×½Ó×Öso
µÄÏà¹ØÐÅÏ¢¡£
mpo_check_socket_send
¡¡¡¡¾ö¶¨¸ÃÖ÷ÌåÊÇ·ñÓÐȨͨ¹ýÌ×½Ó×Öso
·¢ËÍÐÅÏ¢¡£
mpo_check_cred_visible
¡¡¡¡È·¶¨¸ÃÖ÷ÌåÐÅÈÎ×´u1
ÊÇ·ñÓÐȨ ¡°see¡±
¾ßÓÐÐÅÈÎ×´u2
µÄÆäËûÖ÷Ìå¡£ ³É¹¦£¬·µ»Ø0£»·ñÔò£¬·µ»Ø´íÎó±àÂëerrno
¡£½¨Òé²ÉÓõĴíÎó±àÂëÓУº EACCES£¬ÓÃÓÚ±ê¼Ç²»·ûµÄÇé¿ö£»EPERM£¬ÓÃÓÚÌØÈ¨²»×ãµÄÇé¿ö£»ESRCH£¬
ÓÃÀ´Ìṩ²»¿É¼ûÐÔ¡£¸Ãº¯Êý¿ÉÔÚÐí¶à»·¾³ÏÂʹÓ㬰üÀ¨ÃüÁîpsËùʹÓõĽø³Ì¼äµÄ״̬ sysctl£¬ÒÔ¼°Í¨¹ýprocfs µÄ״̬²éѯ²Ù×÷¡£
mpo_check_ifnet_relabel
int mpo_check_ifnet_relabel
(struct ucred *cred,
struct ifnet *ifnet, struct label *ifnetlabel, struct label *newlabel);
²ÎÊý | ˵Ã÷ | Ëø¶¨ |
---|---|---|
cred |
Ö÷ÌåÐÅÈÎ×´ | |
ifnet |
¿ÍÌå£»ÍøÂç½Ó¿Ú | |
ifnetlabel |
ifnet ÏÖÓеIJßÂÔ±ê¼Ç |
|
newlabel |
½«±»Ó¦Óõ½ifnet ÉϵÄеIJßÂÔ±ê¼Ç |
¡¡¡¡¾ö¶¨¸ÃÖ÷ÌåÐÅÈÎ×´ÊÇ·ñÓÐȨʹÓô«ÈëµÄ±ê¼Ç¸üвÎÊý¶Ô¸ø¶¨µÄÍøÂç½Ó¿ÚµÄ±ê¼Ç½øÐÐÖØÐÂÉèÖá£
mpo_check_socket_relabel
int mpo_check_socket_relabel
(struct ucred *cred,
struct socket *socket, struct label *socketlabel, struct label *newlabel);
²ÎÊý | ˵Ã÷ | Ëø¶¨ |
---|---|---|
cred |
Ö÷ÌåÐÅÈÎ×´ | |
socket |
¿ÍÌ壻Ì×½Ó×Ö | |
socketlabel |
socket ÏÖÓеIJßÂÔ±ê¼Ç |
|
newlabel |
½«±»Ó¦Óõ½socketlabel Éϵĸüбê¼Ç |
¡¡¡¡¾ö¶¨¸ÃÖ÷ÌåÐÅÈÎ×´ÊÇ·ñÓÐȨ²ÉÓô«ÈëµÄ±ê¼Ç¶ÔÌ×½Ó×Ö²ÎÊýµÄ±ê¼Ç½øÐÐÖØÐÂÉèÖá£
mpo_check_cred_relabel
¡¡¡¡¾ö¶¨¸ÃÖ÷ÌåÐÅÈÎ×´ÊÇ·ñÓÐȨ½«×Ô¼ºµÄ±ê¼ÇÖØÐÂÉèÖÃΪ¸ø¶¨µÄ¸üбê¼Ç¡£
mpo_check_vnode_relabel
int mpo_check_vnode_relabel
(struct ucred *cred,
struct vnode *vp, struct label *vnodelabel, struct label *newlabel);
²ÎÊý | ˵Ã÷ | Ëø¶¨ |
---|---|---|
cred |
Ö÷ÌåÐÅÈÎ×´ | ²»¿É¸Ä±ä |
vp |
¿ÍÌ壻vnode | Òѱ»Ëø¶¨ |
vnodelabel |
vp ÏÖÓеIJßÂÔ±ê¼Ç |
|
newlabel |
½«±»Ó¦Óõ½vp ÉϵIJßÂÔ±ê¼Ç |
¡¡¡¡¾ö¶¨¸ÃÖ÷ÌåÐÅÈÎ×´ÊÇ·ñÓÐȨ½«²ÎÊý vnode µÄ±ê¼ÇÖØÐÂÉèÖÃΪָ¶¨±ê¼Ç¡£
mpo_check_mount_stat
¡¡¡¡È·¶¨Ïà¹ØÖ÷ÌåÐÅÈÎ×´ÊÇ·ñÓÐȨ²é¿´ÔÚ¸ø¶¨ÎļþϵͳÉÏÖ´ÐÐ statfs µÄ½á¹û¡£ ³É¹¦£¬Ôò·µ»Ø
0£»·ñÔò£¬·µ»ØÒ»¸öerrno
Öµ¡£
½¨ÒéʹÓõĴíÎó±àÂ룺EACCES£¬ÓÃÓÚ±ê¼Ç²»Æ¥Å䣻 EPERM£¬ÓÃÓÚȨÏÞ²»¹»¡£ ¸Ãº¯Êý¿ÉÄÜÔÚÏÂÁÐÇé¿öϱ»µ÷Ó㺠ÔÚ statfs(2)
ºÍÆäËûÏà¹Øµ÷ÓÃÆÚ¼ä£¬»òÕßµ±ÐèÒª´ÓÎļþϵͳÁбíÖÐÑ¡ÔñÅųýÄĸöÎļþϵͳʱ£¬±ÈÈ磬 µ÷ÓÃ
getfsstat(2)ʱ¡£
mpo_check_proc_debug
¡¡¡¡È·¶¨Ïà¹ØÖ÷ÌåÐÅÈÎ×´ÊÇ·ñÓÐȨ debug ¸ø¶¨½ø³Ì¡£ ³É¹¦£¬Ôò·µ»Ø 0£»·ñÔò£¬·µ»ØÒ»¸öerrno
Öµ¡£
½¨ÒéʹÓõĴíÎó±àÂ룺EACCES£¬ÓÃÓÚ±ê¼Ç²»Æ¥Å䣻EPERM£¬ÓÃÓÚȨÏÞ²»¹»£» ESRCH£¬ÓÃÓÚÒþÂ÷Ä¿±êµÄ´æÔÚ¡£ ptrace(2) ºÍ ktrace(2) API£¬ÒÔ¼°Ä³Ð©
procfs ²Ù×÷½«µ÷Óøú¯Êý¡£
mpo_check_vnode_access
²ÎÊý | ˵Ã÷ | Ëø¶¨ |
---|---|---|
cred |
Ö÷ÌåÐÅÈÎ×´ | |
vp |
¿ÍÌ壻vnode | |
label |
vp µÄ²ßÂÔ±ê¼Ç |
|
flags |
access(2) ±êÖ¾ |
¡¡¡¡¸ù¾ÝÏà¹ØÖ÷ÌåÐÅÈÎ×´¾ö¶¨Æä¶Ô¸ø¶¨ vnode ÒÔ¸ø¶¨·ÃÎʱêÖ¾Ö´ÐÐµÄ access(2)
ºÍÆäËûÏà¹Øµ÷Óõķµ»ØÖµ¡£Ò»°ã£¬Ó¦²ÉÓÃÓëmpo_check_vnode_open
ÏàͬµÄÓïÒåÀ´ÊµÏָú¯Êý¡£ ³É¹¦£¬Ôò·µ»Ø 0£»·ñÔò£¬·µ»ØÒ»¸öerrno
Öµ¡£
½¨ÒéʹÓõĴíÎó±àÂ룺EACCES£¬ÓÃÓÚ±ê¼Ç²»Æ¥Å䣻 EPERM£¬ÓÃÓÚȨÏÞ²»¹»¡£
mpo_check_vnode_chdir
²ÎÊý | ˵Ã÷ | Ëø¶¨ |
---|---|---|
cred |
Ö÷ÌåÐÅÈÎ×´ | |
dvp |
¿ÍÌ壻chdir(2) µÄÄ¿µÄ vnode | |
dlabel |
dvp µÄ²ßÂÔ±ê¼Ç |
¡¡¡¡È·¶¨Ïà¹ØÖ÷ÌåÐÅÈÎ×´ÊÇ·ñÓÐȨ½«½ø³Ì¹¤×÷Ŀ¼Çл»µ½¸ø¶¨ vnode¡£³É¹¦£¬Ôò·µ»Ø
0£» ·ñÔò£¬·µ»ØÒ»¸ö errno
Öµ¡£ ½¨ÒéʹÓõĴíÎó±àÂ룺EACCES£¬ÓÃÓÚ±ê¼Ç²»Æ¥Å䣻 EPERM£¬ÓÃÓÚȨÏÞ²»¹»¡£
mpo_check_vnode_chroot
¡¡¡¡È·¶¨Ïà¹ØÖ÷ÌåÊÇ·ñÓÐȨ chroot(2) µ½ÓÉ (dvp
)¸ø¶¨µÄĿ¼¡£
mpo_check_vnode_create
int mpo_check_vnode_create
(struct ucred *cred,
struct vnode *dvp, struct label *dlabel, struct componentname *cnp, struct vattr
*vap);
²ÎÊý | ˵Ã÷ | Ëø¶¨ |
---|---|---|
cred |
Ö÷ÌåÐÅÈÎ×´ | |
dvp |
¿ÍÌ壻vnode | |
dlabel |
dvp µÄ²ßÂÔ±ê¼Ç |
|
cnp |
dvp ÖеijÉÔ±Ãû |
|
vap |
vap µÄ vnode ÊôÐÔ |
¡¡¡¡È·¶¨Ïà¹ØÖ÷ÌåÐÅÈÎ×´ÊÇ·ñÓÐȨÔÚ¸ø¶¨¸¸Ä¿Â¼£¬ÒÔ¸ø¶¨µÄÃû×ÖºÍÊôÐÔ£¬ ³£¼ûÒ»¸ö
vnode¡£³É¹¦£¬Ôò·µ»Ø 0£»·ñÔò£¬ ·µ»ØÒ»¸öerrno
Öµ¡£ ½¨ÒéʹÓõĴíÎó±àÂ룺EACCES
À´±íʾÓÃÓÚ±ê¼Ç²»Æ¥Å䣬 ¶øÓà EPERM£¬ÓÃÓÚȨÏÞ²»×ã¡£
ÒÔO_CREAT
Ϊ²ÎÊýµ÷Óà open(2)£¬»ò¶Ô mknod(2)£¬mkfifo(2)
µÈµÄµ÷Óý«µ¼Ö¸ú¯Êý±»µ÷Óá£
mpo_check_vnode_delete
int mpo_check_vnode_delete
(struct ucred *cred,
struct vnode *dvp, struct label *dlabel, struct vnode *vp, void *label, struct
componentname *cnp);
²ÎÊý | ˵Ã÷ | Ëø¶¨ |
---|---|---|
cred |
Ö÷ÌåÐÅÈÎ×´ | |
dvp |
¸¸Ä¿Â¼ vnode | |
dlabel |
dvp µÄ²ßÂÔ±ê¼Ç |
|
vp |
¿ÍÌ壻½«±»É¾³ýµÄ vnode | |
label |
vp µÄ²ßÂÔ±ê¼Ç |
|
cnp |
vp ÖеijÉÔ±Ãû |
¡¡¡¡È·¶¨Ïà¹ØÖ÷ÌåÐÅÈÎ×´ÊÇ·ñÓÐȨ´Ó¸ø¶¨µÄ¸¸Ä¿Â¼ÖУ¬É¾³ý¸ø¶¨Ãû×ÖµÄ vnode¡£ ³É¹¦£¬Ôò·µ»Ø
0£»·ñÔò£¬·µ»ØÒ»¸öerrno
Öµ¡£
½¨ÒéʹÓõĴíÎó±àÂ룺EACCES£¬ÓÃÓÚ±ê¼Ç²»Æ¥Å䣻 EPERM£¬ÓÃÓÚȨÏÞ²»¹»¡£ ʹÓà unlink(2) ºÍ rmdir(2)£¬½«µ¼Ö¸ú¯Êý±»µ÷Óá£
Ìṩ¸ÃÈë¿Úº¯ÊýµÄ²ßÂÔ»¹±ØÐëʵÏÖÒ»¸ö mpo_check_rename_to
£¬
ÓÃÀ´ÊÚȨÓÉÓÚÖØÃüÃû²Ù×÷µ¼ÖµÄÄ¿±êÎļþµÄɾ³ý¡£
mpo_check_vnode_deleteacl
int mpo_check_vnode_deleteacl
(struct ucred *cred,
struct vnode *vp, struct label *label, acl_type_t type);
¡¡¡¡È·¶¨Ïà¹ØÖ÷ÌåÐÅÈÎ×´ÊÇ·ñÓÐȨɾ³ý¸ø¶¨ vnode µÄ¸ø¶¨ÀàÐ굀 ACL¡£ ³É¹¦£¬Ôò·µ»Ø
0£»·ñÔò£¬·µ»ØÒ»¸öerrno
Öµ¡£
½¨ÒéʹÓõĴíÎó±àÂ룺EACCES£¬ÓÃÓÚ±ê¼Ç²»Æ¥Å䣻 EPERM£¬ÓÃÓÚȨÏÞ²»¹»¡£
mpo_check_vnode_exec
¡¡¡¡È·¶¨Ïà¹ØÖ÷ÌåÐÅÈÎ×´ÊÇ·ñÓÐȨִÐиø¶¨ vnode¡£
¶ÔÓÚÖ´ÐÐÌØÈ¨µÄ¾ö²ßÓëÈκÎ˲ʱʼþµÄ¾ö²ßÊÇÑϸñ·Ö¿ªµÄ¡£ ³É¹¦£¬Ôò·µ»Ø 0£»·ñÔò£¬·µ»ØÒ»¸öerrno
Öµ¡£
½¨ÒéʹÓõĴíÎó±àÂ룺EACCES£¬ÓÃÓÚ±ê¼Ç²»Æ¥Å䣻 EPERM£¬ÓÃÓÚȨÏÞ²»¹»¡£
mpo_check_vnode_getacl
int mpo_check_vnode_getacl
(struct ucred *cred,
struct vnode *vp, struct label *label, acl_type_t type);
¡¡¡¡È·¶¨Ïà¹ØÖ÷ÌåÐÅÈÎ×´ÊÇ·ñÓÐȨ²éѯ¸ø¶¨ vnode Éϵĸø¶¨ÀàÐ굀 ACL¡£ ³É¹¦£¬Ôò·µ»Ø
0£»·ñÔò£¬·µ»ØÒ»¸öerrno
Öµ¡£
½¨ÒéʹÓõĴíÎó±àÂ룺EACCES£¬ÓÃÓÚ±ê¼Ç²»Æ¥Å䣻 EPERM£¬ÓÃÓÚȨÏÞ²»¹»¡£
mpo_check_vnode_getextattr
int mpo_check_vnode_getextattr
(struct ucred *cred,
struct vnode *vp, struct label *label, int attrnamespace, const char *name, struct uio
*uio);
²ÎÊý | ˵Ã÷ | Ëø¶¨ |
---|---|---|
cred |
Ö÷ÌåÐÅÈÎ×´ | |
vp |
¿ÍÌ壻vnode | |
label |
vp µÄ²ßÂÔ±ê¼Ç |
|
attrnamespace |
À©Õ¹ÊôÐÔÃû×Ö¿Õ¼ä | |
name |
À©Õ¹ÊôÐÔÃû | |
uio |
I/O ½á¹¹Ö¸Õ룻²Î¼û uio(9) |
¡¡¡¡È·¶¨Ïà¹ØÖ÷ÌåÐÅÈÎ×´ÊÇ·ñÓÐȨ²éѯ¸ø¶¨ vnode Éϸø¶¨Ãû×Ö¿Õ¼äºÍÃû×ÖµÄÀ©Õ¹ÊôÐÔ¡£
ʹÓÃÀ©Õ¹ÊôÐÔʵÏÖ±ê¼Ç´æ´¢µÄ²ßÂÔÄ£¿é¿ÉÄÜ»áÐèÒª¶ÔÕâЩÀ©Õ¹ÊôÐԵIJÙ×÷½øÐÐÌØÊâ´¦Àí¡£
³É¹¦£¬Ôò·µ»Ø 0£»·ñÔò£¬·µ»ØÒ»¸öerrno
Öµ¡£ ½¨ÒéʹÓõĴíÎó±àÂ룺EACCES£¬ÓÃÓÚ±ê¼Ç²»Æ¥Å䣻 EPERM£¬ÓÃÓÚȨÏÞ²»¹»¡£
mpo_check_vnode_link
int mpo_check_vnode_link
(struct ucred *cred, struct
vnode *dvp, struct label *dlabel, struct vnode *vp, struct label *label, struct
componentname *cnp);
²ÎÊý | ˵Ã÷ | Ëø¶¨ |
---|---|---|
cred |
Ö÷ÌåÐÅÈÎ×´ | |
dvp |
Ŀ¼ vnode | |
dlabel |
Óëdvp Ïà¹ØÁªµÄ²ßÂÔ±ê¼Ç |
|
vp |
Á´½ÓÄ¿µÄ vnode | |
label |
Óëvp Ïà¹ØÁªµÄ²ßÂÔ±ê¼Ç |
|
cnp |
½«±»´´½¨µÄÁ´½Ó¶ÔÓ¦µÄ³ÉÔ±Ãû |
¡¡¡¡È·¶¨Ïà¹ØÖ÷ÌåÊÇ·ñÓÐȨΪ²ÎÊývp
¸ø¶¨µÄ vnode
´´½¨Ò»¸öÓɲÎÊýcnp
¸ø¶¨Ãû×ÖµÄÁ´½Ó¡£
mpo_check_vnode_mmap
²ÎÊý | ˵Ã÷ | Ëø¶¨ |
---|---|---|
cred |
Ö÷ÌåÐÅÈÎ×´ | |
vp |
½«±»Ó³ÉäµÄ vnode | |
label |
Óëvp Ïà¹ØÁªµÄ²ßÂÔ±ê¼Ç |
|
prot |
mmap ±£»¤ (²Î¼û mmap(2)) |
¡¡¡¡È·¶¨Ïà¹ØÖ÷ÌåÊÇ·ñÓÐȨ½«¸ø¶¨ vnode vp
ÒÔ prot
Ö¸¶¨µÄ±£»¤·½Ê½½øÐÐÓ³Éä.
mpo_check_vnode_mmap_downgrade
void mpo_check_vnode_mmap_downgrade
(struct ucred
*cred, struct vnode *vp, struct label *label, int *prot);
²ÎÊý | ˵Ã÷ | Ëø¶¨ |
---|---|---|
cred |
See µÚ 6.7.4.37 ½Ú. | |
vp |
||
label |
||
prot |
½«±»½µ¼¶µÄ mmap protections |
¡¡¡¡¸ù¾ÝÖ÷ÌåºÍ¿ÍÌå±ê¼Ç£¬½µµÍ mmap protections¡£
mpo_check_vnode_mprotect
¡¡¡¡È·¶¨Ïà¹ØÖ÷ÌåÊÇ·ñÓÐȨ½«¸ø¶¨ vnodevp
Ó³ÉäÄÚ´æ¿Õ¼äµÄ´æ´¢±£»¤²ÎÊýÉèÖÃΪָ¶¨Öµ¡£
mpo_check_vnode_poll
int mpo_check_vnode_poll
(struct ucred *active_cred,
struct ucred *file_cred, struct vnode *vp, struct label *label);
²ÎÊý | ˵Ã÷ | Ëø¶¨ |
---|---|---|
active_cred |
Ö÷ÌåÐÅÈÎ×´ | |
file_cred |
Óëstruct fileÏà¹ØÁªµÄÐÅÈÎ×´ | |
vp |
½«±»Ö´ÐÐ poll ²Ù×÷µÄ vnode | |
label |
Óëvp Ïà¹ØÁªµÄ²ßÂÔ±ê¼Ç |
¡¡¡¡È·¶¨Ïà¹ØÖ÷ÌåÊÇ·ñÓÐȨ¶Ô¸ø¶¨ vnode vp
Ö´ÐÐ poll
²Ù×÷¡£
mpo_check_vnode_rename_from
int mpo_vnode_rename_from
(struct ucred *cred,
struct vnode *dvp, struct label *dlabel, struct vnode *vp, struct label *label, struct
componentname *cnp);
²ÎÊý | ˵Ã÷ | Ëø¶¨ |
---|---|---|
cred |
Ö÷ÌåÐÅÈÎ×´ | |
dvp |
Ŀ¼ vnode | |
dlabel |
Óëdvp Ïà¹ØÁªµÄ²ßÂÔ±ê¼Ç |
|
vp |
½«±»ÖØÃüÃûµÄ vnode | |
label |
Óëvp Ïà¹ØÁªµÄ²ßÂÔ±ê¼Ç |
|
cnp |
vp ÖеijÉÔ±Ãû |
¡¡¡¡È·¶¨Ïà¹ØÖ÷ÌåÊÇ·ñÓÐÈ¨ÖØÃüÃû¸ø¶¨vnode£¬vp
¡£
mpo_check_vnode_rename_to
int mpo_check_vnode_rename_to
(struct ucred *cred,
struct vnode *dvp, struct label *dlabel, struct vnode *vp, struct label *label, int
samedir, struct componentname *cnp);
²ÎÊý | ˵Ã÷ | Ëø¶¨ |
---|---|---|
cred |
Ö÷ÌåÐÅÈÎ×´ | |
dvp |
Ŀ¼ vnode | |
dlabel |
Óëdvp Ïà¹ØÁªµÄ²ßÂÔ±ê¼Ç |
|
vp |
±»¸²¸ÇµÄ vnode | |
label |
Óëvp Ïà¹ØÁªµÄ²ßÂÔ±ê¼Ç |
|
samedir |
²¼¶ûÐͱäÁ¿£»Èç¹ûÔ´ºÍÄ¿µÄĿ¼ÊÇÏàͬµÄ£¬Ôò±»ÖÃΪ1 | |
cnp |
Ä¿±êcomponentÃû |
¡¡¡¡È·¶¨Ïà¹ØÖ÷ÌåÊÇ·ñÓÐÈ¨ÖØÃüÃû¸ø¶¨ vnode vp
£¬ÖÁÖ¸¶¨Ä¿Â¼
dvp
£¬»ò¸üÃûΪcnp
¡£Èç¹ûÎÞÐ踲¸ÇÒÑÓÐÎļþ£¬ Ôòvp
ºÍ
label
µÄÖµ½«Îª NULL.
mpo_check_socket_listen
¡¡¡¡È·¶¨Ïà¹ØÖ÷ÌåÊÇ·ñÓÐȨ¼àÌý¸ø¶¨Ì×½Ó×Ö¡£ ³É¹¦£¬Ôò·µ»Ø0£»·ñÔò£¬·µ»Ø´íÎó±àÂëÖµerrno
¡£
½¨ÒéʹÓõĴíÎó±àÂ룺EACCES£¬ÓÃÓÚ±ê¼Ç²»Æ¥Å䣻 EPERM£¬ÓÃÓÚȨÏÞ²»¹»¡£
mpo_check_vnode_lookup
int mpo_check_vnode_lookup
(struct ucred *cred,
struct vnode *dvp, struct label *dlabel, struct componentname *cnp);
¡¡¡¡È·¶¨Ïà¹ØÖ÷ÌåÐÅÈÎ×´ÊÇ·ñÓÐȨÔÚ¸ø¶¨µÄĿ¼ vnode ÖÐΪ²éÕÒ¸ø¶¨Ãû×ÖÖ´ÐÐlookup²Ù×÷¡£
³É¹¦£¬Ôò·µ»Ø 0£»·ñÔò£¬·µ»ØÒ»¸ö errno
Öµ¡£ ½¨ÒéʹÓõĴíÎó±àÂ룺EACCES£¬ÓÃÓÚ±ê¼Ç²»Æ¥Å䣻 EPERM£¬ÓÃÓÚȨÏÞ²»¹»¡£
mpo_check_vnode_open
²ÎÊý | ˵Ã÷ | Ëø¶¨ |
---|---|---|
cred |
Ö÷ÌåÐÅÈÎ×´ | |
vp |
¿ÍÌ壻vnode | |
label |
vp µÄ²ßÂÔ±ê¼Ç |
|
acc_mode |
open(2) ·ÃÎÊģʽ |
¡¡¡¡È·¶¨Ïà¹ØÖ÷ÌåÐÅÈÎ×´ÊÇ·ñÓÐȨÔÚ¸ø¶¨ vnode ÉÏÒÔ¸ø¶¨µÄ·ÃÎÊģʽִÐÐ open ²Ù×÷¡£ Èç¹û³É¹¦£¬Ôò·µ»Ø 0£»·ñÔò£¬·µ»ØÒ»¸ö´íÎó±àÂë¡£ ½¨ÒéʹÓõĴíÎó±àÂ룺EACCES£¬ÓÃÓÚ±ê¼Ç²»Æ¥Å䣻 EPERM£¬ÓÃÓÚȨÏÞ²»¹»¡£
mpo_check_vnode_readdir
¡¡¡¡È·¶¨Ïà¹ØÖ÷ÌåÐÅÈÎ×´ÊÇ·ñÓÐȨÔÚ¸ø¶¨µÄĿ¼ vnode ÉÏÖ´ÐÐ readdir
²Ù×÷¡£ ³É¹¦£¬Ôò·µ»Ø 0£»·ñÔò£¬·µ»ØÒ»¸ö´íÎó±àÂë errno
¡£
½¨ÒéʹÓõĴíÎó±àÂ룺EACCES£¬ÓÃÓÚ±ê¼Ç²»Æ¥Å䣻EPERM£¬ÓÃÓÚȨÏÞ²»¹»¡£
mpo_check_vnode_readlink
¡¡¡¡È·¶¨Ïà¹ØÖ÷ÌåÐÅÈÎ×´ÊÇ·ñÓÐȨÔÚ¸ø¶¨·ûºÅÁ´½Ó vnode ÉÏÖ´ÐÐ readlink
²Ù×÷¡£³É¹¦£¬Ôò·µ»Ø 0£»·ñÔò£¬·µ»ØÒ»¸öerrno
Öµ¡£
½¨ÒéʹÓõĴíÎó±àÂ룺EACCES£¬ÓÃÓÚ±ê¼Ç²»Æ¥Å䣻EPERM£¬ÓÃÓÚȨÏÞ²»¹»¡£
¸Ãº¯Êý¿ÉÄÜÔÚÈô¸É»·¾³Ï±»µ÷Ó㬰üÀ¨ÓÉÓû§½ø³ÌÏÔʽִÐÐµÄ readlink
µ÷Ó㬠»òÕßÊÇÔÚ½ø³ÌÖ´ÐÐÃû×Ö²éѯʱÒþʽִÐÐµÄ readlink
¡£
mpo_check_vnode_revoke
¡¡¡¡È·¶¨Ïà¹ØÖ÷ÌåÐÅÈÎ×´ÊÇ·ñÓÐȨ³·Ïú¶Ô¸ø¶¨ vnode µÄ·ÃÎÊ¡£ ³É¹¦£¬Ôò·µ»Ø 0£»·ñÔò£¬·µ»ØÒ»¸öerrno
Öµ¡£
½¨ÒéʹÓõĴíÎó±àÂ룺EACCES£¬ÓÃÓÚ±ê¼Ç²»Æ¥Å䣻EPERM£¬ÓÃÓÚȨÏÞ²»¹»¡£
mpo_check_vnode_setacl
int mpo_check_vnode_setacl
(struct ucred *cred,
struct vnode *vp, struct label *label, acl_type_t type, struct acl *acl);
¡¡¡¡È·¶¨Ïà¹ØÖ÷ÌåÐÅÈÎ×´ÊÇ·ñÓÐȨÉèÖøø¶¨ vnode µÄ¸ø¶¨ÀàÐ굀 ACL¡£ ³É¹¦£¬Ôò·µ»Ø
0£»·ñÔò£¬·µ»ØÒ»¸öerrno
Öµ¡£
½¨ÒéʹÓõĴíÎó±àÂ룺EACCES£¬ÓÃÓÚ±ê¼Ç²»Æ¥Å䣻EPERM£¬ÓÃÓÚȨÏÞ²»¹»¡£
mpo_check_vnode_setextattr
int mpo_check_vnode_setextattr
(struct ucred *cred,
struct vnode *vp, struct label *label, int attrnamespace, const char *name, struct uio
*uio);
²ÎÊý | ˵Ã÷ | Ëø¶¨ |
---|---|---|
cred |
Ö÷ÌåÐÅÈÎ×´ | |
vp |
¿ÍÌ壻vnode | |
label |
vp µÄ²ßÂÔ±ê¼Ç |
|
attrnamespace |
À©Õ¹ÊôÐÔÃû×Ö¿Õ¼ä | |
name |
À©Õ¹ÊôÐÔÃû | |
uio |
I/O ½á¹¹Ö¸Õ룻²Î¼û uio(9) |
¡¡¡¡È·¶¨Ïà¹ØÖ÷ÌåÐÅÈÎ×´ÊÇ·ñÓÐȨÉèÖøø¶¨ vnode Éϸø¶¨Ãû×Ö¿Õ¼äÖиø¶¨Ãû×ÖµÄÀ©Õ¹ÊôÐÔµÄÖµ¡£
ʹÓÃÀ©Õ¹ÊôÐÔ±¸·Ý°²È«±ê¼ÇµÄ²ßÂÔÄ£¿é¿ÉÄÜÐèÒª¶ÔÆäʹÓõÄÊôÐÔʵʩ¶îÍâµÄ±£»¤¡£ÁíÍ⣬
ÓÉÓÚÔÚ¼ì²éºÍʵ¼Ê²Ù×÷ʱ¼ä¿ÉÄÜ´æÔڵľºÕù£¬ ²ßÂÔÄ£¿éÓ¦¸Ã±ÜÃâ¸ù¾ÝÀ´×Ôuio
ÖеÄÊý¾Ý×ö³ö¾ö²ß¡£ Èç¹ûÕýÔÚÖ´ÐÐÒ»¸öɾ³ý²Ù×÷£¬Ôò²ÎÊý uio
µÄÖµÒ²¿ÉÄÜΪ NULL¡£ ³É¹¦£¬Ôò·µ»Ø
0£»·ñÔò£¬·µ»ØÒ»¸öerrno
Öµ¡£
½¨ÒéʹÓõĴíÎó±àÂ룺EACCES£¬ÓÃÓÚ±ê¼Ç²»Æ¥Å䣻EPERM£¬ÓÃÓÚȨÏÞ²»¹»¡£
mpo_check_vnode_setflags
int mpo_check_vnode_setflags
(struct ucred *cred,
struct vnode *vp, struct label *label, u_long flags);
²ÎÊý | ˵Ã÷ | Ëø¶¨ |
---|---|---|
cred |
Ö÷ÌåÐÅÈÎ×´ | |
vp |
¿ÍÌ壻vnode | |
label |
vp µÄ²ßÂÔ±ê¼Ç |
|
flags |
Îļþ±êÖ¾£»²Î¼û chflags(2) |
¡¡¡¡È·¶¨Ïà¹ØÖ÷ÌåÐÅÈÎ×´ÊÇ·ñÓÐȨΪ¸ø¶¨µÄ vnode ÉèÖøø¶¨µÄ±êÖ¾¡£ ³É¹¦£¬Ôò·µ»Ø
0£»·ñÔò£¬·µ»ØÒ»¸öerrno
Öµ¡£
½¨ÒéʹÓõĴíÎó±àÂ룺EACCES£¬ÓÃÓÚ±ê¼Ç²»Æ¥Å䣻 EPERM£¬ÓÃÓÚȨÏÞ²»¹»¡£
mpo_check_vnode_setmode
int mpo_check_vnode_setmode
(struct ucred *cred,
struct vnode *vp, struct label *label, mode_t mode);
²ÎÊý | ˵Ã÷ | Ëø¶¨ |
---|---|---|
cred |
Ö÷ÌåÐÅÈÎ×´ | |
vp |
¿ÍÌ壻vnode | |
label |
vp µÄ²ßÂÔ±ê¼Ç |
|
mode |
Îļþģʽ£»²Î¼û chmod(2) |
¡¡¡¡È·¶¨Ïà¹ØÖ÷ÌåÐÅÈÎ×´ÊÇ·ñÓÐȨ½«¸ø¶¨ vnode µÄģʽÉèÖÃΪ¸ø¶¨Öµ¡£ ³É¹¦£¬Ôò·µ»Ø
0£»·ñÔò£¬·µ»ØÒ»¸öerrno
Öµ¡£
½¨ÒéʹÓõĴíÎó±àÂ룺EACCES£¬ÓÃÓÚ±ê¼Ç²»Æ¥Å䣻 EPERM£¬ÓÃÓÚȨÏÞ²»¹»¡£
mpo_check_vnode_setowner
int mpo_check_vnode_setowner
(struct ucred *cred,
struct vnode *vp, struct label *label, uid_t uid, gid_t gid);
¡¡¡¡È·¶¨Ïà¹ØÖ÷ÌåÐÅÈÎ×´ÊÇ·ñÓÐȨ½«¸ø¶¨ vnode µÄÎļþ uid ºÍÎļþ gid
ÉèÖÃΪ¸ø¶¨Öµ¡£Èç¹ûÎÞÐè¸üУ¬ Ïà¹Ø²ÎÊýÖµ¿ÉÄܱ»ÉèÖÃΪ(-1)¡£
³É¹¦£¬Ôò·µ»Ø 0£»·ñÔò£¬·µ»ØÒ»¸öerrno
Öµ¡£ ½¨ÒéʹÓõĴíÎó±àÂ룺EACCES£¬ÓÃÓÚ±ê¼Ç²»Æ¥Å䣻 EPERM£¬ÓÃÓÚȨÏÞ²»¹»¡£
mpo_check_vnode_setutimes
int mpo_check_vnode_setutimes
(struct ucred *cred,
struct vnode *vp, struct label *label, struct timespec atime, struct timespec
mtime);
²ÎÊý | ˵Ã÷ | Ëø¶¨ |
---|---|---|
cred |
Ö÷ÌåÐÅÈÎ×´ | |
vp |
¿ÍÌ壻vp | |
label |
vp µÄ²ßÂÔ±ê¼Ç |
|
atime |
·ÃÎÊʱ¼ä£»²Î¼û utimes(2) | |
mtime |
ÐÞ¸Äʱ¼ä£»²Î¼û utimes(2) |
¡¡¡¡È·¶¨Ïà¹ØÖ÷ÌåÐÅÈÎ×´ÊÇ·ñÓÐȨ½«¸ø¶¨ vnode µÄ·ÃÎÊʱ¼ä±êÇ©ÉèÖÃΪ¸ø¶¨Öµ¡£ ³É¹¦£¬Ôò·µ»Ø
0£»·ñÔò£¬·µ»ØÒ»¸öerrno
Öµ¡£
½¨ÒéʹÓõĴíÎó±àÂ룺EACCES£¬ÓÃÓÚ±ê¼Ç²»Æ¥Å䣻 EPERM£¬ÓÃÓÚȨÏÞ²»¹»¡£
mpo_check_proc_sched
¡¡¡¡È·¶¨Ïà¹ØÖ÷ÌåÐÅÈÎ×´ÊÇ·ñÓÐȨ¸Ä±ä¸ø¶¨½ø³ÌµÄµ÷¶È²ÎÊý¡£ ³É¹¦£¬Ôò·µ»Ø 0£»·ñÔò£¬·µ»ØÒ»¸öerrno
Öµ¡£
½¨ÒéʹÓõĴíÎó±àÂ룺EACCES£¬ÓÃÓÚ±ê¼Ç²»Æ¥Å䣻 EPERM£¬ÓÃÓÚȨÏÞ²»¹»£» ESRCH£¬ÓÃÓÚÌṩ²»¿É¼ûÐÔÖÊ¡£
¡¡¡¡See setpriority(2) for more information.
mpo_check_proc_signal
²ÎÊý | ˵Ã÷ | Ëø¶¨ |
---|---|---|
cred |
Ö÷ÌåÐÅÈÎ×´ | |
proc |
¿ÍÌ壻½ø³Ì | |
signal |
Ðźţ»²Î¼û kill(2) |
¡¡¡¡È·¶¨Ïà¹ØÖ÷ÌåÐÅÈÎ×´ÊÇ·ñÓÐȨÏò¸ø¶¨½ø³Ì·¢Ë͸ø¶¨Ðźš£ ³É¹¦£¬Ôò·µ»Ø 0£»·ñÔò£¬·µ»ØÒ»¸öerrno
Öµ¡£
½¨ÒéʹÓõĴíÎó±àÂ룺EACCES£¬ ÓÃÓÚ±ê¼Ç²»Æ¥Å䣻EPERM£¬ÓÃÓÚȨÏÞ²»¹»£» ESRCH£¬ÓÃÓÚÌṩ²»¿É¼ûÐÔÖÊ¡£
mpo_check_vnode_stat
¡¡¡¡È·¶¨Ïà¹ØÖ÷ÌåÐÅÈÎ×´ÊÇ·ñÓÐȨÔÚ¸ø¶¨ vnode ÉÏÖ´ÐÐ stat
²Ù×÷¡£ ³É¹¦£¬Ôò·µ»Ø 0£»·ñÔò£¬·µ»ØÒ»¸öerrno
Öµ¡£ ½¨ÒéʹÓõĴíÎó±àÂ룺EACCES£¬ÓÃÓÚ±ê¼Ç²»Æ¥Å䣻 EPERM£¬ÓÃÓÚȨÏÞ²»¹»¡£
¡¡¡¡See stat(2) for more information.
mpo_check_ifnet_transmit
int mpo_check_ifnet_transmit
(struct ucred *cred,
struct ifnet *ifnet, struct label *ifnetlabel, struct mbuf *mbuf, struct label
*mbuflabel);
²ÎÊý | ˵Ã÷ | Ëø¶¨ |
---|---|---|
cred |
Ö÷ÌåÐÅÈÎ×´ | |
ifnet |
ÍøÂç½Ó¿Ú | |
ifnetlabel |
ifnet µÄ²ßÂÔ±ê¼Ç |
|
mbuf |
¿ÍÌ壻½«±»·¢Ë굀 mbuf | |
mbuflabel |
mbuf µÄ²ßÂÔ±ê¼Ç |
¡¡¡¡È·¶¨Ïà¹ØÍøÂç½Ó¿ÚÊÇ·ñÓÐȨ´«Ë͸ø¶¨µÄ mbuf¡£³É¹¦£¬Ôò·µ»Ø 0£» ·ñÔò£¬·µ»ØÒ»¸öerrno
Öµ¡£
½¨ÒéʹÓõĴíÎó±àÂ룺EACCES£¬ÓÃÓÚ±ê¼Ç²»Æ¥Å䣻 EPERM£¬ÓÃÓÚȨÏÞ²»¹»¡£
mpo_check_socket_deliver
int mpo_check_socket_deliver
(struct ucred *cred,
struct ifnet *ifnet, struct label *ifnetlabel, struct mbuf *mbuf, struct label
*mbuflabel);
²ÎÊý | ˵Ã÷ | Ëø¶¨ |
---|---|---|
cred |
Ö÷ÌåÐÅÈÎ×´ | |
ifnet |
ÍøÂç½Ó¿Ú | |
ifnetlabel |
ifnet µÄ²ßÂÔ±ê¼Ç |
|
mbuf |
¿ÍÌ壻½«±»´«Ë굀 mbuf | |
mbuflabel |
mbuf µÄ²ßÂÔ±ê¼Ç |
¡¡¡¡È·¶¨Ïà¹ØÌ×½Ó×ÖÊÇ·ñÓÐȨ´Ó¸ø¶¨µÄ mbuf ÖнÓÊÕÊý¾Ý±¨¡£ ³É¹¦£¬Ôò·µ»Ø 0£»·ñÔò£¬·µ»ØÒ»¸öerrno
Öµ¡£
½¨ÒéʹÓõĴíÎó±àÂ룺EACCES£¬ÓÃÓÚ±ê¼Ç²»Æ¥Å䣻 EPERM£¬ÓÃÓÚȨÏÞ²»¹»¡£
mpo_check_socket_visible
¡¡¡¡È·¶¨Ïà¹ØÖ÷ÌåÐÅÈÎ×´cred ÊÇ·ñÓÐȨʹÓÃϵͳ¼à¿Øº¯Êý£¬±ÈÈ磬 ÓÉnetstat(8) ºÍ sockstat(1)ʹÓõijÌÐòÀ´¹Û²ì
¸ø¶¨µÄÌ×½Ó×Ö(socket
)¡£³É¹¦£¬ Ôò·µ»Ø 0£»·ñÔò£¬·µ»ØÒ»¸öerrno
Öµ¡£
½¨ÒéʹÓõĴíÎó±àÂ룺EACCES£¬ÓÃÓÚ±ê¼Ç²»Æ¥Å䣻 EPERM£¬ÓÃÓÚȨÏÞ²»¹»£» ESRCH£¬ÓÃÓÚÌṩ²»¿É¼ûÐÔÖÊ¡£
mpo_check_system_acct
²ÎÊý | ˵Ã÷ | Ëø¶¨ |
---|---|---|
ucred |
Ö÷ÌåÐÅÈÎ×´ | |
vp |
Éó¼ÆÎļþ£»acct(5) | |
vlabel |
Óëvp Ïà¹ØÁªµÄ±ê¼Ç |
¡¡¡¡¸ù¾ÝÖ÷Ìå±ê¼ÇºÍÉó¼ÆÈÕÖ¾ÎļþµÄ±ê¼Ç£¬È·¶¨¸ÃÖ÷ÌåÊÇ·ñÓÐȨÆô¶¯É󼯡£
mpo_check_system_nfsd
¡¡¡¡È·¶¨Ïà¹ØÖ÷ÌåÊÇ·ñÓÐȨµ÷Óà nfssvc(2)¡£
mpo_check_system_reboot
²ÎÊý | ˵Ã÷ | Ëø¶¨ |
---|---|---|
cred |
Ö÷ÌåÐÅÈÎ×´ | |
howto |
À´×Ô reboot(2)µÄhowto ²ÎÊý |
¡¡¡¡È·¶¨Ïà¹ØÖ÷ÌåÊÇ·ñÓÐȨÒÔÖ¸¶¨·½Ê½ÖØÆôϵͳ¡£
mpo_check_system_settime
¡¡¡¡È·¶¨Ïà¹ØÓû§ÊÇ·ñÓÐȨÉèÖÃϵͳʱÖÓ¡£
mpo_check_system_swapon
¡¡¡¡È·¶¨Ïà¹ØÖ÷ÌåÊÇ·ñÓÐȨÔö¼ÓÒ»¸ö×÷ΪswapÉ豸µÄ vp
¡£
mpo_check_system_sysctl
int mpo_check_system_sysctl
(struct ucred *cred, int
*name, u_int *namelen, void *old, size_t *oldlenp, int inkernel, void *new, size_t
newlen);
²ÎÊý | ˵Ã÷ | Ëø¶¨ |
---|---|---|
cred |
Ö÷ÌåÐÅÈÎ×´ | |
name |
²Î¼û sysctl(3) | |
namelen |
||
old |
||
oldlenp |
||
inkernel |
²¼¶ûÐͱäÁ¿£»Èç¹û´ÓÄں˱»µ÷Óã¬ÆäÖµ±»ÖÃΪ1 | |
new |
²Î¼û sysctl(3) | |
newlen |
¡¡¡¡È·¶¨Ïà¹ØÖ÷ÌåÊÇ·ñÓ¦¸Ã±»ÔÊÐíÖ´ÐÐÖ¸¶¨µÄ sysctl(3) ÊÂÎñ¡£
¡¡¡¡µ±Óû§½ø³ÌÇëÇó¶Ôij¸ö¶ÔÏóµÄ±ê¼Ç½øÐÐÐÞ¸Äʱ£¬½«Òý·¢ÖØÐ±ê¼Çʼþ¡£¶ÔÓ¦µÄ¸üвÙ×÷·ÖÁ½²½½øÐУº Ê×ÏÈ£¬½øÐзÃÎÊ¿ØÖƼì²é£¬È·Èϴ˴θüвÙ×÷ÊÇÓÐЧÇÒ±»ÔÊÐíµÄ£»È»ºó£¬µ÷ÓÃÁíÒ»¸ö¶ÀÁ¢µÄÈë¿Úº¯Êý¶Ô±ê¼Ç½øÐÐÐ޸ġ£ ÖØÐ±ê¼ÇÈë¿Úº¯Êýͨ³£½ÓÊÕÓÉÇëÇó½ø³ÌÌá½»µÄ¶ÔÏó¡¢¶ÔÏó±ê¼ÇÖ¸ÕëºÍÇëÇóбê¼Ç£¬×÷ΪÊäÈë²ÎÊý¡£ ¶ÔÏóÖØÐ±ê¼Ç²Ù×÷µÄʧ°Ü½«ÓÉÏÈÆÚµÄ±ê¼Ç¼ì²é±¨¸æ£¬ËùÒÔ£¬²»ÔÊÐíÔÚ½ÓÏÂÀ´µÄ±ê¼ÇÐ޸Ĺý³ÌÖб¨¸æÊ§°Ü£¬¹Ê¶ø²»ÌᳫÔڴ˹ý³ÌÖÐзÖÅäÄÚ´æ¡£
±¾ÎĵµºÍÆäËüÎĵµ¿É´ÓÕâÀïÏÂÔØ£ºftp://ftp.FreeBSD.org/pub/FreeBSD/doc/.
Èç¹û¶ÔÓÚFreeBSDÓÐÎÊÌ⣬ÇëÏÈÔĶÁÎĵµ£¬Èç²»Äܽâ¾öÔÙÁªÏµ<questions@FreeBSD.org>.
¹ØÓÚ±¾ÎĵµµÄÎÊÌâÇë·¢ÐÅÁªÏµ <doc@FreeBSD.org>.