Skip to content

Commit b801d11

Browse files
authored
Add new ipv6 fields from supervisor (#277)
1 parent 7bdf2be commit b801d11

5 files changed

Lines changed: 49 additions & 2 deletions

File tree

aiohasupervisor/models/__init__.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -95,6 +95,8 @@
9595
AccessPoint,
9696
AuthMethod,
9797
DockerNetwork,
98+
InterfaceAddrGenMode,
99+
InterfaceIp6Privacy,
98100
InterfaceMethod,
99101
InterfaceType,
100102
IPv4,
@@ -222,6 +224,8 @@
222224
"InstalledAddon",
223225
"InstalledAddonComplete",
224226
"InterfaceMethod",
227+
"InterfaceAddrGenMode",
228+
"InterfaceIp6Privacy",
225229
"InterfaceType",
226230
"Issue",
227231
"IssueType",

aiohasupervisor/models/network.py

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,24 @@ class InterfaceMethod(StrEnum):
3232
AUTO = "auto"
3333

3434

35+
class InterfaceAddrGenMode(StrEnum):
36+
"""IPv6 address generation mode."""
37+
38+
EUI64 = "eui64"
39+
STABLE_PRIVACY = "stable-privacy"
40+
DEFAULT_OR_EUI64 = "default-or-eui64"
41+
DEFAULT = "default"
42+
43+
44+
class InterfaceIp6Privacy(StrEnum):
45+
"""IPv6 privacy extension behavior."""
46+
47+
DEFAULT = "default"
48+
DISABLED = "disabled"
49+
ENABLED_PREFER_PUBLIC = "enabled-prefer-public"
50+
ENABLED = "enabled"
51+
52+
3553
class WifiMode(StrEnum):
3654
"""WifiMode type."""
3755

@@ -85,6 +103,8 @@ class IPv6(IpBase, ResponseData):
85103
address: list[IPv6Interface]
86104
nameservers: list[IPv6Address]
87105
gateway: IPv6Address | None
106+
addr_gen_mode: InterfaceAddrGenMode
107+
ip6_privacy: InterfaceIp6Privacy
88108

89109

90110
@dataclass(frozen=True, slots=True)
@@ -161,6 +181,8 @@ class IPv6Config(Request):
161181
method: InterfaceMethod | None = None
162182
gateway: IPv6Address | None = None
163183
nameservers: list[IPv6Address] | None = None
184+
addr_gen_mode: InterfaceAddrGenMode | None = None
185+
ip6_privacy: InterfaceIp6Privacy | None = None
164186

165187

166188
@dataclass(frozen=True, slots=True)

tests/fixtures/network_info.json

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,9 @@
2121
"address": ["fe80::819d:c479:d712:7a77/64"],
2222
"nameservers": [],
2323
"gateway": null,
24-
"ready": true
24+
"ready": true,
25+
"addr_gen_mode": "default",
26+
"ip6_privacy": "default"
2527
},
2628
"wifi": null,
2729
"vlan": null,

tests/fixtures/network_interface_info.json

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,9 @@
1919
"address": ["fe80::819d:c479:d712:7a77/64"],
2020
"nameservers": [],
2121
"gateway": null,
22-
"ready": true
22+
"ready": true,
23+
"addr_gen_mode": "default",
24+
"ip6_privacy": "default"
2325
},
2426
"wifi": null,
2527
"vlan": null,

tests/test_network.py

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,11 @@
88

99
from aiohasupervisor import SupervisorClient
1010
from aiohasupervisor.models import (
11+
InterfaceAddrGenMode,
12+
InterfaceIp6Privacy,
1113
InterfaceMethod,
1214
IPv4Config,
15+
IPv6Config,
1316
MulticastDnsMode,
1417
NetworkInterfaceConfig,
1518
VlanConfig,
@@ -44,6 +47,8 @@ async def test_network_info(
4447
== "fe80::819d:c479:d712:7a77/64"
4548
)
4649
assert result.interfaces[0].ipv6.gateway is None
50+
assert result.interfaces[0].ipv6.addr_gen_mode is InterfaceAddrGenMode.DEFAULT
51+
assert result.interfaces[0].ipv6.ip6_privacy is InterfaceIp6Privacy.DEFAULT
4752
assert result.interfaces[0].wifi is None
4853
assert result.interfaces[0].vlan is None
4954
assert result.interfaces[0].mdns is MulticastDnsMode.DEFAULT
@@ -90,6 +95,8 @@ async def test_network_interface_info(
9095
assert result.ipv6.method == "disabled"
9196
assert result.ipv6.address[0].with_prefixlen == "fe80::819d:c479:d712:7a77/64"
9297
assert result.ipv6.gateway is None
98+
assert result.ipv6.addr_gen_mode is InterfaceAddrGenMode.DEFAULT
99+
assert result.ipv6.ip6_privacy is InterfaceIp6Privacy.DEFAULT
93100
assert result.wifi is None
94101
assert result.vlan is None
95102
assert result.mdns is MulticastDnsMode.ANNOUNCE
@@ -108,6 +115,11 @@ async def test_network_update_interface(
108115
gateway=IPv4Address("192.168.1.1"),
109116
nameservers=[IPv4Address("192.168.1.1")],
110117
),
118+
ipv6=IPv6Config(
119+
method=InterfaceMethod.AUTO,
120+
addr_gen_mode=InterfaceAddrGenMode.STABLE_PRIVACY,
121+
ip6_privacy=InterfaceIp6Privacy.ENABLED,
122+
),
111123
mdns=MulticastDnsMode.OFF,
112124
)
113125
assert (
@@ -125,6 +137,11 @@ async def test_network_update_interface(
125137
"method": "static",
126138
"nameservers": ["192.168.1.1"],
127139
},
140+
"ipv6": {
141+
"method": "auto",
142+
"addr_gen_mode": "stable-privacy",
143+
"ip6_privacy": "enabled",
144+
},
128145
"mdns": "off",
129146
}
130147

0 commit comments

Comments
 (0)