mirror of
https://github.com/rsyslog/rsyslog.git
synced 2025-12-11 05:00:41 +01:00
This moves NetworkNamespace functionality into the net module. This allows the same code to be reused across multiple tools and plugins. The first usage is with omfwd, which is changed to use the common net implementation. Note the net implementation is based on the original omfwd implementation. Subsequent PRs will be opened for integrating this into omuxsock and imtcp. The original test case tcp_forwarding_ns_tpl.sh was broken due to use of single quotes rather than double quotes, thus preventing the proper port number argument to be passed to the listener. Note this test must be run as root. Development has occurred across Fedora41 and Fedora42, which uses glibc 2.40 and glibc2.41 respectively. The valgrind suppressions are updated to handle new glibc issues accordingly. Four new functions are callable through the net module. These allow one to save a handle to the current namespace, switch to a new namespace by name, and restore the namespace from the saved handle. A fourth higher level wrapper is used to open a socket in a named network namespace, and handles the invocation of the lower level functions. Ideally this would be the only public function, however it simplifies integration into imtcp in the future (which doesn't directly open sockets). This may change in the future as network namespaces are integrated into more modules and plugins. Signed-off-by: Billie Alsup <balsup@cisco.com>
53 lines
1.8 KiB
Bash
Executable File
53 lines
1.8 KiB
Bash
Executable File
#!/bin/bash
|
|
# This test tests tcp forwarding in a network namespace with assigned template.
|
|
# To do so, a simple tcp listener service is started in a network namespace.
|
|
# Released under GNU GPLv3+
|
|
echo ===============================================================================
|
|
echo \[tcp_forwarding_ns_tpl.sh\]: test for tcp forwarding in a network namespace with assigned template
|
|
echo This test must be run as root [network namespace creation/change required]
|
|
if [ "$EUID" -ne 0 ]; then
|
|
exit 77 # Not root, skip this test
|
|
fi
|
|
|
|
# create the pipe and start a background process that copies data from
|
|
# it to the "regular" work file
|
|
. ${srcdir:=.}/diag.sh init
|
|
generate_conf
|
|
add_conf '
|
|
$MainMsgQueueTimeoutShutdown 10000
|
|
template(name="outfmt" type="string" string="%msg:F,58:2%\n")
|
|
|
|
if $msg contains "msgnum:" then
|
|
action(type="omfwd" template="outfmt"
|
|
target="127.0.0.1" port="'$TCPFLOOD_PORT'" protocol="tcp" networknamespace="rsyslog_test_ns")
|
|
'
|
|
# create network namespace and bring it up
|
|
ip netns add rsyslog_test_ns
|
|
ip netns exec rsyslog_test_ns ip link set dev lo up
|
|
|
|
# run server in namespace
|
|
ip netns exec rsyslog_test_ns ./minitcpsrv -t127.0.0.1 -p"$TCPFLOOD_PORT" -f $RSYSLOG_OUT_LOG &
|
|
BGPROCESS=$!
|
|
echo background minitcpsrvr process id is $BGPROCESS
|
|
|
|
# now do the usual run
|
|
startup
|
|
# 10000 messages should be enough
|
|
injectmsg 0 10000
|
|
shutdown_when_empty # shut down rsyslogd when done processing messages
|
|
wait_shutdown
|
|
|
|
# note: minitcpsrvr shuts down automatically if the connection is closed!
|
|
# (we still leave the code here in in case we need it later)
|
|
#echo shutting down minitcpsrv...
|
|
#kill $BGPROCESS
|
|
#wait $BGPROCESS
|
|
#echo background process has terminated, continue test...
|
|
|
|
# remove network namespace
|
|
ip netns delete rsyslog_test_ns
|
|
|
|
# and continue the usual checks
|
|
seq_check 0 9999
|
|
exit_test
|