-
Notifications
You must be signed in to change notification settings - Fork 2
/
dhcp.go
161 lines (132 loc) · 3.4 KB
/
dhcp.go
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
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
package adguard
import (
"fmt"
"net/http"
"strings"
// custom json module to allow for omitting zero value structs
"github.com/clarketm/json"
)
// GetDhcpStatus - Returns the current DHCP status
func (c *ADG) GetDhcpStatus() (*DhcpStatus, error) {
// initialize request
req, err := http.NewRequest("GET", fmt.Sprintf("%s/dhcp/status", c.HostURL), nil)
if err != nil {
return nil, err
}
// perform request
body, err := c.doRequest(req)
if err != nil {
return nil, err
}
// convert response to DhcpStatus object
var dhcpStatus DhcpStatus
err = json.Unmarshal(body, &dhcpStatus)
if err != nil {
return nil, err
}
return &dhcpStatus, nil
}
// GetDhcpStatus - Returns the available DHCP interfaces
func (c *ADG) GetDhcpInterfaces() (*NetInterfaces, error) {
// initialize request
req, err := http.NewRequest("GET", fmt.Sprintf("%s/dhcp/interfaces", c.HostURL), nil)
if err != nil {
return nil, err
}
// perform request
body, err := c.doRequest(req)
if err != nil {
return nil, err
}
// convert response to NetInterfaces object
var netInterfaces NetInterfaces
err = json.Unmarshal(body, &netInterfaces)
if err != nil {
return nil, err
}
return &netInterfaces, nil
}
// SetDhcpConfig - Sets DHCP server configuration
func (c *ADG) SetDhcpConfig(dhcpConfig DhcpConfig) (*DhcpConfig, error) {
// convert provided DHCP config to JSON
rb, err := json.Marshal(dhcpConfig)
if err != nil {
return nil, err
}
// initialize request
req, err := http.NewRequest("POST", fmt.Sprintf("%s/dhcp/set_config", c.HostURL), strings.NewReader(string(rb)))
if err != nil {
return nil, err
}
// perform request
body, err := c.doRequest(req)
if err != nil {
return nil, err
}
// appease Go
_ = body
// return the same DHCP config that was passed
return &dhcpConfig, nil
}
// ManageDhcpStaticLease - Add ot remove a DHCP static lease
func (c *ADG) ManageDhcpStaticLease(add bool, dhcpStaticLease DhcpStaticLease) (*DhcpStaticLease, error) {
// convert provided DHCP static lease to JSON
rb, err := json.Marshal(dhcpStaticLease)
if err != nil {
return nil, err
}
// default to remove operation
operation := "remove"
if add {
// flip to add operation
operation = "add"
}
// initialize request
req, err := http.NewRequest("POST", fmt.Sprintf("%s/dhcp/%s_static_lease", c.HostURL, operation), strings.NewReader(string(rb)))
if err != nil {
return nil, err
}
// perform request
body, err := c.doRequest(req)
if err != nil {
return nil, err
}
// appease Go
_ = body
// return the same DHCP static lease that was passed
return &dhcpStaticLease, nil
}
// ResetDhcpConfig - reset all DHCP configuration to defaults
func (c *ADG) ResetDhcpConfig() error {
// initialize request
req, err := http.NewRequest("POST", fmt.Sprintf("%s/dhcp/reset", c.HostURL), strings.NewReader(string([]byte(`{}`))))
if err != nil {
return err
}
// perform request
body, err := c.doRequest(req)
if err != nil {
return err
}
// appease Go
_ = body
// return nothing
return nil
}
// ResetDhcpStaticLeases - reset all DHCP static leases
func (c *ADG) ResetDhcpStaticLeases() error {
// initialize request
req, err := http.NewRequest("POST", fmt.Sprintf("%s/dhcp/reset_leases", c.HostURL), strings.NewReader(string([]byte(`{}`))))
if err != nil {
return err
}
// perform request
body, err := c.doRequest(req)
if err != nil {
return err
}
// appease Go
_ = body
// return nothing
return nil
}