libvirt_ffi 0.6.1 → 0.8.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,175 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Libvirt
4
+ module FFI
5
+ module Interface
6
+ extend ::FFI::Library
7
+ extend Helpers
8
+ ffi_lib Util.library_path
9
+
10
+ ## Variables
11
+
12
+ ## Enums
13
+
14
+ # enum virConnectListAllInterfacesFlags
15
+ enum :list_all_flags, [
16
+ :INACTIVE, 0x1,
17
+ :ACTIVE, 0x2
18
+ ]
19
+
20
+ # enum virInterfaceXMLFlags
21
+ enum :xml_flags, [
22
+ :INACTIVE, 0x1 # dump inactive interface information
23
+ ]
24
+
25
+ ## Functions
26
+
27
+ # int virConnectListAllInterfaces (
28
+ # virConnectPtr conn,
29
+ # virInterfacePtr ** ifaces,
30
+ # unsigned int flags
31
+ # )
32
+ attach_function :virConnectListAllInterfaces,
33
+ [:pointer, :pointer, :list_all_flags],
34
+ :int
35
+
36
+ # int virConnectListDefinedInterfaces (
37
+ # virConnectPtr conn,
38
+ # char ** const names,
39
+ # int maxnames
40
+ # )
41
+ attach_function :virConnectListDefinedInterfaces,
42
+ [:pointer, :pointer, :int],
43
+ :int
44
+
45
+ # int virConnectListInterfaces (
46
+ # virConnectPtr conn,
47
+ # char ** const names,
48
+ # int maxnames
49
+ # )
50
+ attach_function :virConnectListInterfaces,
51
+ [:pointer, :pointer, :int],
52
+ :int
53
+
54
+ # int virConnectNumOfDefinedInterfaces (virConnectPtr conn)
55
+ attach_function :virConnectNumOfDefinedInterfaces,
56
+ [:pointer],
57
+ :int
58
+
59
+ # int virConnectNumOfInterfaces (virConnectPtr conn)
60
+ attach_function :virConnectNumOfInterfaces,
61
+ [:pointer],
62
+ :int
63
+
64
+ # int virInterfaceChangeBegin (
65
+ # virConnectPtr conn,
66
+ # unsigned int flags
67
+ # )
68
+ attach_function :virInterfaceChangeBegin,
69
+ [:pointer, :uint],
70
+ :int
71
+
72
+ # int virInterfaceChangeCommit (
73
+ # virConnectPtr conn,
74
+ # unsigned int flags
75
+ # )
76
+ attach_function :virInterfaceChangeCommit,
77
+ [:pointer, :uint],
78
+ :int
79
+
80
+ # int virInterfaceChangeRollback (
81
+ # virConnectPtr conn,
82
+ # unsigned int flags
83
+ # )
84
+ attach_function :virInterfaceChangeRollback,
85
+ [:pointer, :uint],
86
+ :int
87
+
88
+ # int virInterfaceCreate (
89
+ # virInterfacePtr iface,
90
+ # unsigned int flags
91
+ # )
92
+ attach_function :virInterfaceCreate,
93
+ [:pointer, :uint],
94
+ :int
95
+
96
+ # virInterfacePtr virInterfaceDefineXML (
97
+ # virConnectPtr conn,
98
+ # const char * xml,
99
+ # unsigned int flags
100
+ # )
101
+ attach_function :virInterfaceDefineXML,
102
+ [:pointer, :string, :uint],
103
+ :pointer
104
+
105
+ # int virInterfaceDestroy (
106
+ # virInterfacePtr iface,
107
+ # unsigned int flags
108
+ # )
109
+ attach_function :virInterfaceDestroy,
110
+ [:pointer, :uint],
111
+ :int
112
+
113
+ # int virInterfaceFree (virInterfacePtr iface)
114
+ attach_function :virInterfaceFree,
115
+ [:pointer],
116
+ :int
117
+
118
+ # virConnectPtr virInterfaceGetConnect (virInterfacePtr iface)
119
+ attach_function :virInterfaceGetConnect,
120
+ [:pointer],
121
+ :int
122
+
123
+ # const char * virInterfaceGetMACString (virInterfacePtr iface)
124
+ attach_function :virInterfaceGetMACString,
125
+ [:pointer],
126
+ :string
127
+
128
+ # const char * virInterfaceGetName (virInterfacePtr iface)
129
+ attach_function :virInterfaceGetName,
130
+ [:pointer],
131
+ :string
132
+
133
+ # char * virInterfaceGetXMLDesc (
134
+ # virInterfacePtr iface,
135
+ # unsigned int flags
136
+ # )
137
+ attach_function :virInterfaceGetXMLDesc,
138
+ [:pointer, :uint],
139
+ :string
140
+
141
+ # int virInterfaceIsActive (virInterfacePtr iface)
142
+ attach_function :virInterfaceIsActive,
143
+ [:pointer],
144
+ :int
145
+
146
+ # virInterfacePtr virInterfaceLookupByMACString (
147
+ # virConnectPtr conn,
148
+ # const char * macstr
149
+ # )
150
+ attach_function :virInterfaceLookupByMACString,
151
+ [:pointer, :string],
152
+ :pointer
153
+
154
+ # virInterfacePtr virInterfaceLookupByName (
155
+ # virConnectPtr conn,
156
+ # const char * name
157
+ # )
158
+ attach_function :virInterfaceLookupByName,
159
+ [:pointer, :string],
160
+ :pointer
161
+
162
+ # int virInterfaceRef (virInterfacePtr iface)
163
+ attach_function :virInterfaceRef,
164
+ [:pointer],
165
+ :int
166
+
167
+ # int virInterfaceUndefine (virInterfacePtr iface)
168
+ attach_function :virInterfaceUndefine,
169
+ [:pointer],
170
+ :int
171
+
172
+ ## Helpers
173
+ end
174
+ end
175
+ end
@@ -0,0 +1,392 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Libvirt
4
+ module FFI
5
+ module Network
6
+ # https://libvirt.org/html/libvirt-libvirt-network.html
7
+
8
+ extend ::FFI::Library
9
+ extend Helpers
10
+ ffi_lib Util.library_path
11
+
12
+ EVENT_ID_TO_CALLBACK = {
13
+ LIFECYCLE: :virConnectNetworkEventLifecycleCallback
14
+ }.freeze
15
+
16
+ ## Enums
17
+
18
+ # enum virConnectListAllNetworksFlags
19
+ enum :list_all_flags, [
20
+ :INACTIVE, 0x1,
21
+ :ACTIVE, 0x2,
22
+ :PERSISTENT, 0x4,
23
+ :TRANSIENT, 0x8,
24
+ :AUTOSTART, 0x10,
25
+ :NO_AUTOSTART, 0x20
26
+ ]
27
+
28
+ # enum virIPAddrType
29
+ enum :ip_addr_type, [
30
+ :IPV4, 0x0,
31
+ :IPV6, 0x1
32
+ ]
33
+
34
+ # enum virNetworkEventID
35
+ enum :event_id, [
36
+ :LIFECYCLE, 0x0 # virConnectNetworkEventLifecycleCallback
37
+ ]
38
+
39
+ # enum virNetworkEventLifecycleType
40
+ enum :event_lifecycle_type, [
41
+ :DEFINED, 0x0,
42
+ :UNDEFINED, 0x1,
43
+ :STARTED, 0x2,
44
+ :STOPPED, 0x3
45
+ ]
46
+
47
+ # enum virNetworkUpdateCommand
48
+ enum :update_command, [
49
+ :NONE, 0x0, # (invalid)
50
+ :MODIFY, 0x1, # modify an existing element
51
+ :DELETE, 0x2, # delete an existing element
52
+ :ADD_LAST, 0x3, # add an element at end of list
53
+ :ADD_FIRST, 0x4 # add an element at start of list
54
+ ]
55
+
56
+ # enum virNetworkUpdateFlags
57
+ enum :update_flags, [
58
+ :AFFECT_CURRENT, 0x0, # affect live if network is active, config if its not active
59
+ :AFFECT_LIVE, 0x1, # affect live state of network only
60
+ :AFFECT_CONFIG, 0x2 # affect persistent config only
61
+ ]
62
+
63
+ # enum virNetworkUpdateSection
64
+ enum :update_section, [
65
+ :NONE, 0x0, # (invalid)
66
+ :BRIDGE, 0x1, # <bridge>
67
+ :DOMAIN, 0x2, # <domain>
68
+ :IP, 0x3, # <ip>
69
+ :IP_DHCP_HOST, 0x4, # <ip>/<dhcp>/<host>
70
+ :IP_DHCP_RANGE, 0x5, # <ip>/<dhcp>/<range>
71
+ :FORWARD, 0x6, # <forward>
72
+ :FORWARD_INTERFACE, 0x7, # <forward>/<interface>
73
+ :FORWARD_PF, 0x8, # <forward>/<pf>
74
+ :PORTGROUP, 0x9, # <portgroup>
75
+ :DNS_HOST, 0xa, # <dns>/<host>
76
+ :DNS_TXT, 0xb, # <dns>/<txt>
77
+ :DNS_SRV, 0xc # <dns>/<srv>
78
+ ]
79
+
80
+ # enum virNetworkXMLFlags
81
+ enum :xml_flags, [
82
+ :INACTIVE, 0x1 # dump inactive network information
83
+ ]
84
+
85
+ ## Structs
86
+
87
+ # struct virNetworkDHCPLease {
88
+ # char * iface # Network interface name
89
+ # long long expirytime # Seconds since epoch
90
+ # int type # virIPAddrType
91
+ # char * mac # MAC address
92
+ # char * iaid # IAID
93
+ # char * ipaddr # IP address
94
+ # unsigned int prefix # IP address prefix
95
+ # char * hostname # Hostname
96
+ # char * clientid # Client ID or DUID
97
+ # }
98
+ class DhcpLeaseStruct < ::FFI::Struct
99
+ layout :iface, :string,
100
+ :expirytime, :long_long,
101
+ :type, FFI::Network.enum_type(:ip_addr_type),
102
+ :mac, :string,
103
+ :iaid, :string,
104
+ :ipaddr, :string,
105
+ :prefix, :uint,
106
+ :hostname, :string,
107
+ :clientid, :string
108
+ end
109
+
110
+ ## Callbacks
111
+
112
+ # typedef virConnectNetworkEventGenericCallback
113
+ # void virConnectNetworkEventGenericCallback (
114
+ # virConnectPtr conn,
115
+ # virNetworkPtr net,
116
+ # void * opaque
117
+ # )
118
+ callback :virConnectNetworkEventGenericCallback,
119
+ [:pointer, :pointer, :pointer],
120
+ :void
121
+
122
+ # typedef virConnectNetworkEventLifecycleCallback
123
+ # void virConnectNetworkEventLifecycleCallback (
124
+ # virConnectPtr conn,
125
+ # virNetworkPtr net,
126
+ # int event,
127
+ # int detail,
128
+ # void * opaque
129
+ # )
130
+ callback :virConnectNetworkEventLifecycleCallback,
131
+ [:pointer, :pointer, :event_lifecycle_type, :int, :pointer],
132
+ :void
133
+
134
+ ## Functions
135
+
136
+ # int virConnectListAllNetworks (
137
+ # virConnectPtr conn,
138
+ # virNetworkPtr ** nets,
139
+ # unsigned int flags
140
+ # )
141
+ attach_function :virConnectListAllNetworks,
142
+ [:pointer, :pointer, :list_all_flags],
143
+ :int
144
+
145
+ # int virConnectListDefinedNetworks (
146
+ # virConnectPtr conn,
147
+ # char ** const names,
148
+ # int maxnames
149
+ # )
150
+ attach_function :virConnectListDefinedNetworks,
151
+ [:pointer, :pointer, :int],
152
+ :int
153
+
154
+ # int virConnectListNetworks (
155
+ # virConnectPtr conn,
156
+ # char ** const names,
157
+ # int maxnames
158
+ # )
159
+ attach_function :virConnectListNetworks,
160
+ [:pointer, :pointer, :int],
161
+ :int
162
+
163
+ # int virConnectNetworkEventDeregisterAny (
164
+ # virConnectPtr conn,
165
+ # int callbackID
166
+ # )
167
+ attach_function :virConnectNetworkEventDeregisterAny, [:pointer, :int], :int
168
+
169
+ # int virConnectNetworkEventRegisterAny (
170
+ # virConnectPtr conn,
171
+ # virNetworkPtr net,
172
+ # int eventID,
173
+ # virConnectNetworkEventGenericCallback cb,
174
+ # void * opaque,
175
+ # virFreeCallback freecb
176
+ # )
177
+ attach_function :virConnectNetworkEventRegisterAny,
178
+ [:pointer, :pointer, :event_id, :pointer, :pointer, :pointer],
179
+ :int
180
+
181
+ # int virConnectNumOfDefinedNetworks (
182
+ # virConnectPtr conn
183
+ # )
184
+ attach_function :virConnectNumOfDefinedNetworks,
185
+ [:pointer],
186
+ :int
187
+
188
+ # int virConnectNumOfNetworks (
189
+ # virConnectPtr conn
190
+ # )
191
+ attach_function :virConnectNumOfNetworks,
192
+ [:pointer],
193
+ :int
194
+
195
+ # int virNetworkCreate (
196
+ # virNetworkPtr network
197
+ # )
198
+ attach_function :virNetworkCreate,
199
+ [:pointer],
200
+ :int
201
+
202
+ # virNetworkPtr virNetworkCreateXML (
203
+ # virConnectPtr conn,
204
+ # const char * xmlDesc
205
+ # )
206
+ attach_function :virNetworkCreateXML,
207
+ [:pointer, :string],
208
+ :pointer
209
+
210
+ # void virNetworkDHCPLeaseFree (
211
+ # virNetworkDHCPLeasePtr lease
212
+ # )
213
+ attach_function :virNetworkDHCPLeaseFree,
214
+ [:pointer],
215
+ :void
216
+
217
+ # virNetworkPtr virNetworkDefineXML (
218
+ # virConnectPtr conn,
219
+ # const char * xml
220
+ # )
221
+ attach_function :virNetworkDefineXML,
222
+ [:pointer, :string],
223
+ :pointer
224
+
225
+ # int virNetworkDestroy (
226
+ # virNetworkPtr network
227
+ # )
228
+ attach_function :virNetworkDestroy,
229
+ [:pointer],
230
+ :int
231
+
232
+ # int virNetworkFree (
233
+ # virNetworkPtr network
234
+ # )
235
+ attach_function :virNetworkFree,
236
+ [:pointer],
237
+ :int
238
+
239
+ # int virNetworkGetAutostart (
240
+ # virNetworkPtr network,
241
+ # int * autostart
242
+ # )
243
+ attach_function :virNetworkGetAutostart,
244
+ [:pointer, :pointer],
245
+ :int
246
+
247
+ # char * virNetworkGetBridgeName (
248
+ # virNetworkPtr network
249
+ # )
250
+ attach_function :virNetworkGetBridgeName,
251
+ [:pointer],
252
+ :string
253
+
254
+ # virConnectPtr virNetworkGetConnect (
255
+ # virNetworkPtr net
256
+ # )
257
+ attach_function :virNetworkGetConnect,
258
+ [:pointer],
259
+ :pointer
260
+
261
+ # int virNetworkGetDHCPLeases (
262
+ # virNetworkPtr network,
263
+ # const char * mac,
264
+ # virNetworkDHCPLeasePtr ** leases,
265
+ # unsigned int flags
266
+ # )
267
+ attach_function :virNetworkGetDHCPLeases,
268
+ [:pointer, :string, :pointer, :uint],
269
+ :int
270
+
271
+ # const char * virNetworkGetName (
272
+ # virNetworkPtr network
273
+ # )
274
+ attach_function :virNetworkGetName,
275
+ [:pointer],
276
+ :string
277
+
278
+ # int virNetworkGetUUID (
279
+ # virNetworkPtr network,
280
+ # unsigned char * uuid
281
+ # )
282
+ attach_function :virNetworkGetUUID,
283
+ [:pointer, :pointer],
284
+ :int
285
+
286
+ # int virNetworkGetUUIDString (
287
+ # virNetworkPtr network,
288
+ # char * buf
289
+ # )
290
+ attach_function :virNetworkGetUUIDString,
291
+ [:pointer, :pointer],
292
+ :int
293
+
294
+ # char * virNetworkGetXMLDesc (
295
+ # virNetworkPtr network,
296
+ # unsigned int flags
297
+ # )
298
+ attach_function :virNetworkGetXMLDesc,
299
+ [:pointer, :xml_flags],
300
+ :string
301
+
302
+ # int virNetworkIsActive (
303
+ # virNetworkPtr net
304
+ # )
305
+ attach_function :virNetworkIsActive,
306
+ [:pointer],
307
+ :int
308
+
309
+ # int virNetworkIsPersistent (
310
+ # virNetworkPtr net
311
+ # )
312
+ attach_function :virNetworkIsPersistent,
313
+ [:pointer],
314
+ :int
315
+
316
+ # virNetworkPtr virNetworkLookupByName (
317
+ # virConnectPtr conn,
318
+ # const char * name
319
+ # )
320
+ attach_function :virNetworkLookupByName,
321
+ [:pointer, :string],
322
+ :pointer
323
+
324
+ # virNetworkPtr virNetworkLookupByUUID (
325
+ # virConnectPtr conn,
326
+ # const unsigned char * uuid
327
+ # )
328
+ attach_function :virNetworkLookupByUUID,
329
+ [:pointer, :pointer],
330
+ :pointer
331
+
332
+ # virNetworkPtr virNetworkLookupByUUIDString (
333
+ # virConnectPtr conn,
334
+ # const char * uuidstr
335
+ # )
336
+ attach_function :virNetworkLookupByUUIDString,
337
+ [:pointer, :string],
338
+ :pointer
339
+
340
+ # int virNetworkRef (
341
+ # virNetworkPtr network
342
+ # )
343
+ attach_function :virNetworkRef,
344
+ [:pointer],
345
+ :int
346
+
347
+ # int virNetworkSetAutostart (
348
+ # virNetworkPtr network,
349
+ # int autostart
350
+ # )
351
+ attach_function :virNetworkSetAutostart,
352
+ [:pointer, :int],
353
+ :int
354
+
355
+ # int virNetworkUndefine (
356
+ # virNetworkPtr network
357
+ # )
358
+ attach_function :virNetworkUndefine,
359
+ [:pointer],
360
+ :int
361
+
362
+ # int virNetworkUpdate (
363
+ # virNetworkPtr network,
364
+ # unsigned int command,
365
+ # unsigned int section,
366
+ # int parentIndex,
367
+ # const char * xml,
368
+ # unsigned int flags
369
+ # )
370
+ attach_function :virNetworkUpdate,
371
+ [:pointer, :update_command, :update_section, :int, :string, :update_flags],
372
+ :int
373
+
374
+ ## Helpers
375
+ module_function
376
+
377
+ # Creates event callback function for provided event_id
378
+ # @param event_id [Integer,Symbol]
379
+ # @yield connect_ptr, network_ptr, *args, opaque_ptr
380
+ # @return [FFI::Function]
381
+ def event_callback_for(event_id, &block)
382
+ event_id_sym = event_id.is_a?(Symbol) ? event_id : enum_type(:event_id)[event_id]
383
+
384
+ callback_name = EVENT_ID_TO_CALLBACK.fetch(event_id_sym)
385
+ callback_function(callback_name) do |*args|
386
+ Util.log(:debug, name) { ".event_callback_for #{event_id_sym} CALLBACK #{args.map(&:to_s).join(', ')}," }
387
+ block.call(*args)
388
+ end
389
+ end
390
+ end
391
+ end
392
+ end
@@ -218,7 +218,7 @@ module Libvirt
218
218
 
