]> git.ipfire.org Git - thirdparty/systemd.git/blame - src/libsystemd/sd-network/network-util.h
sd-network: modernize parse_operational_state_range()
[thirdparty/systemd.git] / src / libsystemd / sd-network / network-util.h
CommitLineData
db9ecf05 1/* SPDX-License-Identifier: LGPL-2.1-or-later */
e1528e08
TA
2#pragma once
3
b5cc5591 4#include <errno.h>
dc7f6c9b
YW
5#include <stdbool.h>
6
2cd6b932
YW
7#include "macro.h"
8
84e51726 9bool network_is_online(void);
2cd6b932 10
86ae2d69
L
11typedef enum AddressFamily {
12 /* This is a bitmask, though it usually doesn't feel that way! */
13 ADDRESS_FAMILY_NO = 0,
14 ADDRESS_FAMILY_IPV4 = 1 << 0,
15 ADDRESS_FAMILY_IPV6 = 1 << 1,
16 ADDRESS_FAMILY_YES = ADDRESS_FAMILY_IPV4 | ADDRESS_FAMILY_IPV6,
17 _ADDRESS_FAMILY_MAX,
18 _ADDRESS_FAMILY_INVALID = -EINVAL,
19} AddressFamily;
20
2cd6b932 21typedef enum LinkOperationalState {
5cbaf95e 22 LINK_OPERSTATE_MISSING,
2cd6b932
YW
23 LINK_OPERSTATE_OFF,
24 LINK_OPERSTATE_NO_CARRIER,
25 LINK_OPERSTATE_DORMANT,
c9cc0383 26 LINK_OPERSTATE_DEGRADED_CARRIER,
2cd6b932
YW
27 LINK_OPERSTATE_CARRIER,
28 LINK_OPERSTATE_DEGRADED,
29 LINK_OPERSTATE_ENSLAVED,
30 LINK_OPERSTATE_ROUTABLE,
31 _LINK_OPERSTATE_MAX,
2d93c20e 32 _LINK_OPERSTATE_INVALID = -EINVAL,
2cd6b932
YW
33} LinkOperationalState;
34
1678fbb3
YW
35typedef enum LinkCarrierState {
36 LINK_CARRIER_STATE_OFF = LINK_OPERSTATE_OFF,
37 LINK_CARRIER_STATE_NO_CARRIER = LINK_OPERSTATE_NO_CARRIER,
38 LINK_CARRIER_STATE_DORMANT = LINK_OPERSTATE_DORMANT,
39 LINK_CARRIER_STATE_DEGRADED_CARRIER = LINK_OPERSTATE_DEGRADED_CARRIER,
40 LINK_CARRIER_STATE_CARRIER = LINK_OPERSTATE_CARRIER,
41 LINK_CARRIER_STATE_ENSLAVED = LINK_OPERSTATE_ENSLAVED,
42 _LINK_CARRIER_STATE_MAX,
2d93c20e 43 _LINK_CARRIER_STATE_INVALID = -EINVAL,
1678fbb3
YW
44} LinkCarrierState;
45
46typedef enum LinkAddressState {
47 LINK_ADDRESS_STATE_OFF,
48 LINK_ADDRESS_STATE_DEGRADED,
49 LINK_ADDRESS_STATE_ROUTABLE,
50 _LINK_ADDRESS_STATE_MAX,
2d93c20e 51 _LINK_ADDRESS_STATE_INVALID = -EINVAL,
1678fbb3
YW
52} LinkAddressState;
53
bcdcc596
54typedef enum LinkOnlineState {
55 LINK_ONLINE_STATE_OFFLINE,
56 LINK_ONLINE_STATE_PARTIAL,
57 LINK_ONLINE_STATE_ONLINE,
58 _LINK_ONLINE_STATE_MAX,
59 _LINK_ONLINE_STATE_INVALID = -EINVAL,
60} LinkOnlineState;
61
2cd6b932
YW
62const char* link_operstate_to_string(LinkOperationalState s) _const_;
63LinkOperationalState link_operstate_from_string(const char *s) _pure_;
35c5a9ca
YW
64
65const char* link_carrier_state_to_string(LinkCarrierState s) _const_;
66LinkCarrierState link_carrier_state_from_string(const char *s) _pure_;
67
8430841b
L
68const char* link_required_address_family_to_string(AddressFamily s) _const_;
69AddressFamily link_required_address_family_from_string(const char *s) _pure_;
70
35c5a9ca
YW
71const char* link_address_state_to_string(LinkAddressState s) _const_;
72LinkAddressState link_address_state_from_string(const char *s) _pure_;
75cd4a5d 73
bcdcc596
74const char* link_online_state_to_string(LinkOnlineState s) _const_;
75LinkOnlineState link_online_state_from_string(const char *s) _pure_;
76
75cd4a5d
DDM
77typedef struct LinkOperationalStateRange {
78 LinkOperationalState min;
79 LinkOperationalState max;
80} LinkOperationalStateRange;
81
2db29795
YW
82#define LINK_OPERSTATE_RANGE_DEFAULT \
83 (const LinkOperationalStateRange) { \
84 .min = LINK_OPERSTATE_DEGRADED, \
85 .max = LINK_OPERSTATE_ROUTABLE, \
86 }
87
88#define LINK_OPERSTATE_RANGE_INVALID \
89 (const LinkOperationalStateRange) { \
90 .min = _LINK_OPERSTATE_INVALID, \
91 .max = _LINK_OPERSTATE_INVALID, \
92 }
93
94int parse_operational_state_range(const char *s, LinkOperationalStateRange *ret);
61dc4b9e 95int network_link_get_operational_state(int ifindex, LinkOperationalState *ret);
15f624f8
YW
96
97static inline bool operational_state_is_valid(LinkOperationalState s) {
98 return s >= 0 && s < _LINK_OPERSTATE_MAX;
99}
100static inline bool operational_state_range_is_valid(const LinkOperationalStateRange *range) {
101 return range &&
102 operational_state_is_valid(range->min) &&
103 operational_state_is_valid(range->max) &&
104 range->min <= range->max;
105}
106static inline bool operational_state_is_in_range(LinkOperationalState s, const LinkOperationalStateRange *range) {
107 return range && range->min <= s && s <= range->max;
108}