Пример #1
0
func (dp *DhcpPacket) ConstructWithPreAllocatedBuffer(buffer []byte, msgType option.MessageType) (err error) {
	if cap(buffer) < 1500 {
		buffer = make([]byte, 241, 1500)
	} else if len(buffer) != 241 {
		buffer = buffer[:241]
	}
	dp.Raw = buffer
	dp.SetHardwareType(byte(1))
	dp.SetHardwareLength(byte(6))
	dp.SetMagicCookie()
	err = dp.ResetAllOptions()
	if err != nil {
		return err
	}
	opt53 := new(option.Option53MessageType)
	opt53.Construct(msgType)
	dp.AddOption(opt53)

	switch msgType {
	case option.DHCPDISCOVER:
		fallthrough
	case option.DHCPREQUEST:
		fallthrough
	case option.DHCPDECLINE:
		fallthrough
	case option.DHCPRELEASE:
		dp.SetOpCode(OP_BOOTREQUEST)
		// break
	case option.DHCPOFFER:
		fallthrough
	case option.DHCPACK:
		fallthrough
	case option.DHCPNAK:
		dp.SetOpCode(OP_BOOTREPLY)
		// break
	}
	return nil
}