/
dhcp6.go
48 lines (42 loc) · 1.83 KB
/
dhcp6.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
package dhcp6server
import (
"github.com/mdlayher/dhcp6"
)
// Handler provides an interface which allows structs to act as DHCPv6 server
// handlers. ServeDHCP implementations receive a copy of the incoming DHCP
// request via the Request parameter, and allow outgoing communication via
// the ResponseSender.
//
// ServeDHCP implementations can choose to write a response packet using the
// ResponseSender interface, or choose to not write anything at all. If no packet
// is sent back to the client, it may choose to back off and retry, or attempt
// to pursue communication with other DHCP servers.
type Handler interface {
ServeDHCP(ResponseSender, *Request)
}
// HandlerFunc is an adapter type which allows the use of normal functions as
// DHCP handlers. If f is a function with the appropriate signature,
// HandlerFunc(f) is a Handler struct that calls f.
type HandlerFunc func(ResponseSender, *Request)
// ServeDHCP calls f(w, r), allowing regular functions to implement Handler.
func (f HandlerFunc) ServeDHCP(w ResponseSender, r *Request) {
f(w, r)
}
// ResponseSender provides an interface which allows a DHCP handler to construct
// and send a DHCP response packet. In addition, the server automatically handles
// copying certain options from a client Request to a ResponseSender's Options,
// including:
// - Client ID (OptionClientID)
// - Server ID (OptionServerID)
//
// ResponseSender implementations should use the same transaction ID sent in a
// client Request.
type ResponseSender interface {
// Options returns the Options map that will be sent to a client
// after a call to Send.
Options() dhcp6.Options
// Send generates a DHCP response packet using the input message type
// and any options set by Options. Send returns the number of bytes
// sent and any errors which occurred.
Send(dhcp6.MessageType) (int, error)
}