← Documents Documentation/networking/operstates.rst GitHub 원문 ↗

Linux 6.18.37 · Networking

Operational States

Linux network interface의 administrative state, RFC2863 operstate와 userspace 802.1X 제어 규칙입니다.

Source pathDocumentation/networking/operstates.rst
Source versionLinux v6.18.37
TranslationDUJINLABS 전문 번역 + 해설

요약·해설과 원문, 전문 번역을 서로 분리했습니다. API 이름, symbol, source path는 원문 표기를 사용합니다.

1. 요약·해설

원문의 핵심 논리와 kernel programming 관점의 보충 설명입니다. 아래의 전문 번역과는 별도로 작성했습니다.

요약·해설

operstates.rst:1-187

Admin up은 사용 의도일 뿐 실제 link 준비를 보장하지 않습니다. Driver의 carrier·dormant flag가 기본 operational state를 만들고, `IFLA_LINKMODE=1`에서는 802.1X 같은 userspace policy가 최종 `UP` 전환을 승인합니다.

Operstate 결정 요약
Admin stateDriver carrier/dormantKernel 기본 operstateUserspace policy최종 UP/DORMANT

Driver signal과 userspace policy의 역할을 구분합니다.

2. 영어 원문 전체

번역 기준이 된 Linux v6.18.37 원문입니다. 줄 번호는 이 버전의 파일 좌표입니다.

