]> git.ipfire.org Git - thirdparty/wireguard-tools.git/commitdiff
external-tests: add keepalive packet
authorJason A. Donenfeld <Jason@zx2c4.com>
Thu, 1 Jun 2017 16:45:20 +0000 (18:45 +0200)
committerJason A. Donenfeld <Jason@zx2c4.com>
Thu, 1 Jun 2017 16:45:20 +0000 (18:45 +0200)
Signed-off-by: Jason A. Donenfeld <Jason@zx2c4.com>
contrib/external-tests/go/main.go
contrib/external-tests/rust/src/main.rs

index 013a1a9ed0a0184807f79ffabd38af82245b226a..435063d2d1a8c48d8faf57abf3b94106ca4d5de2 100644 (file)
@@ -172,4 +172,16 @@ func main() {
        if echo.ID != 921 || echo.Seq != 438 || string(echo.Data) != "WireGuard" {
                log.Fatalf("incorrect echo response: %#v", echo)
        }
+
+       keepalivePacket := make([]byte, 16)
+       keepalivePacket[0] = 4 // Type: Data
+       keepalivePacket[1] = 0 // Reserved
+       keepalivePacket[2] = 0 // Reserved
+       keepalivePacket[3] = 0 // Reserved
+       binary.LittleEndian.PutUint32(keepalivePacket[4:], theirIndex)
+       binary.LittleEndian.PutUint64(keepalivePacket[8:], 1) // Nonce
+       keepalivePacket = sendCipher.Encrypt(keepalivePacket, nil, nil) // Empty data means keepalive
+       if _, err := conn.Write(keepalivePacket); err != nil {
+               log.Fatalf("error writing keepalive message: %s", err)
+       }
 }
index 47c432fa20ba1f03a89b02dfaab4665ec26f84c9..9fb0f5a0e97072475ffe22a2ed7dbc90a0544afb 100644 (file)
@@ -123,4 +123,15 @@ fn main() {
        assert!(icmp_reply.get_icmp_type() == IcmpTypes::EchoReply && icmp_reply.get_icmp_code() == echo_reply::IcmpCodes::NoCode);
        assert!(icmp_reply.get_identifier() == 921 && icmp_reply.get_sequence_number() == 438);
        assert!(icmp_reply.payload() == b"WireGuard");
+
+       let mut keepalive_packet = [0; 32];
+       keepalive_packet[0] = 4; /* Type: Data */
+       keepalive_packet[1] = 0; /* Reserved */
+       keepalive_packet[2] = 0; /* Reserved */
+       keepalive_packet[3] = 0; /* Reserved */
+       LittleEndian::write_u32(&mut keepalive_packet[4..], their_index);
+       LittleEndian::write_u64(&mut keepalive_packet[8..], 1);
+       let empty_payload = [0; 0]; /* Empty payload means keepalive */
+       noise.write_message(&empty_payload, &mut keepalive_packet[16..]).unwrap();
+       socket.send_to(&keepalive_packet, TEST_SERVER).unwrap();
 }