Blame examples/python/dbus/disconnect-device.py

Packit Service b23acc
#!/usr/bin/env python
Packit Service b23acc
# SPDX-License-Identifier: GPL-2.0+
Packit Service b23acc
#
Packit Service b23acc
# Copyright (C) 2010 Red Hat, Inc.
Packit Service b23acc
#
Packit Service b23acc
Packit Service b23acc
import dbus, sys
Packit Service b23acc
Packit Service b23acc
# This example takes a device interface name as a parameter and tells
Packit Service b23acc
# NetworkManager to disconnect that device, closing down any network
Packit Service b23acc
# connection it may have
Packit Service b23acc
Packit Service b23acc
if len(sys.argv) != 2:
Packit Service b23acc
    raise Exception("Usage: %s <interface>" % sys.argv[0])
Packit Service b23acc
Packit Service b23acc
bus = dbus.SystemBus()
Packit Service b23acc
Packit Service b23acc
# Get a proxy for the base NetworkManager object
Packit Service b23acc
proxy = bus.get_object(
Packit Service b23acc
    "org.freedesktop.NetworkManager", "/org/freedesktop/NetworkManager"
Packit Service b23acc
)
Packit Service b23acc
manager = dbus.Interface(proxy, "org.freedesktop.NetworkManager")
Packit Service b23acc
Packit Service b23acc
dpath = None
Packit Service b23acc
Packit Service b23acc
# Find the device the user wants to disconnect
Packit Service b23acc
devices = manager.GetDevices()
Packit Service b23acc
for d in devices:
Packit Service b23acc
    dev_proxy = bus.get_object("org.freedesktop.NetworkManager", d)
Packit Service b23acc
    prop_iface = dbus.Interface(dev_proxy, "org.freedesktop.DBus.Properties")
Packit Service b23acc
    iface = prop_iface.Get("org.freedesktop.NetworkManager.Device", "Interface")
Packit Service b23acc
    if iface == sys.argv[1]:
Packit Service b23acc
        dpath = d
Packit Service b23acc
        break
Packit Service b23acc
Packit Service b23acc
if not dpath or not len(dpath):
Packit Service b23acc
    raise Exception("NetworkManager knows nothing about %s" % sys.argv[1])
Packit Service b23acc
Packit Service b23acc
dev_proxy = bus.get_object("org.freedesktop.NetworkManager", dpath)
Packit Service b23acc
dev_iface = dbus.Interface(dev_proxy, "org.freedesktop.NetworkManager.Device")
Packit Service b23acc
prop_iface = dbus.Interface(dev_proxy, "org.freedesktop.DBus.Properties")
Packit Service b23acc
Packit Service b23acc
# Make sure the device is connected before we try to disconnect it
Packit Service b23acc
state = prop_iface.Get("org.freedesktop.NetworkManager.Device", "State")
Packit Service b23acc
if state <= 3:
Packit Service b23acc
    raise Exception("Device %s isn't connected" % sys.argv[1])
Packit Service b23acc
Packit Service b23acc
# Tell NM to disconnect it
Packit Service b23acc
dev_iface.Disconnect()