219
219
  # Creates event callback function for provided event_id
220
220
  # @param event_id [Integer,Symbol]
221
- # @yield connect_ptr, domain_ptr, *args, opaque_ptr
221
+ # @yield connect_ptr, pool_ptr, *args, opaque_ptr
222
222
  # @return [FFI::Function]
223
223
  def event_callback_for(event_id, &block)
224
224
  event_id_sym = event_id.is_a?(Symbol) ? event_id : enum_type(:event_id)[event_id]
data/lib/libvirt/ffi.rb CHANGED
@@ -13,5 +13,7 @@ module Libvirt
13
13
  require 'libvirt/ffi/event'
14
14
  require 'libvirt/ffi/stream'
15
15
  require 'libvirt/ffi/storage'
16
+ require 'libvirt/ffi/network'
17
+ require 'libvirt/ffi/interface'
16
18
  end
17
19
  end
@@ -29,12 +29,20 @@ module Libvirt
29
29
  [cb_data, cb_data_free_func]
30
30
  end
31
31
 
32
- def store_struct(cb_data, connection_pointer:, callback_id:, cb:, opaque:)
32
+ def store_struct(cb_data, options)
33
33
  dbg { '#store_struct' }
34
34
 
35
+ options.assert_valid_keys(:connection_pointer, :callback_id, :cb, :opaque, :free_func)
36
+ connection_pointer = options.fetch(:connection_pointer)
37
+ callback_id = options.fetch(:callback_id)
38
+ cb = options.fetch(:cb)
39
+ opaque = options.fetch(:opaque)
40
+ free_func = options.fetch(:free_func)
35
41
  cb_data[:connection_pointer] = connection_pointer
