- Re-implement WinDivertHelperParseIPv6Address(). Previous version was just
too bug-prone, so re-try from scratch. New version works for several tests. - Fix broken WinDivertAToX(). - New test case: IPv6 TCP SYN.
This commit is contained in:
+21
-6
@@ -59,25 +59,31 @@ static BOOL run_test(HANDLE inject_handle, const char *filter,
|
||||
/*
|
||||
* Test data.
|
||||
*/
|
||||
struct packet pkt_echo_request =
|
||||
static struct packet pkt_echo_request =
|
||||
{
|
||||
echo_request,
|
||||
sizeof(echo_request),
|
||||
"ipv4_icmp_echo_req"
|
||||
};
|
||||
struct packet pkt_http_request =
|
||||
static struct packet pkt_http_request =
|
||||
{
|
||||
http_request,
|
||||
sizeof(http_request),
|
||||
"ipv4_tcp_http_req"
|
||||
};
|
||||
struct packet pkt_ipv6_exthdrs_udp =
|
||||
static struct packet pkt_ipv6_tcp_syn =
|
||||
{
|
||||
ipv6_tcp_syn,
|
||||
sizeof(ipv6_tcp_syn),
|
||||
"ipv6_tcp_syn"
|
||||
};
|
||||
static struct packet pkt_ipv6_exthdrs_udp =
|
||||
{
|
||||
ipv6_exthdrs_udp,
|
||||
sizeof(ipv6_exthdrs_udp),
|
||||
"ipv6_exthdrs_udp"
|
||||
};
|
||||
struct test tests[] =
|
||||
static struct test tests[] =
|
||||
{
|
||||
{"outbound and icmp", &pkt_echo_request, TRUE},
|
||||
{"outbound", &pkt_echo_request, TRUE},
|
||||
@@ -98,6 +104,15 @@ struct test tests[] =
|
||||
{"tcp.PayloadLength <= 469", &pkt_http_request, TRUE},
|
||||
{"tcp.PayloadLength > 469", &pkt_http_request, FALSE},
|
||||
{"tcp.PayloadLength < 469", &pkt_http_request, FALSE},
|
||||
{"ipv6", &pkt_ipv6_tcp_syn, TRUE},
|
||||
{"ip", &pkt_ipv6_tcp_syn, FALSE},
|
||||
{"tcp.Syn", &pkt_ipv6_tcp_syn, TRUE},
|
||||
{"tcp.Syn == 1 && tcp.Ack == 0", &pkt_ipv6_tcp_syn, TRUE},
|
||||
{"tcp.PayloadLength == 0", &pkt_ipv6_tcp_syn, TRUE},
|
||||
{"ipv6.SrcAddr == 1234:5678:1::aabb:ccdd", &pkt_ipv6_tcp_syn, TRUE},
|
||||
{"ipv6.SrcAddr == aabb:5678:1::1234:ccdd", &pkt_ipv6_tcp_syn, FALSE},
|
||||
{"tcp.SrcPort == 50046", &pkt_ipv6_tcp_syn, TRUE},
|
||||
{"tcp.SrcPort == 0x0000C37E", &pkt_ipv6_tcp_syn, TRUE},
|
||||
{"true", &pkt_ipv6_exthdrs_udp, TRUE},
|
||||
{"udp", &pkt_ipv6_exthdrs_udp, TRUE},
|
||||
{"tcp", &pkt_ipv6_exthdrs_udp, FALSE},
|
||||
@@ -233,7 +248,7 @@ static BOOL run_test(HANDLE inject_handle, const char *filter,
|
||||
}
|
||||
|
||||
// (3) Wait for the packet to arrive.
|
||||
// NOTE: This may fail, so set a generous time-out of 1 second.
|
||||
// NOTE: This may fail, so set a generous time-out of 250ms.
|
||||
memset(&overlapped, 0, sizeof(overlapped));
|
||||
event = CreateEvent(NULL, FALSE, FALSE, NULL);
|
||||
if (event == NULL)
|
||||
@@ -254,7 +269,7 @@ read_failed:
|
||||
goto failed;
|
||||
}
|
||||
|
||||
switch (WaitForSingleObject(event, 1000))
|
||||
switch (WaitForSingleObject(event, 250))
|
||||
{
|
||||
case WAIT_OBJECT_0:
|
||||
break;
|
||||
|
||||
@@ -103,6 +103,21 @@ static unsigned char http_request[] =
|
||||
0x0a
|
||||
};
|
||||
|
||||
// IPV6 TCP SYN
|
||||
static unsigned char ipv6_tcp_syn[] =
|
||||
{
|
||||
0x60, 0x00, 0x00, 0x00, 0x00, 0x28, 0x06, 0x40,
|
||||
0x12, 0x34, 0x56, 0x78, 0x00, 0x01, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0xaa, 0xbb, 0xcc, 0xdd,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01,
|
||||
0xc3, 0x7e, 0x00, 0x17, 0xe1, 0xd7, 0xc8, 0xaa,
|
||||
0x00, 0x00, 0x00, 0x00, 0xa0, 0x02, 0xaa, 0xaa,
|
||||
0x00, 0x00, 0x00, 0x00, 0x02, 0x04, 0xff, 0xc4,
|
||||
0x04, 0x02, 0x08, 0x0a, 0xff, 0xff, 0x91, 0x86,
|
||||
0x00, 0x00, 0x00, 0x00, 0x01, 0x03, 0x03, 0x07
|
||||
};
|
||||
|
||||
// IPV6 EXTENSION HEADERS UDP
|
||||
static unsigned char ipv6_exthdrs_udp[] =
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user