X-Git-Url: http://git.meshlink.io/?a=blobdiff_plain;ds=sidebyside;f=test%2Fblackbox%2Fcommon%2Ftcpdump.c;fp=test%2Fblackbox%2Fcommon%2Ftcpdump.c;h=a0933f73092c3e9716c0319b3cbff78811c6f58f;hb=dc68da94af8fca91748579c84ef5ed798db7efab;hp=0000000000000000000000000000000000000000;hpb=1a7277c64d74ae5ae18c48ebe09a522ffe7c696b;p=meshlink diff --git a/test/blackbox/common/tcpdump.c b/test/blackbox/common/tcpdump.c new file mode 100644 index 00000000..a0933f73 --- /dev/null +++ b/test/blackbox/common/tcpdump.c @@ -0,0 +1,60 @@ +/* + tcpdump.c -- Implementation of Black Box Test Execution for meshlink + + Copyright (C) 2018 Guus Sliepen + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License along + with this program; if not, write to the Free Software Foundation, Inc., + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. +*/ +#include +#include +#include +#include +#include +#include +#include +#include "common_handlers.h" +#include "tcpdump.h" + +pid_t tcpdump_start(char *interface) { + pid_t tcpdump_pid; + char *argv[] = { "tcpdump", "-i", interface, NULL }; + // child process have a pipe to the parent process when parent process terminates SIGPIPE kills the tcpdump + int pipes[2]; + pipe(pipes); + PRINT_TEST_CASE_MSG("\x1b[32mLaunching TCP Dump ..\x1b[0m\n"); + + if((tcpdump_pid = fork()) == 0) { + prctl(PR_SET_PDEATHSIG, SIGHUP); + close(pipes[1]); + // Open log file for TCP Dump + int fd = open(TCPDUMP_LOG_FILE, O_WRONLY | O_CREAT | O_TRUNC, 0644); + assert(fd != -1); + close(STDOUT_FILENO); + assert(dup2(fd, STDOUT_FILENO) != -1); + + // Launch TCPDump with port numbers of sleepy, gateway & relay + int ret = execvp("/usr/sbin/tcpdump", argv); + perror("execvp "); + assert(ret != -1); + } else { + close(pipes[0]); + return tcpdump_pid; + } +} + +void tcpdump_stop(pid_t tcpdump_pid) { + PRINT_TEST_CASE_MSG("\n\x1b[32mStopping TCP Dump.\x1b[0m\n"); + assert(!kill(tcpdump_pid, SIGTERM)); +}