소스 검색

Reply on server port if request is a relay

If the request comes from an ephemeral source port, the server will
reply on such port. However the relay will be listening on server port
instead, so the reply is dropped. With this patch the reply always goes
to the server port if the request is a relay.

Signed-off-by: Andrea Barberio <insomniac@slackware.it>
Andrea Barberio 6 년 전
부모
커밋
2bf829493e
1개의 변경된 파일8개의 추가작업 그리고 1개의 파일을 삭제
  1. 8 1
      coredhcp.go

+ 8 - 1
coredhcp.go

@@ -160,7 +160,14 @@ func (s *Server) MainHandler6(conn net.PacketConn, peer net.Addr, req dhcpv6.DHC
 		resp = tmp
 	}
 
-	if _, err := conn.WriteTo(resp.ToBytes(), peer); err != nil {
+	var newPeer = peer
+	if req.IsRelay() {
+		newPeer = &net.UDPAddr{
+			IP:   peer.(*net.UDPAddr).IP,
+			Port: dhcpv6.DefaultServerPort,
+		}
+	}
+	if _, err := conn.WriteTo(resp.ToBytes(), newPeer); err != nil {
 		log.Printf("MainHandler6: conn.Write to %v failed: %v", peer, err)
 	}
 }