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
net_device_attributes [2018/08/01 14:45] – [/sys/class/net/enp0s25/ files] rpjdaynet_device_attributes [2018/08/01 15:05] (current) rpjday
Line 1: Line 1:
 ===== Overview ===== ===== Overview =====
  
-Discussion about how net cable connect and disconnect are reflected in SYSFS.+Discussion about how net cable connect and disconnect are reflected in ''/sys''.
  
 ===== /sys/class/net/enp3s0/ files ===== ===== /sys/class/net/enp3s0/ files =====
Line 41: Line 41:
 -r--r--r--. 1 root root 4096 Aug  1 10:41 type -r--r--r--. 1 root root 4096 Aug  1 10:41 type
 -rw-r--r--. 1 root root 4096 Aug  1 10:41 uevent -rw-r--r--. 1 root root 4096 Aug  1 10:41 uevent
 +</code>
 +
 +In particular, we care about the attributes that reflect physical connection (note how ''carrier'' is writeable):
 +
 +<code>
 +-rw-r--r--. 1 root root 4096 Aug  1 10:41 carrier      [0 or 1]
 +-r--r--r--. 1 root root 4096 Aug  1 10:41 operstate    [up or down]
 +-rw-r--r--. 1 root root 4096 Aug  1 10:41 flags
 +</code>
 +
 +===== flags =====
 +
 +==== include/uapi/linux/if.h ====
 +
 +<code>
 +/**
 + * enum net_device_flags - &struct net_device flags
 + *
 + * These are the &struct net_device flags, they can be set by drivers, the
 + * kernel and some can be triggered by userspace. Userspace can query and
 + * set these flags using userspace utilities but there is also a sysfs
 + * entry available for all dev flags which can be queried and set. These flags
 + * are shared for all types of net_devices. The sysfs entries are available
 + * via /sys/class/net/<dev>/flags. Flags which can be toggled through sysfs
 + * are annotated below, note that only a few flags can be toggled and some
 + * other flags are always always preserved from the original net_device flags
 + * even if you try to set them via sysfs. Flags which are always preserved
 + * are kept under the flag grouping @IFF_VOLATILE. Flags which are volatile
 + * are annotated below as such.
 + *
 + * You should have a pretty good reason to be extending these flags.
 + *
 + * @IFF_UP: interface is up. Can be toggled through sysfs.
 + * @IFF_BROADCAST: broadcast address valid. Volatile.
 + * @IFF_DEBUG: turn on debugging. Can be toggled through sysfs.
 + * @IFF_LOOPBACK: is a loopback net. Volatile.
 + * @IFF_POINTOPOINT: interface is has p-p link. Volatile.
 + * @IFF_NOTRAILERS: avoid use of trailers. Can be toggled through sysfs.
 +      Volatile.
 + * @IFF_RUNNING: interface RFC2863 OPER_UP. Volatile.
 + * @IFF_NOARP: no ARP protocol. Can be toggled through sysfs. Volatile.
 + * @IFF_PROMISC: receive all packets. Can be toggled through sysfs.
 + * @IFF_ALLMULTI: receive all multicast packets. Can be toggled through
 +      sysfs.
 + * @IFF_MASTER: master of a load balancer. Volatile.
 + * @IFF_SLAVE: slave of a load balancer. Volatile.
 + * @IFF_MULTICAST: Supports multicast. Can be toggled through sysfs.
 + * @IFF_PORTSEL: can set media type. Can be toggled through sysfs.
 + * @IFF_AUTOMEDIA: auto media select active. Can be toggled through sysfs.
 + * @IFF_DYNAMIC: dialup device with changing addresses. Can be toggled
 +      through sysfs.
 + * @IFF_LOWER_UP: driver signals L1 up. Volatile.
 + * @IFF_DORMANT: driver signals dormant. Volatile.
 + * @IFF_ECHO: echo sent packets. Volatile.
 + */
 +enum net_device_flags {
 +        IFF_UP                          = 1<<0,  /* sysfs */
 +        IFF_BROADCAST                   = 1<<1,  /* volatile */
 +        IFF_DEBUG                       = 1<<2,  /* sysfs */
 +        IFF_LOOPBACK                    = 1<<3,  /* volatile */
 +        IFF_POINTOPOINT                 = 1<<4,  /* volatile */
 +        IFF_NOTRAILERS                  = 1<<5,  /* sysfs */
 +        IFF_RUNNING                     = 1<<6,  /* volatile */
 +        IFF_NOARP                       = 1<<7,  /* sysfs */
 +        IFF_PROMISC                     = 1<<8,  /* sysfs */
 +        IFF_ALLMULTI                    = 1<<9,  /* sysfs */
 +        IFF_MASTER                      = 1<<10, /* volatile */
 +        IFF_SLAVE                       = 1<<11, /* volatile */
 +        IFF_MULTICAST                   = 1<<12, /* sysfs */
 +        IFF_PORTSEL                     = 1<<13, /* sysfs */
 +        IFF_AUTOMEDIA                   = 1<<14, /* sysfs */
 +        IFF_DYNAMIC                     = 1<<15, /* sysfs */
 +        IFF_LOWER_UP                    = 1<<16, /* volatile */
 +        IFF_DORMANT                     = 1<<17, /* volatile */
 +        IFF_ECHO                        = 1<<18, /* volatile */
 +};
 +
 +#define IFF_UP                          IFF_UP
 +#define IFF_BROADCAST                   IFF_BROADCAST
 +#define IFF_DEBUG                       IFF_DEBUG
 +#define IFF_LOOPBACK                    IFF_LOOPBACK
 +#define IFF_POINTOPOINT                 IFF_POINTOPOINT
 +#define IFF_NOTRAILERS                  IFF_NOTRAILERS
 +#define IFF_RUNNING                     IFF_RUNNING
 +#define IFF_NOARP                       IFF_NOARP
 +#define IFF_PROMISC                     IFF_PROMISC
 +#define IFF_ALLMULTI                    IFF_ALLMULTI
 +#define IFF_MASTER                      IFF_MASTER
 +#define IFF_SLAVE                       IFF_SLAVE
 +#define IFF_MULTICAST                   IFF_MULTICAST
 +#define IFF_PORTSEL                     IFF_PORTSEL
 +#define IFF_AUTOMEDIA                   IFF_AUTOMEDIA
 +#define IFF_DYNAMIC                     IFF_DYNAMIC
 +#define IFF_LOWER_UP                    IFF_LOWER_UP
 +#define IFF_DORMANT                     IFF_DORMANT
 +#define IFF_ECHO                        IFF_ECHO
 +
 +#define IFF_VOLATILE    (IFF_LOOPBACK|IFF_POINTOPOINT|IFF_BROADCAST|IFF_ECHO|\
 +                IFF_MASTER|IFF_SLAVE|IFF_RUNNING|IFF_LOWER_UP|IFF_DORMANT)
 </code> </code>
  • net_device_attributes.1533134727.txt.gz
  • Last modified: 2018/08/01 14:45
  • by rpjday