diff options
author | Oliver Smith <osmith@sysmocom.de> | 2021-02-19 14:25:34 +0100 |
---|---|---|
committer | Oliver Smith <osmith@sysmocom.de> | 2021-02-26 09:32:39 +0100 |
commit | 79e48fd3ae1279eeaa3373d92d343f2dbfae075e (patch) | |
tree | a910168f0fe2773405390c36a2e99500de32c606 /ttcn3-ggsn-test | |
parent | fd6f09e0c2aaa2354a5c4be0ed4a332bbdd9aa5d (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.config | 268 | ||||
-rw-r--r-- | ttcn3-ggsn-test/initrd-ggsn.sh | 17 | ||||
-rwxr-xr-x | ttcn3-ggsn-test/jenkins.sh | 39 | ||||
-rw-r--r-- | ttcn3-ggsn-test/osmo-ggsn-kernel-gtp.cfg | 59 |
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 |