Skip to content

Commit

Permalink
cleanup(tests): improve network methods
Browse files Browse the repository at this point in the history
Signed-off-by: Andrea Terzolo <andreaterzolo3@gmail.com>
  • Loading branch information
Andreagit97 authored and poiana committed Aug 29, 2024
1 parent b93a779 commit c5a6a68
Show file tree
Hide file tree
Showing 11 changed files with 164 additions and 153 deletions.
52 changes: 36 additions & 16 deletions test/drivers/event_class/event_class.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -406,7 +406,7 @@ void event_test::connect_ipv4_client_to_server(int32_t* client_socket, sockaddr_
assert_syscall_state(SYSCALL_SUCCESS, "connect (client)", syscall(__NR_connect, *client_socket, (sockaddr*)server_sockaddr, sizeof(*server_sockaddr)), NOT_EQUAL, -1);
}

void event_test::client_to_server(send_data send_d, receive_data receive_d, protocol_L3 proto_L3, protocol_L4 proto_L4)
void event_test::client_to_server(send_data send_d, recv_data receive_d, network_config net_config)
{
int32_t client_socket_fd = 0;
int32_t server_socket_fd = 0;
Expand All @@ -421,34 +421,34 @@ void event_test::client_to_server(send_data send_d, receive_data receive_d, prot
// Setup Connection
//////////////////////

switch(proto_L3)
switch(net_config.proto_L3)
{
case protocol_L3::IPv4:
if(proto_L4 == protocol_L4::TCP)
if(net_config.proto_L4 == protocol_L4::TCP)
{
this->connect_ipv4_client_to_server(&client_socket_fd, &client_addr, &server_socket_fd,
&server_addr);
&server_addr, net_config.client_port, net_config.server_port);
}
else
{
this->connect_ipv4_udp_client_to_server(&client_socket_fd, &client_addr, &server_socket_fd,
&server_addr);
&server_addr, net_config.client_port, net_config.server_port);
}
// for the `recv*` syscalls we will use the memory of the server sockaddr but this will be overwritten
// by the kernel so it shouldn't be an issue.
addr = (sockaddr*)&server_addr;
addrlen = sizeof(server_addr);
break;
case protocol_L3::IPv6:
if(proto_L4 == protocol_L4::TCP)
if(net_config.proto_L4 == protocol_L4::TCP)
{
this->connect_ipv6_client_to_server(&client_socket_fd, &client_addr6, &server_socket_fd,
&server_addr6);
&server_addr6, net_config.client_port, net_config.server_port);
}
else
{
this->connect_ipv6_udp_client_to_server(&client_socket_fd, &client_addr6, &server_socket_fd,
&server_addr6);
&server_addr6, net_config.client_port, net_config.server_port);
}
addr = (sockaddr*)&server_addr6;
addrlen = sizeof(server_addr6);
Expand Down Expand Up @@ -557,7 +557,7 @@ void event_test::client_to_server(send_data send_d, receive_data receive_d, prot
// Receive message
//////////////////////
int receive_socket_fd = server_socket_fd;
if(proto_L4 == protocol_L4::TCP)
if(net_config.proto_L4 == protocol_L4::TCP)
{
// In case of TCP we need to accept the connection.
receive_socket_fd = syscall(__NR_accept4, server_socket_fd, NULL, NULL, 0);
Expand Down Expand Up @@ -648,7 +648,7 @@ void event_test::client_to_server(send_data send_d, receive_data receive_d, prot
//////////////////////
// Cleaning phase
//////////////////////
if(proto_L4 == protocol_L4::TCP)
if(net_config.proto_L4 == protocol_L4::TCP)
{
syscall(__NR_shutdown, receive_socket_fd, 2);
syscall(__NR_close, receive_socket_fd);
Expand All @@ -659,6 +659,26 @@ void event_test::client_to_server(send_data send_d, receive_data receive_d, prot
syscall(__NR_close, client_socket_fd);
}

void event_test::client_to_server_ipv4_tcp(send_data send_d, recv_data receive_d, int32_t client_port, int32_t server_port)
{
this->client_to_server(send_d, receive_d, network_config{.proto_L3 = protocol_L3::IPv4, .proto_L4 = protocol_L4::TCP, .client_port = client_port, .server_port = server_port});
}

void event_test::client_to_server_ipv4_udp(send_data send_d, recv_data receive_d, int32_t client_port, int32_t server_port)
{
this->client_to_server(send_d, receive_d, network_config{.proto_L3 = protocol_L3::IPv4, .proto_L4 = protocol_L4::UDP, .client_port = client_port, .server_port = server_port});
}

void event_test::client_to_server_ipv6_tcp(send_data send_d, recv_data receive_d, int32_t client_port, int32_t server_port)
{
this->client_to_server(send_d, receive_d, network_config{.proto_L3 = protocol_L3::IPv6, .proto_L4 = protocol_L4::TCP, .client_port = client_port, .server_port = server_port});
}

void event_test::client_to_server_ipv6_udp(send_data send_d, recv_data receive_d, int32_t client_port, int32_t server_port)
{
this->client_to_server(send_d, receive_d, network_config{.proto_L3 = protocol_L3::IPv6, .proto_L4 = protocol_L4::UDP, .client_port = client_port, .server_port = server_port});
}

void event_test::connect_ipv4_udp_client_to_server(int32_t* client_socket, sockaddr_in* client_sockaddr, int32_t* server_socket, sockaddr_in* server_sockaddr, int32_t port_client, int32_t port_server)
{
/* Create the server socket. */
Expand All @@ -685,15 +705,15 @@ void event_test::connect_ipv4_udp_client_to_server(int32_t* client_socket, socka
assert_syscall_state(SYSCALL_SUCCESS, "bind (client)", syscall(__NR_bind, *client_socket, (sockaddr*)client_sockaddr, sizeof(*client_sockaddr)), NOT_EQUAL, -1);
}

void event_test::connect_ipv6_client_to_server(int32_t* client_socket, sockaddr_in6* client_sockaddr, int32_t* server_socket, sockaddr_in6* server_sockaddr)
void event_test::connect_ipv6_client_to_server(int32_t* client_socket, sockaddr_in6* client_sockaddr, int32_t* server_socket, sockaddr_in6* server_sockaddr, int32_t port_client, int32_t port_server)
{
/* Create the server socket. */
*server_socket = syscall(__NR_socket, AF_INET6, SOCK_STREAM | SOCK_NONBLOCK, 0);
assert_syscall_state(SYSCALL_SUCCESS, "socket (server)", *server_socket, NOT_EQUAL, -1);
server_reuse_address_port(*server_socket);

memset(server_sockaddr, 0, sizeof(*server_sockaddr));
server_fill_sockaddr_in6(server_sockaddr);
server_fill_sockaddr_in6(server_sockaddr, port_server);

/* Now we bind the server socket with the server address. */
assert_syscall_state(SYSCALL_SUCCESS, "bind (server)", syscall(__NR_bind, *server_socket, (sockaddr*)server_sockaddr, sizeof(*server_sockaddr)), NOT_EQUAL, -1);
Expand All @@ -706,22 +726,22 @@ void event_test::connect_ipv6_client_to_server(int32_t* client_socket, sockaddr_
client_reuse_address_port(*client_socket);

memset(client_sockaddr, 0, sizeof(*client_sockaddr));
client_fill_sockaddr_in6(client_sockaddr);
client_fill_sockaddr_in6(client_sockaddr, port_client);

/* We need to bind the client socket with an address otherwise we cannot assert against it. */
assert_syscall_state(SYSCALL_SUCCESS, "bind (client)", syscall(__NR_bind, *client_socket, (sockaddr*)client_sockaddr, sizeof(*client_sockaddr)), NOT_EQUAL, -1);
assert_syscall_state(SYSCALL_SUCCESS, "connect (client)", syscall(__NR_connect, *client_socket, (sockaddr*)server_sockaddr, sizeof(*server_sockaddr)), NOT_EQUAL, -1);
}

void event_test::connect_ipv6_udp_client_to_server(int32_t* client_socket, sockaddr_in6* client_sockaddr, int32_t* server_socket, sockaddr_in6* server_sockaddr)
void event_test::connect_ipv6_udp_client_to_server(int32_t* client_socket, sockaddr_in6* client_sockaddr, int32_t* server_socket, sockaddr_in6* server_sockaddr, int32_t port_client, int32_t port_server)
{
/* Create the server socket. */
*server_socket = syscall(__NR_socket, AF_INET6, SOCK_DGRAM, 0);
assert_syscall_state(SYSCALL_SUCCESS, "socket (server)", *server_socket, NOT_EQUAL, -1);
server_reuse_address_port(*server_socket);

memset(server_sockaddr, 0, sizeof(*server_sockaddr));
server_fill_sockaddr_in6(server_sockaddr);
server_fill_sockaddr_in6(server_sockaddr, port_server);

/* Now we bind the server socket with the server address. */
assert_syscall_state(SYSCALL_SUCCESS, "bind (server)", syscall(__NR_bind, *server_socket, (sockaddr*)server_sockaddr, sizeof(*server_sockaddr)), NOT_EQUAL, -1);
Expand All @@ -733,7 +753,7 @@ void event_test::connect_ipv6_udp_client_to_server(int32_t* client_socket, socka
client_reuse_address_port(*client_socket);

memset(client_sockaddr, 0, sizeof(*client_sockaddr));
client_fill_sockaddr_in6(client_sockaddr);
client_fill_sockaddr_in6(client_sockaddr, port_client);

/* We need to bind the client socket with an address otherwise we cannot assert against it. */
assert_syscall_state(SYSCALL_SUCCESS, "bind (client)", syscall(__NR_bind, *client_socket, (sockaddr*)client_sockaddr, sizeof(*client_sockaddr)), NOT_EQUAL, -1);
Expand Down
20 changes: 16 additions & 4 deletions test/drivers/event_class/event_class.h
Original file line number Diff line number Diff line change
Expand Up @@ -43,7 +43,7 @@ struct send_data {
bool null_sockaddr;
};

struct receive_data {
struct recv_data {
int syscall_num;
bool null_sockaddr;
bool null_receiver_buffer;
Expand All @@ -62,6 +62,14 @@ enum protocol_L3
IPv6 = 1,
};

struct network_config
{
protocol_L3 proto_L3;
protocol_L4 proto_L4;
int32_t client_port;
int32_t server_port;
};

/* Assertion operators */
enum assertion_operators
{
Expand Down Expand Up @@ -355,12 +363,16 @@ class event_test
void connect_ipv4_udp_client_to_server(int32_t* client_socket, struct sockaddr_in* client_sockaddr, int32_t* server_socket, struct sockaddr_in* server_sockaddr, int32_t client_port = IPV4_PORT_CLIENT, int32_t server_port = IPV4_PORT_SERVER);

// todo!: we should rename it into `connect_ipv6_client_to_server`
void connect_ipv6_client_to_server(int32_t* client_socket, struct sockaddr_in6* client_sockaddr, int32_t* server_socket, struct sockaddr_in6* server_sockaddr);
void connect_ipv6_udp_client_to_server(int32_t* client_socket, sockaddr_in6* client_sockaddr, int32_t* server_socket, sockaddr_in6* server_sockaddr);
void connect_ipv6_client_to_server(int32_t* client_socket, struct sockaddr_in6* client_sockaddr, int32_t* server_socket, struct sockaddr_in6* server_sockaddr, int32_t client_port = IPV6_PORT_CLIENT, int32_t server_port = IPV6_PORT_SERVER);
void connect_ipv6_udp_client_to_server(int32_t* client_socket, sockaddr_in6* client_sockaddr, int32_t* server_socket, sockaddr_in6* server_sockaddr, int32_t client_port = IPV6_PORT_CLIENT, int32_t server_port = IPV6_PORT_SERVER);

void connect_unix_client_to_server(int32_t* client_socket, struct sockaddr_un* client_sockaddr, int32_t* server_socket, struct sockaddr_un* server_sockaddr);

void client_to_server(send_data send_d, receive_data receive_d, protocol_L3 proto_L3, protocol_L4 proto_L4);
void client_to_server(send_data send_d, recv_data receive_d, network_config net_config);
void client_to_server_ipv4_tcp(send_data send_d, recv_data receive_d = {.skip_recv_phase = true}, int32_t client_port = IP_PORT_CLIENT, int32_t server_port = IP_PORT_SERVER);
void client_to_server_ipv4_udp(send_data send_d, recv_data receive_d = {.skip_recv_phase = true}, int32_t client_port = IP_PORT_CLIENT, int32_t server_port = IP_PORT_SERVER);
void client_to_server_ipv6_tcp(send_data send_d, recv_data receive_d = {.skip_recv_phase = true}, int32_t client_port = IP_PORT_CLIENT, int32_t server_port = IP_PORT_SERVER);
void client_to_server_ipv6_udp(send_data send_d, recv_data receive_d = {.skip_recv_phase = true}, int32_t client_port = IP_PORT_CLIENT, int32_t server_port = IP_PORT_SERVER);

/////////////////////////////////
// GENERIC EVENT ASSERTIONS
Expand Down
32 changes: 22 additions & 10 deletions test/drivers/event_class/network_utils.h
Original file line number Diff line number Diff line change
Expand Up @@ -16,36 +16,48 @@
/* Server queue length. */
#define QUEUE_LENGTH 2

/* IP ports
* todo!: The distinction between ipv4 and ipv6 ports is not necessary.
* at the moment we keep them just too avoid to touch many files.
*/
#define IP_PORT_DNS 53
#define IP_PORT_EMPTY 0
#define IP_PORT_EMPTY_STRING "0"
#define IP_PORT_CLIENT 51789
#define IP_PORT_CLIENT_STRING "51789"
#define IP_PORT_SERVER 52889
#define IP_PORT_SERVER_STRING "52889"

/*=============================== IPV4 ===========================*/

/* Empty endpoint */
#define IPV4_EMPTY "0.0.0.0"
#define IPV4_PORT_EMPTY 0
#define IPV4_PORT_EMPTY_STRING "0"
#define IPV4_PORT_EMPTY IP_PORT_EMPTY
#define IPV4_PORT_EMPTY_STRING IP_PORT_EMPTY_STRING

/* IPv4 Client */
#define IPV4_CLIENT "127.0.21.34"
#define IPV4_PORT_CLIENT 51789
#define IPV4_PORT_CLIENT_STRING "51789"
#define IPV4_PORT_CLIENT IP_PORT_CLIENT
#define IPV4_PORT_CLIENT_STRING IP_PORT_CLIENT_STRING

/* IPv4 Server */
#define IPV4_SERVER "127.59.21.35"
#define IPV4_PORT_SERVER 52889
#define IPV4_PORT_SERVER_STRING "52889"
#define IPV4_PORT_SERVER IP_PORT_SERVER
#define IPV4_PORT_SERVER_STRING IP_PORT_SERVER_STRING

/*=============================== IPV4 ===========================*/

/*=============================== IPV6 ===========================*/

/* IPv6 Client */
#define IPV6_CLIENT "::ffff:127.0.0.4"
#define IPV6_PORT_CLIENT 51790
#define IPV6_PORT_CLIENT_STRING "51790"
#define IPV6_PORT_CLIENT IP_PORT_CLIENT
#define IPV6_PORT_CLIENT_STRING IP_PORT_CLIENT_STRING

/* IPv6 Server */
#define IPV6_SERVER "::ffff:127.0.0.5"
#define IPV6_PORT_SERVER 52890
#define IPV6_PORT_SERVER_STRING "52890"
#define IPV6_PORT_SERVER IP_PORT_SERVER
#define IPV6_PORT_SERVER_STRING IP_PORT_SERVER_STRING

/*=============================== IPV6 ===========================*/

Expand Down
9 changes: 3 additions & 6 deletions test/drivers/test_suites/syscall_enter_suite/sendmsg_e.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -13,8 +13,7 @@ TEST(SyscallEnter, sendmsgE_ipv4_tcp)

/*=============================== TRIGGER SYSCALL ===========================*/

evt_test->client_to_server(send_data{.syscall_num = __NR_sendmsg}, receive_data{.skip_recv_phase = true},
protocol_L3::IPv4, protocol_L4::TCP);
evt_test->client_to_server_ipv4_tcp(send_data{.syscall_num = __NR_sendmsg});

/*=============================== TRIGGER SYSCALL ===========================*/

Expand Down Expand Up @@ -53,8 +52,7 @@ TEST(SyscallEnter, sendmsgE_ipv4_tcp_NULL_sockaddr)

/*=============================== TRIGGER SYSCALL ===========================*/

evt_test->client_to_server(send_data{.syscall_num = __NR_sendmsg, .null_sockaddr = true},
receive_data{.skip_recv_phase = true}, protocol_L3::IPv4, protocol_L4::TCP);
evt_test->client_to_server_ipv4_tcp(send_data{.syscall_num = __NR_sendmsg, .null_sockaddr = true});

/*=============================== TRIGGER SYSCALL ===========================*/

Expand Down Expand Up @@ -104,8 +102,7 @@ TEST(SyscallEnter, sendmsgE_ipv4_udp)

/*=============================== TRIGGER SYSCALL ===========================*/

evt_test->client_to_server(send_data{.syscall_num = __NR_sendmsg}, receive_data{.skip_recv_phase = true},
protocol_L3::IPv4, protocol_L4::UDP);
evt_test->client_to_server_ipv4_udp(send_data{.syscall_num = __NR_sendmsg});

/*=============================== TRIGGER SYSCALL ===========================*/

Expand Down
9 changes: 3 additions & 6 deletions test/drivers/test_suites/syscall_enter_suite/sendto_e.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -13,8 +13,7 @@ TEST(SyscallEnter, sendtoE_ipv4_tcp)

/*=============================== TRIGGER SYSCALL ===========================*/

evt_test->client_to_server(send_data{.syscall_num = __NR_sendto}, receive_data{.skip_recv_phase = true},
protocol_L3::IPv4, protocol_L4::TCP);
evt_test->client_to_server_ipv4_tcp(send_data{.syscall_num = __NR_sendto});

/*=============================== TRIGGER SYSCALL ===========================*/

Expand Down Expand Up @@ -53,8 +52,7 @@ TEST(SyscallEnter, sendtoE_ipv4_tcp_NULL_sockaddr)

/*=============================== TRIGGER SYSCALL ===========================*/

evt_test->client_to_server(send_data{.syscall_num = __NR_sendto, .null_sockaddr = true},
receive_data{.skip_recv_phase = true}, protocol_L3::IPv4, protocol_L4::TCP);
evt_test->client_to_server_ipv4_tcp(send_data{.syscall_num = __NR_sendto, .null_sockaddr = true});

/*=============================== TRIGGER SYSCALL ===========================*/

Expand Down Expand Up @@ -104,8 +102,7 @@ TEST(SyscallEnter, sendtoE_ipv4_udp)

/*=============================== TRIGGER SYSCALL ===========================*/

evt_test->client_to_server(send_data{.syscall_num = __NR_sendto}, receive_data{.skip_recv_phase = true},
protocol_L3::IPv4, protocol_L4::UDP);
evt_test->client_to_server_ipv4_udp(send_data{.syscall_num = __NR_sendto});

/*=============================== TRIGGER SYSCALL ===========================*/

Expand Down
24 changes: 12 additions & 12 deletions test/drivers/test_suites/syscall_exit_suite/read_x.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -153,8 +153,8 @@ TEST(SyscallExit, readX_ipv4_tcp_message_truncated_by_snaplen)

/*=============================== TRIGGER SYSCALL ===========================*/

evt_test->client_to_server(send_data{.syscall_num = __NR_sendto, .greater_snaplen = true},
receive_data{.syscall_num = __NR_read}, protocol_L3::IPv4, protocol_L4::TCP);
evt_test->client_to_server_ipv4_tcp(send_data{.syscall_num = __NR_sendto, .greater_snaplen = true},
recv_data{.syscall_num = __NR_read});

/*=============================== TRIGGER SYSCALL ===========================*/

Expand Down Expand Up @@ -198,8 +198,8 @@ TEST(SyscallExit, readX_ipv4_tcp_message_not_truncated_fullcapture_port)

/*=============================== TRIGGER SYSCALL ===========================*/

evt_test->client_to_server(send_data{.syscall_num = __NR_sendto, .greater_snaplen = true},
receive_data{.syscall_num = __NR_read}, protocol_L3::IPv4, protocol_L4::TCP);
evt_test->client_to_server_ipv4_tcp(send_data{.syscall_num = __NR_sendto, .greater_snaplen = true},
recv_data{.syscall_num = __NR_read});

/*=============================== TRIGGER SYSCALL ===========================*/

Expand Down Expand Up @@ -244,8 +244,8 @@ TEST(SyscallExit, readX_ipv4_udp_message_truncated_by_snaplen)

/*=============================== TRIGGER SYSCALL ===========================*/

evt_test->client_to_server(send_data{.syscall_num = __NR_sendto, .greater_snaplen = true},
receive_data{.syscall_num = __NR_read}, protocol_L3::IPv4, protocol_L4::UDP);
evt_test->client_to_server_ipv4_udp(send_data{.syscall_num = __NR_sendto, .greater_snaplen = true},
recv_data{.syscall_num = __NR_read});

/*=============================== TRIGGER SYSCALL ===========================*/

Expand Down Expand Up @@ -287,8 +287,8 @@ TEST(SyscallExit, readX_ipv4_udp_message_truncated_fullcapture_client_port)

/*=============================== TRIGGER SYSCALL ===========================*/

evt_test->client_to_server(send_data{.syscall_num = __NR_sendto, .greater_snaplen = true},
receive_data{.syscall_num = __NR_read}, protocol_L3::IPv4, protocol_L4::UDP);
evt_test->client_to_server_ipv4_udp(send_data{.syscall_num = __NR_sendto, .greater_snaplen = true},
recv_data{.syscall_num = __NR_read});

/*=============================== TRIGGER SYSCALL ===========================*/

Expand Down Expand Up @@ -332,16 +332,16 @@ TEST(SyscallExit, readX_ipv4_udp_message_not_truncated_fullcapture_server_port)

evt_test->set_do_dynamic_snaplen(true);

// In this case we should be able to retrieve the server port from the kernel socket because it is the local port
// We are receiving on the server.
// In this case we should be able to retrieve the server port from the kernel socket because it is the local
// port We are receiving on the server.
evt_test->set_fullcapture_port_range(IPV4_PORT_SERVER, IPV4_PORT_SERVER);

evt_test->enable_capture();

/*=============================== TRIGGER SYSCALL ===========================*/

evt_test->client_to_server(send_data{.syscall_num = __NR_sendto, .greater_snaplen = true},
receive_data{.syscall_num = __NR_read}, protocol_L3::IPv4, protocol_L4::UDP);
evt_test->client_to_server_ipv4_udp(send_data{.syscall_num = __NR_sendto, .greater_snaplen = true},
recv_data{.syscall_num = __NR_read});

/*=============================== TRIGGER SYSCALL ===========================*/

Expand Down
Loading

0 comments on commit c5a6a68

Please sign in to comment.