aboutsummaryrefslogtreecommitdiffstats
path: root/ttcn3-ggsn-test
diff options
context:
space:
mode:
authorOliver Smith <osmith@sysmocom.de>2021-02-19 14:25:34 +0100
committerOliver Smith <osmith@sysmocom.de>2021-02-26 09:32:39 +0100
commit79e48fd3ae1279eeaa3373d92d343f2dbfae075e (patch)
treea910168f0fe2773405390c36a2e99500de32c606 /ttcn3-ggsn-test
parentfd6f09e0c2aaa2354a5c4be0ed4a332bbdd9aa5d (diff)
ttcn3-ggsn-test: add kernel test
Make it possible to run ttcn3-ggsn-test against osmo-ggsn with the GTP kernel module. This feature is enabled by environment variables explained in ttcn3-ggsn-test/jenkins.sh, and can either use the pre-built kernel from Debian, or build a kernel from source. The kernel runs inside QEMU inside the usual osmo-ggsn-master docker image. Thanks to Pau for providing the kernel config and kernel-test scripts that this patch is based on! I ended up modifying them quite a bit to fit the docker use case, and to build the initrd (so we can use the stock debian kernel). Related: OS#3208 Change-Id: I54e752048eed2a170a1cf4e0fd410de255b9de5d
Diffstat (limited to 'ttcn3-ggsn-test')
-rw-r--r--ttcn3-ggsn-test/fragment.config268
-rw-r--r--ttcn3-ggsn-test/initrd-ggsn.sh17
-rwxr-xr-xttcn3-ggsn-test/jenkins.sh39
-rw-r--r--ttcn3-ggsn-test/osmo-ggsn-kernel-gtp.cfg59
4 files changed, 380 insertions, 3 deletions
diff --git a/ttcn3-ggsn-test/fragment.config b/ttcn3-ggsn-test/fragment.config
new file mode 100644
index 0000000..8a72dc2
--- /dev/null
+++ b/ttcn3-ggsn-test/fragment.config
@@ -0,0 +1,268 @@
+# CONFIG_ACPI_BGRT is not set
+CONFIG_CRYPTO_DES=y
+CONFIG_CRYPTO_SHA1=y
+# CONFIG_EFI_STUB is not set
+CONFIG_FAILOVER=y
+CONFIG_FDDI=y
+CONFIG_GTP=y
+CONFIG_HAMRADIO=y
+CONFIG_HYPERVISOR_GUEST=y
+CONFIG_INPUT_MOUSEDEV=y
+CONFIG_IP_NF_NAT=y
+CONFIG_IP_NF_TARGET_MASQUERADE=y
+CONFIG_IP_SET=y
+CONFIG_LEGACY_VSYSCALL_EMULATE=y
+# CONFIG_LEGACY_VSYSCALL_XONLY is not set
+CONFIG_LIBCRC32C=y
+CONFIG_MICROCODE_OLD_INTERFACE=y
+CONFIG_NETFILTER_ADVANCED=y
+CONFIG_NETFILTER_NETLINK_GLUE_CT=y
+CONFIG_NETFILTER_XT_MARK=y
+CONFIG_NETFILTER_XT_NAT=y
+CONFIG_NETFILTER_XT_TARGET_LOG=y
+CONFIG_NETFILTER_XT_TARGET_MASQUERADE=y
+CONFIG_NET_9P=y
+CONFIG_NET_FAILOVER=y
+CONFIG_NF_LOG_COMMON=y
+CONFIG_NF_LOG_IPV4=y
+CONFIG_NF_LOG_IPV6=y
+CONFIG_OVERLAY_FS=y
+CONFIG_PAGE_REPORTING=y
+CONFIG_PARTITION_ADVANCED=y
+CONFIG_PCIEAER=y
+# CONFIG_R8169 is not set
+# CONFIG_RANDOMIZE_BASE is not set
+CONFIG_RAS=y
+# CONFIG_RCU_TRACE is not set
+# CONFIG_REALTEK_PHY is not set
+CONFIG_SND_HDA_PREALLOC_SIZE=64
+CONFIG_SND_OSSEMUL=y
+# CONFIG_STRICT_DEVMEM is not set
+CONFIG_UEVENT_HELPER=y
+# CONFIG_USB is not set
+CONFIG_VIRTIO_MMIO=y
+CONFIG_VIRTIO_PCI=y
+CONFIG_9P_FS=y
+CONFIG_9P_FS_POSIX_ACL=y
+CONFIG_9P_FS_SECURITY=y
+# CONFIG_ACORN_PARTITION is not set
+# CONFIG_ACPI_EXTLOG is not set
+# CONFIG_ACRN_GUEST is not set
+# CONFIG_AIX_PARTITION is not set
+CONFIG_AMIGA_PARTITION=y
+CONFIG_ARCH_CPUIDLE_HALTPOLL=y
+# CONFIG_ATARI_PARTITION is not set
+# CONFIG_AX25 is not set
+CONFIG_BALLOON_COMPACTION=y
+CONFIG_BLK_MQ_VIRTIO=y
+CONFIG_BSD_DISKLABEL=y
+# CONFIG_CMDLINE_PARTITION is not set
+# CONFIG_CPU_IDLE_GOV_HALTPOLL is not set
+CONFIG_CRYPTO_DEV_VIRTIO=y
+CONFIG_CRYPTO_ENGINE=y
+CONFIG_CRYPTO_LIB_DES=y
+# CONFIG_DEFXX is not set
+# CONFIG_DRM_VIRTIO_GPU is not set
+CONFIG_EDAC=y
+# CONFIG_EDAC_AMD64 is not set
+# CONFIG_EDAC_DEBUG is not set
+CONFIG_EDAC_DECODE_MCE=y
+# CONFIG_EDAC_E752X is not set
+# CONFIG_EDAC_I10NM is not set
+# CONFIG_EDAC_I3000 is not set
+# CONFIG_EDAC_I3200 is not set
+# CONFIG_EDAC_I5000 is not set
+# CONFIG_EDAC_I5100 is not set
+# CONFIG_EDAC_I5400 is not set
+# CONFIG_EDAC_I7300 is not set
+# CONFIG_EDAC_I7CORE is not set
+# CONFIG_EDAC_I82975X is not set
+# CONFIG_EDAC_IE31200 is not set
+# CONFIG_EDAC_IGEN6 is not set
+CONFIG_EDAC_LEGACY_SYSFS=y
+# CONFIG_EDAC_PND2 is not set
+# CONFIG_EDAC_SBRIDGE is not set
+# CONFIG_EDAC_SKX is not set
+# CONFIG_EDAC_X38 is not set
+CONFIG_HALTPOLL_CPUIDLE=y
+# CONFIG_HW_RANDOM_VIRTIO is not set
+# CONFIG_HYPERV is not set
+# CONFIG_INPUT_MOUSEDEV_PSAUX is not set
+CONFIG_INPUT_MOUSEDEV_SCREEN_X=1024
+CONFIG_INPUT_MOUSEDEV_SCREEN_Y=768
+# CONFIG_IP6_NF_MATCH_AH is not set
+# CONFIG_IP6_NF_MATCH_EUI64 is not set
+# CONFIG_IP6_NF_MATCH_FRAG is not set
+# CONFIG_IP6_NF_MATCH_HL is not set
+# CONFIG_IP6_NF_MATCH_MH is not set
+# CONFIG_IP6_NF_MATCH_OPTS is not set
+# CONFIG_IP6_NF_MATCH_RPFILTER is not set
+# CONFIG_IP6_NF_MATCH_RT is not set
+# CONFIG_IP6_NF_MATCH_SRH is not set
+CONFIG_IP6_NF_NAT=y
+# CONFIG_IP6_NF_SECURITY is not set
+# CONFIG_IP6_NF_TARGET_HL is not set
+CONFIG_IP6_NF_TARGET_MASQUERADE=y
+# CONFIG_IP6_NF_TARGET_NPT is not set
+# CONFIG_IP6_NF_TARGET_SYNPROXY is not set
+# CONFIG_IP_NF_ARPTABLES is not set
+# CONFIG_IP_NF_MATCH_AH is not set
+# CONFIG_IP_NF_MATCH_ECN is not set
+# CONFIG_IP_NF_MATCH_RPFILTER is not set
+# CONFIG_IP_NF_MATCH_TTL is not set
+# CONFIG_IP_NF_SECURITY is not set
+# CONFIG_IP_NF_TARGET_CLUSTERIP is not set
+# CONFIG_IP_NF_TARGET_ECN is not set
+# CONFIG_IP_NF_TARGET_NETMAP is not set
+# CONFIG_IP_NF_TARGET_REDIRECT is not set
+# CONFIG_IP_NF_TARGET_SYNPROXY is not set
+# CONFIG_IP_NF_TARGET_TTL is not set
+# CONFIG_IP_SET_BITMAP_IP is not set
+# CONFIG_IP_SET_BITMAP_IPMAC is not set
+# CONFIG_IP_SET_BITMAP_PORT is not set
+# CONFIG_IP_SET_HASH_IP is not set
+# CONFIG_IP_SET_HASH_IPMAC is not set
+# CONFIG_IP_SET_HASH_IPMARK is not set
+# CONFIG_IP_SET_HASH_IPPORT is not set
+# CONFIG_IP_SET_HASH_IPPORTIP is not set
+# CONFIG_IP_SET_HASH_IPPORTNET is not set
+# CONFIG_IP_SET_HASH_MAC is not set
+# CONFIG_IP_SET_HASH_NET is not set
+# CONFIG_IP_SET_HASH_NETIFACE is not set
+# CONFIG_IP_SET_HASH_NETNET is not set
+# CONFIG_IP_SET_HASH_NETPORT is not set
+# CONFIG_IP_SET_HASH_NETPORTNET is not set
+# CONFIG_IP_SET_LIST_SET is not set
+CONFIG_IP_SET_MAX=256
+# CONFIG_JAILHOUSE_GUEST is not set
+CONFIG_KARMA_PARTITION=y
+CONFIG_KVM_GUEST=y
+# CONFIG_LDM_PARTITION is not set
+CONFIG_MAC_PARTITION=y
+CONFIG_MEMORY_BALLOON=y
+CONFIG_MINIX_SUBPARTITION=y
+CONFIG_MMU_GATHER_RCU_TABLE_FREE=y
+CONFIG_MMU_GATHER_TABLE_FREE=y
+# CONFIG_MOUSE_PS2_VMMOUSE is not set
+# CONFIG_NETFILTER_NETLINK_ACCT is not set
+# CONFIG_NETFILTER_NETLINK_OSF is not set
+# CONFIG_NETFILTER_NETLINK_QUEUE is not set
+CONFIG_NETFILTER_XT_CONNMARK=y
+# CONFIG_NETFILTER_XT_MATCH_BPF is not set
+# CONFIG_NETFILTER_XT_MATCH_CGROUP is not set
+# CONFIG_NETFILTER_XT_MATCH_CLUSTER is not set
+# CONFIG_NETFILTER_XT_MATCH_COMMENT is not set
+# CONFIG_NETFILTER_XT_MATCH_CONNBYTES is not set
+# CONFIG_NETFILTER_XT_MATCH_CONNLABEL is not set
+# CONFIG_NETFILTER_XT_MATCH_CONNLIMIT is not set
+# CONFIG_NETFILTER_XT_MATCH_CONNMARK is not set
+# CONFIG_NETFILTER_XT_MATCH_CPU is not set
+# CONFIG_NETFILTER_XT_MATCH_DCCP is not set
+# CONFIG_NETFILTER_XT_MATCH_DEVGROUP is not set
+# CONFIG_NETFILTER_XT_MATCH_DSCP is not set
+# CONFIG_NETFILTER_XT_MATCH_ECN is not set
+# CONFIG_NETFILTER_XT_MATCH_ESP is not set
+# CONFIG_NETFILTER_XT_MATCH_HASHLIMIT is not set
+# CONFIG_NETFILTER_XT_MATCH_HELPER is not set
+# CONFIG_NETFILTER_XT_MATCH_HL is not set
+# CONFIG_NETFILTER_XT_MATCH_IPCOMP is not set
+# CONFIG_NETFILTER_XT_MATCH_IPRANGE is not set
+# CONFIG_NETFILTER_XT_MATCH_L2TP is not set
+# CONFIG_NETFILTER_XT_MATCH_LENGTH is not set
+# CONFIG_NETFILTER_XT_MATCH_LIMIT is not set
+# CONFIG_NETFILTER_XT_MATCH_MAC is not set
+CONFIG_NETFILTER_XT_MATCH_MARK=y
+# CONFIG_NETFILTER_XT_MATCH_MULTIPORT is not set
+# CONFIG_NETFILTER_XT_MATCH_NFACCT is not set
+# CONFIG_NETFILTER_XT_MATCH_OSF is not set
+# CONFIG_NETFILTER_XT_MATCH_OWNER is not set
+CONFIG_NETFILTER_XT_MATCH_PKTTYPE=y
+# CONFIG_NETFILTER_XT_MATCH_QUOTA is not set
+# CONFIG_NETFILTER_XT_MATCH_RATEEST is not set
+# CONFIG_NETFILTER_XT_MATCH_REALM is not set
+# CONFIG_NETFILTER_XT_MATCH_RECENT is not set
+# CONFIG_NETFILTER_XT_MATCH_SCTP is not set
+# CONFIG_NETFILTER_XT_MATCH_SOCKET is not set
+# CONFIG_NETFILTER_XT_MATCH_STATISTIC is not set
+# CONFIG_NETFILTER_XT_MATCH_STRING is not set
+# CONFIG_NETFILTER_XT_MATCH_TCPMSS is not set
+# CONFIG_NETFILTER_XT_MATCH_TIME is not set
+# CONFIG_NETFILTER_XT_MATCH_U32 is not set
+# CONFIG_NETFILTER_XT_SET is not set
+# CONFIG_NETFILTER_XT_TARGET_AUDIT is not set
+# CONFIG_NETFILTER_XT_TARGET_CHECKSUM is not set
+# CONFIG_NETFILTER_XT_TARGET_CLASSIFY is not set
+# CONFIG_NETFILTER_XT_TARGET_CONNMARK is not set
+# CONFIG_NETFILTER_XT_TARGET_DSCP is not set
+# CONFIG_NETFILTER_XT_TARGET_HL is not set
+# CONFIG_NETFILTER_XT_TARGET_HMARK is not set
+# CONFIG_NETFILTER_XT_TARGET_IDLETIMER is not set
+# CONFIG_NETFILTER_XT_TARGET_LED is not set
+# CONFIG_NETFILTER_XT_TARGET_MARK is not set
+# CONFIG_NETFILTER_XT_TARGET_NFQUEUE is not set
+# CONFIG_NETFILTER_XT_TARGET_RATEEST is not set
+# CONFIG_NETFILTER_XT_TARGET_TCPOPTSTRIP is not set
+# CONFIG_NETFILTER_XT_TARGET_TEE is not set
+# CONFIG_NETFILTER_XT_TARGET_TPROXY is not set
+# CONFIG_NET_9P_DEBUG is not set
+CONFIG_NET_9P_VIRTIO=y
+# CONFIG_NET_ACT_CONNMARK is not set
+# CONFIG_NET_ACT_CTINFO is not set
+# CONFIG_NET_EMATCH_IPSET is not set
+CONFIG_NET_UDP_TUNNEL=y
+# CONFIG_NF_CONNTRACK_AMANDA is not set
+# CONFIG_NF_CONNTRACK_EVENTS is not set
+# CONFIG_NF_CONNTRACK_H323 is not set
+CONFIG_NF_CONNTRACK_MARK=y
+# CONFIG_NF_CONNTRACK_PPTP is not set
+# CONFIG_NF_CONNTRACK_SANE is not set
+# CONFIG_NF_CONNTRACK_SNMP is not set
+# CONFIG_NF_CONNTRACK_TFTP is not set
+# CONFIG_NF_CONNTRACK_TIMEOUT is not set
+# CONFIG_NF_CONNTRACK_TIMESTAMP is not set
+# CONFIG_NF_CONNTRACK_ZONES is not set
+CONFIG_NF_CT_PROTO_DCCP=y
+CONFIG_NF_CT_PROTO_SCTP=y
+CONFIG_NF_CT_PROTO_UDPLITE=y
+CONFIG_OSF_PARTITION=y
+# CONFIG_OVERLAY_FS_INDEX is not set
+# CONFIG_OVERLAY_FS_METACOPY is not set
+CONFIG_OVERLAY_FS_REDIRECT_ALWAYS_FOLLOW=y
+CONFIG_OVERLAY_FS_REDIRECT_DIR=y
+# CONFIG_OVERLAY_FS_XINO_AUTO is not set
+CONFIG_PARAVIRT=y
+CONFIG_PARAVIRT_CLOCK=y
+# CONFIG_PARAVIRT_DEBUG is not set
+# CONFIG_PARAVIRT_SPINLOCKS is not set
+# CONFIG_PARAVIRT_TIME_ACCOUNTING is not set
+# CONFIG_PCIEAER_INJECT is not set
+# CONFIG_PCIE_DPC is not set
+# CONFIG_PCIE_ECRC is not set
+CONFIG_PTP_1588_CLOCK_KVM=y
+# CONFIG_PTP_1588_CLOCK_VMW is not set
+# CONFIG_PVH is not set
+CONFIG_SGI_PARTITION=y
+# CONFIG_SKFP is not set
+CONFIG_SND_MIXER_OSS=y
+CONFIG_SND_PCM_OSS=y
+CONFIG_SND_PCM_OSS_PLUGINS=y
+CONFIG_SND_SEQUENCER_OSS=y
+CONFIG_SND_SEQ_MIDI_EVENT=y
+CONFIG_SOLARIS_X86_PARTITION=y
+CONFIG_SOUND_OSS_CORE=y
+CONFIG_SOUND_OSS_CORE_PRECLAIM=y
+CONFIG_SUN_PARTITION=y
+# CONFIG_SYSV68_PARTITION is not set
+CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug"
+# CONFIG_ULTRIX_PARTITION is not set
+CONFIG_UNIXWARE_DISKLABEL=y
+CONFIG_VIRTIO=y
+CONFIG_VIRTIO_BALLOON=y
+CONFIG_VIRTIO_BLK=y
+CONFIG_VIRTIO_INPUT=y
+# CONFIG_VIRTIO_MMIO_CMDLINE_DEVICES is not set
+CONFIG_VIRTIO_NET=y
+CONFIG_VIRTIO_PCI_LEGACY=y
+CONFIG_X86_HV_CALLBACK_VECTOR=y
+# CONFIG_X86_X2APIC is not set
+# CONFIG_XEN is not set
diff --git a/ttcn3-ggsn-test/initrd-ggsn.sh b/ttcn3-ggsn-test/initrd-ggsn.sh
new file mode 100644
index 0000000..831dfff
--- /dev/null
+++ b/ttcn3-ggsn-test/initrd-ggsn.sh
@@ -0,0 +1,17 @@
+#!/bin/sh
+# Sourced by scripts/kernel-test/initrd-build.sh
+
+initrd_add_mod \
+ gtp \
+ tun
+
+initrd_add_bin \
+ osmo-ggsn
+
+initrd_add_file \
+ /data/osmo-ggsn.cfg
+
+initrd_add_cmd \
+ "ip addr add 172.18.3.201/24 brd 172.18.3.255 dev eth0" \
+ "ip route add default via 172.18.3.1 dev eth0" \
+ "osmo-ggsn -c /data/osmo-ggsn.cfg"
diff --git a/ttcn3-ggsn-test/jenkins.sh b/ttcn3-ggsn-test/jenkins.sh
index 95cbc2f..c6ea729 100755
--- a/ttcn3-ggsn-test/jenkins.sh
+++ b/ttcn3-ggsn-test/jenkins.sh
@@ -1,6 +1,14 @@
#!/bin/sh
+# Environment variables:
+# * KERNEL_TEST: set to 1 to run osmo-ggsn with the kernel module in QEMU
+# * KERNEL_BUILD: set to 1 to build the kernel instead of using a pre-built one
+# * KERNEL_REMOTE_NAME: git remote name (to add multiple repos in the same local linux clone)
+# * KERNEL_URL: git remote url
+# * KERNEL_BRANCH: branch to checkout
. ../jenkins-common.sh
+
+KERNEL_TEST="${KERNEL_TEST:-0}"
IMAGE_SUFFIX="${IMAGE_SUFFIX:-master}"
docker_images_require \
"osmo-ggsn-$IMAGE_SUFFIX" \
@@ -13,23 +21,48 @@ mkdir $VOL_BASE_DIR/ggsn-tester
cp GGSN_Tests.cfg $VOL_BASE_DIR/ggsn-tester/
mkdir $VOL_BASE_DIR/ggsn
-cp osmo-ggsn.cfg $VOL_BASE_DIR/ggsn/
SUBNET=3
network_create $SUBNET
# start container with ggsn in background
+GGSN_CMD="osmo-ggsn -c /data/osmo-ggsn.cfg"
+GGSN_DOCKER_ARGS=""
+if [ "$KERNEL_TEST" = "1" ]; then
+ cp osmo-ggsn-kernel-gtp.cfg $VOL_BASE_DIR/ggsn/osmo-ggsn.cfg
+
+ kernel_test_prepare \
+ "defconfig" \
+ "fragment.config" \
+ "initrd-ggsn.sh" \
+ "$REPO_USER/osmo-ggsn-$IMAGE_SUFFIX" \
+ -v $VOL_BASE_DIR/ggsn:/data
+
+ GGSN_CMD="/kernel-test/run-qemu.sh"
+ GGSN_DOCKER_ARGS="
+ $(docker_network_params $SUBNET 200)
+ --device /dev/kvm:/dev/kvm
+ -v "$KERNEL_TEST_DIR:/kernel-test:ro"
+ -v "$CACHE_DIR:/cache"
+ "
+else
+ cp osmo-ggsn.cfg $VOL_BASE_DIR/ggsn/
+
+ GGSN_DOCKER_ARGS="
+ $(docker_network_params $SUBNET 201)
+ "
+fi
docker run --cap-add=NET_ADMIN \
--device /dev/net/tun:/dev/net/tun \
--sysctl net.ipv6.conf.all.disable_ipv6=0 \
--rm \
- $(docker_network_params $SUBNET 201) \
--ulimit core=-1 \
-v $VOL_BASE_DIR/ggsn:/data \
--name ${BUILD_TAG}-ggsn -d \
$DOCKER_ARGS \
+ $GGSN_DOCKER_ARGS \
$REPO_USER/osmo-ggsn-$IMAGE_SUFFIX \
- /bin/sh -c "osmo-ggsn -c /data/osmo-ggsn.cfg >/data/osmo-ggsn.log 2>&1"
+ /bin/sh -c "$GGSN_CMD >/data/osmo-ggsn.log 2>&1"
# start docker container with testsuite in foreground
docker run --rm \
diff --git a/ttcn3-ggsn-test/osmo-ggsn-kernel-gtp.cfg b/ttcn3-ggsn-test/osmo-ggsn-kernel-gtp.cfg
new file mode 100644
index 0000000..0288d60
--- /dev/null
+++ b/ttcn3-ggsn-test/osmo-ggsn-kernel-gtp.cfg
@@ -0,0 +1,59 @@
+!
+! OpenGGSN (0.94.1-adac) configuration saved from vty
+!!
+!
+log gsmtap 172.18.3.202
+ logging level set-all debug
+ logging filter all 1
+!
+log stderr
+ logging filter all 1
+ logging color 1
+ logging print category 1
+ logging timestamp 1
+ logging print extended-timestamp 1
+ logging level ip info
+ logging level tun info
+ logging level ggsn info
+ logging level sgsn notice
+ logging level icmp6 debug
+ logging level lglobal notice
+ logging level llapd notice
+ logging level linp notice
+ logging level lmux notice
+ logging level lmi notice
+ logging level lmib notice
+ logging level lsms notice
+ logging level lctrl notice
+ logging level lgtp info
+ logging level lstats notice
+ logging level lgsup notice
+ logging level loap notice
+ logging level lss7 notice
+ logging level lsccp notice
+ logging level lsua notice
+ logging level lm3ua notice
+ logging level lmgcp notice
+!
+stats interval 5
+!
+line vty
+ no login
+ bind 0.0.0.0
+!
+ggsn ggsn0
+ gtp state-dir /tmp
+ gtp bind-ip 172.18.3.201
+ apn internet
+ gtpu-mode kernel-gtp
+ tun-device tun4
+ type-support v4
+ ip prefix dynamic 176.16.222.0/24
+ ip dns 0 172.18.3.201
+ ip dns 1 8.8.8.8
+ ip ifconfig 176.16.222.0/24
+ no shutdown
+# apn inet6
+# apn inet46
+ default-apn internet
+ no shutdown ggsn