netdevice

Autres langues

Langue: ja

Version: 1999-05-02 (openSuse - 09/10/07)

Section: 7 (Divers)

̾Á°

netdevice - Linux ¥Í¥Ã¥È¥ï¡¼¥¯¥Ç¥Ð¥¤¥¹¤Ø¤ÎÄã¥ì¥Ù¥ë¥¢¥¯¥»¥¹

½ñ¼°

#include <sys/ioctl.h>
#include <net/if.h>

ÀâÌÀ

¤³¤Î man ¥Ú¡¼¥¸¤Ç¤Ï¡¢¥Í¥Ã¥È¥ï¡¼¥¯¥Ç¥Ð¥¤¥¹¤òÀßÄꤹ¤ë¤¿¤á¤Ë ÍѤ¤¤ë¥½¥±¥Ã¥È¥¤¥ó¥¿¡¼¥Õ¥§¡¼¥¹¤Ë¤Ä¤¤¤Æ²òÀ⤹¤ë¡£

Linux ¤Ï¥Í¥Ã¥È¥ï¡¼¥¯¥Ç¥Ð¥¤¥¹¤òÀßÄꤹ¤ë¤¿¤á¤Îɸ½àŪ¤Ê ioctl ¤ò ¤¤¤¯¤Ä¤«È÷¤¨¤Æ¤¤¤ë¡£¤³¤ì¤é¤Ï¤É¤ó¤Ê¥½¥±¥Ã¥È¤Î¥Õ¥¡¥¤¥ë¥Ç¥£¥¹¥¯¥ê¥×¥¿¤Ë¤â ÍѤ¤¤ë¤³¤È¤¬¤Ç¤­¤ë¡£¥Õ¥¡¥ß¥ê¡¼¤ä¥¿¥¤¥×¤Ï²¿¤Ç¤â¤è¤¤¡£ ¤³¤ì¤é¤Î ioctl ¤Ï ifreq ¹½Â¤ÂΤòÅϤ¹¡£


struct ifreq {

    char ifr_name[IFNAMSIZ]; /* Interface name */

    union {

        struct sockaddr ifr_addr;

        struct sockaddr ifr_dstaddr;

        struct sockaddr ifr_broadaddr;

        struct sockaddr ifr_netmask;

        struct sockaddr ifr_hwaddr;

        short           ifr_flags;

        int             ifr_ifindex;

        int             ifr_metric;

        int             ifr_mtu;

        struct ifmap    ifr_map;

        char            ifr_slave[IFNAMSIZ];

        char            ifr_newname[IFNAMSIZ];

        char *          ifr_data;

    };

};



struct ifconf {

    int                ifc_len; /* size of buffer */

    union {

        char *         ifc_buf; /* buffer address */

        struct ifreq * ifc_req; /* array of structures */

    };

};

Ä̾¥æ¡¼¥¶¡¼¤Ë¤è¤ëÀßÄêÂоݥǥХ¤¥¹¤Î»ØÄê¤Ï¡¢ ifr_name ¤Ë¥¤¥ó¥¿¡¼¥Õ¥§¡¼¥¹¤Î̾Á°¤ò¥»¥Ã¥È¤¹¤ë¤³¤È¤Ë¤è¤Ã¤Æ¹Ô¤¦¡£ ¾¤Î¹½Â¤ÂΤÎÁ´¤Æ¤Î¥á¥ó¥Ð¤Ï¡¢¥á¥â¥ê¤ò¶¦Í­¤¹¤ë¡£

ioctl

