Looks like remote mode is completely broken on latest. With the following diffs I managed to fix the crash. Now, client side complains about tun0 device not found. Why in remote mode tun0 device is needed?
Diffs:
diff --git a/gtests/net/packetdrill/wire_server.c b/gtests/net/packetdrill/wire_server.c
index 8377c4f..87bf702 100644
--- a/gtests/net/packetdrill/wire_server.c
+++ b/gtests/net/packetdrill/wire_server.c
@@ -89,7 +89,7 @@ static void wire_server_free(struct wire_server *wire_server)
static void wire_server_unserialize_argv(struct wire_server *wire_server,
const char *args, int args_len)
{
- int argc, i;
+ int argc, i, j;
char **argv = NULL;
const char *end = NULL;
@@ -108,19 +108,22 @@ static void wire_server_unserialize_argv(struct wire_server *wire_server,
argv = calloc(argc + 1, sizeof(char *));
end = args;
- for (i = 0; i < argc; ++i) {
+ for (i = 0, j = 0; i < argc; ++i) {
if (strstr(end, "-wire_client") ||
- strstr(end, "-wire_server_at"))
+ strstr(end, "-wire_server_at")) {
+ end += strlen(end) + 1; /* + 1 for '\0' */
continue; /* don't use client-only arguments */
- argv[i] = strdup(end);
+ }
+ argv[j++] = strdup(end);
end += strlen(end) + 1; /* + 1 for '\0' */
}
- asprintf(&argv[argc-1], "--wire_server");
+ asprintf(&argv[j], "--wire_server");
- for (i = 0; i < argc; ++i)
+ for (i = 0; i < j; ++i)
DEBUGP("argv[%d] = '%s'\n", i, argv[i]);
- wire_server->argc = argc;
+ //wire_server->argc = argc;
+ wire_server->argc = j;
wire_server->argv = argv;
}
Client debug logs:
sudo ./packetdrill --wire_server_at=10.4.99.103 --wire_client_dev=ens192 ../tcp/blocking/blocking-accept.pkt --debug
config.c 273] set_default_config
run.c 692] parse_and_run_script: ../tcp/blocking/blocking-accept.pkt
parser.y 172] read_script(../tcp/blocking/blocking-accept.pkt)
parser.y 215] read_script: 472 bytes
config.c 703] parse_and_finalize_config
config.c 642] parse_command_line_options argc=5
config.c 644] argv[0] = './packetdrill'
config.c 644] argv[1] = '--wire_server_at=10.4.99.103'
config.c 644] argv[2] = '--wire_client_dev=ens192'
config.c 644] argv[3] = '--debug'
config.c 644] argv[4] = '../tcp/blocking/blocking-accept.pkt'
config.c 477] process_option 275 ('') = 10.4.99.103
config.c 477] process_option 277 ('') = ens192
config.c 477] process_option 288 (' ') = (null)
config.c 256] defaulting live_local_ip_string to: 127.0.1.1
config.c 424] finalize_config: config->live_local_ip_string: [127.0.1.1]
run.c 563] run_script: running script
wire_client_netdev.c 110] wire_client_netdev_new
net_utils.c 163] net_setup_dev_address: found: 1
net_utils.c 166] net_setup_dev_address: found on correct device
wire_client.c 259] wire_client_init
link_layer.c 46] get_hw_address for device ens192
run_system_call.c 3501] syscall thread: starting and locking
link_layer.c 60] ens192 HWaddr: 00:0c:29:dc:f1:25
wire_conn.c 43] wire_conn_new
wire_conn.c 99] wire_conn_connect
wire_conn.c 72] set_default_tcp_options fd 4
wire_conn.c 180] wire_conn_write -> op: WIRE_COMMAND_LINE_ARGS
wire_conn.c 180] wire_conn_write -> op: WIRE_SCRIPT_PATH
wire_conn.c 180] wire_conn_write -> op: WIRE_SCRIPT
wire_conn.c 180] wire_conn_write -> op: WIRE_HARDWARE_ADDR
wire_conn.c 180] wire_conn_write -> op: WIRE_IP_ADDR
wire_conn.c 224] wire_conn_read
wire_conn.c 233] wire_conn_read -> op: WIRE_SERVER_READY
Cannot find device "tun0"
../tcp/blocking/blocking-accept.pkt: error executing init command: non-zero status 1
Server debug logs:
sudo ./packetdrill --wire_server --wire_server_dev=ens192 --debug
config.c 424] finalize_config: config->live_local_ip_string: []
wire_conn.c 43] wire_conn_new
wire_conn.c 119] wire_conn_bind_listen
wire_conn.c 138] wire_conn_accept
wire_conn.c 144] accepted fd 5
wire_conn.c 43] wire_conn_new
wire_conn.c 72] set_default_tcp_options fd 5
link_layer.c 46] get_hw_address for device ens192
link_layer.c 60] ens192 HWaddr: 00:50:56:9d:42:28
wire_server.c 546] start_wire_server_thread
wire_conn.c 138] wire_conn_accept
wire_server.c 478] wire_server_thread
config.c 273] set_default_config
wire_conn.c 224] wire_conn_read
wire_conn.c 233] wire_conn_read -> op: WIRE_COMMAND_LINE_ARGS
wire_server.c 102] argc = 5
wire_server.c 123] argv[0] = './packetdrill'
wire_server.c 123] argv[1] = '--debug'
wire_server.c 123] argv[2] = '../tcp/blocking/blocking-accept.pkt'
wire_server.c 123] argv[3] = ''
wire_conn.c 224] wire_conn_read
wire_conn.c 233] wire_conn_read -> op: WIRE_SCRIPT_PATH
wire_conn.c 224] wire_conn_read
wire_conn.c 233] wire_conn_read -> op: WIRE_SCRIPT
wire_conn.c 224] wire_conn_read
wire_conn.c 233] wire_conn_read -> op: WIRE_HARDWARE_ADDR
wire_conn.c 224] wire_conn_read
wire_conn.c 233] wire_conn_read -> op: WIRE_IP_ADDR
wire_server.c 240] got WIRE_IP_ADDR: [127.0.1.1]
run.c 692] parse_and_run_script: ../tcp/blocking/blocking-accept.pkt
parser.y 157] copy_script
parser.y 164] copy_script: 472 bytes
config.c 703] parse_and_finalize_config
config.c 642] parse_command_line_options argc=4
config.c 644] argv[0] = './packetdrill'
config.c 644] argv[1] = '--debug'
config.c 644] argv[2] = '../tcp/blocking/blocking-accept.pkt'
config.c 644] argv[3] = ''
config.c 477] process_option 288 (' ') = (null)
config.c 424] finalize_config: config->live_local_ip_string: [127.0.1.1]
wire_server.c 505] wire_server_thread: live_local_ip_string: [127.0.1.1]
wire_server_netdev.c 192] wire_server_netdev_new
net_utils.c 163] net_setup_dev_address: found: 0
net_utils.c 38] running: 'ip addr add
192.168.0.1/16 dev ens192 > /dev/null 2>&1'
net_utils.c 40] result: 0
packet_socket_linux.c 93] device index: ens192 -> 3
packet_socket_linux.c 181] packet_socket_set_filter: ip: 127.0.1.1 src: 8080 dst: 8080
packet_socket_linux.c 213] filter constants:
packet_socket_linux.c 215] { 0x28, 0, 0, 0x0000000c },
packet_socket_linux.c 215] { 0x15, 0, 15, 0x00000800 },
packet_socket_linux.c 215] { 0x20, 0, 0, 0x0000001a },
packet_socket_linux.c 215] { 0x15, 0, 13, 0x7f000101 },
packet_socket_linux.c 215] { 0x30, 0, 0, 0x00000017 },
packet_socket_linux.c 215] { 0x15, 2, 0, 0x00000084 },
packet_socket_linux.c 215] { 0x15, 1, 0, 0x00000006 },
packet_socket_linux.c 215] { 0x15, 0, 7, 0x00000011 },
packet_socket_linux.c 215] { 0x28, 0, 0, 0x00000014 },
packet_socket_linux.c 215] { 0x45, 7, 0, 0x00001fff },
packet_socket_linux.c 215] { 0xb1, 0, 0, 0x0000000e },
packet_socket_linux.c 215] { 0x48, 0, 0, 0x0000000e },
packet_socket_linux.c 215] { 0x15, 3, 0, 0x00001f90 },
packet_socket_linux.c 215] { 0x48, 0, 0, 0x00000010 },
packet_socket_linux.c 215] { 0x15, 1, 2, 0x00001f90 },
packet_socket_linux.c 215] { 0x15, 0, 1, 0x00000001 },
packet_socket_linux.c 215] { 0x06, 0, 0, 0x00040000 },
packet_socket_linux.c 215] { 0x06, 0, 0, 0x00000000 },
Chain INPUT (policy ACCEPT)
target prot opt source destination
DROP udp -- 127.0.1.1
0.0.0.0/0 udp spt:8080
DROP udp -- 127.0.1.1
0.0.0.0/0 udp dpt:8080
DROP tcp -- 127.0.1.1
0.0.0.0/0 tcp spt:8080
DROP tcp -- 127.0.1.1
0.0.0.0/0 tcp dpt:8080
Chain FORWARD (policy ACCEPT)
target prot opt source destination
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
wire_conn.c 180] wire_conn_write -> op: WIRE_SERVER_READY
run_system_call.c 3501] syscall thread: starting and locking
wire_conn.c 224] wire_conn_read
remote side closed connection
run_system_call.c 3621] main thread: signaling syscall thread to exit
run_system_call.c 3628] main thread: unlocking, waiting for syscall thread exit
run_system_call.c 3509] syscall thread: in state 4
run_system_call.c 3584] syscall thread: unlocking and exiting
run_system_call.c 3632] main thread: joined syscall thread; relocking
wire_server_netdev.c 250] wire_server_netdev_free
Chain INPUT (policy ACCEPT)
target prot opt source destination
Chain FORWARD (policy ACCEPT)
target prot opt source destination
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
net_utils.c 38] running: 'ip addr del
192.168.0.1/16 dev ens192 > /dev/null 2>&1'
net_utils.c 40] result: 0
wire_server.c 539] wire_server_thread: connection is done
^C