Source file nm_manager.ml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
open Lwt
let section = Lwt_log.Section.make "network-manager"
include OBus_peer.Private
let daemon () =
let%lwt bus = OBus_bus.system () in
Lwt.return (OBus_peer.make bus "org.freedesktop.NetworkManager")
type state =
[ `Unknown
| `Asleep
| `Connecting
| `Connected
| `Disconnected ]
let state_of_int32 = function
| 0l -> `Unknown
| 1l -> `Asleep
| 2l -> `Connecting
| 3l -> `Connected
| 4l -> `Disconnected
| i -> ignore (Lwt_log.warning_f ~section "Nm_manager.state_of_int32: unknown state: %ld" i); `Unknown
let proxy daemon = OBus_proxy.make daemon ["org"; "freedesktop"; "NetworkManager"]
open Nm_interfaces.Org_freedesktop_NetworkManager
let get_devices daemon =
let%lwt (context, devices) = OBus_method.call_with_context m_GetDevices (proxy daemon) () in
return (
List.map
(fun path ->
Nm_device.of_proxy
(OBus_proxy.make (OBus_context.sender context) path))
devices
)
let activate_connection daemon ~service_name ~connection ~device ~specific_object =
let connection = OBus_proxy.path (Nm_settings.Connection.to_proxy connection) in
let device = OBus_proxy.path (Nm_device.to_proxy device) in
let specific_object = OBus_proxy.path specific_object in
let%lwt (context, active_connection) =
OBus_method.call_with_context
m_ActivateConnection
(proxy daemon)
(service_name, connection, device, specific_object)
in
return (
Nm_connection.of_proxy
(OBus_proxy.make (OBus_context.sender context) active_connection)
)
let deactivate_connection daemon ~active_connection =
let active_connection = OBus_proxy.path (Nm_connection.to_proxy active_connection) in
OBus_method.call m_DeactivateConnection (proxy daemon) active_connection
let sleep daemon ~sleep =
OBus_method.call m_Sleep (proxy daemon) sleep
let wireless_enabled daemon =
OBus_property.make ~monitor:Nm_monitor.monitor p_WirelessEnabled (proxy daemon)
let wireless_hardware_enabled daemon =
OBus_property.make ~monitor:Nm_monitor.monitor p_WirelessHardwareEnabled (proxy daemon)
let wwan_enabled daemon =
OBus_property.make ~monitor:Nm_monitor.monitor p_WwanEnabled (proxy daemon)
let wwan_hardware_enabled daemon =
OBus_property.make ~monitor:Nm_monitor.monitor p_WwanHardwareEnabled (proxy daemon)
let active_connections daemon =
OBus_property.map_r_with_context
(fun context paths ->
List.map
(fun path ->
Nm_connection.of_proxy
(OBus_proxy.make (OBus_context.sender context) path))
paths)
(OBus_property.make ~monitor:Nm_monitor.monitor p_ActiveConnections (proxy daemon))
let state daemon =
OBus_property.map_r
state_of_int32
(OBus_property.make ~monitor:Nm_monitor.monitor p_State (proxy daemon))
let state_changed daemon =
OBus_signal.map
state_of_int32
(OBus_signal.make s_StateChanged (proxy daemon))
let properties_changed daemon =
OBus_signal.make s_PropertiesChanged (proxy daemon)
let device_added daemon =
OBus_signal.map_with_context
(fun context state ->
Nm_device.of_proxy (OBus_proxy.make (OBus_context.sender context) state))
(OBus_signal.make s_DeviceAdded (proxy daemon))
let device_removed daemon =
OBus_signal.map_with_context
(fun context state ->
Nm_device.of_proxy (OBus_proxy.make (OBus_context.sender context) state))
(OBus_signal.make s_DeviceRemoved (proxy daemon))
let properties daemon =
OBus_property.group ~monitor:Nm_monitor.monitor (proxy daemon) interface