원문 전체 펼치기
1 .. SPDX-License-Identifier: GPL-2.0
2
3 ==================
4 Operational States
5 ==================
6
7
8 1. Introduction
9 ===============
10
11 Linux distinguishes between administrative and operational state of an
12 interface. Administrative state is the result of "ip link set dev
13 <dev> up or down" and reflects whether the administrator wants to use
14 the device for traffic.
15
16 However, an interface is not usable just because the admin enabled it
17 - ethernet requires to be plugged into the switch and, depending on
18 a site's networking policy and configuration, an 802.1X authentication
19 to be performed before user data can be transferred. Operational state
20 shows the ability of an interface to transmit this user data.
21
22 Thanks to 802.1X, userspace must be granted the possibility to
23 influence operational state. To accommodate this, operational state is
24 split into two parts: Two flags that can be set by the driver only, and
25 a RFC2863 compatible state that is derived from these flags, a policy,
26 and changeable from userspace under certain rules.
27
28
29 2. Querying from userspace
30 ==========================
31
32 Both admin and operational state can be queried via the netlink
33 operation RTM_GETLINK. It is also possible to subscribe to RTNLGRP_LINK
34 to be notified of updates while the interface is admin up. This is
35 important for setting from userspace.
36
37 These values contain interface state:
38
39 ifinfomsg::if_flags & IFF_UP:
40 Interface is admin up
41
42 ifinfomsg::if_flags & IFF_RUNNING:
43 Interface is in RFC2863 operational state UP or UNKNOWN. This is for
44 backward compatibility, routing daemons, dhcp clients can use this
45 flag to determine whether they should use the interface.
46
47 ifinfomsg::if_flags & IFF_LOWER_UP:
48 Driver has signaled netif_carrier_on()
49
50 ifinfomsg::if_flags & IFF_DORMANT:
51 Driver has signaled netif_dormant_on()
52
53 TLV IFLA_OPERSTATE
54 ------------------
55
56 contains RFC2863 state of the interface in numeric representation:
57
58 IF_OPER_UNKNOWN (0):
59 Interface is in unknown state, neither driver nor userspace has set
60 operational state. Interface must be considered for user data as
61 setting operational state has not been implemented in every driver.
62
63 IF_OPER_NOTPRESENT (1):
64 Unused in current kernel (notpresent interfaces normally disappear),
65 just a numerical placeholder.
66
67 IF_OPER_DOWN (2):
68 Interface is unable to transfer data on L1, f.e. ethernet is not
69 plugged or interface is ADMIN down.
70
71 IF_OPER_LOWERLAYERDOWN (3):
72 Interfaces stacked on an interface that is IF_OPER_DOWN show this
73 state (f.e. VLAN).
74
75 IF_OPER_TESTING (4):
76 Interface is in testing mode, for example executing driver self-tests
77 or media (cable) test. It can't be used for normal traffic until tests
78 complete.
79
80 IF_OPER_DORMANT (5):
81 Interface is L1 up, but waiting for an external event, f.e. for a
82 protocol to establish. (802.1X)
83
84 IF_OPER_UP (6):
85 Interface is operational up and can be used.
86
87 This TLV can also be queried via sysfs.
88
89 TLV IFLA_LINKMODE
90 -----------------
91
92 contains link policy. This is needed for userspace interaction
93 described below.
94
95 This TLV can also be queried via sysfs.
96
97
98 3. Kernel driver API
99 ====================
100
101 Kernel drivers have access to two flags that map to IFF_LOWER_UP and
102 IFF_DORMANT. These flags can be set from everywhere, even from
103 interrupts. It is guaranteed that only the driver has write access,
104 however, if different layers of the driver manipulate the same flag,
105 the driver has to provide the synchronisation needed.
106
107 __LINK_STATE_NOCARRIER, maps to !IFF_LOWER_UP:
108
109 The driver uses netif_carrier_on() to clear and netif_carrier_off() to
110 set this flag. On netif_carrier_off(), the scheduler stops sending
111 packets. The name 'carrier' and the inversion are historical, think of
112 it as lower layer.
113
114 Note that for certain kind of soft-devices, which are not managing any
115 real hardware, it is possible to set this bit from userspace. One
116 should use TLV IFLA_CARRIER to do so.
117
118 netif_carrier_ok() can be used to query that bit.
119
120 __LINK_STATE_DORMANT, maps to IFF_DORMANT:
121
122 Set by the driver to express that the device cannot yet be used
123 because some driver controlled protocol establishment has to
124 complete. Corresponding functions are netif_dormant_on() to set the
125 flag, netif_dormant_off() to clear it and netif_dormant() to query.
126
127 On device allocation, both flags __LINK_STATE_NOCARRIER and
128 __LINK_STATE_DORMANT are cleared, so the effective state is equivalent
129 to netif_carrier_ok() and !netif_dormant().
130
131
132 Whenever the driver CHANGES one of these flags, a workqueue event is
133 scheduled to translate the flag combination to IFLA_OPERSTATE as
134 follows:
135
136 !netif_carrier_ok():
137 IF_OPER_LOWERLAYERDOWN if the interface is stacked, IF_OPER_DOWN
138 otherwise. Kernel can recognise stacked interfaces because their
139 ifindex != iflink.
140
141 netif_carrier_ok() && netif_dormant():
142 IF_OPER_DORMANT
143
144 netif_carrier_ok() && !netif_dormant():
145 IF_OPER_UP if userspace interaction is disabled. Otherwise
146 IF_OPER_DORMANT with the possibility for userspace to initiate the
147 IF_OPER_UP transition afterwards.
148
149
150 4. Setting from userspace
151 =========================
152
153 Applications have to use the netlink interface to influence the
154 RFC2863 operational state of an interface. Setting IFLA_LINKMODE to 1
155 via RTM_SETLINK instructs the kernel that an interface should go to
156 IF_OPER_DORMANT instead of IF_OPER_UP when the combination
157 netif_carrier_ok() && !netif_dormant() is set by the
158 driver. Afterwards, the userspace application can set IFLA_OPERSTATE
159 to IF_OPER_DORMANT or IF_OPER_UP as long as the driver does not set
160 netif_carrier_off() or netif_dormant_on(). Changes made by userspace
161 are multicasted on the netlink group RTNLGRP_LINK.
162
163 So basically a 802.1X supplicant interacts with the kernel like this:
164
165 - subscribe to RTNLGRP_LINK
166 - set IFLA_LINKMODE to 1 via RTM_SETLINK
167 - query RTM_GETLINK once to get initial state
168 - if initial flags are not (IFF_LOWER_UP && !IFF_DORMANT), wait until
169 netlink multicast signals this state
170 - do 802.1X, eventually abort if flags go down again
171 - send RTM_SETLINK to set operstate to IF_OPER_UP if authentication
172 succeeds, IF_OPER_DORMANT otherwise
173 - see how operstate and IFF_RUNNING is echoed via netlink multicast
174 - set interface back to IF_OPER_DORMANT if 802.1X reauthentication
175 fails
176 - restart if kernel changes IFF_LOWER_UP or IFF_DORMANT flag
177
178 if supplicant goes down, bring back IFLA_LINKMODE to 0 and
179 IFLA_OPERSTATE to a sane value.
180
181 A routing daemon or dhcp client just needs to care for IFF_RUNNING or
182 waiting for operstate to go IF_OPER_UP/IF_OPER_UNKNOWN before
183 considering the interface / querying a DHCP address.
184
185
186 For technical questions and/or comments please e-mail to Stefan Rompf
187 (stefan at loplof.de).
188

