dhcpsapi 0.0.7 → 0.0.8
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/dhcpsapi.rb +1 -0
- data/lib/dhcpsapi/data_structures.rb +69 -1
- data/lib/dhcpsapi/reservation.rb +12 -27
- data/lib/dhcpsapi/server.rb +5 -3
- data/lib/dhcpsapi/subnet.rb +3 -23
- data/lib/dhcpsapi/subnet_element.rb +85 -0
- data/lib/dhcpsapi/version.rb +1 -1
- data/lib/dhcpsapi/win2008/subnet_element.rb +15 -0
- metadata +3 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 8aa52005e543e55ac0af399ce937ade44dbfe74a
|
4
|
+
data.tar.gz: acaade242dcd8c290c26c056a4933f71199d3e05
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: ba5318e348a9936bc493bd711a73ccbcd8df4d7ef76fba6578dd4d0aaad7074d23e5a02b00cbef36ebf9252fa2ff9ceae534bcc329c58d4cb1c6a93788ddee48
|
7
|
+
data.tar.gz: 35894f52b25644e6a9b3795e8fafc17b84b56f175b8552f2f6dcb1c071899d22c9918585e8f149f2ceb151ee00ccc0d4a8cc28ad53f6657363c68307b9191702
|
data/lib/dhcpsapi.rb
CHANGED
@@ -522,6 +522,11 @@ typedef struct _DHCP_OPTION_ARRAY {
|
|
522
522
|
layout :reserved_ip_address, :uint32,
|
523
523
|
:reserved_for_client, :pointer,
|
524
524
|
:b_allowed_client_types, :uint8 # see ClientType
|
525
|
+
|
526
|
+
ruby_struct_attr :uint32_to_ip, :reserved_ip_address
|
527
|
+
def reserved_for_client_as_ruby_struct_attr
|
528
|
+
DHCP_CLIENT_UID.new(self[:reserved_for_client]).as_ruby_struct
|
529
|
+
end
|
525
530
|
end
|
526
531
|
|
527
532
|
=begin
|
@@ -547,6 +552,69 @@ typedef struct _DHCP_OPTION_ARRAY {
|
|
547
552
|
class DHCP_SUBNET_ELEMENT_DATA_V4 < DHCPS_Struct
|
548
553
|
layout :element_type, :uint32,
|
549
554
|
:element, DHCP_SUBNET_ELEMENT
|
555
|
+
|
556
|
+
def self.build_for_reservation(reservation_ip, reservation_mac, client_type = DhcpsApi::ClientType::CLIENT_TYPE_DHCP)
|
557
|
+
subnet_element = DhcpsApi::DHCP_SUBNET_ELEMENT_DATA_V4.new
|
558
|
+
subnet_element[:element_type] = DhcpsApi::DHCP_SUBNET_ELEMENT_TYPE::DhcpReservedIps
|
559
|
+
subnet_element[:element][:reserved_ip] = (reserved_ip = DhcpsApi::DHCP_IP_RESERVATION_V4.new).pointer
|
560
|
+
|
561
|
+
reserved_ip[:reserved_ip_address] = reserved_ip.ip_to_uint32(reservation_ip)
|
562
|
+
reserved_ip[:reserved_for_client] = DhcpsApi::DHCP_CLIENT_UID.from_mac_address(reservation_mac).pointer
|
563
|
+
reserved_ip[:b_allowed_client_types] = client_type
|
564
|
+
|
565
|
+
subnet_element
|
566
|
+
end
|
567
|
+
|
568
|
+
def self.build_for_subnet_range(start_ip_address, end_ip_address)
|
569
|
+
subnet_element = DhcpsApi::DHCP_SUBNET_ELEMENT_DATA_V4.new
|
570
|
+
subnet_element[:element_type] = DhcpsApi::DHCP_SUBNET_ELEMENT_TYPE::DhcpIpRanges
|
571
|
+
subnet_element[:element][:ip_range] = (ip_range = DhcpsApi::DHCP_IP_RANGE.new).pointer
|
572
|
+
ip_range[:start_address] = ip_range.ip_to_uint32(start_ip_address)
|
573
|
+
ip_range[:end_address] = ip_range.ip_to_uint32(end_ip_address)
|
574
|
+
|
575
|
+
subnet_element
|
576
|
+
end
|
577
|
+
|
578
|
+
def element_as_ruby_struct_attr
|
579
|
+
case self[:element_type]
|
580
|
+
when DHCP_SUBNET_ELEMENT_TYPE::DhcpIpRanges
|
581
|
+
DHCP_IP_RANGE.new(self[:element][:ip_range]).as_ruby_struct
|
582
|
+
when DHCP_SUBNET_ELEMENT_TYPE::DhcpSecondaryHosts
|
583
|
+
DHCP_HOST_INFO.new(self[:element][:secondary_host]).as_ruby_struct
|
584
|
+
when DHCP_SUBNET_ELEMENT_TYPE::DhcpReservedIps
|
585
|
+
DHCP_IP_RESERVATION_V4.new(self[:element][:reserved_ip]).as_ruby_struct
|
586
|
+
when DHCP_SUBNET_ELEMENT_TYPE::DhcpExcludedIpRanges
|
587
|
+
DHCP_IP_RANGE.new(self[:element][:exclude_ip_range]).as_ruby_struct
|
588
|
+
else
|
589
|
+
self[:element]
|
590
|
+
end
|
591
|
+
end
|
592
|
+
end
|
593
|
+
|
594
|
+
=begin
|
595
|
+
typedef struct _DHCP_SUBNET_ELEMENT_INFO_ARRAY_V4 {
|
596
|
+
DWORD NumElements;
|
597
|
+
LPDHCP_SUBNET_ELEMENT_DATA_V4 Elements;
|
598
|
+
} DHCP_SUBNET_ELEMENT_INFO_ARRAY_V4, *LPDHCP_SUBNET_ELEMENT_INFO_ARRAY_V4;
|
599
|
+
=end
|
600
|
+
#
|
601
|
+
# DHCP_SUBNET_ELEMENT_INFO_ARRAY_V4 defines a list of DHCP subnet elements.
|
602
|
+
#
|
603
|
+
# Available fields:
|
604
|
+
# :bum_elements [Fixnum], The number of option values in the list
|
605
|
+
# :values [Array<DHCP_SUBNET_ELEMENT_DATA_V4>], Array of subnet elements
|
606
|
+
#
|
607
|
+
# @see https://msdn.microsoft.com/en-us/library/windows/desktop/ee460931(v=vs.85).aspx
|
608
|
+
#
|
609
|
+
class DHCP_SUBNET_ELEMENT_INFO_ARRAY_V4 < DHCPS_Struct
|
610
|
+
layout :num_elements, :uint32,
|
611
|
+
:values, :pointer
|
612
|
+
|
613
|
+
def as_ruby_struct
|
614
|
+
0.upto(self[:num_elements]-1).inject([]) do |all, offset|
|
615
|
+
all << DhcpsApi::DHCP_SUBNET_ELEMENT_DATA_V4.new(self[:values] + offset*DHCP_SUBNET_ELEMENT_DATA_V4.size).as_ruby_struct
|
616
|
+
end
|
617
|
+
end
|
550
618
|
end
|
551
619
|
|
552
620
|
=begin
|
@@ -581,7 +649,7 @@ typedef struct _DHCP_OPTION_ARRAY {
|
|
581
649
|
layout :start_address, :uint32,
|
582
650
|
:end_address, :uint32
|
583
651
|
|
584
|
-
ruby_struct_attr :uint32_to_ip, :
|
652
|
+
ruby_struct_attr :uint32_to_ip, :start_address, :end_address
|
585
653
|
end
|
586
654
|
|
587
655
|
#
|
data/lib/dhcpsapi/reservation.rb
CHANGED
@@ -38,24 +38,14 @@ module DhcpsApi
|
|
38
38
|
# @see ClientType ClientType documentation for the list of available client types.
|
39
39
|
#
|
40
40
|
def create_reservation(reservation_ip, reservation_subnet_mask, reservation_mac, reservation_name, reservation_comment = '', client_type = DhcpsApi::ClientType::CLIENT_TYPE_DHCP)
|
41
|
-
subnet_element = DhcpsApi::DHCP_SUBNET_ELEMENT_DATA_V4.new
|
42
|
-
subnet_element[:element_type] = DhcpsApi::DHCP_SUBNET_ELEMENT_TYPE::DhcpReservedIps
|
43
|
-
subnet_element[:element][:reserved_ip] = (reserved_ip = DhcpsApi::DHCP_IP_RESERVATION_V4.new).pointer
|
44
|
-
|
45
|
-
reserved_ip[:reserved_ip_address] = ip_to_uint32(reservation_ip)
|
46
|
-
reserved_ip[:reserved_for_client] = DhcpsApi::DHCP_CLIENT_UID.from_mac_address(reservation_mac).pointer
|
47
|
-
reserved_ip[:b_allowed_client_types] = client_type
|
48
|
-
|
49
41
|
ip_as_octets = reservation_ip.split('.').map {|octet| octet.to_i}
|
50
42
|
mask_as_octets = reservation_subnet_mask.split('.').map {|octet| octet.to_i}
|
51
43
|
subnet_address = (0..3).inject([]) {|all, i| all << (ip_as_octets[i] & mask_as_octets[i])}.join('.')
|
52
44
|
|
53
|
-
|
54
|
-
raise DhcpsApi::Error.new("Error creating reservation.", error) if error != 0
|
55
|
-
|
45
|
+
subnet_element = create_reservation_subnet_element(subnet_address, reservation_ip, reservation_mac, client_type)
|
56
46
|
modify_client(reservation_ip, reservation_subnet_mask, reservation_mac, reservation_name, reservation_comment, 0, client_type)
|
57
47
|
|
58
|
-
subnet_element
|
48
|
+
subnet_element
|
59
49
|
end
|
60
50
|
|
61
51
|
# Deletes subnet reservations.
|
@@ -70,21 +60,9 @@ module DhcpsApi
|
|
70
60
|
#
|
71
61
|
# @return [void]
|
72
62
|
#
|
73
|
-
def delete_reservation(reservation_ip, subnet_address, reservation_mac)
|
74
|
-
|
75
|
-
|
76
|
-
to_delete[:element][:reserved_ip] = (reserved_ip = DhcpsApi::DHCP_IP_RESERVATION_V4.new).pointer
|
77
|
-
|
78
|
-
reserved_ip[:reserved_ip_address] = ip_to_uint32(reservation_ip)
|
79
|
-
reserved_ip[:reserved_for_client] = DhcpsApi::DHCP_CLIENT_UID.from_mac_address(reservation_mac).pointer
|
80
|
-
reserved_ip[:b_allowed_client_types] = DhcpsApi::ClientType::CLIENT_TYPE_NONE
|
81
|
-
|
82
|
-
error = DhcpsApi::Win2008::SubnetElement.DhcpRemoveSubnetElementV4(
|
83
|
-
to_wchar_string(server_ip_address),
|
84
|
-
ip_to_uint32(subnet_address),
|
85
|
-
to_delete.pointer,
|
86
|
-
DhcpsApi::DHCP_FORCE_FLAG::DhcpNoForce)
|
87
|
-
raise DhcpsApi::Error.new("Error deleting reservation.", error) if error != 0
|
63
|
+
def delete_reservation(reservation_ip, subnet_address, reservation_mac, client_type = DhcpsApi::ClientType::CLIENT_TYPE_DHCP)
|
64
|
+
delete_subnet_element(subnet_address, DhcpsApi::DHCP_SUBNET_ELEMENT_DATA_V4.build_for_reservation(
|
65
|
+
reservation_ip, reservation_mac, client_type))
|
88
66
|
end
|
89
67
|
|
90
68
|
# Sets dns configuration for a reservation.
|
@@ -115,6 +93,13 @@ module DhcpsApi
|
|
115
93
|
set_reserved_option_value(81, reservation_ip, subnet_address, DhcpsApi::DHCP_OPTION_DATA_TYPE::DhcpDWordOption, [value])
|
116
94
|
end
|
117
95
|
|
96
|
+
def create_reservation_subnet_element(subnet_address, reservation_ip_address, reservation_mac_address, client_type = DhcpsApi::ClientType::CLIENT_TYPE_DHCP)
|
97
|
+
add_subnet_element(subnet_address,
|
98
|
+
DhcpsApi::DHCP_SUBNET_ELEMENT_DATA_V4.build_for_reservation(
|
99
|
+
reservation_ip_address, reservation_mac_address, client_type)
|
100
|
+
)
|
101
|
+
end
|
102
|
+
|
118
103
|
def dhcp_v4_enum_subnet_reservations(subnet_address, preferred_maximum, resume_handle)
|
119
104
|
resume_handle_ptr = FFI::MemoryPointer.new(:uint32).put_uint32(0, resume_handle)
|
120
105
|
enum_element_info_ptr_ptr = FFI::MemoryPointer.new(:pointer)
|
data/lib/dhcpsapi/server.rb
CHANGED
@@ -1,8 +1,8 @@
|
|
1
1
|
module DhcpsApi
|
2
2
|
class Server
|
3
|
-
DHCPS_WIN2008_API = Object
|
4
|
-
DHCPS_WIN2012_API = Object
|
5
|
-
DHCPS_NONE = Object
|
3
|
+
DHCPS_WIN2008_API = Object.new
|
4
|
+
DHCPS_WIN2012_API = Object.new
|
5
|
+
DHCPS_NONE = Object.new
|
6
6
|
|
7
7
|
include RubyStructAttrHelpers
|
8
8
|
include CommonMethods
|
@@ -14,6 +14,7 @@ module DhcpsApi
|
|
14
14
|
include OptionValue
|
15
15
|
include Reservation
|
16
16
|
include Subnet
|
17
|
+
include SubnetElement
|
17
18
|
|
18
19
|
attr_reader :server_ip_address
|
19
20
|
|
@@ -32,6 +33,7 @@ module DhcpsApi
|
|
32
33
|
require 'dhcpsapi/win2008/option_value'
|
33
34
|
require 'dhcpsapi/win2008/subnet_element'
|
34
35
|
require 'dhcpsapi/win2008/subnet'
|
36
|
+
require 'dhcpsapi/win2008/subnet_element'
|
35
37
|
|
36
38
|
level = :win2008
|
37
39
|
|
data/lib/dhcpsapi/subnet.rb
CHANGED
@@ -83,17 +83,8 @@ module DhcpsApi
|
|
83
83
|
# @return [Hash]
|
84
84
|
#
|
85
85
|
# @see DHCP_SUBNET_ELEMENT_DATA_V4 DHCP_SUBNET_ELEMENT_DATA_V4 documentation for the list of available fields.
|
86
|
-
def
|
87
|
-
|
88
|
-
subnet_element[:element_type] = DhcpsApi::DHCP_SUBNET_ELEMENT_TYPE::DhcpIpRanges
|
89
|
-
subnet_element[:element][:ip_range] = (ip_range = DhcpsApi::DHCP_IP_RANGE.new).pointer
|
90
|
-
ip_range[:start_address] = ip_to_uint32(start_address)
|
91
|
-
ip_range[:end_address] = ip_to_uint32(end_address)
|
92
|
-
|
93
|
-
error = DhcpsApi::Win2008::SubnetElement.DhcpAddSubnetElementV4(to_wchar_string(server_ip_address), ip_to_uint32(subnet_address), subnet_element.pointer)
|
94
|
-
raise DhcpsApi::Error.new("Error adding a subnet range to '%s'." % [subnet_address], error) if error != 0
|
95
|
-
|
96
|
-
subnet_element.as_ruby_struct
|
86
|
+
def create_subnet_ip_range(subnet_address, start_address, end_address)
|
87
|
+
add_subnet_element(subnet_address, DhcpsApi::DHCP_SUBNET_ELEMENT_DATA_V4.build_for_subnet_range(start_address, end_address))
|
97
88
|
end
|
98
89
|
|
99
90
|
# Deletes a subnet ip address range.
|
@@ -108,18 +99,7 @@ module DhcpsApi
|
|
108
99
|
#
|
109
100
|
# @return [void]
|
110
101
|
def delete_subnet_ip_range(subnet_address, start_address, end_address)
|
111
|
-
|
112
|
-
to_delete[:element_type] = DhcpsApi::DHCP_SUBNET_ELEMENT_TYPE::DhcpIpRanges
|
113
|
-
to_delete[:element][:ip_range] = (ip_range = DhcpsApi::DHCP_IP_RANGE.new).pointer
|
114
|
-
ip_range[:start_address] = ip_to_uint32(start_address)
|
115
|
-
ip_range[:end_address] = ip_to_uint32(end_address)
|
116
|
-
|
117
|
-
error = DhcpsApi::Win2008::SubnetElement.DhcpRemoveSubnetElementV4(
|
118
|
-
to_wchar_string(server_ip_address),
|
119
|
-
ip_to_uint32(subnet_address),
|
120
|
-
to_delete.pointer,
|
121
|
-
DhcpsApi::DHCP_FORCE_FLAG::DhcpNoForce)
|
122
|
-
raise DhcpsApi::Error.new("Error deleting reservation.", error) if error != 0
|
102
|
+
delete_subnet_element(subnet_address, DhcpsApi::DHCP_SUBNET_ELEMENT_DATA_V4.build_for_subnet_range(start_address, end_address))
|
123
103
|
end
|
124
104
|
|
125
105
|
private
|
@@ -0,0 +1,85 @@
|
|
1
|
+
module DhcpsApi
|
2
|
+
module SubnetElement
|
3
|
+
# Returns a a list of subnet elements.
|
4
|
+
#
|
5
|
+
# @example List subnet elements
|
6
|
+
#
|
7
|
+
# api.list_subnet_elements('192.168.42.0', DhcpsApi::DHCP_SUBNET_ELEMENT_TYPE::DhcpReservedIps)
|
8
|
+
#
|
9
|
+
# @param subnet_address [String] Subnet ip address
|
10
|
+
# @param element_type [DHCP_SUBNET_ELEMENT_TYPE] Subnet element type
|
11
|
+
#
|
12
|
+
# @return [Array<Hash>]
|
13
|
+
#
|
14
|
+
# @see DHCP_SUBNET_ELEMENT_DATA_V4 DHCP_SUBNET_ELEMENT_DATA_V4 documentation for the list of available fields.
|
15
|
+
#
|
16
|
+
def list_subnet_elements(subnet_address, element_type)
|
17
|
+
items, _ = retrieve_items(:dhcp_enum_subnet_elements_v4, subnet_address, element_type, 1024, 0)
|
18
|
+
items
|
19
|
+
end
|
20
|
+
|
21
|
+
# Creates a new subnet element.
|
22
|
+
#
|
23
|
+
# @example Create a new subnet element
|
24
|
+
#
|
25
|
+
# api.add_subnet_element('192.168.42.0', a_subnet_element)
|
26
|
+
#
|
27
|
+
# @param subnet_ip_address [String] Subnet ip address
|
28
|
+
# @param subnet_element [DHCP_SUBNET_ELEMENT_DATA_V4] Subnet element
|
29
|
+
#
|
30
|
+
# @return [Hash]
|
31
|
+
#
|
32
|
+
# @see DHCP_SUBNET_ELEMENT_DATA_V4 DHCP_SUBNET_ELEMENT_DATA_V4 documentation for the list of available fields.
|
33
|
+
#
|
34
|
+
def add_subnet_element(subnet_address, subnet_element)
|
35
|
+
error = DhcpsApi::Win2008::SubnetElement.DhcpAddSubnetElementV4(to_wchar_string(server_ip_address), ip_to_uint32(subnet_address), subnet_element.pointer)
|
36
|
+
raise DhcpsApi::Error.new("Error creating subnet element.", error) if error != 0
|
37
|
+
subnet_element.as_ruby_struct
|
38
|
+
end
|
39
|
+
|
40
|
+
# Deletes subnet element.
|
41
|
+
#
|
42
|
+
# @example Delete a subnet element
|
43
|
+
#
|
44
|
+
# api.delete_subnet_element('192.168.42.0', an_existing_subnet_element)
|
45
|
+
#
|
46
|
+
# @param subnet_ip_address [String] Subnet ip address
|
47
|
+
# @param subnet_element [DHCP_SUBNET_ELEMENT_DATA_V4] Subnet element
|
48
|
+
#
|
49
|
+
# @return [void]
|
50
|
+
#
|
51
|
+
def delete_subnet_element(subnet_address, subnet_element)
|
52
|
+
error = DhcpsApi::Win2008::SubnetElement.DhcpRemoveSubnetElementV4(
|
53
|
+
to_wchar_string(server_ip_address),
|
54
|
+
ip_to_uint32(subnet_address),
|
55
|
+
subnet_element.pointer,
|
56
|
+
DhcpsApi::DHCP_FORCE_FLAG::DhcpNoForce)
|
57
|
+
raise DhcpsApi::Error.new("Error deleting subnet element.", error) if error != 0
|
58
|
+
end
|
59
|
+
|
60
|
+
def dhcp_enum_subnet_elements_v4(subnet_address, element_type, preferred_maximum, resume_handle)
|
61
|
+
resume_handle_ptr = FFI::MemoryPointer.new(:uint32).put_uint32(0, resume_handle)
|
62
|
+
subnet_element_info_ptr_ptr = FFI::MemoryPointer.new(:pointer)
|
63
|
+
elements_read_ptr = FFI::MemoryPointer.new(:uint32).put_uint32(0, 0)
|
64
|
+
elements_total_ptr = FFI::MemoryPointer.new(:uint32).put_uint32(0, 0)
|
65
|
+
|
66
|
+
error = DhcpsApi::Win2008::SubnetElement.DhcpEnumSubnetElementsV4(
|
67
|
+
to_wchar_string(server_ip_address), ip_to_uint32(subnet_address), element_type, resume_handle_ptr, preferred_maximum,
|
68
|
+
subnet_element_info_ptr_ptr, elements_read_ptr, elements_total_ptr)
|
69
|
+
return empty_response if error == 259
|
70
|
+
if is_error?(error)
|
71
|
+
unless (subnet_element_info_ptr_ptr.null? || (to_free = subnet_element_info_ptr_ptr.read_pointer).null?)
|
72
|
+
free_memory(DhcpsApi::DHCP_SUBNET_ELEMENT_INFO_ARRAY_V4.new(to_free))
|
73
|
+
end
|
74
|
+
raise DhcpsApi::Error.new("Error retrieving subnet elements for subnet '%s'." % [subnet_address], error)
|
75
|
+
end
|
76
|
+
|
77
|
+
subnet_elements_array = DhcpsApi::DHCP_SUBNET_ELEMENT_INFO_ARRAY_V4.new(subnet_element_info_ptr_ptr.read_pointer)
|
78
|
+
subnet_elements = subnet_elements_array.as_ruby_struct
|
79
|
+
free_memory(subnet_elements_array)
|
80
|
+
|
81
|
+
[subnet_elements, resume_handle_ptr.get_uint32(0), elements_read_ptr.get_uint32(0), elements_total_ptr.get_uint32(0)]
|
82
|
+
end
|
83
|
+
end
|
84
|
+
end
|
85
|
+
|
data/lib/dhcpsapi/version.rb
CHANGED
@@ -22,5 +22,20 @@ module DhcpsApi::Win2008
|
|
22
22
|
);
|
23
23
|
=end
|
24
24
|
attach_function :DhcpRemoveSubnetElementV4, [:pointer, :uint32, :pointer, :uint32], :uint32
|
25
|
+
|
26
|
+
=begin
|
27
|
+
DWORD DHCP_API_FUNCTION DhcpEnumSubnetElementsV4(
|
28
|
+
_In_ DHCP_CONST WCHAR *ServerIpAddress,
|
29
|
+
_In_ DHCP_IP_ADDRESS SubnetAddress,
|
30
|
+
_In_ DHCP_SUBNET_ELEMENT_TYPE EnumElementType,
|
31
|
+
_Inout_ DHCP_RESUME_HANDLE *ResumeHandle,
|
32
|
+
_In_ DWORD PreferredMaximum,
|
33
|
+
_Out_ LPDHCP_SUBNET_ELEMENT_INFO_ARRAY_V4 *EnumElementInfo,
|
34
|
+
_Out_ DWORD *ElementsRead,
|
35
|
+
_Out_ DWORD *ElementsTotal
|
36
|
+
);
|
37
|
+
=end
|
38
|
+
attach_function :DhcpEnumSubnetElementsV4, [:pointer, :uint32, :uint32, :pointer, :uint32, :pointer, :pointer, :pointer], :uint32
|
25
39
|
end
|
26
40
|
end
|
41
|
+
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: dhcpsapi
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.8
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Dmitri Dolguikh
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-10-
|
11
|
+
date: 2016-10-13 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: ffi
|
@@ -88,6 +88,7 @@ files:
|
|
88
88
|
- lib/dhcpsapi/reservation.rb
|
89
89
|
- lib/dhcpsapi/server.rb
|
90
90
|
- lib/dhcpsapi/subnet.rb
|
91
|
+
- lib/dhcpsapi/subnet_element.rb
|
91
92
|
- lib/dhcpsapi/version.rb
|
92
93
|
- lib/dhcpsapi/win2008/class.rb
|
93
94
|
- lib/dhcpsapi/win2008/client.rb
|