¡ÖÆø¢¤¬É¬Íספȵ­½Ò¤µ¤ì¤Æ¤¤¤ë ioctl ¤ò¼Â¹Ô¤¹¤ë¤Ë¤Ï¡¢ ¼Â¸ú¥æ¡¼¥¶¡¼ ID ¤¬ 0 ¤«¡¢ CAP_NET_ADMIN ¸¢¸Â¤¬É¬ÍפǤ¢¤ë¡£¤³¤ì¤¬Ëþ¤¿¤µ¤ì¤Æ¤¤¤Ê¤¤¾ì¹ç¤Ï EPERM ¤¬ÊÖ¤µ¤ì¤ë¡£
SIOCGIFNAME
ifr_ifindex ¤ò¼õ¤±¼è¤ê¡¢¥¤¥ó¥¿¡¼¥Õ¥§¡¼¥¹¤Î̾Á°¤ò ifr_name ¤ËÆþ¤ì¤ÆÊÖ¤¹¡£¤³¤ì¤Ï·ë²Ì¤ò ifr_name ¤È¤·¤ÆÊÖ¤¹Í£°ì¤Î ioctl ¤Ç¤¢¤ë¡£
SIOCGIFINDEX
¥¤¥ó¥¿¡¼¥Õ¥§¡¼¥¹¤Î interface index ¤ò¼èÆÀ¤·¡¢ ifr_ifindex ¤ËÆþ¤ì¤ÆÊÖ¤¹¡£
SIOCGIFFLAGS, SIOCSIFFLAGS
¥Ç¥Ð¥¤¥¹¤Î active ¥Õ¥é¥°¥ï¡¼¥É¤ò¼èÆÀ¤Þ¤¿¤ÏÀßÄꤹ¤ë¡£ ifr_flags ¤Ë¤Ï°Ê²¼¤ÎÃͤΥӥåȥޥ¹¥¯¤¬Æþ¤ë¡£
¥Ç¥Ð¥¤¥¹¥Õ¥é¥°
IFF_UP ¥¤¥ó¥¿¡¼¥Õ¥§¡¼¥¹¤ÏÆ°ºîÃæ¡£
IFF_BROADCAST Í­¸ú¤Ê¥Ö¥í¡¼¥É¥­¥ã¥¹¥È¥¢¥É¥ì¥¹¤¬¥»¥Ã¥È¤µ¤ì¤Æ¤¤¤ë¡£
IFF_DEBUG ÆâÉô¤Î¥Ç¥Ð¥Ã¥°¥Õ¥é¥°¡£
IFF_LOOPBACK ¥¤¥ó¥¿¡¼¥Õ¥§¡¼¥¹¤Ï¥ë¡¼¥×¥Ð¥Ã¥¯¤Ç¤¢¤ë¡£
IFF_POINTOPOINT ¥¤¥ó¥¿¡¼¥Õ¥§¡¼¥¹¤Ï point-to-point ¥ê¥ó¥¯¤Ç¤¢¤ë¡£
IFF_RUNNING ¥ê¥½¡¼¥¹¤¬³ä¤êÅö¤ÆºÑ¤ß¡£
IFF_NOARP arp ¥×¥í¥È¥³¥ë¤¬¤Ê¤¤¡£
IFF_PROMISC ¥¤¥ó¥¿¡¼¥Õ¥§¡¼¥¹¤Ï promiscuous ¥â¡¼¥É¤Ç¤¢¤ë¡£
IFF_NOTRAILERS trailer ¤ÎÍøÍѤòÈò¤±¤ë¡£
IFF_ALLMULTI Á´¤Æ¤Î¥Þ¥ë¥Á¥­¥ã¥¹¥È¥Ñ¥±¥Ã¥È¤ò¼õ¿®¤¹¤ë¡£
IFF_MASTER Éé²Ùʬ»¶¥°¥ë¡¼¥×¤Î¥Þ¥¹¥¿¡¼¤Ç¤¢¤ë¡£
IFF_SLAVE Éé²Ùʬ»¶¥°¥ë¡¼¥×¤Î¥¹¥ì¡¼¥Ö¤Ç¤¢¤ë¡£
IFF_MULTICAST ¥Þ¥ë¥Á¥­¥ã¥¹¥È¤ò¥µ¥Ý¡¼¥È¤·¤Æ¤¤¤ë¡£
IFF_PORTSEL ifmap ¤Ë¤è¤Ã¤Æ¥á¥Ç¥£¥¢¥¿¥¤¥×¤òÁªÂò¤Ç¤­¤ë¡£
IFF_AUTOMEDIA ¼«Æ°¥á¥Ç¥£¥¢ÁªÂò¤¬Í­¸ú¤Ë¤Ê¤Ã¤Æ¤¤¤ë¡£
IFF_DYNAMIC ¤³¤Î¥¤¥ó¥¿¡¼¥Õ¥§¡¼¥¹¤¬ÊĤ¸¤ë¤È¡¢¥¢¥É¥ì¥¹¤Ï¼º¤ï¤ì¤ë¡£
acitive ¥Õ¥é¥°¥ï¡¼¥É¤ÎÀßÄê¤ÏÆø¢¤¬É¬ÍפÊÁàºî¤Ç¤¢¤ë¡£ ¤·¤«¤·Æɤ߽Ф·¤Ï¤É¤ó¤Ê¥×¥í¥»¥¹¤«¤é¤â²Äǽ¤Ç¤¢¤ë¡£
SIOCGIFMETRIC, SIOCSIFMETRIC
¥Ç¥Ð¥¤¥¹¤Î¥á¥È¥ê¥Ã¥¯¤ò ifr_metric ¤òÍѤ¤¤Æ¼èÆÀ¡¦ÀßÄꤹ¤ë¡£ ¤³¤ì¤Ï¤Þ¤À¼ÂÁõ¤µ¤ì¤Æ¤¤¤Ê¤¤¡£Æɤ߽Ф½¤¦¤È¤¹¤ë¤È ifr_metric ¤Ë 0 ¤ò¥»¥Ã¥È¤·¤ÆÊ֤ꡢÀßÄꤷ¤è¤¦¤È¤¹¤ë¤È EOPNOTSUPP ¤¬Ê֤롣
SIOCGIFMTU, SIOCSIFMTU
¥Ç¥Ð¥¤¥¹¤Î MTU (Maximum Transfer Unit) ¤ò ifr_mtu ¤òÍѤ¤¤Æ¼èÆÀ¡¦ÀßÄꤹ¤ë¡£ MTU ¤ÎÀßÄê¤ÏÆø¢¤¬É¬ÍפÊÁàºî¤Ç¤¢¤ë¡£ MTU ¤ÎÃͤò¾®¤µ¤¯¤·¤¹¤®¤ë¤È¥«¡¼¥Í¥ë¤¬¥¯¥é¥Ã¥·¥å¤¹¤ë¤«¤â¤·¤ì¤Ê¤¤¡£
SIOCGIFHWADDR, SIOCSIFHWADDR
¥Ç¥Ð¥¤¥¹¤Î¥Ï¡¼¥É¥¦¥§¥¢¥¢¥É¥ì¥¹¤ò ifr_hwaddr ¤òÍѤ¤¤Æ¼èÆÀ¡¦ÀßÄꤹ¤ë¡£ ¥Ï¡¼¥É¥¦¥§¥¢¥¢¥É¥ì¥¹¤Ï sockaddr ¹½Â¤ÂΤËÀßÄꤵ¤ì¤ë¡£ sa_family ¤Ë¤Ï ARPHRD_* ¥Ç¥Ð¥¤¥¹¥¿¥¤¥×¤¬Æþ¤ê¡¢ sa_data ¤Ï¥Ð¥¤¥È 0 ¤«¤é»Ï¤Þ¤ë L2 ¥Ï¡¼¥É¥¦¥§¥¢¥¢¥É¥ì¥¹¤¬Æþ¤ë¡£ ¥Ï¡¼¥É¥¦¥§¥¢¥¢¥É¥ì¥¹¤ÎÀßÄê¤ÏÆø¢¤¬É¬ÍפÊÁàºî¤Ç¤¢¤ë¡£
SIOCSIFHWBROADCAST
¥Ç¥Ð¥¤¥¹¤Î¥Ï¡¼¥É¥¦¥§¥¢¥Ö¥í¡¼¥É¥­¥ã¥¹¥È¥¢¥É¥ì¥¹¤ò ifr_hwaddr ¤ÎÃͤËÀßÄꤹ¤ë¡£¤³¤ÎÁàºî¤Ë¤ÏÆø¢¤¬É¬ÍפǤ¢¤ë¡£
SIOCGIFMAP, SIOCSIFMAP
¥¤¥ó¥¿¡¼¥Õ¥§¡¼¥¹¤Î¥Ï¡¼¥É¥¦¥§¥¢¤Î¥Ñ¥é¥á¡¼¥¿¤ò ifr_map ¤òÍѤ¤¤Æ¼èÆÀ¡¦ÀßÄꤹ¤ë¡£ ¥Ñ¥é¥á¡¼¥¿¤ÎÀßÄê¤ÏÆø¢¤¬É¬ÍפÊÁàºî¤Ç¤¢¤ë¡£