3. 한국어 전문 번역

영어 원문의 문단 순서와 의미를 유지한 전체 번역입니다. 코드, 함수명, symbol과 URL은 원문 표기를 유지합니다.

Administrative state와 operational state

1-28

Linux는 interface의 administrative state와 operational state를 구분합니다. Administrative state는 `ip link set dev <dev> up` 또는 `down`의 결과이며 administrator가 해당 device를 traffic에 사용하려는지를 나타냅니다.

하지만 admin state가 up이라고 interface를 바로 사용할 수 있는 것은 아닙니다. Ethernet cable이 switch에 연결되어야 하고 site의 network policy와 구성에 따라 user data를 보내기 전에 802.1X authentication도 끝나야 할 수 있습니다. Operational state는 interface가 실제 user data를 전송할 능력을 나타냅니다.

802.1X 때문에 userspace도 operational state에 영향을 줄 수 있어야 합니다. 이를 위해 state는 driver만 설정할 수 있는 두 flag와, 이 flag·policy에서 유도되고 일정 규칙 아래 userspace가 바꿀 수 있는 RFC2863 호환 state로 나뉩니다.

Interface state 층위
Administratorip link up/downAdministrative state
Driver lower-layer·dormant flagspolicy와 userspaceRFC2863 operational stateuser data 가능 여부

관리 의도와 실제 전송 가능성을 분리합니다.

.. SPDX-License-Identifier: GPL-2.0

==================
Operational States
==================


1. Introduction
===============

Linux distinguishes between administrative and operational state of an
interface. Administrative state is the result of "ip link set dev
<dev> up or down" and reflects whether the administrator wants to use
the device for traffic.

However, an interface is not usable just because the admin enabled it
- ethernet requires to be plugged into the switch and, depending on
a site's networking policy and configuration, an 802.1X authentication
to be performed before user data can be transferred. Operational state
shows the ability of an interface to transmit this user data.

Thanks to 802.1X, userspace must be granted the possibility to
influence operational state. To accommodate this, operational state is
split into two parts: Two flags that can be set by the driver only, and
a RFC2863 compatible state that is derived from these flags, a policy,
and changeable from userspace under certain rules.

RTM_GETLINK와 if_flags 조회

29-52

Admin state와 operational state는 모두 Netlink operation `RTM_GETLINK`로 조회할 수 있습니다. Interface가 admin up인 동안 update 알림을 받으려면 `RTNLGRP_LINK`를 subscribe할 수 있으며, userspace에서 state를 설정할 때 이것이 중요합니다.

`ifinfomsg::if_flags & IFF_UP`은 interface가 admin up임을 뜻합니다. `IFF_RUNNING`은 RFC2863 operational state가 `UP` 또는 `UNKNOWN`임을 뜻합니다. 이는 backward compatibility를 위한 flag이며 routing daemon과 DHCP client가 interface 사용 여부를 판단하는 데 쓸 수 있습니다.

`IFF_LOWER_UP`은 driver가 `netif_carrier_on()`을 알렸음을, `IFF_DORMANT`는 driver가 `netif_dormant_on()`을 알렸음을 뜻합니다.

RTM_GETLINK interface flag
Flag의미
IFF_UPAdministrative up
IFF_RUNNINGOperational UP 또는 UNKNOWN
IFF_LOWER_UPDriver가 lower layer/carrier up 알림
IFF_DORMANTDriver가 dormant 상태 알림

Userspace가 보는 네 가지 핵심 flag입니다.

2. Querying from userspace
==========================

Both admin and operational state can be queried via the netlink
operation RTM_GETLINK. It is also possible to subscribe to RTNLGRP_LINK
to be notified of updates while the interface is admin up. This is
important for setting from userspace.

These values contain interface state:

ifinfomsg::if_flags & IFF_UP:
 Interface is admin up

ifinfomsg::if_flags & IFF_RUNNING:
 Interface is in RFC2863 operational state UP or UNKNOWN. This is for
 backward compatibility, routing daemons, dhcp clients can use this
 flag to determine whether they should use the interface.

ifinfomsg::if_flags & IFF_LOWER_UP:
 Driver has signaled netif_carrier_on()

