#!/usr/bin/env python # SPDX-License-Identifier: GPL-2.0+ # # Copyright (C) 2011 - 2012 Red Hat, Inc. # import dbus, sys # This example indicates whether the default network connection is known to be WWAN NM_DEVICE_TYPE_MODEM = 8 NM_DEVICE_TYPE_BLUETOOTH = 5 NM_SERVICE_NAME = "org.freedesktop.NetworkManager" NM_MANAGER_IFACE = "org.freedesktop.NetworkManager" DBUS_PROPS_IFACE = "org.freedesktop.DBus.Properties" NM_ACTIVE_CONNECTION_INTERFACE = "org.freedesktop.NetworkManager.Connection.Active" bus = dbus.SystemBus() # Exit early if NetworkManager is not running proxy = bus.get_object("org.freedesktop.DBus", "/org/freedesktop/DBus") busdaemon = dbus.Interface(proxy, "org.freedesktop.DBus") if not busdaemon.NameHasOwner(NM_SERVICE_NAME): print("NetworkManager not running") sys.exit(1) # Get a proxy for the NetworkManager object proxy = bus.get_object(NM_SERVICE_NAME, "/org/freedesktop/NetworkManager") manager = dbus.Interface(proxy, NM_MANAGER_IFACE) props = dbus.Interface(proxy, DBUS_PROPS_IFACE) def found_connection_type(ctype): if ctype == '': print("No active connection") elif ctype in ["gsm", "cdma", "bluetooth"]: print("WWAN is default") else: print("WWAN is not default") sys.exit(0) # Shortcut #1, for NM 1.0 try: ctype = props.Get(NM_MANAGER_IFACE, "PrimaryConnectionType") found_connection_type(ctype) except KeyError: pass # Shortcut #2, for NM 0.9.10 try: primary = props.Get(NM_MANAGER_IFACE, "PrimaryConnection") if not primary: found_connection_type('') primary_proxy = bus.get_object(NM_SERVICE_NAME, primary) primary_props = dbus.Interface(primary_proxy, DBUS_PROPS_IFACE) ctype = primary_props.Get(NM_ACTIVE_CONNECTION_INTERFACE, "Type") found_connection_type(ctype) except KeyError: pass # Fallback for NM 0.9.8 and earlier; look through all active network # connections for the default one default_is_wwan = False active = props.Get(NM_MANAGER_IFACE, "ActiveConnections") for a in active: a_proxy = bus.get_object(NM_SERVICE_NAME, a) a_props = dbus.Interface(a_proxy, DBUS_PROPS_IFACE) all_props = a_props.GetAll(NM_ACTIVE_CONNECTION_INTERFACE) # Ignore this network connection if it's not default for IPv4 or IPv6 if all_props["Default"] == False and all_props["Default6"] == False: continue dev_path = all_props["Devices"][0] dev_proxy = bus.get_object(NM_SERVICE_NAME, dev_path) dev_props = dbus.Interface(dev_proxy, DBUS_PROPS_IFACE) devtype = dev_props.Get("org.freedesktop.NetworkManager.Device", "DeviceType") if devtype == NM_DEVICE_TYPE_MODEM or devtype == NM_DEVICE_TYPE_BLUETOOTH: default_is_wwan = True break if default_is_wwan: print("WWAN is default") else: print("WWAN is not default")