func()

in lib/handler.go [177:213]


func (s *Server) handleRawPacketV4(buffer []byte, peer *net.UDPAddr) {
	// runs in a separate go routine
	start := time.Now()
	var message DHCPMessage
	packet, err := dhcpv4.FromBytes(buffer)
	if err != nil {
		glog.Errorf("Error encoding DHCPv4 packet: %s", err)
		s.logger.LogErr(start, nil, nil, peer, ErrParse, err)
		return
	}

	if s.server {
		s.handleV4Server(start, packet, peer)
		return
	}

	message.XID = packet.TransactionID[:]
	message.Peer = peer
	message.ClientID = packet.ClientHWAddr
	message.Mac = packet.ClientHWAddr
	if vd, err := ztpv4.ParseVendorData(packet); err != nil {
		glog.V(2).Infof("error parsing vendor data: %s", err)
	} else {
		message.Serial = vd.Serial
	}

	packet.HopCount++

	server, err := selectDestinationServer(s.config, &message)
	if err != nil {
		glog.Errorf("%s, Drop due to %s", packet.Summary(), err)
		s.logger.LogErr(start, nil, packet.ToBytes(), peer, ErrNoServer, err)
		return
	}

	s.sendToServer(start, server, packet.ToBytes(), peer)
}