ifinfomsg::if_flags & IFF_DORMANT:
 Driver has signaled netif_dormant_on()

IFLA_OPERSTATE와 IFLA_LINKMODE

53-97

TLV `IFLA_OPERSTATE`는 interface의 RFC2863 state를 숫자로 전달합니다. `IF_OPER_UNKNOWN(0)`은 driver와 userspace 어느 쪽도 operational state를 설정하지 않은 상태입니다. 모든 driver가 state 설정을 구현한 것은 아니므로 이 상태의 interface도 user data용으로 고려해야 합니다. `IF_OPER_NOTPRESENT(1)`는 현재 kernel에서 쓰지 않으며, not-present interface는 보통 사라지기 때문에 숫자 placeholder로만 남아 있습니다.

`IF_OPER_DOWN(2)`은 Ethernet 미연결이나 admin down처럼 L1에서 data를 보낼 수 없음을 뜻합니다. `IF_OPER_LOWERLAYERDOWN(3)`은 VLAN처럼 `IF_OPER_DOWN` interface 위에 쌓인 interface의 상태입니다.

`IF_OPER_TESTING(4)`은 driver self-test나 media(cable) test를 실행하는 testing mode이며 완료 전에는 일반 traffic에 쓸 수 없습니다. `IF_OPER_DORMANT(5)`는 L1은 up이지만 protocol establishment 같은 외부 event를 기다리는 상태이며 802.1X가 예입니다. `IF_OPER_UP(6)`은 interface가 operational up이며 사용할 수 있다는 뜻입니다.

`IFLA_OPERSTATE`는 sysfs에서도 조회할 수 있습니다. TLV `IFLA_LINKMODE`는 아래에서 설명하는 userspace interaction에 필요한 link policy를 담으며 이 값도 sysfs에서 조회할 수 있습니다.

RFC2863 operational state
State의미
0UNKNOWN아직 state를 정하지 않음; 사용할 수도 있음
1NOTPRESENT미사용 numeric placeholder
2DOWNL1 data 전송 불가 또는 admin down
3LOWERLAYERDOWN아래 interface가 DOWN인 stacked device
4TESTINGself-test·cable test 진행 중
5DORMANTL1 up, 외부 protocol event 대기
6UP정상 사용 가능

IFLA_OPERSTATE 숫자와 의미입니다.

TLV IFLA_OPERSTATE
------------------

contains RFC2863 state of the interface in numeric representation:

IF_OPER_UNKNOWN (0):
 Interface is in unknown state, neither driver nor userspace has set
 operational state. Interface must be considered for user data as
 setting operational state has not been implemented in every driver.

IF_OPER_NOTPRESENT (1):
 Unused in current kernel (notpresent interfaces normally disappear),
 just a numerical placeholder.

IF_OPER_DOWN (2):
 Interface is unable to transfer data on L1, f.e. ethernet is not
 plugged or interface is ADMIN down.

IF_OPER_LOWERLAYERDOWN (3):
 Interfaces stacked on an interface that is IF_OPER_DOWN show this
 state (f.e. VLAN).

IF_OPER_TESTING (4):
 Interface is in testing mode, for example executing driver self-tests
 or media (cable) test. It can't be used for normal traffic until tests
 complete.

IF_OPER_DORMANT (5):
 Interface is L1 up, but waiting for an external event, f.e. for a
 protocol to establish. (802.1X)

IF_OPER_UP (6):
 Interface is operational up and can be used.

This TLV can also be queried via sysfs.

TLV IFLA_LINKMODE
-----------------

contains link policy. This is needed for userspace interaction
described below.

This TLV can also be queried via sysfs.

Carrier·dormant driver flag와 state 변환

98-149

Kernel driver에는 `IFF_LOWER_UP`과 `IFF_DORMANT`에 대응하는 두 flag가 있습니다. Interrupt context를 포함해 어디서나 설정할 수 있고 write access는 driver에만 보장됩니다. 다만 driver의 서로 다른 layer가 같은 flag를 조작하면 필요한 synchronization을 driver가 제공해야 합니다.

`__LINK_STATE_NOCARRIER`는 `!IFF_LOWER_UP`에 대응합니다. Driver는 `netif_carrier_on()`으로 이 flag를 clear하고 `netif_carrier_off()`으로 set합니다. `netif_carrier_off()`가 호출되면 scheduler가 packet 송신을 멈춥니다. `carrier`라는 이름과 반전된 논리는 역사적 이유이며 lower layer 상태로 이해하면 됩니다.