struct ifmap {

    unsigned long   mem_start;

    unsigned long   mem_end;

    unsigned short  base_addr;

    unsigned char   irq;

    unsigned char   dma;

    unsigned char   port;

};

ifmap ¹½Â¤ÂΤβò¼á¤Ï¥Ç¥Ð¥¤¥¹¥É¥é¥¤¥Ð¤È¥¢¡¼¥­¥Æ¥¯¥Á¥ã¤Ë°Í¸¤¹¤ë¡£

SIOCADDMULTI, SIOCDELMULTI
¥Ç¥Ð¥¤¥¹¤Î¥ê¥ó¥¯ÁؤΥޥë¥Á¥­¥ã¥¹¥È¥Õ¥£¥ë¥¿¡¼¤«¤é¡¢ ifr_hwaddr ¤Î¥¢¥É¥ì¥¹¤òÄɲᦺï½ü¤¹¤ë¡£¤³¤ì¤é¤ÎÁàºî¤Ë¤ÏÆø¢¤¬É¬ÍפǤ¢¤ë¡£ ÊÌË¡¤¬ packet(7) ¤Ç²òÀ⤵¤ì¤Æ¤¤¤ë¡£
SIOCGIFTXQLEN, SIOCSIFTXQLEN
¥Ç¥Ð¥¤¥¹¤ÎÁ÷¿®¥­¥å¡¼¤ÎŤµ¤ò ifr_qlen ¤Ë¼èÆÀ¡¦ÀßÄꤹ¤ë¡£Á÷¿®¥­¥å¡¼¤ÎŤµ¤ÎÀßÄê¤Ë¤ÏÆø¢¤¬É¬ÍפǤ¢¤ë¡£
SIOCSIFNAME

