docs: networking: convert operstates.txt to ReST
- add SPDX header; - add a document title; - adjust chapters, adding proper markups; - mark lists as such; - adjust identation, whitespaces and blank lines where needed; - add to networking/index.rst. Signed-off-by: Mauro Carvalho Chehab <mchehab+huawei@kernel.org> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
committed by
David S. Miller
parent
63893472d7
commit
f5c39ef329
@@ -88,6 +88,7 @@ Contents:
|
|||||||
nf_conntrack-sysctl
|
nf_conntrack-sysctl
|
||||||
nf_flowtable
|
nf_flowtable
|
||||||
openvswitch
|
openvswitch
|
||||||
|
operstates
|
||||||
|
|
||||||
.. only:: subproject and html
|
.. only:: subproject and html
|
||||||
|
|
||||||
|
|||||||
@@ -1,5 +1,12 @@
|
|||||||
|
.. SPDX-License-Identifier: GPL-2.0
|
||||||
|
|
||||||
|
==================
|
||||||
|
Operational States
|
||||||
|
==================
|
||||||
|
|
||||||
|
|
||||||
1. Introduction
|
1. Introduction
|
||||||
|
===============
|
||||||
|
|
||||||
Linux distinguishes between administrative and operational state of an
|
Linux distinguishes between administrative and operational state of an
|
||||||
interface. Administrative state is the result of "ip link set dev
|
interface. Administrative state is the result of "ip link set dev
|
||||||
@@ -20,6 +27,7 @@ and changeable from userspace under certain rules.
|
|||||||
|
|
||||||
|
|
||||||
2. Querying from userspace
|
2. Querying from userspace
|
||||||
|
==========================
|
||||||
|
|
||||||
Both admin and operational state can be queried via the netlink
|
Both admin and operational state can be queried via the netlink
|
||||||
operation RTM_GETLINK. It is also possible to subscribe to RTNLGRP_LINK
|
operation RTM_GETLINK. It is also possible to subscribe to RTNLGRP_LINK
|
||||||
@@ -30,16 +38,20 @@ These values contain interface state:
|
|||||||
|
|
||||||
ifinfomsg::if_flags & IFF_UP:
|
ifinfomsg::if_flags & IFF_UP:
|
||||||
Interface is admin up
|
Interface is admin up
|
||||||
|
|
||||||
ifinfomsg::if_flags & IFF_RUNNING:
|
ifinfomsg::if_flags & IFF_RUNNING:
|
||||||
Interface is in RFC2863 operational state UP or UNKNOWN. This is for
|
Interface is in RFC2863 operational state UP or UNKNOWN. This is for
|
||||||
backward compatibility, routing daemons, dhcp clients can use this
|
backward compatibility, routing daemons, dhcp clients can use this
|
||||||
flag to determine whether they should use the interface.
|
flag to determine whether they should use the interface.
|
||||||
|
|
||||||
ifinfomsg::if_flags & IFF_LOWER_UP:
|
ifinfomsg::if_flags & IFF_LOWER_UP:
|
||||||
Driver has signaled netif_carrier_on()
|
Driver has signaled netif_carrier_on()
|
||||||
|
|
||||||
ifinfomsg::if_flags & IFF_DORMANT:
|
ifinfomsg::if_flags & IFF_DORMANT:
|
||||||
Driver has signaled netif_dormant_on()
|
Driver has signaled netif_dormant_on()
|
||||||
|
|
||||||
TLV IFLA_OPERSTATE
|
TLV IFLA_OPERSTATE
|
||||||
|
------------------
|
||||||
|
|
||||||
contains RFC2863 state of the interface in numeric representation:
|
contains RFC2863 state of the interface in numeric representation:
|
||||||
|
|
||||||
@@ -47,26 +59,33 @@ IF_OPER_UNKNOWN (0):
|
|||||||
Interface is in unknown state, neither driver nor userspace has set
|
Interface is in unknown state, neither driver nor userspace has set
|
||||||
operational state. Interface must be considered for user data as
|
operational state. Interface must be considered for user data as
|
||||||
setting operational state has not been implemented in every driver.
|
setting operational state has not been implemented in every driver.
|
||||||
|
|
||||||
IF_OPER_NOTPRESENT (1):
|
IF_OPER_NOTPRESENT (1):
|
||||||
Unused in current kernel (notpresent interfaces normally disappear),
|
Unused in current kernel (notpresent interfaces normally disappear),
|
||||||
just a numerical placeholder.
|
just a numerical placeholder.
|
||||||
|
|
||||||
IF_OPER_DOWN (2):
|
IF_OPER_DOWN (2):
|
||||||
Interface is unable to transfer data on L1, f.e. ethernet is not
|
Interface is unable to transfer data on L1, f.e. ethernet is not
|
||||||
plugged or interface is ADMIN down.
|
plugged or interface is ADMIN down.
|
||||||
|
|
||||||
IF_OPER_LOWERLAYERDOWN (3):
|
IF_OPER_LOWERLAYERDOWN (3):
|
||||||
Interfaces stacked on an interface that is IF_OPER_DOWN show this
|
Interfaces stacked on an interface that is IF_OPER_DOWN show this
|
||||||
state (f.e. VLAN).
|
state (f.e. VLAN).
|
||||||
|
|
||||||
IF_OPER_TESTING (4):
|
IF_OPER_TESTING (4):
|
||||||
Unused in current kernel.
|
Unused in current kernel.
|
||||||
|
|
||||||
IF_OPER_DORMANT (5):
|
IF_OPER_DORMANT (5):
|
||||||
Interface is L1 up, but waiting for an external event, f.e. for a
|
Interface is L1 up, but waiting for an external event, f.e. for a
|
||||||
protocol to establish. (802.1X)
|
protocol to establish. (802.1X)
|
||||||
|
|
||||||
IF_OPER_UP (6):
|
IF_OPER_UP (6):
|
||||||
Interface is operational up and can be used.
|
Interface is operational up and can be used.
|
||||||
|
|
||||||
This TLV can also be queried via sysfs.
|
This TLV can also be queried via sysfs.
|
||||||
|
|
||||||
TLV IFLA_LINKMODE
|
TLV IFLA_LINKMODE
|
||||||
|
-----------------
|
||||||
|
|
||||||
contains link policy. This is needed for userspace interaction
|
contains link policy. This is needed for userspace interaction
|
||||||
described below.
|
described below.
|
||||||
@@ -75,6 +94,7 @@ This TLV can also be queried via sysfs.
|
|||||||
|
|
||||||
|
|
||||||
3. Kernel driver API
|
3. Kernel driver API
|
||||||
|
====================
|
||||||
|
|
||||||
Kernel drivers have access to two flags that map to IFF_LOWER_UP and
|
Kernel drivers have access to two flags that map to IFF_LOWER_UP and
|
||||||
IFF_DORMANT. These flags can be set from everywhere, even from
|
IFF_DORMANT. These flags can be set from everywhere, even from
|
||||||
@@ -126,6 +146,7 @@ netif_carrier_ok() && !netif_dormant():
|
|||||||
|
|
||||||
|
|
||||||
4. Setting from userspace
|
4. Setting from userspace
|
||||||
|
=========================
|
||||||
|
|
||||||
Applications have to use the netlink interface to influence the
|
Applications have to use the netlink interface to influence the
|
||||||
RFC2863 operational state of an interface. Setting IFLA_LINKMODE to 1
|
RFC2863 operational state of an interface. Setting IFLA_LINKMODE to 1
|
||||||
@@ -139,18 +160,18 @@ are multicasted on the netlink group RTNLGRP_LINK.
|
|||||||
|
|
||||||
So basically a 802.1X supplicant interacts with the kernel like this:
|
So basically a 802.1X supplicant interacts with the kernel like this:
|
||||||
|
|
||||||
-subscribe to RTNLGRP_LINK
|
- subscribe to RTNLGRP_LINK
|
||||||
-set IFLA_LINKMODE to 1 via RTM_SETLINK
|
- set IFLA_LINKMODE to 1 via RTM_SETLINK
|
||||||
-query RTM_GETLINK once to get initial state
|
- query RTM_GETLINK once to get initial state
|
||||||
-if initial flags are not (IFF_LOWER_UP && !IFF_DORMANT), wait until
|
- if initial flags are not (IFF_LOWER_UP && !IFF_DORMANT), wait until
|
||||||
netlink multicast signals this state
|
netlink multicast signals this state
|
||||||
-do 802.1X, eventually abort if flags go down again
|
- do 802.1X, eventually abort if flags go down again
|
||||||
-send RTM_SETLINK to set operstate to IF_OPER_UP if authentication
|
- send RTM_SETLINK to set operstate to IF_OPER_UP if authentication
|
||||||
succeeds, IF_OPER_DORMANT otherwise
|
succeeds, IF_OPER_DORMANT otherwise
|
||||||
-see how operstate and IFF_RUNNING is echoed via netlink multicast
|
- see how operstate and IFF_RUNNING is echoed via netlink multicast
|
||||||
-set interface back to IF_OPER_DORMANT if 802.1X reauthentication
|
- set interface back to IF_OPER_DORMANT if 802.1X reauthentication
|
||||||
fails
|
fails
|
||||||
-restart if kernel changes IFF_LOWER_UP or IFF_DORMANT flag
|
- restart if kernel changes IFF_LOWER_UP or IFF_DORMANT flag
|
||||||
|
|
||||||
if supplicant goes down, bring back IFLA_LINKMODE to 0 and
|
if supplicant goes down, bring back IFLA_LINKMODE to 0 and
|
||||||
IFLA_OPERSTATE to a sane value.
|
IFLA_OPERSTATE to a sane value.
|
||||||
Reference in New Issue
Block a user