mirror of
https://github.com/home-assistant/supervisor.git
synced 2025-11-09 19:09:41 +00:00
* Abstract code between dbus - supervisor * cleanup v2 * fix address vs interface * fix API calls * Fix methodnames * add vlan type * add vlan support * Fix tests * Add wifi support * more OOO * fix typing import * typing part 2 * Fix profile * fix test payload * ignore powersafe * support privancy * fix property * Fix tests * full support all API * Fix all * more robust * Update supervisor/dbus/network/connection.py Co-authored-by: Joakim Sørensen <joasoe@gmail.com> * Fix gateway * fix empty gateway * Allow no ipv6 or ipv4 kernel support * Exclude device drivers * Add wifi * Use loop on api * refactory p1 Signed-off-by: Pascal Vizeli <pvizeli@syshack.ch> * refactory p2 Signed-off-by: Pascal Vizeli <pvizeli@syshack.ch> * refactory p3 Signed-off-by: Pascal Vizeli <pvizeli@syshack.ch> * refactory p4 Signed-off-by: Pascal Vizeli <pvizeli@syshack.ch> * refactory p5 Signed-off-by: Pascal Vizeli <pvizeli@syshack.ch> * refactory p6 Signed-off-by: Pascal Vizeli <pvizeli@syshack.ch> * refactory p7 Signed-off-by: Pascal Vizeli <pvizeli@syshack.ch> * refactory p8 Signed-off-by: Pascal Vizeli <pvizeli@syshack.ch> * Fix lint * update sup p1 Signed-off-by: Pascal Vizeli <pvizeli@syshack.ch> * update sup p2 Signed-off-by: Pascal Vizeli <pvizeli@syshack.ch> * fix tests Signed-off-by: Pascal Vizeli <pvizeli@syshack.ch> * fix logging Signed-off-by: Pascal Vizeli <pvizeli@syshack.ch> * improve mock handling Signed-off-by: Pascal Vizeli <pvizeli@syshack.ch> * add fixtures Signed-off-by: Pascal Vizeli <pvizeli@syshack.ch> * fix tests * better testing * Add more tests * Fix API test * Add test for vlan payload * Support variation * Fix doc string * support remove & wifi scan * make sure we ignore local-link on ipv6 * remove privancy - add vlan * Fix tests * fix isort * Fixture dbus by commands * Add dnsmanager fixture * expose commands called by dbus * Add wifi tests * Update supervisor/plugins/dns.py Co-authored-by: Joakim Sørensen <joasoe@gmail.com> * Address comments & fix tests * change url to be closer on others Co-authored-by: Joakim Sørensen <joasoe@gmail.com>
97 lines
3.0 KiB
Python
97 lines
3.0 KiB
Python
"""NetworkInterface object for Network Manager."""
|
|
from typing import Optional
|
|
|
|
from ...utils.gdbus import DBus
|
|
from ..const import (
|
|
DBUS_ATTR_ACTIVE_CONNECTION,
|
|
DBUS_ATTR_DEVICE_INTERFACE,
|
|
DBUS_ATTR_DEVICE_TYPE,
|
|
DBUS_ATTR_DRIVER,
|
|
DBUS_ATTR_MANAGED,
|
|
DBUS_NAME_DEVICE,
|
|
DBUS_NAME_NM,
|
|
DBUS_OBJECT_BASE,
|
|
DeviceType,
|
|
)
|
|
from ..interface import DBusInterfaceProxy
|
|
from .connection import NetworkConnection
|
|
from .setting import NetworkSetting
|
|
from .wireless import NetworkWireless
|
|
|
|
|
|
class NetworkInterface(DBusInterfaceProxy):
|
|
"""NetworkInterface object for Network Manager."""
|
|
|
|
def __init__(self, nm_dbus: DBus, object_path: str) -> None:
|
|
"""Initialize NetworkConnection object."""
|
|
self.object_path = object_path
|
|
self.properties = {}
|
|
|
|
self.primary = True
|
|
|
|
self._connection: Optional[NetworkConnection] = None
|
|
self._settings: Optional[NetworkSetting] = None
|
|
self._wireless: Optional[NetworkWireless] = None
|
|
self._nm_dbus: DBus = nm_dbus
|
|
|
|
@property
|
|
def name(self) -> str:
|
|
"""Return interface name."""
|
|
return self.properties[DBUS_ATTR_DEVICE_INTERFACE]
|
|
|
|
@property
|
|
def type(self) -> int:
|
|
"""Return interface type."""
|
|
return self.properties[DBUS_ATTR_DEVICE_TYPE]
|
|
|
|
@property
|
|
def driver(self) -> str:
|
|
"""Return interface driver."""
|
|
return self.properties[DBUS_ATTR_DRIVER]
|
|
|
|
@property
|
|
def managed(self) -> bool:
|
|
"""Return interface driver."""
|
|
return self.properties[DBUS_ATTR_MANAGED]
|
|
|
|
@property
|
|
def connection(self) -> Optional[NetworkConnection]:
|
|
"""Return the connection used for this interface."""
|
|
return self._connection
|
|
|
|
@property
|
|
def settings(self) -> Optional[NetworkSetting]:
|
|
"""Return the connection settings used for this interface."""
|
|
return self._settings
|
|
|
|
@property
|
|
def wireless(self) -> Optional[NetworkWireless]:
|
|
"""Return the wireless data for this interface."""
|
|
return self._wireless
|
|
|
|
async def connect(self) -> None:
|
|
"""Get device information."""
|
|
self.dbus = await DBus.connect(DBUS_NAME_NM, self.object_path)
|
|
self.properties = await self.dbus.get_properties(DBUS_NAME_DEVICE)
|
|
|
|
# Abort if device is not managed
|
|
if not self.managed:
|
|
return
|
|
|
|
# If connection exists
|
|
if self.properties[DBUS_ATTR_ACTIVE_CONNECTION] != DBUS_OBJECT_BASE:
|
|
self._connection = NetworkConnection(
|
|
self.properties[DBUS_ATTR_ACTIVE_CONNECTION]
|
|
)
|
|
await self._connection.connect()
|
|
|
|
# Attach settings
|
|
if self.connection and self.connection.setting_object != DBUS_OBJECT_BASE:
|
|
self._settings = NetworkSetting(self.connection.setting_object)
|
|
await self._settings.connect()
|
|
|
|
# Wireless
|
|
if self.type == DeviceType.WIRELESS:
|
|
self._wireless = NetworkWireless(self.object_path)
|
|
await self._wireless.connect()
|