From 2812af87bbe8aee95fc682226b642f8c47d8b239 Mon Sep 17 00:00:00 2001 From: Vincent Bernat Date: Tue, 18 Oct 2016 14:01:02 +0200 Subject: [PATCH] Name some numeric constants 240 is the minimum size of a DHCP packet. Since it is used at various places, use a named constant instead. It is also exposed to the user. The DHCP magic cookie also gets a named variable. --- packet.go | 27 ++++++++++++++++++--------- packet_test.go | 3 +-- server.go | 2 +- 3 files changed, 20 insertions(+), 12 deletions(-) diff --git a/packet.go b/packet.go index 0ad24a8..5f17001 100644 --- a/packet.go +++ b/packet.go @@ -57,10 +57,10 @@ func trimNull(d []byte) []byte { return d } -func (p Packet) Cookie() []byte { return p[236:240] } +func (p Packet) Cookie() []byte { return p[236:MinimalPacketSize] } func (p Packet) Options() []byte { - if len(p) > 240 { - return p[240:] + if len(p) > MinimalPacketSize { + return p[MinimalPacketSize:] } return nil } @@ -131,8 +131,8 @@ func NewPacket(opCode OpCode) Packet { p := make(Packet, 241) p.SetOpCode(opCode) p.SetHType(1) // Ethernet - p.SetCookie([]byte{99, 130, 83, 99}) - p[240] = byte(End) + p.SetCookie(MagicCookie) + p[MinimalPacketSize] = byte(End) return p } @@ -145,7 +145,7 @@ func (p *Packet) AddOption(o OptionCode, value []byte) { // Removes all options from packet. func (p *Packet) StripOptions() { - *p = append((*p)[:240], byte(End)) + *p = append((*p)[:MinimalPacketSize], byte(End)) } // Creates a request packet that a Client would send to a server. @@ -188,14 +188,23 @@ func ReplyPacket(req Packet, mt MessageType, serverId, yIAddr net.IP, leaseDurat // PadToMinSize pads a packet so that when sent over UDP, the entire packet, // is 300 bytes (BOOTP min), to be compatible with really old devices. -var padder [272]byte +var padder [PaddedMinimalPacketSize]byte func (p *Packet) PadToMinSize() { - if n := len(*p); n < 272 { - *p = append(*p, padder[:272-n]...) + if n := len(*p); n < PaddedMinimalPacketSize { + *p = append(*p, padder[:PaddedMinimalPacketSize-n]...) } } +// Some constants +const ( + MinimalPacketSize = 240 // Minimal packet size + PaddedMinimalPacketSize = 272 +) + +// MagicCookie +var MagicCookie = []byte{99, 130, 83, 99} + // OpCodes const ( BootRequest OpCode = 1 // From Client diff --git a/packet_test.go b/packet_test.go index b0839cb..e701200 100644 --- a/packet_test.go +++ b/packet_test.go @@ -265,12 +265,11 @@ func TestReplyPacket(t *testing.T) { // behavior does not change. func newPacket(opCode OpCode) Packet { const ethernetHType = 1 - var cookie = []byte{99, 130, 83, 99} p := make(Packet, 241) p[0] = byte(opCode) p[1] = ethernetHType - copy(p[236:240], cookie) + copy(p[236:240], MagicCookie) p[240] = byte(End) return p diff --git a/server.go b/server.go index 7a5d4be..7b65b22 100644 --- a/server.go +++ b/server.go @@ -37,7 +37,7 @@ func Serve(conn ServeConn, handler Handler) error { if err != nil { return err } - if n < 240 { // Packet too small to be DHCP + if n < MinimalPacketSize { // Packet too small to be DHCP continue } req := Packet(buffer[:n])