@@ -34,13 +34,15 @@ _IFACES=$(ls /sys/class/net | tr "\n" " " | sed 's/\s*$//g')
3434IFACES=${IFACES:- $_IFACES }
3535NETNS=${NETNS:- }
3636
37+ UNSEG_DEV_NAME=${UNSEG_DEV_NAME:- _unseg}
38+
3739PROG=/opt/sfunnel/src/tc_sfunnel.o
3840
3941# Compile eBPF program only if rulesset are defined at load time
4042# either via file or ENV
4143compile (){
4244 cd /opt/sfunnel/src
43- DEBUG=${DEBUG} FILE=/etc/sfunnel/ruleset make
45+ UNSEG_DEV_IFINDEX= ${UNSEG_DEV_IFINDEX} DEBUG=${DEBUG} FILE=/etc/sfunnel/ruleset make
4446}
4547
4648# $1: PROG
@@ -94,6 +96,7 @@ echo " \$DEBUG='${DEBUG}'"
9496echo " \$ NETNS='${NETNS} '"
9597echo " \$ N_ATTEMPTS='${N_ATTEMPTS} '"
9698echo " \$ RETRY_DELAY='${RETRY_DELAY} '"
99+ echo " \$ UNSEG_DEV_NAME='${UNSEG_DEV_NAME} '"
97100echo " [INFO] Container info:"
98101echo " Kernel: $( uname -a) "
99102echo " Debian: $( cat /etc/debian_version) "
@@ -106,6 +109,14 @@ if [[ "${DEBUG}" == "1" ]]; then
106109 set -x
107110fi
108111
112+ # Create GSO/TSO/UFO unsegmenting device (work-around
113+ if [[ " ${UNSEG_DEV_NAME} " != " " ]]; then
114+ ip link add ${UNSEG_DEV_NAME} type dummy
115+ ip link set up dev ${UNSEG_DEV_NAME}
116+ ethtool -K ${UNSEG_DEV_NAME} gso off tso off ufo off
117+ UNSEG_DEV_IFINDEX=$( ip link show ${UNSEG_DEV_NAME} | head -n 1 | awk ' {print $1}' | tr -d ' :' )
118+ fi
119+
109120# Make sure /etc/sfunnel exists, even if no volume is mounted
110121mkdir -p /etc/sfunnel
111122
@@ -155,3 +166,4 @@ for IFACE in ${IFACES}; do
155166done
156167
157168echo " [INFO] Successfully ${OP_STR} ed BPF program(s) on interfaces {${IFACES} } DIRECTION=${DIRECTION} "
169+
0 commit comments