실제 hardware를 관리하지 않는 일부 soft-device는 userspace가 이 bit를 설정할 수 있으며 TLV `IFLA_CARRIER`를 사용해야 합니다. `netif_carrier_ok()`로 bit를 조회합니다.

`__LINK_STATE_DORMANT`는 `IFF_DORMANT`에 대응합니다. Driver가 관리하는 protocol establishment가 끝나지 않아 device를 아직 쓸 수 없음을 표시합니다. `netif_dormant_on()`으로 set하고 `netif_dormant_off()`으로 clear하며 `netif_dormant()`로 조회합니다. Device를 할당할 때 `__LINK_STATE_NOCARRIER`와 `__LINK_STATE_DORMANT`가 모두 clear되므로 실효 상태는 `netif_carrier_ok()`이며 `!netif_dormant()`입니다.

Driver가 두 flag 중 하나를 변경하면 workqueue event가 조합을 `IFLA_OPERSTATE`로 변환합니다. Carrier가 없으면 stacked interface는 `IF_OPER_LOWERLAYERDOWN`, 그 밖에는 `IF_OPER_DOWN`입니다. Kernel은 `ifindex != iflink`로 stacked interface를 인식합니다.

Carrier가 있고 dormant라면 `IF_OPER_DORMANT`입니다. Carrier가 있고 dormant가 아니면 userspace interaction이 꺼진 경우 `IF_OPER_UP`입니다. Interaction이 켜졌다면 먼저 `IF_OPER_DORMANT`가 되고 userspace가 이후 `IF_OPER_UP` 전환을 시작할 수 있습니다.

Driver flag에서 operstate로
조건결과
!netif_carrier_ok(), stackedIF_OPER_LOWERLAYERDOWN
!netif_carrier_ok(), non-stackedIF_OPER_DOWN
carrier_ok && dormantIF_OPER_DORMANT
carrier_ok && !dormant, userspace offIF_OPER_UP
carrier_ok && !dormant, userspace onIF_OPER_DORMANT 후 userspace가 UP 가능

Carrier·dormant 조합과 stacked 여부를 반영합니다.

3. Kernel driver API
====================

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
interrupts. It is guaranteed that only the driver has write access,
however, if different layers of the driver manipulate the same flag,
the driver has to provide the synchronisation needed.

__LINK_STATE_NOCARRIER, maps to !IFF_LOWER_UP:

The driver uses netif_carrier_on() to clear and netif_carrier_off() to
set this flag. On netif_carrier_off(), the scheduler stops sending
packets. The name 'carrier' and the inversion are historical, think of
it as lower layer.

Note that for certain kind of soft-devices, which are not managing any
real hardware, it is possible to set this bit from userspace.  One
should use TLV IFLA_CARRIER to do so.

netif_carrier_ok() can be used to query that bit.

__LINK_STATE_DORMANT, maps to IFF_DORMANT:

Set by the driver to express that the device cannot yet be used
because some driver controlled protocol establishment has to
complete. Corresponding functions are netif_dormant_on() to set the
flag, netif_dormant_off() to clear it and netif_dormant() to query.

On device allocation, both flags __LINK_STATE_NOCARRIER and
__LINK_STATE_DORMANT are cleared, so the effective state is equivalent
to netif_carrier_ok() and !netif_dormant().


Whenever the driver CHANGES one of these flags, a workqueue event is
scheduled to translate the flag combination to IFLA_OPERSTATE as
follows:

!netif_carrier_ok():
 IF_OPER_LOWERLAYERDOWN if the interface is stacked, IF_OPER_DOWN
 otherwise. Kernel can recognise stacked interfaces because their
 ifindex != iflink.

netif_carrier_ok() && netif_dormant():
 IF_OPER_DORMANT

netif_carrier_ok() && !netif_dormant():
 IF_OPER_UP if userspace interaction is disabled. Otherwise
 IF_OPER_DORMANT with the possibility for userspace to initiate the
 IF_OPER_UP transition afterwards.

802.1X userspace state 설정

150-187

Application은 RFC2863 operational state에 영향을 주려면 Netlink interface를 사용해야 합니다. `RTM_SETLINK`로 `IFLA_LINKMODE=1`을 설정하면 driver가 `netif_carrier_ok() && !netif_dormant()` 조합을 만들었을 때 kernel은 곧바로 `IF_OPER_UP`으로 가지 않고 `IF_OPER_DORMANT`로 갑니다.

