diff options
Diffstat (limited to 'dhcpv4/option_parameter_request_list.go')
-rw-r--r-- | dhcpv4/option_parameter_request_list.go | 23 |
1 files changed, 7 insertions, 16 deletions
diff --git a/dhcpv4/option_parameter_request_list.go b/dhcpv4/option_parameter_request_list.go index 865b2d7..8516e3b 100644 --- a/dhcpv4/option_parameter_request_list.go +++ b/dhcpv4/option_parameter_request_list.go @@ -3,6 +3,8 @@ package dhcpv4 import ( "fmt" "strings" + + "github.com/u-root/u-root/pkg/uio" ) // This option implements the parameter request list option @@ -16,23 +18,12 @@ type OptParameterRequestList struct { // ParseOptParameterRequestList returns a new OptParameterRequestList from a // byte stream, or error if any. func ParseOptParameterRequestList(data []byte) (*OptParameterRequestList, error) { - // Should at least have code + length byte. - if len(data) < 2 { - return nil, ErrShortByteStream - } - code := OptionCode(data[0]) - if code != OptionParameterRequestList { - return nil, fmt.Errorf("expected code %v, got %v", OptionParameterRequestList, code) - } - length := int(data[1]) - if len(data) < length+2 { - return nil, ErrShortByteStream - } - var requestedOpts []OptionCode - for _, opt := range data[2 : length+2] { - requestedOpts = append(requestedOpts, OptionCode(opt)) + buf := uio.NewBigEndianBuffer(data) + requestedOpts := make([]OptionCode, 0, buf.Len()) + for buf.Len() > 0 { + requestedOpts = append(requestedOpts, OptionCode(buf.Read8())) } - return &OptParameterRequestList{RequestedOpts: requestedOpts}, nil + return &OptParameterRequestList{RequestedOpts: requestedOpts}, buf.Error() } // Code returns the option code. |