36
42
  cb_data[:callback_id] = callback_id
37
- @inner_storage[connection_pointer.address][callback_id] = { cb: cb, opaque: opaque, pointer: cb_data.pointer }
43
+ @inner_storage[connection_pointer.address][callback_id] = {
44
+ cb: cb, opaque: opaque, pointer: cb_data.pointer, free_func: free_func
45
+ }
38
46
  end
39
47
 
40
48
  def remove_struct(pointer)
@@ -0,0 +1,92 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Libvirt
4
+ class Interface
5
+ # @param pointer [FFI::Pointer]
6
+ def self.load_ref(pointer)
7
+ result = FFI::Interface.virInterfaceRef(pointer)
8
+ raise Errors::LibError, "Couldn't retrieve interface reference" if result.negative?
9
+
10
+ new(pointer)
11
+ end
12
+
13
+ # @param pointer [FFI::Pointer]
14
+ def initialize(pointer)
15
+ @ptr = pointer
16
+
17
+ free = ->(obj_id) do
18
+ dbg { "Finalize Libvirt::Interface object_id=0x#{obj_id.to_s(16)}, pointer=0x#{@ptr.address.to_s(16)}" }
19
+ return unless @ptr
20
+
21
+ warn "Couldn't free Libvirt::Interface object_id=0x#{obj_id.to_s(16)}, pointer=0x#{@ptr.address.to_s(16)}" if FFI::Interface.virInterfaceFree(@ptr).negative?
22
+ end
23
+ ObjectSpace.define_finalizer(self, free)
24
+ end
25
+
26
+ # @return [FFI::Pointer]
27
+ def to_ptr
28
+ @ptr
29
+ end
30
+
31
+ # @return [String]
32
+ # @raise [Libvirt::Errors::LibError]
33
+ def name
34
+ result = FFI::Interface.virInterfaceGetName(@ptr)
35
+ raise Errors::LibError, "Couldn't get interface name" if result.nil?
36
+
37
+ result
38
+ end
39
+
40
+ # @return [String]
41
+ # @raise [Libvirt::Errors::LibError]
42
+ def mac
43
+ result = FFI::Interface.virInterfaceGetMACString(@ptr)
44
+ raise Errors::LibError, "Couldn't get interface mac" if result.nil?
45
+
46
+ result
47
+ end
48
+
49
+ # @param options_or_flags [Array<Symbol>,Hash{Symbol=>Boolean},Integer,Symbol,nil]
50
+ # @raise [Libvirt::Errors::LibError]
51
+ def xml_desc(options_or_flags = nil)
52
+ flags = Util.parse_flags options_or_flags, FFI::Interface.enum_type(:xml_flags)
53
+ result = FFI::Interface.virInterfaceGetXMLDesc(@ptr, flags)
54
+ raise Errors::LibError, "Couldn't get interface xml desc" if result.nil?
55
+
56
+ result
57
+ end
58
+
59
+ # @return [Boolean]
60
+ # @raise [Libvirt::Errors::LibError]
61
+ def active?
62
+ result = FFI::Interface.virInterfaceIsActive(@ptr)
63
+ raise Errors::LibError, "Couldn't get interface is active" if result.nil?
64
+
65
+ result == 1
66
+ end
67
+
68
+ # @raise [Libvirt::Errors::LibError]
69
+ def start
70
+ result = FFI::Interface.virInterfaceCreate(@ptr, 0)
71
+ raise Errors::LibError, "Couldn't start interface" if result.negative?
72
+ end
73
+
74
+ # @raise [Libvirt::Errors::LibError]
75
+ def destroy
76
+ result = FFI::Interface.virInterfaceDestroy(@ptr, 0)
77
+ raise Errors::LibError, "Couldn't destroy interface" if result.negative?
78
+ end
79
+
80
+ # @raise [Libvirt::Errors::LibError]
81
+ def undefine
82
+ result = FFI::Interface.virInterfaceUndefine(@ptr)
83
+ raise Errors::LibError, "Couldn't undefine interface" if result.negative?
84
+ end
85
+
86
+ private
87
+
88
+ def dbg(&block)
89
+ Util.log(:debug, 'Libvirt::Network', &block)
90
+ end
91
+ end
92
+ end