ifr_name ¤Ç»ØÄꤷ¤¿¥¤¥ó¥¿¡¼¥Õ¥§¡¼¥¹¤Î̾Á°¤ò ifr_newname ¤ËÊѹ¹¤¹¤ë¡£¤³¤ÎÁàºî¤Ë¤ÏÆø¢¤¬É¬ÍפǤ¢¤ë¡£¥¤¥ó¥¿¡¼¥Õ¥§¡¼¥¹¤¬ up ¤·¤Æ¤¤¤Ê¤¤ »þ¤Ë¤Î¤ß»ÈÍѤǤ­¤ë¡£

SIOCGIFCONF
¥¤¥ó¥¿¡¼¥Õ¥§¡¼¥¹(¥È¥é¥ó¥¹¥Ý¡¼¥ÈÁØ)¥¢¥É¥ì¥¹¤Î¥ê¥¹¥È¤òÊÖ¤¹¡£ ¸½ºß¤Î¤È¤³¤í¡¢¸ß´¹À­¤Î¤¿¤á¤Ë AF_INET (IPv4) ¥Õ¥¡¥ß¥ê¡¼¤Î¥¢¥É¥ì¥¹¤Î¤ß¤Ç¤¢¤ë¡£ ¥æ¡¼¥¶¡¼¤Ï ifconf ¹½Â¤ÂΤò ioctl ¤Î°ú¿ô¤È¤·¤ÆÅϤ¹¡£ ¤³¤ì¤Ë¤Ï ifreq ¹½Â¤ÂΤÎÇÛÎó¤Ø¤Î¥Ý¥¤¥ó¥¿¤Ç¤¢¤ë ifc_req ¤È¡¢¤½¤ÎŤµ¤ò¥Ð¥¤¥Èñ°Ì¤Ç»ØÄꤹ¤ë ifc_len ¤ò´Þ¤à¡£ ¥«¡¼¥Í¥ë¤Ï ifreqs ¤ò¸½ºßÆ°ºî¤·¤Æ¤¤¤ëÁ´¤Æ¤Î L3 ¥¤¥ó¥¿¡¼¥Õ¥§¡¼¥¹¥¢¥É¥ì¥¹¤ÇËä¤á¤ë¡£ ifr_name ¤Ë¤Ï¥¤¥ó¥¿¡¼¥Õ¥§¡¼¥¹Ì¾ (eth0:1 ¤Ê¤É) ¤¬Æþ¤ê¡¢ ifr_addr ¤Ë¤Ï¥¢¥É¥ì¥¹¤¬Æþ¤ë¡£ ¥«¡¼¥Í¥ë¤Ï¼ÂºÝ¤ÎŤµ¤ò ifc_len ¤ËÊÖ¤¹¡£ ifc_len ¤¬¸µ¤Î¥Ð¥Ã¥Õ¥¡¤ÎŤµ¤ÈƱ¤¸¤À¤Ã¤¿¾ì¹ç¡¢ ¥ª¡¼¥Ð¡¼¥Õ¥í¡¼¤òµ¯¤³¤·¤Æ¤¤¤ë²ÄǽÀ­¤¬¤¢¤ë¤Î¤Ç¡¢ Á´¤Æ¤Î¥¢¥É¥ì¥¹¤ò½êÆÀ¤¹¤ë¤¿¤á¤Ë¤è¤êÂ礭¤Ê¥Ð¥Ã¥Õ¥¡¤ÇºÆ»î¹Ô¤¹¤ë¤Ù¤­¤Ç¤¢¤ë¡£ ¥¨¥é¡¼¤¬¤Ê¤«¤Ã¤¿¾ì¹ç¤Ï ioctl ¤Ï 0 ¤òÊÖ¤¹¡£ ¥¨¥é¡¼¤¬¤¢¤Ã¤¿¾ì¹ç¤Ï -1 ¤òÊÖ¤¹¡£ ¥ª¡¼¥Ð¡¼¥Õ¥í¡¼¤Ï¥¨¥é¡¼¤È¤Ï¸«¤Ê¤µ¤ì¤Ê¤¤¡£