그 뒤 driver가 `netif_carrier_off()` 또는 `netif_dormant_on()`을 설정하지 않는 동안 userspace application은 `IFLA_OPERSTATE`를 `IF_OPER_DORMANT` 또는 `IF_OPER_UP`으로 바꿀 수 있습니다. Userspace 변경은 Netlink group `RTNLGRP_LINK`로 multicast됩니다.

802.1X supplicant는 `RTNLGRP_LINK`를 subscribe하고 `RTM_SETLINK`로 `IFLA_LINKMODE=1`을 설정한 뒤 `RTM_GETLINK`로 초기 상태를 한 번 조회합니다. 초기 flag가 `IFF_LOWER_UP && !IFF_DORMANT`가 아니면 그 상태를 알리는 Netlink multicast를 기다립니다.

준비되면 802.1X를 수행하되 flag가 다시 내려가면 중단합니다. Authentication이 성공하면 `RTM_SETLINK`로 operstate를 `IF_OPER_UP`, 실패하면 `IF_OPER_DORMANT`로 설정합니다. Netlink multicast로 operstate와 `IFF_RUNNING`이 되돌아오는 것을 확인하고, 재인증 실패 시 다시 `IF_OPER_DORMANT`로 둡니다. Kernel이 `IFF_LOWER_UP` 또는 `IFF_DORMANT`를 바꾸면 절차를 다시 시작합니다.

Supplicant가 종료되면 `IFLA_LINKMODE`를 0으로 되돌리고 `IFLA_OPERSTATE`도 타당한 값으로 복구합니다. Routing daemon이나 DHCP client는 `IFF_RUNNING`만 확인하거나 operstate가 `IF_OPER_UP`/`IF_OPER_UNKNOWN`이 될 때까지 기다린 뒤 interface를 사용하거나 DHCP address를 요청하면 됩니다. 기술 문의용 Stefan Rompf의 주소는 원문 끝에 보존되어 있습니다.

802.1X supplicant state sequence
RTNLGRP_LINK subscribeIFLA_LINKMODE=1RTM_GETLINKLOWER_UP && !DORMANT 대기802.1X성공: IF_OPER_UP실패: IF_OPER_DORMANT
Kernel lower/dormant flag 변경인증 중단상태 대기부터 재시작
Supplicant 종료IFLA_LINKMODE=0operstate 복구

문서의 단계별 userspace interaction을 흐름으로 옮겼습니다.

4. Setting from userspace
=========================

Applications have to use the netlink interface to influence the
RFC2863 operational state of an interface. Setting IFLA_LINKMODE to 1
via RTM_SETLINK instructs the kernel that an interface should go to
IF_OPER_DORMANT instead of IF_OPER_UP when the combination
netif_carrier_ok() && !netif_dormant() is set by the
driver. Afterwards, the userspace application can set IFLA_OPERSTATE
to IF_OPER_DORMANT or IF_OPER_UP as long as the driver does not set
netif_carrier_off() or netif_dormant_on(). Changes made by userspace
are multicasted on the netlink group RTNLGRP_LINK.

So basically a 802.1X supplicant interacts with the kernel like this:

- subscribe to RTNLGRP_LINK
- set IFLA_LINKMODE to 1 via RTM_SETLINK
- query RTM_GETLINK once to get initial state
- if initial flags are not (IFF_LOWER_UP && !IFF_DORMANT), wait until
  netlink multicast signals this state
- do 802.1X, eventually abort if flags go down again
- send RTM_SETLINK to set operstate to IF_OPER_UP if authentication
  succeeds, IF_OPER_DORMANT otherwise
- see how operstate and IFF_RUNNING is echoed via netlink multicast
- set interface back to IF_OPER_DORMANT if 802.1X reauthentication
  fails
- restart if kernel changes IFF_LOWER_UP or IFF_DORMANT flag

if supplicant goes down, bring back IFLA_LINKMODE to 0 and
IFLA_OPERSTATE to a sane value.

A routing daemon or dhcp client just needs to care for IFF_RUNNING or
waiting for operstate to go IF_OPER_UP/IF_OPER_UNKNOWN before
considering the interface / querying a DHCP address.


For technical questions and/or comments please e-mail to Stefan Rompf
(stefan at loplof.de).