sig
  type t = private OBus_proxy.proxy
  external of_proxy : OBus_proxy.proxy -> t = "%identity"
  external to_proxy : t -> OBus_proxy.proxy = "%identity"
  type state =
      [ `Activated
      | `Config
      | `Disconnected
      | `Failed
      | `Ip_config
      | `Need_auth
      | `Prepare
      | `Unavailable
      | `Unknown
      | `Unmanaged ]
  type state_reason =
      [ `Autoip_error
      | `Autoip_failed
      | `Autoip_start_failed
      | `Carrier
      | `Config_expired
      | `Config_failed
      | `Config_unavailable
      | `Connection_assumed
      | `Connection_removed
      | `Dhcp_error
      | `Dhcp_failed
      | `Dhcp_start_failed
      | `Firmware_missing
      | `Gsm_apn_failed
      | `Gsm_pin_check_failed
      | `Gsm_registration_denied
      | `Gsm_registration_failed
      | `Gsm_registration_not_searching
      | `Gsm_registration_timeout
      | `Modem_busy
      | `Modem_dial_failed
      | `Modem_dial_timeout
      | `Modem_init_failed
      | `Modem_no_carrier
      | `Modem_no_dial_tone
      | `No_secrets
      | `None
      | `Now_managed
      | `Now_unmanaged
      | `Ppp_disconnect
      | `Ppp_failed
      | `Ppp_start_failed
      | `Removed
      | `Shared_failed
      | `Shared_start_failed
      | `Sleeping
      | `Supplicant_available
      | `Supplicant_config_failed
      | `Supplicant_disconnect
      | `Supplicant_failed
      | `Supplicant_timeout
      | `Unknown
      | `User_requested ]
  type typ = [ `Cdma | `Ethernet | `Gsm | `Unknown | `Wifi ]
  type capability = [ `Carrier_detect | `Nm_supported ]
  val disconnect : t -> unit Lwt.t
  val state_changed :
    t ->
    (Nm_device.state * Nm_device.state * Nm_device.state_reason)
    OBus_signal.t
  val udi : t -> string OBus_property.r
  val interface : t -> string OBus_property.r
  val driver : t -> string OBus_property.r
  val capabilities : t -> Nm_device.capability list OBus_property.r
  val ip4_address : t -> int32 OBus_property.r
  val state : t -> Nm_device.state OBus_property.r
  val ip4_config : t -> Nm_ip4_config.t OBus_property.r
  val dhcp4_config : t -> Nm_dhcp4_config.t OBus_property.r
  val ip6_config : t -> Nm_ip6_config.t OBus_property.r
  val managed : t -> bool OBus_property.r
  val device_type : t -> Nm_device.typ OBus_property.r
  val properties : t -> OBus_property.group
  module Bluetooth :
    sig
      val properties_changed :
        t -> (string * OBus_value.V.single) list OBus_signal.t
      val hw_address : t -> string OBus_property.r
      val name : t -> string OBus_property.r
      val bt_capabilities : t -> int OBus_property.r
      val properties : t -> OBus_property.group
    end
  module Cdma :
    sig
      val properties_changed :
        t -> (string * OBus_value.V.single) list OBus_signal.t
    end
  module Gsm :
    sig
      val properties_changed :
        t -> (string * OBus_value.V.single) list OBus_signal.t
    end
  module Olpc_mesh :
    sig
      val properties_changed :
        t -> (string * OBus_value.V.single) list OBus_signal.t
      val hw_address :
        OBus_proxy.t -> (string, [ `readable ]) OBus_property.t
      val companion :
        OBus_proxy.t -> (OBus_proxy.t, [ `readable ]) OBus_property.t
      val active_channel :
        OBus_proxy.t -> (int, [ `readable ]) OBus_property.t
      val properties : t -> OBus_property.group
    end
  module Serial : sig val ppp_stats : t -> (int * int) OBus_signal.t end
  module Wired :
    sig
      val properties_changed :
        t -> (string * OBus_value.V.single) list OBus_signal.t
      val hw_address : t -> string OBus_property.r
      val speed : t -> int OBus_property.r
      val carrier : t -> bool OBus_property.r
      val properties : t -> OBus_property.group
    end
  module Wireless :
    sig
      type wireless_capability =
          [ `Cipher_ccmp
          | `Cipher_tkip
          | `Cipher_wep104
          | `Cipher_wep40
          | `Rsn
          | `Wpa ]
      type wifi_mode = [ `Adhoc | `Infra | `Unknown ]
      val get_access_points : t -> Nm_access_point.t list Lwt.t
      val properties_changed :
        t -> (string * OBus_value.V.single) list OBus_signal.t
      val access_point_added : t -> Nm_access_point.t OBus_signal.t
      val access_point_removed : t -> Nm_access_point.t OBus_signal.t
      val hw_address : t -> string OBus_property.r
      val mode : t -> int OBus_property.r
      val bitrate : t -> int OBus_property.r
      val active_access_point : t -> OBus_proxy.t OBus_property.r
      val wireless_capabilities : t -> int OBus_property.r
      val properties : t -> OBus_property.group
    end
end