]>
Commit | Line | Data |
---|---|---|
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 | 9 | bool network_is_online(void); |
2cd6b932 | 10 | |
86ae2d69 L |
11 | typedef 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 | 21 | typedef 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 |
35 | typedef 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 | ||
46 | typedef 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 AŠ |
54 | typedef 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 |
62 | const char* link_operstate_to_string(LinkOperationalState s) _const_; |
63 | LinkOperationalState link_operstate_from_string(const char *s) _pure_; | |
35c5a9ca YW |
64 | |
65 | const char* link_carrier_state_to_string(LinkCarrierState s) _const_; | |
66 | LinkCarrierState link_carrier_state_from_string(const char *s) _pure_; | |
67 | ||
8430841b L |
68 | const char* link_required_address_family_to_string(AddressFamily s) _const_; |
69 | AddressFamily link_required_address_family_from_string(const char *s) _pure_; | |
70 | ||
35c5a9ca YW |
71 | const char* link_address_state_to_string(LinkAddressState s) _const_; |
72 | LinkAddressState link_address_state_from_string(const char *s) _pure_; | |
75cd4a5d | 73 | |
bcdcc596 AŠ |
74 | const char* link_online_state_to_string(LinkOnlineState s) _const_; |
75 | LinkOnlineState link_online_state_from_string(const char *s) _pure_; | |
76 | ||
75cd4a5d DDM |
77 | typedef 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 | ||
94 | int parse_operational_state_range(const char *s, LinkOperationalStateRange *ret); | |
61dc4b9e | 95 | int network_link_get_operational_state(int ifindex, LinkOperationalState *ret); |
15f624f8 YW |
96 | |
97 | static inline bool operational_state_is_valid(LinkOperationalState s) { | |
98 | return s >= 0 && s < _LINK_OPERSTATE_MAX; | |
99 | } | |
100 | static 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 | } | |
106 | static inline bool operational_state_is_in_range(LinkOperationalState s, const LinkOperationalStateRange *range) { | |
107 | return range && range->min <= s && s <= range->max; | |
108 | } |