Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
Next revision
Previous revision
ifreq_ethtool [2018/09/02 06:24] rpjdayifreq_ethtool [2018/09/02 06:56] (current) – [Userspace and struct ifreq] rpjday
Line 10: Line 10:
  
   * [[https://github.com/torvalds/linux/tree/master/include|include/]]   * [[https://github.com/torvalds/linux/tree/master/include|include/]]
-  * +    * [[https://github.com/torvalds/linux/tree/master/include/uapi|uapi/]] 
 +      * [[https://github.com/torvalds/linux/tree/master/include/uapi/linux|linux/]] 
 +        * [[https://github.com/torvalds/linux/blob/master/include/uapi/linux/if.h|if.h]] (for ''struct ifreq''
 +        * [[https://github.com/torvalds/linux/blob/master/include/uapi/linux/sockios.h|sockios.h]] (for ''SIOCETHTOOL''
 +        * [[https://github.com/torvalds/linux/blob/master/include/uapi/linux/ethtool.h|ethtool.h]] 
 + 
 +===== Userspace and struct ifreq ===== 
 + 
 +From ethtool's ''internal.h'': 
 + 
 +<code> 
 +/* Context for sub-commands */ 
 +struct cmd_context { 
 +        const char *devname;    /* net device name */ 
 +        int fd;                 /* socket suitable for ethtool ioctl */ 
 +        struct ifreq ifr;       /* ifreq suitable for ethtool ioctl */ 
 +        int argc;               /* number of arguments to the sub-command */ 
 +        char **argp;            /* arguments to the sub-command */ 
 +}; 
 +</code> 
 + 
 +and from ''ethtool.c'', the wrapper for ioctl calls: 
 + 
 +<code> 
 +#ifndef TEST_ETHTOOL 
 +int send_ioctl(struct cmd_context *ctx, void *cmd) 
 +
 +        ctx->ifr.ifr_data = cmd; 
 +        return ioctl(ctx->fd, SIOCETHTOOL, &ctx->ifr); 
 +
 +#endif 
 +</code> 
 + 
 +From ''if.h'': 
 + 
 +<code> 
 +/* for compatibility with glibc net/if.h */ 
 +#if __UAPI_DEF_IF_IFREQ 
 +struct ifreq { 
 +#define IFHWADDRLEN     6 
 +        union 
 +        { 
 +                char    ifrn_name[IFNAMSIZ];            /* if name, e.g. "en0" */ 
 +        } ifr_ifrn; 
 + 
 +        union { 
 +                struct  sockaddr ifru_addr; 
 +                struct  sockaddr ifru_dstaddr; 
 +                struct  sockaddr ifru_broadaddr; 
 +                struct  sockaddr ifru_netmask; 
 +                struct  sockaddr ifru_hwaddr; 
 +                short   ifru_flags; 
 +                int     ifru_ivalue; 
 +                int     ifru_mtu; 
 +                struct  ifmap ifru_map; 
 +                char    ifru_slave[IFNAMSIZ];   /* Just fits the size */ 
 +                char    ifru_newname[IFNAMSIZ]; 
 +                void *  ifru_data; 
 +                struct  if_settings ifru_settings; 
 +        } ifr_ifru; 
 +}; 
 +#endif /* __UAPI_DEF_IF_IFREQ */ 
 + 
 +#define ifr_name        ifr_ifrn.ifrn_name      /* interface name       */ 
 +#define ifr_hwaddr      ifr_ifru.ifru_hwaddr    /* MAC address          */ 
 +#define ifr_addr        ifr_ifru.ifru_addr      /* address              */ 
 +#define ifr_dstaddr     ifr_ifru.ifru_dstaddr   /* other end of p-p lnk */ 
 +#define ifr_broadaddr   ifr_ifru.ifru_broadaddr /* broadcast address    */ 
 +#define ifr_netmask     ifr_ifru.ifru_netmask   /* interface net mask   */ 
 +#define ifr_flags       ifr_ifru.ifru_flags     /* flags                */ 
 +#define ifr_metric      ifr_ifru.ifru_ivalue    /* metric               */ 
 +#define ifr_mtu         ifr_ifru.ifru_mtu       /* mtu                  */ 
 +#define ifr_map         ifr_ifru.ifru_map       /* device map           */ 
 +#define ifr_slave       ifr_ifru.ifru_slave     /* slave device         */ 
 +#define ifr_data        ifr_ifru.ifru_data      /* for use by interface */ 
 +#define ifr_ifindex     ifr_ifru.ifru_ivalue    /* interface index      */ 
 +#define ifr_bandwidth   ifr_ifru.ifru_ivalue    /* link bandwidth       */ 
 +#define ifr_qlen        ifr_ifru.ifru_ivalue    /* Queue length         */ 
 +#define ifr_newname     ifr_ifru.ifru_newname   /* New name             */ 
 +#define ifr_settings    ifr_ifru.ifru_settings  /* Device/proto settings*
 +</code>
  • ifreq_ethtool.1535869495.txt.gz
  • Last modified: 2018/09/02 06:24
  • by rpjday