in lib/handler.go [301:330]
func (s *Server) handleV6RelayRepl(start time.Time, packet dhcpv6.DHCPv6, peer *net.UDPAddr) {
// when we get a relay-reply, we need to unwind the message, removing the top
// relay-reply info and passing on the inner part of the message
msg, err := dhcpv6.DecapsulateRelay(packet)
if err != nil {
glog.Errorf("Failed to decapsulate packet, drop due to %s", err)
s.logger.LogErr(start, nil, packet.ToBytes(), peer, ErrParse, err)
return
}
peerAddr := packet.(*dhcpv6.RelayMessage).PeerAddr
// send the packet to the peer addr
addr := &net.UDPAddr{
IP: peerAddr,
Port: dhcpv6.DefaultServerPort,
Zone: "",
}
conn, err := net.DialUDP("udp", s.config.ReplyAddr, addr)
if err != nil {
glog.Errorf("Error creating udp connection %s", err)
s.logger.LogErr(start, nil, packet.ToBytes(), peer, ErrConnect, err)
return
}
conn.Write(msg.ToBytes())
err = s.logger.LogSuccess(start, nil, packet.ToBytes(), peer)
if err != nil {
glog.Errorf("Failed to log request: %s", err)
}
conn.Close()
return
}