¤Û¤È¤ó¤É¤Î¥×¥í¥È¥³¥ë¤Ë¤Ï¡¢ÀìÍѤΥ¤¥ó¥¿¡¼¥Õ¥§¡¼¥¹¥ª¥×¥·¥ç¥ó¤ò ÀßÄꤹ¤ë¤¿¤á¤ÎÆȼ«¤Î ioctl ¤¬Â¸ºß¤¹¤ë¡£ ÀâÌÀ¤Ï³Æ¥×¥í¥È¥³¥ë¤Î man ¥Ú¡¼¥¸¤ò¸«¤è¡£

¤µ¤é¤Ë¡¢¥Ç¥Ð¥¤¥¹¤Ë¤è¤Ã¤Æ¤Ï¥×¥é¥¤¥Ù¡¼¥È¤Ê ioctl ¤¬¤¢¤ë¡£ ¤³¤ì¤é¤Ï¤³¤³¤Ç¤ÏÀâÌÀ¤·¤Ê¤¤¡£

Ãí°Õ

¸·Ì©¤Ë¤¤¤¦¤È¡¢ SIOCGIFCONF ¤Ï IP ¸ÇÍ­¤Ç¤¢¤ê¡¢ ip(7) ¤Ë°¤¹¤ë¡£

¥¢¥É¥ì¥¹¤¬¤Ê¤«¤Ã¤¿¤ê¡¢ IFF_RUNNING ¥Õ¥é¥°¤¬¥»¥Ã¥È¤µ¤ì¤Æ¤¤¤Ê¤¤¥¤¥ó¥¿¡¼¥Õ¥§¡¼¥¹¤Î̾Á°¤Ï /proc/net/dev ¤Ç¸«¤Ä¤±¤ë¤³¤È¤¬½ÐÍè¤ë¡£

¥í¡¼¥«¥ë IPV6 IP ¥¢¥É¥ì¥¹¤Ï /proc/net ¤« rtnetlink(7) ¤Ç¸«¤Ä¤±¤ë¤³¤È¤¬½ÐÍè¤ë¡£

¥Ð¥°

glibc 2.1 ¤Ç¤Ï net/if.h ¤Ë ifr_newname ¥Þ¥¯¥í¤¬¤Ê¤¤¡£ ¤È¤ê¤¢¤¨¤º¤ÎÂбþºö¤È¤·¤Æ¡¢°Ê²¼¤Î¥³¡¼¥É¤òÄɲ䷤Ƥª¤¯¤³¤È¡£

#ifndef ifr_newname

#define ifr_newname     ifr_ifru.ifru_slave

#endif

´ØÏ¢¹àÌÜ

capabilities(7), ip(7), proc(7), rtnetlink(7)