option.go 1.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041
  1. package dhcp4
  2. type OptionCode byte
  3. type Option struct {
  4. Code OptionCode
  5. Value []byte
  6. }
  7. // Map of DHCP options
  8. type Options map[OptionCode][]byte
  9. // SelectOrderOrAll has same functionality as SelectOrder, except if the order
  10. // param is nil, whereby all options are added (in arbitrary order).
  11. func (o Options) SelectOrderOrAll(order []byte) []Option {
  12. if order == nil {
  13. opts := make([]Option, 0, len(o))
  14. for i, v := range o {
  15. opts = append(opts, Option{Code: i, Value: v})
  16. }
  17. return opts
  18. }
  19. return o.SelectOrder(order)
  20. }
  21. // SelectOrder returns a slice of options ordered and selected by a byte array
  22. // usually defined by OptionParameterRequestList. This result is expected to be
  23. // used in ReplyPacket()'s []Option parameter.
  24. func (o Options) SelectOrder(order []byte) []Option {
  25. opts := make([]Option, 0, len(order))
  26. for _, v := range order {
  27. if data, ok := o[OptionCode(v)]; ok {
  28. opts = append(opts, Option{Code: OptionCode(v), Value: data})
  29. }
  30. }
  31. return opts
  32. }
  33. type OpCode byte
  34. type MessageType byte // Option 53