aboutsummaryrefslogtreecommitdiffstats
path: root/app/test
diff options
context:
space:
mode:
Diffstat (limited to 'app/test')
-rw-r--r--app/test/Makefile237
-rw-r--r--app/test/autotest.py77
-rw-r--r--app/test/autotest_data.py470
-rw-r--r--app/test/autotest_runner.py422
-rw-r--r--app/test/autotest_test_funcs.py289
-rw-r--r--app/test/commands.c453
-rw-r--r--app/test/packet_burst_generator.c285
-rw-r--r--app/test/packet_burst_generator.h88
-rw-r--r--app/test/process.h103
-rw-r--r--app/test/resource.c305
-rw-r--r--app/test/resource.h135
-rw-r--r--app/test/test.c237
-rw-r--r--app/test/test.h267
-rw-r--r--app/test/test_acl.c1685
-rw-r--r--app/test/test_acl.h692
-rw-r--r--app/test/test_alarm.c256
-rw-r--r--app/test/test_atomic.c377
-rw-r--r--app/test/test_byteorder.c95
-rw-r--r--app/test/test_cmdline.c92
-rw-r--r--app/test/test_cmdline.h73
-rw-r--r--app/test/test_cmdline_cirbuf.c1330
-rw-r--r--app/test/test_cmdline_etheraddr.c247
-rw-r--r--app/test/test_cmdline_ipaddr.c722
-rw-r--r--app/test/test_cmdline_lib.c263
-rw-r--r--app/test/test_cmdline_num.c622
-rw-r--r--app/test/test_cmdline_portlist.c250
-rw-r--r--app/test/test_cmdline_string.c412
-rw-r--r--app/test/test_common.c172
-rw-r--r--app/test/test_cpuflags.c202
-rw-r--r--app/test/test_cryptodev.c6577
-rw-r--r--app/test/test_cryptodev.h74
-rw-r--r--app/test/test_cryptodev_aes_test_vectors.h1097
-rw-r--r--app/test/test_cryptodev_blockcipher.c538
-rw-r--r--app/test/test_cryptodev_blockcipher.h125
-rw-r--r--app/test/test_cryptodev_des_test_vectors.h955
-rw-r--r--app/test/test_cryptodev_gcm_test_vectors.h1238
-rw-r--r--app/test/test_cryptodev_hash_test_vectors.h491
-rw-r--r--app/test/test_cryptodev_hmac_test_vectors.h121
-rw-r--r--app/test/test_cryptodev_kasumi_hash_test_vectors.h337
-rw-r--r--app/test/test_cryptodev_kasumi_test_vectors.h407
-rw-r--r--app/test/test_cryptodev_perf.c4287
-rw-r--r--app/test/test_cryptodev_snow3g_hash_test_vectors.h548
-rw-r--r--app/test/test_cryptodev_snow3g_test_vectors.h443
-rw-r--r--app/test/test_cryptodev_zuc_hash_test_vectors.h359
-rw-r--r--app/test/test_cryptodev_zuc_test_vectors.h582
-rw-r--r--app/test/test_cycles.c137
-rw-r--r--app/test/test_debug.c149
-rw-r--r--app/test/test_devargs.c134
-rw-r--r--app/test/test_distributor.c579
-rw-r--r--app/test/test_distributor_perf.c260
-rw-r--r--app/test/test_eal_flags.c1444
-rw-r--r--app/test/test_eal_fs.c206
-rw-r--r--app/test/test_errno.c116
-rw-r--r--app/test/test_func_reentrancy.c510
-rw-r--r--app/test/test_hash.c1517
-rw-r--r--app/test/test_hash_functions.c322
-rw-r--r--app/test/test_hash_multiwriter.c281
-rw-r--r--app/test/test_hash_perf.c659
-rw-r--r--app/test/test_hash_scaling.c220
-rw-r--r--app/test/test_interrupts.c551
-rw-r--r--app/test/test_kni.c636
-rw-r--r--app/test/test_kvargs.c235
-rw-r--r--app/test/test_link_bonding.c5005
-rw-r--r--app/test/test_link_bonding_mode4.c1602
-rw-r--r--app/test/test_link_bonding_rssconf.c673
-rw-r--r--app/test/test_logs.c89
-rw-r--r--app/test/test_lpm.c1319
-rw-r--r--app/test/test_lpm6.c1770
-rw-r--r--app/test/test_lpm6_data.h1188
-rw-r--r--app/test/test_lpm6_perf.c192
-rw-r--r--app/test/test_lpm_perf.c513
-rw-r--r--app/test/test_malloc.c962
-rw-r--r--app/test/test_mbuf.c1029
-rw-r--r--app/test/test_memcpy.c162
-rw-r--r--app/test/test_memcpy_perf.c354
-rw-r--r--app/test/test_memory.c89
-rw-r--r--app/test/test_mempool.c619
-rw-r--r--app/test/test_mempool_perf.c383
-rw-r--r--app/test/test_memzone.c875
-rw-r--r--app/test/test_meter.c497
-rw-r--r--app/test/test_mp_secondary.c285
-rw-r--r--app/test/test_pci.c322
-rw-r--r--app/test/test_pci_sysfs/bus/pci/devices/0000:01:00.0/class1
-rw-r--r--app/test/test_pci_sysfs/bus/pci/devices/0000:01:00.0/configbin64 -> 0 bytes
-rw-r--r--app/test/test_pci_sysfs/bus/pci/devices/0000:01:00.0/consistent_dma_mask_bits1
-rw-r--r--app/test/test_pci_sysfs/bus/pci/devices/0000:01:00.0/device1
-rw-r--r--app/test/test_pci_sysfs/bus/pci/devices/0000:01:00.0/dma_mask_bits1
-rw-r--r--app/test/test_pci_sysfs/bus/pci/devices/0000:01:00.0/enable1
-rw-r--r--app/test/test_pci_sysfs/bus/pci/devices/0000:01:00.0/irq1
-rw-r--r--app/test/test_pci_sysfs/bus/pci/devices/0000:01:00.0/modalias1
-rw-r--r--app/test/test_pci_sysfs/bus/pci/devices/0000:01:00.0/msi_bus1
-rw-r--r--app/test/test_pci_sysfs/bus/pci/devices/0000:01:00.0/numa_node1
-rw-r--r--app/test/test_pci_sysfs/bus/pci/devices/0000:01:00.0/resource13
-rw-r--r--app/test/test_pci_sysfs/bus/pci/devices/0000:01:00.0/sriov_numvfs1
-rw-r--r--app/test/test_pci_sysfs/bus/pci/devices/0000:01:00.0/sriov_totalvfs1
-rw-r--r--app/test/test_pci_sysfs/bus/pci/devices/0000:01:00.0/subsystem_device1
-rw-r--r--app/test/test_pci_sysfs/bus/pci/devices/0000:01:00.0/subsystem_vendor1
-rw-r--r--app/test/test_pci_sysfs/bus/pci/devices/0000:01:00.0/uevent6
-rw-r--r--app/test/test_pci_sysfs/bus/pci/devices/0000:01:00.0/vendor1
-rw-r--r--app/test/test_pci_sysfs/bus/pci/devices/0000:01:02.0/class1
-rw-r--r--app/test/test_pci_sysfs/bus/pci/devices/0000:01:02.0/device1
-rw-r--r--app/test/test_pci_sysfs/bus/pci/devices/0000:01:02.0/resource13
-rw-r--r--app/test/test_pci_sysfs/bus/pci/devices/0000:01:02.0/subsystem_device1
-rw-r--r--app/test/test_pci_sysfs/bus/pci/devices/0000:01:02.0/subsystem_vendor1
-rw-r--r--app/test/test_pci_sysfs/bus/pci/devices/0000:01:02.0/vendor1
-rw-r--r--app/test/test_pci_sysfs/bus/pci/devices/0000:02:ab.0/class1
-rw-r--r--app/test/test_pci_sysfs/bus/pci/devices/0000:02:ab.0/device1
-rw-r--r--app/test/test_pci_sysfs/bus/pci/devices/0000:02:ab.0/resource13
-rw-r--r--app/test/test_pci_sysfs/bus/pci/devices/0000:02:ab.0/subsystem_device1
-rw-r--r--app/test/test_pci_sysfs/bus/pci/devices/0000:02:ab.0/subsystem_vendor1
-rw-r--r--app/test/test_pci_sysfs/bus/pci/devices/0000:02:ab.0/vendor1
-rw-r--r--app/test/test_per_lcore.c139
-rw-r--r--app/test/test_pmd_perf.c913
-rw-r--r--app/test/test_pmd_ring.c529
-rw-r--r--app/test/test_pmd_ring_perf.c184
-rw-r--r--app/test/test_power.c107
-rw-r--r--app/test/test_power_acpi_cpufreq.c540
-rw-r--r--app/test/test_power_kvm_vm.c303
-rw-r--r--app/test/test_prefetch.c61
-rw-r--r--app/test/test_red.c1885
-rw-r--r--app/test/test_reorder.c386
-rw-r--r--app/test/test_resource.c133
-rw-r--r--app/test/test_ring.c1381
-rw-r--r--app/test/test_ring_perf.c417
-rw-r--r--app/test/test_rwlock.c132
-rw-r--r--app/test/test_sched.c216
-rw-r--r--app/test/test_spinlock.c336
-rw-r--r--app/test/test_string_fns.c169
-rw-r--r--app/test/test_table.c202
-rw-r--r--app/test/test_table.h206
-rw-r--r--app/test/test_table_acl.c760
-rw-r--r--app/test/test_table_acl.h35
-rw-r--r--app/test/test_table_combined.c881
-rw-r--r--app/test/test_table_combined.h56
-rw-r--r--app/test/test_table_pipeline.c600
-rw-r--r--app/test/test_table_pipeline.h35
-rw-r--r--app/test/test_table_ports.c220
-rw-r--r--app/test/test_table_ports.h42
-rw-r--r--app/test/test_table_tables.c1109
-rw-r--r--app/test/test_table_tables.h51
-rw-r--r--app/test/test_tailq.c157
-rw-r--r--app/test/test_thash.c172
-rw-r--r--app/test/test_timer.c629
-rw-r--r--app/test/test_timer_perf.c161
-rw-r--r--app/test/test_timer_racecond.c205
-rw-r--r--app/test/test_version.c57
-rw-r--r--app/test/test_xmmt_ops.h83
-rw-r--r--app/test/virtual_pmd.c644
-rw-r--r--app/test/virtual_pmd.h104
149 files changed, 0 insertions, 69230 deletions
diff --git a/app/test/Makefile b/app/test/Makefile
deleted file mode 100644
index 5be023a0..00000000
--- a/app/test/Makefile
+++ /dev/null
@@ -1,237 +0,0 @@
-# BSD LICENSE
-#
-# Copyright(c) 2010-2015 Intel Corporation. All rights reserved.
-# All rights reserved.
-#
-# Redistribution and use in source and binary forms, with or without
-# modification, are permitted provided that the following conditions
-# are met:
-#
-# * Redistributions of source code must retain the above copyright
-# notice, this list of conditions and the following disclaimer.
-# * Redistributions in binary form must reproduce the above copyright
-# notice, this list of conditions and the following disclaimer in
-# the documentation and/or other materials provided with the
-# distribution.
-# * Neither the name of Intel Corporation nor the names of its
-# contributors may be used to endorse or promote products derived
-# from this software without specific prior written permission.
-#
-# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-include $(RTE_SDK)/mk/rte.vars.mk
-
-ifeq ($(CONFIG_RTE_APP_TEST),y)
-
-# default rule
-all:
-
-# Define an externally linked resource. A linked resource is an arbitrary
-# file that is linked into the test binary. The application refers to this
-# resource by name. The linked generates identifiers beg_<name> and end_<name>
-# for referencing by the C code.
-#
-# Parameters: <unique name>, <file to be linked>
-define linked_resource
-SRCS-y += $(1).res.o
-$(1).res.o: $(2)
- @ echo ' MKRES $$@'
- $Q [ "$$(<D)" = . ] || ln -fs $$<
- $Q $(OBJCOPY) -I binary -B $(RTE_OBJCOPY_ARCH) -O $(RTE_OBJCOPY_TARGET) \
- --rename-section \
- .data=.rodata,alloc,load,data,contents,readonly \
- --redefine-sym _binary_$$(subst .,_,$$(<F))_start=beg_$(1) \
- --redefine-sym _binary_$$(subst .,_,$$(<F))_end=end_$(1) \
- --redefine-sym _binary_$$(subst .,_,$$(<F))_size=siz_$(1) \
- $$(<F) $$@
-endef
-
-ifeq ($(CONFIG_RTE_APP_TEST_RESOURCE_TAR),y)
-define linked_tar_resource
-$(1).tar: $(2)
- @ echo ' TAR $$@'
- $Q tar -C $$(dir $$<) -cf $$@ $$(notdir $$<)
-$(call linked_resource,$(1),$(1).tar)
-endef
-else # ! CONFIG_RTE_APP_TEST_RESOURCE_TAR
-linked_tar_resource =
-endif # CONFIG_RTE_APP_TEST_RESOURCE_TAR
-
-#
-# library name
-#
-APP = test
-
-#
-# all sources are stored in SRCS-y
-#
-SRCS-$(CONFIG_RTE_LIBRTE_CMDLINE) := commands.c
-SRCS-y += test.c
-SRCS-y += resource.c
-SRCS-y += test_resource.c
-test_resource.res: test_resource.c
- @ cp $< $@
-$(eval $(call linked_resource,test_resource_c,test_resource.res))
-$(eval $(call linked_tar_resource,test_resource_tar,test_resource.c))
-SRCS-$(CONFIG_RTE_APP_TEST_RESOURCE_TAR) += test_pci.c
-$(eval $(call linked_tar_resource,test_pci_sysfs,test_pci_sysfs))
-SRCS-y += test_prefetch.c
-SRCS-y += test_byteorder.c
-SRCS-y += test_per_lcore.c
-SRCS-y += test_atomic.c
-SRCS-y += test_malloc.c
-SRCS-y += test_cycles.c
-SRCS-y += test_spinlock.c
-SRCS-y += test_memory.c
-SRCS-y += test_memzone.c
-
-SRCS-y += test_ring.c
-SRCS-y += test_ring_perf.c
-SRCS-y += test_pmd_perf.c
-
-ifeq ($(CONFIG_RTE_LIBRTE_TABLE),y)
-SRCS-y += test_table.c
-SRCS-$(CONFIG_RTE_LIBRTE_PIPELINE) += test_table_pipeline.c
-SRCS-y += test_table_tables.c
-SRCS-y += test_table_ports.c
-SRCS-y += test_table_combined.c
-SRCS-$(CONFIG_RTE_LIBRTE_ACL) += test_table_acl.c
-endif
-
-SRCS-y += test_rwlock.c
-
-SRCS-$(CONFIG_RTE_LIBRTE_TIMER) += test_timer.c
-SRCS-$(CONFIG_RTE_LIBRTE_TIMER) += test_timer_perf.c
-SRCS-$(CONFIG_RTE_LIBRTE_TIMER) += test_timer_racecond.c
-
-SRCS-y += test_mempool.c
-SRCS-y += test_mempool_perf.c
-
-SRCS-y += test_mbuf.c
-SRCS-y += test_logs.c
-
-SRCS-y += test_memcpy.c
-SRCS-y += test_memcpy_perf.c
-
-SRCS-$(CONFIG_RTE_LIBRTE_HASH) += test_hash.c
-SRCS-$(CONFIG_RTE_LIBRTE_HASH) += test_thash.c
-SRCS-$(CONFIG_RTE_LIBRTE_HASH) += test_hash_perf.c
-SRCS-$(CONFIG_RTE_LIBRTE_HASH) += test_hash_functions.c
-SRCS-$(CONFIG_RTE_LIBRTE_HASH) += test_hash_scaling.c
-SRCS-$(CONFIG_RTE_LIBRTE_HASH) += test_hash_multiwriter.c
-
-SRCS-$(CONFIG_RTE_LIBRTE_LPM) += test_lpm.c
-SRCS-$(CONFIG_RTE_LIBRTE_LPM) += test_lpm_perf.c
-SRCS-$(CONFIG_RTE_LIBRTE_LPM) += test_lpm6.c
-SRCS-$(CONFIG_RTE_LIBRTE_LPM) += test_lpm6_perf.c
-
-SRCS-y += test_debug.c
-SRCS-y += test_errno.c
-SRCS-y += test_tailq.c
-SRCS-y += test_string_fns.c
-SRCS-y += test_cpuflags.c
-SRCS-y += test_mp_secondary.c
-SRCS-y += test_eal_flags.c
-SRCS-y += test_eal_fs.c
-SRCS-y += test_alarm.c
-SRCS-y += test_interrupts.c
-SRCS-y += test_version.c
-SRCS-y += test_func_reentrancy.c
-
-SRCS-$(CONFIG_RTE_LIBRTE_CMDLINE) += test_cmdline.c
-SRCS-$(CONFIG_RTE_LIBRTE_CMDLINE) += test_cmdline_num.c
-SRCS-$(CONFIG_RTE_LIBRTE_CMDLINE) += test_cmdline_etheraddr.c
-SRCS-$(CONFIG_RTE_LIBRTE_CMDLINE) += test_cmdline_portlist.c
-SRCS-$(CONFIG_RTE_LIBRTE_CMDLINE) += test_cmdline_ipaddr.c
-SRCS-$(CONFIG_RTE_LIBRTE_CMDLINE) += test_cmdline_cirbuf.c
-SRCS-$(CONFIG_RTE_LIBRTE_CMDLINE) += test_cmdline_string.c
-SRCS-$(CONFIG_RTE_LIBRTE_CMDLINE) += test_cmdline_lib.c
-
-ifeq ($(CONFIG_RTE_LIBRTE_SCHED),y)
-SRCS-y += test_red.c
-SRCS-y += test_sched.c
-endif
-
-SRCS-$(CONFIG_RTE_LIBRTE_METER) += test_meter.c
-SRCS-$(CONFIG_RTE_LIBRTE_KNI) += test_kni.c
-SRCS-$(CONFIG_RTE_LIBRTE_POWER) += test_power.c test_power_acpi_cpufreq.c
-SRCS-$(CONFIG_RTE_LIBRTE_POWER) += test_power_kvm_vm.c
-SRCS-y += test_common.c
-
-SRCS-$(CONFIG_RTE_LIBRTE_DISTRIBUTOR) += test_distributor.c
-SRCS-$(CONFIG_RTE_LIBRTE_DISTRIBUTOR) += test_distributor_perf.c
-
-SRCS-$(CONFIG_RTE_LIBRTE_REORDER) += test_reorder.c
-
-SRCS-y += test_devargs.c
-SRCS-y += virtual_pmd.c
-SRCS-y += packet_burst_generator.c
-SRCS-$(CONFIG_RTE_LIBRTE_ACL) += test_acl.c
-
-ifeq ($(CONFIG_RTE_LIBRTE_PMD_RING),y)
-SRCS-$(CONFIG_RTE_LIBRTE_PMD_BOND) += test_link_bonding.c
-SRCS-$(CONFIG_RTE_LIBRTE_PMD_BOND) += test_link_bonding_mode4.c
-endif
-
-ifeq ($(CONFIG_RTE_LIBRTE_PMD_NULL),y)
-SRCS-$(CONFIG_RTE_LIBRTE_PMD_BOND) += test_link_bonding_rssconf.c
-ifeq ($(CONFIG_RTE_BUILD_SHARED_LIB),y)
-LDLIBS += -lrte_pmd_null
-endif
-endif
-
-SRCS-$(CONFIG_RTE_LIBRTE_PMD_RING) += test_pmd_ring.c
-SRCS-$(CONFIG_RTE_LIBRTE_PMD_RING) += test_pmd_ring_perf.c
-
-SRCS-$(CONFIG_RTE_LIBRTE_CRYPTODEV) += test_cryptodev_blockcipher.c
-SRCS-$(CONFIG_RTE_LIBRTE_CRYPTODEV) += test_cryptodev_perf.c
-SRCS-$(CONFIG_RTE_LIBRTE_CRYPTODEV) += test_cryptodev.c
-
-SRCS-$(CONFIG_RTE_LIBRTE_KVARGS) += test_kvargs.c
-
-CFLAGS += -O3
-CFLAGS += $(WERROR_FLAGS)
-
-CFLAGS += -D_GNU_SOURCE
-
-LDLIBS += -lm
-
-# Disable VTA for memcpy test
-ifeq ($(CONFIG_RTE_TOOLCHAIN_GCC),y)
-ifeq ($(shell test $(GCC_VERSION) -ge 44 && echo 1), 1)
-CFLAGS_test_memcpy.o += -fno-var-tracking-assignments
-CFLAGS_test_memcpy_perf.o += -fno-var-tracking-assignments
-endif
-endif
-
-# this application needs libraries first
-DEPDIRS-y += lib drivers
-
-# Link against shared libraries when needed
-ifeq ($(CONFIG_RTE_LIBRTE_PMD_BOND),y)
-ifneq ($(CONFIG_RTE_LIBRTE_PMD_RING),y)
-$(error Link bonding tests require CONFIG_RTE_LIBRTE_PMD_RING=y)
-else
-ifeq ($(CONFIG_RTE_BUILD_SHARED_LIB),y)
-LDLIBS += -lrte_pmd_ring
-endif
-endif
-endif
-
-ifeq ($(CONFIG_RTE_APP_TEST_RESOURCE_TAR),y)
-LDLIBS += -larchive
-endif
-
-include $(RTE_SDK)/mk/rte.app.mk
-
-endif
diff --git a/app/test/autotest.py b/app/test/autotest.py
deleted file mode 100644
index b9fd6b6f..00000000
--- a/app/test/autotest.py
+++ /dev/null
@@ -1,77 +0,0 @@
-#!/usr/bin/python
-
-# BSD LICENSE
-#
-# Copyright(c) 2010-2014 Intel Corporation. All rights reserved.
-# All rights reserved.
-#
-# Redistribution and use in source and binary forms, with or without
-# modification, are permitted provided that the following conditions
-# are met:
-#
-# * Redistributions of source code must retain the above copyright
-# notice, this list of conditions and the following disclaimer.
-# * Redistributions in binary form must reproduce the above copyright
-# notice, this list of conditions and the following disclaimer in
-# the documentation and/or other materials provided with the
-# distribution.
-# * Neither the name of Intel Corporation nor the names of its
-# contributors may be used to endorse or promote products derived
-# from this software without specific prior written permission.
-#
-# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-# Script that uses either test app or qemu controlled by python-pexpect
-
-import sys, autotest_data, autotest_runner
-
-
-
-def usage():
- print"Usage: autotest.py [test app|test iso image]",
- print "[target] [whitelist|-blacklist]"
-
-if len(sys.argv) < 3:
- usage()
- sys.exit(1)
-
-target = sys.argv[2]
-
-test_whitelist=None
-test_blacklist=None
-
-# get blacklist/whitelist
-if len(sys.argv) > 3:
- testlist = sys.argv[3].split(',')
- testlist = [test.lower() for test in testlist]
- if testlist[0].startswith('-'):
- testlist[0] = testlist[0].lstrip('-')
- test_blacklist = testlist
- else:
- test_whitelist = testlist
-
-cmdline = "%s -c f -n 4"%(sys.argv[1])
-
-print cmdline
-
-runner = autotest_runner.AutotestRunner(cmdline, target, test_blacklist, test_whitelist)
-
-for test_group in autotest_data.parallel_test_group_list:
- runner.add_parallel_test_group(test_group)
-
-for test_group in autotest_data.non_parallel_test_group_list:
- runner.add_non_parallel_test_group(test_group)
-
-num_fails = runner.run_all_tests()
-
-sys.exit(num_fails)
diff --git a/app/test/autotest_data.py b/app/test/autotest_data.py
deleted file mode 100644
index 9e8fd946..00000000
--- a/app/test/autotest_data.py
+++ /dev/null
@@ -1,470 +0,0 @@
-#!/usr/bin/python
-
-# BSD LICENSE
-#
-# Copyright(c) 2010-2014 Intel Corporation. All rights reserved.
-# All rights reserved.
-#
-# Redistribution and use in source and binary forms, with or without
-# modification, are permitted provided that the following conditions
-# are met:
-#
-# * Redistributions of source code must retain the above copyright
-# notice, this list of conditions and the following disclaimer.
-# * Redistributions in binary form must reproduce the above copyright
-# notice, this list of conditions and the following disclaimer in
-# the documentation and/or other materials provided with the
-# distribution.
-# * Neither the name of Intel Corporation nor the names of its
-# contributors may be used to endorse or promote products derived
-# from this software without specific prior written permission.
-#
-# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-# Test data for autotests
-
-from glob import glob
-from autotest_test_funcs import *
-
-# quick and dirty function to find out number of sockets
-def num_sockets():
- result = len(glob("/sys/devices/system/node/node*"))
- if result == 0:
- return 1
- return result
-
-# Assign given number to each socket
-# e.g. 32 becomes 32,32 or 32,32,32,32
-def per_sockets(num):
- return ",".join([str(num)] * num_sockets())
-
-# groups of tests that can be run in parallel
-# the grouping has been found largely empirically
-parallel_test_group_list = [
-
-{
- "Prefix": "group_1",
- "Memory" : per_sockets(8),
- "Tests" :
- [
- {
- "Name" : "Cycles autotest",
- "Command" : "cycles_autotest",
- "Func" : default_autotest,
- "Report" : None,
- },
- {
- "Name" : "Timer autotest",
- "Command" : "timer_autotest",
- "Func" : timer_autotest,
- "Report" : None,
- },
- {
- "Name" : "Debug autotest",
- "Command" : "debug_autotest",
- "Func" : default_autotest,
- "Report" : None,
- },
- {
- "Name" : "Errno autotest",
- "Command" : "errno_autotest",
- "Func" : default_autotest,
- "Report" : None,
- },
- {
- "Name" : "Meter autotest",
- "Command" : "meter_autotest",
- "Func" : default_autotest,
- "Report" : None,
- },
- {
- "Name" : "Common autotest",
- "Command" : "common_autotest",
- "Func" : default_autotest,
- "Report" : None,
- },
- {
- "Name" : "Resource autotest",
- "Command" : "resource_autotest",
- "Func" : default_autotest,
- "Report" : None,
- },
- ]
-},
-{
- "Prefix": "group_2",
- "Memory" : "16",
- "Tests" :
- [
- {
- "Name" : "Memory autotest",
- "Command" : "memory_autotest",
- "Func" : memory_autotest,
- "Report" : None,
- },
- {
- "Name" : "Read/write lock autotest",
- "Command" : "rwlock_autotest",
- "Func" : rwlock_autotest,
- "Report" : None,
- },
- {
- "Name" : "Logs autotest",
- "Command" : "logs_autotest",
- "Func" : logs_autotest,
- "Report" : None,
- },
- {
- "Name" : "CPU flags autotest",
- "Command" : "cpuflags_autotest",
- "Func" : default_autotest,
- "Report" : None,
- },
- {
- "Name" : "Version autotest",
- "Command" : "version_autotest",
- "Func" : default_autotest,
- "Report" : None,
- },
- {
- "Name" : "EAL filesystem autotest",
- "Command" : "eal_fs_autotest",
- "Func" : default_autotest,
- "Report" : None,
- },
- {
- "Name" : "EAL flags autotest",
- "Command" : "eal_flags_autotest",
- "Func" : default_autotest,
- "Report" : None,
- },
- {
- "Name" : "Hash autotest",
- "Command" : "hash_autotest",
- "Func" : default_autotest,
- "Report" : None,
- },
- ],
-},
-{
- "Prefix": "group_3",
- "Memory" : per_sockets(512),
- "Tests" :
- [
- {
- "Name" : "LPM autotest",
- "Command" : "lpm_autotest",
- "Func" : default_autotest,
- "Report" : None,
- },
- {
- "Name" : "LPM6 autotest",
- "Command" : "lpm6_autotest",
- "Func" : default_autotest,
- "Report" : None,
- },
- {
- "Name" : "Memcpy autotest",
- "Command" : "memcpy_autotest",
- "Func" : default_autotest,
- "Report" : None,
- },
- {
- "Name" : "Memzone autotest",
- "Command" : "memzone_autotest",
- "Func" : default_autotest,
- "Report" : None,
- },
- {
- "Name" : "String autotest",
- "Command" : "string_autotest",
- "Func" : default_autotest,
- "Report" : None,
- },
- {
- "Name" : "Alarm autotest",
- "Command" : "alarm_autotest",
- "Func" : default_autotest,
- "Report" : None,
- },
- ]
-},
-{
- "Prefix": "group_4",
- "Memory" : per_sockets(128),
- "Tests" :
- [
- {
- "Name" : "PCI autotest",
- "Command" : "pci_autotest",
- "Func" : default_autotest,
- "Report" : None,
- },
- {
- "Name" : "Malloc autotest",
- "Command" : "malloc_autotest",
- "Func" : default_autotest,
- "Report" : None,
- },
- {
- "Name" : "Multi-process autotest",
- "Command" : "multiprocess_autotest",
- "Func" : default_autotest,
- "Report" : None,
- },
- {
- "Name" : "Mbuf autotest",
- "Command" : "mbuf_autotest",
- "Func" : default_autotest,
- "Report" : None,
- },
- {
- "Name" : "Per-lcore autotest",
- "Command" : "per_lcore_autotest",
- "Func" : default_autotest,
- "Report" : None,
- },
- {
- "Name" : "Ring autotest",
- "Command" : "ring_autotest",
- "Func" : default_autotest,
- "Report" : None,
- },
- ]
-},
-{
- "Prefix": "group_5",
- "Memory" : "32",
- "Tests" :
- [
- {
- "Name" : "Spinlock autotest",
- "Command" : "spinlock_autotest",
- "Func" : spinlock_autotest,
- "Report" : None,
- },
- {
- "Name" : "Byte order autotest",
- "Command" : "byteorder_autotest",
- "Func" : default_autotest,
- "Report" : None,
- },
- {
- "Name" : "TAILQ autotest",
- "Command" : "tailq_autotest",
- "Func" : default_autotest,
- "Report" : None,
- },
- {
- "Name" : "Command-line autotest",
- "Command" : "cmdline_autotest",
- "Func" : default_autotest,
- "Report" : None,
- },
- {
- "Name" : "Interrupts autotest",
- "Command" : "interrupt_autotest",
- "Func" : default_autotest,
- "Report" : None,
- },
- ]
-},
-{
- "Prefix": "group_6",
- "Memory" : per_sockets(512),
- "Tests" :
- [
- {
- "Name" : "Function reentrancy autotest",
- "Command" : "func_reentrancy_autotest",
- "Func" : default_autotest,
- "Report" : None,
- },
- {
- "Name" : "Mempool autotest",
- "Command" : "mempool_autotest",
- "Func" : default_autotest,
- "Report" : None,
- },
- {
- "Name" : "Atomics autotest",
- "Command" : "atomic_autotest",
- "Func" : default_autotest,
- "Report" : None,
- },
- {
- "Name" : "Prefetch autotest",
- "Command" : "prefetch_autotest",
- "Func" : default_autotest,
- "Report" : None,
- },
- {
- "Name" :"Red autotest",
- "Command" : "red_autotest",
- "Func" :default_autotest,
- "Report" :None,
- },
- ]
-},
-{
- "Prefix" : "group_7",
- "Memory" : "64",
- "Tests" :
- [
- {
- "Name" : "PMD ring autotest",
- "Command" : "ring_pmd_autotest",
- "Func" : default_autotest,
- "Report" : None,
- },
- {
- "Name" : "Access list control autotest",
- "Command" : "acl_autotest",
- "Func" : default_autotest,
- "Report" : None,
- },
- {
- "Name" :"Sched autotest",
- "Command" : "sched_autotest",
- "Func" :default_autotest,
- "Report" :None,
- },
- ]
-},
-]
-
-# tests that should not be run when any other tests are running
-non_parallel_test_group_list = [
-
-{
- "Prefix" : "kni",
- "Memory" : "512",
- "Tests" :
- [
- {
- "Name" : "KNI autotest",
- "Command" : "kni_autotest",
- "Func" : default_autotest,
- "Report" : None,
- },
- ]
-},
-{
- "Prefix": "mempool_perf",
- "Memory" : per_sockets(256),
- "Tests" :
- [
- {
- "Name" : "Mempool performance autotest",
- "Command" : "mempool_perf_autotest",
- "Func" : default_autotest,
- "Report" : None,
- },
- ]
-},
-{
- "Prefix": "memcpy_perf",
- "Memory" : per_sockets(512),
- "Tests" :
- [
- {
- "Name" : "Memcpy performance autotest",
- "Command" : "memcpy_perf_autotest",
- "Func" : default_autotest,
- "Report" : None,
- },
- ]
-},
-{
- "Prefix": "hash_perf",
- "Memory" : per_sockets(512),
- "Tests" :
- [
- {
- "Name" : "Hash performance autotest",
- "Command" : "hash_perf_autotest",
- "Func" : default_autotest,
- "Report" : None,
- },
- ]
-},
-{
- "Prefix" : "power",
- "Memory" : "16",
- "Tests" :
- [
- {
- "Name" : "Power autotest",
- "Command" : "power_autotest",
- "Func" : default_autotest,
- "Report" : None,
- },
- ]
-},
-{
- "Prefix" : "power_acpi_cpufreq",
- "Memory" : "16",
- "Tests" :
- [
- {
- "Name" : "Power ACPI cpufreq autotest",
- "Command" : "power_acpi_cpufreq_autotest",
- "Func" : default_autotest,
- "Report" : None,
- },
- ]
-},
-{
- "Prefix" : "power_kvm_vm",
- "Memory" : "16",
- "Tests" :
- [
- {
- "Name" : "Power KVM VM autotest",
- "Command" : "power_kvm_vm_autotest",
- "Func" : default_autotest,
- "Report" : None,
- },
- ]
-},
-{
- "Prefix": "timer_perf",
- "Memory" : per_sockets(512),
- "Tests" :
- [
- {
- "Name" : "Timer performance autotest",
- "Command" : "timer_perf_autotest",
- "Func" : default_autotest,
- "Report" : None,
- },
- ]
-},
-
-#
-# Please always make sure that ring_perf is the last test!
-#
-{
- "Prefix": "ring_perf",
- "Memory" : per_sockets(512),
- "Tests" :
- [
- {
- "Name" : "Ring performance autotest",
- "Command" : "ring_perf_autotest",
- "Func" : default_autotest,
- "Report" : None,
- },
- ]
-},
-]
diff --git a/app/test/autotest_runner.py b/app/test/autotest_runner.py
deleted file mode 100644
index 21d3be2c..00000000
--- a/app/test/autotest_runner.py
+++ /dev/null
@@ -1,422 +0,0 @@
-#!/usr/bin/python
-
-# BSD LICENSE
-#
-# Copyright(c) 2010-2014 Intel Corporation. All rights reserved.
-# All rights reserved.
-#
-# Redistribution and use in source and binary forms, with or without
-# modification, are permitted provided that the following conditions
-# are met:
-#
-# * Redistributions of source code must retain the above copyright
-# notice, this list of conditions and the following disclaimer.
-# * Redistributions in binary form must reproduce the above copyright
-# notice, this list of conditions and the following disclaimer in
-# the documentation and/or other materials provided with the
-# distribution.
-# * Neither the name of Intel Corporation nor the names of its
-# contributors may be used to endorse or promote products derived
-# from this software without specific prior written permission.
-#
-# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-# The main logic behind running autotests in parallel
-
-import multiprocessing, subprocess, sys, pexpect, re, time, os, StringIO, csv
-
-# wait for prompt
-def wait_prompt(child):
- try:
- child.sendline()
- result = child.expect(["RTE>>", pexpect.TIMEOUT, pexpect.EOF],
- timeout = 120)
- except:
- return False
- if result == 0:
- return True
- else:
- return False
-
-# run a test group
-# each result tuple in results list consists of:
-# result value (0 or -1)
-# result string
-# test name
-# total test run time (double)
-# raw test log
-# test report (if not available, should be None)
-#
-# this function needs to be outside AutotestRunner class
-# because otherwise Pool won't work (or rather it will require
-# quite a bit of effort to make it work).
-def run_test_group(cmdline, test_group):
- results = []
- child = None
- start_time = time.time()
- startuplog = None
-
- # run test app
- try:
- # prepare logging of init
- startuplog = StringIO.StringIO()
-
- print >>startuplog, "\n%s %s\n" % ("="*20, test_group["Prefix"])
- print >>startuplog, "\ncmdline=%s" % cmdline
-
- child = pexpect.spawn(cmdline, logfile=startuplog)
-
- # wait for target to boot
- if not wait_prompt(child):
- child.close()
-
- results.append((-1, "Fail [No prompt]", "Start %s" % test_group["Prefix"],
- time.time() - start_time, startuplog.getvalue(), None))
-
- # mark all tests as failed
- for test in test_group["Tests"]:
- results.append((-1, "Fail [No prompt]", test["Name"],
- time.time() - start_time, "", None))
- # exit test
- return results
-
- except:
- results.append((-1, "Fail [Can't run]", "Start %s" % test_group["Prefix"],
- time.time() - start_time, startuplog.getvalue(), None))
-
- # mark all tests as failed
- for t in test_group["Tests"]:
- results.append((-1, "Fail [Can't run]", t["Name"],
- time.time() - start_time, "", None))
- # exit test
- return results
-
- # startup was successful
- results.append((0, "Success", "Start %s" % test_group["Prefix"],
- time.time() - start_time, startuplog.getvalue(), None))
-
- # parse the binary for available test commands
- binary = cmdline.split()[0]
- stripped = 'not stripped' not in subprocess.check_output(['file', binary])
- if not stripped:
- symbols = subprocess.check_output(['nm', binary]).decode('utf-8')
- avail_cmds = re.findall('test_register_(\w+)', symbols)
-
- # run all tests in test group
- for test in test_group["Tests"]:
-
- # create log buffer for each test
- # in multiprocessing environment, the logging would be
- # interleaved and will create a mess, hence the buffering
- logfile = StringIO.StringIO()
- child.logfile = logfile
-
- result = ()
-
- # make a note when the test started
- start_time = time.time()
-
- try:
- # print test name to log buffer
- print >>logfile, "\n%s %s\n" % ("-"*20, test["Name"])
-
- # run test function associated with the test
- if stripped or test["Command"] in avail_cmds:
- result = test["Func"](child, test["Command"])
- else:
- result = (0, "Skipped [Not Available]")
-
- # make a note when the test was finished
- end_time = time.time()
-
- # append test data to the result tuple
- result += (test["Name"], end_time - start_time,
- logfile.getvalue())
-
- # call report function, if any defined, and supply it with
- # target and complete log for test run
- if test["Report"]:
- report = test["Report"](self.target, log)
-
- # append report to results tuple
- result += (report,)
- else:
- # report is None
- result += (None,)
- except:
- # make a note when the test crashed
- end_time = time.time()
-
- # mark test as failed
- result = (-1, "Fail [Crash]", test["Name"],
- end_time - start_time, logfile.getvalue(), None)
- finally:
- # append the results to the results list
- results.append(result)
-
- # regardless of whether test has crashed, try quitting it
- try:
- child.sendline("quit")
- child.close()
- # if the test crashed, just do nothing instead
- except:
- # nop
- pass
-
- # return test results
- return results
-
-
-
-
-
-# class representing an instance of autotests run
-class AutotestRunner:
- cmdline = ""
- parallel_test_groups = []
- non_parallel_test_groups = []
- logfile = None
- csvwriter = None
- target = ""
- start = None
- n_tests = 0
- fails = 0
- log_buffers = []
- blacklist = []
- whitelist = []
-
-
- def __init__(self, cmdline, target, blacklist, whitelist):
- self.cmdline = cmdline
- self.target = target
- self.blacklist = blacklist
- self.whitelist = whitelist
-
- # log file filename
- logfile = "%s.log" % target
- csvfile = "%s.csv" % target
-
- self.logfile = open(logfile, "w")
- csvfile = open(csvfile, "w")
- self.csvwriter = csv.writer(csvfile)
-
- # prepare results table
- self.csvwriter.writerow(["test_name","test_result","result_str"])
-
-
-
- # set up cmdline string
- def __get_cmdline(self, test):
- cmdline = self.cmdline
-
- # append memory limitations for each test
- # otherwise tests won't run in parallel
- if not "i686" in self.target:
- cmdline += " --socket-mem=%s"% test["Memory"]
- else:
- # affinitize startup so that tests don't fail on i686
- cmdline = "taskset 1 " + cmdline
- cmdline += " -m " + str(sum(map(int,test["Memory"].split(","))))
-
- # set group prefix for autotest group
- # otherwise they won't run in parallel
- cmdline += " --file-prefix=%s"% test["Prefix"]
-
- return cmdline
-
-
-
- def add_parallel_test_group(self,test_group):
- self.parallel_test_groups.append(test_group)
-
- def add_non_parallel_test_group(self,test_group):
- self.non_parallel_test_groups.append(test_group)
-
-
- def __process_results(self, results):
- # this iterates over individual test results
- for i, result in enumerate(results):
-
- # increase total number of tests that were run
- # do not include "start" test
- if i > 0:
- self.n_tests += 1
-
- # unpack result tuple
- test_result, result_str, test_name, \
- test_time, log, report = result
-
- # get total run time
- cur_time = time.time()
- total_time = int(cur_time - self.start)
-
- # print results, test run time and total time since start
- print ("%s:" % test_name).ljust(30),
- print result_str.ljust(29),
- print "[%02dm %02ds]" % (test_time / 60, test_time % 60),
-
- # don't print out total time every line, it's the same anyway
- if i == len(results) - 1:
- print "[%02dm %02ds]" % (total_time / 60, total_time % 60)
- else:
- print ""
-
- # if test failed and it wasn't a "start" test
- if test_result < 0 and not i == 0:
- self.fails += 1
-
- # collect logs
- self.log_buffers.append(log)
-
- # create report if it exists
- if report:
- try:
- f = open("%s_%s_report.rst" % (self.target,test_name), "w")
- except IOError:
- print "Report for %s could not be created!" % test_name
- else:
- with f:
- f.write(report)
-
- # write test result to CSV file
- if i != 0:
- self.csvwriter.writerow([test_name, test_result, result_str])
-
-
-
-
- # this function iterates over test groups and removes each
- # test that is not in whitelist/blacklist
- def __filter_groups(self, test_groups):
- groups_to_remove = []
-
- # filter out tests from parallel test groups
- for i, test_group in enumerate(test_groups):
-
- # iterate over a copy so that we could safely delete individual tests
- for test in test_group["Tests"][:]:
- test_id = test["Command"]
-
- # dump tests are specified in full e.g. "Dump_mempool"
- if "_autotest" in test_id:
- test_id = test_id[:-len("_autotest")]
-
- # filter out blacklisted/whitelisted tests
- if self.blacklist and test_id in self.blacklist:
- test_group["Tests"].remove(test)
- continue
- if self.whitelist and test_id not in self.whitelist:
- test_group["Tests"].remove(test)
- continue
-
- # modify or remove original group
- if len(test_group["Tests"]) > 0:
- test_groups[i] = test_group
- else:
- # remember which groups should be deleted
- # put the numbers backwards so that we start
- # deleting from the end, not from the beginning
- groups_to_remove.insert(0, i)
-
- # remove test groups that need to be removed
- for i in groups_to_remove:
- del test_groups[i]
-
- return test_groups
-
-
-
- # iterate over test groups and run tests associated with them
- def run_all_tests(self):
- # filter groups
- self.parallel_test_groups = \
- self.__filter_groups(self.parallel_test_groups)
- self.non_parallel_test_groups = \
- self.__filter_groups(self.non_parallel_test_groups)
-
- # create a pool of worker threads
- pool = multiprocessing.Pool(processes=1)
-
- results = []
-
- # whatever happens, try to save as much logs as possible
- try:
-
- # create table header
- print ""
- print "Test name".ljust(30),
- print "Test result".ljust(29),
- print "Test".center(9),
- print "Total".center(9)
- print "=" * 80
-
- # make a note of tests start time
- self.start = time.time()
-
- # assign worker threads to run test groups
- for test_group in self.parallel_test_groups:
- result = pool.apply_async(run_test_group,
- [self.__get_cmdline(test_group), test_group])
- results.append(result)
-
- # iterate while we have group execution results to get
- while len(results) > 0:
-
- # iterate over a copy to be able to safely delete results
- # this iterates over a list of group results
- for group_result in results[:]:
-
- # if the thread hasn't finished yet, continue
- if not group_result.ready():
- continue
-
- res = group_result.get()
-
- self.__process_results(res)
-
- # remove result from results list once we're done with it
- results.remove(group_result)
-
- # run non_parallel tests. they are run one by one, synchronously
- for test_group in self.non_parallel_test_groups:
- group_result = run_test_group(self.__get_cmdline(test_group), test_group)
-
- self.__process_results(group_result)
-
- # get total run time
- cur_time = time.time()
- total_time = int(cur_time - self.start)
-
- # print out summary
- print "=" * 80
- print "Total run time: %02dm %02ds" % (total_time / 60, total_time % 60)
- if self.fails != 0:
- print "Number of failed tests: %s" % str(self.fails)
-
- # write summary to logfile
- self.logfile.write("Summary\n")
- self.logfile.write("Target: ".ljust(15) + "%s\n" % self.target)
- self.logfile.write("Tests: ".ljust(15) + "%i\n" % self.n_tests)
- self.logfile.write("Failed tests: ".ljust(15) + "%i\n" % self.fails)
- except:
- print "Exception occured"
- print sys.exc_info()
- self.fails = 1
-
- # drop logs from all executions to a logfile
- for buf in self.log_buffers:
- self.logfile.write(buf.replace("\r",""))
-
- log_buffers = []
-
- return self.fails
diff --git a/app/test/autotest_test_funcs.py b/app/test/autotest_test_funcs.py
deleted file mode 100644
index 14cffd01..00000000
--- a/app/test/autotest_test_funcs.py
+++ /dev/null
@@ -1,289 +0,0 @@
-#!/usr/bin/python
-
-# BSD LICENSE
-#
-# Copyright(c) 2010-2014 Intel Corporation. All rights reserved.
-# All rights reserved.
-#
-# Redistribution and use in source and binary forms, with or without
-# modification, are permitted provided that the following conditions
-# are met:
-#
-# * Redistributions of source code must retain the above copyright
-# notice, this list of conditions and the following disclaimer.
-# * Redistributions in binary form must reproduce the above copyright
-# notice, this list of conditions and the following disclaimer in
-# the documentation and/or other materials provided with the
-# distribution.
-# * Neither the name of Intel Corporation nor the names of its
-# contributors may be used to endorse or promote products derived
-# from this software without specific prior written permission.
-#
-# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-# Test functions
-
-import sys, pexpect, time, os, re
-
-# default autotest, used to run most tests
-# waits for "Test OK"
-def default_autotest(child, test_name):
- child.sendline(test_name)
- result = child.expect(["Test OK", "Test Failed",
- "Command not found", pexpect.TIMEOUT], timeout = 900)
- if result == 1:
- return -1, "Fail"
- elif result == 2:
- return -1, "Fail [Not found]"
- elif result == 3:
- return -1, "Fail [Timeout]"
- return 0, "Success"
-
-# autotest used to run dump commands
-# just fires the command
-def dump_autotest(child, test_name):
- child.sendline(test_name)
- return 0, "Success"
-
-# memory autotest
-# reads output and waits for Test OK
-def memory_autotest(child, test_name):
- child.sendline(test_name)
- regexp = "phys:0x[0-9a-f]*, len:([0-9]*), virt:0x[0-9a-f]*, socket_id:[0-9]*"
- index = child.expect([regexp, pexpect.TIMEOUT], timeout = 180)
- if index != 0:
- return -1, "Fail [Timeout]"
- size = int(child.match.groups()[0], 16)
- if size <= 0:
- return -1, "Fail [Bad size]"
- index = child.expect(["Test OK", "Test Failed",
- pexpect.TIMEOUT], timeout = 10)
- if index == 1:
- return -1, "Fail"
- elif index == 2:
- return -1, "Fail [Timeout]"
- return 0, "Success"
-
-def spinlock_autotest(child, test_name):
- i = 0
- ir = 0
- child.sendline(test_name)
- while True:
- index = child.expect(["Test OK",
- "Test Failed",
- "Hello from core ([0-9]*) !",
- "Hello from within recursive locks from ([0-9]*) !",
- pexpect.TIMEOUT], timeout = 5)
- # ok
- if index == 0:
- break
-
- # message, check ordering
- elif index == 2:
- if int(child.match.groups()[0]) < i:
- return -1, "Fail [Bad order]"
- i = int(child.match.groups()[0])
- elif index == 3:
- if int(child.match.groups()[0]) < ir:
- return -1, "Fail [Bad order]"
- ir = int(child.match.groups()[0])
-
- # fail
- elif index == 4:
- return -1, "Fail [Timeout]"
- elif index == 1:
- return -1, "Fail"
-
- return 0, "Success"
-
-def rwlock_autotest(child, test_name):
- i = 0
- child.sendline(test_name)
- while True:
- index = child.expect(["Test OK",
- "Test Failed",
- "Hello from core ([0-9]*) !",
- "Global write lock taken on master core ([0-9]*)",
- pexpect.TIMEOUT], timeout = 10)
- # ok
- if index == 0:
- if i != 0xffff:
- return -1, "Fail [Message is missing]"
- break
-
- # message, check ordering
- elif index == 2:
- if int(child.match.groups()[0]) < i:
- return -1, "Fail [Bad order]"
- i = int(child.match.groups()[0])
-
- # must be the last message, check ordering
- elif index == 3:
- i = 0xffff
-
- elif index == 4:
- return -1, "Fail [Timeout]"
-
- # fail
- else:
- return -1, "Fail"
-
- return 0, "Success"
-
-def logs_autotest(child, test_name):
- i = 0
- child.sendline(test_name)
-
- log_list = [
- "TESTAPP1: error message",
- "TESTAPP1: critical message",
- "TESTAPP2: critical message",
- "TESTAPP1: error message",
- ]
-
- for log_msg in log_list:
- index = child.expect([log_msg,
- "Test OK",
- "Test Failed",
- pexpect.TIMEOUT], timeout = 10)
-
- if index == 3:
- return -1, "Fail [Timeout]"
- # not ok
- elif index != 0:
- return -1, "Fail"
-
- index = child.expect(["Test OK",
- "Test Failed",
- pexpect.TIMEOUT], timeout = 10)
-
- return 0, "Success"
-
-def timer_autotest(child, test_name):
- i = 0
- child.sendline(test_name)
-
- index = child.expect(["Start timer stress tests",
- "Test Failed",
- pexpect.TIMEOUT], timeout = 5)
-
- if index == 1:
- return -1, "Fail"
- elif index == 2:
- return -1, "Fail [Timeout]"
-
- index = child.expect(["Start timer stress tests 2",
- "Test Failed",
- pexpect.TIMEOUT], timeout = 5)
-
- if index == 1:
- return -1, "Fail"
- elif index == 2:
- return -1, "Fail [Timeout]"
-
- index = child.expect(["Start timer basic tests",
- "Test Failed",
- pexpect.TIMEOUT], timeout = 5)
-
- if index == 1:
- return -1, "Fail"
- elif index == 2:
- return -1, "Fail [Timeout]"
-
- prev_lcore_timer1 = -1
-
- lcore_tim0 = -1
- lcore_tim1 = -1
- lcore_tim2 = -1
- lcore_tim3 = -1
-
- while True:
- index = child.expect(["TESTTIMER: ([0-9]*): callback id=([0-9]*) count=([0-9]*) on core ([0-9]*)",
- "Test OK",
- "Test Failed",
- pexpect.TIMEOUT], timeout = 10)
-
- if index == 1:
- break
-
- if index == 2:
- return -1, "Fail"
- elif index == 3:
- return -1, "Fail [Timeout]"
-
- try:
- t = int(child.match.groups()[0])
- id = int(child.match.groups()[1])
- cnt = int(child.match.groups()[2])
- lcore = int(child.match.groups()[3])
- except:
- return -1, "Fail [Cannot parse]"
-
- # timer0 always expires on the same core when cnt < 20
- if id == 0:
- if lcore_tim0 == -1:
- lcore_tim0 = lcore
- elif lcore != lcore_tim0 and cnt < 20:
- return -1, "Fail [lcore != lcore_tim0 (%d, %d)]"%(lcore, lcore_tim0)
- if cnt > 21:
- return -1, "Fail [tim0 cnt > 21]"
-
- # timer1 each time expires on a different core
- if id == 1:
- if lcore == lcore_tim1:
- return -1, "Fail [lcore == lcore_tim1 (%d, %d)]"%(lcore, lcore_tim1)
- lcore_tim1 = lcore
- if cnt > 10:
- return -1, "Fail [tim1 cnt > 30]"
-
- # timer0 always expires on the same core
- if id == 2:
- if lcore_tim2 == -1:
- lcore_tim2 = lcore
- elif lcore != lcore_tim2:
- return -1, "Fail [lcore != lcore_tim2 (%d, %d)]"%(lcore, lcore_tim2)
- if cnt > 30:
- return -1, "Fail [tim2 cnt > 30]"
-
- # timer0 always expires on the same core
- if id == 3:
- if lcore_tim3 == -1:
- lcore_tim3 = lcore
- elif lcore != lcore_tim3:
- return -1, "Fail [lcore_tim3 changed (%d -> %d)]"%(lcore, lcore_tim3)
- if cnt > 30:
- return -1, "Fail [tim3 cnt > 30]"
-
- # must be 2 different cores
- if lcore_tim0 == lcore_tim3:
- return -1, "Fail [lcore_tim0 (%d) == lcore_tim3 (%d)]"%(lcore_tim0, lcore_tim3)
-
- return 0, "Success"
-
-def ring_autotest(child, test_name):
- child.sendline(test_name)
- index = child.expect(["Test OK", "Test Failed",
- pexpect.TIMEOUT], timeout = 2)
- if index == 1:
- return -1, "Fail"
- elif index == 2:
- return -1, "Fail [Timeout]"
-
- child.sendline("set_watermark test 100")
- child.sendline("dump_ring test")
- index = child.expect([" watermark=100",
- pexpect.TIMEOUT], timeout = 1)
- if index != 0:
- return -1, "Fail [Bad watermark]"
-
- return 0, "Success"
diff --git a/app/test/commands.c b/app/test/commands.c
deleted file mode 100644
index 2df46b05..00000000
--- a/app/test/commands.c
+++ /dev/null
@@ -1,453 +0,0 @@
-/*-
- * BSD LICENSE
- *
- * Copyright(c) 2010-2014 Intel Corporation. All rights reserved.
- * Copyright(c) 2014 6WIND S.A.
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * * Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * * Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in
- * the documentation and/or other materials provided with the
- * distribution.
- * * Neither the name of Intel Corporation nor the names of its
- * contributors may be used to endorse or promote products derived
- * from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
- * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
- * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#include <stdio.h>
-#include <stdarg.h>
-#include <stdint.h>
-#include <string.h>
-#include <stdlib.h>
-#include <netinet/in.h>
-#include <termios.h>
-#ifndef __linux__
-#ifndef __FreeBSD__
-#include <net/socket.h>
-#endif
-#endif
-#include <inttypes.h>
-#include <errno.h>
-#include <sys/queue.h>
-
-#include <rte_common.h>
-#include <rte_log.h>
-#include <rte_debug.h>
-#include <rte_memory.h>
-#include <rte_memcpy.h>
-#include <rte_memzone.h>
-#include <rte_launch.h>
-#include <rte_cycles.h>
-#include <rte_eal.h>
-#include <rte_per_lcore.h>
-#include <rte_lcore.h>
-#include <rte_atomic.h>
-#include <rte_branch_prediction.h>
-#include <rte_ring.h>
-#include <rte_mempool.h>
-#include <rte_mbuf.h>
-#include <rte_devargs.h>
-
-#include <cmdline_rdline.h>
-#include <cmdline_parse.h>
-#include <cmdline_parse_ipaddr.h>
-#include <cmdline_parse_num.h>
-#include <cmdline_parse_string.h>
-#include <cmdline.h>
-
-#include "test.h"
-
-/****************/
-
-static struct test_commands_list commands_list =
- TAILQ_HEAD_INITIALIZER(commands_list);
-
-void
-add_test_command(struct test_command *t)
-{
- TAILQ_INSERT_TAIL(&commands_list, t, next);
-}
-
-struct cmd_autotest_result {
- cmdline_fixed_string_t autotest;
-};
-
-static void cmd_autotest_parsed(void *parsed_result,
- __attribute__((unused)) struct cmdline *cl,
- __attribute__((unused)) void *data)
-{
- struct test_command *t;
- struct cmd_autotest_result *res = parsed_result;
- int ret = 0;
-
- TAILQ_FOREACH(t, &commands_list, next) {
- if (!strcmp(res->autotest, t->command))
- ret = t->callback();
- }
-
- if (ret == 0)
- printf("Test OK\n");
- else
- printf("Test Failed\n");
- fflush(stdout);
-}
-
-cmdline_parse_token_string_t cmd_autotest_autotest =
- TOKEN_STRING_INITIALIZER(struct cmd_autotest_result, autotest,
- "");
-
-cmdline_parse_inst_t cmd_autotest = {
- .f = cmd_autotest_parsed, /* function to call */
- .data = NULL, /* 2nd arg of func */
- .help_str = "launch autotest",
- .tokens = { /* token list, NULL terminated */
- (void *)&cmd_autotest_autotest,
- NULL,
- },
-};
-
-/****************/
-
-struct cmd_dump_result {
- cmdline_fixed_string_t dump;
-};
-
-static void
-dump_struct_sizes(void)
-{
-#define DUMP_SIZE(t) printf("sizeof(" #t ") = %u\n", (unsigned)sizeof(t));
- DUMP_SIZE(struct rte_mbuf);
- DUMP_SIZE(struct rte_mempool);
- DUMP_SIZE(struct rte_ring);
-#undef DUMP_SIZE
-}
-
-static void cmd_dump_parsed(void *parsed_result,
- __attribute__((unused)) struct cmdline *cl,
- __attribute__((unused)) void *data)
-{
- struct cmd_dump_result *res = parsed_result;
-
- if (!strcmp(res->dump, "dump_physmem"))
- rte_dump_physmem_layout(stdout);
- else if (!strcmp(res->dump, "dump_memzone"))
- rte_memzone_dump(stdout);
- else if (!strcmp(res->dump, "dump_struct_sizes"))
- dump_struct_sizes();
- else if (!strcmp(res->dump, "dump_ring"))
- rte_ring_list_dump(stdout);
- else if (!strcmp(res->dump, "dump_mempool"))
- rte_mempool_list_dump(stdout);
- else if (!strcmp(res->dump, "dump_devargs"))
- rte_eal_devargs_dump(stdout);
-}
-
-cmdline_parse_token_string_t cmd_dump_dump =
- TOKEN_STRING_INITIALIZER(struct cmd_dump_result, dump,
- "dump_physmem#dump_memzone#"
- "dump_struct_sizes#dump_ring#dump_mempool#"
- "dump_devargs");
-
-cmdline_parse_inst_t cmd_dump = {
- .f = cmd_dump_parsed, /* function to call */
- .data = NULL, /* 2nd arg of func */
- .help_str = "dump status",
- .tokens = { /* token list, NULL terminated */
- (void *)&cmd_dump_dump,
- NULL,
- },
-};
-
-/****************/
-
-struct cmd_dump_one_result {
- cmdline_fixed_string_t dump;
- cmdline_fixed_string_t name;
-};
-
-static void cmd_dump_one_parsed(void *parsed_result, struct cmdline *cl,
- __attribute__((unused)) void *data)
-{
- struct cmd_dump_one_result *res = parsed_result;
-
- if (!strcmp(res->dump, "dump_ring")) {
- struct rte_ring *r;
- r = rte_ring_lookup(res->name);
- if (r == NULL) {
- cmdline_printf(cl, "Cannot find ring\n");
- return;
- }
- rte_ring_dump(stdout, r);
- }
- else if (!strcmp(res->dump, "dump_mempool")) {
- struct rte_mempool *mp;
- mp = rte_mempool_lookup(res->name);
- if (mp == NULL) {
- cmdline_printf(cl, "Cannot find mempool\n");
- return;
- }
- rte_mempool_dump(stdout, mp);
- }
-}
-
-cmdline_parse_token_string_t cmd_dump_one_dump =
- TOKEN_STRING_INITIALIZER(struct cmd_dump_one_result, dump,
- "dump_ring#dump_mempool");
-
-cmdline_parse_token_string_t cmd_dump_one_name =
- TOKEN_STRING_INITIALIZER(struct cmd_dump_one_result, name, NULL);
-
-cmdline_parse_inst_t cmd_dump_one = {
- .f = cmd_dump_one_parsed, /* function to call */
- .data = NULL, /* 2nd arg of func */
- .help_str = "dump one ring/mempool: dump_ring|dump_mempool <name>",
- .tokens = { /* token list, NULL terminated */
- (void *)&cmd_dump_one_dump,
- (void *)&cmd_dump_one_name,
- NULL,
- },
-};
-
-/****************/
-
-struct cmd_set_ring_result {
- cmdline_fixed_string_t set;
- cmdline_fixed_string_t name;
- uint32_t value;
-};
-
-static void cmd_set_ring_parsed(void *parsed_result, struct cmdline *cl,
- __attribute__((unused)) void *data)
-{
- struct cmd_set_ring_result *res = parsed_result;
- struct rte_ring *r;
- int ret;
-
- r = rte_ring_lookup(res->name);
- if (r == NULL) {
- cmdline_printf(cl, "Cannot find ring\n");
- return;
- }
-
- if (!strcmp(res->set, "set_watermark")) {
- ret = rte_ring_set_water_mark(r, res->value);
- if (ret != 0)
- cmdline_printf(cl, "Cannot set water mark\n");
- }
-}
-
-cmdline_parse_token_string_t cmd_set_ring_set =
- TOKEN_STRING_INITIALIZER(struct cmd_set_ring_result, set,
- "set_watermark");
-
-cmdline_parse_token_string_t cmd_set_ring_name =
- TOKEN_STRING_INITIALIZER(struct cmd_set_ring_result, name, NULL);
-
-cmdline_parse_token_num_t cmd_set_ring_value =
- TOKEN_NUM_INITIALIZER(struct cmd_set_ring_result, value, UINT32);
-
-cmdline_parse_inst_t cmd_set_ring = {
- .f = cmd_set_ring_parsed, /* function to call */
- .data = NULL, /* 2nd arg of func */
- .help_str = "set watermark: "
- "set_watermark <ring_name> <value>",
- .tokens = { /* token list, NULL terminated */
- (void *)&cmd_set_ring_set,
- (void *)&cmd_set_ring_name,
- (void *)&cmd_set_ring_value,
- NULL,
- },
-};
-
-/****************/
-
-struct cmd_quit_result {
- cmdline_fixed_string_t quit;
-};
-
-static void
-cmd_quit_parsed(__attribute__((unused)) void *parsed_result,
- struct cmdline *cl,
- __attribute__((unused)) void *data)
-{
- cmdline_quit(cl);
-}
-
-cmdline_parse_token_string_t cmd_quit_quit =
- TOKEN_STRING_INITIALIZER(struct cmd_quit_result, quit,
- "quit");
-
-cmdline_parse_inst_t cmd_quit = {
- .f = cmd_quit_parsed, /* function to call */
- .data = NULL, /* 2nd arg of func */
- .help_str = "exit application",
- .tokens = { /* token list, NULL terminated */
- (void *)&cmd_quit_quit,
- NULL,
- },
-};
-
-/****************/
-
-struct cmd_set_rxtx_result {
- cmdline_fixed_string_t set;
- cmdline_fixed_string_t mode;
-};
-
-static void cmd_set_rxtx_parsed(void *parsed_result, struct cmdline *cl,
- __attribute__((unused)) void *data)
-{
- struct cmd_set_rxtx_result *res = parsed_result;
- if (test_set_rxtx_conf(res->mode) < 0)
- cmdline_printf(cl, "Cannot find such mode\n");
-}
-
-cmdline_parse_token_string_t cmd_set_rxtx_set =
- TOKEN_STRING_INITIALIZER(struct cmd_set_rxtx_result, set,
- "set_rxtx_mode");
-
-cmdline_parse_token_string_t cmd_set_rxtx_mode =
- TOKEN_STRING_INITIALIZER(struct cmd_set_rxtx_result, mode, NULL);
-
-cmdline_parse_inst_t cmd_set_rxtx = {
- .f = cmd_set_rxtx_parsed, /* function to call */
- .data = NULL, /* 2nd arg of func */
- .help_str = "set rxtx routine: "
- "set_rxtx <mode>",
- .tokens = { /* token list, NULL terminated */
- (void *)&cmd_set_rxtx_set,
- (void *)&cmd_set_rxtx_mode,
- NULL,
- },
-};
-
-/****************/
-
-struct cmd_set_rxtx_anchor {
- cmdline_fixed_string_t set;
- cmdline_fixed_string_t type;
-};
-
-static void
-cmd_set_rxtx_anchor_parsed(void *parsed_result,
- struct cmdline *cl,
- __attribute__((unused)) void *data)
-{
- struct cmd_set_rxtx_anchor *res = parsed_result;
- if (test_set_rxtx_anchor(res->type) < 0)
- cmdline_printf(cl, "Cannot find such anchor\n");
-}
-
-cmdline_parse_token_string_t cmd_set_rxtx_anchor_set =
- TOKEN_STRING_INITIALIZER(struct cmd_set_rxtx_anchor, set,
- "set_rxtx_anchor");
-
-cmdline_parse_token_string_t cmd_set_rxtx_anchor_type =
- TOKEN_STRING_INITIALIZER(struct cmd_set_rxtx_anchor, type, NULL);
-
-cmdline_parse_inst_t cmd_set_rxtx_anchor = {
- .f = cmd_set_rxtx_anchor_parsed, /* function to call */
- .data = NULL, /* 2nd arg of func */
- .help_str = "set rxtx anchor: "
- "set_rxtx_anchor <type>",
- .tokens = { /* token list, NULL terminated */
- (void *)&cmd_set_rxtx_anchor_set,
- (void *)&cmd_set_rxtx_anchor_type,
- NULL,
- },
-};
-
-/****************/
-
-/* for stream control */
-struct cmd_set_rxtx_sc {
- cmdline_fixed_string_t set;
- cmdline_fixed_string_t type;
-};
-
-static void
-cmd_set_rxtx_sc_parsed(void *parsed_result,
- struct cmdline *cl,
- __attribute__((unused)) void *data)
-{
- struct cmd_set_rxtx_sc *res = parsed_result;
- if (test_set_rxtx_sc(res->type) < 0)
- cmdline_printf(cl, "Cannot find such stream control\n");
-}
-
-cmdline_parse_token_string_t cmd_set_rxtx_sc_set =
- TOKEN_STRING_INITIALIZER(struct cmd_set_rxtx_sc, set,
- "set_rxtx_sc");
-
-cmdline_parse_token_string_t cmd_set_rxtx_sc_type =
- TOKEN_STRING_INITIALIZER(struct cmd_set_rxtx_sc, type, NULL);
-
-cmdline_parse_inst_t cmd_set_rxtx_sc = {
- .f = cmd_set_rxtx_sc_parsed, /* function to call */
- .data = NULL, /* 2nd arg of func */
- .help_str = "set rxtx stream control: "
- "set_rxtx_sc <type>",
- .tokens = { /* token list, NULL terminated */
- (void *)&cmd_set_rxtx_sc_set,
- (void *)&cmd_set_rxtx_sc_type,
- NULL,
- },
-};
-
-/****************/
-
-
-cmdline_parse_ctx_t main_ctx[] = {
- (cmdline_parse_inst_t *)&cmd_autotest,
- (cmdline_parse_inst_t *)&cmd_dump,
- (cmdline_parse_inst_t *)&cmd_dump_one,
- (cmdline_parse_inst_t *)&cmd_set_ring,
- (cmdline_parse_inst_t *)&cmd_quit,
- (cmdline_parse_inst_t *)&cmd_set_rxtx,
- (cmdline_parse_inst_t *)&cmd_set_rxtx_anchor,
- (cmdline_parse_inst_t *)&cmd_set_rxtx_sc,
- NULL,
-};
-
-int commands_init(void)
-{
- struct test_command *t;
- char *commands, *ptr;
- int commands_len = 0;
-
- TAILQ_FOREACH(t, &commands_list, next) {
- commands_len += strlen(t->command) + 1;
- }
-
- commands = malloc(commands_len + 1);
- if (!commands)
- return -1;
-
- ptr = commands;
- TAILQ_FOREACH(t, &commands_list, next) {
- ptr += sprintf(ptr, "%s#", t->command);
- }
- ptr--;
- ptr[0] = '\0';
-
- cmd_autotest_autotest.string_data.str = commands;
- return 0;
-}
diff --git a/app/test/packet_burst_generator.c b/app/test/packet_burst_generator.c
deleted file mode 100644
index a93c3b59..00000000
--- a/app/test/packet_burst_generator.c
+++ /dev/null
@@ -1,285 +0,0 @@
-/*-
- * BSD LICENSE
- *
- * Copyright(c) 2010-2014 Intel Corporation. All rights reserved.
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * * Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * * Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in
- * the documentation and/or other materials provided with the
- * distribution.
- * * Neither the name of Intel Corporation nor the names of its
- * contributors may be used to endorse or promote products derived
- * from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
- * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
- * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#include <rte_byteorder.h>
-#include <rte_mbuf.h>
-
-#include "packet_burst_generator.h"
-
-#define UDP_SRC_PORT 1024
-#define UDP_DST_PORT 1024
-
-
-#define IP_DEFTTL 64 /* from RFC 1340. */
-#define IP_VERSION 0x40
-#define IP_HDRLEN 0x05 /* default IP header length == five 32-bits words. */
-#define IP_VHL_DEF (IP_VERSION | IP_HDRLEN)
-
-static void
-copy_buf_to_pkt_segs(void *buf, unsigned len, struct rte_mbuf *pkt,
- unsigned offset)
-{
- struct rte_mbuf *seg;
- void *seg_buf;
- unsigned copy_len;
-
- seg = pkt;
- while (offset >= seg->data_len) {
- offset -= seg->data_len;
- seg = seg->next;
- }
- copy_len = seg->data_len - offset;
- seg_buf = rte_pktmbuf_mtod_offset(seg, char *, offset);
- while (len > copy_len) {
- rte_memcpy(seg_buf, buf, (size_t) copy_len);
- len -= copy_len;
- buf = ((char *) buf + copy_len);
- seg = seg->next;
- seg_buf = rte_pktmbuf_mtod(seg, void *);
- }
- rte_memcpy(seg_buf, buf, (size_t) len);
-}
-
-static inline void
-copy_buf_to_pkt(void *buf, unsigned len, struct rte_mbuf *pkt, unsigned offset)
-{
- if (offset + len <= pkt->data_len) {
- rte_memcpy(rte_pktmbuf_mtod_offset(pkt, char *, offset), buf,
- (size_t) len);
- return;
- }
- copy_buf_to_pkt_segs(buf, len, pkt, offset);
-}
-
-void
-initialize_eth_header(struct ether_hdr *eth_hdr, struct ether_addr *src_mac,
- struct ether_addr *dst_mac, uint16_t ether_type,
- uint8_t vlan_enabled, uint16_t van_id)
-{
- ether_addr_copy(dst_mac, &eth_hdr->d_addr);
- ether_addr_copy(src_mac, &eth_hdr->s_addr);
-
- if (vlan_enabled) {
- struct vlan_hdr *vhdr = (struct vlan_hdr *)((uint8_t *)eth_hdr +
- sizeof(struct ether_hdr));
-
- eth_hdr->ether_type = rte_cpu_to_be_16(ETHER_TYPE_VLAN);
-
- vhdr->eth_proto = rte_cpu_to_be_16(ether_type);
- vhdr->vlan_tci = van_id;
- } else {
- eth_hdr->ether_type = rte_cpu_to_be_16(ether_type);
- }
-}
-
-void
-initialize_arp_header(struct arp_hdr *arp_hdr, struct ether_addr *src_mac,
- struct ether_addr *dst_mac, uint32_t src_ip, uint32_t dst_ip,
- uint32_t opcode)
-{
- arp_hdr->arp_hrd = rte_cpu_to_be_16(ARP_HRD_ETHER);
- arp_hdr->arp_pro = rte_cpu_to_be_16(ETHER_TYPE_IPv4);
- arp_hdr->arp_hln = ETHER_ADDR_LEN;
- arp_hdr->arp_pln = sizeof(uint32_t);
- arp_hdr->arp_op = rte_cpu_to_be_16(opcode);
- ether_addr_copy(src_mac, &arp_hdr->arp_data.arp_sha);
- arp_hdr->arp_data.arp_sip = src_ip;
- ether_addr_copy(dst_mac, &arp_hdr->arp_data.arp_tha);
- arp_hdr->arp_data.arp_tip = dst_ip;
-}
-
-uint16_t
-initialize_udp_header(struct udp_hdr *udp_hdr, uint16_t src_port,
- uint16_t dst_port, uint16_t pkt_data_len)
-{
- uint16_t pkt_len;
-
- pkt_len = (uint16_t) (pkt_data_len + sizeof(struct udp_hdr));
-
- udp_hdr->src_port = rte_cpu_to_be_16(src_port);
- udp_hdr->dst_port = rte_cpu_to_be_16(dst_port);
- udp_hdr->dgram_len = rte_cpu_to_be_16(pkt_len);
- udp_hdr->dgram_cksum = 0; /* No UDP checksum. */
-
- return pkt_len;
-}
-
-
-uint16_t
-initialize_ipv6_header(struct ipv6_hdr *ip_hdr, uint8_t *src_addr,
- uint8_t *dst_addr, uint16_t pkt_data_len)
-{
- ip_hdr->vtc_flow = 0;
- ip_hdr->payload_len = pkt_data_len;
- ip_hdr->proto = IPPROTO_UDP;
- ip_hdr->hop_limits = IP_DEFTTL;
-
- rte_memcpy(ip_hdr->src_addr, src_addr, sizeof(ip_hdr->src_addr));
- rte_memcpy(ip_hdr->dst_addr, dst_addr, sizeof(ip_hdr->dst_addr));
-
- return (uint16_t) (pkt_data_len + sizeof(struct ipv6_hdr));
-}
-
-uint16_t
-initialize_ipv4_header(struct ipv4_hdr *ip_hdr, uint32_t src_addr,
- uint32_t dst_addr, uint16_t pkt_data_len)
-{
- uint16_t pkt_len;
- unaligned_uint16_t *ptr16;
- uint32_t ip_cksum;
-
- /*
- * Initialize IP header.
- */
- pkt_len = (uint16_t) (pkt_data_len + sizeof(struct ipv4_hdr));
-
- ip_hdr->version_ihl = IP_VHL_DEF;
- ip_hdr->type_of_service = 0;
- ip_hdr->fragment_offset = 0;
- ip_hdr->time_to_live = IP_DEFTTL;
- ip_hdr->next_proto_id = IPPROTO_UDP;
- ip_hdr->packet_id = 0;
- ip_hdr->total_length = rte_cpu_to_be_16(pkt_len);
- ip_hdr->src_addr = rte_cpu_to_be_32(src_addr);
- ip_hdr->dst_addr = rte_cpu_to_be_32(dst_addr);
-
- /*
- * Compute IP header checksum.
- */
- ptr16 = (unaligned_uint16_t *)ip_hdr;
- ip_cksum = 0;
- ip_cksum += ptr16[0]; ip_cksum += ptr16[1];
- ip_cksum += ptr16[2]; ip_cksum += ptr16[3];
- ip_cksum += ptr16[4];
- ip_cksum += ptr16[6]; ip_cksum += ptr16[7];
- ip_cksum += ptr16[8]; ip_cksum += ptr16[9];
-
- /*
- * Reduce 32 bit checksum to 16 bits and complement it.
- */
- ip_cksum = ((ip_cksum & 0xFFFF0000) >> 16) +
- (ip_cksum & 0x0000FFFF);
- ip_cksum %= 65536;
- ip_cksum = (~ip_cksum) & 0x0000FFFF;
- if (ip_cksum == 0)
- ip_cksum = 0xFFFF;
- ip_hdr->hdr_checksum = (uint16_t) ip_cksum;
-
- return pkt_len;
-}
-
-
-
-/*
- * The maximum number of segments per packet is used when creating
- * scattered transmit packets composed of a list of mbufs.
- */
-#define RTE_MAX_SEGS_PER_PKT 255 /**< pkt.nb_segs is a 8-bit unsigned char. */
-
-
-int
-generate_packet_burst(struct rte_mempool *mp, struct rte_mbuf **pkts_burst,
- struct ether_hdr *eth_hdr, uint8_t vlan_enabled, void *ip_hdr,
- uint8_t ipv4, struct udp_hdr *udp_hdr, int nb_pkt_per_burst,
- uint8_t pkt_len, uint8_t nb_pkt_segs)
-{
- int i, nb_pkt = 0;
- size_t eth_hdr_size;
-
- struct rte_mbuf *pkt_seg;
- struct rte_mbuf *pkt;
-
- for (nb_pkt = 0; nb_pkt < nb_pkt_per_burst; nb_pkt++) {
- pkt = rte_pktmbuf_alloc(mp);
- if (pkt == NULL) {
-nomore_mbuf:
- if (nb_pkt == 0)
- return -1;
- break;
- }
-
- pkt->data_len = pkt_len;
- pkt_seg = pkt;
- for (i = 1; i < nb_pkt_segs; i++) {
- pkt_seg->next = rte_pktmbuf_alloc(mp);
- if (pkt_seg->next == NULL) {
- pkt->nb_segs = i;
- rte_pktmbuf_free(pkt);
- goto nomore_mbuf;
- }
- pkt_seg = pkt_seg->next;
- pkt_seg->data_len = pkt_len;
- }
- pkt_seg->next = NULL; /* Last segment of packet. */
-
- /*
- * Copy headers in first packet segment(s).
- */
- if (vlan_enabled)
- eth_hdr_size = sizeof(struct ether_hdr) + sizeof(struct vlan_hdr);
- else
- eth_hdr_size = sizeof(struct ether_hdr);
-
- copy_buf_to_pkt(eth_hdr, eth_hdr_size, pkt, 0);
-
- if (ipv4) {
- copy_buf_to_pkt(ip_hdr, sizeof(struct ipv4_hdr), pkt, eth_hdr_size);
- copy_buf_to_pkt(udp_hdr, sizeof(*udp_hdr), pkt, eth_hdr_size +
- sizeof(struct ipv4_hdr));
- } else {
- copy_buf_to_pkt(ip_hdr, sizeof(struct ipv6_hdr), pkt, eth_hdr_size);
- copy_buf_to_pkt(udp_hdr, sizeof(*udp_hdr), pkt, eth_hdr_size +
- sizeof(struct ipv6_hdr));
- }
-
- /*
- * Complete first mbuf of packet and append it to the
- * burst of packets to be transmitted.
- */
- pkt->nb_segs = nb_pkt_segs;
- pkt->pkt_len = pkt_len;
- pkt->l2_len = eth_hdr_size;
-
- if (ipv4) {
- pkt->vlan_tci = ETHER_TYPE_IPv4;
- pkt->l3_len = sizeof(struct ipv4_hdr);
- } else {
- pkt->vlan_tci = ETHER_TYPE_IPv6;
- pkt->l3_len = sizeof(struct ipv6_hdr);
- }
-
- pkts_burst[nb_pkt] = pkt;
- }
-
- return nb_pkt;
-}
diff --git a/app/test/packet_burst_generator.h b/app/test/packet_burst_generator.h
deleted file mode 100644
index edc10441..00000000
--- a/app/test/packet_burst_generator.h
+++ /dev/null
@@ -1,88 +0,0 @@
-/*-
- * BSD LICENSE
- *
- * Copyright(c) 2010-2014 Intel Corporation. All rights reserved.
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * * Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * * Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in
- * the documentation and/or other materials provided with the
- * distribution.
- * * Neither the name of Intel Corporation nor the names of its
- * contributors may be used to endorse or promote products derived
- * from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
- * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
- * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#ifndef PACKET_BURST_GENERATOR_H_
-#define PACKET_BURST_GENERATOR_H_
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-#include <rte_mbuf.h>
-#include <rte_ether.h>
-#include <rte_arp.h>
-#include <rte_ip.h>
-#include <rte_udp.h>
-
-
-#define IPV4_ADDR(a, b, c, d)(((a & 0xff) << 24) | ((b & 0xff) << 16) | \
- ((c & 0xff) << 8) | (d & 0xff))
-
-#define PACKET_BURST_GEN_PKT_LEN 60
-#define PACKET_BURST_GEN_PKT_LEN_128 128
-
-void
-initialize_eth_header(struct ether_hdr *eth_hdr, struct ether_addr *src_mac,
- struct ether_addr *dst_mac, uint16_t ether_type,
- uint8_t vlan_enabled, uint16_t van_id);
-
-void
-initialize_arp_header(struct arp_hdr *arp_hdr, struct ether_addr *src_mac,
- struct ether_addr *dst_mac, uint32_t src_ip, uint32_t dst_ip,
- uint32_t opcode);
-
-uint16_t
-initialize_udp_header(struct udp_hdr *udp_hdr, uint16_t src_port,
- uint16_t dst_port, uint16_t pkt_data_len);
-
-
-uint16_t
-initialize_ipv6_header(struct ipv6_hdr *ip_hdr, uint8_t *src_addr,
- uint8_t *dst_addr, uint16_t pkt_data_len);
-
-uint16_t
-initialize_ipv4_header(struct ipv4_hdr *ip_hdr, uint32_t src_addr,
- uint32_t dst_addr, uint16_t pkt_data_len);
-
-int
-generate_packet_burst(struct rte_mempool *mp, struct rte_mbuf **pkts_burst,
- struct ether_hdr *eth_hdr, uint8_t vlan_enabled, void *ip_hdr,
- uint8_t ipv4, struct udp_hdr *udp_hdr, int nb_pkt_per_burst,
- uint8_t pkt_len, uint8_t nb_pkt_segs);
-
-#ifdef __cplusplus
-}
-#endif
-
-
-#endif /* PACKET_BURST_GENERATOR_H_ */
diff --git a/app/test/process.h b/app/test/process.h
deleted file mode 100644
index 4f8d1211..00000000
--- a/app/test/process.h
+++ /dev/null
@@ -1,103 +0,0 @@
-/*-
- * BSD LICENSE
- *
- * Copyright(c) 2010-2014 Intel Corporation. All rights reserved.
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * * Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * * Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in
- * the documentation and/or other materials provided with the
- * distribution.
- * * Neither the name of Intel Corporation nor the names of its
- * contributors may be used to endorse or promote products derived
- * from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
- * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
- * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#ifndef _PROCESS_H_
-#define _PROCESS_H_
-
-#ifdef RTE_EXEC_ENV_BSDAPP
-#define self "curproc"
-#define exe "file"
-#else
-#define self "self"
-#define exe "exe"
-#endif
-
-/*
- * launches a second copy of the test process using the given argv parameters,
- * which should include argv[0] as the process name. To identify in the
- * subprocess the source of the call, the env_value parameter is set in the
- * environment as $RTE_TEST
- */
-static inline int
-process_dup(const char *const argv[], int numargs, const char *env_value)
-{
- int num;
-#ifdef RTE_LIBRTE_XEN_DOM0
- char *argv_cpy[numargs + 2];
-#else
- char *argv_cpy[numargs + 1];
-#endif
- int i, fd, status;
- char path[32];
-
- pid_t pid = fork();
- if (pid < 0)
- return -1;
- else if (pid == 0) {
- /* make a copy of the arguments to be passed to exec */
- for (i = 0; i < numargs; i++)
- argv_cpy[i] = strdup(argv[i]);
-#ifdef RTE_LIBRTE_XEN_DOM0
- argv_cpy[i] = strdup("--xen-dom0");
- argv_cpy[i + 1] = NULL;
- num = numargs + 1;
-#else
- argv_cpy[i] = NULL;
- num = numargs;
-#endif
-
- /* close all open file descriptors, check /proc/self/fd to only
- * call close on open fds. Exclude fds 0, 1 and 2*/
- for (fd = getdtablesize(); fd > 2; fd-- ) {
- snprintf(path, sizeof(path), "/proc/" exe "/fd/%d", fd);
- if (access(path, F_OK) == 0)
- close(fd);
- }
- printf("Running binary with argv[]:");
- for (i = 0; i < num; i++)
- printf("'%s' ", argv_cpy[i]);
- printf("\n");
-
- /* set the environment variable */
- if (setenv(RECURSIVE_ENV_VAR, env_value, 1) != 0)
- rte_panic("Cannot export environment variable\n");
- if (execv("/proc/" self "/" exe, argv_cpy) < 0)
- rte_panic("Cannot exec\n");
- }
- /* parent process does a wait */
- while (wait(&status) != pid)
- ;
- return status;
-}
-
-#endif /* _PROCESS_H_ */
diff --git a/app/test/resource.c b/app/test/resource.c
deleted file mode 100644
index 0e2b62cd..00000000
--- a/app/test/resource.c
+++ /dev/null
@@ -1,305 +0,0 @@
-/*-
- * BSD LICENSE
- *
- * Copyright(c) 2016 RehiveTech. All rights reserved.
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * * Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * * Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in
- * the documentation and/or other materials provided with the
- * distribution.
- * * Neither the name of RehiveTech nor the names of its
- * contributors may be used to endorse or promote products derived
- * from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
- * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
- * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#include <stdio.h>
-#include <string.h>
-#include <errno.h>
-#include <sys/queue.h>
-
-#include <rte_debug.h>
-
-#include "resource.h"
-
-struct resource_list resource_list = TAILQ_HEAD_INITIALIZER(resource_list);
-
-size_t resource_size(const struct resource *r)
-{
- return r->end - r->begin;
-}
-
-const struct resource *resource_find(const char *name)
-{
- struct resource *r;
-
- TAILQ_FOREACH(r, &resource_list, next) {
- RTE_VERIFY(r->name);
-
- if (!strcmp(r->name, name))
- return r;
- }
-
- return NULL;
-}
-
-int resource_fwrite(const struct resource *r, FILE *f)
-{
- const size_t goal = resource_size(r);
- size_t total = 0;
-
- while (total < goal) {
- size_t wlen = fwrite(r->begin + total, 1, goal - total, f);
- if (wlen == 0) {
- perror(__func__);
- return -1;
- }
-
- total += wlen;
- }
-
- return 0;
-}
-
-int resource_fwrite_file(const struct resource *r, const char *fname)
-{
- FILE *f;
- int ret;
-
- f = fopen(fname, "w");
- if (f == NULL) {
- perror(__func__);
- return -1;
- }
-
- ret = resource_fwrite(r, f);
- fclose(f);
- return ret;
-}
-
-#ifdef RTE_APP_TEST_RESOURCE_TAR
-#include <archive.h>
-#include <archive_entry.h>
-
-static int do_copy(struct archive *r, struct archive *w)
-{
- const void *buf;
- size_t len;
-#if ARCHIVE_VERSION_NUMBER >= 3000000
- int64_t off;
-#else
- off_t off;
-#endif
- int ret;
-
- while (1) {
- ret = archive_read_data_block(r, &buf, &len, &off);
- if (ret == ARCHIVE_RETRY)
- continue;
-
- if (ret == ARCHIVE_EOF)
- return 0;
-
- if (ret != ARCHIVE_OK)
- return ret;
-
- do {
- ret = archive_write_data_block(w, buf, len, off);
- if (ret != ARCHIVE_OK && ret != ARCHIVE_RETRY)
- return ret;
- } while (ret != ARCHIVE_OK);
- }
-}
-
-int resource_untar(const struct resource *res)
-{
- struct archive *r;
- struct archive *w;
- struct archive_entry *e;
- void *p;
- int flags = 0;
- int ret;
-
- p = malloc(resource_size(res));
- if (p == NULL)
- rte_panic("Failed to malloc %zu B\n", resource_size(res));
-
- memcpy(p, res->begin, resource_size(res));
-
- r = archive_read_new();
- if (r == NULL) {
- free(p);
- return -1;
- }
-
- archive_read_support_format_all(r);
- archive_read_support_filter_all(r);
-
- w = archive_write_disk_new();
- if (w == NULL) {
- archive_read_free(r);
- free(p);
- return -1;
- }
-
- flags |= ARCHIVE_EXTRACT_PERM;
- flags |= ARCHIVE_EXTRACT_FFLAGS;
- archive_write_disk_set_options(w, flags);
- archive_write_disk_set_standard_lookup(w);
-
- ret = archive_read_open_memory(r, p, resource_size(res));
- if (ret != ARCHIVE_OK)
- goto fail;
-
- while (1) {
- ret = archive_read_next_header(r, &e);
- if (ret == ARCHIVE_EOF)
- break;
- if (ret != ARCHIVE_OK)
- goto fail;
-
- ret = archive_write_header(w, e);
- if (ret == ARCHIVE_EOF)
- break;
- if (ret != ARCHIVE_OK)
- goto fail;
-
- if (archive_entry_size(e) == 0)
- continue;
-
- ret = do_copy(r, w);
- if (ret != ARCHIVE_OK)
- goto fail;
-
- ret = archive_write_finish_entry(w);
- if (ret != ARCHIVE_OK)
- goto fail;
- }
-
- archive_write_free(w);
- archive_read_free(r);
- free(p);
- return 0;
-
-fail:
- archive_write_free(w);
- archive_read_free(r);
- free(p);
- rte_panic("Failed: %s\n", archive_error_string(r));
- return -1;
-}
-
-int resource_rm_by_tar(const struct resource *res)
-{
- struct archive *r;
- struct archive_entry *e;
- void *p;
- int try_again = 1;
- int attempts = 0;
- int ret;
-
- p = malloc(resource_size(res));
- if (p == NULL)
- rte_panic("Failed to malloc %zu B\n", resource_size(res));
-
- memcpy(p, res->begin, resource_size(res));
-
- /*
- * If somebody creates a file somewhere inside the extracted TAR
- * hierarchy during a test the resource_rm_by_tar might loop
- * infinitely. We prevent this by adding the attempts counter there.
- * In normal case, max N iteration is done where N is the depth of
- * the file-hierarchy.
- */
- while (try_again && attempts < 10000) {
- r = archive_read_new();
- if (r == NULL) {
- free(p);
- return -1;
- }
-
- archive_read_support_format_all(r);
- archive_read_support_filter_all(r);
-
- ret = archive_read_open_memory(r, p, resource_size(res));
- if (ret != ARCHIVE_OK) {
- fprintf(stderr, "Failed: %s\n",
- archive_error_string(r));
- goto fail;
- }
-
- try_again = 0;
-
- while (1) {
- ret = archive_read_next_header(r, &e);
- if (ret == ARCHIVE_EOF)
- break;
- if (ret != ARCHIVE_OK)
- goto fail;
-
- ret = remove(archive_entry_pathname(e));
- if (ret < 0) {
- switch (errno) {
- case ENOTEMPTY:
- case EEXIST:
- try_again = 1;
- break;
-
- /* should not usually happen: */
- case ENOENT:
- case ENOTDIR:
- case EROFS:
- attempts += 1;
- continue;
- default:
- perror("Failed to remove file");
- goto fail;
- }
- }
- }
-
- archive_read_free(r);
- attempts += 1;
- }
-
- if (attempts >= 10000) {
- fprintf(stderr, "Failed to remove archive\n");
- free(p);
- return -1;
- }
-
- free(p);
- return 0;
-
-fail:
- archive_read_free(r);
- free(p);
-
- rte_panic("Failed: %s\n", archive_error_string(r));
- return -1;
-}
-
-#endif /* RTE_APP_TEST_RESOURCE_TAR */
-
-void resource_register(struct resource *r)
-{
- TAILQ_INSERT_TAIL(&resource_list, r, next);
-}
diff --git a/app/test/resource.h b/app/test/resource.h
deleted file mode 100644
index 1e961221..00000000
--- a/app/test/resource.h
+++ /dev/null
@@ -1,135 +0,0 @@
-/*-
- * BSD LICENSE
- *
- * Copyright(c) 2016 RehiveTech. All rights reserved.
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * * Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * * Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in
- * the documentation and/or other materials provided with the
- * distribution.
- * * Neither the name of RehiveTech nor the names of its
- * contributors may be used to endorse or promote products derived
- * from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
- * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
- * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#ifndef _RESOURCE_H_
-#define _RESOURCE_H_
-
-/**
- * @file
- *
- * Test Resource API
- *
- * Each test can require and use some external resources. Usually, an external
- * resource is a file or a filesystem sub-hierarchy. A resource is included
- * inside the test executable.
- */
-
-#include <sys/queue.h>
-#include <stdio.h>
-#include <stddef.h>
-
-#include <rte_eal.h>
-#include <rte_common.h>
-
-TAILQ_HEAD(resource_list, resource);
-extern struct resource_list resource_list;
-
-/**
- * Representation of a resource. It points to the resource's binary data.
- * The semantics of the binary data are defined by the target test.
- */
-struct resource {
- const char *name; /**< Unique name of the resource */
- const char *begin; /**< Start of resource data */
- const char *end; /**< End of resource data */
- TAILQ_ENTRY(resource) next;
-};
-
-/**
- * @return size of the given resource
- */
-size_t resource_size(const struct resource *r);
-
-/**
- * Find a resource by name in the global list of resources.
- */
-const struct resource *resource_find(const char *name);
-
-/**
- * Write the raw data of the resource to the given file.
- * @return 0 on success
- */
-int resource_fwrite(const struct resource *r, FILE *f);
-
-/**
- * Write the raw data of the resource to the given file given by name.
- * The name is relative to the current working directory.
- * @return 0 on success
- */
-int resource_fwrite_file(const struct resource *r, const char *fname);
-
-/**
- * Treat the given resource as a tar archive. Extract
- * the archive to the current directory.
- */
-int resource_untar(const struct resource *res);
-
-/**
- * Treat the given resource as a tar archive. Remove
- * all files (related to the current directory) listed
- * in the tar archive.
- */
-int resource_rm_by_tar(const struct resource *res);
-
-/**
- * Register a resource in the global list of resources.
- * Not intended for direct use, please check the REGISTER_RESOURCE
- * macro.
- */
-void resource_register(struct resource *r);
-
-/**
- * Definition of a resource linked externally (by means of the used toolchain).
- * Only the base name of the resource is expected. The name refers to the
- * linked pointers beg_<name> and end_<name> provided externally.
- */
-#define REGISTER_LINKED_RESOURCE(n) \
-extern const char beg_ ##n; \
-extern const char end_ ##n; \
-REGISTER_RESOURCE(n, &beg_ ##n, &end_ ##n) \
-
-/**
- * Definition of a resource described by its name, and pointers begin, end.
- */
-#define REGISTER_RESOURCE(n, b, e) \
-static struct resource linkres_ ##n = { \
- .name = RTE_STR(n), \
- .begin = b, \
- .end = e, \
-}; \
-static void __attribute__((constructor, used)) resinitfn_ ##n(void) \
-{ \
- resource_register(&linkres_ ##n); \
-}
-
-#endif
diff --git a/app/test/test.c b/app/test/test.c
deleted file mode 100644
index cd0e7845..00000000
--- a/app/test/test.c
+++ /dev/null
@@ -1,237 +0,0 @@
-/*-
- * BSD LICENSE
- *
- * Copyright(c) 2010-2014 Intel Corporation. All rights reserved.
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * * Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * * Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in
- * the documentation and/or other materials provided with the
- * distribution.
- * * Neither the name of Intel Corporation nor the names of its
- * contributors may be used to endorse or promote products derived
- * from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
- * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
- * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#include <string.h>
-#include <stdio.h>
-#include <stdint.h>
-#include <stdarg.h>
-#include <stdlib.h>
-#include <errno.h>
-#include <termios.h>
-#include <ctype.h>
-#include <sys/queue.h>
-
-#ifdef RTE_LIBRTE_CMDLINE
-#include <cmdline_rdline.h>
-#include <cmdline_parse.h>
-#include <cmdline_socket.h>
-#include <cmdline.h>
-extern cmdline_parse_ctx_t main_ctx[];
-#endif
-
-#include <rte_memory.h>
-#include <rte_memzone.h>
-#include <rte_eal.h>
-#include <rte_cycles.h>
-#include <rte_log.h>
-#include <rte_string_fns.h>
-#ifdef RTE_LIBRTE_TIMER
-#include <rte_timer.h>
-#endif
-
-#include "test.h"
-
-#define RTE_LOGTYPE_APP RTE_LOGTYPE_USER1
-
-const char *prgname; /* to be set to argv[0] */
-
-static const char *recursive_call; /* used in linuxapp for MP and other tests */
-
-static int
-no_action(void){ return 0; }
-
-static int
-do_recursive_call(void)
-{
- unsigned i;
- struct {
- const char *env_var;
- int (*action_fn)(void);
- } actions[] = {
- { "run_secondary_instances", test_mp_secondary },
- { "test_missing_c_flag", no_action },
- { "test_master_lcore_flag", no_action },
- { "test_invalid_n_flag", no_action },
- { "test_no_hpet_flag", no_action },
- { "test_whitelist_flag", no_action },
- { "test_invalid_b_flag", no_action },
- { "test_invalid_vdev_flag", no_action },
- { "test_invalid_r_flag", no_action },
-#ifdef RTE_LIBRTE_XEN_DOM0
- { "test_dom0_misc_flags", no_action },
-#else
- { "test_misc_flags", no_action },
-#endif
- { "test_memory_flags", no_action },
- { "test_file_prefix", no_action },
- { "test_no_huge_flag", no_action },
- };
-
- if (recursive_call == NULL)
- return -1;
- for (i = 0; i < sizeof(actions)/sizeof(actions[0]); i++) {
- if (strcmp(actions[i].env_var, recursive_call) == 0)
- return (actions[i].action_fn)();
- }
- printf("ERROR - missing action to take for %s\n", recursive_call);
- return -1;
-}
-
-int
-main(int argc, char **argv)
-{
-#ifdef RTE_LIBRTE_CMDLINE
- struct cmdline *cl;
-#endif
- int ret;
-
- ret = rte_eal_init(argc, argv);
- if (ret < 0)
- return -1;
-
-#ifdef RTE_LIBRTE_TIMER
- rte_timer_subsystem_init();
-#endif
-
- if (commands_init() < 0)
- return -1;
-
- argv += ret;
-
- prgname = argv[0];
-
- if ((recursive_call = getenv(RECURSIVE_ENV_VAR)) != NULL)
- return do_recursive_call();
-
-#ifdef RTE_LIBEAL_USE_HPET
- if (rte_eal_hpet_init(1) < 0)
-#endif
- RTE_LOG(INFO, APP,
- "HPET is not enabled, using TSC as default timer\n");
-
-
-#ifdef RTE_LIBRTE_CMDLINE
- cl = cmdline_stdin_new(main_ctx, "RTE>>");
- if (cl == NULL) {
- return -1;
- }
- cmdline_interact(cl);
- cmdline_stdin_exit(cl);
-#endif
-
- return 0;
-}
-
-
-int
-unit_test_suite_runner(struct unit_test_suite *suite)
-{
- int test_success;
- unsigned total = 0, executed = 0, skipped = 0, succeeded = 0, failed = 0;
-
- if (suite->suite_name) {
- printf(" + ------------------------------------------------------- +\n");
- printf(" + Test Suite : %s\n", suite->suite_name);
- }
-
- if (suite->setup)
- if (suite->setup() != 0)
- goto suite_summary;
-
- printf(" + ------------------------------------------------------- +\n");
-
- while (suite->unit_test_cases[total].testcase) {
- if (!suite->unit_test_cases[total].enabled) {
- skipped++;
- total++;
- continue;
- } else {
- executed++;
- }
-
- /* run test case setup */
- if (suite->unit_test_cases[total].setup)
- test_success = suite->unit_test_cases[total].setup();
- else
- test_success = TEST_SUCCESS;
-
- if (test_success == TEST_SUCCESS) {
- /* run the test case */
- test_success = suite->unit_test_cases[total].testcase();
- if (test_success == TEST_SUCCESS)
- succeeded++;
- else
- failed++;
- } else {
- failed++;
- }
-
- /* run the test case teardown */
- if (suite->unit_test_cases[total].teardown)
- suite->unit_test_cases[total].teardown();
-
- if (test_success == TEST_SUCCESS)
- printf(" + TestCase [%2d] : %s\n", total,
- suite->unit_test_cases[total].success_msg ?
- suite->unit_test_cases[total].success_msg :
- "passed");
- else
- printf(" + TestCase [%2d] : %s\n", total,
- suite->unit_test_cases[total].fail_msg ?
- suite->unit_test_cases[total].fail_msg :
- "failed");
-
- total++;
- }
-
- /* Run test suite teardown */
- if (suite->teardown)
- suite->teardown();
-
- goto suite_summary;
-
-suite_summary:
- printf(" + ------------------------------------------------------- +\n");
- printf(" + Test Suite Summary \n");
- printf(" + Tests Total : %2d\n", total);
- printf(" + Tests Skipped : %2d\n", skipped);
- printf(" + Tests Executed : %2d\n", executed);
- printf(" + Tests Passed : %2d\n", succeeded);
- printf(" + Tests Failed : %2d\n", failed);
- printf(" + ------------------------------------------------------- +\n");
-
- if (failed)
- return -1;
-
- return 0;
-}
diff --git a/app/test/test.h b/app/test/test.h
deleted file mode 100644
index 82831f4e..00000000
--- a/app/test/test.h
+++ /dev/null
@@ -1,267 +0,0 @@
-/*-
- * BSD LICENSE
- *
- * Copyright(c) 2010-2014 Intel Corporation. All rights reserved.
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * * Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * * Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in
- * the documentation and/or other materials provided with the
- * distribution.
- * * Neither the name of Intel Corporation nor the names of its
- * contributors may be used to endorse or promote products derived
- * from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
- * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
- * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#ifndef _TEST_H_
-#define _TEST_H_
-
-#include <stddef.h>
-#include <sys/queue.h>
-
-#include <rte_common.h>
-#include <rte_log.h>
-
-#define TEST_SUCCESS (0)
-#define TEST_FAILED (-1)
-
-/* Before including test.h file you can define
- * TEST_TRACE_FAILURE(_file, _line, _func) macro to better trace/debug test
- * failures. Mostly useful in test development phase. */
-#ifndef TEST_TRACE_FAILURE
-# define TEST_TRACE_FAILURE(_file, _line, _func)
-#endif
-
-#define TEST_ASSERT(cond, msg, ...) do { \
- if (!(cond)) { \
- printf("TestCase %s() line %d failed: " \
- msg "\n", __func__, __LINE__, ##__VA_ARGS__); \
- TEST_TRACE_FAILURE(__FILE__, __LINE__, __func__); \
- return TEST_FAILED; \
- } \
-} while (0)
-
-#define TEST_ASSERT_EQUAL(a, b, msg, ...) do { \
- if (!(a == b)) { \
- printf("TestCase %s() line %d failed: " \
- msg "\n", __func__, __LINE__, ##__VA_ARGS__); \
- TEST_TRACE_FAILURE(__FILE__, __LINE__, __func__); \
- return TEST_FAILED; \
- } \
-} while (0)
-
-/* Compare two buffers (length in bytes) */
-#define TEST_ASSERT_BUFFERS_ARE_EQUAL(a, b, len, msg, ...) do { \
- if (memcmp(a, b, len)) { \
- printf("TestCase %s() line %d failed: " \
- msg "\n", __func__, __LINE__, ##__VA_ARGS__); \
- TEST_TRACE_FAILURE(__FILE__, __LINE__, __func__); \
- return TEST_FAILED; \
- } \
-} while (0)
-
-/* Compare two buffers with offset (length and offset in bytes) */
-#define TEST_ASSERT_BUFFERS_ARE_EQUAL_OFFSET(a, b, len, off, msg, ...) do { \
- const uint8_t *_a_with_off = (const uint8_t *)a + off; \
- const uint8_t *_b_with_off = (const uint8_t *)b + off; \
- TEST_ASSERT_BUFFERS_ARE_EQUAL(_a_with_off, _b_with_off, len, msg); \
-} while (0)
-
-/* Compare two buffers (length in bits) */
-#define TEST_ASSERT_BUFFERS_ARE_EQUAL_BIT(a, b, len, msg, ...) do { \
- uint8_t _last_byte_a, _last_byte_b; \
- uint8_t _last_byte_mask, _last_byte_bits; \
- TEST_ASSERT_BUFFERS_ARE_EQUAL(a, b, (len >> 3), msg); \
- if (len % 8) { \
- _last_byte_bits = len % 8; \
- _last_byte_mask = ~((1 << (8 - _last_byte_bits)) - 1); \
- _last_byte_a = ((const uint8_t *)a)[len >> 3]; \
- _last_byte_b = ((const uint8_t *)b)[len >> 3]; \
- _last_byte_a &= _last_byte_mask; \
- _last_byte_b &= _last_byte_mask; \
- if (_last_byte_a != _last_byte_b) { \
- printf("TestCase %s() line %d failed: " \
- msg "\n", __func__, __LINE__, ##__VA_ARGS__);\
- TEST_TRACE_FAILURE(__FILE__, __LINE__, __func__); \
- return TEST_FAILED; \
- } \
- } \
-} while (0)
-
-/* Compare two buffers with offset (length and offset in bits) */
-#define TEST_ASSERT_BUFFERS_ARE_EQUAL_BIT_OFFSET(a, b, len, off, msg, ...) do { \
- uint8_t _first_byte_a, _first_byte_b; \
- uint8_t _first_byte_mask, _first_byte_bits; \
- uint32_t _len_without_first_byte = (off % 8) ? \
- len - (8 - (off % 8)) : \
- len; \
- uint32_t _off_in_bytes = (off % 8) ? (off >> 3) + 1 : (off >> 3); \
- const uint8_t *_a_with_off = (const uint8_t *)a + _off_in_bytes; \
- const uint8_t *_b_with_off = (const uint8_t *)b + _off_in_bytes; \
- TEST_ASSERT_BUFFERS_ARE_EQUAL_BIT(_a_with_off, _b_with_off, \
- _len_without_first_byte, msg); \
- if (off % 8) { \
- _first_byte_bits = 8 - (off % 8); \
- _first_byte_mask = (1 << _first_byte_bits) - 1; \
- _first_byte_a = *(_a_with_off - 1); \
- _first_byte_b = *(_b_with_off - 1); \
- _first_byte_a &= _first_byte_mask; \
- _first_byte_b &= _first_byte_mask; \
- if (_first_byte_a != _first_byte_b) { \
- printf("TestCase %s() line %d failed: " \
- msg "\n", __func__, __LINE__, ##__VA_ARGS__); \
- TEST_TRACE_FAILURE(__FILE__, __LINE__, __func__); \
- return TEST_FAILED; \
- } \
- } \
-} while (0)
-
-#define TEST_ASSERT_NOT_EQUAL(a, b, msg, ...) do { \
- if (!(a != b)) { \
- printf("TestCase %s() line %d failed: " \
- msg "\n", __func__, __LINE__, ##__VA_ARGS__); \
- TEST_TRACE_FAILURE(__FILE__, __LINE__, __func__); \
- return TEST_FAILED; \
- } \
-} while (0)
-
-#define TEST_ASSERT_SUCCESS(val, msg, ...) do { \
- typeof(val) _val = (val); \
- if (!(_val == 0)) { \
- printf("TestCase %s() line %d failed (err %d): " \
- msg "\n", __func__, __LINE__, _val, \
- ##__VA_ARGS__); \
- TEST_TRACE_FAILURE(__FILE__, __LINE__, __func__); \
- return TEST_FAILED; \
- } \
-} while (0)
-
-#define TEST_ASSERT_FAIL(val, msg, ...) do { \
- if (!(val != 0)) { \
- printf("TestCase %s() line %d failed: " \
- msg "\n", __func__, __LINE__, ##__VA_ARGS__); \
- TEST_TRACE_FAILURE(__FILE__, __LINE__, __func__); \
- return TEST_FAILED; \
- } \
-} while (0)
-
-#define TEST_ASSERT_NULL(val, msg, ...) do { \
- if (!(val == NULL)) { \
- printf("TestCase %s() line %d failed: " \
- msg "\n", __func__, __LINE__, ##__VA_ARGS__); \
- TEST_TRACE_FAILURE(__FILE__, __LINE__, __func__); \
- return TEST_FAILED; \
- } \
-} while (0)
-
-#define TEST_ASSERT_NOT_NULL(val, msg, ...) do { \
- if (!(val != NULL)) { \
- printf("TestCase %s() line %d failed: " \
- msg "\n", __func__, __LINE__, ##__VA_ARGS__); \
- TEST_TRACE_FAILURE(__FILE__, __LINE__, __func__); \
- return TEST_FAILED; \
- } \
-} while (0)
-
-struct unit_test_case {
- int (*setup)(void);
- void (*teardown)(void);
- int (*testcase)(void);
- const char *success_msg;
- const char *fail_msg;
- unsigned enabled;
-};
-
-#define TEST_CASE(fn) { NULL, NULL, fn, #fn " succeeded", #fn " failed", 1 }
-
-#define TEST_CASE_NAMED(name, fn) { NULL, NULL, fn, name " succeeded", \
- name " failed", 1 }
-
-#define TEST_CASE_ST(setup, teardown, testcase) \
- { setup, teardown, testcase, #testcase " succeeded", \
- #testcase " failed ", 1 }
-
-
-#define TEST_CASE_DISABLED(fn) { NULL, NULL, fn, #fn " succeeded", \
- #fn " failed", 0 }
-
-#define TEST_CASE_ST_DISABLED(setup, teardown, testcase) \
- { setup, teardown, testcase, #testcase " succeeded", \
- #testcase " failed ", 0 }
-
-#define TEST_CASES_END() { NULL, NULL, NULL, NULL, NULL, 0 }
-
-#if RTE_LOG_LEVEL >= RTE_LOG_DEBUG
-#define TEST_HEXDUMP(file, title, buf, len) rte_hexdump(file, title, buf, len)
-#else
-#define TEST_HEXDUMP(file, title, buf, len) do {} while (0)
-#endif
-
-struct unit_test_suite {
- const char *suite_name;
- int (*setup)(void);
- void (*teardown)(void);
- struct unit_test_case unit_test_cases[];
-};
-
-int unit_test_suite_runner(struct unit_test_suite *suite);
-
-#define RECURSIVE_ENV_VAR "RTE_TEST_RECURSIVE"
-
-#include <cmdline_parse.h>
-#include <cmdline_parse_string.h>
-
-extern const char *prgname;
-
-int commands_init(void);
-
-int test_pci(void);
-int test_pci_run;
-
-int test_mp_secondary(void);
-
-int test_set_rxtx_conf(cmdline_fixed_string_t mode);
-int test_set_rxtx_anchor(cmdline_fixed_string_t type);
-int test_set_rxtx_sc(cmdline_fixed_string_t type);
-
-typedef int (test_callback)(void);
-TAILQ_HEAD(test_commands_list, test_command);
-struct test_command {
- TAILQ_ENTRY(test_command) next;
- const char *command;
- test_callback *callback;
-};
-
-void add_test_command(struct test_command *t);
-
-/* Register a test function with its command string */
-#define REGISTER_TEST_COMMAND(cmd, func) \
- static struct test_command test_struct_##cmd = { \
- .command = RTE_STR(cmd), \
- .callback = func, \
- }; \
- static void __attribute__((constructor, used)) \
- test_register_##cmd(void) \
- { \
- add_test_command(&test_struct_##cmd); \
- }
-
-#endif
diff --git a/app/test/test_acl.c b/app/test/test_acl.c
deleted file mode 100644
index 28955f08..00000000
--- a/app/test/test_acl.c
+++ /dev/null
@@ -1,1685 +0,0 @@
-/*-
- * BSD LICENSE
- *
- * Copyright(c) 2010-2014 Intel Corporation. All rights reserved.
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * * Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * * Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in
- * the documentation and/or other materials provided with the
- * distribution.
- * * Neither the name of Intel Corporation nor the names of its
- * contributors may be used to endorse or promote products derived
- * from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
- * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
- * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#include <string.h>
-#include <errno.h>
-
-#include "test.h"
-
-#include <rte_string_fns.h>
-#include <rte_mbuf.h>
-#include <rte_byteorder.h>
-#include <rte_ip.h>
-#include <rte_acl.h>
-#include <rte_common.h>
-
-#include "test_acl.h"
-
-#define BIT_SIZEOF(x) (sizeof(x) * CHAR_BIT)
-
-#define LEN RTE_ACL_MAX_CATEGORIES
-
-RTE_ACL_RULE_DEF(acl_ipv4vlan_rule, RTE_ACL_IPV4VLAN_NUM_FIELDS);
-
-struct rte_acl_param acl_param = {
- .name = "acl_ctx",
- .socket_id = SOCKET_ID_ANY,
- .rule_size = RTE_ACL_IPV4VLAN_RULE_SZ,
- .max_rule_num = 0x30000,
-};
-
-struct rte_acl_ipv4vlan_rule acl_rule = {
- .data = { .priority = 1, .category_mask = 0xff },
- .src_port_low = 0,
- .src_port_high = UINT16_MAX,
- .dst_port_low = 0,
- .dst_port_high = UINT16_MAX,
-};
-
-const uint32_t ipv4_7tuple_layout[RTE_ACL_IPV4VLAN_NUM] = {
- offsetof(struct ipv4_7tuple, proto),
- offsetof(struct ipv4_7tuple, vlan),
- offsetof(struct ipv4_7tuple, ip_src),
- offsetof(struct ipv4_7tuple, ip_dst),
- offsetof(struct ipv4_7tuple, port_src),
-};
-
-
-/* byteswap to cpu or network order */
-static void
-bswap_test_data(struct ipv4_7tuple *data, int len, int to_be)
-{
- int i;
-
- for (i = 0; i < len; i++) {
-
- if (to_be) {
- /* swap all bytes so that they are in network order */
- data[i].ip_dst = rte_cpu_to_be_32(data[i].ip_dst);
- data[i].ip_src = rte_cpu_to_be_32(data[i].ip_src);
- data[i].port_dst = rte_cpu_to_be_16(data[i].port_dst);
- data[i].port_src = rte_cpu_to_be_16(data[i].port_src);
- data[i].vlan = rte_cpu_to_be_16(data[i].vlan);
- data[i].domain = rte_cpu_to_be_16(data[i].domain);
- } else {
- data[i].ip_dst = rte_be_to_cpu_32(data[i].ip_dst);
- data[i].ip_src = rte_be_to_cpu_32(data[i].ip_src);
- data[i].port_dst = rte_be_to_cpu_16(data[i].port_dst);
- data[i].port_src = rte_be_to_cpu_16(data[i].port_src);
- data[i].vlan = rte_be_to_cpu_16(data[i].vlan);
- data[i].domain = rte_be_to_cpu_16(data[i].domain);
- }
- }
-}
-
-static int
-acl_ipv4vlan_check_rule(const struct rte_acl_ipv4vlan_rule *rule)
-{
- if (rule->src_port_low > rule->src_port_high ||
- rule->dst_port_low > rule->dst_port_high ||
- rule->src_mask_len > BIT_SIZEOF(rule->src_addr) ||
- rule->dst_mask_len > BIT_SIZEOF(rule->dst_addr))
- return -EINVAL;
- return 0;
-}
-
-static void
-acl_ipv4vlan_convert_rule(const struct rte_acl_ipv4vlan_rule *ri,
- struct acl_ipv4vlan_rule *ro)
-{
- ro->data = ri->data;
-
- ro->field[RTE_ACL_IPV4VLAN_PROTO_FIELD].value.u8 = ri->proto;
- ro->field[RTE_ACL_IPV4VLAN_VLAN1_FIELD].value.u16 = ri->vlan;
- ro->field[RTE_ACL_IPV4VLAN_VLAN2_FIELD].value.u16 = ri->domain;
- ro->field[RTE_ACL_IPV4VLAN_SRC_FIELD].value.u32 = ri->src_addr;
- ro->field[RTE_ACL_IPV4VLAN_DST_FIELD].value.u32 = ri->dst_addr;
- ro->field[RTE_ACL_IPV4VLAN_SRCP_FIELD].value.u16 = ri->src_port_low;
- ro->field[RTE_ACL_IPV4VLAN_DSTP_FIELD].value.u16 = ri->dst_port_low;
-
- ro->field[RTE_ACL_IPV4VLAN_PROTO_FIELD].mask_range.u8 = ri->proto_mask;
- ro->field[RTE_ACL_IPV4VLAN_VLAN1_FIELD].mask_range.u16 = ri->vlan_mask;
- ro->field[RTE_ACL_IPV4VLAN_VLAN2_FIELD].mask_range.u16 =
- ri->domain_mask;
- ro->field[RTE_ACL_IPV4VLAN_SRC_FIELD].mask_range.u32 =
- ri->src_mask_len;
- ro->field[RTE_ACL_IPV4VLAN_DST_FIELD].mask_range.u32 = ri->dst_mask_len;
- ro->field[RTE_ACL_IPV4VLAN_SRCP_FIELD].mask_range.u16 =
- ri->src_port_high;
- ro->field[RTE_ACL_IPV4VLAN_DSTP_FIELD].mask_range.u16 =
- ri->dst_port_high;
-}
-
-/*
- * Add ipv4vlan rules to an existing ACL context.
- * This function is not multi-thread safe.
- *
- * @param ctx
- * ACL context to add patterns to.
- * @param rules
- * Array of rules to add to the ACL context.
- * Note that all fields in rte_acl_ipv4vlan_rule structures are expected
- * to be in host byte order.
- * @param num
- * Number of elements in the input array of rules.
- * @return
- * - -ENOMEM if there is no space in the ACL context for these rules.
- * - -EINVAL if the parameters are invalid.
- * - Zero if operation completed successfully.
- */
-static int
-rte_acl_ipv4vlan_add_rules(struct rte_acl_ctx *ctx,
- const struct rte_acl_ipv4vlan_rule *rules,
- uint32_t num)
-{
- int32_t rc;
- uint32_t i;
- struct acl_ipv4vlan_rule rv;
-
- if (ctx == NULL || rules == NULL)
- return -EINVAL;
-
- /* check input rules. */
- for (i = 0; i != num; i++) {
- rc = acl_ipv4vlan_check_rule(rules + i);
- if (rc != 0) {
- RTE_LOG(ERR, ACL, "%s: rule #%u is invalid\n",
- __func__, i + 1);
- return rc;
- }
- }
-
- /* perform conversion to the internal format and add to the context. */
- for (i = 0, rc = 0; i != num && rc == 0; i++) {
- acl_ipv4vlan_convert_rule(rules + i, &rv);
- rc = rte_acl_add_rules(ctx, (struct rte_acl_rule *)&rv, 1);
- }
-
- return rc;
-}
-
-static void
-acl_ipv4vlan_config(struct rte_acl_config *cfg,
- const uint32_t layout[RTE_ACL_IPV4VLAN_NUM],
- uint32_t num_categories)
-{
- static const struct rte_acl_field_def
- ipv4_defs[RTE_ACL_IPV4VLAN_NUM_FIELDS] = {
- {
- .type = RTE_ACL_FIELD_TYPE_BITMASK,
- .size = sizeof(uint8_t),
- .field_index = RTE_ACL_IPV4VLAN_PROTO_FIELD,
- .input_index = RTE_ACL_IPV4VLAN_PROTO,
- },
- {
- .type = RTE_ACL_FIELD_TYPE_BITMASK,
- .size = sizeof(uint16_t),
- .field_index = RTE_ACL_IPV4VLAN_VLAN1_FIELD,
- .input_index = RTE_ACL_IPV4VLAN_VLAN,
- },
- {
- .type = RTE_ACL_FIELD_TYPE_BITMASK,
- .size = sizeof(uint16_t),
- .field_index = RTE_ACL_IPV4VLAN_VLAN2_FIELD,
- .input_index = RTE_ACL_IPV4VLAN_VLAN,
- },
- {
- .type = RTE_ACL_FIELD_TYPE_MASK,
- .size = sizeof(uint32_t),
- .field_index = RTE_ACL_IPV4VLAN_SRC_FIELD,
- .input_index = RTE_ACL_IPV4VLAN_SRC,
- },
- {
- .type = RTE_ACL_FIELD_TYPE_MASK,
- .size = sizeof(uint32_t),
- .field_index = RTE_ACL_IPV4VLAN_DST_FIELD,
- .input_index = RTE_ACL_IPV4VLAN_DST,
- },
- {
- .type = RTE_ACL_FIELD_TYPE_RANGE,
- .size = sizeof(uint16_t),
- .field_index = RTE_ACL_IPV4VLAN_SRCP_FIELD,
- .input_index = RTE_ACL_IPV4VLAN_PORTS,
- },
- {
- .type = RTE_ACL_FIELD_TYPE_RANGE,
- .size = sizeof(uint16_t),
- .field_index = RTE_ACL_IPV4VLAN_DSTP_FIELD,
- .input_index = RTE_ACL_IPV4VLAN_PORTS,
- },
- };
-
- memcpy(&cfg->defs, ipv4_defs, sizeof(ipv4_defs));
- cfg->num_fields = RTE_DIM(ipv4_defs);
-
- cfg->defs[RTE_ACL_IPV4VLAN_PROTO_FIELD].offset =
- layout[RTE_ACL_IPV4VLAN_PROTO];
- cfg->defs[RTE_ACL_IPV4VLAN_VLAN1_FIELD].offset =
- layout[RTE_ACL_IPV4VLAN_VLAN];
- cfg->defs[RTE_ACL_IPV4VLAN_VLAN2_FIELD].offset =
- layout[RTE_ACL_IPV4VLAN_VLAN] +
- cfg->defs[RTE_ACL_IPV4VLAN_VLAN1_FIELD].size;
- cfg->defs[RTE_ACL_IPV4VLAN_SRC_FIELD].offset =
- layout[RTE_ACL_IPV4VLAN_SRC];
- cfg->defs[RTE_ACL_IPV4VLAN_DST_FIELD].offset =
- layout[RTE_ACL_IPV4VLAN_DST];
- cfg->defs[RTE_ACL_IPV4VLAN_SRCP_FIELD].offset =
- layout[RTE_ACL_IPV4VLAN_PORTS];
- cfg->defs[RTE_ACL_IPV4VLAN_DSTP_FIELD].offset =
- layout[RTE_ACL_IPV4VLAN_PORTS] +
- cfg->defs[RTE_ACL_IPV4VLAN_SRCP_FIELD].size;
-
- cfg->num_categories = num_categories;
-}
-
-/*
- * Analyze set of ipv4vlan rules and build required internal
- * run-time structures.
- * This function is not multi-thread safe.
- *
- * @param ctx
- * ACL context to build.
- * @param layout
- * Layout of input data to search through.
- * @param num_categories
- * Maximum number of categories to use in that build.
- * @return
- * - -ENOMEM if couldn't allocate enough memory.
- * - -EINVAL if the parameters are invalid.
- * - Negative error code if operation failed.
- * - Zero if operation completed successfully.
- */
-static int
-rte_acl_ipv4vlan_build(struct rte_acl_ctx *ctx,
- const uint32_t layout[RTE_ACL_IPV4VLAN_NUM],
- uint32_t num_categories)
-{
- struct rte_acl_config cfg;
-
- if (ctx == NULL || layout == NULL)
- return -EINVAL;
-
- memset(&cfg, 0, sizeof(cfg));
- acl_ipv4vlan_config(&cfg, layout, num_categories);
- return rte_acl_build(ctx, &cfg);
-}
-
-/*
- * Test scalar and SSE ACL lookup.
- */
-static int
-test_classify_run(struct rte_acl_ctx *acx)
-{
- int ret, i;
- uint32_t result, count;
- uint32_t results[RTE_DIM(acl_test_data) * RTE_ACL_MAX_CATEGORIES];
- const uint8_t *data[RTE_DIM(acl_test_data)];
-
- /* swap all bytes in the data to network order */
- bswap_test_data(acl_test_data, RTE_DIM(acl_test_data), 1);
-
- /* store pointers to test data */
- for (i = 0; i < (int) RTE_DIM(acl_test_data); i++)
- data[i] = (uint8_t *)&acl_test_data[i];
-
- /**
- * these will run quite a few times, it's necessary to test code paths
- * from num=0 to num>8
- */
- for (count = 0; count <= RTE_DIM(acl_test_data); count++) {
- ret = rte_acl_classify(acx, data, results,
- count, RTE_ACL_MAX_CATEGORIES);
- if (ret != 0) {
- printf("Line %i: SSE classify failed!\n", __LINE__);
- goto err;
- }
-
- /* check if we allow everything we should allow */
- for (i = 0; i < (int) count; i++) {
- result =
- results[i * RTE_ACL_MAX_CATEGORIES + ACL_ALLOW];
- if (result != acl_test_data[i].allow) {
- printf("Line %i: Error in allow results at %i "
- "(expected %"PRIu32" got %"PRIu32")!\n",
- __LINE__, i, acl_test_data[i].allow,
- result);
- ret = -EINVAL;
- goto err;
- }
- }
-
- /* check if we deny everything we should deny */
- for (i = 0; i < (int) count; i++) {
- result = results[i * RTE_ACL_MAX_CATEGORIES + ACL_DENY];
- if (result != acl_test_data[i].deny) {
- printf("Line %i: Error in deny results at %i "
- "(expected %"PRIu32" got %"PRIu32")!\n",
- __LINE__, i, acl_test_data[i].deny,
- result);
- ret = -EINVAL;
- goto err;
- }
- }
- }
-
- /* make a quick check for scalar */
- ret = rte_acl_classify_alg(acx, data, results,
- RTE_DIM(acl_test_data), RTE_ACL_MAX_CATEGORIES,
- RTE_ACL_CLASSIFY_SCALAR);
- if (ret != 0) {
- printf("Line %i: scalar classify failed!\n", __LINE__);
- goto err;
- }
-
- /* check if we allow everything we should allow */
- for (i = 0; i < (int) RTE_DIM(acl_test_data); i++) {
- result = results[i * RTE_ACL_MAX_CATEGORIES + ACL_ALLOW];
- if (result != acl_test_data[i].allow) {
- printf("Line %i: Error in allow results at %i "
- "(expected %"PRIu32" got %"PRIu32")!\n",
- __LINE__, i, acl_test_data[i].allow,
- result);
- ret = -EINVAL;
- goto err;
- }
- }
-
- /* check if we deny everything we should deny */
- for (i = 0; i < (int) RTE_DIM(acl_test_data); i++) {
- result = results[i * RTE_ACL_MAX_CATEGORIES + ACL_DENY];
- if (result != acl_test_data[i].deny) {
- printf("Line %i: Error in deny results at %i "
- "(expected %"PRIu32" got %"PRIu32")!\n",
- __LINE__, i, acl_test_data[i].deny,
- result);
- ret = -EINVAL;
- goto err;
- }
- }
-
- ret = 0;
-
-err:
- /* swap data back to cpu order so that next time tests don't fail */
- bswap_test_data(acl_test_data, RTE_DIM(acl_test_data), 0);
- return ret;
-}
-
-static int
-test_classify_buid(struct rte_acl_ctx *acx,
- const struct rte_acl_ipv4vlan_rule *rules, uint32_t num)
-{
- int ret;
-
- /* add rules to the context */
- ret = rte_acl_ipv4vlan_add_rules(acx, rules, num);
- if (ret != 0) {
- printf("Line %i: Adding rules to ACL context failed!\n",
- __LINE__);
- return ret;
- }
-
- /* try building the context */
- ret = rte_acl_ipv4vlan_build(acx, ipv4_7tuple_layout,
- RTE_ACL_MAX_CATEGORIES);
- if (ret != 0) {
- printf("Line %i: Building ACL context failed!\n", __LINE__);
- return ret;
- }
-
- return 0;
-}
-
-#define TEST_CLASSIFY_ITER 4
-
-/*
- * Test scalar and SSE ACL lookup.
- */
-static int
-test_classify(void)
-{
- struct rte_acl_ctx *acx;
- int i, ret;
-
- acx = rte_acl_create(&acl_param);
- if (acx == NULL) {
- printf("Line %i: Error creating ACL context!\n", __LINE__);
- return -1;
- }
-
- ret = 0;
- for (i = 0; i != TEST_CLASSIFY_ITER; i++) {
-
- if ((i & 1) == 0)
- rte_acl_reset(acx);
- else
- rte_acl_reset_rules(acx);
-
- ret = test_classify_buid(acx, acl_test_rules,
- RTE_DIM(acl_test_rules));
- if (ret != 0) {
- printf("Line %i, iter: %d: "
- "Adding rules to ACL context failed!\n",
- __LINE__, i);
- break;
- }
-
- ret = test_classify_run(acx);
- if (ret != 0) {
- printf("Line %i, iter: %d: %s failed!\n",
- __LINE__, i, __func__);
- break;
- }
-
- /* reset rules and make sure that classify still works ok. */
- rte_acl_reset_rules(acx);
- ret = test_classify_run(acx);
- if (ret != 0) {
- printf("Line %i, iter: %d: %s failed!\n",
- __LINE__, i, __func__);
- break;
- }
- }
-
- rte_acl_free(acx);
- return ret;
-}
-
-static int
-test_build_ports_range(void)
-{
- static const struct rte_acl_ipv4vlan_rule test_rules[] = {
- {
- /* match all packets. */
- .data = {
- .userdata = 1,
- .category_mask = ACL_ALLOW_MASK,
- .priority = 101,
- },
- .src_port_low = 0,
- .src_port_high = UINT16_MAX,
- .dst_port_low = 0,
- .dst_port_high = UINT16_MAX,
- },
- {
- /* match all packets with dst ports [54-65280]. */
- .data = {
- .userdata = 2,
- .category_mask = ACL_ALLOW_MASK,
- .priority = 102,
- },
- .src_port_low = 0,
- .src_port_high = UINT16_MAX,
- .dst_port_low = 54,
- .dst_port_high = 65280,
- },
- {
- /* match all packets with dst ports [0-52]. */
- .data = {
- .userdata = 3,
- .category_mask = ACL_ALLOW_MASK,
- .priority = 103,
- },
- .src_port_low = 0,
- .src_port_high = UINT16_MAX,
- .dst_port_low = 0,
- .dst_port_high = 52,
- },
- {
- /* match all packets with dst ports [53]. */
- .data = {
- .userdata = 4,
- .category_mask = ACL_ALLOW_MASK,
- .priority = 99,
- },
- .src_port_low = 0,
- .src_port_high = UINT16_MAX,
- .dst_port_low = 53,
- .dst_port_high = 53,
- },
- {
- /* match all packets with dst ports [65279-65535]. */
- .data = {
- .userdata = 5,
- .category_mask = ACL_ALLOW_MASK,
- .priority = 98,
- },
- .src_port_low = 0,
- .src_port_high = UINT16_MAX,
- .dst_port_low = 65279,
- .dst_port_high = UINT16_MAX,
- },
- };
-
- static struct ipv4_7tuple test_data[] = {
- {
- .proto = 6,
- .ip_src = IPv4(10, 1, 1, 1),
- .ip_dst = IPv4(192, 168, 0, 33),
- .port_dst = 53,
- .allow = 1,
- },
- {
- .proto = 6,
- .ip_src = IPv4(127, 84, 33, 1),
- .ip_dst = IPv4(1, 2, 3, 4),
- .port_dst = 65281,
- .allow = 1,
- },
- };
-
- struct rte_acl_ctx *acx;
- int32_t ret, i, j;
- uint32_t results[RTE_DIM(test_data)];
- const uint8_t *data[RTE_DIM(test_data)];
-
- acx = rte_acl_create(&acl_param);
- if (acx == NULL) {
- printf("Line %i: Error creating ACL context!\n", __LINE__);
- return -1;
- }
-
- /* swap all bytes in the data to network order */
- bswap_test_data(test_data, RTE_DIM(test_data), 1);
-
- /* store pointers to test data */
- for (i = 0; i != RTE_DIM(test_data); i++)
- data[i] = (uint8_t *)&test_data[i];
-
- for (i = 0; i != RTE_DIM(test_rules); i++) {
- rte_acl_reset(acx);
- ret = test_classify_buid(acx, test_rules, i + 1);
- if (ret != 0) {
- printf("Line %i, iter: %d: "
- "Adding rules to ACL context failed!\n",
- __LINE__, i);
- break;
- }
- ret = rte_acl_classify(acx, data, results,
- RTE_DIM(data), 1);
- if (ret != 0) {
- printf("Line %i, iter: %d: classify failed!\n",
- __LINE__, i);
- break;
- }
-
- /* check results */
- for (j = 0; j != RTE_DIM(results); j++) {
- if (results[j] != test_data[j].allow) {
- printf("Line %i: Error in allow results at %i "
- "(expected %"PRIu32" got %"PRIu32")!\n",
- __LINE__, j, test_data[j].allow,
- results[j]);
- ret = -EINVAL;
- }
- }
- }
-
- bswap_test_data(test_data, RTE_DIM(test_data), 0);
-
- rte_acl_free(acx);
- return ret;
-}
-
-static void
-convert_rule(const struct rte_acl_ipv4vlan_rule *ri,
- struct acl_ipv4vlan_rule *ro)
-{
- ro->data = ri->data;
-
- ro->field[RTE_ACL_IPV4VLAN_PROTO_FIELD].value.u8 = ri->proto;
- ro->field[RTE_ACL_IPV4VLAN_VLAN1_FIELD].value.u16 = ri->vlan;
- ro->field[RTE_ACL_IPV4VLAN_VLAN2_FIELD].value.u16 = ri->domain;
- ro->field[RTE_ACL_IPV4VLAN_SRC_FIELD].value.u32 = ri->src_addr;
- ro->field[RTE_ACL_IPV4VLAN_DST_FIELD].value.u32 = ri->dst_addr;
- ro->field[RTE_ACL_IPV4VLAN_SRCP_FIELD].value.u16 = ri->src_port_low;
- ro->field[RTE_ACL_IPV4VLAN_DSTP_FIELD].value.u16 = ri->dst_port_low;
-
- ro->field[RTE_ACL_IPV4VLAN_PROTO_FIELD].mask_range.u8 = ri->proto_mask;
- ro->field[RTE_ACL_IPV4VLAN_VLAN1_FIELD].mask_range.u16 = ri->vlan_mask;
- ro->field[RTE_ACL_IPV4VLAN_VLAN2_FIELD].mask_range.u16 =
- ri->domain_mask;
- ro->field[RTE_ACL_IPV4VLAN_SRC_FIELD].mask_range.u32 =
- ri->src_mask_len;
- ro->field[RTE_ACL_IPV4VLAN_DST_FIELD].mask_range.u32 = ri->dst_mask_len;
- ro->field[RTE_ACL_IPV4VLAN_SRCP_FIELD].mask_range.u16 =
- ri->src_port_high;
- ro->field[RTE_ACL_IPV4VLAN_DSTP_FIELD].mask_range.u16 =
- ri->dst_port_high;
-}
-
-/*
- * Convert IPV4 source and destination from RTE_ACL_FIELD_TYPE_MASK to
- * RTE_ACL_FIELD_TYPE_BITMASK.
- */
-static void
-convert_rule_1(const struct rte_acl_ipv4vlan_rule *ri,
- struct acl_ipv4vlan_rule *ro)
-{
- uint32_t v;
-
- convert_rule(ri, ro);
- v = ro->field[RTE_ACL_IPV4VLAN_SRC_FIELD].mask_range.u32;
- ro->field[RTE_ACL_IPV4VLAN_SRC_FIELD].mask_range.u32 =
- RTE_ACL_MASKLEN_TO_BITMASK(v, sizeof(v));
- v = ro->field[RTE_ACL_IPV4VLAN_DST_FIELD].mask_range.u32;
- ro->field[RTE_ACL_IPV4VLAN_DST_FIELD].mask_range.u32 =
- RTE_ACL_MASKLEN_TO_BITMASK(v, sizeof(v));
-}
-
-/*
- * Convert IPV4 source and destination from RTE_ACL_FIELD_TYPE_MASK to
- * RTE_ACL_FIELD_TYPE_RANGE.
- */
-static void
-convert_rule_2(const struct rte_acl_ipv4vlan_rule *ri,
- struct acl_ipv4vlan_rule *ro)
-{
- uint32_t hi, lo, mask;
-
- convert_rule(ri, ro);
-
- mask = ro->field[RTE_ACL_IPV4VLAN_SRC_FIELD].mask_range.u32;
- mask = RTE_ACL_MASKLEN_TO_BITMASK(mask, sizeof(mask));
- lo = ro->field[RTE_ACL_IPV4VLAN_SRC_FIELD].value.u32 & mask;
- hi = lo + ~mask;
- ro->field[RTE_ACL_IPV4VLAN_SRC_FIELD].value.u32 = lo;
- ro->field[RTE_ACL_IPV4VLAN_SRC_FIELD].mask_range.u32 = hi;
-
- mask = ro->field[RTE_ACL_IPV4VLAN_DST_FIELD].mask_range.u32;
- mask = RTE_ACL_MASKLEN_TO_BITMASK(mask, sizeof(mask));
- lo = ro->field[RTE_ACL_IPV4VLAN_DST_FIELD].value.u32 & mask;
- hi = lo + ~mask;
- ro->field[RTE_ACL_IPV4VLAN_DST_FIELD].value.u32 = lo;
- ro->field[RTE_ACL_IPV4VLAN_DST_FIELD].mask_range.u32 = hi;
-}
-
-/*
- * Convert rte_acl_ipv4vlan_rule: swap VLAN and PORTS rule fields.
- */
-static void
-convert_rule_3(const struct rte_acl_ipv4vlan_rule *ri,
- struct acl_ipv4vlan_rule *ro)
-{
- struct rte_acl_field t1, t2;
-
- convert_rule(ri, ro);
-
- t1 = ro->field[RTE_ACL_IPV4VLAN_VLAN1_FIELD];
- t2 = ro->field[RTE_ACL_IPV4VLAN_VLAN2_FIELD];
-
- ro->field[RTE_ACL_IPV4VLAN_VLAN1_FIELD] =
- ro->field[RTE_ACL_IPV4VLAN_SRCP_FIELD];
- ro->field[RTE_ACL_IPV4VLAN_VLAN2_FIELD] =
- ro->field[RTE_ACL_IPV4VLAN_DSTP_FIELD];
-
- ro->field[RTE_ACL_IPV4VLAN_SRCP_FIELD] = t1;
- ro->field[RTE_ACL_IPV4VLAN_DSTP_FIELD] = t2;
-}
-
-/*
- * Convert rte_acl_ipv4vlan_rule: swap SRC and DST IPv4 address rules.
- */
-static void
-convert_rule_4(const struct rte_acl_ipv4vlan_rule *ri,
- struct acl_ipv4vlan_rule *ro)
-{
- struct rte_acl_field t;
-
- convert_rule(ri, ro);
-
- t = ro->field[RTE_ACL_IPV4VLAN_SRC_FIELD];
- ro->field[RTE_ACL_IPV4VLAN_SRC_FIELD] =
- ro->field[RTE_ACL_IPV4VLAN_DST_FIELD];
-
- ro->field[RTE_ACL_IPV4VLAN_DST_FIELD] = t;
-}
-
-static void
-ipv4vlan_config(struct rte_acl_config *cfg,
- const uint32_t layout[RTE_ACL_IPV4VLAN_NUM],
- uint32_t num_categories)
-{
- static const struct rte_acl_field_def
- ipv4_defs[RTE_ACL_IPV4VLAN_NUM_FIELDS] = {
- {
- .type = RTE_ACL_FIELD_TYPE_BITMASK,
- .size = sizeof(uint8_t),
- .field_index = RTE_ACL_IPV4VLAN_PROTO_FIELD,
- .input_index = RTE_ACL_IPV4VLAN_PROTO,
- },
- {
- .type = RTE_ACL_FIELD_TYPE_BITMASK,
- .size = sizeof(uint16_t),
- .field_index = RTE_ACL_IPV4VLAN_VLAN1_FIELD,
- .input_index = RTE_ACL_IPV4VLAN_VLAN,
- },
- {
- .type = RTE_ACL_FIELD_TYPE_BITMASK,
- .size = sizeof(uint16_t),
- .field_index = RTE_ACL_IPV4VLAN_VLAN2_FIELD,
- .input_index = RTE_ACL_IPV4VLAN_VLAN,
- },
- {
- .type = RTE_ACL_FIELD_TYPE_MASK,
- .size = sizeof(uint32_t),
- .field_index = RTE_ACL_IPV4VLAN_SRC_FIELD,
- .input_index = RTE_ACL_IPV4VLAN_SRC,
- },
- {
- .type = RTE_ACL_FIELD_TYPE_MASK,
- .size = sizeof(uint32_t),
- .field_index = RTE_ACL_IPV4VLAN_DST_FIELD,
- .input_index = RTE_ACL_IPV4VLAN_DST,
- },
- {
- .type = RTE_ACL_FIELD_TYPE_RANGE,
- .size = sizeof(uint16_t),
- .field_index = RTE_ACL_IPV4VLAN_SRCP_FIELD,
- .input_index = RTE_ACL_IPV4VLAN_PORTS,
- },
- {
- .type = RTE_ACL_FIELD_TYPE_RANGE,
- .size = sizeof(uint16_t),
- .field_index = RTE_ACL_IPV4VLAN_DSTP_FIELD,
- .input_index = RTE_ACL_IPV4VLAN_PORTS,
- },
- };
-
- memcpy(&cfg->defs, ipv4_defs, sizeof(ipv4_defs));
- cfg->num_fields = RTE_DIM(ipv4_defs);
-
- cfg->defs[RTE_ACL_IPV4VLAN_PROTO_FIELD].offset =
- layout[RTE_ACL_IPV4VLAN_PROTO];
- cfg->defs[RTE_ACL_IPV4VLAN_VLAN1_FIELD].offset =
- layout[RTE_ACL_IPV4VLAN_VLAN];
- cfg->defs[RTE_ACL_IPV4VLAN_VLAN2_FIELD].offset =
- layout[RTE_ACL_IPV4VLAN_VLAN] +
- cfg->defs[RTE_ACL_IPV4VLAN_VLAN1_FIELD].size;
- cfg->defs[RTE_ACL_IPV4VLAN_SRC_FIELD].offset =
- layout[RTE_ACL_IPV4VLAN_SRC];
- cfg->defs[RTE_ACL_IPV4VLAN_DST_FIELD].offset =
- layout[RTE_ACL_IPV4VLAN_DST];
- cfg->defs[RTE_ACL_IPV4VLAN_SRCP_FIELD].offset =
- layout[RTE_ACL_IPV4VLAN_PORTS];
- cfg->defs[RTE_ACL_IPV4VLAN_DSTP_FIELD].offset =
- layout[RTE_ACL_IPV4VLAN_PORTS] +
- cfg->defs[RTE_ACL_IPV4VLAN_SRCP_FIELD].size;
-
- cfg->num_categories = num_categories;
-}
-
-static int
-convert_rules(struct rte_acl_ctx *acx,
- void (*convert)(const struct rte_acl_ipv4vlan_rule *,
- struct acl_ipv4vlan_rule *),
- const struct rte_acl_ipv4vlan_rule *rules, uint32_t num)
-{
- int32_t rc;
- uint32_t i;
- struct acl_ipv4vlan_rule r;
-
- for (i = 0; i != num; i++) {
- convert(rules + i, &r);
- rc = rte_acl_add_rules(acx, (struct rte_acl_rule *)&r, 1);
- if (rc != 0) {
- printf("Line %i: Adding rule %u to ACL context "
- "failed with error code: %d\n",
- __LINE__, i, rc);
- return rc;
- }
- }
-
- return 0;
-}
-
-static void
-convert_config(struct rte_acl_config *cfg)
-{
- ipv4vlan_config(cfg, ipv4_7tuple_layout, RTE_ACL_MAX_CATEGORIES);
-}
-
-/*
- * Convert rte_acl_ipv4vlan_rule to use RTE_ACL_FIELD_TYPE_BITMASK.
- */
-static void
-convert_config_1(struct rte_acl_config *cfg)
-{
- ipv4vlan_config(cfg, ipv4_7tuple_layout, RTE_ACL_MAX_CATEGORIES);
- cfg->defs[RTE_ACL_IPV4VLAN_SRC_FIELD].type = RTE_ACL_FIELD_TYPE_BITMASK;
- cfg->defs[RTE_ACL_IPV4VLAN_DST_FIELD].type = RTE_ACL_FIELD_TYPE_BITMASK;
-}
-
-/*
- * Convert rte_acl_ipv4vlan_rule to use RTE_ACL_FIELD_TYPE_RANGE.
- */
-static void
-convert_config_2(struct rte_acl_config *cfg)
-{
- ipv4vlan_config(cfg, ipv4_7tuple_layout, RTE_ACL_MAX_CATEGORIES);
- cfg->defs[RTE_ACL_IPV4VLAN_SRC_FIELD].type = RTE_ACL_FIELD_TYPE_RANGE;
- cfg->defs[RTE_ACL_IPV4VLAN_DST_FIELD].type = RTE_ACL_FIELD_TYPE_RANGE;
-}
-
-/*
- * Convert rte_acl_ipv4vlan_rule: swap VLAN and PORTS rule definitions.
- */
-static void
-convert_config_3(struct rte_acl_config *cfg)
-{
- struct rte_acl_field_def t1, t2;
-
- ipv4vlan_config(cfg, ipv4_7tuple_layout, RTE_ACL_MAX_CATEGORIES);
-
- t1 = cfg->defs[RTE_ACL_IPV4VLAN_VLAN1_FIELD];
- t2 = cfg->defs[RTE_ACL_IPV4VLAN_VLAN2_FIELD];
-
- /* swap VLAN1 and SRCP rule definition. */
- cfg->defs[RTE_ACL_IPV4VLAN_VLAN1_FIELD] =
- cfg->defs[RTE_ACL_IPV4VLAN_SRCP_FIELD];
- cfg->defs[RTE_ACL_IPV4VLAN_VLAN1_FIELD].field_index = t1.field_index;
- cfg->defs[RTE_ACL_IPV4VLAN_VLAN1_FIELD].input_index = t1.input_index;
-
- /* swap VLAN2 and DSTP rule definition. */
- cfg->defs[RTE_ACL_IPV4VLAN_VLAN2_FIELD] =
- cfg->defs[RTE_ACL_IPV4VLAN_DSTP_FIELD];
- cfg->defs[RTE_ACL_IPV4VLAN_VLAN2_FIELD].field_index = t2.field_index;
- cfg->defs[RTE_ACL_IPV4VLAN_VLAN2_FIELD].input_index = t2.input_index;
-
- cfg->defs[RTE_ACL_IPV4VLAN_SRCP_FIELD].type = t1.type;
- cfg->defs[RTE_ACL_IPV4VLAN_SRCP_FIELD].size = t1.size;
- cfg->defs[RTE_ACL_IPV4VLAN_SRCP_FIELD].offset = t1.offset;
-
- cfg->defs[RTE_ACL_IPV4VLAN_DSTP_FIELD].type = t2.type;
- cfg->defs[RTE_ACL_IPV4VLAN_DSTP_FIELD].size = t2.size;
- cfg->defs[RTE_ACL_IPV4VLAN_DSTP_FIELD].offset = t2.offset;
-}
-
-/*
- * Convert rte_acl_ipv4vlan_rule: swap SRC and DST ip address rule definitions.
- */
-static void
-convert_config_4(struct rte_acl_config *cfg)
-{
- struct rte_acl_field_def t;
-
- ipv4vlan_config(cfg, ipv4_7tuple_layout, RTE_ACL_MAX_CATEGORIES);
-
- t = cfg->defs[RTE_ACL_IPV4VLAN_SRC_FIELD];
-
- cfg->defs[RTE_ACL_IPV4VLAN_SRC_FIELD] =
- cfg->defs[RTE_ACL_IPV4VLAN_DST_FIELD];
- cfg->defs[RTE_ACL_IPV4VLAN_SRC_FIELD].field_index = t.field_index;
- cfg->defs[RTE_ACL_IPV4VLAN_SRC_FIELD].input_index = t.input_index;
-
- cfg->defs[RTE_ACL_IPV4VLAN_DST_FIELD].type = t.type;
- cfg->defs[RTE_ACL_IPV4VLAN_DST_FIELD].size = t.size;
- cfg->defs[RTE_ACL_IPV4VLAN_DST_FIELD].offset = t.offset;
-}
-
-
-static int
-build_convert_rules(struct rte_acl_ctx *acx,
- void (*config)(struct rte_acl_config *),
- size_t max_size)
-{
- struct rte_acl_config cfg;
-
- memset(&cfg, 0, sizeof(cfg));
- config(&cfg);
- cfg.max_size = max_size;
- return rte_acl_build(acx, &cfg);
-}
-
-static int
-test_convert_rules(const char *desc,
- void (*config)(struct rte_acl_config *),
- void (*convert)(const struct rte_acl_ipv4vlan_rule *,
- struct acl_ipv4vlan_rule *))
-{
- struct rte_acl_ctx *acx;
- int32_t rc;
- uint32_t i;
- static const size_t mem_sizes[] = {0, -1};
-
- printf("running %s(%s)\n", __func__, desc);
-
- acx = rte_acl_create(&acl_param);
- if (acx == NULL) {
- printf("Line %i: Error creating ACL context!\n", __LINE__);
- return -1;
- }
-
- rc = convert_rules(acx, convert, acl_test_rules,
- RTE_DIM(acl_test_rules));
- if (rc != 0)
- printf("Line %i: Error converting ACL rules!\n", __LINE__);
-
- for (i = 0; rc == 0 && i != RTE_DIM(mem_sizes); i++) {
-
- rc = build_convert_rules(acx, config, mem_sizes[i]);
- if (rc != 0) {
- printf("Line %i: Error @ build_convert_rules(%zu)!\n",
- __LINE__, mem_sizes[i]);
- break;
- }
-
- rc = test_classify_run(acx);
- if (rc != 0)
- printf("%s failed at line %i, max_size=%zu\n",
- __func__, __LINE__, mem_sizes[i]);
- }
-
- rte_acl_free(acx);
- return rc;
-}
-
-static int
-test_convert(void)
-{
- static const struct {
- const char *desc;
- void (*config)(struct rte_acl_config *);
- void (*convert)(const struct rte_acl_ipv4vlan_rule *,
- struct acl_ipv4vlan_rule *);
- } convert_param[] = {
- {
- "acl_ipv4vlan_tuple",
- convert_config,
- convert_rule,
- },
- {
- "acl_ipv4vlan_tuple, RTE_ACL_FIELD_TYPE_BITMASK type "
- "for IPv4",
- convert_config_1,
- convert_rule_1,
- },
- {
- "acl_ipv4vlan_tuple, RTE_ACL_FIELD_TYPE_RANGE type "
- "for IPv4",
- convert_config_2,
- convert_rule_2,
- },
- {
- "acl_ipv4vlan_tuple: swap VLAN and PORTs order",
- convert_config_3,
- convert_rule_3,
- },
- {
- "acl_ipv4vlan_tuple: swap SRC and DST IPv4 order",
- convert_config_4,
- convert_rule_4,
- },
- };
-
- uint32_t i;
- int32_t rc;
-
- for (i = 0; i != RTE_DIM(convert_param); i++) {
- rc = test_convert_rules(convert_param[i].desc,
- convert_param[i].config,
- convert_param[i].convert);
- if (rc != 0) {
- printf("%s for test-case: %s failed, error code: %d;\n",
- __func__, convert_param[i].desc, rc);
- return rc;
- }
- }
-
- return 0;
-}
-
-/*
- * Test wrong layout behavior
- * This test supplies the ACL context with invalid layout, which results in
- * ACL matching the wrong stuff. However, it should match the wrong stuff
- * the right way. We switch around source and destination addresses,
- * source and destination ports, and protocol will point to first byte of
- * destination port.
- */
-static int
-test_invalid_layout(void)
-{
- struct rte_acl_ctx *acx;
- int ret, i;
-
- uint32_t results[RTE_DIM(invalid_layout_data)];
- const uint8_t *data[RTE_DIM(invalid_layout_data)];
-
- const uint32_t layout[RTE_ACL_IPV4VLAN_NUM] = {
- /* proto points to destination port's first byte */
- offsetof(struct ipv4_7tuple, port_dst),
-
- 0, /* VLAN not used */
-
- /* src and dst addresses are swapped */
- offsetof(struct ipv4_7tuple, ip_dst),
- offsetof(struct ipv4_7tuple, ip_src),
-
- /*
- * we can't swap ports here, so we will swap
- * them in the data
- */
- offsetof(struct ipv4_7tuple, port_src),
- };
-
- acx = rte_acl_create(&acl_param);
- if (acx == NULL) {
- printf("Line %i: Error creating ACL context!\n", __LINE__);
- return -1;
- }
-
- /* putting a lot of rules into the context results in greater
- * coverage numbers. it doesn't matter if they are identical */
- for (i = 0; i < 1000; i++) {
- /* add rules to the context */
- ret = rte_acl_ipv4vlan_add_rules(acx, invalid_layout_rules,
- RTE_DIM(invalid_layout_rules));
- if (ret != 0) {
- printf("Line %i: Adding rules to ACL context failed!\n",
- __LINE__);
- rte_acl_free(acx);
- return -1;
- }
- }
-
- /* try building the context */
- ret = rte_acl_ipv4vlan_build(acx, layout, 1);
- if (ret != 0) {
- printf("Line %i: Building ACL context failed!\n", __LINE__);
- rte_acl_free(acx);
- return -1;
- }
-
- /* swap all bytes in the data to network order */
- bswap_test_data(invalid_layout_data, RTE_DIM(invalid_layout_data), 1);
-
- /* prepare data */
- for (i = 0; i < (int) RTE_DIM(invalid_layout_data); i++) {
- data[i] = (uint8_t *)&invalid_layout_data[i];
- }
-
- /* classify tuples */
- ret = rte_acl_classify_alg(acx, data, results,
- RTE_DIM(results), 1, RTE_ACL_CLASSIFY_SCALAR);
- if (ret != 0) {
- printf("Line %i: SSE classify failed!\n", __LINE__);
- rte_acl_free(acx);
- return -1;
- }
-
- for (i = 0; i < (int) RTE_DIM(results); i++) {
- if (results[i] != invalid_layout_data[i].allow) {
- printf("Line %i: Wrong results at %i "
- "(result=%u, should be %u)!\n",
- __LINE__, i, results[i],
- invalid_layout_data[i].allow);
- goto err;
- }
- }
-
- /* classify tuples (scalar) */
- ret = rte_acl_classify_alg(acx, data, results, RTE_DIM(results), 1,
- RTE_ACL_CLASSIFY_SCALAR);
-
- if (ret != 0) {
- printf("Line %i: Scalar classify failed!\n", __LINE__);
- rte_acl_free(acx);
- return -1;
- }
-
- for (i = 0; i < (int) RTE_DIM(results); i++) {
- if (results[i] != invalid_layout_data[i].allow) {
- printf("Line %i: Wrong results at %i "
- "(result=%u, should be %u)!\n",
- __LINE__, i, results[i],
- invalid_layout_data[i].allow);
- goto err;
- }
- }
-
- rte_acl_free(acx);
-
- /* swap data back to cpu order so that next time tests don't fail */
- bswap_test_data(invalid_layout_data, RTE_DIM(invalid_layout_data), 0);
-
- return 0;
-err:
-
- /* swap data back to cpu order so that next time tests don't fail */
- bswap_test_data(invalid_layout_data, RTE_DIM(invalid_layout_data), 0);
-
- rte_acl_free(acx);
-
- return -1;
-}
-
-/*
- * Test creating and finding ACL contexts, and adding rules
- */
-static int
-test_create_find_add(void)
-{
- struct rte_acl_param param;
- struct rte_acl_ctx *acx, *acx2, *tmp;
- struct rte_acl_ipv4vlan_rule rules[LEN];
-
- const uint32_t layout[RTE_ACL_IPV4VLAN_NUM] = {0};
-
- const char *acx_name = "acx";
- const char *acx2_name = "acx2";
- int i, ret;
-
- /* create two contexts */
- memcpy(&param, &acl_param, sizeof(param));
- param.max_rule_num = 2;
-
- param.name = acx_name;
- acx = rte_acl_create(&param);
- if (acx == NULL) {
- printf("Line %i: Error creating %s!\n", __LINE__, acx_name);
- return -1;
- }
-
- param.name = acx2_name;
- acx2 = rte_acl_create(&param);
- if (acx2 == NULL || acx2 == acx) {
- printf("Line %i: Error creating %s!\n", __LINE__, acx2_name);
- rte_acl_free(acx);
- return -1;
- }
-
- /* try to create third one, with an existing name */
- param.name = acx_name;
- tmp = rte_acl_create(&param);
- if (tmp != acx) {
- printf("Line %i: Creating context with existing name "
- "test failed!\n",
- __LINE__);
- if (tmp)
- rte_acl_free(tmp);
- goto err;
- }
-
- param.name = acx2_name;
- tmp = rte_acl_create(&param);
- if (tmp != acx2) {
- printf("Line %i: Creating context with existing "
- "name test 2 failed!\n",
- __LINE__);
- if (tmp)
- rte_acl_free(tmp);
- goto err;
- }
-
- /* try to find existing ACL contexts */
- tmp = rte_acl_find_existing(acx_name);
- if (tmp != acx) {
- printf("Line %i: Finding %s failed!\n", __LINE__, acx_name);
- if (tmp)
- rte_acl_free(tmp);
- goto err;
- }
-
- tmp = rte_acl_find_existing(acx2_name);
- if (tmp != acx2) {
- printf("Line %i: Finding %s failed!\n", __LINE__, acx2_name);
- if (tmp)
- rte_acl_free(tmp);
- goto err;
- }
-
- /* try to find non-existing context */
- tmp = rte_acl_find_existing("invalid");
- if (tmp != NULL) {
- printf("Line %i: Non-existent ACL context found!\n", __LINE__);
- goto err;
- }
-
- /* free context */
- rte_acl_free(acx);
-
-
- /* create valid (but severely limited) acx */
- memcpy(&param, &acl_param, sizeof(param));
- param.max_rule_num = LEN;
-
- acx = rte_acl_create(&param);
- if (acx == NULL) {
- printf("Line %i: Error creating %s!\n", __LINE__, param.name);
- goto err;
- }
-
- /* create dummy acl */
- for (i = 0; i < LEN; i++) {
- memcpy(&rules[i], &acl_rule,
- sizeof(struct rte_acl_ipv4vlan_rule));
- /* skip zero */
- rules[i].data.userdata = i + 1;
- /* one rule per category */
- rules[i].data.category_mask = 1 << i;
- }
-
- /* try filling up the context */
- ret = rte_acl_ipv4vlan_add_rules(acx, rules, LEN);
- if (ret != 0) {
- printf("Line %i: Adding %i rules to ACL context failed!\n",
- __LINE__, LEN);
- goto err;
- }
-
- /* try adding to a (supposedly) full context */
- ret = rte_acl_ipv4vlan_add_rules(acx, rules, 1);
- if (ret == 0) {
- printf("Line %i: Adding rules to full ACL context should"
- "have failed!\n", __LINE__);
- goto err;
- }
-
- /* try building the context */
- ret = rte_acl_ipv4vlan_build(acx, layout, RTE_ACL_MAX_CATEGORIES);
- if (ret != 0) {
- printf("Line %i: Building ACL context failed!\n", __LINE__);
- goto err;
- }
-
- rte_acl_free(acx);
- rte_acl_free(acx2);
-
- return 0;
-err:
- rte_acl_free(acx);
- rte_acl_free(acx2);
- return -1;
-}
-
-/*
- * test various invalid rules
- */
-static int
-test_invalid_rules(void)
-{
- struct rte_acl_ctx *acx;
- int ret;
-
- struct rte_acl_ipv4vlan_rule rule;
-
- acx = rte_acl_create(&acl_param);
- if (acx == NULL) {
- printf("Line %i: Error creating ACL context!\n", __LINE__);
- return -1;
- }
-
- /* test inverted high/low source and destination ports.
- * originally, there was a problem with memory consumption when using
- * such rules.
- */
- /* create dummy acl */
- memcpy(&rule, &acl_rule, sizeof(struct rte_acl_ipv4vlan_rule));
- rule.data.userdata = 1;
- rule.dst_port_low = 0xfff0;
- rule.dst_port_high = 0x0010;
-
- /* add rules to context and try to build it */
- ret = rte_acl_ipv4vlan_add_rules(acx, &rule, 1);
- if (ret == 0) {
- printf("Line %i: Adding rules to ACL context "
- "should have failed!\n", __LINE__);
- goto err;
- }
-
- rule.dst_port_low = 0x0;
- rule.dst_port_high = 0xffff;
- rule.src_port_low = 0xfff0;
- rule.src_port_high = 0x0010;
-
- /* add rules to context and try to build it */
- ret = rte_acl_ipv4vlan_add_rules(acx, &rule, 1);
- if (ret == 0) {
- printf("Line %i: Adding rules to ACL context "
- "should have failed!\n", __LINE__);
- goto err;
- }
-
- rule.dst_port_low = 0x0;
- rule.dst_port_high = 0xffff;
- rule.src_port_low = 0x0;
- rule.src_port_high = 0xffff;
-
- rule.dst_mask_len = 33;
-
- /* add rules to context and try to build it */
- ret = rte_acl_ipv4vlan_add_rules(acx, &rule, 1);
- if (ret == 0) {
- printf("Line %i: Adding rules to ACL context "
- "should have failed!\n", __LINE__);
- goto err;
- }
-
- rule.dst_mask_len = 0;
- rule.src_mask_len = 33;
-
- /* add rules to context and try to build it */
- ret = rte_acl_ipv4vlan_add_rules(acx, &rule, 1);
- if (ret == 0) {
- printf("Line %i: Adding rules to ACL context "
- "should have failed!\n", __LINE__);
- goto err;
- }
-
- rule.dst_mask_len = 0;
- rule.src_mask_len = 0;
- rule.data.userdata = 0;
-
- /* try adding this rule (it should fail because userdata is invalid) */
- ret = rte_acl_ipv4vlan_add_rules(acx, &rule, 1);
- if (ret == 0) {
- printf("Line %i: Adding a rule with invalid user data "
- "should have failed!\n", __LINE__);
- rte_acl_free(acx);
- return -1;
- }
-
- rte_acl_free(acx);
-
- return 0;
-
-err:
- rte_acl_free(acx);
-
- return -1;
-}
-
-/*
- * test functions by passing invalid or
- * non-workable parameters.
- *
- * we do very limited testing of classify functions here
- * because those are performance-critical and
- * thus don't do much parameter checking.
- */
-static int
-test_invalid_parameters(void)
-{
- struct rte_acl_param param;
- struct rte_acl_ctx *acx;
- struct rte_acl_ipv4vlan_rule rule;
- int result;
-
- uint32_t layout[RTE_ACL_IPV4VLAN_NUM] = {0};
-
-
- /**
- * rte_ac_create()
- */
-
- /* NULL param */
- acx = rte_acl_create(NULL);
- if (acx != NULL) {
- printf("Line %i: ACL context creation with NULL param "
- "should have failed!\n", __LINE__);
- rte_acl_free(acx);
- return -1;
- }
-
- /* zero rule size */
- memcpy(&param, &acl_param, sizeof(param));
- param.rule_size = 0;
-
- acx = rte_acl_create(&param);
- if (acx == NULL) {
- printf("Line %i: ACL context creation with zero rule len "
- "failed!\n", __LINE__);
- return -1;
- } else
- rte_acl_free(acx);
-
- /* zero max rule num */
- memcpy(&param, &acl_param, sizeof(param));
- param.max_rule_num = 0;
-
- acx = rte_acl_create(&param);
- if (acx == NULL) {
- printf("Line %i: ACL context creation with zero rule num "
- "failed!\n", __LINE__);
- return -1;
- } else
- rte_acl_free(acx);
-
- /* invalid NUMA node */
- memcpy(&param, &acl_param, sizeof(param));
- param.socket_id = RTE_MAX_NUMA_NODES + 1;
-
- acx = rte_acl_create(&param);
- if (acx != NULL) {
- printf("Line %i: ACL context creation with invalid NUMA "
- "should have failed!\n", __LINE__);
- rte_acl_free(acx);
- return -1;
- }
-
- /* NULL name */
- memcpy(&param, &acl_param, sizeof(param));
- param.name = NULL;
-
- acx = rte_acl_create(&param);
- if (acx != NULL) {
- printf("Line %i: ACL context creation with NULL name "
- "should have failed!\n", __LINE__);
- rte_acl_free(acx);
- return -1;
- }
-
- /**
- * rte_acl_find_existing
- */
-
- acx = rte_acl_find_existing(NULL);
- if (acx != NULL) {
- printf("Line %i: NULL ACL context found!\n", __LINE__);
- rte_acl_free(acx);
- return -1;
- }
-
- /**
- * rte_acl_ipv4vlan_add_rules
- */
-
- /* initialize everything */
- memcpy(&param, &acl_param, sizeof(param));
- acx = rte_acl_create(&param);
- if (acx == NULL) {
- printf("Line %i: ACL context creation failed!\n", __LINE__);
- return -1;
- }
-
- memcpy(&rule, &acl_rule, sizeof(rule));
-
- /* NULL context */
- result = rte_acl_ipv4vlan_add_rules(NULL, &rule, 1);
- if (result == 0) {
- printf("Line %i: Adding rules with NULL ACL context "
- "should have failed!\n", __LINE__);
- rte_acl_free(acx);
- return -1;
- }
-
- /* NULL rule */
- result = rte_acl_ipv4vlan_add_rules(acx, NULL, 1);
- if (result == 0) {
- printf("Line %i: Adding NULL rule to ACL context "
- "should have failed!\n", __LINE__);
- rte_acl_free(acx);
- return -1;
- }
-
- /* zero count (should succeed) */
- result = rte_acl_ipv4vlan_add_rules(acx, &rule, 0);
- if (result != 0) {
- printf("Line %i: Adding 0 rules to ACL context failed!\n",
- __LINE__);
- rte_acl_free(acx);
- return -1;
- }
-
- /* free ACL context */
- rte_acl_free(acx);
-
- /* set wrong rule_size so that adding any rules would fail */
- param.rule_size = RTE_ACL_IPV4VLAN_RULE_SZ + 4;
- acx = rte_acl_create(&param);
- if (acx == NULL) {
- printf("Line %i: ACL context creation failed!\n", __LINE__);
- return -1;
- }
-
- /* try adding a rule with size different from context rule_size */
- result = rte_acl_ipv4vlan_add_rules(acx, &rule, 1);
- if (result == 0) {
- printf("Line %i: Adding an invalid sized rule "
- "should have failed!\n", __LINE__);
- rte_acl_free(acx);
- return -1;
- }
-
- /* free ACL context */
- rte_acl_free(acx);
-
-
- /**
- * rte_acl_ipv4vlan_build
- */
-
- /* reinitialize context */
- memcpy(&param, &acl_param, sizeof(param));
- acx = rte_acl_create(&param);
- if (acx == NULL) {
- printf("Line %i: ACL context creation failed!\n", __LINE__);
- return -1;
- }
-
- /* NULL context */
- result = rte_acl_ipv4vlan_build(NULL, layout, 1);
- if (result == 0) {
- printf("Line %i: Building with NULL context "
- "should have failed!\n", __LINE__);
- rte_acl_free(acx);
- return -1;
- }
-
- /* NULL layout */
- result = rte_acl_ipv4vlan_build(acx, NULL, 1);
- if (result == 0) {
- printf("Line %i: Building with NULL layout "
- "should have failed!\n", __LINE__);
- rte_acl_free(acx);
- return -1;
- }
-
- /* zero categories (should not fail) */
- result = rte_acl_ipv4vlan_build(acx, layout, 0);
- if (result == 0) {
- printf("Line %i: Building with 0 categories should fail!\n",
- __LINE__);
- rte_acl_free(acx);
- return -1;
- }
-
- /* SSE classify test */
-
- /* cover zero categories in classify (should not fail) */
- result = rte_acl_classify(acx, NULL, NULL, 0, 0);
- if (result != 0) {
- printf("Line %i: SSE classify with zero categories "
- "failed!\n", __LINE__);
- rte_acl_free(acx);
- return -1;
- }
-
- /* cover invalid but positive categories in classify */
- result = rte_acl_classify(acx, NULL, NULL, 0, 3);
- if (result == 0) {
- printf("Line %i: SSE classify with 3 categories "
- "should have failed!\n", __LINE__);
- rte_acl_free(acx);
- return -1;
- }
-
- /* scalar classify test */
-
- /* cover zero categories in classify (should not fail) */
- result = rte_acl_classify_alg(acx, NULL, NULL, 0, 0,
- RTE_ACL_CLASSIFY_SCALAR);
- if (result != 0) {
- printf("Line %i: Scalar classify with zero categories "
- "failed!\n", __LINE__);
- rte_acl_free(acx);
- return -1;
- }
-
- /* cover invalid but positive categories in classify */
- result = rte_acl_classify(acx, NULL, NULL, 0, 3);
- if (result == 0) {
- printf("Line %i: Scalar classify with 3 categories "
- "should have failed!\n", __LINE__);
- rte_acl_free(acx);
- return -1;
- }
-
- /* free ACL context */
- rte_acl_free(acx);
-
-
- /**
- * make sure void functions don't crash with NULL parameters
- */
-
- rte_acl_free(NULL);
-
- rte_acl_dump(NULL);
-
- return 0;
-}
-
-/**
- * Various tests that don't test much but improve coverage
- */
-static int
-test_misc(void)
-{
- struct rte_acl_param param;
- struct rte_acl_ctx *acx;
-
- /* create context */
- memcpy(&param, &acl_param, sizeof(param));
-
- acx = rte_acl_create(&param);
- if (acx == NULL) {
- printf("Line %i: Error creating ACL context!\n", __LINE__);
- return -1;
- }
-
- /* dump context with rules - useful for coverage */
- rte_acl_list_dump();
-
- rte_acl_dump(acx);
-
- rte_acl_free(acx);
-
- return 0;
-}
-
-static int
-test_acl(void)
-{
- if (test_invalid_parameters() < 0)
- return -1;
- if (test_invalid_rules() < 0)
- return -1;
- if (test_create_find_add() < 0)
- return -1;
- if (test_invalid_layout() < 0)
- return -1;
- if (test_misc() < 0)
- return -1;
- if (test_classify() < 0)
- return -1;
- if (test_build_ports_range() < 0)
- return -1;
- if (test_convert() < 0)
- return -1;
-
- return 0;
-}
-
-REGISTER_TEST_COMMAND(acl_autotest, test_acl);
diff --git a/app/test/test_acl.h b/app/test/test_acl.h
deleted file mode 100644
index 421f3109..00000000
--- a/app/test/test_acl.h
+++ /dev/null
@@ -1,692 +0,0 @@
-/*-
- * BSD LICENSE
- *
- * Copyright(c) 2010-2014 Intel Corporation. All rights reserved.
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * * Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * * Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in
- * the documentation and/or other materials provided with the
- * distribution.
- * * Neither the name of Intel Corporation nor the names of its
- * contributors may be used to endorse or promote products derived
- * from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
- * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
- * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#ifndef TEST_ACL_H_
-#define TEST_ACL_H_
-
-struct ipv4_7tuple {
- uint16_t vlan;
- uint16_t domain;
- uint8_t proto;
- uint32_t ip_src;
- uint32_t ip_dst;
- uint16_t port_src;
- uint16_t port_dst;
- uint32_t allow;
- uint32_t deny;
-};
-
-/**
- * Legacy support for 7-tuple IPv4 and VLAN rule.
- * This structure and corresponding API is deprecated.
- */
-struct rte_acl_ipv4vlan_rule {
- struct rte_acl_rule_data data; /**< Miscellaneous data for the rule. */
- uint8_t proto; /**< IPv4 protocol ID. */
- uint8_t proto_mask; /**< IPv4 protocol ID mask. */
- uint16_t vlan; /**< VLAN ID. */
- uint16_t vlan_mask; /**< VLAN ID mask. */
- uint16_t domain; /**< VLAN domain. */
- uint16_t domain_mask; /**< VLAN domain mask. */
- uint32_t src_addr; /**< IPv4 source address. */
- uint32_t src_mask_len; /**< IPv4 source address mask. */
- uint32_t dst_addr; /**< IPv4 destination address. */
- uint32_t dst_mask_len; /**< IPv4 destination address mask. */
- uint16_t src_port_low; /**< L4 source port low. */
- uint16_t src_port_high; /**< L4 source port high. */
- uint16_t dst_port_low; /**< L4 destination port low. */
- uint16_t dst_port_high; /**< L4 destination port high. */
-};
-
-/**
- * Specifies fields layout inside rte_acl_rule for rte_acl_ipv4vlan_rule.
- */
-enum {
- RTE_ACL_IPV4VLAN_PROTO_FIELD,
- RTE_ACL_IPV4VLAN_VLAN1_FIELD,
- RTE_ACL_IPV4VLAN_VLAN2_FIELD,
- RTE_ACL_IPV4VLAN_SRC_FIELD,
- RTE_ACL_IPV4VLAN_DST_FIELD,
- RTE_ACL_IPV4VLAN_SRCP_FIELD,
- RTE_ACL_IPV4VLAN_DSTP_FIELD,
- RTE_ACL_IPV4VLAN_NUM_FIELDS
-};
-
-/**
- * Macro to define rule size for rte_acl_ipv4vlan_rule.
- */
-#define RTE_ACL_IPV4VLAN_RULE_SZ \
- RTE_ACL_RULE_SZ(RTE_ACL_IPV4VLAN_NUM_FIELDS)
-
-/*
- * That effectively defines order of IPV4VLAN classifications:
- * - PROTO
- * - VLAN (TAG and DOMAIN)
- * - SRC IP ADDRESS
- * - DST IP ADDRESS
- * - PORTS (SRC and DST)
- */
-enum {
- RTE_ACL_IPV4VLAN_PROTO,
- RTE_ACL_IPV4VLAN_VLAN,
- RTE_ACL_IPV4VLAN_SRC,
- RTE_ACL_IPV4VLAN_DST,
- RTE_ACL_IPV4VLAN_PORTS,
- RTE_ACL_IPV4VLAN_NUM
-};
-
-/* rules for invalid layout test */
-struct rte_acl_ipv4vlan_rule invalid_layout_rules[] = {
- /* test src and dst address */
- {
- .data = {.userdata = 1, .category_mask = 1},
- .src_addr = IPv4(10,0,0,0),
- .src_mask_len = 24,
- },
- {
- .data = {.userdata = 2, .category_mask = 1},
- .dst_addr = IPv4(10,0,0,0),
- .dst_mask_len = 24,
- },
- /* test src and dst ports */
- {
- .data = {.userdata = 3, .category_mask = 1},
- .dst_port_low = 100,
- .dst_port_high = 100,
- },
- {
- .data = {.userdata = 4, .category_mask = 1},
- .src_port_low = 100,
- .src_port_high = 100,
- },
- /* test proto */
- {
- .data = {.userdata = 5, .category_mask = 1},
- .proto = 0xf,
- .proto_mask = 0xf
- },
- {
- .data = {.userdata = 6, .category_mask = 1},
- .dst_port_low = 0xf,
- .dst_port_high = 0xf,
- }
-};
-
-/* these might look odd because they don't match up the rules. This is
- * intentional, as the invalid layout test presumes returning the correct
- * results using the wrong data layout.
- */
-struct ipv4_7tuple invalid_layout_data[] = {
- {.ip_src = IPv4(10,0,1,0)}, /* should not match */
- {.ip_src = IPv4(10,0,0,1), .allow = 2}, /* should match 2 */
- {.port_src = 100, .allow = 4}, /* should match 4 */
- {.port_dst = 0xf, .allow = 6}, /* should match 6 */
-};
-
-#define ACL_ALLOW 0
-#define ACL_DENY 1
-#define ACL_ALLOW_MASK 0x1
-#define ACL_DENY_MASK 0x2
-
-/* ruleset for ACL unit test */
-struct rte_acl_ipv4vlan_rule acl_test_rules[] = {
-/* destination IP addresses */
- /* matches all packets traveling to 192.168.0.0/16 */
- {
- .data = {.userdata = 1, .category_mask = ACL_ALLOW_MASK,
- .priority = 230},
- .dst_addr = IPv4(192,168,0,0),
- .dst_mask_len = 16,
- .src_port_low = 0,
- .src_port_high = 0xffff,
- .dst_port_low = 0,
- .dst_port_high = 0xffff,
- },
- /* matches all packets traveling to 192.168.1.0/24 */
- {
- .data = {.userdata = 2, .category_mask = ACL_ALLOW_MASK,
- .priority = 330},
- .dst_addr = IPv4(192,168,1,0),
- .dst_mask_len = 24,
- .src_port_low = 0,
- .src_port_high = 0xffff,
- .dst_port_low = 0,
- .dst_port_high = 0xffff,
- },
- /* matches all packets traveling to 192.168.1.50 */
- {
- .data = {.userdata = 3, .category_mask = ACL_DENY_MASK,
- .priority = 230},
- .dst_addr = IPv4(192,168,1,50),
- .dst_mask_len = 32,
- .src_port_low = 0,
- .src_port_high = 0xffff,
- .dst_port_low = 0,
- .dst_port_high = 0xffff,
- },
-
-/* source IP addresses */
- /* matches all packets traveling from 10.0.0.0/8 */
- {
- .data = {.userdata = 4, .category_mask = ACL_ALLOW_MASK,
- .priority = 240},
- .src_addr = IPv4(10,0,0,0),
- .src_mask_len = 8,
- .src_port_low = 0,
- .src_port_high = 0xffff,
- .dst_port_low = 0,
- .dst_port_high = 0xffff,
- },
- /* matches all packets traveling from 10.1.1.0/24 */
- {
- .data = {.userdata = 5, .category_mask = ACL_ALLOW_MASK,
- .priority = 340},
- .src_addr = IPv4(10,1,1,0),
- .src_mask_len = 24,
- .src_port_low = 0,
- .src_port_high = 0xffff,
- .dst_port_low = 0,
- .dst_port_high = 0xffff,
- },
- /* matches all packets traveling from 10.1.1.1 */
- {
- .data = {.userdata = 6, .category_mask = ACL_DENY_MASK,
- .priority = 240},
- .src_addr = IPv4(10,1,1,1),
- .src_mask_len = 32,
- .src_port_low = 0,
- .src_port_high = 0xffff,
- .dst_port_low = 0,
- .dst_port_high = 0xffff,
- },
-
-/* VLAN tag */
- /* matches all packets with lower 7 bytes of VLAN tag equal to 0x64 */
- {
- .data = {.userdata = 7, .category_mask = ACL_ALLOW_MASK,
- .priority = 260},
- .vlan = 0x64,
- .vlan_mask = 0x7f,
- .src_port_low = 0,
- .src_port_high = 0xffff,
- .dst_port_low = 0,
- .dst_port_high = 0xffff,
- },
- /* matches all packets with VLAN tags that have 0x5 in them */
- {
- .data = {.userdata = 8, .category_mask = ACL_ALLOW_MASK,
- .priority = 260},
- .vlan = 0x5,
- .vlan_mask = 0x5,
- .src_port_low = 0,
- .src_port_high = 0xffff,
- .dst_port_low = 0,
- .dst_port_high = 0xffff,
- },
- /* matches all packets with VLAN tag 5 */
- {
- .data = {.userdata = 9, .category_mask = ACL_DENY_MASK,
- .priority = 360},
- .vlan = 0x5,
- .vlan_mask = 0xffff,
- .src_port_low = 0,
- .src_port_high = 0xffff,
- .dst_port_low = 0,
- .dst_port_high = 0xffff,
- },
-
-/* VLAN domain */
- /* matches all packets with lower 7 bytes of domain equal to 0x64 */
- {
- .data = {.userdata = 10, .category_mask = ACL_ALLOW_MASK,
- .priority = 250},
- .domain = 0x64,
- .domain_mask = 0x7f,
- .src_port_low = 0,
- .src_port_high = 0xffff,
- .dst_port_low = 0,
- .dst_port_high = 0xffff,
- },
- /* matches all packets with domains that have 0x5 in them */
- {
- .data = {.userdata = 11, .category_mask = ACL_ALLOW_MASK,
- .priority = 350},
- .domain = 0x5,
- .domain_mask = 0x5,
- .src_port_low = 0,
- .src_port_high = 0xffff,
- .dst_port_low = 0,
- .dst_port_high = 0xffff,
- },
- /* matches all packets with domain 5 */
- {
- .data = {.userdata = 12, .category_mask = ACL_DENY_MASK,
- .priority = 350},
- .domain = 0x5,
- .domain_mask = 0xffff,
- .src_port_low = 0,
- .src_port_high = 0xffff,
- .dst_port_low = 0,
- .dst_port_high = 0xffff,
- },
-
-/* destination port */
- /* matches everything with dst port 80 */
- {
- .data = {.userdata = 13, .category_mask = ACL_ALLOW_MASK,
- .priority = 310},
- .dst_port_low = 80,
- .dst_port_high = 80,
- .src_port_low = 0,
- .src_port_high = 0xffff,
- },
- /* matches everything with dst port 22-1023 */
- {
- .data = {.userdata = 14, .category_mask = ACL_ALLOW_MASK,
- .priority = 210},
- .dst_port_low = 22,
- .dst_port_high = 1023,
- .src_port_low = 0,
- .src_port_high = 0xffff,
- },
- /* matches everything with dst port 1020 */
- {
- .data = {.userdata = 15, .category_mask = ACL_DENY_MASK,
- .priority = 310},
- .dst_port_low = 1020,
- .dst_port_high = 1020,
- .src_port_low = 0,
- .src_port_high = 0xffff,
- },
- /* matches everything with dst portrange 1000-2000 */
- {
- .data = {.userdata = 16, .category_mask = ACL_DENY_MASK,
- .priority = 210},
- .dst_port_low = 1000,
- .dst_port_high = 2000,
- .src_port_low = 0,
- .src_port_high = 0xffff,
- },
-
-/* source port */
- /* matches everything with src port 80 */
- {
- .data = {.userdata = 17, .category_mask = ACL_ALLOW_MASK,
- .priority = 320},
- .src_port_low = 80,
- .src_port_high = 80,
- .dst_port_low = 0,
- .dst_port_high = 0xffff,
- },
- /* matches everything with src port 22-1023 */
- {
- .data = {.userdata = 18, .category_mask = ACL_ALLOW_MASK,
- .priority = 220},
- .src_port_low = 22,
- .src_port_high = 1023,
- .dst_port_low = 0,
- .dst_port_high = 0xffff,
- },
- /* matches everything with src port 1020 */
- {
- .data = {.userdata = 19, .category_mask = ACL_DENY_MASK,
- .priority = 320},
- .src_port_low = 1020,
- .src_port_high = 1020,
- .dst_port_low = 0,
- .dst_port_high = 0xffff,
- },
- /* matches everything with src portrange 1000-2000 */
- {
- .data = {.userdata = 20, .category_mask = ACL_DENY_MASK,
- .priority = 220},
- .src_port_low = 1000,
- .src_port_high = 2000,
- .dst_port_low = 0,
- .dst_port_high = 0xffff,
- },
-
-/* protocol number */
- /* matches all packets with protocol number either 0x64 or 0xE4 */
- {
- .data = {.userdata = 21, .category_mask = ACL_ALLOW_MASK,
- .priority = 270},
- .proto = 0x64,
- .proto_mask = 0x7f,
- .src_port_low = 0,
- .src_port_high = 0xffff,
- .dst_port_low = 0,
- .dst_port_high = 0xffff,
- },
- /* matches all packets with protocol that have 0x5 in them */
- {
- .data = {.userdata = 22, .category_mask = ACL_ALLOW_MASK,
- .priority = 1},
- .proto = 0x5,
- .proto_mask = 0x5,
- .src_port_low = 0,
- .src_port_high = 0xffff,
- .dst_port_low = 0,
- .dst_port_high = 0xffff,
- },
- /* matches all packets with protocol 5 */
- {
- .data = {.userdata = 23, .category_mask = ACL_DENY_MASK,
- .priority = 370},
- .proto = 0x5,
- .proto_mask = 0xff,
- .src_port_low = 0,
- .src_port_high = 0xffff,
- .dst_port_low = 0,
- .dst_port_high = 0xffff,
- },
-
-/* rules combining various fields */
- {
- .data = {.userdata = 24, .category_mask = ACL_ALLOW_MASK,
- .priority = 400},
- /** make sure that unmasked bytes don't fail! */
- .dst_addr = IPv4(1,2,3,4),
- .dst_mask_len = 16,
- .src_addr = IPv4(5,6,7,8),
- .src_mask_len = 24,
- .proto = 0x5,
- .proto_mask = 0xff,
- .src_port_low = 0,
- .src_port_high = 0xffff,
- .dst_port_low = 22,
- .dst_port_high = 1024,
- .vlan = 0x8100,
- .vlan_mask = 0xffff,
- .domain = 0x64,
- .domain_mask = 0xffff,
- },
- {
- .data = {.userdata = 25, .category_mask = ACL_DENY_MASK,
- .priority = 400},
- .dst_addr = IPv4(5,6,7,8),
- .dst_mask_len = 24,
- .src_addr = IPv4(1,2,3,4),
- .src_mask_len = 16,
- .proto = 0x5,
- .proto_mask = 0xff,
- .src_port_low = 0,
- .src_port_high = 0xffff,
- .dst_port_low = 22,
- .dst_port_high = 1024,
- .vlan = 0x8100,
- .vlan_mask = 0xffff,
- .domain = 0x64,
- .domain_mask = 0xffff,
- },
- {
- .data = {.userdata = 26, .category_mask = ACL_ALLOW_MASK,
- .priority = 500},
- .dst_addr = IPv4(1,2,3,4),
- .dst_mask_len = 8,
- .src_addr = IPv4(5,6,7,8),
- .src_mask_len = 32,
- .proto = 0x5,
- .proto_mask = 0xff,
- .src_port_low = 0,
- .src_port_high = 0xffff,
- .dst_port_low = 22,
- .dst_port_high = 1024,
- .vlan = 0x64,
- .vlan_mask = 0xffff,
- },
- {
- .data = {.userdata = 27, .category_mask = ACL_DENY_MASK,
- .priority = 500},
- .dst_addr = IPv4(5,6,7,8),
- .dst_mask_len = 32,
- .src_addr = IPv4(1,2,3,4),
- .src_mask_len = 8,
- .proto = 0x5,
- .proto_mask = 0xff,
- .src_port_low = 0,
- .src_port_high = 0xffff,
- .dst_port_low = 22,
- .dst_port_high = 1024,
- .vlan = 0x64,
- .vlan_mask = 0xffff,
- },
-};
-
-/* data for ACL unit test */
-struct ipv4_7tuple acl_test_data[] = {
-/* testing single rule aspects */
- {.ip_src = IPv4(10,0,0,0), .allow = 4}, /* should match 4 */
- {.ip_src = IPv4(10,1,1,2), .allow = 5}, /* should match 5 */
- {.ip_src = IPv4(10,1,1,1), .allow = 5,
- .deny = 6}, /* should match 5, 6 */
- {.ip_dst = IPv4(10,0,0,0)}, /* should not match */
- {.ip_dst = IPv4(10,1,1,2)}, /* should not match */
- {.ip_dst = IPv4(10,1,1,1)}, /* should not match */
-
- {.ip_src = IPv4(192,168,2,50)}, /* should not match */
- {.ip_src = IPv4(192,168,1,2)}, /* should not match */
- {.ip_src = IPv4(192,168,1,50)}, /* should not match */
- {.ip_dst = IPv4(192,168,2,50), .allow = 1}, /* should match 1 */
- {.ip_dst = IPv4(192,168,1,49), .allow = 2}, /* should match 2 */
- {.ip_dst = IPv4(192,168,1,50), .allow = 2,
- .deny = 3}, /* should match 2, 3 */
-
- {.vlan = 0x64, .allow = 7}, /* should match 7 */
- {.vlan = 0xfE4, .allow = 7}, /* should match 7 */
- {.vlan = 0xE2}, /* should not match */
- {.vlan = 0xD, .allow = 8}, /* should match 8 */
- {.vlan = 0x6}, /* should not match */
- {.vlan = 0x5, .allow = 8, .deny = 9}, /* should match 8, 9 */
-
- {.domain = 0x64, .allow = 10}, /* should match 10 */
- {.domain = 0xfE4, .allow = 10}, /* should match 10 */
- {.domain = 0xE2}, /* should not match */
- {.domain = 0xD, .allow = 11}, /* should match 11 */
- {.domain = 0x6}, /* should not match */
- {.domain = 0x5, .allow = 11, .deny = 12}, /* should match 11, 12 */
-
- {.port_dst = 80, .allow = 13}, /* should match 13 */
- {.port_dst = 79, .allow = 14}, /* should match 14 */
- {.port_dst = 81, .allow = 14}, /* should match 14 */
- {.port_dst = 21}, /* should not match */
- {.port_dst = 1024, .deny = 16}, /* should match 16 */
- {.port_dst = 1020, .allow = 14, .deny = 15}, /* should match 14, 15 */
-
- {.port_src = 80, .allow = 17}, /* should match 17 */
- {.port_src = 79, .allow = 18}, /* should match 18 */
- {.port_src = 81, .allow = 18}, /* should match 18 */
- {.port_src = 21}, /* should not match */
- {.port_src = 1024, .deny = 20}, /* should match 20 */
- {.port_src = 1020, .allow = 18, .deny = 19}, /* should match 18, 19 */
-
- {.proto = 0x64, .allow = 21}, /* should match 21 */
- {.proto = 0xE4, .allow = 21}, /* should match 21 */
- {.proto = 0xE2}, /* should not match */
- {.proto = 0xD, .allow = 22}, /* should match 22 */
- {.proto = 0x6}, /* should not match */
- {.proto = 0x5, .allow = 22, .deny = 23}, /* should match 22, 23 */
-
-/* testing matching multiple rules at once */
- {.vlan = 0x5, .ip_src = IPv4(10,1,1,1),
- .allow = 5, .deny = 9}, /* should match 5, 9 */
- {.vlan = 0x5, .ip_src = IPv4(192,168,2,50),
- .allow = 8, .deny = 9}, /* should match 8, 9 */
- {.vlan = 0x55, .ip_src = IPv4(192,168,1,49),
- .allow = 8}, /* should match 8 */
- {.port_dst = 80, .port_src = 1024,
- .allow = 13, .deny = 20}, /* should match 13,20 */
- {.port_dst = 79, .port_src = 1024,
- .allow = 14, .deny = 20}, /* should match 14,20 */
- {.proto = 0x5, .ip_dst = IPv4(192,168,2,50),
- .allow = 1, .deny = 23}, /* should match 1, 23 */
-
- {.proto = 0x5, .ip_dst = IPv4(192,168,1,50),
- .allow = 2, .deny = 23}, /* should match 2, 23 */
- {.vlan = 0x64, .domain = 0x5,
- .allow = 11, .deny = 12}, /* should match 11, 12 */
- {.proto = 0x5, .port_src = 80,
- .allow = 17, .deny = 23}, /* should match 17, 23 */
- {.proto = 0x5, .port_dst = 80,
- .allow = 13, .deny = 23}, /* should match 13, 23 */
- {.proto = 0x51, .port_src = 5000}, /* should not match */
- {.ip_src = IPv4(192,168,1,50),
- .ip_dst = IPv4(10,0,0,0),
- .proto = 0x51,
- .port_src = 5000,
- .port_dst = 5000}, /* should not match */
-
-/* test full packet rules */
- {
- .ip_dst = IPv4(1,2,100,200),
- .ip_src = IPv4(5,6,7,254),
- .proto = 0x5,
- .vlan = 0x8100,
- .domain = 0x64,
- .port_src = 12345,
- .port_dst = 80,
- .allow = 24,
- .deny = 23
- }, /* should match 23, 24 */
- {
- .ip_dst = IPv4(5,6,7,254),
- .ip_src = IPv4(1,2,100,200),
- .proto = 0x5,
- .vlan = 0x8100,
- .domain = 0x64,
- .port_src = 12345,
- .port_dst = 80,
- .allow = 13,
- .deny = 25
- }, /* should match 13, 25 */
- {
- .ip_dst = IPv4(1,10,20,30),
- .ip_src = IPv4(5,6,7,8),
- .proto = 0x5,
- .vlan = 0x64,
- .port_src = 12345,
- .port_dst = 80,
- .allow = 26,
- .deny = 23
- }, /* should match 23, 26 */
- {
- .ip_dst = IPv4(5,6,7,8),
- .ip_src = IPv4(1,10,20,30),
- .proto = 0x5,
- .vlan = 0x64,
- .port_src = 12345,
- .port_dst = 80,
- .allow = 13,
- .deny = 27
- }, /* should match 13, 27 */
- {
- .ip_dst = IPv4(2,2,3,4),
- .ip_src = IPv4(4,6,7,8),
- .proto = 0x5,
- .vlan = 0x64,
- .port_src = 12345,
- .port_dst = 80,
- .allow = 13,
- .deny = 23
- }, /* should match 13, 23 */
- {
- .ip_dst = IPv4(1,2,3,4),
- .ip_src = IPv4(4,6,7,8),
- .proto = 0x5,
- .vlan = 0x64,
- .port_src = 12345,
- .port_dst = 80,
- .allow = 13,
- .deny = 23
- }, /* should match 13, 23 */
-
-
-/* visual separator! */
- {
- .ip_dst = IPv4(1,2,100,200),
- .ip_src = IPv4(5,6,7,254),
- .proto = 0x55,
- .vlan = 0x8000,
- .domain = 0x6464,
- .port_src = 12345,
- .port_dst = 8080,
- .allow = 10
- }, /* should match 10 */
- {
- .ip_dst = IPv4(5,6,7,254),
- .ip_src = IPv4(1,2,100,200),
- .proto = 0x55,
- .vlan = 0x8100,
- .domain = 0x6464,
- .port_src = 12345,
- .port_dst = 180,
- .allow = 10
- }, /* should match 10 */
- {
- .ip_dst = IPv4(1,10,20,30),
- .ip_src = IPv4(5,6,7,8),
- .proto = 0x55,
- .vlan = 0x64,
- .port_src = 12345,
- .port_dst = 180,
- .allow = 7
- }, /* should match 7 */
- {
- .ip_dst = IPv4(5,6,7,8),
- .ip_src = IPv4(1,10,20,30),
- .proto = 0x55,
- .vlan = 0x64,
- .port_src = 12345,
- .port_dst = 180,
- .allow = 7
- }, /* should match 7 */
- {
- .ip_dst = IPv4(2,2,3,4),
- .ip_src = IPv4(4,6,7,8),
- .proto = 0x55,
- .vlan = 0x64,
- .port_src = 12345,
- .port_dst = 180,
- .allow = 7
- }, /* should match 7 */
- {
- .ip_dst = IPv4(1,2,3,4),
- .ip_src = IPv4(4,6,7,8),
- .proto = 0x50,
- .vlan = 0x6466,
- .port_src = 12345,
- .port_dst = 12345,
- }, /* should not match */
-};
-
-#endif /* TEST_ACL_H_ */
diff --git a/app/test/test_alarm.c b/app/test/test_alarm.c
deleted file mode 100644
index ecb2f6d4..00000000
--- a/app/test/test_alarm.c
+++ /dev/null
@@ -1,256 +0,0 @@
-/*-
- * BSD LICENSE
- *
- * Copyright(c) 2010-2014 Intel Corporation. All rights reserved.
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * * Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * * Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in
- * the documentation and/or other materials provided with the
- * distribution.
- * * Neither the name of Intel Corporation nor the names of its
- * contributors may be used to endorse or promote products derived
- * from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
- * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
- * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#include <stdio.h>
-#include <stdint.h>
-
-#include <rte_common.h>
-#include <rte_cycles.h>
-#include <rte_interrupts.h>
-#include <rte_common.h>
-#include <rte_atomic.h>
-#include <rte_alarm.h>
-
-#include "test.h"
-
-#define US_PER_MS 1000
-
-#define RTE_TEST_ALARM_TIMEOUT 10 /* ms */
-#define RTE_TEST_CHECK_PERIOD 3 /* ms */
-
-static volatile int flag;
-
-static void
-test_alarm_callback(void *cb_arg)
-{
- flag = 1;
- printf("Callback setting flag - OK. [cb_arg = %p]\n", cb_arg);
-}
-
-static rte_atomic32_t cb_count;
-
-static void
-test_multi_cb(void *arg)
-{
- rte_atomic32_inc(&cb_count);
- printf("In %s - arg = %p\n", __func__, arg);
-}
-
-static volatile int recursive_error = 0;
-
-static void
-test_remove_in_callback(void *arg)
-{
- printf("In %s - arg = %p\n", __func__, arg);
- if (rte_eal_alarm_cancel(test_remove_in_callback, arg) ||
- rte_eal_alarm_cancel(test_remove_in_callback, (void *)-1)) {
- printf("Error - cancelling callback from within function succeeded!\n");
- recursive_error = 1;
- }
- flag = (int)((uintptr_t)arg);
-}
-
-static volatile int flag_2;
-
-static void
-test_remove_in_callback_2(void *arg)
-{
- if (rte_eal_alarm_cancel(test_remove_in_callback_2, arg) || rte_eal_alarm_cancel(test_remove_in_callback_2, (void *)-1)) {
- printf("Error - cancelling callback of test_remove_in_callback_2\n");
- return;
- }
- flag_2 = 1;
-}
-
-static int
-test_multi_alarms(void)
-{
- int rm_count = 0;
- cb_count.cnt = 0;
-
- printf("Expect 6 callbacks in order...\n");
- /* add two alarms in order */
- rte_eal_alarm_set(10 * US_PER_MS, test_multi_cb, (void *)1);
- rte_eal_alarm_set(20 * US_PER_MS, test_multi_cb, (void *)2);
-
- /* now add in reverse order */
- rte_eal_alarm_set(60 * US_PER_MS, test_multi_cb, (void *)6);
- rte_eal_alarm_set(50 * US_PER_MS, test_multi_cb, (void *)5);
- rte_eal_alarm_set(40 * US_PER_MS, test_multi_cb, (void *)4);
- rte_eal_alarm_set(30 * US_PER_MS, test_multi_cb, (void *)3);
-
- /* wait for expiry */
- rte_delay_ms(65);
- if (cb_count.cnt != 6) {
- printf("Missing callbacks\n");
- /* remove any callbacks that might remain */
- rte_eal_alarm_cancel(test_multi_cb, (void *)-1);
- return -1;
- }
-
- cb_count.cnt = 0;
- printf("Expect only callbacks with args 1 and 3...\n");
- /* Add 3 flags, then delete one */
- rte_eal_alarm_set(30 * US_PER_MS, test_multi_cb, (void *)3);
- rte_eal_alarm_set(20 * US_PER_MS, test_multi_cb, (void *)2);
- rte_eal_alarm_set(10 * US_PER_MS, test_multi_cb, (void *)1);
- rm_count = rte_eal_alarm_cancel(test_multi_cb, (void *)2);
-
- rte_delay_ms(35);
- if (cb_count.cnt != 2 || rm_count != 1) {
- printf("Error: invalid flags count or alarm removal failure"
- " - flags value = %d, expected = %d\n",
- (int)cb_count.cnt, 2);
- /* remove any callbacks that might remain */
- rte_eal_alarm_cancel(test_multi_cb, (void *)-1);
- return -1;
- }
-
- printf("Testing adding and then removing multiple alarms\n");
- /* finally test that no callbacks are called if we delete them all*/
- rte_eal_alarm_set(10 * US_PER_MS, test_multi_cb, (void *)1);
- rte_eal_alarm_set(10 * US_PER_MS, test_multi_cb, (void *)2);
- rte_eal_alarm_set(10 * US_PER_MS, test_multi_cb, (void *)3);
- rm_count = rte_eal_alarm_cancel(test_alarm_callback, (void *)-1);
- if (rm_count != 0) {
- printf("Error removing non-existant alarm succeeded\n");
- rte_eal_alarm_cancel(test_multi_cb, (void *) -1);
- return -1;
- }
- rm_count = rte_eal_alarm_cancel(test_multi_cb, (void *) -1);
- if (rm_count != 3) {
- printf("Error removing all pending alarm callbacks\n");
- return -1;
- }
-
- /* Test that we cannot cancel an alarm from within the callback itself
- * Also test that we can cancel head-of-line callbacks ok.*/
- flag = 0;
- recursive_error = 0;
- rte_eal_alarm_set(10 * US_PER_MS, test_remove_in_callback, (void *)1);
- rte_eal_alarm_set(20 * US_PER_MS, test_remove_in_callback, (void *)2);
- rm_count = rte_eal_alarm_cancel(test_remove_in_callback, (void *)1);
- if (rm_count != 1) {
- printf("Error cancelling head-of-list callback\n");
- return -1;
- }
- rte_delay_ms(15);
- if (flag != 0) {
- printf("Error, cancelling head-of-list leads to premature callback\n");
- return -1;
- }
- rte_delay_ms(10);
- if (flag != 2) {
- printf("Error - expected callback not called\n");
- rte_eal_alarm_cancel(test_remove_in_callback, (void *)-1);
- return -1;
- }
- if (recursive_error == 1)
- return -1;
-
- /* Check if it can cancel all for the same callback */
- printf("Testing canceling all for the same callback\n");
- flag_2 = 0;
- rte_eal_alarm_set(10 * US_PER_MS, test_remove_in_callback, (void *)1);
- rte_eal_alarm_set(20 * US_PER_MS, test_remove_in_callback_2, (void *)2);
- rte_eal_alarm_set(30 * US_PER_MS, test_remove_in_callback_2, (void *)3);
- rte_eal_alarm_set(40 * US_PER_MS, test_remove_in_callback, (void *)4);
- rm_count = rte_eal_alarm_cancel(test_remove_in_callback_2, (void *)-1);
- if (rm_count != 2) {
- printf("Error, cannot cancel all for the same callback\n");
- return -1;
- }
- rm_count = rte_eal_alarm_cancel(test_remove_in_callback, (void *)-1);
- if (rm_count != 2) {
- printf("Error, cannot cancel all for the same callback\n");
- return -1;
- }
-
- return 0;
-}
-
-static int
-test_alarm(void)
-{
- int count = 0;
-
- /* check if the callback will be called */
- printf("check if the callback will be called\n");
- flag = 0;
- if (rte_eal_alarm_set(RTE_TEST_ALARM_TIMEOUT * US_PER_MS,
- test_alarm_callback, NULL) < 0) {
- printf("fail to set alarm callback\n");
- return -1;
- }
- while (flag == 0 && count ++ < 6)
- rte_delay_ms(RTE_TEST_CHECK_PERIOD);
-
- if (flag == 0){
- printf("Callback not called\n");
- return -1;
- }
-
- /* check if it will fail to set alarm with wrong us value */
- printf("check if it will fail to set alarm with wrong ms values\n");
- if (rte_eal_alarm_set(0, test_alarm_callback,
- NULL) >= 0) {
- printf("should not be successful with 0 us value\n");
- return -1;
- }
- if (rte_eal_alarm_set(UINT64_MAX - 1, test_alarm_callback,
- NULL) >= 0) {
- printf("should not be successful with (UINT64_MAX-1) us value\n");
- return -1;
- }
-
- /* check if it will fail to set alarm with null callback parameter */
- printf("check if it will fail to set alarm with null callback parameter\n");
- if (rte_eal_alarm_set(RTE_TEST_ALARM_TIMEOUT, NULL, NULL) >= 0) {
- printf("should not be successful to set alarm with null callback parameter\n");
- return -1;
- }
-
- /* check if it will fail to remove alarm with null callback parameter */
- printf("check if it will fail to remove alarm with null callback parameter\n");
- if (rte_eal_alarm_cancel(NULL, NULL) == 0) {
- printf("should not be successful to remove alarm with null callback parameter");
- return -1;
- }
-
- if (test_multi_alarms() != 0)
- return -1;
-
- return 0;
-}
-
-REGISTER_TEST_COMMAND(alarm_autotest, test_alarm);
diff --git a/app/test/test_atomic.c b/app/test/test_atomic.c
deleted file mode 100644
index b5e7e1b7..00000000
--- a/app/test/test_atomic.c
+++ /dev/null
@@ -1,377 +0,0 @@
-/*-
- * BSD LICENSE
- *
- * Copyright(c) 2010-2014 Intel Corporation. All rights reserved.
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * * Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * * Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in
- * the documentation and/or other materials provided with the
- * distribution.
- * * Neither the name of Intel Corporation nor the names of its
- * contributors may be used to endorse or promote products derived
- * from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
- * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
- * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#include <stdio.h>
-#include <stdint.h>
-#include <unistd.h>
-#include <sys/queue.h>
-
-#include <rte_memory.h>
-#include <rte_memzone.h>
-#include <rte_per_lcore.h>
-#include <rte_launch.h>
-#include <rte_atomic.h>
-#include <rte_eal.h>
-#include <rte_per_lcore.h>
-#include <rte_lcore.h>
-
-#include "test.h"
-
-/*
- * Atomic Variables
- * ================
- *
- * - The main test function performs three subtests. The first test
- * checks that the usual inc/dec/add/sub functions are working
- * correctly:
- *
- * - Initialize 16-bit, 32-bit and 64-bit atomic variables to specific
- * values.
- *
- * - These variables are incremented and decremented on each core at
- * the same time in ``test_atomic_usual()``.
- *
- * - The function checks that once all lcores finish their function,
- * the value of the atomic variables are still the same.
- *
- * - The second test verifies the behavior of "test and set" functions.
- *
- * - Initialize 16-bit, 32-bit and 64-bit atomic variables to zero.
- *
- * - Invoke ``test_atomic_tas()`` on each lcore: before doing anything
- * else. The cores are waiting a synchro using ``while
- * (rte_atomic32_read(&val) == 0)`` which is triggered by the main test
- * function. Then all cores do a
- * ``rte_atomicXX_test_and_set()`` at the same time. If it is successful,
- * it increments another atomic counter.
- *
- * - The main function checks that the atomic counter was incremented
- * twice only (one for 16-bit, one for 32-bit and one for 64-bit values).
- *
- * - Test "add/sub and return"
- *
- * - Initialize 16-bit, 32-bit and 64-bit atomic variables to zero.
- *
- * - Invoke ``test_atomic_addsub_return()`` on each lcore. Before doing
- * anything else, the cores are waiting a synchro. Each lcore does
- * this operation several times::
- *
- * tmp = rte_atomicXX_add_return(&a, 1);
- * atomic_add(&count, tmp);
- * tmp = rte_atomicXX_sub_return(&a, 1);
- * atomic_sub(&count, tmp+1);
- *
- * - At the end of the test, the *count* value must be 0.
- */
-
-#define NUM_ATOMIC_TYPES 3
-
-#define N 10000
-
-static rte_atomic16_t a16;
-static rte_atomic32_t a32;
-static rte_atomic64_t a64;
-static rte_atomic64_t count;
-static rte_atomic32_t synchro;
-
-static int
-test_atomic_usual(__attribute__((unused)) void *arg)
-{
- unsigned i;
-
- while (rte_atomic32_read(&synchro) == 0)
- ;
-
- for (i = 0; i < N; i++)
- rte_atomic16_inc(&a16);
- for (i = 0; i < N; i++)
- rte_atomic16_dec(&a16);
- for (i = 0; i < (N / 5); i++)
- rte_atomic16_add(&a16, 5);
- for (i = 0; i < (N / 5); i++)
- rte_atomic16_sub(&a16, 5);
-
- for (i = 0; i < N; i++)
- rte_atomic32_inc(&a32);
- for (i = 0; i < N; i++)
- rte_atomic32_dec(&a32);
- for (i = 0; i < (N / 5); i++)
- rte_atomic32_add(&a32, 5);
- for (i = 0; i < (N / 5); i++)
- rte_atomic32_sub(&a32, 5);
-
- for (i = 0; i < N; i++)
- rte_atomic64_inc(&a64);
- for (i = 0; i < N; i++)
- rte_atomic64_dec(&a64);
- for (i = 0; i < (N / 5); i++)
- rte_atomic64_add(&a64, 5);
- for (i = 0; i < (N / 5); i++)
- rte_atomic64_sub(&a64, 5);
-
- return 0;
-}
-
-static int
-test_atomic_tas(__attribute__((unused)) void *arg)
-{
- while (rte_atomic32_read(&synchro) == 0)
- ;
-
- if (rte_atomic16_test_and_set(&a16))
- rte_atomic64_inc(&count);
- if (rte_atomic32_test_and_set(&a32))
- rte_atomic64_inc(&count);
- if (rte_atomic64_test_and_set(&a64))
- rte_atomic64_inc(&count);
-
- return 0;
-}
-
-static int
-test_atomic_addsub_and_return(__attribute__((unused)) void *arg)
-{
- uint32_t tmp16;
- uint32_t tmp32;
- uint64_t tmp64;
- unsigned i;
-
- while (rte_atomic32_read(&synchro) == 0)
- ;
-
- for (i = 0; i < N; i++) {
- tmp16 = rte_atomic16_add_return(&a16, 1);
- rte_atomic64_add(&count, tmp16);
-
- tmp16 = rte_atomic16_sub_return(&a16, 1);
- rte_atomic64_sub(&count, tmp16+1);
-
- tmp32 = rte_atomic32_add_return(&a32, 1);
- rte_atomic64_add(&count, tmp32);
-
- tmp32 = rte_atomic32_sub_return(&a32, 1);
- rte_atomic64_sub(&count, tmp32+1);
-
- tmp64 = rte_atomic64_add_return(&a64, 1);
- rte_atomic64_add(&count, tmp64);
-
- tmp64 = rte_atomic64_sub_return(&a64, 1);
- rte_atomic64_sub(&count, tmp64+1);
- }
-
- return 0;
-}
-
-/*
- * rte_atomic32_inc_and_test() would increase a 32 bits counter by one and then
- * test if that counter is equal to 0. It would return true if the counter is 0
- * and false if the counter is not 0. rte_atomic64_inc_and_test() could do the
- * same thing but for a 64 bits counter.
- * Here checks that if the 32/64 bits counter is equal to 0 after being atomically
- * increased by one. If it is, increase the variable of "count" by one which would
- * be checked as the result later.
- *
- */
-static int
-test_atomic_inc_and_test(__attribute__((unused)) void *arg)
-{
- while (rte_atomic32_read(&synchro) == 0)
- ;
-
- if (rte_atomic16_inc_and_test(&a16)) {
- rte_atomic64_inc(&count);
- }
- if (rte_atomic32_inc_and_test(&a32)) {
- rte_atomic64_inc(&count);
- }
- if (rte_atomic64_inc_and_test(&a64)) {
- rte_atomic64_inc(&count);
- }
-
- return 0;
-}
-
-/*
- * rte_atomicXX_dec_and_test() should decrease a 32 bits counter by one and then
- * test if that counter is equal to 0. It should return true if the counter is 0
- * and false if the counter is not 0.
- * This test checks if the counter is equal to 0 after being atomically
- * decreased by one. If it is, increase the value of "count" by one which is to
- * be checked as the result later.
- */
-static int
-test_atomic_dec_and_test(__attribute__((unused)) void *arg)
-{
- while (rte_atomic32_read(&synchro) == 0)
- ;
-
- if (rte_atomic16_dec_and_test(&a16))
- rte_atomic64_inc(&count);
-
- if (rte_atomic32_dec_and_test(&a32))
- rte_atomic64_inc(&count);
-
- if (rte_atomic64_dec_and_test(&a64))
- rte_atomic64_inc(&count);
-
- return 0;
-}
-
-static int
-test_atomic(void)
-{
- rte_atomic16_init(&a16);
- rte_atomic32_init(&a32);
- rte_atomic64_init(&a64);
- rte_atomic64_init(&count);
- rte_atomic32_init(&synchro);
-
- rte_atomic16_set(&a16, 1UL << 10);
- rte_atomic32_set(&a32, 1UL << 10);
- rte_atomic64_set(&a64, 1ULL << 33);
-
- printf("usual inc/dec/add/sub functions\n");
-
- rte_eal_mp_remote_launch(test_atomic_usual, NULL, SKIP_MASTER);
- rte_atomic32_set(&synchro, 1);
- rte_eal_mp_wait_lcore();
- rte_atomic32_set(&synchro, 0);
-
- if (rte_atomic16_read(&a16) != 1UL << 10) {
- printf("Atomic16 usual functions failed\n");
- return -1;
- }
-
- if (rte_atomic32_read(&a32) != 1UL << 10) {
- printf("Atomic32 usual functions failed\n");
- return -1;
- }
-
- if (rte_atomic64_read(&a64) != 1ULL << 33) {
- printf("Atomic64 usual functions failed\n");
- return -1;
- }
-
- printf("test and set\n");
-
- rte_atomic64_set(&a64, 0);
- rte_atomic32_set(&a32, 0);
- rte_atomic16_set(&a16, 0);
- rte_atomic64_set(&count, 0);
- rte_eal_mp_remote_launch(test_atomic_tas, NULL, SKIP_MASTER);
- rte_atomic32_set(&synchro, 1);
- rte_eal_mp_wait_lcore();
- rte_atomic32_set(&synchro, 0);
-
- if (rte_atomic64_read(&count) != NUM_ATOMIC_TYPES) {
- printf("Atomic test and set failed\n");
- return -1;
- }
-
- printf("add/sub and return\n");
-
- rte_atomic64_set(&a64, 0);
- rte_atomic32_set(&a32, 0);
- rte_atomic16_set(&a16, 0);
- rte_atomic64_set(&count, 0);
- rte_eal_mp_remote_launch(test_atomic_addsub_and_return, NULL,
- SKIP_MASTER);
- rte_atomic32_set(&synchro, 1);
- rte_eal_mp_wait_lcore();
- rte_atomic32_set(&synchro, 0);
-
- if (rte_atomic64_read(&count) != 0) {
- printf("Atomic add/sub+return failed\n");
- return -1;
- }
-
- /*
- * Set a64, a32 and a16 with the same value of minus "number of slave
- * lcores", launch all slave lcores to atomically increase by one and
- * test them respectively.
- * Each lcore should have only one chance to increase a64 by one and
- * then check if it is equal to 0, but there should be only one lcore
- * that finds that it is 0. It is similar for a32 and a16.
- * Then a variable of "count", initialized to zero, is increased by
- * one if a64, a32 or a16 is 0 after being increased and tested
- * atomically.
- * We can check if "count" is finally equal to 3 to see if all slave
- * lcores performed "atomic inc and test" right.
- */
- printf("inc and test\n");
-
- rte_atomic64_clear(&a64);
- rte_atomic32_clear(&a32);
- rte_atomic16_clear(&a16);
- rte_atomic32_clear(&synchro);
- rte_atomic64_clear(&count);
-
- rte_atomic64_set(&a64, (int64_t)(1 - (int64_t)rte_lcore_count()));
- rte_atomic32_set(&a32, (int32_t)(1 - (int32_t)rte_lcore_count()));
- rte_atomic16_set(&a16, (int16_t)(1 - (int16_t)rte_lcore_count()));
- rte_eal_mp_remote_launch(test_atomic_inc_and_test, NULL, SKIP_MASTER);
- rte_atomic32_set(&synchro, 1);
- rte_eal_mp_wait_lcore();
- rte_atomic32_clear(&synchro);
-
- if (rte_atomic64_read(&count) != NUM_ATOMIC_TYPES) {
- printf("Atomic inc and test failed %d\n", (int)count.cnt);
- return -1;
- }
-
- /*
- * Same as above, but this time we set the values to "number of slave
- * lcores", and decrement instead of increment.
- */
- printf("dec and test\n");
-
- rte_atomic32_clear(&synchro);
- rte_atomic64_clear(&count);
-
- rte_atomic64_set(&a64, (int64_t)(rte_lcore_count() - 1));
- rte_atomic32_set(&a32, (int32_t)(rte_lcore_count() - 1));
- rte_atomic16_set(&a16, (int16_t)(rte_lcore_count() - 1));
- rte_eal_mp_remote_launch(test_atomic_dec_and_test, NULL, SKIP_MASTER);
- rte_atomic32_set(&synchro, 1);
- rte_eal_mp_wait_lcore();
- rte_atomic32_clear(&synchro);
-
- if (rte_atomic64_read(&count) != NUM_ATOMIC_TYPES) {
- printf("Atomic dec and test failed\n");
- return -1;
- }
-
- return 0;
-}
-
-REGISTER_TEST_COMMAND(atomic_autotest, test_atomic);
diff --git a/app/test/test_byteorder.c b/app/test/test_byteorder.c
deleted file mode 100644
index 8ae31142..00000000
--- a/app/test/test_byteorder.c
+++ /dev/null
@@ -1,95 +0,0 @@
-/*-
- * BSD LICENSE
- *
- * Copyright(c) 2010-2014 Intel Corporation. All rights reserved.
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * * Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * * Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in
- * the documentation and/or other materials provided with the
- * distribution.
- * * Neither the name of Intel Corporation nor the names of its
- * contributors may be used to endorse or promote products derived
- * from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
- * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
- * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#include <stdio.h>
-#include <stdint.h>
-#include <unistd.h>
-#include <inttypes.h>
-
-#include <rte_byteorder.h>
-
-#include "test.h"
-
-static volatile uint16_t u16 = 0x1337;
-static volatile uint32_t u32 = 0xdeadbeefUL;
-static volatile uint64_t u64 = 0xdeadcafebabefaceULL;
-
-/*
- * Byteorder functions
- * ===================
- *
- * - check that optimized byte swap functions are working for each
- * size (16, 32, 64 bits)
- */
-
-static int
-test_byteorder(void)
-{
- uint16_t res_u16;
- uint32_t res_u32;
- uint64_t res_u64;
-
- res_u16 = rte_bswap16(u16);
- printf("%"PRIx16" -> %"PRIx16"\n", u16, res_u16);
- if (res_u16 != 0x3713)
- return -1;
-
- res_u32 = rte_bswap32(u32);
- printf("%"PRIx32" -> %"PRIx32"\n", u32, res_u32);
- if (res_u32 != 0xefbeaddeUL)
- return -1;
-
- res_u64 = rte_bswap64(u64);
- printf("%"PRIx64" -> %"PRIx64"\n", u64, res_u64);
- if (res_u64 != 0xcefabebafecaaddeULL)
- return -1;
-
- res_u16 = rte_bswap16(0x1337);
- printf("const %"PRIx16" -> %"PRIx16"\n", 0x1337, res_u16);
- if (res_u16 != 0x3713)
- return -1;
-
- res_u32 = rte_bswap32(0xdeadbeefUL);
- printf("const %"PRIx32" -> %"PRIx32"\n", (uint32_t) 0xdeadbeef, res_u32);
- if (res_u32 != 0xefbeaddeUL)
- return -1;
-
- res_u64 = rte_bswap64(0xdeadcafebabefaceULL);
- printf("const %"PRIx64" -> %"PRIx64"\n", (uint64_t) 0xdeadcafebabefaceULL, res_u64);
- if (res_u64 != 0xcefabebafecaaddeULL)
- return -1;
-
- return 0;
-}
-
-REGISTER_TEST_COMMAND(byteorder_autotest, test_byteorder);
diff --git a/app/test/test_cmdline.c b/app/test/test_cmdline.c
deleted file mode 100644
index 38c7256f..00000000
--- a/app/test/test_cmdline.c
+++ /dev/null
@@ -1,92 +0,0 @@
-/*-
- * BSD LICENSE
- *
- * Copyright(c) 2010-2014 Intel Corporation. All rights reserved.
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * * Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * * Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in
- * the documentation and/or other materials provided with the
- * distribution.
- * * Neither the name of Intel Corporation nor the names of its
- * contributors may be used to endorse or promote products derived
- * from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
- * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
- * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#include <stdio.h>
-
-#include "test.h"
-#include "test_cmdline.h"
-
-static int
-test_cmdline(void)
-{
- printf("Testind parsing ethernet addresses...\n");
- if (test_parse_etheraddr_valid() < 0)
- return -1;
- if (test_parse_etheraddr_invalid_data() < 0)
- return -1;
- if (test_parse_etheraddr_invalid_param() < 0)
- return -1;
- printf("Testind parsing port lists...\n");
- if (test_parse_portlist_valid() < 0)
- return -1;
- if (test_parse_portlist_invalid_data() < 0)
- return -1;
- if (test_parse_portlist_invalid_param() < 0)
- return -1;
- printf("Testind parsing numbers...\n");
- if (test_parse_num_valid() < 0)
- return -1;
- if (test_parse_num_invalid_data() < 0)
- return -1;
- if (test_parse_num_invalid_param() < 0)
- return -1;
- printf("Testing parsing IP addresses...\n");
- if (test_parse_ipaddr_valid() < 0)
- return -1;
- if (test_parse_ipaddr_invalid_data() < 0)
- return -1;
- if (test_parse_ipaddr_invalid_param() < 0)
- return -1;
- printf("Testing parsing strings...\n");
- if (test_parse_string_valid() < 0)
- return -1;
- if (test_parse_string_invalid_data() < 0)
- return -1;
- if (test_parse_string_invalid_param() < 0)
- return -1;
- printf("Testing circular buffer...\n");
- if (test_cirbuf_char() < 0)
- return -1;
- if (test_cirbuf_string() < 0)
- return -1;
- if (test_cirbuf_align() < 0)
- return -1;
- if (test_cirbuf_invalid_param() < 0)
- return -1;
- printf("Testing library functions...\n");
- if (test_cmdline_lib() < 0)
- return -1;
- return 0;
-}
-
-REGISTER_TEST_COMMAND(cmdline_autotest, test_cmdline);
diff --git a/app/test/test_cmdline.h b/app/test/test_cmdline.h
deleted file mode 100644
index 0ee91c17..00000000
--- a/app/test/test_cmdline.h
+++ /dev/null
@@ -1,73 +0,0 @@
-/*-
- * BSD LICENSE
- *
- * Copyright(c) 2010-2014 Intel Corporation. All rights reserved.
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * * Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * * Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in
- * the documentation and/or other materials provided with the
- * distribution.
- * * Neither the name of Intel Corporation nor the names of its
- * contributors may be used to endorse or promote products derived
- * from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
- * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
- * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#ifndef TEST_CMDLINE_H_
-#define TEST_CMDLINE_H_
-
-#define CMDLINE_TEST_BUFSIZE 64
-
-/* cmdline_parse_num tests */
-int test_parse_num_valid(void);
-int test_parse_num_invalid_data(void);
-int test_parse_num_invalid_param(void);
-
-/* cmdline_parse_etheraddr tests */
-int test_parse_etheraddr_valid(void);
-int test_parse_etheraddr_invalid_data(void);
-int test_parse_etheraddr_invalid_param(void);
-
-/* cmdline_parse_portlist tests */
-int test_parse_portlist_valid(void);
-int test_parse_portlist_invalid_data(void);
-int test_parse_portlist_invalid_param(void);
-
-/* cmdline_parse_ipaddr tests */
-int test_parse_ipaddr_valid(void);
-int test_parse_ipaddr_invalid_data(void);
-int test_parse_ipaddr_invalid_param(void);
-
-/* cmdline_parse_string tests */
-int test_parse_string_valid(void);
-int test_parse_string_invalid_data(void);
-int test_parse_string_invalid_param(void);
-
-/* cmdline_cirbuf tests */
-int test_cirbuf_invalid_param(void);
-int test_cirbuf_char(void);
-int test_cirbuf_string(void);
-int test_cirbuf_align(void);
-
-/* test the rest of the library */
-int test_cmdline_lib(void);
-
-#endif /* TEST_CMDLINE_H_ */
diff --git a/app/test/test_cmdline_cirbuf.c b/app/test/test_cmdline_cirbuf.c
deleted file mode 100644
index 87f83cc6..00000000
--- a/app/test/test_cmdline_cirbuf.c
+++ /dev/null
@@ -1,1330 +0,0 @@
-/*-
- * BSD LICENSE
- *
- * Copyright(c) 2010-2014 Intel Corporation. All rights reserved.
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * * Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * * Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in
- * the documentation and/or other materials provided with the
- * distribution.
- * * Neither the name of Intel Corporation nor the names of its
- * contributors may be used to endorse or promote products derived
- * from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
- * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
- * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-
-#include <rte_string_fns.h>
-
-#include <cmdline_cirbuf.h>
-
-#include "test_cmdline.h"
-
-/* different length strings */
-#define CIRBUF_STR_HEAD " HEAD"
-#define CIRBUF_STR_TAIL "TAIL"
-
-/* miscelaneous tests - they make bullseye happy */
-static int
-test_cirbuf_string_misc(void)
-{
- struct cirbuf cb;
- char buf[CMDLINE_TEST_BUFSIZE];
- char tmp[CMDLINE_TEST_BUFSIZE];
-
- /* initialize buffers */
- memset(buf, 0, sizeof(buf));
- memset(tmp, 0, sizeof(tmp));
-
- /*
- * initialize circular buffer
- */
- if (cirbuf_init(&cb, buf, 0, sizeof(buf)) < 0) {
- printf("Error: failed to initialize circular buffer!\n");
- return -1;
- }
-
- /*
- * add strings to head and tail, but read only tail
- * this results in read operation that does not transcend
- * from buffer end to buffer beginning (in other words,
- * strlen <= cb->maxlen - cb->end)
- */
-
- /* add string to head */
- if (cirbuf_add_buf_head(&cb, CIRBUF_STR_HEAD, sizeof(CIRBUF_STR_HEAD))
- != (sizeof(CIRBUF_STR_HEAD))) {
- printf("Error: failed to add string to head!\n");
- return -1;
- }
- /* add string to tail */
- if (cirbuf_add_buf_tail(&cb, CIRBUF_STR_TAIL, sizeof(CIRBUF_STR_TAIL))
- != (sizeof(CIRBUF_STR_TAIL))) {
- printf("Error: failed to add string to head!\n");
- return -1;
- }
- /* read string from tail */
- if (cirbuf_get_buf_tail(&cb, tmp, sizeof(CIRBUF_STR_TAIL))
- != (sizeof(CIRBUF_STR_TAIL))) {
- printf("Error: failed to get string from tail!\n");
- return -1;
- }
- /* verify string */
- if (strncmp(tmp, CIRBUF_STR_TAIL, sizeof(CIRBUF_STR_TAIL)) != 0) {
- printf("Error: tail strings do not match!\n");
- return -1;
- }
- /* clear buffers */
- memset(tmp, 0, sizeof(tmp));
- memset(buf, 0, sizeof(buf));
-
-
-
- /*
- * add a string to buffer when start/end is at end of buffer
- */
-
- /*
- * reinitialize circular buffer with start at the end of cirbuf
- */
- if (cirbuf_init(&cb, buf, CMDLINE_TEST_BUFSIZE - 2, sizeof(buf)) < 0) {
- printf("Error: failed to reinitialize circular buffer!\n");
- return -1;
- }
-
-
- /* add string to tail */
- if (cirbuf_add_buf_tail(&cb, CIRBUF_STR_TAIL, sizeof(CIRBUF_STR_TAIL))
- != (sizeof(CIRBUF_STR_TAIL))) {
- printf("Error: failed to add string to tail!\n");
- return -1;
- }
- /* read string from tail */
- if (cirbuf_get_buf_tail(&cb, tmp, sizeof(CIRBUF_STR_TAIL))
- != (sizeof(CIRBUF_STR_TAIL))) {
- printf("Error: failed to get string from tail!\n");
- return -1;
- }
- /* verify string */
- if (strncmp(tmp, CIRBUF_STR_TAIL, sizeof(CIRBUF_STR_TAIL)) != 0) {
- printf("Error: tail strings do not match!\n");
- return -1;
- }
- /* clear tmp buffer */
- memset(tmp, 0, sizeof(tmp));
-
-
- /* add string to head */
- if (cirbuf_add_buf_head(&cb, CIRBUF_STR_HEAD, sizeof(CIRBUF_STR_HEAD))
- != (sizeof(CIRBUF_STR_HEAD))) {
- printf("Error: failed to add string to head!\n");
- return -1;
- }
- /* read string from tail */
- if (cirbuf_get_buf_head(&cb, tmp, sizeof(CIRBUF_STR_HEAD))
- != (sizeof(CIRBUF_STR_HEAD))) {
- printf("Error: failed to get string from head!\n");
- return -1;
- }
- /* verify string */
- if (strncmp(tmp, CIRBUF_STR_HEAD, sizeof(CIRBUF_STR_HEAD)) != 0) {
- printf("Error: headstrings do not match!\n");
- return -1;
- }
-
- return 0;
-}
-
-/* test adding and deleting strings */
-static int
-test_cirbuf_string_add_del(void)
-{
- struct cirbuf cb;
- char buf[CMDLINE_TEST_BUFSIZE];
- char tmp[CMDLINE_TEST_BUFSIZE];
-
- /* initialize buffers */
- memset(buf, 0, sizeof(buf));
- memset(tmp, 0, sizeof(tmp));
-
- /*
- * initialize circular buffer
- */
- if (cirbuf_init(&cb, buf, 0, sizeof(buf)) < 0) {
- printf("Error: failed to initialize circular buffer!\n");
- return -1;
- }
-
- /* add string to head */
- if (cirbuf_add_buf_head(&cb, CIRBUF_STR_HEAD, sizeof(CIRBUF_STR_HEAD))
- != (sizeof(CIRBUF_STR_HEAD))) {
- printf("Error: failed to add string to head!\n");
- return -1;
- }
- /* read string from head */
- if (cirbuf_get_buf_head(&cb, tmp, sizeof(CIRBUF_STR_HEAD))
- != (sizeof(CIRBUF_STR_HEAD))) {
- printf("Error: failed to get string from head!\n");
- return -1;
- }
- /* verify string */
- if (strncmp(tmp, CIRBUF_STR_HEAD, sizeof(CIRBUF_STR_HEAD)) != 0) {
- printf("Error: head strings do not match!\n");
- return -1;
- }
- /* clear tmp buffer */
- memset(tmp, 0, sizeof(tmp));
- /* read string from tail */
- if (cirbuf_get_buf_tail(&cb, tmp, sizeof(CIRBUF_STR_HEAD))
- != (sizeof(CIRBUF_STR_HEAD))) {
- printf("Error: failed to get string from head!\n");
- return -1;
- }
- /* verify string */
- if (strncmp(tmp, CIRBUF_STR_HEAD, sizeof(CIRBUF_STR_HEAD)) != 0) {
- printf("Error: head strings do not match!\n");
- return -1;
- }
- /* delete string from head*/
- if (cirbuf_del_buf_head(&cb, sizeof(CIRBUF_STR_HEAD)) < 0) {
- printf("Error: failed to delete string from head!\n");
- return -1;
- }
- /* verify string was deleted */
- if (cirbuf_del_head_safe(&cb) == 0) {
- printf("Error: buffer should have been empty!\n");
- return -1;
- }
- /* clear tmp buffer */
- memset(tmp, 0, sizeof(tmp));
-
-
-
- /*
- * reinitialize circular buffer
- */
- memset(buf, 0, sizeof(buf));
- if (cirbuf_init(&cb, buf, 0, sizeof(buf)) < 0) {
- printf("Error: failed to reinitialize circular buffer!\n");
- return -1;
- }
-
- /* add string to tail */
- if (cirbuf_add_buf_tail(&cb, CIRBUF_STR_TAIL, sizeof(CIRBUF_STR_TAIL))
- != (sizeof(CIRBUF_STR_TAIL))) {
- printf("Error: failed to add string to tail!\n");
- return -1;
- }
- /* get string from tail */
- if (cirbuf_get_buf_tail(&cb, tmp, sizeof(CIRBUF_STR_TAIL))
- != (sizeof(CIRBUF_STR_TAIL))) {
- printf("Error: failed to get string from tail!\n");
- return -1;
- }
- /* verify string */
- if (strncmp(tmp, CIRBUF_STR_TAIL, sizeof(CIRBUF_STR_TAIL)) != 0) {
- printf("Error: tail strings do not match!\n");
- return -1;
- }
- /* clear tmp buffer */
- memset(tmp, 0, sizeof(tmp));
- /* get string from head */
- if (cirbuf_get_buf_head(&cb, tmp, sizeof(CIRBUF_STR_TAIL))
- != (sizeof(CIRBUF_STR_TAIL))) {
- printf("Error: failed to get string from tail!\n");
- return -1;
- }
- /* verify string */
- if (strncmp(tmp, CIRBUF_STR_TAIL, sizeof(CIRBUF_STR_TAIL)) != 0) {
- printf("Error: tail strings do not match!\n");
- return -1;
- }
- /* delete string from tail */
- if (cirbuf_del_buf_tail(&cb, sizeof(CIRBUF_STR_TAIL)) < 0) {
- printf("Error: failed to delete string from tail!\n");
- return -1;
- }
- /* verify string was deleted */
- if (cirbuf_del_tail_safe(&cb) == 0) {
- printf("Error: buffer should have been empty!\n");
- return -1;
- }
-
- return 0;
-}
-
-/* test adding from head and deleting from tail, and vice versa */
-static int
-test_cirbuf_string_add_del_reverse(void)
-{
- struct cirbuf cb;
- char buf[CMDLINE_TEST_BUFSIZE];
- char tmp[CMDLINE_TEST_BUFSIZE];
-
- /* initialize buffers */
- memset(buf, 0, sizeof(buf));
- memset(tmp, 0, sizeof(tmp));
-
- /*
- * initialize circular buffer
- */
- if (cirbuf_init(&cb, buf, 0, sizeof(buf)) < 0) {
- printf("Error: failed to initialize circular buffer!\n");
- return -1;
- }
-
- /* add string to head */
- if (cirbuf_add_buf_head(&cb, CIRBUF_STR_HEAD, sizeof(CIRBUF_STR_HEAD))
- != (sizeof(CIRBUF_STR_HEAD))) {
- printf("Error: failed to add string to head!\n");
- return -1;
- }
- /* delete string from tail */
- if (cirbuf_del_buf_tail(&cb, sizeof(CIRBUF_STR_HEAD)) < 0) {
- printf("Error: failed to delete string from tail!\n");
- return -1;
- }
- /* verify string was deleted */
- if (cirbuf_del_tail_safe(&cb) == 0) {
- printf("Error: buffer should have been empty!\n");
- return -1;
- }
- /* clear tmp buffer */
- memset(tmp, 0, sizeof(tmp));
-
- /*
- * reinitialize circular buffer
- */
- memset(buf, 0, sizeof(buf));
- if (cirbuf_init(&cb, buf, 0, sizeof(buf)) < 0) {
- printf("Error: failed to reinitialize circular buffer!\n");
- return -1;
- }
-
- /* add string to tail */
- if (cirbuf_add_buf_tail(&cb, CIRBUF_STR_TAIL, sizeof(CIRBUF_STR_TAIL))
- != (sizeof(CIRBUF_STR_TAIL))) {
- printf("Error: failed to add string to tail!\n");
- return -1;
- }
- /* delete string from head */
- if (cirbuf_del_buf_head(&cb, sizeof(CIRBUF_STR_TAIL)) < 0) {
- printf("Error: failed to delete string from head!\n");
- return -1;
- }
- /* verify string was deleted */
- if (cirbuf_del_head_safe(&cb) == 0) {
- printf("Error: buffer should have been empty!\n");
- return -1;
- }
-
- return 0;
-}
-
-/* try to write more than available */
-static int
-test_cirbuf_string_add_boundaries(void)
-{
- struct cirbuf cb;
- char buf[CMDLINE_TEST_BUFSIZE];
- unsigned i;
-
- /* initialize buffers */
- memset(buf, 0, sizeof(buf));
-
- /*
- * initialize circular buffer
- */
- if (cirbuf_init(&cb, buf, 0, sizeof(buf)) < 0) {
- printf("Error: failed to initialize circular buffer!\n");
- return -1;
- }
-
- /* fill the buffer from tail */
- for (i = 0; i < CMDLINE_TEST_BUFSIZE - sizeof(CIRBUF_STR_TAIL) + 1; i++)
- cirbuf_add_tail_safe(&cb, 't');
-
- /* try adding a string to tail */
- if (cirbuf_add_buf_tail(&cb, CIRBUF_STR_TAIL, sizeof(CIRBUF_STR_TAIL))
- > 0) {
- printf("Error: buffer should have been full!\n");
- return -1;
- }
- /* try adding a string to head */
- if (cirbuf_add_buf_head(&cb, CIRBUF_STR_TAIL, sizeof(CIRBUF_STR_TAIL))
- > 0) {
- printf("Error: buffer should have been full!\n");
- return -1;
- }
-
- /*
- * reinitialize circular buffer
- */
- memset(buf, 0, sizeof(buf));
- if (cirbuf_init(&cb, buf, 0, sizeof(buf)) < 0) {
- printf("Error: failed to reinitialize circular buffer!\n");
- return -1;
- }
-
- /* fill the buffer from head */
- for (i = 0; i < CMDLINE_TEST_BUFSIZE - sizeof(CIRBUF_STR_HEAD) + 1; i++)
- cirbuf_add_head_safe(&cb, 'h');
-
- /* try adding a string to head */
- if (cirbuf_add_buf_head(&cb, CIRBUF_STR_HEAD, sizeof(CIRBUF_STR_HEAD))
- > 0) {
- printf("Error: buffer should have been full!\n");
- return -1;
- }
- /* try adding a string to tail */
- if (cirbuf_add_buf_tail(&cb, CIRBUF_STR_HEAD, sizeof(CIRBUF_STR_HEAD))
- > 0) {
- printf("Error: buffer should have been full!\n");
- return -1;
- }
-
- return 0;
-}
-
-/* try to read/delete more than written */
-static int
-test_cirbuf_string_get_del_boundaries(void)
-{
- struct cirbuf cb;
- char buf[CMDLINE_TEST_BUFSIZE];
- char tmp[CMDLINE_TEST_BUFSIZE];
-
- /* initialize buffers */
- memset(buf, 0, sizeof(buf));
- memset(tmp, 0, sizeof(tmp));
-
- /*
- * initialize circular buffer
- */
- if (cirbuf_init(&cb, buf, 0, sizeof(buf)) < 0) {
- printf("Error: failed to initialize circular buffer!\n");
- return -1;
- }
-
-
- /* add string to head */
- if (cirbuf_add_buf_head(&cb, CIRBUF_STR_HEAD, sizeof(CIRBUF_STR_HEAD))
- != (sizeof(CIRBUF_STR_HEAD))) {
- printf("Error: failed to add string to head!\n");
- return -1;
- }
- /* read more than written (head) */
- if (cirbuf_get_buf_head(&cb, tmp, sizeof(CIRBUF_STR_HEAD) + 1)
- != sizeof(CIRBUF_STR_HEAD)) {
- printf("Error: unexpected result when reading too much data!\n");
- return -1;
- }
- /* read more than written (tail) */
- if (cirbuf_get_buf_tail(&cb, tmp, sizeof(CIRBUF_STR_HEAD) + 1)
- != sizeof(CIRBUF_STR_HEAD)) {
- printf("Error: unexpected result when reading too much data!\n");
- return -1;
- }
- /* delete more than written (head) */
- if (cirbuf_del_buf_head(&cb, sizeof(CIRBUF_STR_HEAD) + 1) == 0) {
- printf("Error: unexpected result when deleting too much data!\n");
- return -1;
- }
- /* delete more than written (tail) */
- if (cirbuf_del_buf_tail(&cb, sizeof(CIRBUF_STR_HEAD) + 1) == 0) {
- printf("Error: unexpected result when deleting too much data!\n");
- return -1;
- }
-
- /*
- * reinitialize circular buffer
- */
- memset(buf, 0, sizeof(buf));
- if (cirbuf_init(&cb, buf, 0, sizeof(buf)) < 0) {
- printf("Error: failed to reinitialize circular buffer!\n");
- return -1;
- }
-
- /* add string to tail */
- if (cirbuf_add_buf_tail(&cb, CIRBUF_STR_TAIL, sizeof(CIRBUF_STR_TAIL))
- != (sizeof(CIRBUF_STR_TAIL))) {
- printf("Error: failed to add string to tail!\n");
- return -1;
- }
- /* read more than written (tail) */
- if (cirbuf_get_buf_tail(&cb, tmp, sizeof(CIRBUF_STR_TAIL) + 1)
- != sizeof(CIRBUF_STR_TAIL)) {
- printf("Error: unexpected result when reading too much data!\n");
- return -1;
- }
- /* read more than written (head) */
- if (cirbuf_get_buf_head(&cb, tmp, sizeof(CIRBUF_STR_TAIL) + 1)
- != sizeof(CIRBUF_STR_TAIL)) {
- printf("Error: unexpected result when reading too much data!\n");
- return -1;
- }
- /* delete more than written (tail) */
- if (cirbuf_del_buf_tail(&cb, sizeof(CIRBUF_STR_TAIL) + 1) == 0) {
- printf("Error: unexpected result when deleting too much data!\n");
- return -1;
- }
- /* delete more than written (head) */
- if (cirbuf_del_buf_tail(&cb, sizeof(CIRBUF_STR_TAIL) + 1) == 0) {
- printf("Error: unexpected result when deleting too much data!\n");
- return -1;
- }
-
- return 0;
-}
-
-/* try to read/delete less than written */
-static int
-test_cirbuf_string_get_del_partial(void)
-{
- struct cirbuf cb;
- char buf[CMDLINE_TEST_BUFSIZE];
- char tmp[CMDLINE_TEST_BUFSIZE];
- char tmp2[CMDLINE_TEST_BUFSIZE];
-
- /* initialize buffers */
- memset(buf, 0, sizeof(buf));
- memset(tmp, 0, sizeof(tmp));
- memset(tmp2, 0, sizeof(tmp));
-
- snprintf(tmp2, sizeof(tmp2), "%s", CIRBUF_STR_HEAD);
-
- /*
- * initialize circular buffer
- */
- if (cirbuf_init(&cb, buf, 0, sizeof(buf)) < 0) {
- printf("Error: failed to initialize circular buffer!\n");
- return -1;
- }
-
- /* add string to head */
- if (cirbuf_add_buf_head(&cb, CIRBUF_STR_HEAD, sizeof(CIRBUF_STR_HEAD))
- != (sizeof(CIRBUF_STR_HEAD))) {
- printf("Error: failed to add string to head!\n");
- return -1;
- }
- /* read less than written (head) */
- if (cirbuf_get_buf_head(&cb, tmp, sizeof(CIRBUF_STR_HEAD) - 1)
- != sizeof(CIRBUF_STR_HEAD) - 1) {
- printf("Error: unexpected result when reading from head!\n");
- return -1;
- }
- /* verify string */
- if (strncmp(tmp, tmp2, sizeof(CIRBUF_STR_HEAD) - 1) != 0) {
- printf("Error: strings mismatch!\n");
- return -1;
- }
- memset(tmp, 0, sizeof(tmp));
- /* read less than written (tail) */
- if (cirbuf_get_buf_tail(&cb, tmp, sizeof(CIRBUF_STR_HEAD) - 1)
- != sizeof(CIRBUF_STR_HEAD) - 1) {
- printf("Error: unexpected result when reading from tail!\n");
- return -1;
- }
- /* verify string */
- if (strncmp(tmp, &tmp2[1], sizeof(CIRBUF_STR_HEAD) - 1) != 0) {
- printf("Error: strings mismatch!\n");
- return -1;
- }
-
- /*
- * verify correct deletion
- */
-
- /* clear buffer */
- memset(tmp, 0, sizeof(tmp));
-
- /* delete less than written (head) */
- if (cirbuf_del_buf_head(&cb, 1) != 0) {
- printf("Error: delete from head failed!\n");
- return -1;
- }
- /* read from head */
- if (cirbuf_get_buf_head(&cb, tmp, sizeof(CIRBUF_STR_HEAD) - 1)
- != sizeof(CIRBUF_STR_HEAD) - 1) {
- printf("Error: unexpected result when reading from head!\n");
- return -1;
- }
- /* since we deleted from head, first char should be deleted */
- if (strncmp(tmp, &tmp2[1], sizeof(CIRBUF_STR_HEAD) - 1) != 0) {
- printf("Error: strings mismatch!\n");
- return -1;
- }
- /* clear buffer */
- memset(tmp, 0, sizeof(tmp));
-
- /* delete less than written (tail) */
- if (cirbuf_del_buf_tail(&cb, 1) != 0) {
- printf("Error: delete from tail failed!\n");
- return -1;
- }
- /* read from tail */
- if (cirbuf_get_buf_tail(&cb, tmp, sizeof(CIRBUF_STR_HEAD) - 2)
- != sizeof(CIRBUF_STR_HEAD) - 2) {
- printf("Error: unexpected result when reading from head!\n");
- return -1;
- }
- /* since we deleted from tail, last char should be deleted */
- if (strncmp(tmp, &tmp2[1], sizeof(CIRBUF_STR_HEAD) - 2) != 0) {
- printf("Error: strings mismatch!\n");
- return -1;
- }
-
- return 0;
-}
-
-/* test cmdline_cirbuf char add/del functions */
-static int
-test_cirbuf_char_add_del(void)
-{
- struct cirbuf cb;
- char buf[CMDLINE_TEST_BUFSIZE];
- char tmp[CMDLINE_TEST_BUFSIZE];
-
- /* clear buffer */
- memset(buf, 0, sizeof(buf));
- memset(tmp, 0, sizeof(tmp));
-
- /*
- * initialize circular buffer
- */
- if (cirbuf_init(&cb, buf, 0, sizeof(buf)) < 0) {
- printf("Error: failed to initialize circular buffer!\n");
- return -1;
- }
-
- /*
- * try to delete something from cirbuf. since it's empty,
- * these should fail.
- */
- if (cirbuf_del_head_safe(&cb) == 0) {
- printf("Error: deleting from empty cirbuf head succeeded!\n");
- return -1;
- }
- if (cirbuf_del_tail_safe(&cb) == 0) {
- printf("Error: deleting from empty cirbuf tail succeeded!\n");
- return -1;
- }
-
- /*
- * add, verify and delete. these should pass.
- */
- if (cirbuf_add_head_safe(&cb,'h') < 0) {
- printf("Error: adding to cirbuf head failed!\n");
- return -1;
- }
- if (cirbuf_get_head(&cb) != 'h') {
- printf("Error: wrong head content!\n");
- return -1;
- }
- if (cirbuf_del_head_safe(&cb) < 0) {
- printf("Error: deleting from cirbuf head failed!\n");
- return -1;
- }
- if (cirbuf_add_tail_safe(&cb,'t') < 0) {
- printf("Error: adding to cirbuf tail failed!\n");
- return -1;
- }
- if (cirbuf_get_tail(&cb) != 't') {
- printf("Error: wrong tail content!\n");
- return -1;
- }
- if (cirbuf_del_tail_safe(&cb) < 0) {
- printf("Error: deleting from cirbuf tail failed!\n");
- return -1;
- }
- /* do the same for unsafe versions. those are void. */
- cirbuf_add_head(&cb,'h');
- if (cirbuf_get_head(&cb) != 'h') {
- printf("Error: wrong head content!\n");
- return -1;
- }
- cirbuf_del_head(&cb);
-
- /* test if char has been deleted. we can't call cirbuf_get_head
- * because it's unsafe, but we can call cirbuf_get_buf_head.
- */
- if (cirbuf_get_buf_head(&cb, tmp, 1) > 0) {
- printf("Error: buffer should have been empty!\n");
- return -1;
- }
-
- cirbuf_add_tail(&cb,'t');
- if (cirbuf_get_tail(&cb) != 't') {
- printf("Error: wrong tail content!\n");
- return -1;
- }
- cirbuf_del_tail(&cb);
-
- /* test if char has been deleted. we can't call cirbuf_get_tail
- * because it's unsafe, but we can call cirbuf_get_buf_tail.
- */
- if (cirbuf_get_buf_tail(&cb, tmp, 1) > 0) {
- printf("Error: buffer should have been empty!\n");
- return -1;
- }
-
- return 0;
-}
-
-/* test filling up buffer with chars */
-static int
-test_cirbuf_char_fill(void)
-{
- struct cirbuf cb;
- char buf[CMDLINE_TEST_BUFSIZE];
- unsigned i;
-
- /* clear buffer */
- memset(buf, 0, sizeof(buf));
-
- /*
- * initialize circular buffer
- */
- if (cirbuf_init(&cb, buf, 0, sizeof(buf)) < 0) {
- printf("Error: failed to initialize circular buffer!\n");
- return -1;
- }
-
- /*
- * fill the buffer from head or tail, verify contents, test boundaries
- * and clear the buffer
- */
-
- /* fill the buffer from tail */
- for (i = 0; i < CMDLINE_TEST_BUFSIZE; i++)
- cirbuf_add_tail_safe(&cb, 't');
- /* verify that contents of the buffer are what they are supposed to be */
- for (i = 0; i < sizeof(buf); i++) {
- if (buf[i] != 't') {
- printf("Error: wrong content in buffer!\n");
- return -1;
- }
- }
- /* try to add to a full buffer from tail */
- if (cirbuf_add_tail_safe(&cb, 't') == 0) {
- printf("Error: buffer should have been full!\n");
- return -1;
- }
- /* try to add to a full buffer from head */
- if (cirbuf_add_head_safe(&cb, 'h') == 0) {
- printf("Error: buffer should have been full!\n");
- return -1;
- }
- /* delete buffer from tail */
- for(i = 0; i < CMDLINE_TEST_BUFSIZE; i++)
- cirbuf_del_tail_safe(&cb);
- /* try to delete from an empty buffer */
- if (cirbuf_del_tail_safe(&cb) >= 0) {
- printf("Error: buffer should have been empty!\n");
- return -1;
- }
-
- /* fill the buffer from head */
- for (i = 0; i < CMDLINE_TEST_BUFSIZE; i++)
- cirbuf_add_head_safe(&cb, 'h');
- /* verify that contents of the buffer are what they are supposed to be */
- for (i = 0; i < sizeof(buf); i++) {
- if (buf[i] != 'h') {
- printf("Error: wrong content in buffer!\n");
- return -1;
- }
- }
- /* try to add to a full buffer from head */
- if (cirbuf_add_head_safe(&cb,'h') >= 0) {
- printf("Error: buffer should have been full!\n");
- return -1;
- }
- /* try to add to a full buffer from tail */
- if (cirbuf_add_tail_safe(&cb, 't') == 0) {
- printf("Error: buffer should have been full!\n");
- return -1;
- }
- /* delete buffer from head */
- for(i = 0; i < CMDLINE_TEST_BUFSIZE; i++)
- cirbuf_del_head_safe(&cb);
- /* try to delete from an empty buffer */
- if (cirbuf_del_head_safe(&cb) >= 0) {
- printf("Error: buffer should have been empty!\n");
- return -1;
- }
-
- /*
- * fill the buffer from both head and tail, with alternating characters,
- * verify contents and clear the buffer
- */
-
- /* fill half of buffer from tail */
- for (i = 0; i < CMDLINE_TEST_BUFSIZE / 2; i++)
- cirbuf_add_tail_safe(&cb, (char) (i % 2 ? 't' : 'T'));
- /* fill other half of the buffer from head */
- for (i = 0; i < CMDLINE_TEST_BUFSIZE / 2; i++)
- cirbuf_add_head_safe(&cb, (char) (i % 2 ? 'H' : 'h')); /* added in reverse */
-
- /* verify that contents of the buffer are what they are supposed to be */
- for (i = 0; i < sizeof(buf) / 2; i++) {
- if (buf[i] != (char) (i % 2 ? 't' : 'T')) {
- printf("Error: wrong content in buffer at %u!\n", i);
- return -1;
- }
- }
- for (i = sizeof(buf) / 2; i < sizeof(buf); i++) {
- if (buf[i] != (char) (i % 2 ? 'h' : 'H')) {
- printf("Error: wrong content in buffer %u!\n", i);
- return -1;
- }
- }
-
- return 0;
-}
-
-/* test left alignment */
-static int
-test_cirbuf_align_left(void)
-{
-#define HALF_OFFSET CMDLINE_TEST_BUFSIZE / 2
-#define SMALL_OFFSET HALF_OFFSET / 2
-/* resulting buffer lengths for each of the test cases */
-#define LEN1 HALF_OFFSET - SMALL_OFFSET - 1
-#define LEN2 HALF_OFFSET + SMALL_OFFSET + 2
-#define LEN3 HALF_OFFSET - SMALL_OFFSET
-#define LEN4 HALF_OFFSET + SMALL_OFFSET - 1
-
- struct cirbuf cb;
- char buf[CMDLINE_TEST_BUFSIZE];
- char tmp[CMDLINE_TEST_BUFSIZE];
- unsigned i;
-
- /*
- * align left when start < end and start in left half
- */
-
- /*
- * initialize circular buffer
- */
- memset(buf, 0, sizeof(buf));
- if (cirbuf_init(&cb, buf, 0, sizeof(buf)) < 0) {
- printf("Error: failed to initialize circular buffer!\n");
- return -1;
- }
-
- /* push end into left half */
- for (i = 0; i < HALF_OFFSET - 1; i++)
- cirbuf_add_tail_safe(&cb, 't');
-
- /* push start into left half < end */
- for (i = 0; i < SMALL_OFFSET; i++)
- cirbuf_del_head_safe(&cb);
-
- /* align */
- if (cirbuf_align_left(&cb) < 0) {
- printf("Error: alignment failed!\n");
- return -1;
- }
-
- /* verify result */
- if (cb.start != 0 || cb.len != LEN1 || cb.end != cb.len - 1) {
- printf("Error: buffer alignment is wrong!\n");
- return -1;
- }
-
- /*
- * align left when start > end and start in left half
- */
-
- /*
- * reinitialize circular buffer
- */
- memset(buf, 0, sizeof(buf));
- if (cirbuf_init(&cb, buf, 0, sizeof(buf)) < 0) {
- printf("Error: failed to reinitialize circular buffer!\n");
- return -1;
- }
-
- /* push start into left half */
- for (i = 0; i < HALF_OFFSET + 2; i++)
- cirbuf_add_head_safe(&cb, 'h');
-
- /* push end into left half > start */
- for (i = 0; i < SMALL_OFFSET; i++)
- cirbuf_add_tail_safe(&cb, 't');
-
- /* align */
- if (cirbuf_align_left(&cb) < 0) {
- printf("Error: alignment failed!\n");
- return -1;
- }
-
- /* verify result */
- if (cb.start != 0 || cb.len != LEN2 || cb.end != cb.len - 1) {
- printf("Error: buffer alignment is wrong!");
- return -1;
- }
-
- /*
- * align left when start < end and start in right half
- */
-
- /*
- * reinitialize circular buffer
- */
- memset(buf, 0, sizeof(buf));
- if (cirbuf_init(&cb, buf, 0, sizeof(buf)) < 0) {
- printf("Error: failed to reinitialize circular buffer!\n");
- return -1;
- }
-
- /* push start into the right half */
- for (i = 0; i < HALF_OFFSET; i++)
- cirbuf_add_head_safe(&cb, 'h');
-
- /* push end into left half > start */
- for (i = 0; i < SMALL_OFFSET; i++)
- cirbuf_del_tail_safe(&cb);
-
- /* align */
- if (cirbuf_align_left(&cb) < 0) {
- printf("Error: alignment failed!\n");
- return -1;
- }
-
- /* verify result */
- if (cb.start != 0 || cb.len != LEN3 || cb.end != cb.len - 1) {
- printf("Error: buffer alignment is wrong!");
- return -1;
- }
-
- /*
- * align left when start > end and start in right half
- */
-
- /*
- * reinitialize circular buffer
- */
- memset(buf, 0, sizeof(buf));
- if (cirbuf_init(&cb, buf, 0, sizeof(buf)) < 0) {
- printf("Error: failed to reinitialize circular buffer!\n");
- return -1;
- }
-
- /* push start into the right half */
- for (i = 0; i < HALF_OFFSET - 1; i++)
- cirbuf_add_head_safe(&cb, 'h');
-
- /* push end into left half < start */
- for (i = 0; i < SMALL_OFFSET; i++)
- cirbuf_add_tail_safe(&cb, 't');
-
- /* align */
- if (cirbuf_align_left(&cb) < 0) {
- printf("Error: alignment failed!\n");
- return -1;
- }
-
- /* verify result */
- if (cb.start != 0 || cb.len != LEN4 ||
- cb.end != cb.len - 1) {
- printf("Error: buffer alignment is wrong!");
- return -1;
- }
-
- /*
- * Verify that alignment doesn't corrupt data
- */
-
- /*
- * reinitialize circular buffer
- */
- memset(buf, 0, sizeof(buf));
- if (cirbuf_init(&cb, buf, 0, sizeof(buf)) < 0) {
- printf("Error: failed to reinitialize circular buffer!\n");
- return -1;
- }
-
- /* add string to tail and head */
- if (cirbuf_add_buf_head(&cb, CIRBUF_STR_HEAD,
- sizeof(CIRBUF_STR_HEAD)) < 0 || cirbuf_add_buf_tail(&cb,
- CIRBUF_STR_TAIL, sizeof(CIRBUF_STR_TAIL)) < 0) {
- printf("Error: failed to add strings!\n");
- return -1;
- }
-
- /* align */
- if (cirbuf_align_left(&cb) < 0) {
- printf("Error: alignment failed!\n");
- return -1;
- }
-
- /* get string from head */
- if (cirbuf_get_buf_head(&cb, tmp,
- sizeof(CIRBUF_STR_HEAD) + sizeof(CIRBUF_STR_TAIL)) < 0) {
- printf("Error: failed to read string from head!\n");
- return -1;
- }
-
- /* verify string */
- if (strncmp(tmp, CIRBUF_STR_HEAD "\0" CIRBUF_STR_TAIL,
- sizeof(CIRBUF_STR_HEAD) + sizeof(CIRBUF_STR_TAIL)) != 0) {
- printf("Error: strings mismatch!\n");
- return -1;
- }
-
- /* reset tmp buffer */
- memset(tmp, 0, sizeof(tmp));
-
- /* get string from tail */
- if (cirbuf_get_buf_tail(&cb, tmp,
- sizeof(CIRBUF_STR_HEAD) + sizeof(CIRBUF_STR_TAIL)) < 0) {
- printf("Error: failed to read string from head!\n");
- return -1;
- }
-
- /* verify string */
- if (strncmp(tmp, CIRBUF_STR_HEAD "\0" CIRBUF_STR_TAIL,
- sizeof(CIRBUF_STR_HEAD) + sizeof(CIRBUF_STR_TAIL)) != 0) {
- printf("Error: strings mismatch!\n");
- return -1;
- }
-
- return 0;
-}
-
-/* test right alignment */
-static int
-test_cirbuf_align_right(void)
-{
-#define END_OFFSET CMDLINE_TEST_BUFSIZE - 1
- struct cirbuf cb;
- char buf[CMDLINE_TEST_BUFSIZE];
- char tmp[CMDLINE_TEST_BUFSIZE];
- unsigned i;
-
-
- /*
- * align right when start < end and start in left half
- */
-
- /*
- * initialize circular buffer
- */
- memset(buf, 0, sizeof(buf));
- if (cirbuf_init(&cb, buf, 0, sizeof(buf)) < 0) {
- printf("Error: failed to initialize circular buffer!\n");
- return -1;
- }
-
- /* push end into left half */
- for (i = 0; i < HALF_OFFSET - 1; i++)
- cirbuf_add_tail_safe(&cb, 't');
-
- /* push start into left half < end */
- for (i = 0; i < SMALL_OFFSET; i++)
- cirbuf_del_head_safe(&cb);
-
- /* align */
- cirbuf_align_right(&cb);
-
- /* verify result */
- if (cb.start != END_OFFSET || cb.len != LEN1 || cb.end != cb.len - 2) {
- printf("Error: buffer alignment is wrong!\n");
- return -1;
- }
-
- /*
- * align right when start > end and start in left half
- */
-
- /*
- * reinitialize circular buffer
- */
- memset(buf, 0, sizeof(buf));
- if (cirbuf_init(&cb, buf, 0, sizeof(buf)) < 0) {
- printf("Error: failed to reinitialize circular buffer!\n");
- return -1;
- }
-
- /* push start into left half */
- for (i = 0; i < HALF_OFFSET + 2; i++)
- cirbuf_add_head_safe(&cb, 'h');
-
- /* push end into left half > start */
- for (i = 0; i < SMALL_OFFSET; i++)
- cirbuf_add_tail_safe(&cb, 't');
-
- /* align */
- cirbuf_align_right(&cb);
-
- /* verify result */
- if (cb.start != END_OFFSET || cb.len != LEN2 || cb.end != cb.len - 2) {
- printf("Error: buffer alignment is wrong!");
- return -1;
- }
-
- /*
- * align right when start < end and start in right half
- */
-
- /*
- * reinitialize circular buffer
- */
- memset(buf, 0, sizeof(buf));
- if (cirbuf_init(&cb, buf, 0, sizeof(buf)) < 0) {
- printf("Error: failed to reinitialize circular buffer!\n");
- return -1;
- }
-
- /* push start into the right half */
- for (i = 0; i < HALF_OFFSET; i++)
- cirbuf_add_head_safe(&cb, 'h');
-
- /* push end into left half > start */
- for (i = 0; i < SMALL_OFFSET; i++)
- cirbuf_del_tail_safe(&cb);
-
- /* align */
- cirbuf_align_right(&cb);
-
- /* verify result */
- if (cb.end != END_OFFSET || cb.len != LEN3 || cb.start != cb.end - cb.len + 1) {
- printf("Error: buffer alignment is wrong!");
- return -1;
- }
-
- /*
- * align right when start > end and start in right half
- */
-
- /*
- * reinitialize circular buffer
- */
- memset(buf, 0, sizeof(buf));
- if (cirbuf_init(&cb, buf, 0, sizeof(buf)) < 0) {
- printf("Error: failed to reinitialize circular buffer!\n");
- return -1;
- }
-
- /* push start into the right half */
- for (i = 0; i < HALF_OFFSET - 1; i++)
- cirbuf_add_head_safe(&cb, 'h');
-
- /* push end into left half < start */
- for (i = 0; i < SMALL_OFFSET; i++)
- cirbuf_add_tail_safe(&cb, 't');
-
- /* align */
- cirbuf_align_right(&cb);
-
- /* verify result */
- if (cb.end != END_OFFSET || cb.len != LEN4 || cb.start != cb.end - cb.len + 1) {
- printf("Error: buffer alignment is wrong!");
- return -1;
- }
-
- /*
- * Verify that alignment doesn't corrupt data
- */
-
- /*
- * reinitialize circular buffer
- */
- memset(buf, 0, sizeof(buf));
- if (cirbuf_init(&cb, buf, 0, sizeof(buf)) < 0) {
- printf("Error: failed to reinitialize circular buffer!\n");
- return -1;
- }
-
- /* add string to tail and head */
- if (cirbuf_add_buf_tail(&cb, CIRBUF_STR_TAIL,
- sizeof(CIRBUF_STR_TAIL)) < 0 || cirbuf_add_buf_head(&cb,
- CIRBUF_STR_HEAD, sizeof(CIRBUF_STR_HEAD)) < 0) {
- printf("Error: failed to add strings!\n");
- return -1;
- }
-
- /* align */
- if (cirbuf_align_right(&cb) < 0) {
- printf("Error: alignment failed!\n");
- return -1;
- }
-
- /* get string from head */
- if (cirbuf_get_buf_head(&cb, tmp,
- sizeof(CIRBUF_STR_HEAD) + sizeof(CIRBUF_STR_TAIL)) < 0) {
- printf("Error: failed to read string from head!\n");
- return -1;
- }
-
- /* verify string */
- if (strncmp(tmp, CIRBUF_STR_HEAD "\0" CIRBUF_STR_TAIL,
- sizeof(CIRBUF_STR_HEAD) + sizeof(CIRBUF_STR_TAIL)) != 0) {
- printf("Error: strings mismatch!\n");
- return -1;
- }
-
- /* reset tmp buffer */
- memset(tmp, 0, sizeof(tmp));
-
- /* get string from tail */
- if (cirbuf_get_buf_tail(&cb, tmp,
- sizeof(CIRBUF_STR_HEAD) + sizeof(CIRBUF_STR_TAIL)) < 0) {
- printf("Error: failed to read string from head!\n");
- return -1;
- }
- /* verify string */
- if (strncmp(tmp, CIRBUF_STR_HEAD "\0" CIRBUF_STR_TAIL,
- sizeof(CIRBUF_STR_HEAD) + sizeof(CIRBUF_STR_TAIL)) != 0) {
- printf("Error: strings mismatch!\n");
- return -1;
- }
-
- return 0;
-}
-
-/* call functions with invalid parameters */
-int
-test_cirbuf_invalid_param(void)
-{
- struct cirbuf cb;
- char buf[CMDLINE_TEST_BUFSIZE];
-
- /* null cirbuf */
- if (cirbuf_init(0, buf, 0, sizeof(buf)) == 0)
- return -1;
- /* null buffer */
- if (cirbuf_init(&cb, 0, 0, sizeof(buf)) == 0)
- return -1;
- /* null cirbuf */
- if (cirbuf_add_head_safe(0, 'h') == 0)
- return -1;
- if (cirbuf_add_tail_safe(0, 't') == 0)
- return -1;
- if (cirbuf_del_head_safe(0) == 0)
- return -1;
- if (cirbuf_del_tail_safe(0) == 0)
- return -1;
- /* null buffer */
- if (cirbuf_add_buf_head(&cb, 0, 0) == 0)
- return -1;
- if (cirbuf_add_buf_tail(&cb, 0, 0) == 0)
- return -1;
- /* null cirbuf */
- if (cirbuf_add_buf_head(0, buf, 0) == 0)
- return -1;
- if (cirbuf_add_buf_tail(0, buf, 0) == 0)
- return -1;
- /* null size */
- if (cirbuf_add_buf_head(&cb, buf, 0) == 0)
- return -1;
- if (cirbuf_add_buf_tail(&cb, buf, 0) == 0)
- return -1;
- /* null cirbuf */
- if (cirbuf_del_buf_head(0, 0) == 0)
- return -1;
- if (cirbuf_del_buf_tail(0, 0) == 0)
- return -1;
- /* null size */
- if (cirbuf_del_buf_head(&cb, 0) == 0)
- return -1;
- if (cirbuf_del_buf_tail(&cb, 0) == 0)
- return -1;
- /* null cirbuf */
- if (cirbuf_get_buf_head(0, 0, 0) == 0)
- return -1;
- if (cirbuf_get_buf_tail(0, 0, 0) == 0)
- return -1;
- /* null buffer */
- if (cirbuf_get_buf_head(&cb, 0, 0) == 0)
- return -1;
- if (cirbuf_get_buf_tail(&cb, 0, 0) == 0)
- return -1;
- /* null size, this is valid but should return 0 */
- if (cirbuf_get_buf_head(&cb, buf, 0) != 0)
- return -1;
- if (cirbuf_get_buf_tail(&cb, buf, 0) != 0)
- return -1;
- /* null cirbuf */
- if (cirbuf_align_left(0) == 0)
- return -1;
- if (cirbuf_align_right(0) == 0)
- return -1;
-
- return 0;
-}
-
-/* test cmdline_cirbuf char functions */
-int
-test_cirbuf_char(void)
-{
- int ret;
-
- ret = test_cirbuf_char_add_del();
- if (ret < 0)
- return -1;
-
- ret = test_cirbuf_char_fill();
- if (ret < 0)
- return -1;
-
- return 0;
-}
-
-/* test cmdline_cirbuf string functions */
-int
-test_cirbuf_string(void)
-{
- if (test_cirbuf_string_add_del() < 0)
- return -1;
-
- if (test_cirbuf_string_add_del_reverse() < 0)
- return -1;
-
- if (test_cirbuf_string_add_boundaries() < 0)
- return -1;
-
- if (test_cirbuf_string_get_del_boundaries() < 0)
- return -1;
-
- if (test_cirbuf_string_get_del_partial() < 0)
- return -1;
-
- if (test_cirbuf_string_misc() < 0)
- return -1;
-
- return 0;
-}
-
-/* test cmdline_cirbuf align functions */
-int
-test_cirbuf_align(void)
-{
- if (test_cirbuf_align_left() < 0)
- return -1;
- if (test_cirbuf_align_right() < 0)
- return -1;
- return 0;
-}
diff --git a/app/test/test_cmdline_etheraddr.c b/app/test/test_cmdline_etheraddr.c
deleted file mode 100644
index e4f42317..00000000
--- a/app/test/test_cmdline_etheraddr.c
+++ /dev/null
@@ -1,247 +0,0 @@
-/*-
- * BSD LICENSE
- *
- * Copyright(c) 2010-2014 Intel Corporation. All rights reserved.
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * * Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * * Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in
- * the documentation and/or other materials provided with the
- * distribution.
- * * Neither the name of Intel Corporation nor the names of its
- * contributors may be used to endorse or promote products derived
- * from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
- * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
- * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#include <stdio.h>
-#include <string.h>
-#include <inttypes.h>
-
-#include <rte_ether.h>
-#include <rte_string_fns.h>
-
-#include <cmdline_parse.h>
-#include <cmdline_parse_etheraddr.h>
-
-#include "test_cmdline.h"
-
-struct ether_addr_str {
- const char * str;
- uint64_t address;
-};
-
-/* valid strings */
-const struct ether_addr_str ether_addr_valid_strs[] = {
- {"01:23:45:67:89:AB", 0xAB8967452301ULL},
- {"4567:89AB:CDEF", 0xEFCDAB896745ULL},
-};
-
-/* valid strings with various garbage at the end.
- * these strings are still valid because parser checks for
- * end of token, which is either space chars, null char or
- * a hash sign.
- */
-const char * ether_addr_garbage_strs[] = {
- "00:11:22:33:44:55\0garbage",
- "00:11:22:33:44:55#garbage",
- "00:11:22:33:44:55 garbage",
- "00:11:22:33:44:55\tgarbage",
- "00:11:22:33:44:55\ngarbage",
- "00:11:22:33:44:55\rgarbage",
- "00:11:22:33:44:55#",
- "00:11:22:33:44:55 ",
- "00:11:22:33:44:55\t",
- "00:11:22:33:44:55\n",
- "00:11:22:33:44:55\r",
-};
-#define GARBAGE_ETHERADDR 0x554433221100ULL /* corresponding address */
-
-
-const char * ether_addr_invalid_strs[] = {
- /* valid chars, invalid syntax */
- "0123:45:67:89:AB",
- "01:23:4567:89:AB",
- "01:23:45:67:89AB",
- "012:345:678:9AB",
- "01:23:45:67:89:ABC",
- "01:23:45:67:89:A",
- "01:23:45:67:89",
- "01:23:45:67:89:AB:CD",
- /* invalid chars, valid syntax */
- "IN:VA:LI:DC:HA:RS",
- "INVA:LIDC:HARS",
- /* misc */
- "01 23 45 67 89 AB",
- "01.23.45.67.89.AB",
- "01,23,45,67,89,AB",
- "01:23:45\0:67:89:AB",
- "01:23:45#:67:89:AB",
- "random invalid text",
- "random text",
- "",
- "\0",
- " ",
-};
-
-#define ETHERADDR_VALID_STRS_SIZE \
- (sizeof(ether_addr_valid_strs) / sizeof(ether_addr_valid_strs[0]))
-#define ETHERADDR_GARBAGE_STRS_SIZE \
- (sizeof(ether_addr_garbage_strs) / sizeof(ether_addr_garbage_strs[0]))
-#define ETHERADDR_INVALID_STRS_SIZE \
- (sizeof(ether_addr_invalid_strs) / sizeof(ether_addr_invalid_strs[0]))
-
-
-
-static int
-is_addr_different(const struct ether_addr addr, uint64_t num)
-{
- int i;
- for (i = 0; i < ETHER_ADDR_LEN; i++, num >>= 8)
- if (addr.addr_bytes[i] != (num & 0xFF)) {
- return 1;
- }
- return 0;
-}
-
-/* test invalid parameters */
-int
-test_parse_etheraddr_invalid_param(void)
-{
- char buf[CMDLINE_TEST_BUFSIZE];
- struct ether_addr result;
- int ret = 0;
-
- /* try all null */
- ret = cmdline_parse_etheraddr(NULL, NULL, NULL, 0);
- if (ret != -1) {
- printf("Error: parser accepted null parameters!\n");
- return -1;
- }
-
- /* try null buf */
- ret = cmdline_parse_etheraddr(NULL, NULL, (void*)&result,
- sizeof(result));
- if (ret != -1) {
- printf("Error: parser accepted null string!\n");
- return -1;
- }
-
- /* try null result */
-
- /* copy string to buffer */
- snprintf(buf, sizeof(buf), "%s",
- ether_addr_valid_strs[0].str);
-
- ret = cmdline_parse_etheraddr(NULL, buf, NULL, 0);
- if (ret == -1) {
- printf("Error: parser rejected null result!\n");
- return -1;
- }
-
- /* token is not used in ether_parse anyway so there's no point in
- * testing it */
-
- /* test help function */
- memset(&buf, 0, sizeof(buf));
-
- /* coverage! */
- ret = cmdline_get_help_etheraddr(NULL, buf, sizeof(buf));
- if (ret < 0) {
- printf("Error: help function failed with valid parameters!\n");
- return -1;
- }
-
- return 0;
-}
-
-/* test valid parameters but invalid data */
-int
-test_parse_etheraddr_invalid_data(void)
-{
- int ret = 0;
- unsigned i;
- struct ether_addr result;
-
- /* test full strings */
- for (i = 0; i < ETHERADDR_INVALID_STRS_SIZE; i++) {
-
- memset(&result, 0, sizeof(struct ether_addr));
-
- ret = cmdline_parse_etheraddr(NULL, ether_addr_invalid_strs[i],
- (void*)&result, sizeof(result));
- if (ret != -1) {
- printf("Error: parsing %s succeeded!\n",
- ether_addr_invalid_strs[i]);
- return -1;
- }
- }
-
- return 0;
-}
-
-/* test valid parameters and data */
-int
-test_parse_etheraddr_valid(void)
-{
- int ret = 0;
- unsigned i;
- struct ether_addr result;
-
- /* test full strings */
- for (i = 0; i < ETHERADDR_VALID_STRS_SIZE; i++) {
-
- memset(&result, 0, sizeof(struct ether_addr));
-
- ret = cmdline_parse_etheraddr(NULL, ether_addr_valid_strs[i].str,
- (void*)&result, sizeof(result));
- if (ret < 0) {
- printf("Error: parsing %s failed!\n",
- ether_addr_valid_strs[i].str);
- return -1;
- }
- if (is_addr_different(result, ether_addr_valid_strs[i].address)) {
- printf("Error: parsing %s failed: address mismatch!\n",
- ether_addr_valid_strs[i].str);
- return -1;
- }
- }
-
- /* test garbage strings */
- for (i = 0; i < ETHERADDR_GARBAGE_STRS_SIZE; i++) {
-
- memset(&result, 0, sizeof(struct ether_addr));
-
- ret = cmdline_parse_etheraddr(NULL, ether_addr_garbage_strs[i],
- (void*)&result, sizeof(result));
- if (ret < 0) {
- printf("Error: parsing %s failed!\n",
- ether_addr_garbage_strs[i]);
- return -1;
- }
- if (is_addr_different(result, GARBAGE_ETHERADDR)) {
- printf("Error: parsing %s failed: address mismatch!\n",
- ether_addr_garbage_strs[i]);
- return -1;
- }
- }
-
- return 0;
-}
diff --git a/app/test/test_cmdline_ipaddr.c b/app/test/test_cmdline_ipaddr.c
deleted file mode 100644
index 471d2ff1..00000000
--- a/app/test/test_cmdline_ipaddr.c
+++ /dev/null
@@ -1,722 +0,0 @@
-/*-
- * BSD LICENSE
- *
- * Copyright(c) 2010-2014 Intel Corporation. All rights reserved.
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * * Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * * Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in
- * the documentation and/or other materials provided with the
- * distribution.
- * * Neither the name of Intel Corporation nor the names of its
- * contributors may be used to endorse or promote products derived
- * from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
- * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
- * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#include <stdio.h>
-#include <string.h>
-#include <inttypes.h>
-#include <netinet/in.h>
-
-#ifndef __linux__
-#ifndef __FreeBSD__
-#include <net/socket.h>
-#else
-#include <sys/socket.h>
-#endif
-#endif
-
-#include <rte_string_fns.h>
-
-#include <cmdline_parse.h>
-#include <cmdline_parse_ipaddr.h>
-
-#include "test_cmdline.h"
-
-#define IP4(a,b,c,d) {((uint32_t)(((a) & 0xff)) | \
- (((b) & 0xff) << 8) | \
- (((c) & 0xff) << 16) | \
- ((d) & 0xff) << 24)}
-
-#define U16_SWAP(x) \
- (((x & 0xFF) << 8) | ((x & 0xFF00) >> 8))
-
-/* create IPv6 address, swapping bytes where needed */
-#ifndef s6_addr16
-# define s6_addr16 __u6_addr.__u6_addr16
-#endif
-#define IP6(a,b,c,d,e,f,g,h) .ipv6 = \
- {.s6_addr16 = \
- {U16_SWAP(a),U16_SWAP(b),U16_SWAP(c),U16_SWAP(d),\
- U16_SWAP(e),U16_SWAP(f),U16_SWAP(g),U16_SWAP(h)}}
-
-/** these are defined in netinet/in.h but not present in linux headers */
-#ifndef NIPQUAD
-
-#define NIPQUAD_FMT "%u.%u.%u.%u"
-#define NIPQUAD(addr) \
- (unsigned)((unsigned char *)&addr)[0], \
- (unsigned)((unsigned char *)&addr)[1], \
- (unsigned)((unsigned char *)&addr)[2], \
- (unsigned)((unsigned char *)&addr)[3]
-
-#define NIP6_FMT "%02x%02x:%02x%02x:%02x%02x:%02x%02x:%02x%02x:%02x%02x:%02x%02x:%02x%02x"
-#define NIP6(addr) \
- (unsigned)((addr).s6_addr[0]), \
- (unsigned)((addr).s6_addr[1]), \
- (unsigned)((addr).s6_addr[2]), \
- (unsigned)((addr).s6_addr[3]), \
- (unsigned)((addr).s6_addr[4]), \
- (unsigned)((addr).s6_addr[5]), \
- (unsigned)((addr).s6_addr[6]), \
- (unsigned)((addr).s6_addr[7]), \
- (unsigned)((addr).s6_addr[8]), \
- (unsigned)((addr).s6_addr[9]), \
- (unsigned)((addr).s6_addr[10]), \
- (unsigned)((addr).s6_addr[11]), \
- (unsigned)((addr).s6_addr[12]), \
- (unsigned)((addr).s6_addr[13]), \
- (unsigned)((addr).s6_addr[14]), \
- (unsigned)((addr).s6_addr[15])
-
-#endif
-
-
-
-struct ipaddr_str {
- const char * str;
- cmdline_ipaddr_t addr;
- unsigned flags;
-};
-
-const struct ipaddr_str ipaddr_valid_strs[] = {
- {"0.0.0.0", {AF_INET, {IP4(0,0,0,0)}, 0},
- CMDLINE_IPADDR_V4},
- {"0.0.0.0/0", {AF_INET, {IP4(0,0,0,0)}, 0},
- CMDLINE_IPADDR_V4 | CMDLINE_IPADDR_NETWORK},
- {"0.0.0.0/24", {AF_INET, {IP4(0,0,0,0)}, 24},
- CMDLINE_IPADDR_V4 | CMDLINE_IPADDR_NETWORK},
- {"192.168.1.0/24", {AF_INET, {IP4(192,168,1,0)}, 24},
- CMDLINE_IPADDR_V4 | CMDLINE_IPADDR_NETWORK},
- {"012.34.56.78/24", {AF_INET, {IP4(12,34,56,78)}, 24},
- CMDLINE_IPADDR_V4 | CMDLINE_IPADDR_NETWORK},
- {"34.56.78.90/1", {AF_INET, {IP4(34,56,78,90)}, 1},
- CMDLINE_IPADDR_V4 | CMDLINE_IPADDR_NETWORK},
- {"::", {AF_INET6, {IP6(0,0,0,0,0,0,0,0)}, 0},
- CMDLINE_IPADDR_V6},
- {"::1", {AF_INET6, {IP6(0,0,0,0,0,0,0,1)}, 0},
- CMDLINE_IPADDR_V6},
- {"::1/32", {AF_INET6, {IP6(0,0,0,0,0,0,0,1)}, 32},
- CMDLINE_IPADDR_V6 | CMDLINE_IPADDR_NETWORK},
- {"::/32", {AF_INET6, {IP6(0,0,0,0,0,0,0,0)}, 32},
- CMDLINE_IPADDR_V6 | CMDLINE_IPADDR_NETWORK},
- /* RFC5952 requests that only lowercase should be used */
- {"1234:5678:90ab:cdef:4321:8765:BA09:FEDC", {AF_INET6,
- {IP6(0x1234,0x5678,0x90AB,0xCDEF,0x4321,0x8765,0xBA09,0xFEDC)},
- 0},
- CMDLINE_IPADDR_V6},
- {"1234::1234/64", {AF_INET6,
- {IP6(0x1234,0,0,0,0,0,0,0x1234)},
- 64},
- CMDLINE_IPADDR_V6 | CMDLINE_IPADDR_NETWORK},
- {"1234::/64", {AF_INET6,
- {IP6(0x1234,0,0,0,0,0,0,0)},
- 64},
- CMDLINE_IPADDR_V6 | CMDLINE_IPADDR_NETWORK},
- {"1:1::1/32", {AF_INET6,
- {IP6(1,1,0,0,0,0,0,1)},
- 32},
- CMDLINE_IPADDR_V6 | CMDLINE_IPADDR_NETWORK},
- {"1:2:3:4::/64", {AF_INET6,
- {IP6(1,2,3,4,0,0,0,0)},
- 64},
- CMDLINE_IPADDR_V6 | CMDLINE_IPADDR_NETWORK},
- {"::ffff:192.168.1.0/64", {AF_INET6,
- {IP6(0,0,0,0,0,0xFFFF,0xC0A8,0x100)},
- 64},
- CMDLINE_IPADDR_V6 | CMDLINE_IPADDR_NETWORK},
- /* RFC5952 requests not using :: to skip one block of zeros*/
- {"1::2:3:4:5:6:7", {AF_INET6,
- {IP6(1,0,2,3,4,5,6,7)},
- 0},
- CMDLINE_IPADDR_V6},
-};
-
-const char * ipaddr_garbage_addr4_strs[] = {
- /* IPv4 */
- "192.168.1.0 garbage",
- "192.168.1.0\0garbage",
- "192.168.1.0#garbage",
- "192.168.1.0\tgarbage",
- "192.168.1.0\rgarbage",
- "192.168.1.0\ngarbage",
-};
-#define IPv4_GARBAGE_ADDR IP4(192,168,1,0)
-
-const char * ipaddr_garbage_addr6_strs[] = {
- /* IPv6 */
- "1:2:3:4::8 garbage",
- "1:2:3:4::8#garbage",
- "1:2:3:4::8\0garbage",
- "1:2:3:4::8\rgarbage",
- "1:2:3:4::8\ngarbage",
- "1:2:3:4::8\tgarbage",
-};
-#define IPv6_GARBAGE_ADDR {IP6(1,2,3,4,0,0,0,8)}
-
-const char * ipaddr_garbage_network4_strs[] = {
- /* IPv4 */
- "192.168.1.0/24 garbage",
- "192.168.1.0/24\0garbage",
- "192.168.1.0/24#garbage",
- "192.168.1.0/24\tgarbage",
- "192.168.1.0/24\rgarbage",
- "192.168.1.0/24\ngarbage",
-};
-#define IPv4_GARBAGE_PREFIX 24
-
-const char * ipaddr_garbage_network6_strs[] = {
- /* IPv6 */
- "1:2:3:4::8/64 garbage",
- "1:2:3:4::8/64#garbage",
- "1:2:3:4::8/64\0garbage",
- "1:2:3:4::8/64\rgarbage",
- "1:2:3:4::8/64\ngarbage",
- "1:2:3:4::8/64\tgarbage",
-};
-#define IPv6_GARBAGE_PREFIX 64
-
-
-
-const char * ipaddr_invalid_strs[] = {
- /** IPv4 **/
-
- /* invalid numbers */
- "0.0.0.-1",
- "0.0.-1.0",
- "0.-1.0.0",
- "-1.0.0.0",
- "0.0.0.-1/24",
- "256.123.123.123",
- "255.256.123.123",
- "255.255.256.123",
- "255.255.255.256",
- "256.123.123.123/24",
- "255.256.123.123/24",
- "255.255.256.123/24",
- "255.255.255.256/24",
- /* invalid network mask */
- "1.2.3.4/33",
- "1.2.3.4/33231313",
- "1.2.3.4/-1",
- "1.2.3.4/24/33",
- "1.2.3.4/24/-1",
- "1.2.3.4/24/",
- /* wrong format */
- "1/24"
- "/24"
- "123.123.123",
- "123.123.123.",
- "123.123.123.123.",
- "123.123.123..123",
- "123.123.123.123.123",
- ".123.123.123",
- ".123.123.123.123",
- "123.123.123/24",
- "123.123.123./24",
- "123.123.123.123./24",
- "123.123.123..123/24",
- "123.123.123.123.123/24",
- ".123.123.123/24",
- ".123.123.123.123/24",
- /* invalid characters */
- "123.123.123.12F",
- "123.123.12F.123",
- "123.12F.123.123",
- "12F.123.123.123",
- "12J.123.123.123",
- "123,123,123,123",
- "123!123!123!12F",
- "123.123.123.123/4F",
-
- /** IPv6 **/
-
- /* wrong format */
- "::fffff",
- "ffff:",
- "1:2:3:4:5:6:7:192.168.1.1",
- "1234:192.168.1.1:ffff::",
- "1:2:3:4:5:6:7:890ab",
- "1:2:3:4:5:6:7890a:b",
- "1:2:3:4:5:67890:a:b",
- "1:2:3:4:56789:0:a:b",
- "1:2:3:45678:9:0:a:b",
- "1:2:34567:8:9:0:a:b",
- "1:23456:7:8:9:0:a:b",
- "12345:6:7:8:9:0:a:b",
- "1:::2",
- "1::::2",
- "::fffff/64",
- "1::2::3",
- "1::2::3/64",
- ":1:2",
- ":1:2/64",
- ":1::2",
- ":1::2/64",
- "1::2:3:4:5:6:7:8/64",
-
- /* invalid network mask */
- "1:2:3:4:5:6:7:8/129",
- "1:2:3:4:5:6:7:8/-1",
-
- /* invalid characters */
- "a:b:c:d:e:f:g::",
-
- /** misc **/
-
- /* too long */
- "1234:1234:1234:1234:1234:1234:1234:1234:1234:1234:1234"
- "random invalid text",
- "",
- "\0",
- " ",
-};
-
-#define IPADDR_VALID_STRS_SIZE \
- (sizeof(ipaddr_valid_strs) / sizeof(ipaddr_valid_strs[0]))
-#define IPADDR_GARBAGE_ADDR4_STRS_SIZE \
- (sizeof(ipaddr_garbage_addr4_strs) / sizeof(ipaddr_garbage_addr4_strs[0]))
-#define IPADDR_GARBAGE_ADDR6_STRS_SIZE \
- (sizeof(ipaddr_garbage_addr6_strs) / sizeof(ipaddr_garbage_addr6_strs[0]))
-#define IPADDR_GARBAGE_NETWORK4_STRS_SIZE \
- (sizeof(ipaddr_garbage_network4_strs) / sizeof(ipaddr_garbage_network4_strs[0]))
-#define IPADDR_GARBAGE_NETWORK6_STRS_SIZE \
- (sizeof(ipaddr_garbage_network6_strs) / sizeof(ipaddr_garbage_network6_strs[0]))
-#define IPADDR_INVALID_STRS_SIZE \
- (sizeof(ipaddr_invalid_strs) / sizeof(ipaddr_invalid_strs[0]))
-
-static void
-dump_addr(cmdline_ipaddr_t addr)
-{
- switch (addr.family) {
- case AF_INET:
- {
- printf(NIPQUAD_FMT " prefixlen=%u\n",
- NIPQUAD(addr.addr.ipv4.s_addr), addr.prefixlen);
- break;
- }
- case AF_INET6:
- {
- printf(NIP6_FMT " prefixlen=%u\n",
- NIP6(addr.addr.ipv6), addr.prefixlen);
- break;
- }
- default:
- printf("Can't dump: unknown address family.\n");
- return;
- }
-}
-
-
-static int
-is_addr_different(cmdline_ipaddr_t addr1, cmdline_ipaddr_t addr2)
-{
- if (addr1.family != addr2.family)
- return 1;
-
- if (addr1.prefixlen != addr2.prefixlen)
- return 1;
-
- switch (addr1.family) {
- /* IPv4 */
- case AF_INET:
- if (memcmp(&addr1.addr.ipv4, &addr2.addr.ipv4,
- sizeof(struct in_addr)) != 0)
- return 1;
- break;
- /* IPv6 */
- case AF_INET6:
- {
- if (memcmp(&addr1.addr.ipv6, &addr2.addr.ipv6,
- sizeof(struct in6_addr)) != 0)
- return 1;
- break;
- }
- /* thing that should not be */
- default:
- return -1;
- }
- return 0;
-}
-
-static int
-can_parse_addr(unsigned addr_flags, unsigned test_flags)
-{
- if ((test_flags & addr_flags) == addr_flags) {
- /* if we are not trying to parse network addresses */
- if (test_flags < CMDLINE_IPADDR_NETWORK)
- return 1;
- /* if this is a network address */
- else if (addr_flags & CMDLINE_IPADDR_NETWORK)
- return 1;
- }
- return 0;
-}
-
-int
-test_parse_ipaddr_valid(void)
-{
- cmdline_parse_token_ipaddr_t token;
- char buf[CMDLINE_TEST_BUFSIZE];
- cmdline_ipaddr_t result;
- unsigned i;
- uint8_t flags;
- int ret;
-
- /* cover all cases in help */
- for (flags = 0x1; flags < 0x8; flags++) {
- token.ipaddr_data.flags = flags;
-
- memset(buf, 0, sizeof(buf));
-
- if (cmdline_get_help_ipaddr((cmdline_parse_token_hdr_t*)&token,
- buf, sizeof(buf)) == -1) {
- printf("Error: help rejected valid parameters!\n");
- return -1;
- }
- }
-
- /* test valid strings */
- for (i = 0; i < IPADDR_VALID_STRS_SIZE; i++) {
-
- /* test each valid string against different flags */
- for (flags = 1; flags < 0x8; flags++) {
-
- /* skip bad flag */
- if (flags == CMDLINE_IPADDR_NETWORK)
- continue;
-
- /* clear out everything */
- memset(buf, 0, sizeof(buf));
- memset(&result, 0, sizeof(result));
- memset(&token, 0, sizeof(token));
-
- token.ipaddr_data.flags = flags;
-
- cmdline_get_help_ipaddr((cmdline_parse_token_hdr_t*)&token,
- buf, sizeof(buf));
-
- ret = cmdline_parse_ipaddr((cmdline_parse_token_hdr_t*)&token,
- ipaddr_valid_strs[i].str, (void*)&result,
- sizeof(result));
-
- /* if should have passed, or should have failed */
- if ((ret < 0) ==
- (can_parse_addr(ipaddr_valid_strs[i].flags, flags))) {
- printf("Error: unexpected behavior when parsing %s as %s!\n",
- ipaddr_valid_strs[i].str, buf);
- printf("Parsed result: ");
- dump_addr(result);
- printf("Expected result: ");
- dump_addr(ipaddr_valid_strs[i].addr);
- return -1;
- }
- if (ret != -1 &&
- is_addr_different(result, ipaddr_valid_strs[i].addr)) {
- printf("Error: result mismatch when parsing %s as %s!\n",
- ipaddr_valid_strs[i].str, buf);
- printf("Parsed result: ");
- dump_addr(result);
- printf("Expected result: ");
- dump_addr(ipaddr_valid_strs[i].addr);
- return -1;
- }
- }
- }
-
- /* test garbage ipv4 address strings */
- for (i = 0; i < IPADDR_GARBAGE_ADDR4_STRS_SIZE; i++) {
-
- struct in_addr tmp = IPv4_GARBAGE_ADDR;
-
- /* test each valid string against different flags */
- for (flags = 1; flags < 0x8; flags++) {
-
- /* skip bad flag */
- if (flags == CMDLINE_IPADDR_NETWORK)
- continue;
-
- /* clear out everything */
- memset(buf, 0, sizeof(buf));
- memset(&result, 0, sizeof(result));
- memset(&token, 0, sizeof(token));
-
- token.ipaddr_data.flags = flags;
-
- cmdline_get_help_ipaddr((cmdline_parse_token_hdr_t*)&token,
- buf, sizeof(buf));
-
- ret = cmdline_parse_ipaddr((cmdline_parse_token_hdr_t*)&token,
- ipaddr_garbage_addr4_strs[i], (void*)&result,
- sizeof(result));
-
- /* if should have passed, or should have failed */
- if ((ret < 0) ==
- (can_parse_addr(CMDLINE_IPADDR_V4, flags))) {
- printf("Error: unexpected behavior when parsing %s as %s!\n",
- ipaddr_garbage_addr4_strs[i], buf);
- return -1;
- }
- if (ret != -1 &&
- memcmp(&result.addr.ipv4, &tmp, sizeof(tmp))) {
- printf("Error: result mismatch when parsing %s as %s!\n",
- ipaddr_garbage_addr4_strs[i], buf);
- return -1;
- }
- }
- }
-
- /* test garbage ipv6 address strings */
- for (i = 0; i < IPADDR_GARBAGE_ADDR6_STRS_SIZE; i++) {
-
- cmdline_ipaddr_t tmp = {.addr = IPv6_GARBAGE_ADDR};
-
- /* test each valid string against different flags */
- for (flags = 1; flags < 0x8; flags++) {
-
- /* skip bad flag */
- if (flags == CMDLINE_IPADDR_NETWORK)
- continue;
-
- /* clear out everything */
- memset(buf, 0, sizeof(buf));
- memset(&result, 0, sizeof(result));
- memset(&token, 0, sizeof(token));
-
- token.ipaddr_data.flags = flags;
-
- cmdline_get_help_ipaddr((cmdline_parse_token_hdr_t*)&token,
- buf, sizeof(buf));
-
- ret = cmdline_parse_ipaddr((cmdline_parse_token_hdr_t*)&token,
- ipaddr_garbage_addr6_strs[i], (void*)&result,
- sizeof(result));
-
- /* if should have passed, or should have failed */
- if ((ret < 0) ==
- (can_parse_addr(CMDLINE_IPADDR_V6, flags))) {
- printf("Error: unexpected behavior when parsing %s as %s!\n",
- ipaddr_garbage_addr6_strs[i], buf);
- return -1;
- }
- if (ret != -1 &&
- memcmp(&result.addr.ipv6, &tmp.addr.ipv6, sizeof(struct in6_addr))) {
- printf("Error: result mismatch when parsing %s as %s!\n",
- ipaddr_garbage_addr6_strs[i], buf);
- return -1;
- }
- }
- }
-
-
- /* test garbage ipv4 network strings */
- for (i = 0; i < IPADDR_GARBAGE_NETWORK4_STRS_SIZE; i++) {
-
- struct in_addr tmp = IPv4_GARBAGE_ADDR;
-
- /* test each valid string against different flags */
- for (flags = 1; flags < 0x8; flags++) {
-
- /* skip bad flag */
- if (flags == CMDLINE_IPADDR_NETWORK)
- continue;
-
- /* clear out everything */
- memset(buf, 0, sizeof(buf));
- memset(&result, 0, sizeof(result));
- memset(&token, 0, sizeof(token));
-
- token.ipaddr_data.flags = flags;
-
- cmdline_get_help_ipaddr((cmdline_parse_token_hdr_t*)&token,
- buf, sizeof(buf));
-
- ret = cmdline_parse_ipaddr((cmdline_parse_token_hdr_t*)&token,
- ipaddr_garbage_network4_strs[i], (void*)&result,
- sizeof(result));
-
- /* if should have passed, or should have failed */
- if ((ret < 0) ==
- (can_parse_addr(CMDLINE_IPADDR_V4 | CMDLINE_IPADDR_NETWORK, flags))) {
- printf("Error: unexpected behavior when parsing %s as %s!\n",
- ipaddr_garbage_network4_strs[i], buf);
- return -1;
- }
- if (ret != -1 &&
- memcmp(&result.addr.ipv4, &tmp, sizeof(tmp))) {
- printf("Error: result mismatch when parsing %s as %s!\n",
- ipaddr_garbage_network4_strs[i], buf);
- return -1;
- }
- }
- }
-
- /* test garbage ipv6 address strings */
- for (i = 0; i < IPADDR_GARBAGE_NETWORK6_STRS_SIZE; i++) {
-
- cmdline_ipaddr_t tmp = {.addr = IPv6_GARBAGE_ADDR};
-
- /* test each valid string against different flags */
- for (flags = 1; flags < 0x8; flags++) {
-
- /* skip bad flag */
- if (flags == CMDLINE_IPADDR_NETWORK)
- continue;
-
- /* clear out everything */
- memset(buf, 0, sizeof(buf));
- memset(&result, 0, sizeof(result));
- memset(&token, 0, sizeof(token));
-
- token.ipaddr_data.flags = flags;
-
- cmdline_get_help_ipaddr((cmdline_parse_token_hdr_t*)&token,
- buf, sizeof(buf));
-
- ret = cmdline_parse_ipaddr((cmdline_parse_token_hdr_t*)&token,
- ipaddr_garbage_network6_strs[i], (void*)&result,
- sizeof(result));
-
- /* if should have passed, or should have failed */
- if ((ret < 0) ==
- (can_parse_addr(CMDLINE_IPADDR_V6 | CMDLINE_IPADDR_NETWORK, flags))) {
- printf("Error: unexpected behavior when parsing %s as %s!\n",
- ipaddr_garbage_network6_strs[i], buf);
- return -1;
- }
- if (ret != -1 &&
- memcmp(&result.addr.ipv6, &tmp.addr.ipv6, sizeof(struct in6_addr))) {
- printf("Error: result mismatch when parsing %s as %s!\n",
- ipaddr_garbage_network6_strs[i], buf);
- return -1;
- }
- }
- }
-
- return 0;
-}
-
-int
-test_parse_ipaddr_invalid_data(void)
-{
- cmdline_parse_token_ipaddr_t token;
- char buf[CMDLINE_TEST_BUFSIZE];
- cmdline_ipaddr_t result;
- unsigned i;
- uint8_t flags;
- int ret;
-
- memset(&result, 0, sizeof(result));
-
- /* test invalid strings */
- for (i = 0; i < IPADDR_INVALID_STRS_SIZE; i++) {
-
- /* test each valid string against different flags */
- for (flags = 1; flags < 0x8; flags++) {
-
- /* skip bad flag */
- if (flags == CMDLINE_IPADDR_NETWORK)
- continue;
-
- /* clear out everything */
- memset(buf, 0, sizeof(buf));
- memset(&token, 0, sizeof(token));
-
- token.ipaddr_data.flags = flags;
-
- cmdline_get_help_ipaddr((cmdline_parse_token_hdr_t*)&token,
- buf, sizeof(buf));
-
- ret = cmdline_parse_ipaddr((cmdline_parse_token_hdr_t*)&token,
- ipaddr_invalid_strs[i], (void*)&result,
- sizeof(result));
-
- if (ret != -1) {
- printf("Error: parsing %s as %s succeeded!\n",
- ipaddr_invalid_strs[i], buf);
- printf("Parsed result: ");
- dump_addr(result);
- return -1;
- }
- }
- }
-
- return 0;
-}
-
-int
-test_parse_ipaddr_invalid_param(void)
-{
- cmdline_parse_token_ipaddr_t token;
- char buf[CMDLINE_TEST_BUFSIZE];
- cmdline_ipaddr_t result;
-
- snprintf(buf, sizeof(buf), "1.2.3.4");
- token.ipaddr_data.flags = CMDLINE_IPADDR_V4;
-
- /* null token */
- if (cmdline_parse_ipaddr(NULL, buf, (void*)&result,
- sizeof(result)) != -1) {
- printf("Error: parser accepted invalid parameters!\n");
- return -1;
- }
- /* null buffer */
- if (cmdline_parse_ipaddr((cmdline_parse_token_hdr_t*)&token,
- NULL, (void*)&result, sizeof(result)) != -1) {
- printf("Error: parser accepted invalid parameters!\n");
- return -1;
- }
- /* empty buffer */
- if (cmdline_parse_ipaddr((cmdline_parse_token_hdr_t*)&token,
- "", (void*)&result, sizeof(result)) != -1) {
- printf("Error: parser accepted invalid parameters!\n");
- return -1;
- }
- /* null result */
- if (cmdline_parse_ipaddr((cmdline_parse_token_hdr_t*)&token,
- buf, NULL, 0) == -1) {
- printf("Error: parser rejected null result!\n");
- return -1;
- }
-
- /* null token */
- if (cmdline_get_help_ipaddr(NULL, buf, 0) != -1) {
- printf("Error: help accepted invalid parameters!\n");
- return -1;
- }
- /* null buffer */
- if (cmdline_get_help_ipaddr((cmdline_parse_token_hdr_t*)&token,
- NULL, 0) != -1) {
- printf("Error: help accepted invalid parameters!\n");
- return -1;
- }
- return 0;
-}
diff --git a/app/test/test_cmdline_lib.c b/app/test/test_cmdline_lib.c
deleted file mode 100644
index 65b823a7..00000000
--- a/app/test/test_cmdline_lib.c
+++ /dev/null
@@ -1,263 +0,0 @@
-/*-
- * BSD LICENSE
- *
- * Copyright(c) 2010-2014 Intel Corporation. All rights reserved.
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * * Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * * Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in
- * the documentation and/or other materials provided with the
- * distribution.
- * * Neither the name of Intel Corporation nor the names of its
- * contributors may be used to endorse or promote products derived
- * from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
- * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
- * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#include <string.h>
-#include <stdio.h>
-#include <stdint.h>
-#include <stdarg.h>
-#include <stdlib.h>
-#include <errno.h>
-#include <termios.h>
-#include <ctype.h>
-#include <sys/queue.h>
-
-#include <cmdline_vt100.h>
-#include <cmdline_rdline.h>
-#include <cmdline_parse.h>
-#include <cmdline_socket.h>
-#include <cmdline.h>
-
-#include "test_cmdline.h"
-
-/****************************************************************/
-/* static functions required for some tests */
-static void
-valid_buffer(__attribute__((unused))struct rdline *rdl,
- __attribute__((unused))const char *buf,
- __attribute__((unused)) unsigned int size)
-{
-}
-
-static int
-complete_buffer(__attribute__((unused)) struct rdline *rdl,
- __attribute__((unused)) const char *buf,
- __attribute__((unused)) char *dstbuf,
- __attribute__((unused)) unsigned int dstsize,
- __attribute__((unused)) int *state)
-{
- return 0;
-}
-
-/****************************************************************/
-
-static int
-test_cmdline_parse_fns(void)
-{
- struct cmdline cl;
- int i = 0;
- char dst[CMDLINE_TEST_BUFSIZE];
-
- if (cmdline_parse(NULL, "buffer") >= 0)
- goto error;
- if (cmdline_parse(&cl, NULL) >= 0)
- goto error;
-
- if (cmdline_complete(NULL, "buffer", &i, dst, sizeof(dst)) >= 0)
- goto error;
- if (cmdline_complete(&cl, NULL, &i, dst, sizeof(dst)) >= 0)
- goto error;
- if (cmdline_complete(&cl, "buffer", NULL, dst, sizeof(dst)) >= 0)
- goto error;
- if (cmdline_complete(&cl, "buffer", &i, NULL, sizeof(dst)) >= 0)
- goto error;
-
- return 0;
-
-error:
- printf("Error: function accepted null parameter!\n");
- return -1;
-}
-
-static int
-test_cmdline_rdline_fns(void)
-{
- struct rdline rdl;
- rdline_write_char_t *wc = &cmdline_write_char;
- rdline_validate_t *v = &valid_buffer;
- rdline_complete_t *c = &complete_buffer;
-
- if (rdline_init(NULL, wc, v, c) >= 0)
- goto error;
- if (rdline_init(&rdl, NULL, v, c) >= 0)
- goto error;
- if (rdline_init(&rdl, wc, NULL, c) >= 0)
- goto error;
- if (rdline_init(&rdl, wc, v, NULL) >= 0)
- goto error;
- if (rdline_char_in(NULL, 0) >= 0)
- goto error;
- if (rdline_get_buffer(NULL) != NULL)
- goto error;
- if (rdline_add_history(NULL, "history") >= 0)
- goto error;
- if (rdline_add_history(&rdl, NULL) >= 0)
- goto error;
- if (rdline_get_history_item(NULL, 0) != NULL)
- goto error;
-
- /* void functions */
- rdline_newline(NULL, "prompt");
- rdline_newline(&rdl, NULL);
- rdline_stop(NULL);
- rdline_quit(NULL);
- rdline_restart(NULL);
- rdline_redisplay(NULL);
- rdline_reset(NULL);
- rdline_clear_history(NULL);
-
- return 0;
-
-error:
- printf("Error: function accepted null parameter!\n");
- return -1;
-}
-
-static int
-test_cmdline_vt100_fns(void)
-{
- if (vt100_parser(NULL, 0) >= 0) {
- printf("Error: function accepted null parameter!\n");
- return -1;
- }
-
- /* void functions */
- vt100_init(NULL);
-
- return 0;
-}
-
-static int
-test_cmdline_socket_fns(void)
-{
- cmdline_parse_ctx_t ctx;
-
- if (cmdline_stdin_new(NULL, "prompt") != NULL)
- goto error;
- if (cmdline_stdin_new(&ctx, NULL) != NULL)
- goto error;
- if (cmdline_file_new(NULL, "prompt", "/dev/null") != NULL)
- goto error;
- if (cmdline_file_new(&ctx, NULL, "/dev/null") != NULL)
- goto error;
- if (cmdline_file_new(&ctx, "prompt", NULL) != NULL)
- goto error;
- if (cmdline_file_new(&ctx, "prompt", "-/invalid/~/path") != NULL) {
- printf("Error: succeeded in opening invalid file for reading!");
- return -1;
- }
- if (cmdline_file_new(&ctx, "prompt", "/dev/null") == NULL) {
- printf("Error: failed to open /dev/null for reading!");
- return -1;
- }
-
- /* void functions */
- cmdline_stdin_exit(NULL);
-
- return 0;
-error:
- printf("Error: function accepted null parameter!\n");
- return -1;
-}
-
-static int
-test_cmdline_fns(void)
-{
- cmdline_parse_ctx_t ctx;
- struct cmdline cl, *tmp;
-
- memset(&ctx, 0, sizeof(ctx));
- tmp = cmdline_new(&ctx, "test", -1, -1);
- if (tmp == NULL)
- goto error;
-
- if (cmdline_new(NULL, "prompt", 0, 0) != NULL)
- goto error;
- if (cmdline_new(&ctx, NULL, 0, 0) != NULL)
- goto error;
- if (cmdline_in(NULL, "buffer", CMDLINE_TEST_BUFSIZE) >= 0)
- goto error;
- if (cmdline_in(&cl, NULL, CMDLINE_TEST_BUFSIZE) >= 0)
- goto error;
- if (cmdline_write_char(NULL, 0) >= 0)
- goto error;
-
- /* void functions */
- cmdline_set_prompt(NULL, "prompt");
- cmdline_free(NULL);
- cmdline_printf(NULL, "format");
- /* this should fail as stream handles are invalid */
- cmdline_printf(tmp, "format");
- cmdline_interact(NULL);
- cmdline_quit(NULL);
-
- /* check if void calls change anything when they should fail */
- cl = *tmp;
-
- cmdline_printf(&cl, NULL);
- if (memcmp(&cl, tmp, sizeof(cl))) goto mismatch;
- cmdline_set_prompt(&cl, NULL);
- if (memcmp(&cl, tmp, sizeof(cl))) goto mismatch;
- cmdline_in(&cl, NULL, CMDLINE_TEST_BUFSIZE);
- if (memcmp(&cl, tmp, sizeof(cl))) goto mismatch;
-
- cmdline_free(tmp);
-
- return 0;
-
-error:
- printf("Error: function accepted null parameter!\n");
- return -1;
-mismatch:
- printf("Error: data changed!\n");
- return -1;
-}
-
-/* test library functions. the point of these tests is not so much to test
- * functions' behaviour as it is to make sure there are no segfaults if
- * they are called with invalid parameters.
- */
-int
-test_cmdline_lib(void)
-{
- if (test_cmdline_parse_fns() < 0)
- return -1;
- if (test_cmdline_rdline_fns() < 0)
- return -1;
- if (test_cmdline_vt100_fns() < 0)
- return -1;
- if (test_cmdline_socket_fns() < 0)
- return -1;
- if (test_cmdline_fns() < 0)
- return -1;
- return 0;
-}
diff --git a/app/test/test_cmdline_num.c b/app/test/test_cmdline_num.c
deleted file mode 100644
index 04263d39..00000000
--- a/app/test/test_cmdline_num.c
+++ /dev/null
@@ -1,622 +0,0 @@
-/*-
- * BSD LICENSE
- *
- * Copyright(c) 2010-2014 Intel Corporation. All rights reserved.
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * * Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * * Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in
- * the documentation and/or other materials provided with the
- * distribution.
- * * Neither the name of Intel Corporation nor the names of its
- * contributors may be used to endorse or promote products derived
- * from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
- * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
- * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#include <stdio.h>
-#include <string.h>
-#include <inttypes.h>
-
-#include <rte_string_fns.h>
-
-#include <cmdline_parse.h>
-#include <cmdline_parse_num.h>
-
-#include "test_cmdline.h"
-
-struct num_unsigned_str {
- const char * str;
- uint64_t result;
-};
-
-struct num_signed_str {
- const char * str;
- int64_t result;
-};
-
-const struct num_unsigned_str num_valid_positive_strs[] = {
- /* decimal positive */
- {"0", 0 },
- {"127", INT8_MAX },
- {"128", INT8_MAX + 1 },
- {"255", UINT8_MAX },
- {"256", UINT8_MAX + 1 },
- {"32767", INT16_MAX },
- {"32768", INT16_MAX + 1 },
- {"65535", UINT16_MAX },
- {"65536", UINT16_MAX + 1 },
- {"2147483647", INT32_MAX },
- {"2147483648", INT32_MAX + 1U },
- {"4294967295", UINT32_MAX },
- {"4294967296", UINT32_MAX + 1ULL },
- {"9223372036854775807", INT64_MAX },
- {"9223372036854775808", INT64_MAX + 1ULL},
- {"18446744073709551615", UINT64_MAX },
- /* hexadecimal (no leading zeroes) */
- {"0x0", 0 },
- {"0x7F", INT8_MAX },
- {"0x80", INT8_MAX + 1 },
- {"0xFF", UINT8_MAX },
- {"0x100", UINT8_MAX + 1 },
- {"0x7FFF", INT16_MAX },
- {"0x8000", INT16_MAX + 1 },
- {"0xFFFF", UINT16_MAX },
- {"0x10000", UINT16_MAX + 1 },
- {"0x7FFFFFFF", INT32_MAX },
- {"0x80000000", INT32_MAX + 1U },
- {"0xFFFFFFFF", UINT32_MAX },
- {"0x100000000", UINT32_MAX + 1ULL },
- {"0x7FFFFFFFFFFFFFFF", INT64_MAX },
- {"0x8000000000000000", INT64_MAX + 1ULL},
- {"0xFFFFFFFFFFFFFFFF", UINT64_MAX },
- /* hexadecimal (with leading zeroes) */
- {"0x00", 0 },
- {"0x7F", INT8_MAX },
- {"0x80", INT8_MAX + 1 },
- {"0xFF", UINT8_MAX },
- {"0x0100", UINT8_MAX + 1 },
- {"0x7FFF", INT16_MAX },
- {"0x8000", INT16_MAX + 1 },
- {"0xFFFF", UINT16_MAX },
- {"0x00010000", UINT16_MAX + 1 },
- {"0x7FFFFFFF", INT32_MAX },
- {"0x80000000", INT32_MAX + 1U },
- {"0xFFFFFFFF", UINT32_MAX },
- {"0x0000000100000000", UINT32_MAX + 1ULL },
- {"0x7FFFFFFFFFFFFFFF", INT64_MAX },
- {"0x8000000000000000", INT64_MAX + 1ULL},
- {"0xFFFFFFFFFFFFFFFF", UINT64_MAX },
- /* check all characters */
- {"0x1234567890ABCDEF", 0x1234567890ABCDEFULL },
- {"0x1234567890abcdef", 0x1234567890ABCDEFULL },
- /* binary (no leading zeroes) */
- {"0b0", 0 },
- {"0b1111111", INT8_MAX },
- {"0b10000000", INT8_MAX + 1 },
- {"0b11111111", UINT8_MAX },
- {"0b100000000", UINT8_MAX + 1 },
- {"0b111111111111111", INT16_MAX },
- {"0b1000000000000000", INT16_MAX + 1 },
- {"0b1111111111111111", UINT16_MAX },
- {"0b10000000000000000", UINT16_MAX + 1 },
- {"0b1111111111111111111111111111111", INT32_MAX },
- {"0b10000000000000000000000000000000", INT32_MAX + 1U },
- {"0b11111111111111111111111111111111", UINT32_MAX },
- {"0b100000000000000000000000000000000", UINT32_MAX + 1ULL },
- {"0b111111111111111111111111111111111111111111111111111111111111111",
- INT64_MAX },
- {"0b1000000000000000000000000000000000000000000000000000000000000000",
- INT64_MAX + 1ULL},
- {"0b1111111111111111111111111111111111111111111111111111111111111111",
- UINT64_MAX },
- /* binary (with leading zeroes) */
- {"0b01111111", INT8_MAX },
- {"0b0000000100000000", UINT8_MAX + 1 },
- {"0b0111111111111111", INT16_MAX },
- {"0b00000000000000010000000000000000", UINT16_MAX + 1 },
- {"0b01111111111111111111111111111111", INT32_MAX },
- {"0b0000000000000000000000000000000100000000000000000000000000000000",
- UINT32_MAX + 1ULL },
- {"0b0111111111111111111111111111111111111111111111111111111111111111",
- INT64_MAX },
- /* octal */
- {"00", 0 },
- {"0177", INT8_MAX },
- {"0200", INT8_MAX + 1 },
- {"0377", UINT8_MAX },
- {"0400", UINT8_MAX + 1 },
- {"077777", INT16_MAX },
- {"0100000", INT16_MAX + 1 },
- {"0177777", UINT16_MAX },
- {"0200000", UINT16_MAX + 1 },
- {"017777777777", INT32_MAX },
- {"020000000000", INT32_MAX + 1U },
- {"037777777777", UINT32_MAX },
- {"040000000000", UINT32_MAX + 1ULL },
- {"0777777777777777777777", INT64_MAX },
- {"01000000000000000000000", INT64_MAX + 1ULL},
- {"01777777777777777777777", UINT64_MAX },
- /* check all numbers */
- {"012345670", 012345670 },
- {"076543210", 076543210 },
-};
-
-const struct num_signed_str num_valid_negative_strs[] = {
- /* deciman negative */
- {"-128", INT8_MIN },
- {"-129", INT8_MIN - 1 },
- {"-32768", INT16_MIN },
- {"-32769", INT16_MIN - 1 },
- {"-2147483648", INT32_MIN },
- {"-2147483649", INT32_MIN - 1LL },
- {"-9223372036854775808", INT64_MIN },
-};
-
-const struct num_unsigned_str num_garbage_positive_strs[] = {
- /* valid strings with garbage on the end, should still be valid */
- /* decimal */
- {"9223372036854775807\0garbage", INT64_MAX },
- {"9223372036854775807\tgarbage", INT64_MAX },
- {"9223372036854775807\rgarbage", INT64_MAX },
- {"9223372036854775807\ngarbage", INT64_MAX },
- {"9223372036854775807#garbage", INT64_MAX },
- {"9223372036854775807 garbage", INT64_MAX },
- /* hex */
- {"0x7FFFFFFFFFFFFFFF\0garbage", INT64_MAX },
- {"0x7FFFFFFFFFFFFFFF\tgarbage", INT64_MAX },
- {"0x7FFFFFFFFFFFFFFF\rgarbage", INT64_MAX },
- {"0x7FFFFFFFFFFFFFFF\ngarbage", INT64_MAX },
- {"0x7FFFFFFFFFFFFFFF#garbage", INT64_MAX },
- {"0x7FFFFFFFFFFFFFFF garbage", INT64_MAX },
- /* binary */
- {"0b1111111111111111111111111111111\0garbage", INT32_MAX },
- {"0b1111111111111111111111111111111\rgarbage", INT32_MAX },
- {"0b1111111111111111111111111111111\tgarbage", INT32_MAX },
- {"0b1111111111111111111111111111111\ngarbage", INT32_MAX },
- {"0b1111111111111111111111111111111#garbage", INT32_MAX },
- {"0b1111111111111111111111111111111 garbage", INT32_MAX },
- /* octal */
- {"01777777777777777777777\0garbage", UINT64_MAX },
- {"01777777777777777777777\rgarbage", UINT64_MAX },
- {"01777777777777777777777\tgarbage", UINT64_MAX },
- {"01777777777777777777777\ngarbage", UINT64_MAX },
- {"01777777777777777777777#garbage", UINT64_MAX },
- {"01777777777777777777777 garbage", UINT64_MAX },
-};
-
-const struct num_signed_str num_garbage_negative_strs[] = {
- /* valid strings with garbage on the end, should still be valid */
- {"-9223372036854775808\0garbage", INT64_MIN },
- {"-9223372036854775808\rgarbage", INT64_MIN },
- {"-9223372036854775808\tgarbage", INT64_MIN },
- {"-9223372036854775808\ngarbage", INT64_MIN },
- {"-9223372036854775808#garbage", INT64_MIN },
- {"-9223372036854775808 garbage", INT64_MIN },
-};
-
-const char * num_invalid_strs[] = {
- "18446744073709551616", /* out of range unsigned */
- "-9223372036854775809", /* out of range negative signed */
- "0x10000000000000000", /* out of range hex */
- /* out of range binary */
- "0b10000000000000000000000000000000000000000000000000000000000000000",
- "020000000000000000000000", /* out of range octal */
- /* wrong chars */
- "0123456239",
- "0x1234580AGE",
- "0b0111010101g001",
- "0b01110101017001",
- /* false negative numbers */
- "-12345F623",
- "-0x1234580A",
- "-0b0111010101",
- /* too long (128+ chars) */
- "0b1111000011110000111100001111000011110000111100001111000011110000"
- "1111000011110000111100001111000011110000111100001111000011110000",
- "1E3",
- "0A",
- "-B",
- "+4",
- "1.23G",
- "",
- " ",
- "#",
- "\r",
- "\t",
- "\n",
- "\0",
-};
-
-#define NUM_POSITIVE_STRS_SIZE \
- (sizeof(num_valid_positive_strs) / sizeof(num_valid_positive_strs[0]))
-#define NUM_NEGATIVE_STRS_SIZE \
- (sizeof(num_valid_negative_strs) / sizeof(num_valid_negative_strs[0]))
-#define NUM_POSITIVE_GARBAGE_STRS_SIZE \
- (sizeof(num_garbage_positive_strs) / sizeof(num_garbage_positive_strs[0]))
-#define NUM_NEGATIVE_GARBAGE_STRS_SIZE \
- (sizeof(num_garbage_negative_strs) / sizeof(num_garbage_negative_strs[0]))
-#define NUM_INVALID_STRS_SIZE \
- (sizeof(num_invalid_strs) / sizeof(num_invalid_strs[0]))
-
-
-
-static int
-can_parse_unsigned(uint64_t expected_result, enum cmdline_numtype type)
-{
- switch (type) {
- case UINT8:
- if (expected_result > UINT8_MAX)
- return 0;
- break;
- case UINT16:
- if (expected_result > UINT16_MAX)
- return 0;
- break;
- case UINT32:
- if (expected_result > UINT32_MAX)
- return 0;
- break;
- case INT8:
- if (expected_result > INT8_MAX)
- return 0;
- break;
- case INT16:
- if (expected_result > INT16_MAX)
- return 0;
- break;
- case INT32:
- if (expected_result > INT32_MAX)
- return 0;
- break;
- case INT64:
- if (expected_result > INT64_MAX)
- return 0;
- break;
- default:
- return 1;
- }
- return 1;
-}
-
-static int
-can_parse_signed(int64_t expected_result, enum cmdline_numtype type)
-{
- switch (type) {
- case UINT8:
- if (expected_result > UINT8_MAX || expected_result < 0)
- return 0;
- break;
- case UINT16:
- if (expected_result > UINT16_MAX || expected_result < 0)
- return 0;
- break;
- case UINT32:
- if (expected_result > UINT32_MAX || expected_result < 0)
- return 0;
- break;
- case UINT64:
- if (expected_result < 0)
- return 0;
- case INT8:
- if (expected_result > INT8_MAX || expected_result < INT8_MIN)
- return 0;
- break;
- case INT16:
- if (expected_result > INT16_MAX || expected_result < INT16_MIN)
- return 0;
- break;
- case INT32:
- if (expected_result > INT32_MAX || expected_result < INT32_MIN)
- return 0;
- break;
- default:
- return 1;
- }
- return 1;
-}
-
-/* test invalid parameters */
-int
-test_parse_num_invalid_param(void)
-{
- char buf[CMDLINE_TEST_BUFSIZE];
- uint32_t result;
- cmdline_parse_token_num_t token;
- int ret = 0;
-
- /* set up a token */
- token.num_data.type = UINT32;
-
- /* copy string to buffer */
- snprintf(buf, sizeof(buf), "%s",
- num_valid_positive_strs[0].str);
-
- /* try all null */
- ret = cmdline_parse_num(NULL, NULL, NULL, 0);
- if (ret != -1) {
- printf("Error: parser accepted null parameters!\n");
- return -1;
- }
-
- /* try null token */
- ret = cmdline_parse_num(NULL, buf, (void*)&result, sizeof(result));
- if (ret != -1) {
- printf("Error: parser accepted null token!\n");
- return -1;
- }
-
- /* try null buf */
- ret = cmdline_parse_num((cmdline_parse_token_hdr_t*)&token, NULL,
- (void*)&result, sizeof(result));
- if (ret != -1) {
- printf("Error: parser accepted null string!\n");
- return -1;
- }
-
- /* try null result */
- ret = cmdline_parse_num((cmdline_parse_token_hdr_t*)&token, buf,
- NULL, 0);
- if (ret == -1) {
- printf("Error: parser rejected null result!\n");
- return -1;
- }
-
- /* test help function */
- memset(&buf, 0, sizeof(buf));
-
- /* try all null */
- ret = cmdline_get_help_num(NULL, NULL, 0);
- if (ret != -1) {
- printf("Error: help function accepted null parameters!\n");
- return -1;
- }
-
- /* try null token */
- ret = cmdline_get_help_num(NULL, buf, sizeof(buf));
- if (ret != -1) {
- printf("Error: help function accepted null token!\n");
- return -1;
- }
-
- /* coverage! */
- ret = cmdline_get_help_num((cmdline_parse_token_hdr_t*)&token, buf, sizeof(buf));
- if (ret < 0) {
- printf("Error: help function failed with valid parameters!\n");
- return -1;
- }
-
- return 0;
-}
-/* test valid parameters but invalid data */
-int
-test_parse_num_invalid_data(void)
-{
- enum cmdline_numtype type;
- int ret = 0;
- unsigned i;
- char buf[CMDLINE_TEST_BUFSIZE];
- uint64_t result; /* pick largest buffer */
- cmdline_parse_token_num_t token;
-
- /* cycle through all possible parsed types */
- for (type = UINT8; type <= INT64; type++) {
- token.num_data.type = type;
-
- /* test full strings */
- for (i = 0; i < NUM_INVALID_STRS_SIZE; i++) {
-
- memset(&result, 0, sizeof(uint64_t));
- memset(&buf, 0, sizeof(buf));
-
- ret = cmdline_parse_num((cmdline_parse_token_hdr_t*)&token,
- num_invalid_strs[i], (void*)&result, sizeof(result));
- if (ret != -1) {
- /* get some info about what we are trying to parse */
- cmdline_get_help_num((cmdline_parse_token_hdr_t*)&token,
- buf, sizeof(buf));
-
- printf("Error: parsing %s as %s succeeded!\n",
- num_invalid_strs[i], buf);
- return -1;
- }
- }
- }
- return 0;
-}
-
-/* test valid parameters and data */
-int
-test_parse_num_valid(void)
-{
- int ret = 0;
- enum cmdline_numtype type;
- unsigned i;
- char buf[CMDLINE_TEST_BUFSIZE];
- uint64_t result;
- cmdline_parse_token_num_t token;
-
- /** valid strings **/
-
- /* cycle through all possible parsed types */
- for (type = UINT8; type <= INT64; type++) {
- token.num_data.type = type;
-
- /* test positive strings */
- for (i = 0; i < NUM_POSITIVE_STRS_SIZE; i++) {
- result = 0;
- memset(&buf, 0, sizeof(buf));
-
- cmdline_get_help_num((cmdline_parse_token_hdr_t*)&token,
- buf, sizeof(buf));
-
- ret = cmdline_parse_num((cmdline_parse_token_hdr_t*) &token,
- num_valid_positive_strs[i].str,
- (void*)&result, sizeof(result));
-
- /* if it should have passed but didn't, or if it should have failed but didn't */
- if ((ret < 0) == (can_parse_unsigned(num_valid_positive_strs[i].result, type) > 0)) {
- printf("Error: parser behaves unexpectedly when parsing %s as %s!\n",
- num_valid_positive_strs[i].str, buf);
- return -1;
- }
- /* check if result matches what it should have matched
- * since unsigned numbers don't care about number of bits, we can just convert
- * everything to uint64_t without any worries. */
- if (ret > 0 && num_valid_positive_strs[i].result != result) {
- printf("Error: parsing %s as %s failed: result mismatch!\n",
- num_valid_positive_strs[i].str, buf);
- return -1;
- }
- }
-
- /* test negative strings */
- for (i = 0; i < NUM_NEGATIVE_STRS_SIZE; i++) {
- result = 0;
- memset(&buf, 0, sizeof(buf));
-
- cmdline_get_help_num((cmdline_parse_token_hdr_t*)&token,
- buf, sizeof(buf));
-
- ret = cmdline_parse_num((cmdline_parse_token_hdr_t*) &token,
- num_valid_negative_strs[i].str,
- (void*)&result, sizeof(result));
-
- /* if it should have passed but didn't, or if it should have failed but didn't */
- if ((ret < 0) == (can_parse_signed(num_valid_negative_strs[i].result, type) > 0)) {
- printf("Error: parser behaves unexpectedly when parsing %s as %s!\n",
- num_valid_negative_strs[i].str, buf);
- return -1;
- }
- /* check if result matches what it should have matched
- * the result is signed in this case, so we have to account for that */
- if (ret > 0) {
- /* detect negative */
- switch (type) {
- case INT8:
- result = (int8_t) result;
- break;
- case INT16:
- result = (int16_t) result;
- break;
- case INT32:
- result = (int32_t) result;
- break;
- default:
- break;
- }
- if (num_valid_negative_strs[i].result == (int64_t) result)
- continue;
- printf("Error: parsing %s as %s failed: result mismatch!\n",
- num_valid_negative_strs[i].str, buf);
- return -1;
- }
- }
- }
-
- /** garbage strings **/
-
- /* cycle through all possible parsed types */
- for (type = UINT8; type <= INT64; type++) {
- token.num_data.type = type;
-
- /* test positive garbage strings */
- for (i = 0; i < NUM_POSITIVE_GARBAGE_STRS_SIZE; i++) {
- result = 0;
- memset(&buf, 0, sizeof(buf));
-
- cmdline_get_help_num((cmdline_parse_token_hdr_t*)&token,
- buf, sizeof(buf));
-
- ret = cmdline_parse_num((cmdline_parse_token_hdr_t*) &token,
- num_garbage_positive_strs[i].str,
- (void*)&result, sizeof(result));
-
- /* if it should have passed but didn't, or if it should have failed but didn't */
- if ((ret < 0) == (can_parse_unsigned(num_garbage_positive_strs[i].result, type) > 0)) {
- printf("Error: parser behaves unexpectedly when parsing %s as %s!\n",
- num_garbage_positive_strs[i].str, buf);
- return -1;
- }
- /* check if result matches what it should have matched
- * since unsigned numbers don't care about number of bits, we can just convert
- * everything to uint64_t without any worries. */
- if (ret > 0 && num_garbage_positive_strs[i].result != result) {
- printf("Error: parsing %s as %s failed: result mismatch!\n",
- num_garbage_positive_strs[i].str, buf);
- return -1;
- }
- }
-
- /* test negative strings */
- for (i = 0; i < NUM_NEGATIVE_GARBAGE_STRS_SIZE; i++) {
- result = 0;
- memset(&buf, 0, sizeof(buf));
-
- cmdline_get_help_num((cmdline_parse_token_hdr_t*)&token,
- buf, sizeof(buf));
-
- ret = cmdline_parse_num((cmdline_parse_token_hdr_t*) &token,
- num_garbage_negative_strs[i].str,
- (void*)&result, sizeof(result));
-
- /* if it should have passed but didn't, or if it should have failed but didn't */
- if ((ret < 0) == (can_parse_signed(num_garbage_negative_strs[i].result, type) > 0)) {
- printf("Error: parser behaves unexpectedly when parsing %s as %s!\n",
- num_garbage_negative_strs[i].str, buf);
- return -1;
- }
- /* check if result matches what it should have matched
- * the result is signed in this case, so we have to account for that */
- if (ret > 0) {
- /* detect negative */
- switch (type) {
- case INT8:
- if (result & (INT8_MAX + 1))
- result |= 0xFFFFFFFFFFFFFF00ULL;
- break;
- case INT16:
- if (result & (INT16_MAX + 1))
- result |= 0xFFFFFFFFFFFF0000ULL;
- break;
- case INT32:
- if (result & (INT32_MAX + 1ULL))
- result |= 0xFFFFFFFF00000000ULL;
- break;
- default:
- break;
- }
- if (num_garbage_negative_strs[i].result == (int64_t) result)
- continue;
- printf("Error: parsing %s as %s failed: result mismatch!\n",
- num_garbage_negative_strs[i].str, buf);
- return -1;
- }
- }
- }
-
- memset(&buf, 0, sizeof(buf));
-
- /* coverage! */
- cmdline_get_help_num((cmdline_parse_token_hdr_t*)&token,
- buf, sizeof(buf));
-
- return 0;
-}
diff --git a/app/test/test_cmdline_portlist.c b/app/test/test_cmdline_portlist.c
deleted file mode 100644
index b9664b0e..00000000
--- a/app/test/test_cmdline_portlist.c
+++ /dev/null
@@ -1,250 +0,0 @@
-/*-
- * BSD LICENSE
- *
- * Copyright(c) 2010-2014 Intel Corporation. All rights reserved.
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * * Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * * Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in
- * the documentation and/or other materials provided with the
- * distribution.
- * * Neither the name of Intel Corporation nor the names of its
- * contributors may be used to endorse or promote products derived
- * from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
- * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
- * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#include <stdio.h>
-#include <string.h>
-#include <inttypes.h>
-
-#include <cmdline_parse.h>
-#include <cmdline_parse_portlist.h>
-
-#include "test_cmdline.h"
-
-struct portlist_str {
- const char * str;
- uint32_t portmap;
-};
-
-/* valid strings */
-const struct portlist_str portlist_valid_strs[] = {
- {"0", 0x1U },
- {"0-10", 0x7FFU},
- {"10-20", 0x1FFC00U},
- {"all", UINT32_MAX},
- {"0,1,2,3", 0xFU},
- {"0,1-5", 0x3FU},
- {"0,0,0", 0x1U},
- {"31,0-10,15", 0x800087FFU},
- {"0000", 0x1U},
- {"00,01,02,03", 0xFU},
- {"000,001,002,003", 0xFU},
-};
-
-/* valid strings but with garbage at the end.
- * these strings should still be valid because parser checks
- * for end of token, which is either a space/tab, a newline/return,
- * or a hash sign.
- */
-
-const char * portlist_garbage_strs[] = {
- "0-31 garbage",
- "0-31#garbage",
- "0-31\0garbage",
- "0-31\ngarbage",
- "0-31\rgarbage",
- "0-31\tgarbage",
- "0,1,2,3-31 garbage",
- "0,1,2,3-31#garbage",
- "0,1,2,3-31\0garbage",
- "0,1,2,3-31\ngarbage",
- "0,1,2,3-31\rgarbage",
- "0,1,2,3-31\tgarbage",
- "all garbage",
- "all#garbage",
- "all\0garbage",
- "all\ngarbage",
- "all\rgarbage",
- "all\tgarbage",
-};
-
-/* invalid strings */
-const char * portlist_invalid_strs[] = {
- /* valid syntax, invalid chars */
- "A-B",
- "0-S",
- "1,2,3,4,Q",
- "A-4,3-15",
- "0-31invalid",
- /* valid chars, invalid syntax */
- "1, 2",
- "1- 4",
- ",2",
- ",2 ",
- "-1, 4",
- "5-1",
- "2-",
- /* misc */
- "-"
- "a",
- "A",
- ",",
- "#",
- " ",
- "\0",
- "",
- /* too long */
- "0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,"
- "0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,2",
-};
-
-#define PORTLIST_VALID_STRS_SIZE \
- (sizeof(portlist_valid_strs) / sizeof(portlist_valid_strs[0]))
-#define PORTLIST_GARBAGE_STRS_SIZE \
- (sizeof(portlist_garbage_strs) / sizeof(portlist_garbage_strs[0]))
-#define PORTLIST_INVALID_STRS_SIZE \
- (sizeof(portlist_invalid_strs) / sizeof(portlist_invalid_strs[0]))
-
-
-
-
-/* test invalid parameters */
-int
-test_parse_portlist_invalid_param(void)
-{
- cmdline_portlist_t result;
- char buf[CMDLINE_TEST_BUFSIZE];
- int ret;
-
- memset(&buf, 0, sizeof(buf));
- memset(&result, 0, sizeof(cmdline_portlist_t));
-
- /* try all null */
- ret = cmdline_parse_portlist(NULL, NULL, NULL, 0);
- if (ret != -1) {
- printf("Error: parser accepted null parameters!\n");
- return -1;
- }
-
- /* try null buf */
- ret = cmdline_parse_portlist(NULL, NULL, (void*)&result,
- sizeof(result));
- if (ret != -1) {
- printf("Error: parser accepted null string!\n");
- return -1;
- }
-
- /* try null result */
- ret = cmdline_parse_portlist(NULL, portlist_valid_strs[0].str, NULL, 0);
- if (ret == -1) {
- printf("Error: parser rejected null result!\n");
- return -1;
- }
-
- /* token is not used in ether_parse anyway so there's no point in
- * testing it */
-
- /* test help function */
-
- /* coverage! */
- ret = cmdline_get_help_portlist(NULL, buf, sizeof(buf));
- if (ret < 0) {
- printf("Error: help function failed with valid parameters!\n");
- return -1;
- }
-
- return 0;
-}
-
-/* test valid parameters but invalid data */
-int
-test_parse_portlist_invalid_data(void)
-{
- int ret = 0;
- unsigned i;
- cmdline_portlist_t result;
-
- /* test invalid strings */
- for (i = 0; i < PORTLIST_INVALID_STRS_SIZE; i++) {
-
- memset(&result, 0, sizeof(cmdline_portlist_t));
-
- ret = cmdline_parse_portlist(NULL, portlist_invalid_strs[i],
- (void*)&result, sizeof(result));
- if (ret != -1) {
- printf("Error: parsing %s succeeded!\n",
- portlist_invalid_strs[i]);
- return -1;
- }
- }
-
- return 0;
-}
-
-/* test valid parameters and data */
-int
-test_parse_portlist_valid(void)
-{
- int ret = 0;
- unsigned i;
- cmdline_portlist_t result;
-
- /* test full strings */
- for (i = 0; i < PORTLIST_VALID_STRS_SIZE; i++) {
-
- memset(&result, 0, sizeof(cmdline_portlist_t));
-
- ret = cmdline_parse_portlist(NULL, portlist_valid_strs[i].str,
- (void*)&result, sizeof(result));
- if (ret < 0) {
- printf("Error: parsing %s failed!\n",
- portlist_valid_strs[i].str);
- return -1;
- }
- if (result.map != portlist_valid_strs[i].portmap) {
- printf("Error: parsing %s failed: map mismatch!\n",
- portlist_valid_strs[i].str);
- return -1;
- }
- }
-
- /* test garbage strings */
- for (i = 0; i < PORTLIST_GARBAGE_STRS_SIZE; i++) {
-
- memset(&result, 0, sizeof(cmdline_portlist_t));
-
- ret = cmdline_parse_portlist(NULL, portlist_garbage_strs[i],
- (void*)&result, sizeof(result));
- if (ret < 0) {
- printf("Error: parsing %s failed!\n",
- portlist_garbage_strs[i]);
- return -1;
- }
- if (result.map != UINT32_MAX) {
- printf("Error: parsing %s failed: map mismatch!\n",
- portlist_garbage_strs[i]);
- return -1;
- }
- }
-
- return 0;
-}
diff --git a/app/test/test_cmdline_string.c b/app/test/test_cmdline_string.c
deleted file mode 100644
index c5bb9c0c..00000000
--- a/app/test/test_cmdline_string.c
+++ /dev/null
@@ -1,412 +0,0 @@
-/*-
- * BSD LICENSE
- *
- * Copyright(c) 2010-2014 Intel Corporation. All rights reserved.
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * * Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * * Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in
- * the documentation and/or other materials provided with the
- * distribution.
- * * Neither the name of Intel Corporation nor the names of its
- * contributors may be used to endorse or promote products derived
- * from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
- * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
- * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#include <stdio.h>
-#include <string.h>
-#include <inttypes.h>
-
-#include <rte_common.h>
-#include <rte_string_fns.h>
-
-#include <cmdline_parse.h>
-#include <cmdline_parse_string.h>
-
-#include "test_cmdline.h"
-
-/* structures needed to run tests */
-
-struct string_elt_str {
- const char * str; /* parsed string */
- const char * result; /* expected string */
- int idx; /* position at which result is expected to be */
-};
-
-struct string_elt_str string_elt_strs[] = {
- {"one#two#three", "three", 2},
- {"one#two with spaces#three", "three", 2},
- {"one#two\twith\ttabs#three", "three", 2},
- {"one#two\rwith\rreturns#three", "three", 2},
- {"one#two\nwith\nnewlines#three", "three", 2},
- {"one#two#three", "one", 0},
- {"one#two#three", "two", 1},
- {"one#two\0three", "two", 1},
- {"one#two with spaces#three", "two with spaces", 1},
- {"one#two\twith\ttabs#three", "two\twith\ttabs", 1},
- {"one#two\rwith\rreturns#three", "two\rwith\rreturns", 1},
- {"one#two\nwith\nnewlines#three", "two\nwith\nnewlines", 1},
-};
-
-#if (CMDLINE_TEST_BUFSIZE < STR_TOKEN_SIZE) \
-|| (CMDLINE_TEST_BUFSIZE < STR_MULTI_TOKEN_SIZE)
-#undef CMDLINE_TEST_BUFSIZE
-#define CMDLINE_TEST_BUFSIZE RTE_MAX(STR_TOKEN_SIZE, STR_MULTI_TOKEN_SIZE)
-#endif
-
-struct string_nb_str {
- const char * str; /* parsed string */
- int nb_strs; /* expected number of strings in str */
-};
-
-struct string_nb_str string_nb_strs[] = {
- {"one#two#three", 3},
- {"one", 1},
- {"one# \t two \r # three \n #four", 4},
-};
-
-
-
-struct string_parse_str {
- const char * str; /* parsed string */
- const char * fixed_str; /* parsing mode (any, fixed or multi) */
- const char * result; /* expected result */
-};
-
-struct string_parse_str string_parse_strs[] = {
- {"one", NULL, "one"}, /* any string */
- {"two", "one#two#three", "two"}, /* multiple choice string */
- {"three", "three", "three"}, /* fixed string */
- {"three", "one#two with\rgarbage\tcharacters\n#three", "three"},
- {"two with\rgarbage\tcharacters\n",
- "one#two with\rgarbage\tcharacters\n#three",
- "two with\rgarbage\tcharacters\n"},
- {"one two", "one", "one"}, /* fixed string */
- {"one two", TOKEN_STRING_MULTI, "one two"}, /* multi string */
- {"one two", NULL, "one"}, /* any string */
- {"one two #three", TOKEN_STRING_MULTI, "one two "},
- /* multi string with comment */
-};
-
-
-
-struct string_invalid_str {
- const char * str; /* parsed string */
- const char * fixed_str; /* parsing mode (any, fixed or multi) */
-};
-
-struct string_invalid_str string_invalid_strs[] = {
- {"invalid", "one"}, /* fixed string */
- {"invalid", "one#two#three"}, /* multiple choice string */
- {"invalid", "invalidone"}, /* string that starts the same */
- {"invalidone", "invalid"}, /* string that starts the same */
- {"toolong!!!toolong!!!toolong!!!toolong!!!toolong!!!toolong!!!"
- "toolong!!!toolong!!!toolong!!!toolong!!!toolong!!!toolong!!!"
- "toolong!!!", NULL },
- {"toolong!!!toolong!!!toolong!!!toolong!!!toolong!!!toolong!!!"
- "toolong!!!toolong!!!toolong!!!toolong!!!toolong!!!toolong!!!"
- "toolong!!!", "fixed" },
- {"toolong!!!toolong!!!toolong!!!toolong!!!toolong!!!toolong!!!"
- "toolong!!!toolong!!!toolong!!!toolong!!!toolong!!!toolong!!!"
- "toolong!!!", "multi#choice#string" },
- {"invalid",
- "toolong!!!toolong!!!toolong!!!toolong!!!toolong!!!toolong!!!"
- "toolong!!!toolong!!!toolong!!!toolong!!!toolong!!!toolong!!!"
- "toolong!!!" },
- {"", "invalid"}
-};
-
-
-
-const char * string_help_strs[] = {
- NULL,
- "fixed_str",
- "multi#str",
-};
-
-
-
-#define STRING_PARSE_STRS_SIZE \
- (sizeof(string_parse_strs) / sizeof(string_parse_strs[0]))
-#define STRING_HELP_STRS_SIZE \
- (sizeof(string_help_strs) / sizeof(string_help_strs[0]))
-#define STRING_ELT_STRS_SIZE \
- (sizeof(string_elt_strs) / sizeof(string_elt_strs[0]))
-#define STRING_NB_STRS_SIZE \
- (sizeof(string_nb_strs) / sizeof(string_nb_strs[0]))
-#define STRING_INVALID_STRS_SIZE \
- (sizeof(string_invalid_strs) / sizeof(string_invalid_strs[0]))
-
-#define SMALL_BUF 8
-
-/* test invalid parameters */
-int
-test_parse_string_invalid_param(void)
-{
- cmdline_parse_token_string_t token;
- int result;
- char buf[CMDLINE_TEST_BUFSIZE];
-
- memset(&token, 0, sizeof(token));
-
- snprintf(buf, sizeof(buf), "buffer");
-
- /* test null token */
- if (cmdline_get_help_string(
- NULL, buf, 0) != -1) {
- printf("Error: function accepted null token!\n");
- return -1;
- }
- if (cmdline_complete_get_elt_string(
- NULL, 0, buf, 0) != -1) {
- printf("Error: function accepted null token!\n");
- return -1;
- }
- if (cmdline_complete_get_nb_string(NULL) != -1) {
- printf("Error: function accepted null token!\n");
- return -1;
- }
- if (cmdline_parse_string(NULL, buf, NULL, 0) != -1) {
- printf("Error: function accepted null token!\n");
- return -1;
- }
- /* test null buffer */
- if (cmdline_complete_get_elt_string(
- (cmdline_parse_token_hdr_t*)&token, 0, NULL, 0) != -1) {
- printf("Error: function accepted null buffer!\n");
- return -1;
- }
- if (cmdline_parse_string(
- (cmdline_parse_token_hdr_t*)&token, NULL,
- (void*)&result, sizeof(result)) != -1) {
- printf("Error: function accepted null buffer!\n");
- return -1;
- }
- if (cmdline_get_help_string(
- (cmdline_parse_token_hdr_t*)&token, NULL, 0) != -1) {
- printf("Error: function accepted null buffer!\n");
- return -1;
- }
- /* test null result */
- if (cmdline_parse_string(
- (cmdline_parse_token_hdr_t*)&token, buf, NULL, 0) == -1) {
- printf("Error: function rejected null result!\n");
- return -1;
- }
- /* test negative index */
- if (cmdline_complete_get_elt_string(
- (cmdline_parse_token_hdr_t*)&token, -1, buf, 0) != -1) {
- printf("Error: function accepted negative index!\n");
- return -1;
- }
- return 0;
-}
-
-/* test valid parameters but invalid data */
-int
-test_parse_string_invalid_data(void)
-{
- cmdline_parse_token_string_t token;
- cmdline_parse_token_string_t help_token;
- char buf[CMDLINE_TEST_BUFSIZE];
- char help_str[CMDLINE_TEST_BUFSIZE];
- char small_buf[SMALL_BUF];
- unsigned i;
-
- /* test parsing invalid strings */
- for (i = 0; i < STRING_INVALID_STRS_SIZE; i++) {
- memset(&token, 0, sizeof(token));
- memset(buf, 0, sizeof(buf));
-
- /* prepare test token data */
- token.string_data.str = string_invalid_strs[i].fixed_str;
-
- if (cmdline_parse_string((cmdline_parse_token_hdr_t*)&token,
- string_invalid_strs[i].str, (void*)buf,
- sizeof(buf)) != -1) {
- memset(help_str, 0, sizeof(help_str));
- memset(&help_token, 0, sizeof(help_token));
-
- help_token.string_data.str = string_invalid_strs[i].fixed_str;
-
- /* get parse type so we can give a good error message */
- cmdline_get_help_string((cmdline_parse_token_hdr_t*)&token, help_str,
- sizeof(help_str));
-
- printf("Error: parsing %s as %s succeeded!\n",
- string_invalid_strs[i].str, help_str);
- return -1;
- }
- }
-
- /* misc tests (big comments signify test cases) */
- memset(&token, 0, sizeof(token));
- memset(small_buf, 0, sizeof(small_buf));
-
- /*
- * try to get element from a null token
- */
- token.string_data.str = NULL;
- if (cmdline_complete_get_elt_string(
- (cmdline_parse_token_hdr_t*)&token, 1,
- buf, sizeof(buf)) != -1) {
- printf("Error: getting token from null token string!\n");
- return -1;
- }
-
- /*
- * try to get element into a buffer that is too small
- */
- token.string_data.str = "too_small_buffer";
- if (cmdline_complete_get_elt_string(
- (cmdline_parse_token_hdr_t*)&token, 0,
- small_buf, sizeof(small_buf)) != -1) {
- printf("Error: writing token into too small a buffer succeeded!\n");
- return -1;
- }
-
- /*
- * get help string written into a buffer smaller than help string
- * truncation should occur
- */
- token.string_data.str = NULL;
- if (cmdline_get_help_string(
- (cmdline_parse_token_hdr_t*)&token,
- small_buf, sizeof(small_buf)) == -1) {
- printf("Error: writing help string into too small a buffer failed!\n");
- return -1;
- }
- /* get help string for "any string" so we can compare it with small_buf */
- cmdline_get_help_string((cmdline_parse_token_hdr_t*)&token, help_str,
- sizeof(help_str));
- if (strncmp(small_buf, help_str, sizeof(small_buf) - 1)) {
- printf("Error: help string mismatch!\n");
- return -1;
- }
- /* check null terminator */
- if (small_buf[sizeof(small_buf) - 1] != '\0') {
- printf("Error: small buffer doesn't have a null terminator!\n");
- return -1;
- }
-
- /*
- * try to count tokens in a null token
- */
- token.string_data.str = NULL;
- if (cmdline_complete_get_nb_string(
- (cmdline_parse_token_hdr_t*)&token) != 0) {
- printf("Error: getting token count from null token succeeded!\n");
- return -1;
- }
-
- return 0;
-}
-
-/* test valid parameters and data */
-int
-test_parse_string_valid(void)
-{
- cmdline_parse_token_string_t token;
- cmdline_parse_token_string_t help_token;
- char buf[CMDLINE_TEST_BUFSIZE];
- char help_str[CMDLINE_TEST_BUFSIZE];
- unsigned i;
-
- /* test parsing strings */
- for (i = 0; i < STRING_PARSE_STRS_SIZE; i++) {
- memset(&token, 0, sizeof(token));
- memset(buf, 0, sizeof(buf));
-
- token.string_data.str = string_parse_strs[i].fixed_str;
-
- if (cmdline_parse_string((cmdline_parse_token_hdr_t*)&token,
- string_parse_strs[i].str, (void*)buf,
- sizeof(buf)) < 0) {
-
- /* clean help data */
- memset(&help_token, 0, sizeof(help_token));
- memset(help_str, 0, sizeof(help_str));
-
- /* prepare help token */
- help_token.string_data.str = string_parse_strs[i].fixed_str;
-
- /* get help string so that we get an informative error message */
- cmdline_get_help_string((cmdline_parse_token_hdr_t*)&token, help_str,
- sizeof(help_str));
-
- printf("Error: parsing %s as %s failed!\n",
- string_parse_strs[i].str, help_str);
- return -1;
- }
- if (strcmp(buf, string_parse_strs[i].result) != 0) {
- printf("Error: result mismatch!\n");
- return -1;
- }
- }
-
- /* get number of string tokens and verify it's correct */
- for (i = 0; i < STRING_NB_STRS_SIZE; i++) {
- memset(&token, 0, sizeof(token));
-
- token.string_data.str = string_nb_strs[i].str;
-
- if (cmdline_complete_get_nb_string(
- (cmdline_parse_token_hdr_t*)&token) <
- string_nb_strs[i].nb_strs) {
- printf("Error: strings count mismatch!\n");
- return -1;
- }
- }
-
- /* get token at specified position and verify it's correct */
- for (i = 0; i < STRING_ELT_STRS_SIZE; i++) {
- memset(&token, 0, sizeof(token));
- memset(buf, 0, sizeof(buf));
-
- token.string_data.str = string_elt_strs[i].str;
-
- if (cmdline_complete_get_elt_string(
- (cmdline_parse_token_hdr_t*)&token, string_elt_strs[i].idx,
- buf, sizeof(buf)) < 0) {
- printf("Error: getting string element failed!\n");
- return -1;
- }
- if (strncmp(buf, string_elt_strs[i].result,
- sizeof(buf)) != 0) {
- printf("Error: result mismatch!\n");
- return -1;
- }
- }
-
- /* cover all cases with help strings */
- for (i = 0; i < STRING_HELP_STRS_SIZE; i++) {
- memset(&help_token, 0, sizeof(help_token));
- memset(help_str, 0, sizeof(help_str));
- help_token.string_data.str = string_help_strs[i];
- if (cmdline_get_help_string((cmdline_parse_token_hdr_t*)&help_token,
- help_str, sizeof(help_str)) < 0) {
- printf("Error: help operation failed!\n");
- return -1;
- }
- }
-
- return 0;
-}
diff --git a/app/test/test_common.c b/app/test/test_common.c
deleted file mode 100644
index 8effa2f9..00000000
--- a/app/test/test_common.c
+++ /dev/null
@@ -1,172 +0,0 @@
-/*-
- * BSD LICENSE
- *
- * Copyright(c) 2010-2014 Intel Corporation. All rights reserved.
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * * Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * * Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in
- * the documentation and/or other materials provided with the
- * distribution.
- * * Neither the name of Intel Corporation nor the names of its
- * contributors may be used to endorse or promote products derived
- * from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
- * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
- * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#include <stdio.h>
-#include <string.h>
-#include <rte_common.h>
-#include <rte_hexdump.h>
-
-#include "test.h"
-
-#define MAX_NUM 1 << 20
-
-#define FAIL(x)\
- {printf(x "() test failed!\n");\
- return -1;}
-
-/* this is really a sanity check */
-static int
-test_macros(int __rte_unused unused_parm)
-{
-#define SMALLER 0x1000U
-#define BIGGER 0x2000U
-#define PTR_DIFF BIGGER - SMALLER
-#define FAIL_MACRO(x)\
- {printf(#x "() test failed!\n");\
- return -1;}
-
- uintptr_t unused = 0;
-
- RTE_SET_USED(unused);
-
- if ((uintptr_t)RTE_PTR_ADD(SMALLER, PTR_DIFF) != BIGGER)
- FAIL_MACRO(RTE_PTR_ADD);
- if ((uintptr_t)RTE_PTR_SUB(BIGGER, PTR_DIFF) != SMALLER)
- FAIL_MACRO(RTE_PTR_SUB);
- if (RTE_PTR_DIFF(BIGGER, SMALLER) != PTR_DIFF)
- FAIL_MACRO(RTE_PTR_DIFF);
- if (RTE_MAX(SMALLER, BIGGER) != BIGGER)
- FAIL_MACRO(RTE_MAX);
- if (RTE_MIN(SMALLER, BIGGER) != SMALLER)
- FAIL_MACRO(RTE_MIN);
-
- if (strncmp(RTE_STR(test), "test", sizeof("test")))
- FAIL_MACRO(RTE_STR);
-
- return 0;
-}
-
-static int
-test_misc(void)
-{
- char memdump[] = "memdump_test";
- if (rte_bsf32(129))
- FAIL("rte_bsf32");
-
- rte_memdump(stdout, "test", memdump, sizeof(memdump));
- rte_hexdump(stdout, "test", memdump, sizeof(memdump));
-
- rte_pause();
-
- return 0;
-}
-
-static int
-test_align(void)
-{
-#define FAIL_ALIGN(x, i, p)\
- {printf(x "() test failed: %u %u\n", i, p);\
- return -1;}
-#define ERROR_FLOOR(res, i, pow) \
- (res % pow) || /* check if not aligned */ \
- ((res / pow) != (i / pow)) /* check if correct alignment */
-#define ERROR_CEIL(res, i, pow) \
- (res % pow) || /* check if not aligned */ \
- ((i % pow) == 0 ? /* check if ceiling is invoked */ \
- val / pow != i / pow : /* if aligned */ \
- val / pow != (i / pow) + 1) /* if not aligned, hence +1 */
-
- uint32_t i, p, val;
-
- for (i = 1, p = 1; i <= MAX_NUM; i ++) {
- if (rte_align32pow2(i) != p)
- FAIL_ALIGN("rte_align32pow2", i, p);
- if (i == p)
- p <<= 1;
- }
-
- for (p = 2; p <= MAX_NUM; p <<= 1) {
-
- if (!rte_is_power_of_2(p))
- FAIL("rte_is_power_of_2");
-
- for (i = 1; i <= MAX_NUM; i++) {
- /* align floor */
- if (RTE_ALIGN_FLOOR((uintptr_t)i, p) % p)
- FAIL_ALIGN("RTE_ALIGN_FLOOR", i, p);
-
- val = RTE_PTR_ALIGN_FLOOR((uintptr_t) i, p);
- if (ERROR_FLOOR(val, i, p))
- FAIL_ALIGN("RTE_PTR_ALIGN_FLOOR", i, p);
-
- val = RTE_ALIGN_FLOOR(i, p);
- if (ERROR_FLOOR(val, i, p))
- FAIL_ALIGN("RTE_ALIGN_FLOOR", i, p);
-
- /* align ceiling */
- val = RTE_PTR_ALIGN((uintptr_t) i, p);
- if (ERROR_CEIL(val, i, p))
- FAIL_ALIGN("RTE_PTR_ALIGN", i, p);
-
- val = RTE_ALIGN(i, p);
- if (ERROR_CEIL(val, i, p))
- FAIL_ALIGN("RTE_ALIGN", i, p);
-
- val = RTE_ALIGN_CEIL(i, p);
- if (ERROR_CEIL(val, i, p))
- FAIL_ALIGN("RTE_ALIGN_CEIL", i, p);
-
- val = RTE_PTR_ALIGN_CEIL((uintptr_t)i, p);
- if (ERROR_CEIL(val, i, p))
- FAIL_ALIGN("RTE_PTR_ALIGN_CEIL", i, p);
-
- /* by this point we know that val is aligned to p */
- if (!rte_is_aligned((void*)(uintptr_t) val, p))
- FAIL("rte_is_aligned");
- }
- }
- return 0;
-}
-
-static int
-test_common(void)
-{
- int ret = 0;
- ret |= test_align();
- ret |= test_macros(0);
- ret |= test_misc();
-
- return ret;
-}
-
-REGISTER_TEST_COMMAND(common_autotest, test_common);
diff --git a/app/test/test_cpuflags.c b/app/test/test_cpuflags.c
deleted file mode 100644
index 0e5ebe78..00000000
--- a/app/test/test_cpuflags.c
+++ /dev/null
@@ -1,202 +0,0 @@
-/*-
- * BSD LICENSE
- *
- * Copyright(c) 2010-2014 Intel Corporation. All rights reserved.
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * * Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * * Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in
- * the documentation and/or other materials provided with the
- * distribution.
- * * Neither the name of Intel Corporation nor the names of its
- * contributors may be used to endorse or promote products derived
- * from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
- * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
- * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#include <stdio.h>
-
-#include <errno.h>
-#include <stdint.h>
-#include <rte_cpuflags.h>
-#include <rte_debug.h>
-
-#include "test.h"
-
-
-/* convenience define */
-#define CHECK_FOR_FLAG(x) \
- result = rte_cpu_get_flag_enabled(x); \
- printf("%s\n", cpu_flag_result(result)); \
- if (result == -ENOENT) \
- return -1;
-
-/*
- * Helper function to display result
- */
-static inline const char *
-cpu_flag_result(int result)
-{
- switch (result) {
- case 0:
- return "NOT PRESENT";
- case 1:
- return "OK";
- default:
- return "ERROR";
- }
-}
-
-
-
-/*
- * CPUID test
- * ===========
- *
- * - Check flags from different registers with rte_cpu_get_flag_enabled()
- * - Check if register and CPUID functions fail properly
- */
-
-static int
-test_cpuflags(void)
-{
- int result;
- printf("\nChecking for flags from different registers...\n");
-
-#ifdef RTE_ARCH_PPC_64
- printf("Check for PPC64:\t\t");
- CHECK_FOR_FLAG(RTE_CPUFLAG_PPC64);
-
- printf("Check for PPC32:\t\t");
- CHECK_FOR_FLAG(RTE_CPUFLAG_PPC32);
-
- printf("Check for VSX:\t\t");
- CHECK_FOR_FLAG(RTE_CPUFLAG_VSX);
-
- printf("Check for DFP:\t\t");
- CHECK_FOR_FLAG(RTE_CPUFLAG_DFP);
-
- printf("Check for FPU:\t\t");
- CHECK_FOR_FLAG(RTE_CPUFLAG_FPU);
-
- printf("Check for SMT:\t\t");
- CHECK_FOR_FLAG(RTE_CPUFLAG_SMT);
-
- printf("Check for MMU:\t\t");
- CHECK_FOR_FLAG(RTE_CPUFLAG_MMU);
-
- printf("Check for ALTIVEC:\t\t");
- CHECK_FOR_FLAG(RTE_CPUFLAG_ALTIVEC);
-
- printf("Check for ARCH_2_06:\t\t");
- CHECK_FOR_FLAG(RTE_CPUFLAG_ARCH_2_06);
-
- printf("Check for ARCH_2_07:\t\t");
- CHECK_FOR_FLAG(RTE_CPUFLAG_ARCH_2_07);
-
- printf("Check for ICACHE_SNOOP:\t\t");
- CHECK_FOR_FLAG(RTE_CPUFLAG_ICACHE_SNOOP);
-#endif
-
-#if defined(RTE_ARCH_ARM)
- printf("Check for NEON:\t\t");
- CHECK_FOR_FLAG(RTE_CPUFLAG_NEON);
-#endif
-
-#if defined(RTE_ARCH_ARM64)
- printf("Check for FP:\t\t");
- CHECK_FOR_FLAG(RTE_CPUFLAG_FP);
-
- printf("Check for ASIMD:\t");
- CHECK_FOR_FLAG(RTE_CPUFLAG_NEON);
-
- printf("Check for EVTSTRM:\t");
- CHECK_FOR_FLAG(RTE_CPUFLAG_EVTSTRM);
-
- printf("Check for AES:\t\t");
- CHECK_FOR_FLAG(RTE_CPUFLAG_AES);
-
- printf("Check for PMULL:\t");
- CHECK_FOR_FLAG(RTE_CPUFLAG_PMULL);
-
- printf("Check for SHA1:\t\t");
- CHECK_FOR_FLAG(RTE_CPUFLAG_SHA1);
-
- printf("Check for SHA2:\t\t");
- CHECK_FOR_FLAG(RTE_CPUFLAG_SHA2);
-
- printf("Check for CRC32:\t");
- CHECK_FOR_FLAG(RTE_CPUFLAG_CRC32);
-
- printf("Check for ATOMICS:\t");
- CHECK_FOR_FLAG(RTE_CPUFLAG_ATOMICS);
-#endif
-
-#if defined(RTE_ARCH_X86_64) || defined(RTE_ARCH_I686)
- printf("Check for SSE:\t\t");
- CHECK_FOR_FLAG(RTE_CPUFLAG_SSE);
-
- printf("Check for SSE2:\t\t");
- CHECK_FOR_FLAG(RTE_CPUFLAG_SSE2);
-
- printf("Check for SSE3:\t\t");
- CHECK_FOR_FLAG(RTE_CPUFLAG_SSE3);
-
- printf("Check for SSE4.1:\t");
- CHECK_FOR_FLAG(RTE_CPUFLAG_SSE4_1);
-
- printf("Check for SSE4.2:\t");
- CHECK_FOR_FLAG(RTE_CPUFLAG_SSE4_2);
-
- printf("Check for AVX:\t\t");
- CHECK_FOR_FLAG(RTE_CPUFLAG_AVX);
-
- printf("Check for AVX2:\t\t");
- CHECK_FOR_FLAG(RTE_CPUFLAG_AVX2);
-
- printf("Check for TRBOBST:\t");
- CHECK_FOR_FLAG(RTE_CPUFLAG_TRBOBST);
-
- printf("Check for ENERGY_EFF:\t");
- CHECK_FOR_FLAG(RTE_CPUFLAG_ENERGY_EFF);
-
- printf("Check for LAHF_SAHF:\t");
- CHECK_FOR_FLAG(RTE_CPUFLAG_LAHF_SAHF);
-
- printf("Check for 1GB_PG:\t");
- CHECK_FOR_FLAG(RTE_CPUFLAG_1GB_PG);
-
- printf("Check for INVTSC:\t");
- CHECK_FOR_FLAG(RTE_CPUFLAG_INVTSC);
-#endif
-
- /*
- * Check if invalid data is handled properly
- */
- printf("\nCheck for invalid flag:\t");
- result = rte_cpu_get_flag_enabled(RTE_CPUFLAG_NUMFLAGS);
- printf("%s\n", cpu_flag_result(result));
- if (result != -ENOENT)
- return -1;
-
- return 0;
-}
-
-REGISTER_TEST_COMMAND(cpuflags_autotest, test_cpuflags);
diff --git a/app/test/test_cryptodev.c b/app/test/test_cryptodev.c
deleted file mode 100644
index 872f8b43..00000000
--- a/app/test/test_cryptodev.c
+++ /dev/null
@@ -1,6577 +0,0 @@
-/*-
- * BSD LICENSE
- *
- * Copyright(c) 2015-2016 Intel Corporation. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * * Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * * Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in
- * the documentation and/or other materials provided with the
- * distribution.
- * * Neither the name of Intel Corporation nor the names of its
- * contributors may be used to endorse or promote products derived
- * from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
- * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
- * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#include <rte_common.h>
-#include <rte_hexdump.h>
-#include <rte_mbuf.h>
-#include <rte_malloc.h>
-#include <rte_memcpy.h>
-
-#include <rte_crypto.h>
-#include <rte_cryptodev.h>
-#include <rte_cryptodev_pmd.h>
-
-#include "test.h"
-#include "test_cryptodev.h"
-
-#include "test_cryptodev_blockcipher.h"
-#include "test_cryptodev_aes_test_vectors.h"
-#include "test_cryptodev_des_test_vectors.h"
-#include "test_cryptodev_hash_test_vectors.h"
-#include "test_cryptodev_kasumi_test_vectors.h"
-#include "test_cryptodev_kasumi_hash_test_vectors.h"
-#include "test_cryptodev_snow3g_test_vectors.h"
-#include "test_cryptodev_snow3g_hash_test_vectors.h"
-#include "test_cryptodev_zuc_test_vectors.h"
-#include "test_cryptodev_zuc_hash_test_vectors.h"
-#include "test_cryptodev_gcm_test_vectors.h"
-#include "test_cryptodev_hmac_test_vectors.h"
-
-static enum rte_cryptodev_type gbl_cryptodev_type;
-
-struct crypto_testsuite_params {
- struct rte_mempool *mbuf_pool;
- struct rte_mempool *large_mbuf_pool;
- struct rte_mempool *op_mpool;
- struct rte_cryptodev_config conf;
- struct rte_cryptodev_qp_conf qp_conf;
-
- uint8_t valid_devs[RTE_CRYPTO_MAX_DEVS];
- uint8_t valid_dev_count;
-};
-
-struct crypto_unittest_params {
- struct rte_crypto_sym_xform cipher_xform;
- struct rte_crypto_sym_xform auth_xform;
-
- struct rte_cryptodev_sym_session *sess;
-
- struct rte_crypto_op *op;
-
- struct rte_mbuf *obuf, *ibuf;
-
- uint8_t *digest;
-};
-
-#define ALIGN_POW2_ROUNDUP(num, align) \
- (((num) + (align) - 1) & ~((align) - 1))
-
-/*
- * Forward declarations.
- */
-static int
-test_AES_CBC_HMAC_SHA512_decrypt_create_session_params(
- struct crypto_unittest_params *ut_params, uint8_t *cipher_key,
- uint8_t *hmac_key);
-
-static int
-test_AES_CBC_HMAC_SHA512_decrypt_perform(struct rte_cryptodev_sym_session *sess,
- struct crypto_unittest_params *ut_params,
- struct crypto_testsuite_params *ts_param,
- const uint8_t *cipher,
- const uint8_t *digest,
- const uint8_t *iv);
-
-static struct rte_mbuf *
-setup_test_string(struct rte_mempool *mpool,
- const char *string, size_t len, uint8_t blocksize)
-{
- struct rte_mbuf *m = rte_pktmbuf_alloc(mpool);
- size_t t_len = len - (blocksize ? (len % blocksize) : 0);
-
- memset(m->buf_addr, 0, m->buf_len);
- if (m) {
- char *dst = rte_pktmbuf_append(m, t_len);
-
- if (!dst) {
- rte_pktmbuf_free(m);
- return NULL;
- }
- if (string != NULL)
- rte_memcpy(dst, string, t_len);
- else
- memset(dst, 0, t_len);
- }
-
- return m;
-}
-
-/* Get number of bytes in X bits (rounding up) */
-static uint32_t
-ceil_byte_length(uint32_t num_bits)
-{
- if (num_bits % 8)
- return ((num_bits >> 3) + 1);
- else
- return (num_bits >> 3);
-}
-
-static struct rte_crypto_op *
-process_crypto_request(uint8_t dev_id, struct rte_crypto_op *op)
-{
- if (rte_cryptodev_enqueue_burst(dev_id, 0, &op, 1) != 1) {
- printf("Error sending packet for encryption");
- return NULL;
- }
-
- op = NULL;
-
- while (rte_cryptodev_dequeue_burst(dev_id, 0, &op, 1) == 0)
- rte_pause();
-
- return op;
-}
-
-static struct crypto_testsuite_params testsuite_params = { NULL };
-static struct crypto_unittest_params unittest_params;
-
-static int
-testsuite_setup(void)
-{
- struct crypto_testsuite_params *ts_params = &testsuite_params;
- struct rte_cryptodev_info info;
- unsigned i, nb_devs, dev_id;
- int ret;
- uint16_t qp_id;
-
- memset(ts_params, 0, sizeof(*ts_params));
-
- ts_params->mbuf_pool = rte_mempool_lookup("CRYPTO_MBUFPOOL");
- if (ts_params->mbuf_pool == NULL) {
- /* Not already created so create */
- ts_params->mbuf_pool = rte_pktmbuf_pool_create(
- "CRYPTO_MBUFPOOL",
- NUM_MBUFS, MBUF_CACHE_SIZE, 0, MBUF_SIZE,
- rte_socket_id());
- if (ts_params->mbuf_pool == NULL) {
- RTE_LOG(ERR, USER1, "Can't create CRYPTO_MBUFPOOL\n");
- return TEST_FAILED;
- }
- }
-
- ts_params->large_mbuf_pool = rte_mempool_lookup(
- "CRYPTO_LARGE_MBUFPOOL");
- if (ts_params->large_mbuf_pool == NULL) {
- /* Not already created so create */
- ts_params->large_mbuf_pool = rte_pktmbuf_pool_create(
- "CRYPTO_LARGE_MBUFPOOL",
- 1, 0, 0, UINT16_MAX,
- rte_socket_id());
- if (ts_params->large_mbuf_pool == NULL) {
- RTE_LOG(ERR, USER1,
- "Can't create CRYPTO_LARGE_MBUFPOOL\n");
- return TEST_FAILED;
- }
- }
-
- ts_params->op_mpool = rte_crypto_op_pool_create(
- "MBUF_CRYPTO_SYM_OP_POOL",
- RTE_CRYPTO_OP_TYPE_SYMMETRIC,
- NUM_MBUFS, MBUF_CACHE_SIZE,
- DEFAULT_NUM_XFORMS *
- sizeof(struct rte_crypto_sym_xform),
- rte_socket_id());
- if (ts_params->op_mpool == NULL) {
- RTE_LOG(ERR, USER1, "Can't create CRYPTO_OP_POOL\n");
- return TEST_FAILED;
- }
-
- /* Create 2 AESNI MB devices if required */
- if (gbl_cryptodev_type == RTE_CRYPTODEV_AESNI_MB_PMD) {
-#ifndef RTE_LIBRTE_PMD_AESNI_MB
- RTE_LOG(ERR, USER1, "CONFIG_RTE_LIBRTE_PMD_AESNI_MB must be"
- " enabled in config file to run this testsuite.\n");
- return TEST_FAILED;
-#endif
- nb_devs = rte_cryptodev_count_devtype(
- RTE_CRYPTODEV_AESNI_MB_PMD);
- if (nb_devs < 2) {
- for (i = nb_devs; i < 2; i++) {
- ret = rte_eal_vdev_init(
- RTE_STR(CRYPTODEV_NAME_AESNI_MB_PMD), NULL);
-
- TEST_ASSERT(ret == 0,
- "Failed to create instance %u of"
- " pmd : %s",
- i, RTE_STR(CRYPTODEV_NAME_AESNI_MB_PMD));
- }
- }
- }
-
- /* Create 2 AESNI GCM devices if required */
- if (gbl_cryptodev_type == RTE_CRYPTODEV_AESNI_GCM_PMD) {
-#ifndef RTE_LIBRTE_PMD_AESNI_GCM
- RTE_LOG(ERR, USER1, "CONFIG_RTE_LIBRTE_PMD_AESNI_GCM must be"
- " enabled in config file to run this testsuite.\n");
- return TEST_FAILED;
-#endif
- nb_devs = rte_cryptodev_count_devtype(
- RTE_CRYPTODEV_AESNI_GCM_PMD);
- if (nb_devs < 2) {
- for (i = nb_devs; i < 2; i++) {
- TEST_ASSERT_SUCCESS(rte_eal_vdev_init(
- RTE_STR(CRYPTODEV_NAME_AESNI_GCM_PMD), NULL),
- "Failed to create instance %u of"
- " pmd : %s",
- i, RTE_STR(CRYPTODEV_NAME_AESNI_GCM_PMD));
- }
- }
- }
-
- /* Create 2 SNOW 3G devices if required */
- if (gbl_cryptodev_type == RTE_CRYPTODEV_SNOW3G_PMD) {
-#ifndef RTE_LIBRTE_PMD_SNOW3G
- RTE_LOG(ERR, USER1, "CONFIG_RTE_LIBRTE_PMD_SNOW3G must be"
- " enabled in config file to run this testsuite.\n");
- return TEST_FAILED;
-#endif
- nb_devs = rte_cryptodev_count_devtype(RTE_CRYPTODEV_SNOW3G_PMD);
- if (nb_devs < 2) {
- for (i = nb_devs; i < 2; i++) {
- TEST_ASSERT_SUCCESS(rte_eal_vdev_init(
- RTE_STR(CRYPTODEV_NAME_SNOW3G_PMD), NULL),
- "Failed to create instance %u of"
- " pmd : %s",
- i, RTE_STR(CRYPTODEV_NAME_SNOW3G_PMD));
- }
- }
- }
-
- /* Create 2 KASUMI devices if required */
- if (gbl_cryptodev_type == RTE_CRYPTODEV_KASUMI_PMD) {
-#ifndef RTE_LIBRTE_PMD_KASUMI
- RTE_LOG(ERR, USER1, "CONFIG_RTE_LIBRTE_PMD_KASUMI must be"
- " enabled in config file to run this testsuite.\n");
- return TEST_FAILED;
-#endif
- nb_devs = rte_cryptodev_count_devtype(RTE_CRYPTODEV_KASUMI_PMD);
- if (nb_devs < 2) {
- for (i = nb_devs; i < 2; i++) {
- TEST_ASSERT_SUCCESS(rte_eal_vdev_init(
- RTE_STR(CRYPTODEV_NAME_KASUMI_PMD), NULL),
- "Failed to create instance %u of"
- " pmd : %s",
- i, RTE_STR(CRYPTODEV_NAME_KASUMI_PMD));
- }
- }
- }
-
- /* Create 2 ZUC devices if required */
- if (gbl_cryptodev_type == RTE_CRYPTODEV_ZUC_PMD) {
-#ifndef RTE_LIBRTE_PMD_ZUC
- RTE_LOG(ERR, USER1, "CONFIG_RTE_LIBRTE_PMD_ZUC must be"
- " enabled in config file to run this testsuite.\n");
- return TEST_FAILED;
-#endif
- nb_devs = rte_cryptodev_count_devtype(RTE_CRYPTODEV_ZUC_PMD);
- if (nb_devs < 2) {
- for (i = nb_devs; i < 2; i++) {
- TEST_ASSERT_SUCCESS(rte_eal_vdev_init(
- RTE_STR(CRYPTODEV_NAME_ZUC_PMD), NULL),
- "Failed to create instance %u of"
- " pmd : %s",
- i, RTE_STR(CRYPTODEV_NAME_ZUC_PMD));
- }
- }
- }
-
- /* Create 2 NULL devices if required */
- if (gbl_cryptodev_type == RTE_CRYPTODEV_NULL_PMD) {
-#ifndef RTE_LIBRTE_PMD_NULL_CRYPTO
- RTE_LOG(ERR, USER1, "CONFIG_RTE_LIBRTE_PMD_NULL_CRYPTO must be"
- " enabled in config file to run this testsuite.\n");
- return TEST_FAILED;
-#endif
- nb_devs = rte_cryptodev_count_devtype(
- RTE_CRYPTODEV_NULL_PMD);
- if (nb_devs < 2) {
- for (i = nb_devs; i < 2; i++) {
- int dev_id = rte_eal_vdev_init(
- RTE_STR(CRYPTODEV_NAME_NULL_PMD), NULL);
-
- TEST_ASSERT(dev_id >= 0,
- "Failed to create instance %u of"
- " pmd : %s",
- i, RTE_STR(CRYPTODEV_NAME_NULL_PMD));
- }
- }
- }
-
- /* Create 2 OPENSSL devices if required */
- if (gbl_cryptodev_type == RTE_CRYPTODEV_OPENSSL_PMD) {
-#ifndef RTE_LIBRTE_PMD_OPENSSL
- RTE_LOG(ERR, USER1, "CONFIG_RTE_LIBRTE_PMD_OPENSSL must be"
- " enabled in config file to run this testsuite.\n");
- return TEST_FAILED;
-#endif
- nb_devs = rte_cryptodev_count_devtype(
- RTE_CRYPTODEV_OPENSSL_PMD);
- if (nb_devs < 2) {
- for (i = nb_devs; i < 2; i++) {
- ret = rte_eal_vdev_init(
- RTE_STR(CRYPTODEV_NAME_OPENSSL_PMD),
- NULL);
-
- TEST_ASSERT(ret == 0, "Failed to create "
- "instance %u of pmd : %s", i,
- RTE_STR(CRYPTODEV_NAME_OPENSSL_PMD));
- }
- }
- }
-
-#ifndef RTE_LIBRTE_PMD_QAT
- if (gbl_cryptodev_type == RTE_CRYPTODEV_QAT_SYM_PMD) {
- RTE_LOG(ERR, USER1, "CONFIG_RTE_LIBRTE_PMD_QAT must be enabled "
- "in config file to run this testsuite.\n");
- return TEST_FAILED;
- }
-#endif
-
- nb_devs = rte_cryptodev_count();
- if (nb_devs < 1) {
- RTE_LOG(ERR, USER1, "No crypto devices found?\n");
- return TEST_FAILED;
- }
-
- /* Create list of valid crypto devs */
- for (i = 0; i < nb_devs; i++) {
- rte_cryptodev_info_get(i, &info);
- if (info.dev_type == gbl_cryptodev_type)
- ts_params->valid_devs[ts_params->valid_dev_count++] = i;
- }
-
- if (ts_params->valid_dev_count < 1)
- return TEST_FAILED;
-
- /* Set up all the qps on the first of the valid devices found */
-
- dev_id = ts_params->valid_devs[0];
-
- rte_cryptodev_info_get(dev_id, &info);
-
- ts_params->conf.nb_queue_pairs = info.max_nb_queue_pairs;
- ts_params->conf.socket_id = SOCKET_ID_ANY;
- ts_params->conf.session_mp.nb_objs = info.sym.max_nb_sessions;
-
- TEST_ASSERT_SUCCESS(rte_cryptodev_configure(dev_id,
- &ts_params->conf),
- "Failed to configure cryptodev %u with %u qps",
- dev_id, ts_params->conf.nb_queue_pairs);
-
- ts_params->qp_conf.nb_descriptors = DEFAULT_NUM_OPS_INFLIGHT;
-
- for (qp_id = 0; qp_id < info.max_nb_queue_pairs; qp_id++) {
- TEST_ASSERT_SUCCESS(rte_cryptodev_queue_pair_setup(
- dev_id, qp_id, &ts_params->qp_conf,
- rte_cryptodev_socket_id(dev_id)),
- "Failed to setup queue pair %u on cryptodev %u",
- qp_id, dev_id);
- }
-
- return TEST_SUCCESS;
-}
-
-static void
-testsuite_teardown(void)
-{
- struct crypto_testsuite_params *ts_params = &testsuite_params;
-
- if (ts_params->mbuf_pool != NULL) {
- RTE_LOG(DEBUG, USER1, "CRYPTO_MBUFPOOL count %u\n",
- rte_mempool_avail_count(ts_params->mbuf_pool));
- }
-
- if (ts_params->op_mpool != NULL) {
- RTE_LOG(DEBUG, USER1, "CRYPTO_OP_POOL count %u\n",
- rte_mempool_avail_count(ts_params->op_mpool));
- }
-
-}
-
-static int
-ut_setup(void)
-{
- struct crypto_testsuite_params *ts_params = &testsuite_params;
- struct crypto_unittest_params *ut_params = &unittest_params;
-
- uint16_t qp_id;
-
- /* Clear unit test parameters before running test */
- memset(ut_params, 0, sizeof(*ut_params));
-
- /* Reconfigure device to default parameters */
- ts_params->conf.socket_id = SOCKET_ID_ANY;
- ts_params->conf.session_mp.nb_objs = DEFAULT_NUM_OPS_INFLIGHT;
-
- TEST_ASSERT_SUCCESS(rte_cryptodev_configure(ts_params->valid_devs[0],
- &ts_params->conf),
- "Failed to configure cryptodev %u",
- ts_params->valid_devs[0]);
-
- for (qp_id = 0; qp_id < ts_params->conf.nb_queue_pairs ; qp_id++) {
- TEST_ASSERT_SUCCESS(rte_cryptodev_queue_pair_setup(
- ts_params->valid_devs[0], qp_id,
- &ts_params->qp_conf,
- rte_cryptodev_socket_id(ts_params->valid_devs[0])),
- "Failed to setup queue pair %u on cryptodev %u",
- qp_id, ts_params->valid_devs[0]);
- }
-
-
- rte_cryptodev_stats_reset(ts_params->valid_devs[0]);
-
- /* Start the device */
- TEST_ASSERT_SUCCESS(rte_cryptodev_start(ts_params->valid_devs[0]),
- "Failed to start cryptodev %u",
- ts_params->valid_devs[0]);
-
- return TEST_SUCCESS;
-}
-
-static void
-ut_teardown(void)
-{
- struct crypto_testsuite_params *ts_params = &testsuite_params;
- struct crypto_unittest_params *ut_params = &unittest_params;
- struct rte_cryptodev_stats stats;
-
- /* free crypto session structure */
- if (ut_params->sess) {
- rte_cryptodev_sym_session_free(ts_params->valid_devs[0],
- ut_params->sess);
- ut_params->sess = NULL;
- }
-
- /* free crypto operation structure */
- if (ut_params->op)
- rte_crypto_op_free(ut_params->op);
-
- /*
- * free mbuf - both obuf and ibuf are usually the same,
- * so check if they point at the same address is necessary,
- * to avoid freeing the mbuf twice.
- */
- if (ut_params->obuf) {
- rte_pktmbuf_free(ut_params->obuf);
- if (ut_params->ibuf == ut_params->obuf)
- ut_params->ibuf = 0;
- ut_params->obuf = 0;
- }
- if (ut_params->ibuf) {
- rte_pktmbuf_free(ut_params->ibuf);
- ut_params->ibuf = 0;
- }
-
- if (ts_params->mbuf_pool != NULL)
- RTE_LOG(DEBUG, USER1, "CRYPTO_MBUFPOOL count %u\n",
- rte_mempool_avail_count(ts_params->mbuf_pool));
-
- rte_cryptodev_stats_get(ts_params->valid_devs[0], &stats);
-
- /* Stop the device */
- rte_cryptodev_stop(ts_params->valid_devs[0]);
-}
-
-static int
-test_device_configure_invalid_dev_id(void)
-{
- struct crypto_testsuite_params *ts_params = &testsuite_params;
- uint16_t dev_id, num_devs = 0;
-
- TEST_ASSERT((num_devs = rte_cryptodev_count()) >= 1,
- "Need at least %d devices for test", 1);
-
- /* valid dev_id values */
- dev_id = ts_params->valid_devs[ts_params->valid_dev_count - 1];
-
- /* Stop the device in case it's started so it can be configured */
- rte_cryptodev_stop(ts_params->valid_devs[dev_id]);
-
- TEST_ASSERT_SUCCESS(rte_cryptodev_configure(dev_id, &ts_params->conf),
- "Failed test for rte_cryptodev_configure: "
- "invalid dev_num %u", dev_id);
-
- /* invalid dev_id values */
- dev_id = num_devs;
-
- TEST_ASSERT_FAIL(rte_cryptodev_configure(dev_id, &ts_params->conf),
- "Failed test for rte_cryptodev_configure: "
- "invalid dev_num %u", dev_id);
-
- dev_id = 0xff;
-
- TEST_ASSERT_FAIL(rte_cryptodev_configure(dev_id, &ts_params->conf),
- "Failed test for rte_cryptodev_configure:"
- "invalid dev_num %u", dev_id);
-
- return TEST_SUCCESS;
-}
-
-static int
-test_device_configure_invalid_queue_pair_ids(void)
-{
- struct crypto_testsuite_params *ts_params = &testsuite_params;
- uint16_t orig_nb_qps = ts_params->conf.nb_queue_pairs;
-
- /* Stop the device in case it's started so it can be configured */
- rte_cryptodev_stop(ts_params->valid_devs[0]);
-
- /* valid - one queue pairs */
- ts_params->conf.nb_queue_pairs = 1;
-
- TEST_ASSERT_SUCCESS(rte_cryptodev_configure(ts_params->valid_devs[0],
- &ts_params->conf),
- "Failed to configure cryptodev: dev_id %u, qp_id %u",
- ts_params->valid_devs[0], ts_params->conf.nb_queue_pairs);
-
-
- /* valid - max value queue pairs */
- ts_params->conf.nb_queue_pairs = MAX_NUM_QPS_PER_QAT_DEVICE;
-
- TEST_ASSERT_SUCCESS(rte_cryptodev_configure(ts_params->valid_devs[0],
- &ts_params->conf),
- "Failed to configure cryptodev: dev_id %u, qp_id %u",
- ts_params->valid_devs[0], ts_params->conf.nb_queue_pairs);
-
-
- /* invalid - zero queue pairs */
- ts_params->conf.nb_queue_pairs = 0;
-
- TEST_ASSERT_FAIL(rte_cryptodev_configure(ts_params->valid_devs[0],
- &ts_params->conf),
- "Failed test for rte_cryptodev_configure, dev_id %u,"
- " invalid qps: %u",
- ts_params->valid_devs[0],
- ts_params->conf.nb_queue_pairs);
-
-
- /* invalid - max value supported by field queue pairs */
- ts_params->conf.nb_queue_pairs = UINT16_MAX;
-
- TEST_ASSERT_FAIL(rte_cryptodev_configure(ts_params->valid_devs[0],
- &ts_params->conf),
- "Failed test for rte_cryptodev_configure, dev_id %u,"
- " invalid qps: %u",
- ts_params->valid_devs[0],
- ts_params->conf.nb_queue_pairs);
-
-
- /* invalid - max value + 1 queue pairs */
- ts_params->conf.nb_queue_pairs = MAX_NUM_QPS_PER_QAT_DEVICE + 1;
-
- TEST_ASSERT_FAIL(rte_cryptodev_configure(ts_params->valid_devs[0],
- &ts_params->conf),
- "Failed test for rte_cryptodev_configure, dev_id %u,"
- " invalid qps: %u",
- ts_params->valid_devs[0],
- ts_params->conf.nb_queue_pairs);
-
- /* revert to original testsuite value */
- ts_params->conf.nb_queue_pairs = orig_nb_qps;
-
- return TEST_SUCCESS;
-}
-
-static int
-test_queue_pair_descriptor_setup(void)
-{
- struct crypto_testsuite_params *ts_params = &testsuite_params;
- struct rte_cryptodev_info dev_info;
- struct rte_cryptodev_qp_conf qp_conf = {
- .nb_descriptors = MAX_NUM_OPS_INFLIGHT
- };
-
- uint16_t qp_id;
-
- /* Stop the device in case it's started so it can be configured */
- rte_cryptodev_stop(ts_params->valid_devs[0]);
-
-
- rte_cryptodev_info_get(ts_params->valid_devs[0], &dev_info);
-
- ts_params->conf.session_mp.nb_objs = dev_info.sym.max_nb_sessions;
-
- TEST_ASSERT_SUCCESS(rte_cryptodev_configure(ts_params->valid_devs[0],
- &ts_params->conf), "Failed to configure cryptodev %u",
- ts_params->valid_devs[0]);
-
-
- /*
- * Test various ring sizes on this device. memzones can't be
- * freed so are re-used if ring is released and re-created.
- */
- qp_conf.nb_descriptors = MIN_NUM_OPS_INFLIGHT; /* min size*/
-
- for (qp_id = 0; qp_id < ts_params->conf.nb_queue_pairs; qp_id++) {
- TEST_ASSERT_SUCCESS(rte_cryptodev_queue_pair_setup(
- ts_params->valid_devs[0], qp_id, &qp_conf,
- rte_cryptodev_socket_id(
- ts_params->valid_devs[0])),
- "Failed test for "
- "rte_cryptodev_queue_pair_setup: num_inflights "
- "%u on qp %u on cryptodev %u",
- qp_conf.nb_descriptors, qp_id,
- ts_params->valid_devs[0]);
- }
-
- qp_conf.nb_descriptors = (uint32_t)(MAX_NUM_OPS_INFLIGHT / 2);
-
- for (qp_id = 0; qp_id < ts_params->conf.nb_queue_pairs; qp_id++) {
- TEST_ASSERT_SUCCESS(rte_cryptodev_queue_pair_setup(
- ts_params->valid_devs[0], qp_id, &qp_conf,
- rte_cryptodev_socket_id(
- ts_params->valid_devs[0])),
- "Failed test for"
- " rte_cryptodev_queue_pair_setup: num_inflights"
- " %u on qp %u on cryptodev %u",
- qp_conf.nb_descriptors, qp_id,
- ts_params->valid_devs[0]);
- }
-
- qp_conf.nb_descriptors = MAX_NUM_OPS_INFLIGHT; /* valid */
-
- for (qp_id = 0; qp_id < ts_params->conf.nb_queue_pairs; qp_id++) {
- TEST_ASSERT_SUCCESS(rte_cryptodev_queue_pair_setup(
- ts_params->valid_devs[0], qp_id, &qp_conf,
- rte_cryptodev_socket_id(
- ts_params->valid_devs[0])),
- "Failed test for "
- "rte_cryptodev_queue_pair_setup: num_inflights"
- " %u on qp %u on cryptodev %u",
- qp_conf.nb_descriptors, qp_id,
- ts_params->valid_devs[0]);
- }
-
- /* invalid number of descriptors - max supported + 2 */
- qp_conf.nb_descriptors = MAX_NUM_OPS_INFLIGHT + 2;
-
- for (qp_id = 0; qp_id < ts_params->conf.nb_queue_pairs; qp_id++) {
- TEST_ASSERT_FAIL(rte_cryptodev_queue_pair_setup(
- ts_params->valid_devs[0], qp_id, &qp_conf,
- rte_cryptodev_socket_id(
- ts_params->valid_devs[0])),
- "Unexpectedly passed test for "
- "rte_cryptodev_queue_pair_setup:"
- "num_inflights %u on qp %u on cryptodev %u",
- qp_conf.nb_descriptors, qp_id,
- ts_params->valid_devs[0]);
- }
-
- /* invalid number of descriptors - max value of parameter */
- qp_conf.nb_descriptors = UINT32_MAX-1;
-
- for (qp_id = 0; qp_id < ts_params->conf.nb_queue_pairs; qp_id++) {
- TEST_ASSERT_FAIL(rte_cryptodev_queue_pair_setup(
- ts_params->valid_devs[0], qp_id, &qp_conf,
- rte_cryptodev_socket_id(
- ts_params->valid_devs[0])),
- "Unexpectedly passed test for "
- "rte_cryptodev_queue_pair_setup:"
- "num_inflights %u on qp %u on cryptodev %u",
- qp_conf.nb_descriptors, qp_id,
- ts_params->valid_devs[0]);
- }
-
- qp_conf.nb_descriptors = DEFAULT_NUM_OPS_INFLIGHT;
-
- for (qp_id = 0; qp_id < ts_params->conf.nb_queue_pairs; qp_id++) {
- TEST_ASSERT_SUCCESS(rte_cryptodev_queue_pair_setup(
- ts_params->valid_devs[0], qp_id, &qp_conf,
- rte_cryptodev_socket_id(
- ts_params->valid_devs[0])),
- "Failed test for"
- " rte_cryptodev_queue_pair_setup:"
- "num_inflights %u on qp %u on cryptodev %u",
- qp_conf.nb_descriptors, qp_id,
- ts_params->valid_devs[0]);
- }
-
- /* invalid number of descriptors - max supported + 1 */
- qp_conf.nb_descriptors = DEFAULT_NUM_OPS_INFLIGHT + 1;
-
- for (qp_id = 0; qp_id < ts_params->conf.nb_queue_pairs; qp_id++) {
- TEST_ASSERT_FAIL(rte_cryptodev_queue_pair_setup(
- ts_params->valid_devs[0], qp_id, &qp_conf,
- rte_cryptodev_socket_id(
- ts_params->valid_devs[0])),
- "Unexpectedly passed test for "
- "rte_cryptodev_queue_pair_setup:"
- "num_inflights %u on qp %u on cryptodev %u",
- qp_conf.nb_descriptors, qp_id,
- ts_params->valid_devs[0]);
- }
-
- /* test invalid queue pair id */
- qp_conf.nb_descriptors = DEFAULT_NUM_OPS_INFLIGHT; /*valid */
-
- qp_id = DEFAULT_NUM_QPS_PER_QAT_DEVICE; /*invalid */
-
- TEST_ASSERT_FAIL(rte_cryptodev_queue_pair_setup(
- ts_params->valid_devs[0],
- qp_id, &qp_conf,
- rte_cryptodev_socket_id(ts_params->valid_devs[0])),
- "Failed test for rte_cryptodev_queue_pair_setup:"
- "invalid qp %u on cryptodev %u",
- qp_id, ts_params->valid_devs[0]);
-
- qp_id = 0xffff; /*invalid*/
-
- TEST_ASSERT_FAIL(rte_cryptodev_queue_pair_setup(
- ts_params->valid_devs[0],
- qp_id, &qp_conf,
- rte_cryptodev_socket_id(ts_params->valid_devs[0])),
- "Failed test for rte_cryptodev_queue_pair_setup:"
- "invalid qp %u on cryptodev %u",
- qp_id, ts_params->valid_devs[0]);
-
- return TEST_SUCCESS;
-}
-
-/* ***** Plaintext data for tests ***** */
-
-const char catch_22_quote_1[] =
- "There was only one catch and that was Catch-22, which "
- "specified that a concern for one's safety in the face of "
- "dangers that were real and immediate was the process of a "
- "rational mind. Orr was crazy and could be grounded. All he "
- "had to do was ask; and as soon as he did, he would no longer "
- "be crazy and would have to fly more missions. Orr would be "
- "crazy to fly more missions and sane if he didn't, but if he "
- "was sane he had to fly them. If he flew them he was crazy "
- "and didn't have to; but if he didn't want to he was sane and "
- "had to. Yossarian was moved very deeply by the absolute "
- "simplicity of this clause of Catch-22 and let out a "
- "respectful whistle. \"That's some catch, that Catch-22\", he "
- "observed. \"It's the best there is,\" Doc Daneeka agreed.";
-
-const char catch_22_quote[] =
- "What a lousy earth! He wondered how many people were "
- "destitute that same night even in his own prosperous country, "
- "how many homes were shanties, how many husbands were drunk "
- "and wives socked, and how many children were bullied, abused, "
- "or abandoned. How many families hungered for food they could "
- "not afford to buy? How many hearts were broken? How many "
- "suicides would take place that same night, how many people "
- "would go insane? How many cockroaches and landlords would "
- "triumph? How many winners were losers, successes failures, "
- "and rich men poor men? How many wise guys were stupid? How "
- "many happy endings were unhappy endings? How many honest men "
- "were liars, brave men cowards, loyal men traitors, how many "
- "sainted men were corrupt, how many people in positions of "
- "trust had sold their souls to bodyguards, how many had never "
- "had souls? How many straight-and-narrow paths were crooked "
- "paths? How many best families were worst families and how "
- "many good people were bad people? When you added them all up "
- "and then subtracted, you might be left with only the children, "
- "and perhaps with Albert Einstein and an old violinist or "
- "sculptor somewhere.";
-
-#define QUOTE_480_BYTES (480)
-#define QUOTE_512_BYTES (512)
-#define QUOTE_768_BYTES (768)
-#define QUOTE_1024_BYTES (1024)
-
-
-
-/* ***** SHA1 Hash Tests ***** */
-
-#define HMAC_KEY_LENGTH_SHA1 (DIGEST_BYTE_LENGTH_SHA1)
-
-static uint8_t hmac_sha1_key[] = {
- 0xF8, 0x2A, 0xC7, 0x54, 0xDB, 0x96, 0x18, 0xAA,
- 0xC3, 0xA1, 0x53, 0xF6, 0x1F, 0x17, 0x60, 0xBD,
- 0xDE, 0xF4, 0xDE, 0xAD };
-
-/* ***** SHA224 Hash Tests ***** */
-
-#define HMAC_KEY_LENGTH_SHA224 (DIGEST_BYTE_LENGTH_SHA224)
-
-
-/* ***** AES-CBC Cipher Tests ***** */
-
-#define CIPHER_KEY_LENGTH_AES_CBC (16)
-#define CIPHER_IV_LENGTH_AES_CBC (CIPHER_KEY_LENGTH_AES_CBC)
-
-static uint8_t aes_cbc_key[] = {
- 0xE4, 0x23, 0x33, 0x8A, 0x35, 0x64, 0x61, 0xE2,
- 0x49, 0x03, 0xDD, 0xC6, 0xB8, 0xCA, 0x55, 0x7A };
-
-static uint8_t aes_cbc_iv[] = {
- 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
- 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f };
-
-
-/* ***** AES-CBC / HMAC-SHA1 Hash Tests ***** */
-
-static const uint8_t catch_22_quote_2_512_bytes_AES_CBC_ciphertext[] = {
- 0x8B, 0x4D, 0xDA, 0x1B, 0xCF, 0x04, 0xA0, 0x31,
- 0xB4, 0xBF, 0xBD, 0x68, 0x43, 0x20, 0x7E, 0x76,
- 0xB1, 0x96, 0x8B, 0xA2, 0x7C, 0xA2, 0x83, 0x9E,
- 0x39, 0x5A, 0x2F, 0x7E, 0x92, 0xB4, 0x48, 0x1A,
- 0x3F, 0x6B, 0x5D, 0xDF, 0x52, 0x85, 0x5F, 0x8E,
- 0x42, 0x3C, 0xFB, 0xE9, 0x1A, 0x24, 0xD6, 0x08,
- 0xDD, 0xFD, 0x16, 0xFB, 0xE9, 0x55, 0xEF, 0xF0,
- 0xA0, 0x8D, 0x13, 0xAB, 0x81, 0xC6, 0x90, 0x01,
- 0xB5, 0x18, 0x84, 0xB3, 0xF6, 0xE6, 0x11, 0x57,
- 0xD6, 0x71, 0xC6, 0x3C, 0x3F, 0x2F, 0x33, 0xEE,
- 0x24, 0x42, 0x6E, 0xAC, 0x0B, 0xCA, 0xEC, 0xF9,
- 0x84, 0xF8, 0x22, 0xAA, 0x60, 0xF0, 0x32, 0xA9,
- 0x75, 0x75, 0x3B, 0xCB, 0x70, 0x21, 0x0A, 0x8D,
- 0x0F, 0xE0, 0xC4, 0x78, 0x2B, 0xF8, 0x97, 0xE3,
- 0xE4, 0x26, 0x4B, 0x29, 0xDA, 0x88, 0xCD, 0x46,
- 0xEC, 0xAA, 0xF9, 0x7F, 0xF1, 0x15, 0xEA, 0xC3,
- 0x87, 0xE6, 0x31, 0xF2, 0xCF, 0xDE, 0x4D, 0x80,
- 0x70, 0x91, 0x7E, 0x0C, 0xF7, 0x26, 0x3A, 0x92,
- 0x4F, 0x18, 0x83, 0xC0, 0x8F, 0x59, 0x01, 0xA5,
- 0x88, 0xD1, 0xDB, 0x26, 0x71, 0x27, 0x16, 0xF5,
- 0xEE, 0x10, 0x82, 0xAC, 0x68, 0x26, 0x9B, 0xE2,
- 0x6D, 0xD8, 0x9A, 0x80, 0xDF, 0x04, 0x31, 0xD5,
- 0xF1, 0x35, 0x5C, 0x3B, 0xDD, 0x9A, 0x65, 0xBA,
- 0x58, 0x34, 0x85, 0x61, 0x1C, 0x42, 0x10, 0x76,
- 0x73, 0x02, 0x42, 0xC9, 0x23, 0x18, 0x8E, 0xB4,
- 0x6F, 0xB4, 0xA3, 0x54, 0x6E, 0x88, 0x3B, 0x62,
- 0x7C, 0x02, 0x8D, 0x4C, 0x9F, 0xC8, 0x45, 0xF4,
- 0xC9, 0xDE, 0x4F, 0xEB, 0x22, 0x83, 0x1B, 0xE4,
- 0x49, 0x37, 0xE4, 0xAD, 0xE7, 0xCD, 0x21, 0x54,
- 0xBC, 0x1C, 0xC2, 0x04, 0x97, 0xB4, 0x10, 0x61,
- 0xF0, 0xE4, 0xEF, 0x27, 0x63, 0x3A, 0xDA, 0x91,
- 0x41, 0x25, 0x62, 0x1C, 0x5C, 0xB6, 0x38, 0x4A,
- 0x88, 0x71, 0x59, 0x5A, 0x8D, 0xA0, 0x09, 0xAF,
- 0x72, 0x94, 0xD7, 0x79, 0x5C, 0x60, 0x7C, 0x8F,
- 0x4C, 0xF5, 0xD9, 0xA1, 0x39, 0x6D, 0x81, 0x28,
- 0xEF, 0x13, 0x28, 0xDF, 0xF5, 0x3E, 0xF7, 0x8E,
- 0x09, 0x9C, 0x78, 0x18, 0x79, 0xB8, 0x68, 0xD7,
- 0xA8, 0x29, 0x62, 0xAD, 0xDE, 0xE1, 0x61, 0x76,
- 0x1B, 0x05, 0x16, 0xCD, 0xBF, 0x02, 0x8E, 0xA6,
- 0x43, 0x6E, 0x92, 0x55, 0x4F, 0x60, 0x9C, 0x03,
- 0xB8, 0x4F, 0xA3, 0x02, 0xAC, 0xA8, 0xA7, 0x0C,
- 0x1E, 0xB5, 0x6B, 0xF8, 0xC8, 0x4D, 0xDE, 0xD2,
- 0xB0, 0x29, 0x6E, 0x40, 0xE6, 0xD6, 0xC9, 0xE6,
- 0xB9, 0x0F, 0xB6, 0x63, 0xF5, 0xAA, 0x2B, 0x96,
- 0xA7, 0x16, 0xAC, 0x4E, 0x0A, 0x33, 0x1C, 0xA6,
- 0xE6, 0xBD, 0x8A, 0xCF, 0x40, 0xA9, 0xB2, 0xFA,
- 0x63, 0x27, 0xFD, 0x9B, 0xD9, 0xFC, 0xD5, 0x87,
- 0x8D, 0x4C, 0xB6, 0xA4, 0xCB, 0xE7, 0x74, 0x55,
- 0xF4, 0xFB, 0x41, 0x25, 0xB5, 0x4B, 0x0A, 0x1B,
- 0xB1, 0xD6, 0xB7, 0xD9, 0x47, 0x2A, 0xC3, 0x98,
- 0x6A, 0xC4, 0x03, 0x73, 0x1F, 0x93, 0x6E, 0x53,
- 0x19, 0x25, 0x64, 0x15, 0x83, 0xF9, 0x73, 0x2A,
- 0x74, 0xB4, 0x93, 0x69, 0xC4, 0x72, 0xFC, 0x26,
- 0xA2, 0x9F, 0x43, 0x45, 0xDD, 0xB9, 0xEF, 0x36,
- 0xC8, 0x3A, 0xCD, 0x99, 0x9B, 0x54, 0x1A, 0x36,
- 0xC1, 0x59, 0xF8, 0x98, 0xA8, 0xCC, 0x28, 0x0D,
- 0x73, 0x4C, 0xEE, 0x98, 0xCB, 0x7C, 0x58, 0x7E,
- 0x20, 0x75, 0x1E, 0xB7, 0xC9, 0xF8, 0xF2, 0x0E,
- 0x63, 0x9E, 0x05, 0x78, 0x1A, 0xB6, 0xA8, 0x7A,
- 0xF9, 0x98, 0x6A, 0xA6, 0x46, 0x84, 0x2E, 0xF6,
- 0x4B, 0xDC, 0x9B, 0x8F, 0x9B, 0x8F, 0xEE, 0xB4,
- 0xAA, 0x3F, 0xEE, 0xC0, 0x37, 0x27, 0x76, 0xC7,
- 0x95, 0xBB, 0x26, 0x74, 0x69, 0x12, 0x7F, 0xF1,
- 0xBB, 0xFF, 0xAE, 0xB5, 0x99, 0x6E, 0xCB, 0x0C
-};
-
-static const uint8_t catch_22_quote_2_512_bytes_AES_CBC_HMAC_SHA1_digest[] = {
- 0x9a, 0x4f, 0x88, 0x1b, 0xb6, 0x8f, 0xd8, 0x60,
- 0x42, 0x1a, 0x7d, 0x3d, 0xf5, 0x82, 0x80, 0xf1,
- 0x18, 0x8c, 0x1d, 0x32
-};
-
-
-/* Multisession Vector context Test */
-/*Begin Session 0 */
-static uint8_t ms_aes_cbc_key0[] = {
- 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7,
- 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, 0xfe, 0xff
-};
-
-static uint8_t ms_aes_cbc_iv0[] = {
- 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7,
- 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, 0xfe, 0xff
-};
-
-static const uint8_t ms_aes_cbc_cipher0[] = {
- 0x3C, 0xE4, 0xEE, 0x42, 0xB6, 0x9B, 0xC3, 0x38,
- 0x5F, 0xAD, 0x54, 0xDC, 0xA8, 0x32, 0x81, 0xDC,
- 0x7A, 0x6F, 0x85, 0x58, 0x07, 0x35, 0xED, 0xEB,
- 0xAD, 0x79, 0x79, 0x96, 0xD3, 0x0E, 0xA6, 0xD9,
- 0xAA, 0x86, 0xA4, 0x8F, 0xB5, 0xD6, 0x6E, 0x6D,
- 0x0C, 0x91, 0x2F, 0xC4, 0x67, 0x98, 0x0E, 0xC4,
- 0x8D, 0x83, 0x68, 0x69, 0xC4, 0xD3, 0x94, 0x34,
- 0xC4, 0x5D, 0x60, 0x55, 0x22, 0x87, 0x8F, 0x6F,
- 0x17, 0x8E, 0x75, 0xE4, 0x02, 0xF5, 0x1B, 0x99,
- 0xC8, 0x39, 0xA9, 0xAB, 0x23, 0x91, 0x12, 0xED,
- 0x08, 0xE7, 0xD9, 0x25, 0x89, 0x24, 0x4F, 0x8D,
- 0x68, 0xF3, 0x10, 0x39, 0x0A, 0xEE, 0x45, 0x24,
- 0xDF, 0x7A, 0x9D, 0x00, 0x25, 0xE5, 0x35, 0x71,
- 0x4E, 0x40, 0x59, 0x6F, 0x0A, 0x13, 0xB3, 0x72,
- 0x1D, 0x98, 0x63, 0x94, 0x89, 0xA5, 0x39, 0x8E,
- 0xD3, 0x9C, 0x8A, 0x7F, 0x71, 0x2F, 0xC7, 0xCD,
- 0x81, 0x05, 0xDC, 0xC0, 0x8D, 0xCE, 0x6D, 0x18,
- 0x30, 0xC4, 0x72, 0x51, 0xF0, 0x27, 0xC8, 0xF6,
- 0x60, 0x5B, 0x7C, 0xB2, 0xE3, 0x49, 0x0C, 0x29,
- 0xC6, 0x9F, 0x39, 0x57, 0x80, 0x55, 0x24, 0x2C,
- 0x9B, 0x0F, 0x5A, 0xB3, 0x89, 0x55, 0x31, 0x96,
- 0x0D, 0xCD, 0xF6, 0x51, 0x03, 0x2D, 0x89, 0x26,
- 0x74, 0x44, 0xD6, 0xE8, 0xDC, 0xEA, 0x44, 0x55,
- 0x64, 0x71, 0x9C, 0x9F, 0x5D, 0xBA, 0x39, 0x46,
- 0xA8, 0x17, 0xA1, 0x9C, 0x52, 0x9D, 0xBC, 0x6B,
- 0x4A, 0x98, 0xE6, 0xEA, 0x33, 0xEC, 0x58, 0xB4,
- 0x43, 0xF0, 0x32, 0x45, 0xA4, 0xC1, 0x55, 0xB7,
- 0x5D, 0xB5, 0x59, 0xB2, 0xE3, 0x96, 0xFF, 0xA5,
- 0xAF, 0xE1, 0x86, 0x1B, 0x42, 0xE6, 0x3B, 0xA0,
- 0x90, 0x4A, 0xE8, 0x8C, 0x21, 0x7F, 0x36, 0x1E,
- 0x5B, 0x65, 0x25, 0xD1, 0xC1, 0x5A, 0xCA, 0x3D,
- 0x10, 0xED, 0x2D, 0x79, 0xD0, 0x0F, 0x58, 0x44,
- 0x69, 0x81, 0xF5, 0xD4, 0xC9, 0x0F, 0x90, 0x76,
- 0x1F, 0x54, 0xD2, 0xD5, 0x97, 0xCE, 0x2C, 0xE3,
- 0xEF, 0xF4, 0xB7, 0xC6, 0x3A, 0x87, 0x7F, 0x83,
- 0x2A, 0xAF, 0xCD, 0x90, 0x12, 0xA7, 0x7D, 0x85,
- 0x1D, 0x62, 0xD3, 0x85, 0x25, 0x05, 0xDB, 0x45,
- 0x92, 0xA3, 0xF6, 0xA2, 0xA8, 0x41, 0xE4, 0x25,
- 0x86, 0x87, 0x67, 0x24, 0xEC, 0x89, 0x23, 0x2A,
- 0x9B, 0x20, 0x4D, 0x93, 0xEE, 0xE2, 0x2E, 0xC1,
- 0x0B, 0x15, 0x33, 0xCF, 0x00, 0xD1, 0x1A, 0xDA,
- 0x93, 0xFD, 0x28, 0x21, 0x5B, 0xCF, 0xD1, 0xF3,
- 0x5A, 0x81, 0xBA, 0x82, 0x5E, 0x2F, 0x61, 0xB4,
- 0x05, 0x71, 0xB5, 0xF4, 0x39, 0x3C, 0x1F, 0x60,
- 0x00, 0x7A, 0xC4, 0xF8, 0x35, 0x20, 0x6C, 0x3A,
- 0xCC, 0x03, 0x8F, 0x7B, 0xA2, 0xB6, 0x65, 0x8A,
- 0xB6, 0x5F, 0xFD, 0x25, 0xD3, 0x5F, 0x92, 0xF9,
- 0xAE, 0x17, 0x9B, 0x5E, 0x6E, 0x9A, 0xE4, 0x55,
- 0x10, 0x25, 0x07, 0xA4, 0xAF, 0x21, 0x69, 0x13,
- 0xD8, 0xFA, 0x31, 0xED, 0xF7, 0xA7, 0xA7, 0x3B,
- 0xB8, 0x96, 0x8E, 0x10, 0x86, 0x74, 0xD8, 0xB1,
- 0x34, 0x9E, 0x9B, 0x6A, 0x26, 0xA8, 0xD4, 0xD0,
- 0xB5, 0xF6, 0xDE, 0xE7, 0xCA, 0x06, 0xDC, 0xA3,
- 0x6F, 0xEE, 0x6B, 0x1E, 0xB5, 0x30, 0x99, 0x23,
- 0xF9, 0x76, 0xF0, 0xA0, 0xCF, 0x3B, 0x94, 0x7B,
- 0x19, 0x8D, 0xA5, 0x0C, 0x18, 0xA6, 0x1D, 0x07,
- 0x89, 0xBE, 0x5B, 0x61, 0xE5, 0xF1, 0x42, 0xDB,
- 0xD4, 0x2E, 0x02, 0x1F, 0xCE, 0xEF, 0x92, 0xB1,
- 0x1B, 0x56, 0x50, 0xF2, 0x16, 0xE5, 0xE7, 0x4F,
- 0xFD, 0xBB, 0x3E, 0xD2, 0xFC, 0x3C, 0xC6, 0x0F,
- 0xF9, 0x12, 0x4E, 0xCB, 0x1E, 0x0C, 0x15, 0x84,
- 0x2A, 0x14, 0x8A, 0x02, 0xE4, 0x7E, 0x95, 0x5B,
- 0x86, 0xDB, 0x9B, 0x62, 0x5B, 0x19, 0xD2, 0x17,
- 0xFA, 0x13, 0xBB, 0x6B, 0x3F, 0x45, 0x9F, 0xBF
-};
-
-
-static uint8_t ms_hmac_key0[] = {
- 0xFF, 0x1A, 0x7D, 0x3D, 0xF5, 0x82, 0x80, 0xF1,
- 0xF1, 0x35, 0x5C, 0x3B, 0xDD, 0x9A, 0x65, 0xBA,
- 0x58, 0x34, 0x85, 0x65, 0x1C, 0x42, 0x50, 0x76,
- 0x9A, 0xAF, 0x88, 0x1B, 0xB6, 0x8F, 0xF8, 0x60,
- 0xA2, 0x5A, 0x7F, 0x3F, 0xF4, 0x72, 0x70, 0xF1,
- 0xF5, 0x35, 0x4C, 0x3B, 0xDD, 0x90, 0x65, 0xB0,
- 0x47, 0x3A, 0x75, 0x61, 0x5C, 0xA2, 0x10, 0x76,
- 0x9A, 0xAF, 0x77, 0x5B, 0xB6, 0x7F, 0xF7, 0x60
-};
-
-static const uint8_t ms_hmac_digest0[] = {
- 0x43, 0x52, 0xED, 0x34, 0xAB, 0x36, 0xB2, 0x51,
- 0xFB, 0xA3, 0xA6, 0x7C, 0x38, 0xFC, 0x42, 0x8F,
- 0x57, 0x64, 0xAB, 0x81, 0xA7, 0x89, 0xB7, 0x6C,
- 0xA0, 0xDC, 0xB9, 0x4D, 0xC4, 0x30, 0xF9, 0xD4,
- 0x10, 0x82, 0x55, 0xD0, 0xAB, 0x32, 0xFB, 0x56,
- 0x0D, 0xE4, 0x68, 0x3D, 0x76, 0xD0, 0x7B, 0xE4,
- 0xA6, 0x2C, 0x34, 0x9E, 0x8C, 0x41, 0xF8, 0x23,
- 0x28, 0x1B, 0x3A, 0x90, 0x26, 0x34, 0x47, 0x90
- };
-
-/* End Session 0 */
-/* Begin session 1 */
-
-static uint8_t ms_aes_cbc_key1[] = {
- 0xf1, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7,
- 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, 0xfe, 0xff
-};
-
-static uint8_t ms_aes_cbc_iv1[] = {
- 0xf1, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7,
- 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, 0xfe, 0xff
-};
-
-static const uint8_t ms_aes_cbc_cipher1[] = {
- 0x5A, 0x7A, 0x67, 0x5D, 0xB8, 0xE1, 0xDC, 0x71,
- 0x39, 0xA8, 0x74, 0x93, 0x9C, 0x4C, 0xFE, 0x23,
- 0x61, 0xCD, 0xA4, 0xB3, 0xD9, 0xCE, 0x99, 0x09,
- 0x2A, 0x23, 0xF3, 0x29, 0xBF, 0x4C, 0xB4, 0x6A,
- 0x1B, 0x6B, 0x73, 0x4D, 0x48, 0x0C, 0xCF, 0x6C,
- 0x5E, 0x34, 0x9E, 0x7F, 0xBC, 0x8F, 0xCC, 0x8F,
- 0x75, 0x1D, 0x3D, 0x77, 0x10, 0x76, 0xC8, 0xB9,
- 0x99, 0x6F, 0xD6, 0x56, 0x75, 0xA9, 0xB2, 0x66,
- 0xC2, 0x24, 0x2B, 0x9C, 0xFE, 0x40, 0x8E, 0x43,
- 0x20, 0x97, 0x1B, 0xFA, 0xD0, 0xCF, 0x04, 0xAB,
- 0xBB, 0xF6, 0x5D, 0xF5, 0xA0, 0x19, 0x7C, 0x23,
- 0x5D, 0x80, 0x8C, 0x49, 0xF6, 0x76, 0x88, 0x29,
- 0x27, 0x4C, 0x59, 0x2B, 0x43, 0xA6, 0xB2, 0x26,
- 0x27, 0x78, 0xBE, 0x1B, 0xE1, 0x4F, 0x5A, 0x1F,
- 0xFC, 0x68, 0x08, 0xE7, 0xC4, 0xD1, 0x34, 0x68,
- 0xB7, 0x13, 0x14, 0x41, 0x62, 0x6B, 0x1F, 0x77,
- 0x0C, 0x68, 0x1D, 0x0D, 0xED, 0x89, 0xAA, 0xD8,
- 0x97, 0x02, 0xBA, 0x5E, 0xD4, 0x84, 0x25, 0x97,
- 0x03, 0xA5, 0xA6, 0x13, 0x66, 0x02, 0xF4, 0xC3,
- 0xF3, 0xD3, 0xCC, 0x95, 0xC3, 0x87, 0x46, 0x90,
- 0x1F, 0x6E, 0x14, 0xA8, 0x00, 0xF2, 0x6F, 0xD5,
- 0xA1, 0xAD, 0xD5, 0x40, 0xA2, 0x0F, 0x32, 0x7E,
- 0x99, 0xA3, 0xF5, 0x53, 0xC3, 0x26, 0xA1, 0x45,
- 0x01, 0x88, 0x57, 0x84, 0x3E, 0x7B, 0x4E, 0x0B,
- 0x3C, 0xB5, 0x3E, 0x9E, 0xE9, 0x78, 0x77, 0xC5,
- 0xC0, 0x89, 0xA8, 0xF8, 0xF1, 0xA5, 0x2D, 0x5D,
- 0xF9, 0xC6, 0xFB, 0xCB, 0x05, 0x23, 0xBD, 0x6E,
- 0x5E, 0x14, 0xC6, 0x57, 0x73, 0xCF, 0x98, 0xBD,
- 0x10, 0x8B, 0x18, 0xA6, 0x01, 0x5B, 0x13, 0xAE,
- 0x8E, 0xDE, 0x1F, 0xB5, 0xB7, 0x40, 0x6C, 0xC1,
- 0x1E, 0xA1, 0x19, 0x20, 0x9E, 0x95, 0xE0, 0x2F,
- 0x1C, 0xF5, 0xD9, 0xD0, 0x2B, 0x1E, 0x82, 0x25,
- 0x62, 0xB4, 0xEB, 0xA1, 0x1F, 0xCE, 0x44, 0xA1,
- 0xCB, 0x92, 0x01, 0x6B, 0xE4, 0x26, 0x23, 0xE3,
- 0xC5, 0x67, 0x35, 0x55, 0xDA, 0xE5, 0x27, 0xEE,
- 0x8D, 0x12, 0x84, 0xB7, 0xBA, 0xA7, 0x1C, 0xD6,
- 0x32, 0x3F, 0x67, 0xED, 0xFB, 0x5B, 0x8B, 0x52,
- 0x46, 0x8C, 0xF9, 0x69, 0xCD, 0xAE, 0x79, 0xAA,
- 0x37, 0x78, 0x49, 0xEB, 0xC6, 0x8E, 0x76, 0x63,
- 0x84, 0xFF, 0x9D, 0x22, 0x99, 0x51, 0xB7, 0x5E,
- 0x83, 0x4C, 0x8B, 0xDF, 0x5A, 0x07, 0xCC, 0xBA,
- 0x42, 0xA5, 0x98, 0xB6, 0x47, 0x0E, 0x66, 0xEB,
- 0x23, 0x0E, 0xBA, 0x44, 0xA8, 0xAA, 0x20, 0x71,
- 0x79, 0x9C, 0x77, 0x5F, 0xF5, 0xFE, 0xEC, 0xEF,
- 0xC6, 0x64, 0x3D, 0x84, 0xD0, 0x2B, 0xA7, 0x0A,
- 0xC3, 0x72, 0x5B, 0x9C, 0xFA, 0xA8, 0x87, 0x95,
- 0x94, 0x11, 0x38, 0xA7, 0x1E, 0x58, 0xE3, 0x73,
- 0xC6, 0xC9, 0xD1, 0x7B, 0x92, 0xDB, 0x0F, 0x49,
- 0x74, 0xC2, 0xA2, 0x0E, 0x35, 0x57, 0xAC, 0xDB,
- 0x9A, 0x1C, 0xCF, 0x5A, 0x32, 0x3E, 0x26, 0x9B,
- 0xEC, 0xB3, 0xEF, 0x9C, 0xFE, 0xBE, 0x52, 0xAC,
- 0xB1, 0x29, 0xDD, 0xFD, 0x07, 0xE2, 0xEE, 0xED,
- 0xE4, 0x46, 0x37, 0xFE, 0xD1, 0xDC, 0xCD, 0x02,
- 0xF9, 0x31, 0xB0, 0xFB, 0x36, 0xB7, 0x34, 0xA4,
- 0x76, 0xE8, 0x57, 0xBF, 0x99, 0x92, 0xC7, 0xAF,
- 0x98, 0x10, 0xE2, 0x70, 0xCA, 0xC9, 0x2B, 0x82,
- 0x06, 0x96, 0x88, 0x0D, 0xB3, 0xAC, 0x9E, 0x6D,
- 0x43, 0xBC, 0x5B, 0x31, 0xCF, 0x65, 0x8D, 0xA6,
- 0xC7, 0xFE, 0x73, 0xE1, 0x54, 0xF7, 0x10, 0xF9,
- 0x86, 0xF7, 0xDF, 0xA1, 0xA1, 0xD8, 0xAE, 0x35,
- 0xB3, 0x90, 0xDC, 0x6F, 0x43, 0x7A, 0x8B, 0xE0,
- 0xFE, 0x8F, 0x33, 0x4D, 0x29, 0x6C, 0x45, 0x53,
- 0x73, 0xDD, 0x21, 0x0B, 0x85, 0x30, 0xB5, 0xA5,
- 0xF3, 0x5D, 0xEC, 0x79, 0x61, 0x9D, 0x9E, 0xB3
-
-};
-
-static uint8_t ms_hmac_key1[] = {
- 0xFE, 0x1A, 0x7D, 0x3D, 0xF5, 0x82, 0x80, 0xF1,
- 0xF1, 0x35, 0x5C, 0x3B, 0xDD, 0x9A, 0x65, 0xBA,
- 0x58, 0x34, 0x85, 0x65, 0x1C, 0x42, 0x50, 0x76,
- 0x9A, 0xAF, 0x88, 0x1B, 0xB6, 0x8F, 0xF8, 0x60,
- 0xA2, 0x5A, 0x7F, 0x3F, 0xF4, 0x72, 0x70, 0xF1,
- 0xF5, 0x35, 0x4C, 0x3B, 0xDD, 0x90, 0x65, 0xB0,
- 0x47, 0x3A, 0x75, 0x61, 0x5C, 0xA2, 0x10, 0x76,
- 0x9A, 0xAF, 0x77, 0x5B, 0xB6, 0x7F, 0xF7, 0x60
-};
-
-static const uint8_t ms_hmac_digest1[] = {
- 0xCE, 0x6E, 0x5F, 0x77, 0x96, 0x9A, 0xB1, 0x69,
- 0x2D, 0x5E, 0xF3, 0x2F, 0x32, 0x10, 0xCB, 0x50,
- 0x0E, 0x09, 0x56, 0x25, 0x07, 0x34, 0xC9, 0x20,
- 0xEC, 0x13, 0x43, 0x23, 0x5C, 0x08, 0x8B, 0xCD,
- 0xDC, 0x86, 0x8C, 0xEE, 0x0A, 0x95, 0x2E, 0xB9,
- 0x8C, 0x7B, 0x02, 0x7A, 0xD4, 0xE1, 0x49, 0xB4,
- 0x45, 0xB5, 0x52, 0x37, 0xC6, 0xFF, 0xFE, 0xAA,
- 0x0A, 0x87, 0xB8, 0x51, 0xF9, 0x2A, 0x01, 0x8F
-};
-/* End Session 1 */
-/* Begin Session 2 */
-static uint8_t ms_aes_cbc_key2[] = {
- 0xff, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7,
- 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, 0xfe, 0xff
-};
-
-static uint8_t ms_aes_cbc_iv2[] = {
- 0xff, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7,
- 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, 0xfe, 0xff
-};
-
-static const uint8_t ms_aes_cbc_cipher2[] = {
- 0xBB, 0x3C, 0x68, 0x25, 0xFD, 0xB6, 0xA2, 0x91,
- 0x20, 0x56, 0xF6, 0x30, 0x35, 0xFC, 0x9E, 0x97,
- 0xF2, 0x90, 0xFC, 0x7E, 0x3E, 0x0A, 0x75, 0xC8,
- 0x4C, 0xF2, 0x2D, 0xAC, 0xD3, 0x93, 0xF0, 0xC5,
- 0x14, 0x88, 0x8A, 0x23, 0xC2, 0x59, 0x9A, 0x98,
- 0x4B, 0xD5, 0x2C, 0xDA, 0x43, 0xA9, 0x34, 0x69,
- 0x7C, 0x6D, 0xDB, 0xDC, 0xCB, 0xC0, 0xA0, 0x09,
- 0xA7, 0x86, 0x16, 0x4B, 0xBF, 0xA8, 0xB6, 0xCF,
- 0x7F, 0x74, 0x1F, 0x22, 0xF0, 0xF6, 0xBB, 0x44,
- 0x8B, 0x4C, 0x9E, 0x23, 0xF8, 0x9F, 0xFC, 0x5B,
- 0x9E, 0x9C, 0x2A, 0x79, 0x30, 0x8F, 0xBF, 0xA9,
- 0x68, 0xA1, 0x20, 0x71, 0x7C, 0x77, 0x22, 0x34,
- 0x07, 0xCD, 0xC6, 0xF6, 0x50, 0x0A, 0x08, 0x99,
- 0x17, 0x98, 0xE3, 0x93, 0x8A, 0xB0, 0xEE, 0xDF,
- 0xC2, 0xBA, 0x3B, 0x44, 0x73, 0xDF, 0xDD, 0xDC,
- 0x14, 0x4D, 0x3B, 0xBB, 0x5E, 0x58, 0xC1, 0x26,
- 0xA7, 0xAE, 0x47, 0xF3, 0x24, 0x6D, 0x4F, 0xD3,
- 0x6E, 0x3E, 0x33, 0xE6, 0x7F, 0xCA, 0x50, 0xAF,
- 0x5D, 0x3D, 0xA0, 0xDD, 0xC9, 0xF3, 0x30, 0xD3,
- 0x6E, 0x8B, 0x2E, 0x12, 0x24, 0x34, 0xF0, 0xD3,
- 0xC7, 0x8D, 0x23, 0x29, 0xAA, 0x05, 0xE1, 0xFA,
- 0x2E, 0xF6, 0x8D, 0x37, 0x86, 0xC0, 0x6D, 0x13,
- 0x2D, 0x98, 0xF3, 0x52, 0x39, 0x22, 0xCE, 0x38,
- 0xC2, 0x1A, 0x72, 0xED, 0xFB, 0xCC, 0xE4, 0x71,
- 0x5A, 0x0C, 0x0D, 0x09, 0xF8, 0xE8, 0x1B, 0xBC,
- 0x53, 0xC8, 0xD8, 0x8F, 0xE5, 0x98, 0x5A, 0xB1,
- 0x06, 0xA6, 0x5B, 0xE6, 0xA2, 0x88, 0x21, 0x9E,
- 0x36, 0xC0, 0x34, 0xF9, 0xFB, 0x3B, 0x0A, 0x22,
- 0x00, 0x00, 0x39, 0x48, 0x8D, 0x23, 0x74, 0x62,
- 0x72, 0x91, 0xE6, 0x36, 0xAA, 0x77, 0x9C, 0x72,
- 0x9D, 0xA8, 0xC3, 0xA9, 0xD5, 0x44, 0x72, 0xA6,
- 0xB9, 0x28, 0x8F, 0x64, 0x4C, 0x8A, 0x64, 0xE6,
- 0x4E, 0xFA, 0xEF, 0x87, 0xDE, 0x7B, 0x22, 0x44,
- 0xB0, 0xDF, 0x2E, 0x5F, 0x0B, 0xA5, 0xF2, 0x24,
- 0x07, 0x5C, 0x2D, 0x39, 0xB7, 0x3D, 0x8A, 0xE5,
- 0x0E, 0x9D, 0x4E, 0x50, 0xED, 0x03, 0x99, 0x8E,
- 0xF0, 0x06, 0x55, 0x4E, 0xA2, 0x24, 0xE7, 0x17,
- 0x46, 0xDF, 0x6C, 0xCD, 0xC6, 0x44, 0xE8, 0xF9,
- 0xB9, 0x1B, 0x36, 0xF6, 0x7F, 0x10, 0xA4, 0x7D,
- 0x90, 0xBD, 0xE4, 0xAA, 0xD6, 0x9E, 0x18, 0x9D,
- 0x22, 0x35, 0xD6, 0x55, 0x54, 0xAA, 0xF7, 0x22,
- 0xA3, 0x3E, 0xEF, 0xC8, 0xA2, 0x34, 0x8D, 0xA9,
- 0x37, 0x63, 0xA6, 0xC3, 0x57, 0xCB, 0x0C, 0x49,
- 0x7D, 0x02, 0xBE, 0xAA, 0x13, 0x75, 0xB7, 0x4E,
- 0x52, 0x62, 0xA5, 0xC2, 0x33, 0xC7, 0x6C, 0x1B,
- 0xF6, 0x34, 0xF6, 0x09, 0xA5, 0x0C, 0xC7, 0xA2,
- 0x61, 0x48, 0x62, 0x7D, 0x17, 0x15, 0xE3, 0x95,
- 0xC8, 0x63, 0xD2, 0xA4, 0x43, 0xA9, 0x49, 0x07,
- 0xB2, 0x3B, 0x2B, 0x62, 0x7D, 0xCB, 0x51, 0xB3,
- 0x25, 0x33, 0x47, 0x0E, 0x14, 0x67, 0xDC, 0x6A,
- 0x9B, 0x51, 0xAC, 0x9D, 0x8F, 0xA2, 0x2B, 0x57,
- 0x8C, 0x5C, 0x5F, 0x76, 0x23, 0x92, 0x0F, 0x84,
- 0x46, 0x0E, 0x40, 0x85, 0x38, 0x60, 0xFA, 0x61,
- 0x20, 0xC5, 0xE3, 0xF1, 0x70, 0xAC, 0x1B, 0xBF,
- 0xC4, 0x2B, 0xC5, 0x67, 0xD1, 0x43, 0xC5, 0x17,
- 0x74, 0x71, 0x69, 0x6F, 0x82, 0x89, 0x19, 0x8A,
- 0x70, 0x43, 0x92, 0x01, 0xC4, 0x63, 0x7E, 0xB1,
- 0x59, 0x4E, 0xCD, 0xEA, 0x93, 0xA4, 0x52, 0x53,
- 0x9B, 0x61, 0x5B, 0xD2, 0x3E, 0x19, 0x39, 0xB7,
- 0x32, 0xEA, 0x8E, 0xF8, 0x1D, 0x76, 0x5C, 0xB2,
- 0x73, 0x2D, 0x91, 0xC0, 0x18, 0xED, 0x25, 0x2A,
- 0x53, 0x64, 0xF0, 0x92, 0x31, 0x55, 0x21, 0xA8,
- 0x24, 0xA9, 0xD1, 0x02, 0xF6, 0x6C, 0x2B, 0x70,
- 0xA9, 0x59, 0xC1, 0xD6, 0xC3, 0x57, 0x5B, 0x92
-};
-
-static uint8_t ms_hmac_key2[] = {
- 0xFC, 0x1A, 0x7D, 0x3D, 0xF5, 0x82, 0x80, 0xF1,
- 0xF1, 0x35, 0x5C, 0x3B, 0xDD, 0x9A, 0x65, 0xBA,
- 0x58, 0x34, 0x85, 0x65, 0x1C, 0x42, 0x50, 0x76,
- 0x9A, 0xAF, 0x88, 0x1B, 0xB6, 0x8F, 0xF8, 0x60,
- 0xA2, 0x5A, 0x7F, 0x3F, 0xF4, 0x72, 0x70, 0xF1,
- 0xF5, 0x35, 0x4C, 0x3B, 0xDD, 0x90, 0x65, 0xB0,
- 0x47, 0x3A, 0x75, 0x61, 0x5C, 0xA2, 0x10, 0x76,
- 0x9A, 0xAF, 0x77, 0x5B, 0xB6, 0x7F, 0xF7, 0x60
-};
-
-static const uint8_t ms_hmac_digest2[] = {
- 0xA5, 0x0F, 0x9C, 0xFB, 0x08, 0x62, 0x59, 0xFF,
- 0x80, 0x2F, 0xEB, 0x4B, 0xE1, 0x46, 0x21, 0xD6,
- 0x02, 0x98, 0xF2, 0x8E, 0xF4, 0xEC, 0xD4, 0x77,
- 0x86, 0x4C, 0x31, 0x28, 0xC8, 0x25, 0x80, 0x27,
- 0x3A, 0x72, 0x5D, 0x6A, 0x56, 0x8A, 0xD3, 0x82,
- 0xB0, 0xEC, 0x31, 0x6D, 0x8B, 0x6B, 0xB4, 0x24,
- 0xE7, 0x62, 0xC1, 0x52, 0xBC, 0x14, 0x1B, 0x8E,
- 0xEC, 0x9A, 0xF1, 0x47, 0x80, 0xD2, 0xB0, 0x59
-};
-
-/* End Session 2 */
-
-
-static int
-test_AES_CBC_HMAC_SHA1_encrypt_digest(void)
-{
- struct crypto_testsuite_params *ts_params = &testsuite_params;
- struct crypto_unittest_params *ut_params = &unittest_params;
-
- /* Generate test mbuf data and space for digest */
- ut_params->ibuf = setup_test_string(ts_params->mbuf_pool,
- catch_22_quote, QUOTE_512_BYTES, 0);
-
- ut_params->digest = (uint8_t *)rte_pktmbuf_append(ut_params->ibuf,
- DIGEST_BYTE_LENGTH_SHA1);
- TEST_ASSERT_NOT_NULL(ut_params->digest, "no room to append digest");
-
- /* Setup Cipher Parameters */
- ut_params->cipher_xform.type = RTE_CRYPTO_SYM_XFORM_CIPHER;
- ut_params->cipher_xform.next = &ut_params->auth_xform;
-
- ut_params->cipher_xform.cipher.algo = RTE_CRYPTO_CIPHER_AES_CBC;
- ut_params->cipher_xform.cipher.op = RTE_CRYPTO_CIPHER_OP_ENCRYPT;
- ut_params->cipher_xform.cipher.key.data = aes_cbc_key;
- ut_params->cipher_xform.cipher.key.length = CIPHER_KEY_LENGTH_AES_CBC;
-
- /* Setup HMAC Parameters */
- ut_params->auth_xform.type = RTE_CRYPTO_SYM_XFORM_AUTH;
-
- ut_params->auth_xform.next = NULL;
-
- ut_params->auth_xform.auth.op = RTE_CRYPTO_AUTH_OP_GENERATE;
- ut_params->auth_xform.auth.algo = RTE_CRYPTO_AUTH_SHA1_HMAC;
- ut_params->auth_xform.auth.key.length = HMAC_KEY_LENGTH_SHA1;
- ut_params->auth_xform.auth.key.data = hmac_sha1_key;
- ut_params->auth_xform.auth.digest_length = DIGEST_BYTE_LENGTH_SHA1;
-
- /* Create crypto session*/
- ut_params->sess = rte_cryptodev_sym_session_create(
- ts_params->valid_devs[0],
- &ut_params->cipher_xform);
- TEST_ASSERT_NOT_NULL(ut_params->sess, "Session creation failed");
-
- /* Generate crypto op data structure */
- ut_params->op = rte_crypto_op_alloc(ts_params->op_mpool,
- RTE_CRYPTO_OP_TYPE_SYMMETRIC);
- TEST_ASSERT_NOT_NULL(ut_params->op,
- "Failed to allocate symmetric crypto operation struct");
-
- rte_crypto_op_attach_sym_session(ut_params->op, ut_params->sess);
-
- struct rte_crypto_sym_op *sym_op = ut_params->op->sym;
-
- /* set crypto operation source mbuf */
- sym_op->m_src = ut_params->ibuf;
-
- /* Set crypto operation authentication parameters */
- sym_op->auth.digest.data = ut_params->digest;
- sym_op->auth.digest.phys_addr = rte_pktmbuf_mtophys_offset(
- ut_params->ibuf, QUOTE_512_BYTES);
- sym_op->auth.digest.length = DIGEST_BYTE_LENGTH_SHA1;
-
- sym_op->auth.data.offset = CIPHER_IV_LENGTH_AES_CBC;
- sym_op->auth.data.length = QUOTE_512_BYTES;
-
- /* Set crypto operation cipher parameters */
- sym_op->cipher.iv.data = (uint8_t *)rte_pktmbuf_prepend(ut_params->ibuf,
- CIPHER_IV_LENGTH_AES_CBC);
- sym_op->cipher.iv.phys_addr = rte_pktmbuf_mtophys(ut_params->ibuf);
- sym_op->cipher.iv.length = CIPHER_IV_LENGTH_AES_CBC;
-
- rte_memcpy(sym_op->cipher.iv.data, aes_cbc_iv,
- CIPHER_IV_LENGTH_AES_CBC);
-
- sym_op->cipher.data.offset = CIPHER_IV_LENGTH_AES_CBC;
- sym_op->cipher.data.length = QUOTE_512_BYTES;
-
- /* Process crypto operation */
- TEST_ASSERT_NOT_NULL(process_crypto_request(ts_params->valid_devs[0],
- ut_params->op), "failed to process sym crypto op");
-
- TEST_ASSERT_EQUAL(ut_params->op->status, RTE_CRYPTO_OP_STATUS_SUCCESS,
- "crypto op processing failed");
-
- /* Validate obuf */
- uint8_t *ciphertext = rte_pktmbuf_mtod_offset(ut_params->op->sym->m_src,
- uint8_t *, CIPHER_IV_LENGTH_AES_CBC);
-
- TEST_ASSERT_BUFFERS_ARE_EQUAL(ciphertext,
- catch_22_quote_2_512_bytes_AES_CBC_ciphertext,
- QUOTE_512_BYTES,
- "ciphertext data not as expected");
-
- uint8_t *digest = ciphertext + QUOTE_512_BYTES;
-
- TEST_ASSERT_BUFFERS_ARE_EQUAL(digest,
- catch_22_quote_2_512_bytes_AES_CBC_HMAC_SHA1_digest,
- gbl_cryptodev_type == RTE_CRYPTODEV_AESNI_MB_PMD ?
- TRUNCATED_DIGEST_BYTE_LENGTH_SHA1 :
- DIGEST_BYTE_LENGTH_SHA1,
- "Generated digest data not as expected");
-
- return TEST_SUCCESS;
-}
-
-/* ***** AES-CBC / HMAC-SHA512 Hash Tests ***** */
-
-#define HMAC_KEY_LENGTH_SHA512 (DIGEST_BYTE_LENGTH_SHA512)
-
-static uint8_t hmac_sha512_key[] = {
- 0x42, 0x1a, 0x7d, 0x3d, 0xf5, 0x82, 0x80, 0xf1,
- 0xF1, 0x35, 0x5C, 0x3B, 0xDD, 0x9A, 0x65, 0xBA,
- 0x58, 0x34, 0x85, 0x65, 0x1C, 0x42, 0x50, 0x76,
- 0x9a, 0xaf, 0x88, 0x1b, 0xb6, 0x8f, 0xf8, 0x60,
- 0xa2, 0x5a, 0x7f, 0x3f, 0xf4, 0x72, 0x70, 0xf1,
- 0xF5, 0x35, 0x4C, 0x3B, 0xDD, 0x90, 0x65, 0xB0,
- 0x47, 0x3a, 0x75, 0x61, 0x5C, 0xa2, 0x10, 0x76,
- 0x9a, 0xaf, 0x77, 0x5b, 0xb6, 0x7f, 0xf7, 0x60 };
-
-static const uint8_t catch_22_quote_2_512_bytes_AES_CBC_HMAC_SHA512_digest[] = {
- 0x5D, 0x54, 0x66, 0xC1, 0x6E, 0xBC, 0x04, 0xB8,
- 0x46, 0xB8, 0x08, 0x6E, 0xE0, 0xF0, 0x43, 0x48,
- 0x37, 0x96, 0x9C, 0xC6, 0x9C, 0xC2, 0x1E, 0xE8,
- 0xF2, 0x0C, 0x0B, 0xEF, 0x86, 0xA2, 0xE3, 0x70,
- 0x95, 0xC8, 0xB3, 0x06, 0x47, 0xA9, 0x90, 0xE8,
- 0xA0, 0xC6, 0x72, 0x69, 0x05, 0xC0, 0x0D, 0x0E,
- 0x21, 0x96, 0x65, 0x93, 0x74, 0x43, 0x2A, 0x1D,
- 0x2E, 0xBF, 0xC2, 0xC2, 0xEE, 0xCC, 0x2F, 0x0A };
-
-
-
-static int
-test_AES_CBC_HMAC_SHA512_decrypt_create_session_params(
- struct crypto_unittest_params *ut_params,
- uint8_t *cipher_key,
- uint8_t *hmac_key);
-
-static int
-test_AES_CBC_HMAC_SHA512_decrypt_perform(struct rte_cryptodev_sym_session *sess,
- struct crypto_unittest_params *ut_params,
- struct crypto_testsuite_params *ts_params,
- const uint8_t *cipher,
- const uint8_t *digest,
- const uint8_t *iv);
-
-
-static int
-test_AES_CBC_HMAC_SHA512_decrypt_create_session_params(
- struct crypto_unittest_params *ut_params,
- uint8_t *cipher_key,
- uint8_t *hmac_key)
-{
-
- /* Setup Cipher Parameters */
- ut_params->cipher_xform.type = RTE_CRYPTO_SYM_XFORM_CIPHER;
- ut_params->cipher_xform.next = NULL;
-
- ut_params->cipher_xform.cipher.algo = RTE_CRYPTO_CIPHER_AES_CBC;
- ut_params->cipher_xform.cipher.op = RTE_CRYPTO_CIPHER_OP_DECRYPT;
- ut_params->cipher_xform.cipher.key.data = cipher_key;
- ut_params->cipher_xform.cipher.key.length = CIPHER_KEY_LENGTH_AES_CBC;
-
- /* Setup HMAC Parameters */
- ut_params->auth_xform.type = RTE_CRYPTO_SYM_XFORM_AUTH;
- ut_params->auth_xform.next = &ut_params->cipher_xform;
-
- ut_params->auth_xform.auth.op = RTE_CRYPTO_AUTH_OP_VERIFY;
- ut_params->auth_xform.auth.algo = RTE_CRYPTO_AUTH_SHA512_HMAC;
- ut_params->auth_xform.auth.key.data = hmac_key;
- ut_params->auth_xform.auth.key.length = HMAC_KEY_LENGTH_SHA512;
- ut_params->auth_xform.auth.digest_length = DIGEST_BYTE_LENGTH_SHA512;
-
- return TEST_SUCCESS;
-}
-
-
-static int
-test_AES_CBC_HMAC_SHA512_decrypt_perform(struct rte_cryptodev_sym_session *sess,
- struct crypto_unittest_params *ut_params,
- struct crypto_testsuite_params *ts_params,
- const uint8_t *cipher,
- const uint8_t *digest,
- const uint8_t *iv)
-{
- /* Generate test mbuf data and digest */
- ut_params->ibuf = setup_test_string(ts_params->mbuf_pool,
- (const char *)
- cipher,
- QUOTE_512_BYTES, 0);
-
- ut_params->digest = (uint8_t *)rte_pktmbuf_append(ut_params->ibuf,
- DIGEST_BYTE_LENGTH_SHA512);
- TEST_ASSERT_NOT_NULL(ut_params->digest, "no room to append digest");
-
- rte_memcpy(ut_params->digest,
- digest,
- DIGEST_BYTE_LENGTH_SHA512);
-
- /* Generate Crypto op data structure */
- ut_params->op = rte_crypto_op_alloc(ts_params->op_mpool,
- RTE_CRYPTO_OP_TYPE_SYMMETRIC);
- TEST_ASSERT_NOT_NULL(ut_params->op,
- "Failed to allocate symmetric crypto operation struct");
-
- rte_crypto_op_attach_sym_session(ut_params->op, sess);
-
- struct rte_crypto_sym_op *sym_op = ut_params->op->sym;
-
- /* set crypto operation source mbuf */
- sym_op->m_src = ut_params->ibuf;
-
- sym_op->auth.digest.data = ut_params->digest;
- sym_op->auth.digest.phys_addr = rte_pktmbuf_mtophys_offset(
- ut_params->ibuf, QUOTE_512_BYTES);
- sym_op->auth.digest.length = DIGEST_BYTE_LENGTH_SHA512;
-
- sym_op->auth.data.offset = CIPHER_IV_LENGTH_AES_CBC;
- sym_op->auth.data.length = QUOTE_512_BYTES;
-
- sym_op->cipher.iv.data = (uint8_t *)rte_pktmbuf_prepend(
- ut_params->ibuf, CIPHER_IV_LENGTH_AES_CBC);
- sym_op->cipher.iv.phys_addr = rte_pktmbuf_mtophys_offset(
- ut_params->ibuf, 0);
- sym_op->cipher.iv.length = CIPHER_IV_LENGTH_AES_CBC;
-
- rte_memcpy(sym_op->cipher.iv.data, iv,
- CIPHER_IV_LENGTH_AES_CBC);
-
- sym_op->cipher.data.offset = CIPHER_IV_LENGTH_AES_CBC;
- sym_op->cipher.data.length = QUOTE_512_BYTES;
-
- /* Process crypto operation */
- TEST_ASSERT_NOT_NULL(process_crypto_request(ts_params->valid_devs[0],
- ut_params->op), "failed to process sym crypto op");
-
- TEST_ASSERT_EQUAL(ut_params->op->status, RTE_CRYPTO_OP_STATUS_SUCCESS,
- "crypto op processing failed");
-
- ut_params->obuf = ut_params->op->sym->m_src;
-
- /* Validate obuf */
- TEST_ASSERT_BUFFERS_ARE_EQUAL(
- rte_pktmbuf_mtod(ut_params->obuf, uint8_t *) +
- CIPHER_IV_LENGTH_AES_CBC, catch_22_quote,
- QUOTE_512_BYTES,
- "Plaintext data not as expected");
-
- /* Validate obuf */
- TEST_ASSERT_EQUAL(ut_params->op->status, RTE_CRYPTO_OP_STATUS_SUCCESS,
- "Digest verification failed");
-
- return TEST_SUCCESS;
-}
-
-static int
-test_AES_chain_mb_all(void)
-{
- struct crypto_testsuite_params *ts_params = &testsuite_params;
- int status;
-
- status = test_blockcipher_all_tests(ts_params->mbuf_pool,
- ts_params->op_mpool, ts_params->valid_devs[0],
- RTE_CRYPTODEV_AESNI_MB_PMD,
- BLKCIPHER_AES_CHAIN_TYPE);
-
- TEST_ASSERT_EQUAL(status, 0, "Test failed");
-
- return TEST_SUCCESS;
-}
-
-static int
-test_AES_chain_openssl_all(void)
-{
- struct crypto_testsuite_params *ts_params = &testsuite_params;
- int status;
-
- status = test_blockcipher_all_tests(ts_params->mbuf_pool,
- ts_params->op_mpool, ts_params->valid_devs[0],
- RTE_CRYPTODEV_OPENSSL_PMD,
- BLKCIPHER_AES_CHAIN_TYPE);
-
- TEST_ASSERT_EQUAL(status, 0, "Test failed");
-
- return TEST_SUCCESS;
-}
-
-static int
-test_AES_cipheronly_openssl_all(void)
-{
- struct crypto_testsuite_params *ts_params = &testsuite_params;
- int status;
-
- status = test_blockcipher_all_tests(ts_params->mbuf_pool,
- ts_params->op_mpool, ts_params->valid_devs[0],
- RTE_CRYPTODEV_OPENSSL_PMD,
- BLKCIPHER_AES_CIPHERONLY_TYPE);
-
- TEST_ASSERT_EQUAL(status, 0, "Test failed");
-
- return TEST_SUCCESS;
-}
-
-static int
-test_AES_chain_qat_all(void)
-{
- struct crypto_testsuite_params *ts_params = &testsuite_params;
- int status;
-
- status = test_blockcipher_all_tests(ts_params->mbuf_pool,
- ts_params->op_mpool, ts_params->valid_devs[0],
- RTE_CRYPTODEV_QAT_SYM_PMD,
- BLKCIPHER_AES_CHAIN_TYPE);
-
- TEST_ASSERT_EQUAL(status, 0, "Test failed");
-
- return TEST_SUCCESS;
-}
-
-static int
-test_authonly_openssl_all(void)
-{
- struct crypto_testsuite_params *ts_params = &testsuite_params;
- int status;
-
- status = test_blockcipher_all_tests(ts_params->mbuf_pool,
- ts_params->op_mpool, ts_params->valid_devs[0],
- RTE_CRYPTODEV_OPENSSL_PMD,
- BLKCIPHER_AUTHONLY_TYPE);
-
- TEST_ASSERT_EQUAL(status, 0, "Test failed");
-
- return TEST_SUCCESS;
-}
-
-/* ***** SNOW 3G Tests ***** */
-static int
-create_wireless_algo_hash_session(uint8_t dev_id,
- const uint8_t *key, const uint8_t key_len,
- const uint8_t aad_len, const uint8_t auth_len,
- enum rte_crypto_auth_operation op,
- enum rte_crypto_auth_algorithm algo)
-{
- uint8_t hash_key[key_len];
-
- struct crypto_unittest_params *ut_params = &unittest_params;
-
- memcpy(hash_key, key, key_len);
-
- TEST_HEXDUMP(stdout, "key:", key, key_len);
-
- /* Setup Authentication Parameters */
- ut_params->auth_xform.type = RTE_CRYPTO_SYM_XFORM_AUTH;
- ut_params->auth_xform.next = NULL;
-
- ut_params->auth_xform.auth.op = op;
- ut_params->auth_xform.auth.algo = algo;
- ut_params->auth_xform.auth.key.length = key_len;
- ut_params->auth_xform.auth.key.data = hash_key;
- ut_params->auth_xform.auth.digest_length = auth_len;
- ut_params->auth_xform.auth.add_auth_data_length = aad_len;
- ut_params->sess = rte_cryptodev_sym_session_create(dev_id,
- &ut_params->auth_xform);
- TEST_ASSERT_NOT_NULL(ut_params->sess, "Session creation failed");
- return 0;
-}
-
-static int
-create_wireless_algo_cipher_session(uint8_t dev_id,
- enum rte_crypto_cipher_operation op,
- enum rte_crypto_cipher_algorithm algo,
- const uint8_t *key, const uint8_t key_len)
-{
- uint8_t cipher_key[key_len];
-
- struct crypto_unittest_params *ut_params = &unittest_params;
-
- memcpy(cipher_key, key, key_len);
-
- /* Setup Cipher Parameters */
- ut_params->cipher_xform.type = RTE_CRYPTO_SYM_XFORM_CIPHER;
- ut_params->cipher_xform.next = NULL;
-
- ut_params->cipher_xform.cipher.algo = algo;
- ut_params->cipher_xform.cipher.op = op;
- ut_params->cipher_xform.cipher.key.data = cipher_key;
- ut_params->cipher_xform.cipher.key.length = key_len;
-
- TEST_HEXDUMP(stdout, "key:", key, key_len);
-
- /* Create Crypto session */
- ut_params->sess = rte_cryptodev_sym_session_create(dev_id,
- &ut_params->
- cipher_xform);
- TEST_ASSERT_NOT_NULL(ut_params->sess, "Session creation failed");
- return 0;
-}
-
-static int
-create_wireless_algo_cipher_operation(const uint8_t *iv, const unsigned iv_len,
- const unsigned cipher_len,
- const unsigned cipher_offset,
- enum rte_crypto_cipher_algorithm algo)
-{
- struct crypto_testsuite_params *ts_params = &testsuite_params;
- struct crypto_unittest_params *ut_params = &unittest_params;
- unsigned iv_pad_len = 0;
-
- /* Generate Crypto op data structure */
- ut_params->op = rte_crypto_op_alloc(ts_params->op_mpool,
- RTE_CRYPTO_OP_TYPE_SYMMETRIC);
- TEST_ASSERT_NOT_NULL(ut_params->op,
- "Failed to allocate pktmbuf offload");
-
- /* Set crypto operation data parameters */
- rte_crypto_op_attach_sym_session(ut_params->op, ut_params->sess);
-
- struct rte_crypto_sym_op *sym_op = ut_params->op->sym;
-
- /* set crypto operation source mbuf */
- sym_op->m_src = ut_params->ibuf;
-
- /* iv */
- if (algo == RTE_CRYPTO_CIPHER_KASUMI_F8)
- iv_pad_len = RTE_ALIGN_CEIL(iv_len, 8);
- else
- iv_pad_len = RTE_ALIGN_CEIL(iv_len, 16);
-
- sym_op->cipher.iv.data = (uint8_t *)rte_pktmbuf_prepend(ut_params->ibuf
- , iv_pad_len);
-
- TEST_ASSERT_NOT_NULL(sym_op->cipher.iv.data, "no room to prepend iv");
-
- memset(sym_op->cipher.iv.data, 0, iv_pad_len);
- sym_op->cipher.iv.phys_addr = rte_pktmbuf_mtophys(ut_params->ibuf);
- sym_op->cipher.iv.length = iv_pad_len;
-
- rte_memcpy(sym_op->cipher.iv.data, iv, iv_len);
- sym_op->cipher.data.length = cipher_len;
- sym_op->cipher.data.offset = cipher_offset;
- return 0;
-}
-
-static int
-create_wireless_algo_cipher_operation_oop(const uint8_t *iv, const uint8_t iv_len,
- const unsigned cipher_len,
- const unsigned cipher_offset,
- enum rte_crypto_cipher_algorithm algo)
-{
- struct crypto_testsuite_params *ts_params = &testsuite_params;
- struct crypto_unittest_params *ut_params = &unittest_params;
- unsigned iv_pad_len = 0;
-
- /* Generate Crypto op data structure */
- ut_params->op = rte_crypto_op_alloc(ts_params->op_mpool,
- RTE_CRYPTO_OP_TYPE_SYMMETRIC);
- TEST_ASSERT_NOT_NULL(ut_params->op,
- "Failed to allocate pktmbuf offload");
-
- /* Set crypto operation data parameters */
- rte_crypto_op_attach_sym_session(ut_params->op, ut_params->sess);
-
- struct rte_crypto_sym_op *sym_op = ut_params->op->sym;
-
- /* set crypto operation source mbuf */
- sym_op->m_src = ut_params->ibuf;
- sym_op->m_dst = ut_params->obuf;
-
- /* iv */
- if (algo == RTE_CRYPTO_CIPHER_KASUMI_F8)
- iv_pad_len = RTE_ALIGN_CEIL(iv_len, 8);
- else
- iv_pad_len = RTE_ALIGN_CEIL(iv_len, 16);
- sym_op->cipher.iv.data = (uint8_t *)rte_pktmbuf_prepend(ut_params->ibuf,
- iv_pad_len);
-
- TEST_ASSERT_NOT_NULL(sym_op->cipher.iv.data, "no room to prepend iv");
-
- memset(sym_op->cipher.iv.data, 0, iv_pad_len);
- sym_op->cipher.iv.phys_addr = rte_pktmbuf_mtophys(ut_params->ibuf);
- sym_op->cipher.iv.length = iv_pad_len;
-
- rte_memcpy(sym_op->cipher.iv.data, iv, iv_len);
- sym_op->cipher.data.length = cipher_len;
- sym_op->cipher.data.offset = cipher_offset;
- return 0;
-}
-
-static int
-create_wireless_algo_cipher_auth_session(uint8_t dev_id,
- enum rte_crypto_cipher_operation cipher_op,
- enum rte_crypto_auth_operation auth_op,
- enum rte_crypto_auth_algorithm auth_algo,
- enum rte_crypto_cipher_algorithm cipher_algo,
- const uint8_t *key, const uint8_t key_len,
- const uint8_t aad_len, const uint8_t auth_len)
-
-{
- uint8_t cipher_auth_key[key_len];
-
- struct crypto_unittest_params *ut_params = &unittest_params;
-
- memcpy(cipher_auth_key, key, key_len);
-
- /* Setup Authentication Parameters */
- ut_params->auth_xform.type = RTE_CRYPTO_SYM_XFORM_AUTH;
- ut_params->auth_xform.next = NULL;
-
- ut_params->auth_xform.auth.op = auth_op;
- ut_params->auth_xform.auth.algo = auth_algo;
- ut_params->auth_xform.auth.key.length = key_len;
- /* Hash key = cipher key */
- ut_params->auth_xform.auth.key.data = cipher_auth_key;
- ut_params->auth_xform.auth.digest_length = auth_len;
- ut_params->auth_xform.auth.add_auth_data_length = aad_len;
-
- /* Setup Cipher Parameters */
- ut_params->cipher_xform.type = RTE_CRYPTO_SYM_XFORM_CIPHER;
- ut_params->cipher_xform.next = &ut_params->auth_xform;
-
- ut_params->cipher_xform.cipher.algo = cipher_algo;
- ut_params->cipher_xform.cipher.op = cipher_op;
- ut_params->cipher_xform.cipher.key.data = cipher_auth_key;
- ut_params->cipher_xform.cipher.key.length = key_len;
-
- TEST_HEXDUMP(stdout, "key:", key, key_len);
-
- /* Create Crypto session*/
- ut_params->sess = rte_cryptodev_sym_session_create(dev_id,
- &ut_params->cipher_xform);
-
- TEST_ASSERT_NOT_NULL(ut_params->sess, "Session creation failed");
- return 0;
-}
-
-static int
-create_wireless_algo_auth_cipher_session(uint8_t dev_id,
- enum rte_crypto_cipher_operation cipher_op,
- enum rte_crypto_auth_operation auth_op,
- enum rte_crypto_auth_algorithm auth_algo,
- enum rte_crypto_cipher_algorithm cipher_algo,
- const uint8_t *key, const uint8_t key_len,
- const uint8_t aad_len, const uint8_t auth_len)
-{
- uint8_t auth_cipher_key[key_len];
-
- struct crypto_unittest_params *ut_params = &unittest_params;
-
- memcpy(auth_cipher_key, key, key_len);
-
- /* Setup Authentication Parameters */
- ut_params->auth_xform.type = RTE_CRYPTO_SYM_XFORM_AUTH;
- ut_params->auth_xform.auth.op = auth_op;
- ut_params->auth_xform.next = &ut_params->cipher_xform;
- ut_params->auth_xform.auth.algo = auth_algo;
- ut_params->auth_xform.auth.key.length = key_len;
- ut_params->auth_xform.auth.key.data = auth_cipher_key;
- ut_params->auth_xform.auth.digest_length = auth_len;
- ut_params->auth_xform.auth.add_auth_data_length = aad_len;
-
- /* Setup Cipher Parameters */
- ut_params->cipher_xform.type = RTE_CRYPTO_SYM_XFORM_CIPHER;
- ut_params->cipher_xform.next = NULL;
- ut_params->cipher_xform.cipher.algo = cipher_algo;
- ut_params->cipher_xform.cipher.op = cipher_op;
- ut_params->cipher_xform.cipher.key.data = auth_cipher_key;
- ut_params->cipher_xform.cipher.key.length = key_len;
-
- TEST_HEXDUMP(stdout, "key:", key, key_len);
-
- /* Create Crypto session*/
- ut_params->sess = rte_cryptodev_sym_session_create(dev_id,
- &ut_params->auth_xform);
-
- TEST_ASSERT_NOT_NULL(ut_params->sess, "Session creation failed");
-
- return 0;
-}
-
-static int
-create_wireless_algo_hash_operation(const uint8_t *auth_tag,
- const unsigned auth_tag_len,
- const uint8_t *aad, const unsigned aad_len,
- unsigned data_pad_len,
- enum rte_crypto_auth_operation op,
- enum rte_crypto_auth_algorithm algo,
- const unsigned auth_len, const unsigned auth_offset)
-{
- struct crypto_testsuite_params *ts_params = &testsuite_params;
-
- struct crypto_unittest_params *ut_params = &unittest_params;
-
- unsigned aad_buffer_len;
-
- /* Generate Crypto op data structure */
- ut_params->op = rte_crypto_op_alloc(ts_params->op_mpool,
- RTE_CRYPTO_OP_TYPE_SYMMETRIC);
- TEST_ASSERT_NOT_NULL(ut_params->op,
- "Failed to allocate pktmbuf offload");
-
- /* Set crypto operation data parameters */
- rte_crypto_op_attach_sym_session(ut_params->op, ut_params->sess);
-
- struct rte_crypto_sym_op *sym_op = ut_params->op->sym;
-
- /* set crypto operation source mbuf */
- sym_op->m_src = ut_params->ibuf;
-
- /* aad */
- /*
- * Always allocate the aad up to the block size.
- * The cryptodev API calls out -
- * - the array must be big enough to hold the AAD, plus any
- * space to round this up to the nearest multiple of the
- * block size (8 bytes for KASUMI and 16 bytes for SNOW 3G).
- */
- if (algo == RTE_CRYPTO_AUTH_KASUMI_F9)
- aad_buffer_len = ALIGN_POW2_ROUNDUP(aad_len, 8);
- else
- aad_buffer_len = ALIGN_POW2_ROUNDUP(aad_len, 16);
- sym_op->auth.aad.data = (uint8_t *)rte_pktmbuf_prepend(
- ut_params->ibuf, aad_buffer_len);
- TEST_ASSERT_NOT_NULL(sym_op->auth.aad.data,
- "no room to prepend aad");
- sym_op->auth.aad.phys_addr = rte_pktmbuf_mtophys(
- ut_params->ibuf);
- sym_op->auth.aad.length = aad_len;
-
- memset(sym_op->auth.aad.data, 0, aad_buffer_len);
- rte_memcpy(sym_op->auth.aad.data, aad, aad_len);
-
- TEST_HEXDUMP(stdout, "aad:",
- sym_op->auth.aad.data, aad_len);
-
- /* digest */
- sym_op->auth.digest.data = (uint8_t *)rte_pktmbuf_append(
- ut_params->ibuf, auth_tag_len);
-
- TEST_ASSERT_NOT_NULL(sym_op->auth.digest.data,
- "no room to append auth tag");
- ut_params->digest = sym_op->auth.digest.data;
- sym_op->auth.digest.phys_addr = rte_pktmbuf_mtophys_offset(
- ut_params->ibuf, data_pad_len + aad_len);
- sym_op->auth.digest.length = auth_tag_len;
- if (op == RTE_CRYPTO_AUTH_OP_GENERATE)
- memset(sym_op->auth.digest.data, 0, auth_tag_len);
- else
- rte_memcpy(sym_op->auth.digest.data, auth_tag, auth_tag_len);
-
- TEST_HEXDUMP(stdout, "digest:",
- sym_op->auth.digest.data,
- sym_op->auth.digest.length);
-
- sym_op->auth.data.length = auth_len;
- sym_op->auth.data.offset = auth_offset;
-
- return 0;
-}
-
-static int
-create_wireless_algo_cipher_hash_operation(const uint8_t *auth_tag,
- const unsigned auth_tag_len,
- const uint8_t *aad, const uint8_t aad_len,
- unsigned data_pad_len,
- enum rte_crypto_auth_operation op,
- enum rte_crypto_auth_algorithm auth_algo,
- enum rte_crypto_cipher_algorithm cipher_algo,
- const uint8_t *iv, const uint8_t iv_len,
- const unsigned cipher_len, const unsigned cipher_offset,
- const unsigned auth_len, const unsigned auth_offset)
-{
- struct crypto_testsuite_params *ts_params = &testsuite_params;
- struct crypto_unittest_params *ut_params = &unittest_params;
-
- unsigned iv_pad_len = 0;
- unsigned aad_buffer_len;
-
- /* Generate Crypto op data structure */
- ut_params->op = rte_crypto_op_alloc(ts_params->op_mpool,
- RTE_CRYPTO_OP_TYPE_SYMMETRIC);
- TEST_ASSERT_NOT_NULL(ut_params->op,
- "Failed to allocate pktmbuf offload");
- /* Set crypto operation data parameters */
- rte_crypto_op_attach_sym_session(ut_params->op, ut_params->sess);
-
- struct rte_crypto_sym_op *sym_op = ut_params->op->sym;
-
- /* set crypto operation source mbuf */
- sym_op->m_src = ut_params->ibuf;
-
- /* digest */
- sym_op->auth.digest.data = (uint8_t *)rte_pktmbuf_append(
- ut_params->ibuf, auth_tag_len);
-
- TEST_ASSERT_NOT_NULL(sym_op->auth.digest.data,
- "no room to append auth tag");
- ut_params->digest = sym_op->auth.digest.data;
- sym_op->auth.digest.phys_addr = rte_pktmbuf_mtophys_offset(
- ut_params->ibuf, data_pad_len);
- sym_op->auth.digest.length = auth_tag_len;
- if (op == RTE_CRYPTO_AUTH_OP_GENERATE)
- memset(sym_op->auth.digest.data, 0, auth_tag_len);
- else
- rte_memcpy(sym_op->auth.digest.data, auth_tag, auth_tag_len);
-
- TEST_HEXDUMP(stdout, "digest:",
- sym_op->auth.digest.data,
- sym_op->auth.digest.length);
-
- /* aad */
- /*
- * Always allocate the aad up to the block size.
- * The cryptodev API calls out -
- * - the array must be big enough to hold the AAD, plus any
- * space to round this up to the nearest multiple of the
- * block size (8 bytes for KASUMI and 16 bytes for SNOW 3G).
- */
- if (auth_algo == RTE_CRYPTO_AUTH_KASUMI_F9)
- aad_buffer_len = ALIGN_POW2_ROUNDUP(aad_len, 8);
- else
- aad_buffer_len = ALIGN_POW2_ROUNDUP(aad_len, 16);
- sym_op->auth.aad.data =
- (uint8_t *)rte_pktmbuf_prepend(
- ut_params->ibuf, aad_buffer_len);
- TEST_ASSERT_NOT_NULL(sym_op->auth.aad.data,
- "no room to prepend aad");
- sym_op->auth.aad.phys_addr = rte_pktmbuf_mtophys(
- ut_params->ibuf);
- sym_op->auth.aad.length = aad_len;
- memset(sym_op->auth.aad.data, 0, aad_buffer_len);
- rte_memcpy(sym_op->auth.aad.data, aad, aad_len);
- TEST_HEXDUMP(stdout, "aad:", sym_op->auth.aad.data, aad_len);
-
- /* iv */
- if (cipher_algo == RTE_CRYPTO_CIPHER_KASUMI_F8)
- iv_pad_len = RTE_ALIGN_CEIL(iv_len, 8);
- else
- iv_pad_len = RTE_ALIGN_CEIL(iv_len, 16);
- sym_op->cipher.iv.data = (uint8_t *)rte_pktmbuf_prepend(
- ut_params->ibuf, iv_pad_len);
-
- TEST_ASSERT_NOT_NULL(sym_op->cipher.iv.data, "no room to prepend iv");
- memset(sym_op->cipher.iv.data, 0, iv_pad_len);
- sym_op->cipher.iv.phys_addr = rte_pktmbuf_mtophys(ut_params->ibuf);
- sym_op->cipher.iv.length = iv_pad_len;
- rte_memcpy(sym_op->cipher.iv.data, iv, iv_len);
- sym_op->cipher.data.length = cipher_len;
- sym_op->cipher.data.offset = cipher_offset + auth_offset;
- sym_op->auth.data.length = auth_len;
- sym_op->auth.data.offset = auth_offset + cipher_offset;
-
- return 0;
-}
-
-static int
-create_wireless_algo_auth_cipher_operation(const unsigned auth_tag_len,
- const uint8_t *iv, const uint8_t iv_len,
- const uint8_t *aad, const uint8_t aad_len,
- unsigned data_pad_len,
- const unsigned cipher_len, const unsigned cipher_offset,
- const unsigned auth_len, const unsigned auth_offset,
- enum rte_crypto_auth_algorithm auth_algo,
- enum rte_crypto_cipher_algorithm cipher_algo)
-{
- struct crypto_testsuite_params *ts_params = &testsuite_params;
- struct crypto_unittest_params *ut_params = &unittest_params;
-
- unsigned iv_pad_len = 0;
- unsigned aad_buffer_len = 0;
-
- /* Generate Crypto op data structure */
- ut_params->op = rte_crypto_op_alloc(ts_params->op_mpool,
- RTE_CRYPTO_OP_TYPE_SYMMETRIC);
- TEST_ASSERT_NOT_NULL(ut_params->op,
- "Failed to allocate pktmbuf offload");
-
- /* Set crypto operation data parameters */
- rte_crypto_op_attach_sym_session(ut_params->op, ut_params->sess);
-
- struct rte_crypto_sym_op *sym_op = ut_params->op->sym;
-
- /* set crypto operation source mbuf */
- sym_op->m_src = ut_params->ibuf;
-
- /* digest */
- sym_op->auth.digest.data = (uint8_t *)rte_pktmbuf_append(
- ut_params->ibuf, auth_tag_len);
-
- TEST_ASSERT_NOT_NULL(sym_op->auth.digest.data,
- "no room to append auth tag");
-
- sym_op->auth.digest.phys_addr = rte_pktmbuf_mtophys_offset(
- ut_params->ibuf, data_pad_len);
- sym_op->auth.digest.length = auth_tag_len;
-
- memset(sym_op->auth.digest.data, 0, auth_tag_len);
-
- TEST_HEXDUMP(stdout, "digest:",
- sym_op->auth.digest.data,
- sym_op->auth.digest.length);
-
- /* aad */
- /*
- * Always allocate the aad up to the block size.
- * The cryptodev API calls out -
- * - the array must be big enough to hold the AAD, plus any
- * space to round this up to the nearest multiple of the
- * block size (8 bytes for KASUMI 16 bytes).
- */
- if (auth_algo == RTE_CRYPTO_AUTH_KASUMI_F9)
- aad_buffer_len = ALIGN_POW2_ROUNDUP(aad_len, 8);
- else
- aad_buffer_len = ALIGN_POW2_ROUNDUP(aad_len, 16);
- sym_op->auth.aad.data = (uint8_t *)rte_pktmbuf_prepend(
- ut_params->ibuf, aad_buffer_len);
- TEST_ASSERT_NOT_NULL(sym_op->auth.aad.data,
- "no room to prepend aad");
- sym_op->auth.aad.phys_addr = rte_pktmbuf_mtophys(
- ut_params->ibuf);
- sym_op->auth.aad.length = aad_len;
- memset(sym_op->auth.aad.data, 0, aad_buffer_len);
- rte_memcpy(sym_op->auth.aad.data, aad, aad_len);
- TEST_HEXDUMP(stdout, "aad:",
- sym_op->auth.aad.data, aad_len);
-
- /* iv */
- if (cipher_algo == RTE_CRYPTO_CIPHER_KASUMI_F8)
- iv_pad_len = RTE_ALIGN_CEIL(iv_len, 8);
- else
- iv_pad_len = RTE_ALIGN_CEIL(iv_len, 16);
-
- sym_op->cipher.iv.data = (uint8_t *)rte_pktmbuf_prepend(
- ut_params->ibuf, iv_pad_len);
- TEST_ASSERT_NOT_NULL(sym_op->cipher.iv.data, "no room to prepend iv");
-
- memset(sym_op->cipher.iv.data, 0, iv_pad_len);
- sym_op->cipher.iv.phys_addr = rte_pktmbuf_mtophys(ut_params->ibuf);
- sym_op->cipher.iv.length = iv_pad_len;
-
- rte_memcpy(sym_op->cipher.iv.data, iv, iv_len);
-
- sym_op->cipher.data.length = cipher_len;
- sym_op->cipher.data.offset = auth_offset + cipher_offset;
-
- sym_op->auth.data.length = auth_len;
- sym_op->auth.data.offset = auth_offset + cipher_offset;
-
- return 0;
-}
-
-static int
-test_snow3g_authentication(const struct snow3g_hash_test_data *tdata)
-{
- struct crypto_testsuite_params *ts_params = &testsuite_params;
- struct crypto_unittest_params *ut_params = &unittest_params;
-
- int retval;
- unsigned plaintext_pad_len;
- unsigned plaintext_len;
- uint8_t *plaintext;
-
- /* Create SNOW 3G session */
- retval = create_wireless_algo_hash_session(ts_params->valid_devs[0],
- tdata->key.data, tdata->key.len,
- tdata->aad.len, tdata->digest.len,
- RTE_CRYPTO_AUTH_OP_GENERATE,
- RTE_CRYPTO_AUTH_SNOW3G_UIA2);
- if (retval < 0)
- return retval;
-
- /* alloc mbuf and set payload */
- ut_params->ibuf = rte_pktmbuf_alloc(ts_params->mbuf_pool);
-
- memset(rte_pktmbuf_mtod(ut_params->ibuf, uint8_t *), 0,
- rte_pktmbuf_tailroom(ut_params->ibuf));
-
- plaintext_len = ceil_byte_length(tdata->plaintext.len);
- /* Append data which is padded to a multiple of */
- /* the algorithms block size */
- plaintext_pad_len = RTE_ALIGN_CEIL(plaintext_len, 16);
- plaintext = (uint8_t *)rte_pktmbuf_append(ut_params->ibuf,
- plaintext_pad_len);
- memcpy(plaintext, tdata->plaintext.data, plaintext_len);
-
- /* Create SNOW 3G operation */
- retval = create_wireless_algo_hash_operation(NULL, tdata->digest.len,
- tdata->aad.data, tdata->aad.len,
- plaintext_pad_len, RTE_CRYPTO_AUTH_OP_GENERATE,
- RTE_CRYPTO_AUTH_SNOW3G_UIA2,
- tdata->validAuthLenInBits.len,
- tdata->validAuthOffsetLenInBits.len);
- if (retval < 0)
- return retval;
-
- ut_params->op = process_crypto_request(ts_params->valid_devs[0],
- ut_params->op);
- ut_params->obuf = ut_params->op->sym->m_src;
- TEST_ASSERT_NOT_NULL(ut_params->op, "failed to retrieve obuf");
- ut_params->digest = rte_pktmbuf_mtod(ut_params->obuf, uint8_t *)
- + plaintext_pad_len + tdata->aad.len;
-
- /* Validate obuf */
- TEST_ASSERT_BUFFERS_ARE_EQUAL(
- ut_params->digest,
- tdata->digest.data,
- DIGEST_BYTE_LENGTH_SNOW3G_UIA2,
- "SNOW 3G Generated auth tag not as expected");
-
- return 0;
-}
-
-static int
-test_snow3g_authentication_verify(const struct snow3g_hash_test_data *tdata)
-{
- struct crypto_testsuite_params *ts_params = &testsuite_params;
- struct crypto_unittest_params *ut_params = &unittest_params;
-
- int retval;
- unsigned plaintext_pad_len;
- unsigned plaintext_len;
- uint8_t *plaintext;
-
- /* Create SNOW 3G session */
- retval = create_wireless_algo_hash_session(ts_params->valid_devs[0],
- tdata->key.data, tdata->key.len,
- tdata->aad.len, tdata->digest.len,
- RTE_CRYPTO_AUTH_OP_VERIFY,
- RTE_CRYPTO_AUTH_SNOW3G_UIA2);
- if (retval < 0)
- return retval;
- /* alloc mbuf and set payload */
- ut_params->ibuf = rte_pktmbuf_alloc(ts_params->mbuf_pool);
-
- memset(rte_pktmbuf_mtod(ut_params->ibuf, uint8_t *), 0,
- rte_pktmbuf_tailroom(ut_params->ibuf));
-
- plaintext_len = ceil_byte_length(tdata->plaintext.len);
- /* Append data which is padded to a multiple of */
- /* the algorithms block size */
- plaintext_pad_len = RTE_ALIGN_CEIL(plaintext_len, 16);
- plaintext = (uint8_t *)rte_pktmbuf_append(ut_params->ibuf,
- plaintext_pad_len);
- memcpy(plaintext, tdata->plaintext.data, plaintext_len);
-
- /* Create SNOW 3G operation */
- retval = create_wireless_algo_hash_operation(tdata->digest.data,
- tdata->digest.len,
- tdata->aad.data, tdata->aad.len,
- plaintext_pad_len,
- RTE_CRYPTO_AUTH_OP_VERIFY,
- RTE_CRYPTO_AUTH_SNOW3G_UIA2,
- tdata->validAuthLenInBits.len,
- tdata->validAuthOffsetLenInBits.len);
- if (retval < 0)
- return retval;
-
- ut_params->op = process_crypto_request(ts_params->valid_devs[0],
- ut_params->op);
- TEST_ASSERT_NOT_NULL(ut_params->op, "failed to retrieve obuf");
- ut_params->obuf = ut_params->op->sym->m_src;
- ut_params->digest = rte_pktmbuf_mtod(ut_params->obuf, uint8_t *)
- + plaintext_pad_len + tdata->aad.len;
-
- /* Validate obuf */
- if (ut_params->op->status == RTE_CRYPTO_OP_STATUS_SUCCESS)
- return 0;
- else
- return -1;
-
- return 0;
-}
-
-static int
-test_kasumi_authentication(const struct kasumi_hash_test_data *tdata)
-{
- struct crypto_testsuite_params *ts_params = &testsuite_params;
- struct crypto_unittest_params *ut_params = &unittest_params;
-
- int retval;
- unsigned plaintext_pad_len;
- unsigned plaintext_len;
- uint8_t *plaintext;
-
- /* Create KASUMI session */
- retval = create_wireless_algo_hash_session(ts_params->valid_devs[0],
- tdata->key.data, tdata->key.len,
- tdata->aad.len, tdata->digest.len,
- RTE_CRYPTO_AUTH_OP_GENERATE,
- RTE_CRYPTO_AUTH_KASUMI_F9);
- if (retval < 0)
- return retval;
-
- /* alloc mbuf and set payload */
- ut_params->ibuf = rte_pktmbuf_alloc(ts_params->mbuf_pool);
-
- memset(rte_pktmbuf_mtod(ut_params->ibuf, uint8_t *), 0,
- rte_pktmbuf_tailroom(ut_params->ibuf));
-
- plaintext_len = ceil_byte_length(tdata->plaintext.len);
- /* Append data which is padded to a multiple of */
- /* the algorithms block size */
- plaintext_pad_len = RTE_ALIGN_CEIL(plaintext_len, 8);
- plaintext = (uint8_t *)rte_pktmbuf_append(ut_params->ibuf,
- plaintext_pad_len);
- memcpy(plaintext, tdata->plaintext.data, plaintext_len);
-
- /* Create KASUMI operation */
- retval = create_wireless_algo_hash_operation(NULL, tdata->digest.len,
- tdata->aad.data, tdata->aad.len,
- plaintext_pad_len, RTE_CRYPTO_AUTH_OP_GENERATE,
- RTE_CRYPTO_AUTH_KASUMI_F9,
- tdata->validAuthLenInBits.len,
- tdata->validAuthOffsetLenInBits.len);
- if (retval < 0)
- return retval;
-
- ut_params->op = process_crypto_request(ts_params->valid_devs[0],
- ut_params->op);
- ut_params->obuf = ut_params->op->sym->m_src;
- TEST_ASSERT_NOT_NULL(ut_params->op, "failed to retrieve obuf");
- ut_params->digest = rte_pktmbuf_mtod(ut_params->obuf, uint8_t *)
- + plaintext_pad_len + ALIGN_POW2_ROUNDUP(tdata->aad.len, 8);
-
- /* Validate obuf */
- TEST_ASSERT_BUFFERS_ARE_EQUAL(
- ut_params->digest,
- tdata->digest.data,
- DIGEST_BYTE_LENGTH_KASUMI_F9,
- "KASUMI Generated auth tag not as expected");
-
- return 0;
-}
-
-static int
-test_kasumi_authentication_verify(const struct kasumi_hash_test_data *tdata)
-{
- struct crypto_testsuite_params *ts_params = &testsuite_params;
- struct crypto_unittest_params *ut_params = &unittest_params;
-
- int retval;
- unsigned plaintext_pad_len;
- unsigned plaintext_len;
- uint8_t *plaintext;
-
- /* Create KASUMI session */
- retval = create_wireless_algo_hash_session(ts_params->valid_devs[0],
- tdata->key.data, tdata->key.len,
- tdata->aad.len, tdata->digest.len,
- RTE_CRYPTO_AUTH_OP_VERIFY,
- RTE_CRYPTO_AUTH_KASUMI_F9);
- if (retval < 0)
- return retval;
- /* alloc mbuf and set payload */
- ut_params->ibuf = rte_pktmbuf_alloc(ts_params->mbuf_pool);
-
- memset(rte_pktmbuf_mtod(ut_params->ibuf, uint8_t *), 0,
- rte_pktmbuf_tailroom(ut_params->ibuf));
-
- plaintext_len = ceil_byte_length(tdata->plaintext.len);
- /* Append data which is padded to a multiple */
- /* of the algorithms block size */
- plaintext_pad_len = RTE_ALIGN_CEIL(plaintext_len, 8);
- plaintext = (uint8_t *)rte_pktmbuf_append(ut_params->ibuf,
- plaintext_pad_len);
- memcpy(plaintext, tdata->plaintext.data, plaintext_len);
-
- /* Create KASUMI operation */
- retval = create_wireless_algo_hash_operation(tdata->digest.data,
- tdata->digest.len,
- tdata->aad.data, tdata->aad.len,
- plaintext_pad_len,
- RTE_CRYPTO_AUTH_OP_VERIFY,
- RTE_CRYPTO_AUTH_KASUMI_F9,
- tdata->validAuthLenInBits.len,
- tdata->validAuthOffsetLenInBits.len);
- if (retval < 0)
- return retval;
-
- ut_params->op = process_crypto_request(ts_params->valid_devs[0],
- ut_params->op);
- TEST_ASSERT_NOT_NULL(ut_params->op, "failed to retrieve obuf");
- ut_params->obuf = ut_params->op->sym->m_src;
- ut_params->digest = rte_pktmbuf_mtod(ut_params->obuf, uint8_t *)
- + plaintext_pad_len + tdata->aad.len;
-
- /* Validate obuf */
- if (ut_params->op->status == RTE_CRYPTO_OP_STATUS_SUCCESS)
- return 0;
- else
- return -1;
-
- return 0;
-}
-
-static int
-test_snow3g_hash_generate_test_case_1(void)
-{
- return test_snow3g_authentication(&snow3g_hash_test_case_1);
-}
-
-static int
-test_snow3g_hash_generate_test_case_2(void)
-{
- return test_snow3g_authentication(&snow3g_hash_test_case_2);
-}
-
-static int
-test_snow3g_hash_generate_test_case_3(void)
-{
- return test_snow3g_authentication(&snow3g_hash_test_case_3);
-}
-
-static int
-test_snow3g_hash_generate_test_case_4(void)
-{
- return test_snow3g_authentication(&snow3g_hash_test_case_4);
-}
-
-static int
-test_snow3g_hash_generate_test_case_5(void)
-{
- return test_snow3g_authentication(&snow3g_hash_test_case_5);
-}
-
-static int
-test_snow3g_hash_generate_test_case_6(void)
-{
- return test_snow3g_authentication(&snow3g_hash_test_case_6);
-}
-
-static int
-test_snow3g_hash_verify_test_case_1(void)
-{
- return test_snow3g_authentication_verify(&snow3g_hash_test_case_1);
-
-}
-
-static int
-test_snow3g_hash_verify_test_case_2(void)
-{
- return test_snow3g_authentication_verify(&snow3g_hash_test_case_2);
-}
-
-static int
-test_snow3g_hash_verify_test_case_3(void)
-{
- return test_snow3g_authentication_verify(&snow3g_hash_test_case_3);
-}
-
-static int
-test_snow3g_hash_verify_test_case_4(void)
-{
- return test_snow3g_authentication_verify(&snow3g_hash_test_case_4);
-}
-
-static int
-test_snow3g_hash_verify_test_case_5(void)
-{
- return test_snow3g_authentication_verify(&snow3g_hash_test_case_5);
-}
-
-static int
-test_snow3g_hash_verify_test_case_6(void)
-{
- return test_snow3g_authentication_verify(&snow3g_hash_test_case_6);
-}
-
-static int
-test_kasumi_hash_generate_test_case_1(void)
-{
- return test_kasumi_authentication(&kasumi_hash_test_case_1);
-}
-
-static int
-test_kasumi_hash_generate_test_case_2(void)
-{
- return test_kasumi_authentication(&kasumi_hash_test_case_2);
-}
-
-static int
-test_kasumi_hash_generate_test_case_3(void)
-{
- return test_kasumi_authentication(&kasumi_hash_test_case_3);
-}
-
-static int
-test_kasumi_hash_generate_test_case_4(void)
-{
- return test_kasumi_authentication(&kasumi_hash_test_case_4);
-}
-
-static int
-test_kasumi_hash_generate_test_case_5(void)
-{
- return test_kasumi_authentication(&kasumi_hash_test_case_5);
-}
-
-static int
-test_kasumi_hash_generate_test_case_6(void)
-{
- return test_kasumi_authentication(&kasumi_hash_test_case_6);
-}
-
-static int
-test_kasumi_hash_verify_test_case_1(void)
-{
- return test_kasumi_authentication_verify(&kasumi_hash_test_case_1);
-}
-
-static int
-test_kasumi_hash_verify_test_case_2(void)
-{
- return test_kasumi_authentication_verify(&kasumi_hash_test_case_2);
-}
-
-static int
-test_kasumi_hash_verify_test_case_3(void)
-{
- return test_kasumi_authentication_verify(&kasumi_hash_test_case_3);
-}
-
-static int
-test_kasumi_hash_verify_test_case_4(void)
-{
- return test_kasumi_authentication_verify(&kasumi_hash_test_case_4);
-}
-
-static int
-test_kasumi_hash_verify_test_case_5(void)
-{
- return test_kasumi_authentication_verify(&kasumi_hash_test_case_5);
-}
-
-static int
-test_kasumi_encryption(const struct kasumi_test_data *tdata)
-{
- struct crypto_testsuite_params *ts_params = &testsuite_params;
- struct crypto_unittest_params *ut_params = &unittest_params;
-
- int retval;
- uint8_t *plaintext, *ciphertext;
- unsigned plaintext_pad_len;
- unsigned plaintext_len;
-
- /* Create KASUMI session */
- retval = create_wireless_algo_cipher_session(ts_params->valid_devs[0],
- RTE_CRYPTO_CIPHER_OP_ENCRYPT,
- RTE_CRYPTO_CIPHER_KASUMI_F8,
- tdata->key.data, tdata->key.len);
- if (retval < 0)
- return retval;
-
- ut_params->ibuf = rte_pktmbuf_alloc(ts_params->mbuf_pool);
-
- /* Clear mbuf payload */
- memset(rte_pktmbuf_mtod(ut_params->ibuf, uint8_t *), 0,
- rte_pktmbuf_tailroom(ut_params->ibuf));
-
- plaintext_len = ceil_byte_length(tdata->plaintext.len);
- /* Append data which is padded to a multiple */
- /* of the algorithms block size */
- plaintext_pad_len = RTE_ALIGN_CEIL(plaintext_len, 8);
- plaintext = (uint8_t *)rte_pktmbuf_append(ut_params->ibuf,
- plaintext_pad_len);
- memcpy(plaintext, tdata->plaintext.data, plaintext_len);
-
- TEST_HEXDUMP(stdout, "plaintext:", plaintext, plaintext_len);
-
- /* Create KASUMI operation */
- retval = create_wireless_algo_cipher_operation(tdata->iv.data, tdata->iv.len,
- tdata->plaintext.len,
- tdata->validCipherOffsetLenInBits.len,
- RTE_CRYPTO_CIPHER_KASUMI_F8);
- if (retval < 0)
- return retval;
-
- ut_params->op = process_crypto_request(ts_params->valid_devs[0],
- ut_params->op);
- TEST_ASSERT_NOT_NULL(ut_params->op, "failed to retrieve obuf");
-
- ut_params->obuf = ut_params->op->sym->m_dst;
- if (ut_params->obuf)
- ciphertext = rte_pktmbuf_mtod(ut_params->obuf, uint8_t *)
- + tdata->iv.len;
- else
- ciphertext = plaintext;
-
- TEST_HEXDUMP(stdout, "ciphertext:", ciphertext, plaintext_len);
-
- /* Validate obuf */
- TEST_ASSERT_BUFFERS_ARE_EQUAL_BIT(
- ciphertext,
- tdata->ciphertext.data,
- tdata->validCipherLenInBits.len,
- "KASUMI Ciphertext data not as expected");
- return 0;
-}
-
-static int
-test_kasumi_encryption_oop(const struct kasumi_test_data *tdata)
-{
- struct crypto_testsuite_params *ts_params = &testsuite_params;
- struct crypto_unittest_params *ut_params = &unittest_params;
-
- int retval;
- uint8_t *plaintext, *ciphertext;
- unsigned plaintext_pad_len;
- unsigned plaintext_len;
-
- /* Create KASUMI session */
- retval = create_wireless_algo_cipher_session(ts_params->valid_devs[0],
- RTE_CRYPTO_CIPHER_OP_ENCRYPT,
- RTE_CRYPTO_CIPHER_KASUMI_F8,
- tdata->key.data, tdata->key.len);
- if (retval < 0)
- return retval;
-
- ut_params->ibuf = rte_pktmbuf_alloc(ts_params->mbuf_pool);
- ut_params->obuf = rte_pktmbuf_alloc(ts_params->mbuf_pool);
-
- /* Clear mbuf payload */
- memset(rte_pktmbuf_mtod(ut_params->ibuf, uint8_t *), 0,
- rte_pktmbuf_tailroom(ut_params->ibuf));
-
- plaintext_len = ceil_byte_length(tdata->plaintext.len);
- /* Append data which is padded to a multiple */
- /* of the algorithms block size */
- plaintext_pad_len = RTE_ALIGN_CEIL(plaintext_len, 8);
- plaintext = (uint8_t *)rte_pktmbuf_append(ut_params->ibuf,
- plaintext_pad_len);
- rte_pktmbuf_append(ut_params->obuf, plaintext_pad_len);
- memcpy(plaintext, tdata->plaintext.data, plaintext_len);
-
- TEST_HEXDUMP(stdout, "plaintext:", plaintext, plaintext_len);
-
- /* Create KASUMI operation */
- retval = create_wireless_algo_cipher_operation_oop(tdata->iv.data,
- tdata->iv.len,
- tdata->plaintext.len,
- tdata->validCipherOffsetLenInBits.len,
- RTE_CRYPTO_CIPHER_KASUMI_F8);
- if (retval < 0)
- return retval;
-
- ut_params->op = process_crypto_request(ts_params->valid_devs[0],
- ut_params->op);
- TEST_ASSERT_NOT_NULL(ut_params->op, "failed to retrieve obuf");
-
- ut_params->obuf = ut_params->op->sym->m_dst;
- if (ut_params->obuf)
- ciphertext = rte_pktmbuf_mtod(ut_params->obuf, uint8_t *)
- + tdata->iv.len;
- else
- ciphertext = plaintext;
-
- TEST_HEXDUMP(stdout, "ciphertext:", ciphertext, plaintext_len);
-
- /* Validate obuf */
- TEST_ASSERT_BUFFERS_ARE_EQUAL_BIT(
- ciphertext,
- tdata->ciphertext.data,
- tdata->validCipherLenInBits.len,
- "KASUMI Ciphertext data not as expected");
- return 0;
-}
-
-static int
-test_kasumi_decryption_oop(const struct kasumi_test_data *tdata)
-{
- struct crypto_testsuite_params *ts_params = &testsuite_params;
- struct crypto_unittest_params *ut_params = &unittest_params;
-
- int retval;
- uint8_t *ciphertext, *plaintext;
- unsigned ciphertext_pad_len;
- unsigned ciphertext_len;
-
- /* Create KASUMI session */
- retval = create_wireless_algo_cipher_session(ts_params->valid_devs[0],
- RTE_CRYPTO_CIPHER_OP_DECRYPT,
- RTE_CRYPTO_CIPHER_KASUMI_F8,
- tdata->key.data, tdata->key.len);
- if (retval < 0)
- return retval;
-
- ut_params->ibuf = rte_pktmbuf_alloc(ts_params->mbuf_pool);
- ut_params->obuf = rte_pktmbuf_alloc(ts_params->mbuf_pool);
-
- /* Clear mbuf payload */
- memset(rte_pktmbuf_mtod(ut_params->ibuf, uint8_t *), 0,
- rte_pktmbuf_tailroom(ut_params->ibuf));
-
- ciphertext_len = ceil_byte_length(tdata->ciphertext.len);
- /* Append data which is padded to a multiple */
- /* of the algorithms block size */
- ciphertext_pad_len = RTE_ALIGN_CEIL(ciphertext_len, 8);
- ciphertext = (uint8_t *)rte_pktmbuf_append(ut_params->ibuf,
- ciphertext_pad_len);
- rte_pktmbuf_append(ut_params->obuf, ciphertext_pad_len);
- memcpy(ciphertext, tdata->ciphertext.data, ciphertext_len);
-
- TEST_HEXDUMP(stdout, "ciphertext:", ciphertext, ciphertext_len);
-
- /* Create KASUMI operation */
- retval = create_wireless_algo_cipher_operation_oop(tdata->iv.data,
- tdata->iv.len,
- tdata->ciphertext.len,
- tdata->validCipherOffsetLenInBits.len,
- RTE_CRYPTO_CIPHER_KASUMI_F8);
- if (retval < 0)
- return retval;
-
- ut_params->op = process_crypto_request(ts_params->valid_devs[0],
- ut_params->op);
- TEST_ASSERT_NOT_NULL(ut_params->op, "failed to retrieve obuf");
-
- ut_params->obuf = ut_params->op->sym->m_dst;
- if (ut_params->obuf)
- plaintext = rte_pktmbuf_mtod(ut_params->obuf, uint8_t *)
- + tdata->iv.len;
- else
- plaintext = ciphertext;
-
- TEST_HEXDUMP(stdout, "plaintext:", plaintext, ciphertext_len);
-
- /* Validate obuf */
- TEST_ASSERT_BUFFERS_ARE_EQUAL_BIT(
- plaintext,
- tdata->plaintext.data,
- tdata->validCipherLenInBits.len,
- "KASUMI Plaintext data not as expected");
- return 0;
-}
-
-static int
-test_kasumi_decryption(const struct kasumi_test_data *tdata)
-{
- struct crypto_testsuite_params *ts_params = &testsuite_params;
- struct crypto_unittest_params *ut_params = &unittest_params;
-
- int retval;
- uint8_t *ciphertext, *plaintext;
- unsigned ciphertext_pad_len;
- unsigned ciphertext_len;
-
- /* Create KASUMI session */
- retval = create_wireless_algo_cipher_session(ts_params->valid_devs[0],
- RTE_CRYPTO_CIPHER_OP_DECRYPT,
- RTE_CRYPTO_CIPHER_KASUMI_F8,
- tdata->key.data, tdata->key.len);
- if (retval < 0)
- return retval;
-
- ut_params->ibuf = rte_pktmbuf_alloc(ts_params->mbuf_pool);
-
- /* Clear mbuf payload */
- memset(rte_pktmbuf_mtod(ut_params->ibuf, uint8_t *), 0,
- rte_pktmbuf_tailroom(ut_params->ibuf));
-
- ciphertext_len = ceil_byte_length(tdata->ciphertext.len);
- /* Append data which is padded to a multiple */
- /* of the algorithms block size */
- ciphertext_pad_len = RTE_ALIGN_CEIL(ciphertext_len, 8);
- ciphertext = (uint8_t *)rte_pktmbuf_append(ut_params->ibuf,
- ciphertext_pad_len);
- memcpy(ciphertext, tdata->ciphertext.data, ciphertext_len);
-
- TEST_HEXDUMP(stdout, "ciphertext:", ciphertext, ciphertext_len);
-
- /* Create KASUMI operation */
- retval = create_wireless_algo_cipher_operation(tdata->iv.data,
- tdata->iv.len,
- tdata->ciphertext.len,
- tdata->validCipherOffsetLenInBits.len,
- RTE_CRYPTO_CIPHER_KASUMI_F8);
- if (retval < 0)
- return retval;
-
- ut_params->op = process_crypto_request(ts_params->valid_devs[0],
- ut_params->op);
- TEST_ASSERT_NOT_NULL(ut_params->op, "failed to retrieve obuf");
-
- ut_params->obuf = ut_params->op->sym->m_dst;
- if (ut_params->obuf)
- plaintext = rte_pktmbuf_mtod(ut_params->obuf, uint8_t *)
- + tdata->iv.len;
- else
- plaintext = ciphertext;
-
- TEST_HEXDUMP(stdout, "plaintext:", plaintext, ciphertext_len);
-
- /* Validate obuf */
- TEST_ASSERT_BUFFERS_ARE_EQUAL_BIT(
- plaintext,
- tdata->plaintext.data,
- tdata->validCipherLenInBits.len,
- "KASUMI Plaintext data not as expected");
- return 0;
-}
-
-static int
-test_snow3g_encryption(const struct snow3g_test_data *tdata)
-{
- struct crypto_testsuite_params *ts_params = &testsuite_params;
- struct crypto_unittest_params *ut_params = &unittest_params;
-
- int retval;
- uint8_t *plaintext, *ciphertext;
- unsigned plaintext_pad_len;
- unsigned plaintext_len;
-
- /* Create SNOW 3G session */
- retval = create_wireless_algo_cipher_session(ts_params->valid_devs[0],
- RTE_CRYPTO_CIPHER_OP_ENCRYPT,
- RTE_CRYPTO_CIPHER_SNOW3G_UEA2,
- tdata->key.data, tdata->key.len);
- if (retval < 0)
- return retval;
-
- ut_params->ibuf = rte_pktmbuf_alloc(ts_params->mbuf_pool);
-
- /* Clear mbuf payload */
- memset(rte_pktmbuf_mtod(ut_params->ibuf, uint8_t *), 0,
- rte_pktmbuf_tailroom(ut_params->ibuf));
-
- plaintext_len = ceil_byte_length(tdata->plaintext.len);
- /* Append data which is padded to a multiple of */
- /* the algorithms block size */
- plaintext_pad_len = RTE_ALIGN_CEIL(plaintext_len, 16);
- plaintext = (uint8_t *)rte_pktmbuf_append(ut_params->ibuf,
- plaintext_pad_len);
- memcpy(plaintext, tdata->plaintext.data, plaintext_len);
-
- TEST_HEXDUMP(stdout, "plaintext:", plaintext, plaintext_len);
-
- /* Create SNOW 3G operation */
- retval = create_wireless_algo_cipher_operation(tdata->iv.data, tdata->iv.len,
- tdata->validCipherLenInBits.len,
- tdata->validCipherOffsetLenInBits.len,
- RTE_CRYPTO_CIPHER_SNOW3G_UEA2);
- if (retval < 0)
- return retval;
-
- ut_params->op = process_crypto_request(ts_params->valid_devs[0],
- ut_params->op);
- TEST_ASSERT_NOT_NULL(ut_params->op, "failed to retrieve obuf");
-
- ut_params->obuf = ut_params->op->sym->m_dst;
- if (ut_params->obuf)
- ciphertext = rte_pktmbuf_mtod(ut_params->obuf, uint8_t *)
- + tdata->iv.len;
- else
- ciphertext = plaintext;
-
- TEST_HEXDUMP(stdout, "ciphertext:", ciphertext, plaintext_len);
-
- /* Validate obuf */
- TEST_ASSERT_BUFFERS_ARE_EQUAL_BIT(
- ciphertext,
- tdata->ciphertext.data,
- tdata->validDataLenInBits.len,
- "SNOW 3G Ciphertext data not as expected");
- return 0;
-}
-
-
-static int
-test_snow3g_encryption_oop(const struct snow3g_test_data *tdata)
-{
- struct crypto_testsuite_params *ts_params = &testsuite_params;
- struct crypto_unittest_params *ut_params = &unittest_params;
- uint8_t *plaintext, *ciphertext;
-
- int retval;
- unsigned plaintext_pad_len;
- unsigned plaintext_len;
-
- /* Create SNOW 3G session */
- retval = create_wireless_algo_cipher_session(ts_params->valid_devs[0],
- RTE_CRYPTO_CIPHER_OP_ENCRYPT,
- RTE_CRYPTO_CIPHER_SNOW3G_UEA2,
- tdata->key.data, tdata->key.len);
- if (retval < 0)
- return retval;
-
- ut_params->ibuf = rte_pktmbuf_alloc(ts_params->mbuf_pool);
- ut_params->obuf = rte_pktmbuf_alloc(ts_params->mbuf_pool);
-
- TEST_ASSERT_NOT_NULL(ut_params->ibuf,
- "Failed to allocate input buffer in mempool");
- TEST_ASSERT_NOT_NULL(ut_params->obuf,
- "Failed to allocate output buffer in mempool");
-
- /* Clear mbuf payload */
- memset(rte_pktmbuf_mtod(ut_params->ibuf, uint8_t *), 0,
- rte_pktmbuf_tailroom(ut_params->ibuf));
-
- plaintext_len = ceil_byte_length(tdata->plaintext.len);
- /* Append data which is padded to a multiple of */
- /* the algorithms block size */
- plaintext_pad_len = RTE_ALIGN_CEIL(plaintext_len, 16);
- plaintext = (uint8_t *)rte_pktmbuf_append(ut_params->ibuf,
- plaintext_pad_len);
- rte_pktmbuf_append(ut_params->obuf, plaintext_pad_len);
- memcpy(plaintext, tdata->plaintext.data, plaintext_len);
-
- TEST_HEXDUMP(stdout, "plaintext:", plaintext, plaintext_len);
-
- /* Create SNOW 3G operation */
- retval = create_wireless_algo_cipher_operation_oop(tdata->iv.data,
- tdata->iv.len,
- tdata->validCipherLenInBits.len,
- tdata->validCipherOffsetLenInBits.len,
- RTE_CRYPTO_CIPHER_SNOW3G_UEA2);
- if (retval < 0)
- return retval;
-
- ut_params->op = process_crypto_request(ts_params->valid_devs[0],
- ut_params->op);
- TEST_ASSERT_NOT_NULL(ut_params->op, "failed to retrieve obuf");
-
- ut_params->obuf = ut_params->op->sym->m_dst;
- if (ut_params->obuf)
- ciphertext = rte_pktmbuf_mtod(ut_params->obuf, uint8_t *)
- + tdata->iv.len;
- else
- ciphertext = plaintext;
-
- TEST_HEXDUMP(stdout, "ciphertext:", ciphertext, plaintext_len);
-
- /* Validate obuf */
- TEST_ASSERT_BUFFERS_ARE_EQUAL_BIT(
- ciphertext,
- tdata->ciphertext.data,
- tdata->validDataLenInBits.len,
- "SNOW 3G Ciphertext data not as expected");
- return 0;
-}
-
-/* Shift right a buffer by "offset" bits, "offset" < 8 */
-static void
-buffer_shift_right(uint8_t *buffer, uint32_t length, uint8_t offset)
-{
- uint8_t curr_byte, prev_byte;
- uint32_t length_in_bytes = ceil_byte_length(length + offset);
- uint8_t lower_byte_mask = (1 << offset) - 1;
- unsigned i;
-
- prev_byte = buffer[0];
- buffer[0] >>= offset;
-
- for (i = 1; i < length_in_bytes; i++) {
- curr_byte = buffer[i];
- buffer[i] = ((prev_byte & lower_byte_mask) << (8 - offset)) |
- (curr_byte >> offset);
- prev_byte = curr_byte;
- }
-}
-
-static int
-test_snow3g_encryption_offset_oop(const struct snow3g_test_data *tdata)
-{
- struct crypto_testsuite_params *ts_params = &testsuite_params;
- struct crypto_unittest_params *ut_params = &unittest_params;
- uint8_t *plaintext, *ciphertext;
- int retval;
- uint32_t plaintext_len;
- uint32_t plaintext_pad_len;
- uint8_t extra_offset = 4;
- uint8_t *expected_ciphertext_shifted;
-
- /* Create SNOW 3G session */
- retval = create_wireless_algo_cipher_session(ts_params->valid_devs[0],
- RTE_CRYPTO_CIPHER_OP_ENCRYPT,
- RTE_CRYPTO_CIPHER_SNOW3G_UEA2,
- tdata->key.data, tdata->key.len);
- if (retval < 0)
- return retval;
-
- ut_params->ibuf = rte_pktmbuf_alloc(ts_params->mbuf_pool);
- ut_params->obuf = rte_pktmbuf_alloc(ts_params->mbuf_pool);
-
- TEST_ASSERT_NOT_NULL(ut_params->ibuf,
- "Failed to allocate input buffer in mempool");
- TEST_ASSERT_NOT_NULL(ut_params->obuf,
- "Failed to allocate output buffer in mempool");
-
- /* Clear mbuf payload */
- memset(rte_pktmbuf_mtod(ut_params->ibuf, uint8_t *), 0,
- rte_pktmbuf_tailroom(ut_params->ibuf));
-
- plaintext_len = ceil_byte_length(tdata->plaintext.len + extra_offset);
- /*
- * Append data which is padded to a
- * multiple of the algorithms block size
- */
- plaintext_pad_len = RTE_ALIGN_CEIL(plaintext_len, 16);
-
- plaintext = (uint8_t *) rte_pktmbuf_append(ut_params->ibuf,
- plaintext_pad_len);
-
- rte_pktmbuf_append(ut_params->obuf, plaintext_pad_len);
-
- memcpy(plaintext, tdata->plaintext.data, (tdata->plaintext.len >> 3));
- buffer_shift_right(plaintext, tdata->plaintext.len, extra_offset);
-
-#ifdef RTE_APP_TEST_DEBUG
- rte_hexdump(stdout, "plaintext:", plaintext, tdata->plaintext.len);
-#endif
- /* Create SNOW 3G operation */
- retval = create_wireless_algo_cipher_operation_oop(tdata->iv.data,
- tdata->iv.len,
- tdata->validCipherLenInBits.len,
- tdata->validCipherOffsetLenInBits.len +
- extra_offset,
- RTE_CRYPTO_CIPHER_SNOW3G_UEA2);
- if (retval < 0)
- return retval;
-
- ut_params->op = process_crypto_request(ts_params->valid_devs[0],
- ut_params->op);
- TEST_ASSERT_NOT_NULL(ut_params->op, "failed to retrieve obuf");
-
- ut_params->obuf = ut_params->op->sym->m_dst;
- if (ut_params->obuf)
- ciphertext = rte_pktmbuf_mtod(ut_params->obuf, uint8_t *)
- + tdata->iv.len;
- else
- ciphertext = plaintext;
-
-#ifdef RTE_APP_TEST_DEBUG
- rte_hexdump(stdout, "ciphertext:", ciphertext, plaintext_len);
-#endif
-
- expected_ciphertext_shifted = rte_malloc(NULL,
- ceil_byte_length(plaintext_len + extra_offset), 0);
-
- TEST_ASSERT_NOT_NULL(expected_ciphertext_shifted,
- "failed to reserve memory for ciphertext shifted\n");
-
- memcpy(expected_ciphertext_shifted, tdata->ciphertext.data,
- ceil_byte_length(tdata->ciphertext.len));
- buffer_shift_right(expected_ciphertext_shifted, tdata->ciphertext.len,
- extra_offset);
- /* Validate obuf */
- TEST_ASSERT_BUFFERS_ARE_EQUAL_BIT_OFFSET(
- ciphertext,
- expected_ciphertext_shifted,
- tdata->validDataLenInBits.len,
- extra_offset,
- "SNOW 3G Ciphertext data not as expected");
- return 0;
-}
-
-static int test_snow3g_decryption(const struct snow3g_test_data *tdata)
-{
- struct crypto_testsuite_params *ts_params = &testsuite_params;
- struct crypto_unittest_params *ut_params = &unittest_params;
-
- int retval;
-
- uint8_t *plaintext, *ciphertext;
- unsigned ciphertext_pad_len;
- unsigned ciphertext_len;
-
- /* Create SNOW 3G session */
- retval = create_wireless_algo_cipher_session(ts_params->valid_devs[0],
- RTE_CRYPTO_CIPHER_OP_DECRYPT,
- RTE_CRYPTO_CIPHER_SNOW3G_UEA2,
- tdata->key.data, tdata->key.len);
- if (retval < 0)
- return retval;
-
- ut_params->ibuf = rte_pktmbuf_alloc(ts_params->mbuf_pool);
-
- /* Clear mbuf payload */
- memset(rte_pktmbuf_mtod(ut_params->ibuf, uint8_t *), 0,
- rte_pktmbuf_tailroom(ut_params->ibuf));
-
- ciphertext_len = ceil_byte_length(tdata->ciphertext.len);
- /* Append data which is padded to a multiple of */
- /* the algorithms block size */
- ciphertext_pad_len = RTE_ALIGN_CEIL(ciphertext_len, 16);
- ciphertext = (uint8_t *)rte_pktmbuf_append(ut_params->ibuf,
- ciphertext_pad_len);
- memcpy(ciphertext, tdata->ciphertext.data, ciphertext_len);
-
- TEST_HEXDUMP(stdout, "ciphertext:", ciphertext, ciphertext_len);
-
- /* Create SNOW 3G operation */
- retval = create_wireless_algo_cipher_operation(tdata->iv.data, tdata->iv.len,
- tdata->validCipherLenInBits.len,
- tdata->validCipherOffsetLenInBits.len,
- RTE_CRYPTO_CIPHER_SNOW3G_UEA2);
- if (retval < 0)
- return retval;
-
- ut_params->op = process_crypto_request(ts_params->valid_devs[0],
- ut_params->op);
- TEST_ASSERT_NOT_NULL(ut_params->op, "failed to retrieve obuf");
- ut_params->obuf = ut_params->op->sym->m_dst;
- if (ut_params->obuf)
- plaintext = rte_pktmbuf_mtod(ut_params->obuf, uint8_t *)
- + tdata->iv.len;
- else
- plaintext = ciphertext;
-
- TEST_HEXDUMP(stdout, "plaintext:", plaintext, ciphertext_len);
-
- /* Validate obuf */
- TEST_ASSERT_BUFFERS_ARE_EQUAL_BIT(plaintext,
- tdata->plaintext.data,
- tdata->validDataLenInBits.len,
- "SNOW 3G Plaintext data not as expected");
- return 0;
-}
-
-static int test_snow3g_decryption_oop(const struct snow3g_test_data *tdata)
-{
- struct crypto_testsuite_params *ts_params = &testsuite_params;
- struct crypto_unittest_params *ut_params = &unittest_params;
-
- int retval;
-
- uint8_t *plaintext, *ciphertext;
- unsigned ciphertext_pad_len;
- unsigned ciphertext_len;
-
- /* Create SNOW 3G session */
- retval = create_wireless_algo_cipher_session(ts_params->valid_devs[0],
- RTE_CRYPTO_CIPHER_OP_DECRYPT,
- RTE_CRYPTO_CIPHER_SNOW3G_UEA2,
- tdata->key.data, tdata->key.len);
- if (retval < 0)
- return retval;
-
- ut_params->ibuf = rte_pktmbuf_alloc(ts_params->mbuf_pool);
- ut_params->obuf = rte_pktmbuf_alloc(ts_params->mbuf_pool);
-
- TEST_ASSERT_NOT_NULL(ut_params->ibuf,
- "Failed to allocate input buffer");
- TEST_ASSERT_NOT_NULL(ut_params->obuf,
- "Failed to allocate output buffer");
-
- /* Clear mbuf payload */
- memset(rte_pktmbuf_mtod(ut_params->ibuf, uint8_t *), 0,
- rte_pktmbuf_tailroom(ut_params->ibuf));
-
- memset(rte_pktmbuf_mtod(ut_params->obuf, uint8_t *), 0,
- rte_pktmbuf_tailroom(ut_params->obuf));
-
- ciphertext_len = ceil_byte_length(tdata->ciphertext.len);
- /* Append data which is padded to a multiple of */
- /* the algorithms block size */
- ciphertext_pad_len = RTE_ALIGN_CEIL(ciphertext_len, 16);
- ciphertext = (uint8_t *)rte_pktmbuf_append(ut_params->ibuf,
- ciphertext_pad_len);
- rte_pktmbuf_append(ut_params->obuf, ciphertext_pad_len);
- memcpy(ciphertext, tdata->ciphertext.data, ciphertext_len);
-
- TEST_HEXDUMP(stdout, "ciphertext:", ciphertext, ciphertext_len);
-
- /* Create SNOW 3G operation */
- retval = create_wireless_algo_cipher_operation_oop(tdata->iv.data,
- tdata->iv.len,
- tdata->validCipherLenInBits.len,
- tdata->validCipherOffsetLenInBits.len,
- RTE_CRYPTO_CIPHER_SNOW3G_UEA2);
- if (retval < 0)
- return retval;
-
- ut_params->op = process_crypto_request(ts_params->valid_devs[0],
- ut_params->op);
- TEST_ASSERT_NOT_NULL(ut_params->op, "failed to retrieve obuf");
- ut_params->obuf = ut_params->op->sym->m_dst;
- if (ut_params->obuf)
- plaintext = rte_pktmbuf_mtod(ut_params->obuf, uint8_t *)
- + tdata->iv.len;
- else
- plaintext = ciphertext;
-
- TEST_HEXDUMP(stdout, "plaintext:", plaintext, ciphertext_len);
-
- /* Validate obuf */
- TEST_ASSERT_BUFFERS_ARE_EQUAL_BIT(plaintext,
- tdata->plaintext.data,
- tdata->validDataLenInBits.len,
- "SNOW 3G Plaintext data not as expected");
- return 0;
-}
-
-static int
-test_snow3g_cipher_auth(const struct snow3g_test_data *tdata)
-{
- struct crypto_testsuite_params *ts_params = &testsuite_params;
- struct crypto_unittest_params *ut_params = &unittest_params;
-
- int retval;
-
- uint8_t *plaintext, *ciphertext;
- unsigned plaintext_pad_len;
- unsigned plaintext_len;
-
- /* Create SNOW 3G session */
- retval = create_wireless_algo_cipher_auth_session(ts_params->valid_devs[0],
- RTE_CRYPTO_CIPHER_OP_ENCRYPT,
- RTE_CRYPTO_AUTH_OP_GENERATE,
- RTE_CRYPTO_AUTH_SNOW3G_UIA2,
- RTE_CRYPTO_CIPHER_SNOW3G_UEA2,
- tdata->key.data, tdata->key.len,
- tdata->aad.len, tdata->digest.len);
- if (retval < 0)
- return retval;
- ut_params->ibuf = rte_pktmbuf_alloc(ts_params->mbuf_pool);
-
- /* clear mbuf payload */
- memset(rte_pktmbuf_mtod(ut_params->ibuf, uint8_t *), 0,
- rte_pktmbuf_tailroom(ut_params->ibuf));
-
- plaintext_len = ceil_byte_length(tdata->plaintext.len);
- /* Append data which is padded to a multiple of */
- /* the algorithms block size */
- plaintext_pad_len = RTE_ALIGN_CEIL(plaintext_len, 16);
- plaintext = (uint8_t *)rte_pktmbuf_append(ut_params->ibuf,
- plaintext_pad_len);
- memcpy(plaintext, tdata->plaintext.data, plaintext_len);
-
- TEST_HEXDUMP(stdout, "plaintext:", plaintext, plaintext_len);
-
- /* Create SNOW 3G operation */
- retval = create_wireless_algo_cipher_hash_operation(tdata->digest.data,
- tdata->digest.len, tdata->aad.data,
- tdata->aad.len, /*tdata->plaintext.len,*/
- plaintext_pad_len, RTE_CRYPTO_AUTH_OP_GENERATE,
- RTE_CRYPTO_AUTH_SNOW3G_UIA2,
- RTE_CRYPTO_CIPHER_SNOW3G_UEA2,
- tdata->iv.data, tdata->iv.len,
- tdata->validCipherLenInBits.len,
- tdata->validCipherOffsetLenInBits.len,
- tdata->validAuthLenInBits.len,
- tdata->validAuthOffsetLenInBits.len
- );
- if (retval < 0)
- return retval;
-
- ut_params->op = process_crypto_request(ts_params->valid_devs[0],
- ut_params->op);
- TEST_ASSERT_NOT_NULL(ut_params->op, "failed to retrieve obuf");
- ut_params->obuf = ut_params->op->sym->m_src;
- if (ut_params->obuf)
- ciphertext = rte_pktmbuf_mtod(ut_params->obuf, uint8_t *)
- + tdata->iv.len + tdata->aad.len;
- else
- ciphertext = plaintext;
-
- TEST_HEXDUMP(stdout, "ciphertext:", ciphertext, plaintext_len);
- /* Validate obuf */
- TEST_ASSERT_BUFFERS_ARE_EQUAL_BIT(
- ciphertext,
- tdata->ciphertext.data,
- tdata->validDataLenInBits.len,
- "SNOW 3G Ciphertext data not as expected");
-
- ut_params->digest = rte_pktmbuf_mtod(ut_params->obuf, uint8_t *)
- + plaintext_pad_len + tdata->aad.len + tdata->iv.len;
-
- /* Validate obuf */
- TEST_ASSERT_BUFFERS_ARE_EQUAL(
- ut_params->digest,
- tdata->digest.data,
- DIGEST_BYTE_LENGTH_SNOW3G_UIA2,
- "SNOW 3G Generated auth tag not as expected");
- return 0;
-}
-static int
-test_snow3g_auth_cipher(const struct snow3g_test_data *tdata)
-{
- struct crypto_testsuite_params *ts_params = &testsuite_params;
- struct crypto_unittest_params *ut_params = &unittest_params;
-
- int retval;
-
- uint8_t *plaintext, *ciphertext;
- unsigned plaintext_pad_len;
- unsigned plaintext_len;
-
- /* Create SNOW 3G session */
- retval = create_wireless_algo_auth_cipher_session(ts_params->valid_devs[0],
- RTE_CRYPTO_CIPHER_OP_ENCRYPT,
- RTE_CRYPTO_AUTH_OP_GENERATE,
- RTE_CRYPTO_AUTH_SNOW3G_UIA2,
- RTE_CRYPTO_CIPHER_SNOW3G_UEA2,
- tdata->key.data, tdata->key.len,
- tdata->aad.len, tdata->digest.len);
- if (retval < 0)
- return retval;
-
- ut_params->ibuf = rte_pktmbuf_alloc(ts_params->mbuf_pool);
-
- /* clear mbuf payload */
- memset(rte_pktmbuf_mtod(ut_params->ibuf, uint8_t *), 0,
- rte_pktmbuf_tailroom(ut_params->ibuf));
-
- plaintext_len = ceil_byte_length(tdata->plaintext.len);
- /* Append data which is padded to a multiple of */
- /* the algorithms block size */
- plaintext_pad_len = RTE_ALIGN_CEIL(plaintext_len, 16);
- plaintext = (uint8_t *)rte_pktmbuf_append(ut_params->ibuf,
- plaintext_pad_len);
- memcpy(plaintext, tdata->plaintext.data, plaintext_len);
-
- TEST_HEXDUMP(stdout, "plaintext:", plaintext, plaintext_len);
-
- /* Create SNOW 3G operation */
- retval = create_wireless_algo_auth_cipher_operation(
- tdata->digest.len,
- tdata->iv.data, tdata->iv.len,
- tdata->aad.data, tdata->aad.len,
- plaintext_pad_len,
- tdata->validCipherLenInBits.len,
- tdata->validCipherOffsetLenInBits.len,
- tdata->validAuthLenInBits.len,
- tdata->validAuthOffsetLenInBits.len,
- RTE_CRYPTO_AUTH_SNOW3G_UIA2,
- RTE_CRYPTO_CIPHER_SNOW3G_UEA2
- );
-
- if (retval < 0)
- return retval;
-
- ut_params->op = process_crypto_request(ts_params->valid_devs[0],
- ut_params->op);
- TEST_ASSERT_NOT_NULL(ut_params->op, "failed to retrieve obuf");
- ut_params->obuf = ut_params->op->sym->m_src;
- if (ut_params->obuf)
- ciphertext = rte_pktmbuf_mtod(ut_params->obuf, uint8_t *)
- + tdata->aad.len + tdata->iv.len;
- else
- ciphertext = plaintext;
-
- ut_params->digest = rte_pktmbuf_mtod(ut_params->obuf, uint8_t *)
- + plaintext_pad_len + tdata->aad.len + tdata->iv.len;
- TEST_HEXDUMP(stdout, "ciphertext:", ciphertext, plaintext_len);
-
- /* Validate obuf */
- TEST_ASSERT_BUFFERS_ARE_EQUAL_BIT(
- ciphertext,
- tdata->ciphertext.data,
- tdata->validDataLenInBits.len,
- "SNOW 3G Ciphertext data not as expected");
-
- /* Validate obuf */
- TEST_ASSERT_BUFFERS_ARE_EQUAL(
- ut_params->digest,
- tdata->digest.data,
- DIGEST_BYTE_LENGTH_SNOW3G_UIA2,
- "SNOW 3G Generated auth tag not as expected");
- return 0;
-}
-
-static int
-test_kasumi_auth_cipher(const struct kasumi_test_data *tdata)
-{
- struct crypto_testsuite_params *ts_params = &testsuite_params;
- struct crypto_unittest_params *ut_params = &unittest_params;
-
- int retval;
-
- uint8_t *plaintext, *ciphertext;
- unsigned plaintext_pad_len;
- unsigned plaintext_len;
-
- /* Create KASUMI session */
- retval = create_wireless_algo_auth_cipher_session(
- ts_params->valid_devs[0],
- RTE_CRYPTO_CIPHER_OP_ENCRYPT,
- RTE_CRYPTO_AUTH_OP_GENERATE,
- RTE_CRYPTO_AUTH_KASUMI_F9,
- RTE_CRYPTO_CIPHER_KASUMI_F8,
- tdata->key.data, tdata->key.len,
- tdata->aad.len, tdata->digest.len);
- if (retval < 0)
- return retval;
- ut_params->ibuf = rte_pktmbuf_alloc(ts_params->mbuf_pool);
-
- /* clear mbuf payload */
- memset(rte_pktmbuf_mtod(ut_params->ibuf, uint8_t *), 0,
- rte_pktmbuf_tailroom(ut_params->ibuf));
-
- plaintext_len = ceil_byte_length(tdata->plaintext.len);
- /* Append data which is padded to a multiple of */
- /* the algorithms block size */
- plaintext_pad_len = RTE_ALIGN_CEIL(plaintext_len, 16);
- plaintext = (uint8_t *)rte_pktmbuf_append(ut_params->ibuf,
- plaintext_pad_len);
- memcpy(plaintext, tdata->plaintext.data, plaintext_len);
-
- TEST_HEXDUMP(stdout, "plaintext:", plaintext, plaintext_len);
-
- /* Create KASUMI operation */
- retval = create_wireless_algo_auth_cipher_operation(tdata->digest.len,
- tdata->iv.data, tdata->iv.len,
- tdata->aad.data, tdata->aad.len,
- plaintext_pad_len,
- tdata->validCipherLenInBits.len,
- tdata->validCipherOffsetLenInBits.len,
- tdata->validAuthLenInBits.len,
- tdata->validAuthOffsetLenInBits.len,
- RTE_CRYPTO_AUTH_KASUMI_F9,
- RTE_CRYPTO_CIPHER_KASUMI_F8
- );
-
- if (retval < 0)
- return retval;
-
- ut_params->op = process_crypto_request(ts_params->valid_devs[0],
- ut_params->op);
- TEST_ASSERT_NOT_NULL(ut_params->op, "failed to retrieve obuf");
- ut_params->obuf = ut_params->op->sym->m_src;
- if (ut_params->obuf)
- ciphertext = rte_pktmbuf_mtod(ut_params->obuf, uint8_t *)
- + tdata->iv.len + tdata->aad.len;
- else
- ciphertext = plaintext;
-
- /* Validate obuf */
- TEST_ASSERT_BUFFERS_ARE_EQUAL_BIT(
- ciphertext,
- tdata->ciphertext.data,
- tdata->validCipherLenInBits.len,
- "KASUMI Ciphertext data not as expected");
- ut_params->digest = rte_pktmbuf_mtod(ut_params->obuf, uint8_t *)
- + plaintext_pad_len + tdata->aad.len + tdata->iv.len;
-
- /* Validate obuf */
- TEST_ASSERT_BUFFERS_ARE_EQUAL(
- ut_params->digest,
- tdata->digest.data,
- DIGEST_BYTE_LENGTH_KASUMI_F9,
- "KASUMI Generated auth tag not as expected");
- return 0;
-}
-
-static int
-test_kasumi_cipher_auth(const struct kasumi_test_data *tdata)
-{
- struct crypto_testsuite_params *ts_params = &testsuite_params;
- struct crypto_unittest_params *ut_params = &unittest_params;
-
- int retval;
-
- uint8_t *plaintext, *ciphertext;
- unsigned plaintext_pad_len;
- unsigned plaintext_len;
-
- /* Create KASUMI session */
- retval = create_wireless_algo_cipher_auth_session(
- ts_params->valid_devs[0],
- RTE_CRYPTO_CIPHER_OP_ENCRYPT,
- RTE_CRYPTO_AUTH_OP_GENERATE,
- RTE_CRYPTO_AUTH_KASUMI_F9,
- RTE_CRYPTO_CIPHER_KASUMI_F8,
- tdata->key.data, tdata->key.len,
- tdata->aad.len, tdata->digest.len);
- if (retval < 0)
- return retval;
-
- ut_params->ibuf = rte_pktmbuf_alloc(ts_params->mbuf_pool);
-
- /* clear mbuf payload */
- memset(rte_pktmbuf_mtod(ut_params->ibuf, uint8_t *), 0,
- rte_pktmbuf_tailroom(ut_params->ibuf));
-
- plaintext_len = ceil_byte_length(tdata->plaintext.len);
- /* Append data which is padded to a multiple of */
- /* the algorithms block size */
- plaintext_pad_len = RTE_ALIGN_CEIL(plaintext_len, 16);
- plaintext = (uint8_t *)rte_pktmbuf_append(ut_params->ibuf,
- plaintext_pad_len);
- memcpy(plaintext, tdata->plaintext.data, plaintext_len);
-
- TEST_HEXDUMP(stdout, "plaintext:", plaintext, plaintext_len);
-
- /* Create KASUMI operation */
- retval = create_wireless_algo_cipher_hash_operation(tdata->digest.data,
- tdata->digest.len, tdata->aad.data,
- tdata->aad.len,
- plaintext_pad_len, RTE_CRYPTO_AUTH_OP_GENERATE,
- RTE_CRYPTO_AUTH_KASUMI_F9,
- RTE_CRYPTO_CIPHER_KASUMI_F8,
- tdata->iv.data, tdata->iv.len,
- tdata->validCipherLenInBits.len,
- tdata->validCipherOffsetLenInBits.len,
- tdata->validAuthLenInBits.len,
- tdata->validAuthOffsetLenInBits.len
- );
- if (retval < 0)
- return retval;
-
- ut_params->op = process_crypto_request(ts_params->valid_devs[0],
- ut_params->op);
- TEST_ASSERT_NOT_NULL(ut_params->op, "failed to retrieve obuf");
- ut_params->obuf = ut_params->op->sym->m_src;
- if (ut_params->obuf)
- ciphertext = rte_pktmbuf_mtod(ut_params->obuf, uint8_t *)
- + tdata->aad.len + tdata->iv.len;
- else
- ciphertext = plaintext;
-
- ut_params->digest = rte_pktmbuf_mtod(ut_params->obuf, uint8_t *)
- + plaintext_pad_len + tdata->aad.len + tdata->iv.len;
-
- /* Validate obuf */
- TEST_ASSERT_BUFFERS_ARE_EQUAL_BIT(
- ciphertext,
- tdata->ciphertext.data,
- tdata->validCipherLenInBits.len,
- "KASUMI Ciphertext data not as expected");
-
- /* Validate obuf */
- TEST_ASSERT_BUFFERS_ARE_EQUAL(
- ut_params->digest,
- tdata->digest.data,
- DIGEST_BYTE_LENGTH_SNOW3G_UIA2,
- "KASUMI Generated auth tag not as expected");
- return 0;
-}
-
-static int
-test_zuc_encryption(const struct zuc_test_data *tdata)
-{
- struct crypto_testsuite_params *ts_params = &testsuite_params;
- struct crypto_unittest_params *ut_params = &unittest_params;
-
- int retval;
- uint8_t *plaintext, *ciphertext;
- unsigned plaintext_pad_len;
- unsigned plaintext_len;
-
- /* Create ZUC session */
- retval = create_wireless_algo_cipher_session(ts_params->valid_devs[0],
- RTE_CRYPTO_CIPHER_OP_ENCRYPT,
- RTE_CRYPTO_CIPHER_ZUC_EEA3,
- tdata->key.data, tdata->key.len);
- if (retval < 0)
- return retval;
-
- ut_params->ibuf = rte_pktmbuf_alloc(ts_params->mbuf_pool);
-
- /* Clear mbuf payload */
- memset(rte_pktmbuf_mtod(ut_params->ibuf, uint8_t *), 0,
- rte_pktmbuf_tailroom(ut_params->ibuf));
-
- plaintext_len = ceil_byte_length(tdata->plaintext.len);
- /* Append data which is padded to a multiple */
- /* of the algorithms block size */
- plaintext_pad_len = RTE_ALIGN_CEIL(plaintext_len, 8);
- plaintext = (uint8_t *)rte_pktmbuf_append(ut_params->ibuf,
- plaintext_pad_len);
- memcpy(plaintext, tdata->plaintext.data, plaintext_len);
-
- TEST_HEXDUMP(stdout, "plaintext:", plaintext, plaintext_len);
-
- /* Create ZUC operation */
- retval = create_wireless_algo_cipher_operation(tdata->iv.data, tdata->iv.len,
- tdata->plaintext.len,
- tdata->validCipherOffsetLenInBits.len,
- RTE_CRYPTO_CIPHER_ZUC_EEA3);
- if (retval < 0)
- return retval;
-
- ut_params->op = process_crypto_request(ts_params->valid_devs[0],
- ut_params->op);
- TEST_ASSERT_NOT_NULL(ut_params->op, "failed to retrieve obuf");
-
- ut_params->obuf = ut_params->op->sym->m_dst;
- if (ut_params->obuf)
- ciphertext = rte_pktmbuf_mtod(ut_params->obuf, uint8_t *)
- + tdata->iv.len;
- else
- ciphertext = plaintext;
-
- TEST_HEXDUMP(stdout, "ciphertext:", ciphertext, plaintext_len);
-
- /* Validate obuf */
- TEST_ASSERT_BUFFERS_ARE_EQUAL_BIT(
- ciphertext,
- tdata->ciphertext.data,
- tdata->validCipherLenInBits.len,
- "ZUC Ciphertext data not as expected");
- return 0;
-}
-
-static int
-test_zuc_authentication(const struct zuc_hash_test_data *tdata)
-{
- struct crypto_testsuite_params *ts_params = &testsuite_params;
- struct crypto_unittest_params *ut_params = &unittest_params;
-
- int retval;
- unsigned plaintext_pad_len;
- unsigned plaintext_len;
- uint8_t *plaintext;
-
- /* Create ZUC session */
- retval = create_wireless_algo_hash_session(ts_params->valid_devs[0],
- tdata->key.data, tdata->key.len,
- tdata->aad.len, tdata->digest.len,
- RTE_CRYPTO_AUTH_OP_GENERATE,
- RTE_CRYPTO_AUTH_ZUC_EIA3);
- if (retval < 0)
- return retval;
-
- /* alloc mbuf and set payload */
- ut_params->ibuf = rte_pktmbuf_alloc(ts_params->mbuf_pool);
-
- memset(rte_pktmbuf_mtod(ut_params->ibuf, uint8_t *), 0,
- rte_pktmbuf_tailroom(ut_params->ibuf));
-
- plaintext_len = ceil_byte_length(tdata->plaintext.len);
- /* Append data which is padded to a multiple of */
- /* the algorithms block size */
- plaintext_pad_len = RTE_ALIGN_CEIL(plaintext_len, 8);
- plaintext = (uint8_t *)rte_pktmbuf_append(ut_params->ibuf,
- plaintext_pad_len);
- memcpy(plaintext, tdata->plaintext.data, plaintext_len);
-
- /* Create ZUC operation */
- retval = create_wireless_algo_hash_operation(NULL, tdata->digest.len,
- tdata->aad.data, tdata->aad.len,
- plaintext_pad_len, RTE_CRYPTO_AUTH_OP_GENERATE,
- RTE_CRYPTO_AUTH_ZUC_EIA3,
- tdata->validAuthLenInBits.len,
- tdata->validAuthOffsetLenInBits.len);
- if (retval < 0)
- return retval;
-
- ut_params->op = process_crypto_request(ts_params->valid_devs[0],
- ut_params->op);
- ut_params->obuf = ut_params->op->sym->m_src;
- TEST_ASSERT_NOT_NULL(ut_params->op, "failed to retrieve obuf");
- ut_params->digest = rte_pktmbuf_mtod(ut_params->obuf, uint8_t *)
- + plaintext_pad_len + ALIGN_POW2_ROUNDUP(tdata->aad.len, 8);
-
- /* Validate obuf */
- TEST_ASSERT_BUFFERS_ARE_EQUAL(
- ut_params->digest,
- tdata->digest.data,
- DIGEST_BYTE_LENGTH_KASUMI_F9,
- "ZUC Generated auth tag not as expected");
-
- return 0;
-}
-
-static int
-test_kasumi_encryption_test_case_1(void)
-{
- return test_kasumi_encryption(&kasumi_test_case_1);
-}
-
-static int
-test_kasumi_encryption_test_case_1_oop(void)
-{
- return test_kasumi_encryption_oop(&kasumi_test_case_1);
-}
-
-static int
-test_kasumi_encryption_test_case_2(void)
-{
- return test_kasumi_encryption(&kasumi_test_case_2);
-}
-
-static int
-test_kasumi_encryption_test_case_3(void)
-{
- return test_kasumi_encryption(&kasumi_test_case_3);
-}
-
-static int
-test_kasumi_encryption_test_case_4(void)
-{
- return test_kasumi_encryption(&kasumi_test_case_4);
-}
-
-static int
-test_kasumi_encryption_test_case_5(void)
-{
- return test_kasumi_encryption(&kasumi_test_case_5);
-}
-
-static int
-test_kasumi_decryption_test_case_1(void)
-{
- return test_kasumi_decryption(&kasumi_test_case_1);
-}
-
-static int
-test_kasumi_decryption_test_case_1_oop(void)
-{
- return test_kasumi_decryption_oop(&kasumi_test_case_1);
-}
-
-static int
-test_kasumi_decryption_test_case_2(void)
-{
- return test_kasumi_decryption(&kasumi_test_case_2);
-}
-
-static int
-test_kasumi_decryption_test_case_3(void)
-{
- return test_kasumi_decryption(&kasumi_test_case_3);
-}
-
-static int
-test_kasumi_decryption_test_case_4(void)
-{
- return test_kasumi_decryption(&kasumi_test_case_4);
-}
-
-static int
-test_kasumi_decryption_test_case_5(void)
-{
- return test_kasumi_decryption(&kasumi_test_case_5);
-}
-static int
-test_snow3g_encryption_test_case_1(void)
-{
- return test_snow3g_encryption(&snow3g_test_case_1);
-}
-
-static int
-test_snow3g_encryption_test_case_1_oop(void)
-{
- return test_snow3g_encryption_oop(&snow3g_test_case_1);
-}
-
-static int
-test_snow3g_encryption_test_case_1_offset_oop(void)
-{
- return test_snow3g_encryption_offset_oop(&snow3g_test_case_1);
-}
-
-static int
-test_snow3g_encryption_test_case_2(void)
-{
- return test_snow3g_encryption(&snow3g_test_case_2);
-}
-
-static int
-test_snow3g_encryption_test_case_3(void)
-{
- return test_snow3g_encryption(&snow3g_test_case_3);
-}
-
-static int
-test_snow3g_encryption_test_case_4(void)
-{
- return test_snow3g_encryption(&snow3g_test_case_4);
-}
-
-static int
-test_snow3g_encryption_test_case_5(void)
-{
- return test_snow3g_encryption(&snow3g_test_case_5);
-}
-
-static int
-test_snow3g_decryption_test_case_1(void)
-{
- return test_snow3g_decryption(&snow3g_test_case_1);
-}
-
-static int
-test_snow3g_decryption_test_case_1_oop(void)
-{
- return test_snow3g_decryption_oop(&snow3g_test_case_1);
-}
-
-static int
-test_snow3g_decryption_test_case_2(void)
-{
- return test_snow3g_decryption(&snow3g_test_case_2);
-}
-
-static int
-test_snow3g_decryption_test_case_3(void)
-{
- return test_snow3g_decryption(&snow3g_test_case_3);
-}
-
-static int
-test_snow3g_decryption_test_case_4(void)
-{
- return test_snow3g_decryption(&snow3g_test_case_4);
-}
-
-static int
-test_snow3g_decryption_test_case_5(void)
-{
- return test_snow3g_decryption(&snow3g_test_case_5);
-}
-static int
-test_snow3g_cipher_auth_test_case_1(void)
-{
- return test_snow3g_cipher_auth(&snow3g_test_case_3);
-}
-
-static int
-test_snow3g_auth_cipher_test_case_1(void)
-{
- return test_snow3g_auth_cipher(&snow3g_test_case_6);
-}
-
-static int
-test_kasumi_auth_cipher_test_case_1(void)
-{
- return test_kasumi_auth_cipher(&kasumi_test_case_3);
-}
-
-static int
-test_kasumi_cipher_auth_test_case_1(void)
-{
- return test_kasumi_cipher_auth(&kasumi_test_case_6);
-}
-
-static int
-test_zuc_encryption_test_case_1(void)
-{
- return test_zuc_encryption(&zuc_test_case_1);
-}
-
-static int
-test_zuc_encryption_test_case_2(void)
-{
- return test_zuc_encryption(&zuc_test_case_2);
-}
-
-static int
-test_zuc_encryption_test_case_3(void)
-{
- return test_zuc_encryption(&zuc_test_case_3);
-}
-
-static int
-test_zuc_encryption_test_case_4(void)
-{
- return test_zuc_encryption(&zuc_test_case_4);
-}
-
-static int
-test_zuc_encryption_test_case_5(void)
-{
- return test_zuc_encryption(&zuc_test_case_5);
-}
-
-static int
-test_zuc_hash_generate_test_case_1(void)
-{
- return test_zuc_authentication(&zuc_hash_test_case_1);
-}
-
-static int
-test_zuc_hash_generate_test_case_2(void)
-{
- return test_zuc_authentication(&zuc_hash_test_case_2);
-}
-
-static int
-test_zuc_hash_generate_test_case_3(void)
-{
- return test_zuc_authentication(&zuc_hash_test_case_3);
-}
-
-static int
-test_zuc_hash_generate_test_case_4(void)
-{
- return test_zuc_authentication(&zuc_hash_test_case_4);
-}
-
-static int
-test_zuc_hash_generate_test_case_5(void)
-{
- return test_zuc_authentication(&zuc_hash_test_case_5);
-}
-
-static int
-test_3DES_chain_qat_all(void)
-{
- struct crypto_testsuite_params *ts_params = &testsuite_params;
- int status;
-
- status = test_blockcipher_all_tests(ts_params->mbuf_pool,
- ts_params->op_mpool, ts_params->valid_devs[0],
- RTE_CRYPTODEV_QAT_SYM_PMD,
- BLKCIPHER_3DES_CHAIN_TYPE);
-
- TEST_ASSERT_EQUAL(status, 0, "Test failed");
-
- return TEST_SUCCESS;
-}
-
-static int
-test_3DES_cipheronly_qat_all(void)
-{
- struct crypto_testsuite_params *ts_params = &testsuite_params;
- int status;
-
- status = test_blockcipher_all_tests(ts_params->mbuf_pool,
- ts_params->op_mpool, ts_params->valid_devs[0],
- RTE_CRYPTODEV_QAT_SYM_PMD,
- BLKCIPHER_3DES_CIPHERONLY_TYPE);
-
- TEST_ASSERT_EQUAL(status, 0, "Test failed");
-
- return TEST_SUCCESS;
-}
-
-static int
-test_3DES_chain_openssl_all(void)
-{
- struct crypto_testsuite_params *ts_params = &testsuite_params;
- int status;
-
- status = test_blockcipher_all_tests(ts_params->mbuf_pool,
- ts_params->op_mpool, ts_params->valid_devs[0],
- RTE_CRYPTODEV_OPENSSL_PMD,
- BLKCIPHER_3DES_CHAIN_TYPE);
-
- TEST_ASSERT_EQUAL(status, 0, "Test failed");
-
- return TEST_SUCCESS;
-}
-
-static int
-test_3DES_cipheronly_openssl_all(void)
-{
- struct crypto_testsuite_params *ts_params = &testsuite_params;
- int status;
-
- status = test_blockcipher_all_tests(ts_params->mbuf_pool,
- ts_params->op_mpool, ts_params->valid_devs[0],
- RTE_CRYPTODEV_OPENSSL_PMD,
- BLKCIPHER_3DES_CIPHERONLY_TYPE);
-
- TEST_ASSERT_EQUAL(status, 0, "Test failed");
-
- return TEST_SUCCESS;
-}
-
-/* ***** AES-GCM Tests ***** */
-
-static int
-create_gcm_session(uint8_t dev_id, enum rte_crypto_cipher_operation op,
- const uint8_t *key, const uint8_t key_len,
- const uint8_t aad_len, const uint8_t auth_len,
- enum rte_crypto_auth_operation auth_op)
-{
- uint8_t cipher_key[key_len];
-
- struct crypto_unittest_params *ut_params = &unittest_params;
-
- memcpy(cipher_key, key, key_len);
-
- /* Setup Cipher Parameters */
- ut_params->cipher_xform.type = RTE_CRYPTO_SYM_XFORM_CIPHER;
- ut_params->cipher_xform.next = NULL;
-
- ut_params->cipher_xform.cipher.algo = RTE_CRYPTO_CIPHER_AES_GCM;
- ut_params->auth_xform.auth.op = auth_op;
- ut_params->cipher_xform.cipher.op = op;
- ut_params->cipher_xform.cipher.key.data = cipher_key;
- ut_params->cipher_xform.cipher.key.length = key_len;
-
- TEST_HEXDUMP(stdout, "key:", key, key_len);
-
- /* Setup Authentication Parameters */
- ut_params->auth_xform.type = RTE_CRYPTO_SYM_XFORM_AUTH;
- ut_params->auth_xform.next = NULL;
-
- ut_params->auth_xform.auth.algo = RTE_CRYPTO_AUTH_AES_GCM;
-
- ut_params->auth_xform.auth.digest_length = auth_len;
- ut_params->auth_xform.auth.add_auth_data_length = aad_len;
- ut_params->auth_xform.auth.key.length = 0;
- ut_params->auth_xform.auth.key.data = NULL;
-
- if (op == RTE_CRYPTO_CIPHER_OP_ENCRYPT) {
- ut_params->cipher_xform.next = &ut_params->auth_xform;
-
- /* Create Crypto session*/
- ut_params->sess = rte_cryptodev_sym_session_create(dev_id,
- &ut_params->cipher_xform);
- } else {/* Create Crypto session*/
- ut_params->auth_xform.next = &ut_params->cipher_xform;
- ut_params->sess = rte_cryptodev_sym_session_create(dev_id,
- &ut_params->auth_xform);
- }
-
- TEST_ASSERT_NOT_NULL(ut_params->sess, "Session creation failed");
-
- return 0;
-}
-
-static int
-create_gcm_operation(enum rte_crypto_cipher_operation op,
- const uint8_t *auth_tag, const unsigned auth_tag_len,
- const uint8_t *iv, const unsigned iv_len,
- const uint8_t *aad, const unsigned aad_len,
- const unsigned data_len, unsigned data_pad_len)
-{
- struct crypto_testsuite_params *ts_params = &testsuite_params;
- struct crypto_unittest_params *ut_params = &unittest_params;
-
- unsigned iv_pad_len = 0, aad_buffer_len;
-
- /* Generate Crypto op data structure */
- ut_params->op = rte_crypto_op_alloc(ts_params->op_mpool,
- RTE_CRYPTO_OP_TYPE_SYMMETRIC);
- TEST_ASSERT_NOT_NULL(ut_params->op,
- "Failed to allocate symmetric crypto operation struct");
-
- struct rte_crypto_sym_op *sym_op = ut_params->op->sym;
-
- sym_op->auth.digest.data = (uint8_t *)rte_pktmbuf_append(
- ut_params->ibuf, auth_tag_len);
- TEST_ASSERT_NOT_NULL(sym_op->auth.digest.data,
- "no room to append digest");
- sym_op->auth.digest.phys_addr = rte_pktmbuf_mtophys_offset(
- ut_params->ibuf, data_pad_len);
- sym_op->auth.digest.length = auth_tag_len;
-
- if (op == RTE_CRYPTO_CIPHER_OP_DECRYPT) {
- rte_memcpy(sym_op->auth.digest.data, auth_tag, auth_tag_len);
- TEST_HEXDUMP(stdout, "digest:",
- sym_op->auth.digest.data,
- sym_op->auth.digest.length);
- }
-
- /* iv */
- iv_pad_len = RTE_ALIGN_CEIL(iv_len, 16);
-
- sym_op->cipher.iv.data = (uint8_t *)rte_pktmbuf_prepend(
- ut_params->ibuf, iv_pad_len);
- TEST_ASSERT_NOT_NULL(sym_op->cipher.iv.data, "no room to prepend iv");
-
- memset(sym_op->cipher.iv.data, 0, iv_pad_len);
- sym_op->cipher.iv.phys_addr = rte_pktmbuf_mtophys(ut_params->ibuf);
- sym_op->cipher.iv.length = iv_len;
-
- rte_memcpy(sym_op->cipher.iv.data, iv, iv_len);
-
- /*
- * Always allocate the aad up to the block size.
- * The cryptodev API calls out -
- * - the array must be big enough to hold the AAD, plus any
- * space to round this up to the nearest multiple of the
- * block size (16 bytes).
- */
- aad_buffer_len = ALIGN_POW2_ROUNDUP(aad_len, 16);
-
- sym_op->auth.aad.data = (uint8_t *)rte_pktmbuf_prepend(
- ut_params->ibuf, aad_buffer_len);
- TEST_ASSERT_NOT_NULL(sym_op->auth.aad.data,
- "no room to prepend aad");
- sym_op->auth.aad.phys_addr = rte_pktmbuf_mtophys(
- ut_params->ibuf);
- sym_op->auth.aad.length = aad_len;
-
- memset(sym_op->auth.aad.data, 0, aad_buffer_len);
- rte_memcpy(sym_op->auth.aad.data, aad, aad_len);
-
- TEST_HEXDUMP(stdout, "iv:", sym_op->cipher.iv.data, iv_pad_len);
- TEST_HEXDUMP(stdout, "aad:",
- sym_op->auth.aad.data, aad_len);
-
- sym_op->cipher.data.length = data_len;
- sym_op->cipher.data.offset = aad_buffer_len + iv_pad_len;
-
- sym_op->auth.data.offset = aad_buffer_len + iv_pad_len;
- sym_op->auth.data.length = data_len;
-
- return 0;
-}
-
-static int
-test_mb_AES_GCM_authenticated_encryption(const struct gcm_test_data *tdata)
-{
- struct crypto_testsuite_params *ts_params = &testsuite_params;
- struct crypto_unittest_params *ut_params = &unittest_params;
-
- int retval;
-
- uint8_t *plaintext, *ciphertext, *auth_tag;
- uint16_t plaintext_pad_len;
-
- /* Create GCM session */
- retval = create_gcm_session(ts_params->valid_devs[0],
- RTE_CRYPTO_CIPHER_OP_ENCRYPT,
- tdata->key.data, tdata->key.len,
- tdata->aad.len, tdata->auth_tag.len,
- RTE_CRYPTO_AUTH_OP_GENERATE);
- if (retval < 0)
- return retval;
-
-
- ut_params->ibuf = rte_pktmbuf_alloc(ts_params->mbuf_pool);
-
- /* clear mbuf payload */
- memset(rte_pktmbuf_mtod(ut_params->ibuf, uint8_t *), 0,
- rte_pktmbuf_tailroom(ut_params->ibuf));
-
- /*
- * Append data which is padded to a multiple
- * of the algorithms block size
- */
- plaintext_pad_len = RTE_ALIGN_CEIL(tdata->plaintext.len, 16);
-
- plaintext = (uint8_t *)rte_pktmbuf_append(ut_params->ibuf,
- plaintext_pad_len);
- memcpy(plaintext, tdata->plaintext.data, tdata->plaintext.len);
-
- TEST_HEXDUMP(stdout, "plaintext:", plaintext, tdata->plaintext.len);
-
- /* Create GCM opertaion */
- retval = create_gcm_operation(RTE_CRYPTO_CIPHER_OP_ENCRYPT,
- tdata->auth_tag.data, tdata->auth_tag.len,
- tdata->iv.data, tdata->iv.len,
- tdata->aad.data, tdata->aad.len,
- tdata->plaintext.len, plaintext_pad_len);
- if (retval < 0)
- return retval;
-
- rte_crypto_op_attach_sym_session(ut_params->op, ut_params->sess);
-
- ut_params->op->sym->m_src = ut_params->ibuf;
-
- /* Process crypto operation */
- TEST_ASSERT_NOT_NULL(process_crypto_request(ts_params->valid_devs[0],
- ut_params->op), "failed to process sym crypto op");
-
- TEST_ASSERT_EQUAL(ut_params->op->status, RTE_CRYPTO_OP_STATUS_SUCCESS,
- "crypto op processing failed");
-
- if (ut_params->op->sym->m_dst) {
- ciphertext = rte_pktmbuf_mtod(ut_params->op->sym->m_dst,
- uint8_t *);
- auth_tag = rte_pktmbuf_mtod_offset(ut_params->op->sym->m_dst,
- uint8_t *, plaintext_pad_len);
- } else {
- ciphertext = plaintext;
- auth_tag = plaintext + plaintext_pad_len;
- }
-
- TEST_HEXDUMP(stdout, "ciphertext:", ciphertext, tdata->ciphertext.len);
- TEST_HEXDUMP(stdout, "auth tag:", auth_tag, tdata->auth_tag.len);
-
- /* Validate obuf */
- TEST_ASSERT_BUFFERS_ARE_EQUAL(
- ciphertext,
- tdata->ciphertext.data,
- tdata->ciphertext.len,
- "GCM Ciphertext data not as expected");
-
- TEST_ASSERT_BUFFERS_ARE_EQUAL(
- auth_tag,
- tdata->auth_tag.data,
- tdata->auth_tag.len,
- "GCM Generated auth tag not as expected");
-
- return 0;
-
-}
-
-static int
-test_mb_AES_GCM_authenticated_encryption_test_case_1(void)
-{
- return test_mb_AES_GCM_authenticated_encryption(&gcm_test_case_1);
-}
-
-static int
-test_mb_AES_GCM_authenticated_encryption_test_case_2(void)
-{
- return test_mb_AES_GCM_authenticated_encryption(&gcm_test_case_2);
-}
-
-static int
-test_mb_AES_GCM_authenticated_encryption_test_case_3(void)
-{
- return test_mb_AES_GCM_authenticated_encryption(&gcm_test_case_3);
-}
-
-static int
-test_mb_AES_GCM_authenticated_encryption_test_case_4(void)
-{
- return test_mb_AES_GCM_authenticated_encryption(&gcm_test_case_4);
-}
-
-static int
-test_mb_AES_GCM_authenticated_encryption_test_case_5(void)
-{
- return test_mb_AES_GCM_authenticated_encryption(&gcm_test_case_5);
-}
-
-static int
-test_mb_AES_GCM_authenticated_encryption_test_case_6(void)
-{
- return test_mb_AES_GCM_authenticated_encryption(&gcm_test_case_6);
-}
-
-static int
-test_mb_AES_GCM_authenticated_encryption_test_case_7(void)
-{
- return test_mb_AES_GCM_authenticated_encryption(&gcm_test_case_7);
-}
-
-static int
-test_mb_AES_GCM_authenticated_decryption(const struct gcm_test_data *tdata)
-{
- struct crypto_testsuite_params *ts_params = &testsuite_params;
- struct crypto_unittest_params *ut_params = &unittest_params;
-
- int retval;
-
- uint8_t *plaintext, *ciphertext;
- uint16_t ciphertext_pad_len;
-
- /* Create GCM session */
- retval = create_gcm_session(ts_params->valid_devs[0],
- RTE_CRYPTO_CIPHER_OP_DECRYPT,
- tdata->key.data, tdata->key.len,
- tdata->aad.len, tdata->auth_tag.len,
- RTE_CRYPTO_AUTH_OP_VERIFY);
- if (retval < 0)
- return retval;
-
-
- /* alloc mbuf and set payload */
- ut_params->ibuf = rte_pktmbuf_alloc(ts_params->mbuf_pool);
-
- memset(rte_pktmbuf_mtod(ut_params->ibuf, uint8_t *), 0,
- rte_pktmbuf_tailroom(ut_params->ibuf));
-
- ciphertext_pad_len = RTE_ALIGN_CEIL(tdata->ciphertext.len, 16);
-
- ciphertext = (uint8_t *)rte_pktmbuf_append(ut_params->ibuf,
- ciphertext_pad_len);
- memcpy(ciphertext, tdata->ciphertext.data, tdata->ciphertext.len);
-
- TEST_HEXDUMP(stdout, "ciphertext:", ciphertext, tdata->ciphertext.len);
-
- /* Create GCM opertaion */
- retval = create_gcm_operation(RTE_CRYPTO_CIPHER_OP_DECRYPT,
- tdata->auth_tag.data, tdata->auth_tag.len,
- tdata->iv.data, tdata->iv.len,
- tdata->aad.data, tdata->aad.len,
- tdata->ciphertext.len, ciphertext_pad_len);
- if (retval < 0)
- return retval;
-
-
- rte_crypto_op_attach_sym_session(ut_params->op, ut_params->sess);
-
- ut_params->op->sym->m_src = ut_params->ibuf;
-
- /* Process crypto operation */
- TEST_ASSERT_NOT_NULL(process_crypto_request(ts_params->valid_devs[0],
- ut_params->op), "failed to process sym crypto op");
-
- TEST_ASSERT_EQUAL(ut_params->op->status, RTE_CRYPTO_OP_STATUS_SUCCESS,
- "crypto op processing failed");
-
- if (ut_params->op->sym->m_dst)
- plaintext = rte_pktmbuf_mtod(ut_params->op->sym->m_dst,
- uint8_t *);
- else
- plaintext = ciphertext;
-
- TEST_HEXDUMP(stdout, "plaintext:", plaintext, tdata->ciphertext.len);
-
- /* Validate obuf */
- TEST_ASSERT_BUFFERS_ARE_EQUAL(
- plaintext,
- tdata->plaintext.data,
- tdata->plaintext.len,
- "GCM plaintext data not as expected");
-
- TEST_ASSERT_EQUAL(ut_params->op->status,
- RTE_CRYPTO_OP_STATUS_SUCCESS,
- "GCM authentication failed");
- return 0;
-}
-
-static int
-test_mb_AES_GCM_authenticated_decryption_test_case_1(void)
-{
- return test_mb_AES_GCM_authenticated_decryption(&gcm_test_case_1);
-}
-
-static int
-test_mb_AES_GCM_authenticated_decryption_test_case_2(void)
-{
- return test_mb_AES_GCM_authenticated_decryption(&gcm_test_case_2);
-}
-
-static int
-test_mb_AES_GCM_authenticated_decryption_test_case_3(void)
-{
- return test_mb_AES_GCM_authenticated_decryption(&gcm_test_case_3);
-}
-
-static int
-test_mb_AES_GCM_authenticated_decryption_test_case_4(void)
-{
- return test_mb_AES_GCM_authenticated_decryption(&gcm_test_case_4);
-}
-
-static int
-test_mb_AES_GCM_authenticated_decryption_test_case_5(void)
-{
- return test_mb_AES_GCM_authenticated_decryption(&gcm_test_case_5);
-}
-
-static int
-test_mb_AES_GCM_authenticated_decryption_test_case_6(void)
-{
- return test_mb_AES_GCM_authenticated_decryption(&gcm_test_case_6);
-}
-
-static int
-test_mb_AES_GCM_authenticated_decryption_test_case_7(void)
-{
- return test_mb_AES_GCM_authenticated_decryption(&gcm_test_case_7);
-}
-
-static int
-test_stats(void)
-{
- struct crypto_testsuite_params *ts_params = &testsuite_params;
- struct rte_cryptodev_stats stats;
- struct rte_cryptodev *dev;
- cryptodev_stats_get_t temp_pfn;
-
- rte_cryptodev_stats_reset(ts_params->valid_devs[0]);
- TEST_ASSERT((rte_cryptodev_stats_get(ts_params->valid_devs[0] + 600,
- &stats) == -ENODEV),
- "rte_cryptodev_stats_get invalid dev failed");
- TEST_ASSERT((rte_cryptodev_stats_get(ts_params->valid_devs[0], 0) != 0),
- "rte_cryptodev_stats_get invalid Param failed");
- dev = &rte_cryptodevs[ts_params->valid_devs[0]];
- temp_pfn = dev->dev_ops->stats_get;
- dev->dev_ops->stats_get = (cryptodev_stats_get_t)0;
- TEST_ASSERT((rte_cryptodev_stats_get(ts_params->valid_devs[0], &stats)
- == -ENOTSUP),
- "rte_cryptodev_stats_get invalid Param failed");
- dev->dev_ops->stats_get = temp_pfn;
-
- /* Test expected values */
- ut_setup();
- test_AES_CBC_HMAC_SHA1_encrypt_digest();
- ut_teardown();
- TEST_ASSERT_SUCCESS(rte_cryptodev_stats_get(ts_params->valid_devs[0],
- &stats),
- "rte_cryptodev_stats_get failed");
- TEST_ASSERT((stats.enqueued_count == 1),
- "rte_cryptodev_stats_get returned unexpected enqueued stat");
- TEST_ASSERT((stats.dequeued_count == 1),
- "rte_cryptodev_stats_get returned unexpected enqueued stat");
- TEST_ASSERT((stats.enqueue_err_count == 0),
- "rte_cryptodev_stats_get returned unexpected enqueued stat");
- TEST_ASSERT((stats.dequeue_err_count == 0),
- "rte_cryptodev_stats_get returned unexpected enqueued stat");
-
- /* invalid device but should ignore and not reset device stats*/
- rte_cryptodev_stats_reset(ts_params->valid_devs[0] + 300);
- TEST_ASSERT_SUCCESS(rte_cryptodev_stats_get(ts_params->valid_devs[0],
- &stats),
- "rte_cryptodev_stats_get failed");
- TEST_ASSERT((stats.enqueued_count == 1),
- "rte_cryptodev_stats_get returned unexpected enqueued stat");
-
- /* check that a valid reset clears stats */
- rte_cryptodev_stats_reset(ts_params->valid_devs[0]);
- TEST_ASSERT_SUCCESS(rte_cryptodev_stats_get(ts_params->valid_devs[0],
- &stats),
- "rte_cryptodev_stats_get failed");
- TEST_ASSERT((stats.enqueued_count == 0),
- "rte_cryptodev_stats_get returned unexpected enqueued stat");
- TEST_ASSERT((stats.dequeued_count == 0),
- "rte_cryptodev_stats_get returned unexpected enqueued stat");
-
- return TEST_SUCCESS;
-}
-
-static int MD5_HMAC_create_session(struct crypto_testsuite_params *ts_params,
- struct crypto_unittest_params *ut_params,
- enum rte_crypto_auth_operation op,
- const struct HMAC_MD5_vector *test_case)
-{
- uint8_t key[64];
-
- memcpy(key, test_case->key.data, test_case->key.len);
-
- ut_params->auth_xform.type = RTE_CRYPTO_SYM_XFORM_AUTH;
- ut_params->auth_xform.next = NULL;
- ut_params->auth_xform.auth.op = op;
-
- ut_params->auth_xform.auth.algo = RTE_CRYPTO_AUTH_MD5_HMAC;
-
- ut_params->auth_xform.auth.digest_length = MD5_DIGEST_LEN;
- ut_params->auth_xform.auth.add_auth_data_length = 0;
- ut_params->auth_xform.auth.key.length = test_case->key.len;
- ut_params->auth_xform.auth.key.data = key;
-
- ut_params->sess = rte_cryptodev_sym_session_create(
- ts_params->valid_devs[0], &ut_params->auth_xform);
-
- if (ut_params->sess == NULL)
- return TEST_FAILED;
-
- ut_params->ibuf = rte_pktmbuf_alloc(ts_params->mbuf_pool);
-
- memset(rte_pktmbuf_mtod(ut_params->ibuf, uint8_t *), 0,
- rte_pktmbuf_tailroom(ut_params->ibuf));
-
- return 0;
-}
-
-static int MD5_HMAC_create_op(struct crypto_unittest_params *ut_params,
- const struct HMAC_MD5_vector *test_case,
- uint8_t **plaintext)
-{
- uint16_t plaintext_pad_len;
-
- struct rte_crypto_sym_op *sym_op = ut_params->op->sym;
-
- plaintext_pad_len = RTE_ALIGN_CEIL(test_case->plaintext.len,
- 16);
-
- *plaintext = (uint8_t *)rte_pktmbuf_append(ut_params->ibuf,
- plaintext_pad_len);
- memcpy(*plaintext, test_case->plaintext.data,
- test_case->plaintext.len);
-
- sym_op->auth.digest.data = (uint8_t *)rte_pktmbuf_append(
- ut_params->ibuf, MD5_DIGEST_LEN);
- TEST_ASSERT_NOT_NULL(sym_op->auth.digest.data,
- "no room to append digest");
- sym_op->auth.digest.phys_addr = rte_pktmbuf_mtophys_offset(
- ut_params->ibuf, plaintext_pad_len);
- sym_op->auth.digest.length = MD5_DIGEST_LEN;
-
- if (ut_params->auth_xform.auth.op == RTE_CRYPTO_AUTH_OP_VERIFY) {
- rte_memcpy(sym_op->auth.digest.data, test_case->auth_tag.data,
- test_case->auth_tag.len);
- }
-
- sym_op->auth.data.offset = 0;
- sym_op->auth.data.length = test_case->plaintext.len;
-
- rte_crypto_op_attach_sym_session(ut_params->op, ut_params->sess);
- ut_params->op->sym->m_src = ut_params->ibuf;
-
- return 0;
-}
-
-static int
-test_MD5_HMAC_generate(const struct HMAC_MD5_vector *test_case)
-{
- uint16_t plaintext_pad_len;
- uint8_t *plaintext, *auth_tag;
-
- struct crypto_testsuite_params *ts_params = &testsuite_params;
- struct crypto_unittest_params *ut_params = &unittest_params;
-
- if (MD5_HMAC_create_session(ts_params, ut_params,
- RTE_CRYPTO_AUTH_OP_GENERATE, test_case))
- return TEST_FAILED;
-
- /* Generate Crypto op data structure */
- ut_params->op = rte_crypto_op_alloc(ts_params->op_mpool,
- RTE_CRYPTO_OP_TYPE_SYMMETRIC);
- TEST_ASSERT_NOT_NULL(ut_params->op,
- "Failed to allocate symmetric crypto operation struct");
-
- plaintext_pad_len = RTE_ALIGN_CEIL(test_case->plaintext.len,
- 16);
-
- if (MD5_HMAC_create_op(ut_params, test_case, &plaintext))
- return TEST_FAILED;
-
- TEST_ASSERT_NOT_NULL(process_crypto_request(ts_params->valid_devs[0],
- ut_params->op), "failed to process sym crypto op");
-
- TEST_ASSERT_EQUAL(ut_params->op->status, RTE_CRYPTO_OP_STATUS_SUCCESS,
- "crypto op processing failed");
-
- if (ut_params->op->sym->m_dst) {
- auth_tag = rte_pktmbuf_mtod_offset(ut_params->op->sym->m_dst,
- uint8_t *, plaintext_pad_len);
- } else {
- auth_tag = plaintext + plaintext_pad_len;
- }
-
- TEST_ASSERT_BUFFERS_ARE_EQUAL(
- auth_tag,
- test_case->auth_tag.data,
- test_case->auth_tag.len,
- "HMAC_MD5 generated tag not as expected");
-
- return TEST_SUCCESS;
-}
-
-static int
-test_MD5_HMAC_verify(const struct HMAC_MD5_vector *test_case)
-{
- uint8_t *plaintext;
-
- struct crypto_testsuite_params *ts_params = &testsuite_params;
- struct crypto_unittest_params *ut_params = &unittest_params;
-
- if (MD5_HMAC_create_session(ts_params, ut_params,
- RTE_CRYPTO_AUTH_OP_VERIFY, test_case)) {
- return TEST_FAILED;
- }
-
- /* Generate Crypto op data structure */
- ut_params->op = rte_crypto_op_alloc(ts_params->op_mpool,
- RTE_CRYPTO_OP_TYPE_SYMMETRIC);
- TEST_ASSERT_NOT_NULL(ut_params->op,
- "Failed to allocate symmetric crypto operation struct");
-
- if (MD5_HMAC_create_op(ut_params, test_case, &plaintext))
- return TEST_FAILED;
-
- TEST_ASSERT_NOT_NULL(process_crypto_request(ts_params->valid_devs[0],
- ut_params->op), "failed to process sym crypto op");
-
- TEST_ASSERT_EQUAL(ut_params->op->status, RTE_CRYPTO_OP_STATUS_SUCCESS,
- "HMAC_MD5 crypto op processing failed");
-
- return TEST_SUCCESS;
-}
-
-static int
-test_MD5_HMAC_generate_case_1(void)
-{
- return test_MD5_HMAC_generate(&HMAC_MD5_test_case_1);
-}
-
-static int
-test_MD5_HMAC_verify_case_1(void)
-{
- return test_MD5_HMAC_verify(&HMAC_MD5_test_case_1);
-}
-
-static int
-test_MD5_HMAC_generate_case_2(void)
-{
- return test_MD5_HMAC_generate(&HMAC_MD5_test_case_2);
-}
-
-static int
-test_MD5_HMAC_verify_case_2(void)
-{
- return test_MD5_HMAC_verify(&HMAC_MD5_test_case_2);
-}
-
-static int
-test_multi_session(void)
-{
- struct crypto_testsuite_params *ts_params = &testsuite_params;
- struct crypto_unittest_params *ut_params = &unittest_params;
-
- struct rte_cryptodev_info dev_info;
- struct rte_cryptodev_sym_session **sessions;
-
- uint16_t i;
-
- test_AES_CBC_HMAC_SHA512_decrypt_create_session_params(ut_params,
- aes_cbc_key, hmac_sha512_key);
-
-
- rte_cryptodev_info_get(ts_params->valid_devs[0], &dev_info);
-
- sessions = rte_malloc(NULL,
- (sizeof(struct rte_cryptodev_sym_session *) *
- dev_info.sym.max_nb_sessions) + 1, 0);
-
- /* Create multiple crypto sessions*/
- for (i = 0; i < dev_info.sym.max_nb_sessions; i++) {
- sessions[i] = rte_cryptodev_sym_session_create(
- ts_params->valid_devs[0],
- &ut_params->auth_xform);
- TEST_ASSERT_NOT_NULL(sessions[i],
- "Session creation failed at session number %u",
- i);
-
- /* Attempt to send a request on each session */
- TEST_ASSERT_SUCCESS( test_AES_CBC_HMAC_SHA512_decrypt_perform(
- sessions[i],
- ut_params,
- ts_params,
- catch_22_quote_2_512_bytes_AES_CBC_ciphertext,
- catch_22_quote_2_512_bytes_AES_CBC_HMAC_SHA512_digest,
- aes_cbc_iv),
- "Failed to perform decrypt on request number %u.", i);
- /* free crypto operation structure */
- if (ut_params->op)
- rte_crypto_op_free(ut_params->op);
-
- /*
- * free mbuf - both obuf and ibuf are usually the same,
- * so check if they point at the same address is necessary,
- * to avoid freeing the mbuf twice.
- */
- if (ut_params->obuf) {
- rte_pktmbuf_free(ut_params->obuf);
- if (ut_params->ibuf == ut_params->obuf)
- ut_params->ibuf = 0;
- ut_params->obuf = 0;
- }
- if (ut_params->ibuf) {
- rte_pktmbuf_free(ut_params->ibuf);
- ut_params->ibuf = 0;
- }
- }
-
- /* Next session create should fail */
- sessions[i] = rte_cryptodev_sym_session_create(ts_params->valid_devs[0],
- &ut_params->auth_xform);
- TEST_ASSERT_NULL(sessions[i],
- "Session creation succeeded unexpectedly!");
-
- for (i = 0; i < dev_info.sym.max_nb_sessions; i++)
- rte_cryptodev_sym_session_free(ts_params->valid_devs[0],
- sessions[i]);
-
- rte_free(sessions);
-
- return TEST_SUCCESS;
-}
-
-struct multi_session_params {
- struct crypto_unittest_params ut_params;
- uint8_t *cipher_key;
- uint8_t *hmac_key;
- const uint8_t *cipher;
- const uint8_t *digest;
- uint8_t *iv;
-};
-
-#define MB_SESSION_NUMBER 3
-
-static int
-test_multi_session_random_usage(void)
-{
- struct crypto_testsuite_params *ts_params = &testsuite_params;
- struct rte_cryptodev_info dev_info;
- struct rte_cryptodev_sym_session **sessions;
- uint32_t i, j;
- struct multi_session_params ut_paramz[] = {
-
- {
- .cipher_key = ms_aes_cbc_key0,
- .hmac_key = ms_hmac_key0,
- .cipher = ms_aes_cbc_cipher0,
- .digest = ms_hmac_digest0,
- .iv = ms_aes_cbc_iv0
- },
- {
- .cipher_key = ms_aes_cbc_key1,
- .hmac_key = ms_hmac_key1,
- .cipher = ms_aes_cbc_cipher1,
- .digest = ms_hmac_digest1,
- .iv = ms_aes_cbc_iv1
- },
- {
- .cipher_key = ms_aes_cbc_key2,
- .hmac_key = ms_hmac_key2,
- .cipher = ms_aes_cbc_cipher2,
- .digest = ms_hmac_digest2,
- .iv = ms_aes_cbc_iv2
- },
-
- };
-
- rte_cryptodev_info_get(ts_params->valid_devs[0], &dev_info);
-
- sessions = rte_malloc(NULL,
- (sizeof(struct rte_cryptodev_sym_session *)
- * dev_info.sym.max_nb_sessions) + 1, 0);
-
- for (i = 0; i < MB_SESSION_NUMBER; i++) {
- rte_memcpy(&ut_paramz[i].ut_params, &testsuite_params,
- sizeof(struct crypto_unittest_params));
-
- test_AES_CBC_HMAC_SHA512_decrypt_create_session_params(
- &ut_paramz[i].ut_params,
- ut_paramz[i].cipher_key, ut_paramz[i].hmac_key);
-
- /* Create multiple crypto sessions*/
- sessions[i] = rte_cryptodev_sym_session_create(
- ts_params->valid_devs[0],
- &ut_paramz[i].ut_params.auth_xform);
-
- TEST_ASSERT_NOT_NULL(sessions[i],
- "Session creation failed at session number %u",
- i);
-
- }
-
- srand(time(NULL));
- for (i = 0; i < 40000; i++) {
-
- j = rand() % MB_SESSION_NUMBER;
-
- TEST_ASSERT_SUCCESS(
- test_AES_CBC_HMAC_SHA512_decrypt_perform(
- sessions[j],
- &ut_paramz[j].ut_params,
- ts_params, ut_paramz[j].cipher,
- ut_paramz[j].digest,
- ut_paramz[j].iv),
- "Failed to perform decrypt on request number %u.", i);
-
- if (ut_paramz[j].ut_params.op)
- rte_crypto_op_free(ut_paramz[j].ut_params.op);
-
- /*
- * free mbuf - both obuf and ibuf are usually the same,
- * so check if they point at the same address is necessary,
- * to avoid freeing the mbuf twice.
- */
- if (ut_paramz[j].ut_params.obuf) {
- rte_pktmbuf_free(ut_paramz[j].ut_params.obuf);
- if (ut_paramz[j].ut_params.ibuf
- == ut_paramz[j].ut_params.obuf)
- ut_paramz[j].ut_params.ibuf = 0;
- ut_paramz[j].ut_params.obuf = 0;
- }
- if (ut_paramz[j].ut_params.ibuf) {
- rte_pktmbuf_free(ut_paramz[j].ut_params.ibuf);
- ut_paramz[j].ut_params.ibuf = 0;
- }
- }
-
- for (i = 0; i < MB_SESSION_NUMBER; i++)
- rte_cryptodev_sym_session_free(ts_params->valid_devs[0],
- sessions[i]);
-
- rte_free(sessions);
-
- return TEST_SUCCESS;
-}
-
-static int
-test_null_cipher_only_operation(void)
-{
- struct crypto_testsuite_params *ts_params = &testsuite_params;
- struct crypto_unittest_params *ut_params = &unittest_params;
-
- /* Generate test mbuf data and space for digest */
- ut_params->ibuf = setup_test_string(ts_params->mbuf_pool,
- catch_22_quote, QUOTE_512_BYTES, 0);
-
- /* Setup Cipher Parameters */
- ut_params->cipher_xform.type = RTE_CRYPTO_SYM_XFORM_CIPHER;
- ut_params->cipher_xform.next = NULL;
-
- ut_params->cipher_xform.cipher.algo = RTE_CRYPTO_CIPHER_NULL;
- ut_params->cipher_xform.cipher.op = RTE_CRYPTO_CIPHER_OP_ENCRYPT;
-
- /* Create Crypto session*/
- ut_params->sess = rte_cryptodev_sym_session_create(
- ts_params->valid_devs[0], &ut_params->cipher_xform);
- TEST_ASSERT_NOT_NULL(ut_params->sess, "Session creation failed");
-
- /* Generate Crypto op data structure */
- ut_params->op = rte_crypto_op_alloc(ts_params->op_mpool,
- RTE_CRYPTO_OP_TYPE_SYMMETRIC);
- TEST_ASSERT_NOT_NULL(ut_params->op,
- "Failed to allocate symmetric crypto operation struct");
-
- /* Set crypto operation data parameters */
- rte_crypto_op_attach_sym_session(ut_params->op, ut_params->sess);
-
- struct rte_crypto_sym_op *sym_op = ut_params->op->sym;
-
- /* set crypto operation source mbuf */
- sym_op->m_src = ut_params->ibuf;
-
- sym_op->cipher.data.offset = 0;
- sym_op->cipher.data.length = QUOTE_512_BYTES;
-
- /* Process crypto operation */
- ut_params->op = process_crypto_request(ts_params->valid_devs[0],
- ut_params->op);
- TEST_ASSERT_NOT_NULL(ut_params->op, "no crypto operation returned");
-
- TEST_ASSERT_EQUAL(ut_params->op->status, RTE_CRYPTO_OP_STATUS_SUCCESS,
- "crypto operation processing failed");
-
- /* Validate obuf */
- TEST_ASSERT_BUFFERS_ARE_EQUAL(
- rte_pktmbuf_mtod(ut_params->op->sym->m_src, uint8_t *),
- catch_22_quote,
- QUOTE_512_BYTES,
- "Ciphertext data not as expected");
-
- return TEST_SUCCESS;
-}
-
-static int
-test_null_auth_only_operation(void)
-{
- struct crypto_testsuite_params *ts_params = &testsuite_params;
- struct crypto_unittest_params *ut_params = &unittest_params;
-
- /* Generate test mbuf data and space for digest */
- ut_params->ibuf = setup_test_string(ts_params->mbuf_pool,
- catch_22_quote, QUOTE_512_BYTES, 0);
-
- /* Setup HMAC Parameters */
- ut_params->auth_xform.type = RTE_CRYPTO_SYM_XFORM_AUTH;
- ut_params->auth_xform.next = NULL;
-
- ut_params->auth_xform.auth.algo = RTE_CRYPTO_AUTH_NULL;
- ut_params->auth_xform.auth.op = RTE_CRYPTO_AUTH_OP_GENERATE;
-
- /* Create Crypto session*/
- ut_params->sess = rte_cryptodev_sym_session_create(
- ts_params->valid_devs[0], &ut_params->auth_xform);
- TEST_ASSERT_NOT_NULL(ut_params->sess, "Session creation failed");
-
- /* Generate Crypto op data structure */
- ut_params->op = rte_crypto_op_alloc(ts_params->op_mpool,
- RTE_CRYPTO_OP_TYPE_SYMMETRIC);
- TEST_ASSERT_NOT_NULL(ut_params->op,
- "Failed to allocate symmetric crypto operation struct");
-
- /* Set crypto operation data parameters */
- rte_crypto_op_attach_sym_session(ut_params->op, ut_params->sess);
-
- struct rte_crypto_sym_op *sym_op = ut_params->op->sym;
-
- sym_op->m_src = ut_params->ibuf;
-
- sym_op->auth.data.offset = 0;
- sym_op->auth.data.length = QUOTE_512_BYTES;
-
- /* Process crypto operation */
- ut_params->op = process_crypto_request(ts_params->valid_devs[0],
- ut_params->op);
- TEST_ASSERT_NOT_NULL(ut_params->op, "no crypto operation returned");
-
- TEST_ASSERT_EQUAL(ut_params->op->status, RTE_CRYPTO_OP_STATUS_SUCCESS,
- "crypto operation processing failed");
-
- return TEST_SUCCESS;
-}
-
-static int
-test_null_cipher_auth_operation(void)
-{
- struct crypto_testsuite_params *ts_params = &testsuite_params;
- struct crypto_unittest_params *ut_params = &unittest_params;
-
- /* Generate test mbuf data and space for digest */
- ut_params->ibuf = setup_test_string(ts_params->mbuf_pool,
- catch_22_quote, QUOTE_512_BYTES, 0);
-
- /* Setup Cipher Parameters */
- ut_params->cipher_xform.type = RTE_CRYPTO_SYM_XFORM_CIPHER;
- ut_params->cipher_xform.next = &ut_params->auth_xform;
-
- ut_params->cipher_xform.cipher.algo = RTE_CRYPTO_CIPHER_NULL;
- ut_params->cipher_xform.cipher.op = RTE_CRYPTO_CIPHER_OP_ENCRYPT;
-
- /* Setup HMAC Parameters */
- ut_params->auth_xform.type = RTE_CRYPTO_SYM_XFORM_AUTH;
- ut_params->auth_xform.next = NULL;
-
- ut_params->auth_xform.auth.algo = RTE_CRYPTO_AUTH_NULL;
- ut_params->auth_xform.auth.op = RTE_CRYPTO_AUTH_OP_GENERATE;
-
- /* Create Crypto session*/
- ut_params->sess = rte_cryptodev_sym_session_create(
- ts_params->valid_devs[0], &ut_params->cipher_xform);
- TEST_ASSERT_NOT_NULL(ut_params->sess, "Session creation failed");
-
- /* Generate Crypto op data structure */
- ut_params->op = rte_crypto_op_alloc(ts_params->op_mpool,
- RTE_CRYPTO_OP_TYPE_SYMMETRIC);
- TEST_ASSERT_NOT_NULL(ut_params->op,
- "Failed to allocate symmetric crypto operation struct");
-
- /* Set crypto operation data parameters */
- rte_crypto_op_attach_sym_session(ut_params->op, ut_params->sess);
-
- struct rte_crypto_sym_op *sym_op = ut_params->op->sym;
-
- sym_op->m_src = ut_params->ibuf;
-
- sym_op->cipher.data.offset = 0;
- sym_op->cipher.data.length = QUOTE_512_BYTES;
-
- sym_op->auth.data.offset = 0;
- sym_op->auth.data.length = QUOTE_512_BYTES;
-
- /* Process crypto operation */
- ut_params->op = process_crypto_request(ts_params->valid_devs[0],
- ut_params->op);
- TEST_ASSERT_NOT_NULL(ut_params->op, "no crypto operation returned");
-
- TEST_ASSERT_EQUAL(ut_params->op->status, RTE_CRYPTO_OP_STATUS_SUCCESS,
- "crypto operation processing failed");
-
- /* Validate obuf */
- TEST_ASSERT_BUFFERS_ARE_EQUAL(
- rte_pktmbuf_mtod(ut_params->op->sym->m_src, uint8_t *),
- catch_22_quote,
- QUOTE_512_BYTES,
- "Ciphertext data not as expected");
-
- return TEST_SUCCESS;
-}
-
-static int
-test_null_auth_cipher_operation(void)
-{
- struct crypto_testsuite_params *ts_params = &testsuite_params;
- struct crypto_unittest_params *ut_params = &unittest_params;
-
- /* Generate test mbuf data and space for digest */
- ut_params->ibuf = setup_test_string(ts_params->mbuf_pool,
- catch_22_quote, QUOTE_512_BYTES, 0);
-
- /* Setup Cipher Parameters */
- ut_params->cipher_xform.type = RTE_CRYPTO_SYM_XFORM_CIPHER;
- ut_params->cipher_xform.next = NULL;
-
- ut_params->cipher_xform.cipher.algo = RTE_CRYPTO_CIPHER_NULL;
- ut_params->cipher_xform.cipher.op = RTE_CRYPTO_CIPHER_OP_ENCRYPT;
-
- /* Setup HMAC Parameters */
- ut_params->auth_xform.type = RTE_CRYPTO_SYM_XFORM_AUTH;
- ut_params->auth_xform.next = &ut_params->cipher_xform;
-
- ut_params->auth_xform.auth.algo = RTE_CRYPTO_AUTH_NULL;
- ut_params->auth_xform.auth.op = RTE_CRYPTO_AUTH_OP_GENERATE;
-
- /* Create Crypto session*/
- ut_params->sess = rte_cryptodev_sym_session_create(
- ts_params->valid_devs[0], &ut_params->cipher_xform);
- TEST_ASSERT_NOT_NULL(ut_params->sess, "Session creation failed");
-
- /* Generate Crypto op data structure */
- ut_params->op = rte_crypto_op_alloc(ts_params->op_mpool,
- RTE_CRYPTO_OP_TYPE_SYMMETRIC);
- TEST_ASSERT_NOT_NULL(ut_params->op,
- "Failed to allocate symmetric crypto operation struct");
-
- /* Set crypto operation data parameters */
- rte_crypto_op_attach_sym_session(ut_params->op, ut_params->sess);
-
- struct rte_crypto_sym_op *sym_op = ut_params->op->sym;
-
- sym_op->m_src = ut_params->ibuf;
-
- sym_op->cipher.data.offset = 0;
- sym_op->cipher.data.length = QUOTE_512_BYTES;
-
- sym_op->auth.data.offset = 0;
- sym_op->auth.data.length = QUOTE_512_BYTES;
-
- /* Process crypto operation */
- ut_params->op = process_crypto_request(ts_params->valid_devs[0],
- ut_params->op);
- TEST_ASSERT_NOT_NULL(ut_params->op, "no crypto operation returned");
-
- TEST_ASSERT_EQUAL(ut_params->op->status, RTE_CRYPTO_OP_STATUS_SUCCESS,
- "crypto operation processing failed");
-
- /* Validate obuf */
- TEST_ASSERT_BUFFERS_ARE_EQUAL(
- rte_pktmbuf_mtod(ut_params->op->sym->m_src, uint8_t *),
- catch_22_quote,
- QUOTE_512_BYTES,
- "Ciphertext data not as expected");
-
- return TEST_SUCCESS;
-}
-
-
-static int
-test_null_invalid_operation(void)
-{
- struct crypto_testsuite_params *ts_params = &testsuite_params;
- struct crypto_unittest_params *ut_params = &unittest_params;
-
- /* Setup Cipher Parameters */
- ut_params->cipher_xform.type = RTE_CRYPTO_SYM_XFORM_CIPHER;
- ut_params->cipher_xform.next = NULL;
-
- ut_params->cipher_xform.cipher.algo = RTE_CRYPTO_CIPHER_AES_CBC;
- ut_params->cipher_xform.cipher.op = RTE_CRYPTO_CIPHER_OP_ENCRYPT;
-
- /* Create Crypto session*/
- ut_params->sess = rte_cryptodev_sym_session_create(
- ts_params->valid_devs[0], &ut_params->cipher_xform);
- TEST_ASSERT_NULL(ut_params->sess,
- "Session creation succeeded unexpectedly");
-
-
- /* Setup HMAC Parameters */
- ut_params->auth_xform.type = RTE_CRYPTO_SYM_XFORM_AUTH;
- ut_params->auth_xform.next = NULL;
-
- ut_params->auth_xform.auth.algo = RTE_CRYPTO_AUTH_SHA1_HMAC;
- ut_params->auth_xform.auth.op = RTE_CRYPTO_AUTH_OP_GENERATE;
-
- /* Create Crypto session*/
- ut_params->sess = rte_cryptodev_sym_session_create(
- ts_params->valid_devs[0], &ut_params->auth_xform);
- TEST_ASSERT_NULL(ut_params->sess,
- "Session creation succeeded unexpectedly");
-
- return TEST_SUCCESS;
-}
-
-
-#define NULL_BURST_LENGTH (32)
-
-static int
-test_null_burst_operation(void)
-{
- struct crypto_testsuite_params *ts_params = &testsuite_params;
- struct crypto_unittest_params *ut_params = &unittest_params;
-
- unsigned i, burst_len = NULL_BURST_LENGTH;
-
- struct rte_crypto_op *burst[NULL_BURST_LENGTH] = { NULL };
- struct rte_crypto_op *burst_dequeued[NULL_BURST_LENGTH] = { NULL };
-
- /* Setup Cipher Parameters */
- ut_params->cipher_xform.type = RTE_CRYPTO_SYM_XFORM_CIPHER;
- ut_params->cipher_xform.next = &ut_params->auth_xform;
-
- ut_params->cipher_xform.cipher.algo = RTE_CRYPTO_CIPHER_NULL;
- ut_params->cipher_xform.cipher.op = RTE_CRYPTO_CIPHER_OP_ENCRYPT;
-
- /* Setup HMAC Parameters */
- ut_params->auth_xform.type = RTE_CRYPTO_SYM_XFORM_AUTH;
- ut_params->auth_xform.next = NULL;
-
- ut_params->auth_xform.auth.algo = RTE_CRYPTO_AUTH_NULL;
- ut_params->auth_xform.auth.op = RTE_CRYPTO_AUTH_OP_GENERATE;
-
- /* Create Crypto session*/
- ut_params->sess = rte_cryptodev_sym_session_create(
- ts_params->valid_devs[0], &ut_params->cipher_xform);
- TEST_ASSERT_NOT_NULL(ut_params->sess, "Session creation failed");
-
- TEST_ASSERT_EQUAL(rte_crypto_op_bulk_alloc(ts_params->op_mpool,
- RTE_CRYPTO_OP_TYPE_SYMMETRIC, burst, burst_len),
- burst_len, "failed to generate burst of crypto ops");
-
- /* Generate an operation for each mbuf in burst */
- for (i = 0; i < burst_len; i++) {
- struct rte_mbuf *m = rte_pktmbuf_alloc(ts_params->mbuf_pool);
-
- TEST_ASSERT_NOT_NULL(m, "Failed to allocate mbuf");
-
- unsigned *data = (unsigned *)rte_pktmbuf_append(m,
- sizeof(unsigned));
- *data = i;
-
- rte_crypto_op_attach_sym_session(burst[i], ut_params->sess);
-
- burst[i]->sym->m_src = m;
- }
-
- /* Process crypto operation */
- TEST_ASSERT_EQUAL(rte_cryptodev_enqueue_burst(ts_params->valid_devs[0],
- 0, burst, burst_len),
- burst_len,
- "Error enqueuing burst");
-
- TEST_ASSERT_EQUAL(rte_cryptodev_dequeue_burst(ts_params->valid_devs[0],
- 0, burst_dequeued, burst_len),
- burst_len,
- "Error dequeuing burst");
-
-
- for (i = 0; i < burst_len; i++) {
- TEST_ASSERT_EQUAL(
- *rte_pktmbuf_mtod(burst[i]->sym->m_src, uint32_t *),
- *rte_pktmbuf_mtod(burst_dequeued[i]->sym->m_src,
- uint32_t *),
- "data not as expected");
-
- rte_pktmbuf_free(burst[i]->sym->m_src);
- rte_crypto_op_free(burst[i]);
- }
-
- return TEST_SUCCESS;
-}
-
-static void
-generate_gmac_large_plaintext(uint8_t *data)
-{
- uint16_t i;
-
- for (i = 32; i < GMAC_LARGE_PLAINTEXT_LENGTH; i += 32)
- memcpy(&data[i], &data[0], 32);
-}
-
-static int
-create_gmac_operation(enum rte_crypto_auth_operation op,
- const struct gmac_test_data *tdata)
-{
- struct crypto_testsuite_params *ts_params = &testsuite_params;
- struct crypto_unittest_params *ut_params = &unittest_params;
- struct rte_crypto_sym_op *sym_op;
-
- unsigned iv_pad_len;
- unsigned aad_pad_len;
-
- iv_pad_len = RTE_ALIGN_CEIL(tdata->iv.len, 16);
- aad_pad_len = RTE_ALIGN_CEIL(tdata->aad.len, 16);
-
- /*
- * Runtime generate the large plain text instead of use hard code
- * plain text vector. It is done to avoid create huge source file
- * with the test vector.
- */
- if (tdata->aad.len == GMAC_LARGE_PLAINTEXT_LENGTH)
- generate_gmac_large_plaintext(tdata->aad.data);
-
- /* Generate Crypto op data structure */
- ut_params->op = rte_crypto_op_alloc(ts_params->op_mpool,
- RTE_CRYPTO_OP_TYPE_SYMMETRIC);
- TEST_ASSERT_NOT_NULL(ut_params->op,
- "Failed to allocate symmetric crypto operation struct");
-
- sym_op = ut_params->op->sym;
- sym_op->auth.aad.data = (uint8_t *)rte_pktmbuf_append(ut_params->ibuf,
- aad_pad_len);
- TEST_ASSERT_NOT_NULL(sym_op->auth.aad.data,
- "no room to append aad");
-
- sym_op->auth.aad.length = tdata->aad.len;
- sym_op->auth.aad.phys_addr =
- rte_pktmbuf_mtophys(ut_params->ibuf);
- memcpy(sym_op->auth.aad.data, tdata->aad.data, tdata->aad.len);
-
- sym_op->auth.digest.data = (uint8_t *)rte_pktmbuf_append(
- ut_params->ibuf, tdata->gmac_tag.len);
- TEST_ASSERT_NOT_NULL(sym_op->auth.digest.data,
- "no room to append digest");
-
- sym_op->auth.digest.phys_addr = rte_pktmbuf_mtophys_offset(
- ut_params->ibuf, aad_pad_len);
- sym_op->auth.digest.length = tdata->gmac_tag.len;
-
- if (op == RTE_CRYPTO_AUTH_OP_VERIFY) {
- rte_memcpy(sym_op->auth.digest.data, tdata->gmac_tag.data,
- tdata->gmac_tag.len);
- TEST_HEXDUMP(stdout, "digest:",
- sym_op->auth.digest.data,
- sym_op->auth.digest.length);
- }
-
- sym_op->cipher.iv.data = (uint8_t *)rte_pktmbuf_prepend(
- ut_params->ibuf, iv_pad_len);
- TEST_ASSERT_NOT_NULL(sym_op->cipher.iv.data, "no room to prepend iv");
-
- memset(sym_op->cipher.iv.data, 0, iv_pad_len);
- sym_op->cipher.iv.phys_addr = rte_pktmbuf_mtophys(ut_params->ibuf);
- sym_op->cipher.iv.length = tdata->iv.len;
-
- rte_memcpy(sym_op->cipher.iv.data, tdata->iv.data, tdata->iv.len);
-
- TEST_HEXDUMP(stdout, "iv:", sym_op->cipher.iv.data, iv_pad_len);
-
- sym_op->cipher.data.length = 0;
- sym_op->cipher.data.offset = 0;
-
- sym_op->auth.data.offset = 0;
- sym_op->auth.data.length = 0;
-
- return 0;
-}
-
-static int create_gmac_session(uint8_t dev_id,
- enum rte_crypto_cipher_operation op,
- const struct gmac_test_data *tdata,
- enum rte_crypto_auth_operation auth_op)
-{
- uint8_t cipher_key[tdata->key.len];
-
- struct crypto_unittest_params *ut_params = &unittest_params;
-
- memcpy(cipher_key, tdata->key.data, tdata->key.len);
-
- /* For GMAC we setup cipher parameters */
- ut_params->cipher_xform.type = RTE_CRYPTO_SYM_XFORM_CIPHER;
- ut_params->cipher_xform.next = NULL;
- ut_params->cipher_xform.cipher.algo = RTE_CRYPTO_CIPHER_AES_GCM;
- ut_params->cipher_xform.cipher.op = op;
- ut_params->cipher_xform.cipher.key.data = cipher_key;
- ut_params->cipher_xform.cipher.key.length = tdata->key.len;
-
- ut_params->auth_xform.type = RTE_CRYPTO_SYM_XFORM_AUTH;
- ut_params->auth_xform.next = NULL;
-
- ut_params->auth_xform.auth.algo = RTE_CRYPTO_AUTH_AES_GMAC;
- ut_params->auth_xform.auth.op = auth_op;
- ut_params->auth_xform.auth.digest_length = tdata->gmac_tag.len;
- ut_params->auth_xform.auth.add_auth_data_length = 0;
- ut_params->auth_xform.auth.key.length = 0;
- ut_params->auth_xform.auth.key.data = NULL;
-
- ut_params->cipher_xform.next = &ut_params->auth_xform;
-
- ut_params->sess = rte_cryptodev_sym_session_create(dev_id,
- &ut_params->cipher_xform);
-
- TEST_ASSERT_NOT_NULL(ut_params->sess, "Session creation failed");
-
- return 0;
-}
-
-static int
-test_AES_GMAC_authentication(const struct gmac_test_data *tdata)
-{
- struct crypto_testsuite_params *ts_params = &testsuite_params;
- struct crypto_unittest_params *ut_params = &unittest_params;
-
- int retval;
-
- uint8_t *auth_tag, *p;
- uint16_t aad_pad_len;
-
- TEST_ASSERT_NOT_EQUAL(tdata->gmac_tag.len, 0,
- "No GMAC length in the source data");
-
- retval = create_gmac_session(ts_params->valid_devs[0],
- RTE_CRYPTO_CIPHER_OP_ENCRYPT,
- tdata, RTE_CRYPTO_AUTH_OP_GENERATE);
-
- if (retval < 0)
- return retval;
-
- if (tdata->aad.len > MBUF_SIZE)
- ut_params->ibuf = rte_pktmbuf_alloc(ts_params->large_mbuf_pool);
- else
- ut_params->ibuf = rte_pktmbuf_alloc(ts_params->mbuf_pool);
- TEST_ASSERT_NOT_NULL(ut_params->ibuf,
- "Failed to allocate input buffer in mempool");
-
- memset(rte_pktmbuf_mtod(ut_params->ibuf, uint8_t *), 0,
- rte_pktmbuf_tailroom(ut_params->ibuf));
-
- aad_pad_len = RTE_ALIGN_CEIL(tdata->aad.len, 16);
-
- p = rte_pktmbuf_mtod(ut_params->ibuf, uint8_t *);
-
- retval = create_gmac_operation(RTE_CRYPTO_AUTH_OP_GENERATE,
- tdata);
-
- if (retval < 0)
- return retval;
-
- rte_crypto_op_attach_sym_session(ut_params->op, ut_params->sess);
-
- ut_params->op->sym->m_src = ut_params->ibuf;
-
- TEST_ASSERT_NOT_NULL(process_crypto_request(ts_params->valid_devs[0],
- ut_params->op), "failed to process sym crypto op");
-
- TEST_ASSERT_EQUAL(ut_params->op->status, RTE_CRYPTO_OP_STATUS_SUCCESS,
- "crypto op processing failed");
-
- if (ut_params->op->sym->m_dst) {
- auth_tag = rte_pktmbuf_mtod_offset(ut_params->op->sym->m_dst,
- uint8_t *, aad_pad_len);
- } else {
- auth_tag = p + aad_pad_len;
- }
-
- TEST_HEXDUMP(stdout, "auth tag:", auth_tag, tdata->gmac_tag.len);
-
- TEST_ASSERT_BUFFERS_ARE_EQUAL(
- auth_tag,
- tdata->gmac_tag.data,
- tdata->gmac_tag.len,
- "GMAC Generated auth tag not as expected");
-
- return 0;
-}
-
-static int
-test_AES_GMAC_authentication_test_case_1(void)
-{
- return test_AES_GMAC_authentication(&gmac_test_case_1);
-}
-
-static int
-test_AES_GMAC_authentication_test_case_2(void)
-{
- return test_AES_GMAC_authentication(&gmac_test_case_2);
-}
-
-static int
-test_AES_GMAC_authentication_test_case_3(void)
-{
- return test_AES_GMAC_authentication(&gmac_test_case_3);
-}
-
-static int
-test_AES_GMAC_authentication_test_case_4(void)
-{
- return test_AES_GMAC_authentication(&gmac_test_case_4);
-}
-
-static int
-test_AES_GMAC_authentication_verify(const struct gmac_test_data *tdata)
-{
- struct crypto_testsuite_params *ts_params = &testsuite_params;
- struct crypto_unittest_params *ut_params = &unittest_params;
- int retval;
-
- TEST_ASSERT_NOT_EQUAL(tdata->gmac_tag.len, 0,
- "No GMAC length in the source data");
-
- retval = create_gmac_session(ts_params->valid_devs[0],
- RTE_CRYPTO_CIPHER_OP_DECRYPT,
- tdata, RTE_CRYPTO_AUTH_OP_VERIFY);
-
- if (retval < 0)
- return retval;
-
- if (tdata->aad.len > MBUF_SIZE)
- ut_params->ibuf = rte_pktmbuf_alloc(ts_params->large_mbuf_pool);
- else
- ut_params->ibuf = rte_pktmbuf_alloc(ts_params->mbuf_pool);
- TEST_ASSERT_NOT_NULL(ut_params->ibuf,
- "Failed to allocate input buffer in mempool");
-
- memset(rte_pktmbuf_mtod(ut_params->ibuf, uint8_t *), 0,
- rte_pktmbuf_tailroom(ut_params->ibuf));
-
- retval = create_gmac_operation(RTE_CRYPTO_AUTH_OP_VERIFY,
- tdata);
-
- if (retval < 0)
- return retval;
-
- rte_crypto_op_attach_sym_session(ut_params->op, ut_params->sess);
-
- ut_params->op->sym->m_src = ut_params->ibuf;
-
- TEST_ASSERT_NOT_NULL(process_crypto_request(ts_params->valid_devs[0],
- ut_params->op), "failed to process sym crypto op");
-
- TEST_ASSERT_EQUAL(ut_params->op->status, RTE_CRYPTO_OP_STATUS_SUCCESS,
- "crypto op processing failed");
-
- return 0;
-
-}
-
-static int
-test_AES_GMAC_authentication_verify_test_case_1(void)
-{
- return test_AES_GMAC_authentication_verify(&gmac_test_case_1);
-}
-
-static int
-test_AES_GMAC_authentication_verify_test_case_2(void)
-{
- return test_AES_GMAC_authentication_verify(&gmac_test_case_2);
-}
-
-static int
-test_AES_GMAC_authentication_verify_test_case_3(void)
-{
- return test_AES_GMAC_authentication_verify(&gmac_test_case_3);
-}
-
-static int
-test_AES_GMAC_authentication_verify_test_case_4(void)
-{
- return test_AES_GMAC_authentication_verify(&gmac_test_case_4);
-}
-
-struct test_crypto_vector {
- enum rte_crypto_cipher_algorithm crypto_algo;
-
- struct {
- uint8_t data[64];
- unsigned int len;
- } cipher_key;
-
- struct {
- uint8_t data[64];
- unsigned int len;
- } iv;
-
- struct {
- const uint8_t *data;
- unsigned int len;
- } plaintext;
-
- struct {
- const uint8_t *data;
- unsigned int len;
- } ciphertext;
-
- enum rte_crypto_auth_algorithm auth_algo;
-
- struct {
- uint8_t data[128];
- unsigned int len;
- } auth_key;
-
- struct {
- const uint8_t *data;
- unsigned int len;
- } aad;
-
- struct {
- uint8_t data[128];
- unsigned int len;
- } digest;
-};
-
-static const struct test_crypto_vector
-hmac_sha1_test_crypto_vector = {
- .auth_algo = RTE_CRYPTO_AUTH_SHA1_HMAC,
- .plaintext = {
- .data = plaintext_hash,
- .len = 512
- },
- .auth_key = {
- .data = {
- 0xF8, 0x2A, 0xC7, 0x54, 0xDB, 0x96, 0x18, 0xAA,
- 0xC3, 0xA1, 0x53, 0xF6, 0x1F, 0x17, 0x60, 0xBD,
- 0xDE, 0xF4, 0xDE, 0xAD
- },
- .len = 20
- },
- .digest = {
- .data = {
- 0xC4, 0xB7, 0x0E, 0x6B, 0xDE, 0xD1, 0xE7, 0x77,
- 0x7E, 0x2E, 0x8F, 0xFC, 0x48, 0x39, 0x46, 0x17,
- 0x3F, 0x91, 0x64, 0x59
- },
- .len = 20
- }
-};
-
-static const struct test_crypto_vector
-aes128_gmac_test_vector = {
- .auth_algo = RTE_CRYPTO_AUTH_AES_GMAC,
- .crypto_algo = RTE_CRYPTO_CIPHER_AES_GCM,
- .aad = {
- .data = plaintext_hash,
- .len = 512
- },
- .iv = {
- .data = {
- 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
- 0x08, 0x09, 0x0A, 0x0B
- },
- .len = 12
- },
- .cipher_key = {
- .data = {
- 0x42, 0x1A, 0x7D, 0x3D, 0xF5, 0x82, 0x80, 0xF1,
- 0xF1, 0x35, 0x5C, 0x3B, 0xDD, 0x9A, 0x65, 0xBA
- },
- .len = 16
- },
- .digest = {
- .data = {
- 0xCA, 0x00, 0x99, 0x8B, 0x30, 0x7E, 0x74, 0x56,
- 0x32, 0xA7, 0x87, 0xB5, 0xE9, 0xB2, 0x34, 0x5A
- },
- .len = 16
- }
-};
-
-static const struct test_crypto_vector
-aes128cbc_hmac_sha1_test_vector = {
- .crypto_algo = RTE_CRYPTO_CIPHER_AES_CBC,
- .cipher_key = {
- .data = {
- 0xE4, 0x23, 0x33, 0x8A, 0x35, 0x64, 0x61, 0xE2,
- 0x49, 0x03, 0xDD, 0xC6, 0xB8, 0xCA, 0x55, 0x7A
- },
- .len = 16
- },
- .iv = {
- .data = {
- 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
- 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F
- },
- .len = 16
- },
- .plaintext = {
- .data = plaintext_hash,
- .len = 512
- },
- .ciphertext = {
- .data = ciphertext512_aes128cbc,
- .len = 512
- },
- .auth_algo = RTE_CRYPTO_AUTH_SHA1_HMAC,
- .auth_key = {
- .data = {
- 0xF8, 0x2A, 0xC7, 0x54, 0xDB, 0x96, 0x18, 0xAA,
- 0xC3, 0xA1, 0x53, 0xF6, 0x1F, 0x17, 0x60, 0xBD,
- 0xDE, 0xF4, 0xDE, 0xAD
- },
- .len = 20
- },
- .digest = {
- .data = {
- 0x9A, 0x4F, 0x88, 0x1B, 0xB6, 0x8F, 0xD8, 0x60,
- 0x42, 0x1A, 0x7D, 0x3D, 0xF5, 0x82, 0x80, 0xF1,
- 0x18, 0x8C, 0x1D, 0x32
- },
- .len = 20
- }
-};
-
-static void
-data_corruption(uint8_t *data)
-{
- data[0] += 1;
-}
-
-static void
-tag_corruption(uint8_t *data, unsigned int tag_offset)
-{
- data[tag_offset] += 1;
-}
-
-static int
-create_auth_session(struct crypto_unittest_params *ut_params,
- uint8_t dev_id,
- const struct test_crypto_vector *reference,
- enum rte_crypto_auth_operation auth_op)
-{
- uint8_t auth_key[reference->auth_key.len + 1];
-
- memcpy(auth_key, reference->auth_key.data, reference->auth_key.len);
-
- /* Setup Authentication Parameters */
- ut_params->auth_xform.type = RTE_CRYPTO_SYM_XFORM_AUTH;
- ut_params->auth_xform.auth.op = auth_op;
- ut_params->auth_xform.next = NULL;
- ut_params->auth_xform.auth.algo = reference->auth_algo;
- ut_params->auth_xform.auth.key.length = reference->auth_key.len;
- ut_params->auth_xform.auth.key.data = auth_key;
- ut_params->auth_xform.auth.digest_length = reference->digest.len;
- ut_params->auth_xform.auth.add_auth_data_length = reference->aad.len;
-
- /* Create Crypto session*/
- ut_params->sess = rte_cryptodev_sym_session_create(dev_id,
- &ut_params->auth_xform);
-
- TEST_ASSERT_NOT_NULL(ut_params->sess, "Session creation failed");
-
- return 0;
-}
-
-static int
-create_auth_cipher_session(struct crypto_unittest_params *ut_params,
- uint8_t dev_id,
- const struct test_crypto_vector *reference,
- enum rte_crypto_auth_operation auth_op,
- enum rte_crypto_cipher_operation cipher_op)
-{
- uint8_t cipher_key[reference->cipher_key.len + 1];
- uint8_t auth_key[reference->auth_key.len + 1];
-
- memcpy(cipher_key, reference->cipher_key.data,
- reference->cipher_key.len);
- memcpy(auth_key, reference->auth_key.data, reference->auth_key.len);
-
- /* Setup Authentication Parameters */
- ut_params->auth_xform.type = RTE_CRYPTO_SYM_XFORM_AUTH;
- ut_params->auth_xform.auth.op = auth_op;
- ut_params->auth_xform.next = &ut_params->cipher_xform;
- ut_params->auth_xform.auth.algo = reference->auth_algo;
- ut_params->auth_xform.auth.key.length = reference->auth_key.len;
- ut_params->auth_xform.auth.key.data = auth_key;
- ut_params->auth_xform.auth.digest_length = reference->digest.len;
- ut_params->auth_xform.auth.add_auth_data_length = reference->aad.len;
-
- /* Setup Cipher Parameters */
- ut_params->cipher_xform.type = RTE_CRYPTO_SYM_XFORM_CIPHER;
- ut_params->cipher_xform.next = NULL;
- ut_params->cipher_xform.cipher.algo = reference->crypto_algo;
- ut_params->cipher_xform.cipher.op = cipher_op;
- ut_params->cipher_xform.cipher.key.data = cipher_key;
- ut_params->cipher_xform.cipher.key.length = reference->cipher_key.len;
-
- /* Create Crypto session*/
- ut_params->sess = rte_cryptodev_sym_session_create(dev_id,
- &ut_params->auth_xform);
-
- TEST_ASSERT_NOT_NULL(ut_params->sess, "Session creation failed");
-
- return 0;
-}
-
-static int
-create_auth_operation(struct crypto_testsuite_params *ts_params,
- struct crypto_unittest_params *ut_params,
- const struct test_crypto_vector *reference,
- unsigned int auth_generate)
-{
- /* Generate Crypto op data structure */
- ut_params->op = rte_crypto_op_alloc(ts_params->op_mpool,
- RTE_CRYPTO_OP_TYPE_SYMMETRIC);
- TEST_ASSERT_NOT_NULL(ut_params->op,
- "Failed to allocate pktmbuf offload");
-
- /* Set crypto operation data parameters */
- rte_crypto_op_attach_sym_session(ut_params->op, ut_params->sess);
-
- struct rte_crypto_sym_op *sym_op = ut_params->op->sym;
-
- /* set crypto operation source mbuf */
- sym_op->m_src = ut_params->ibuf;
-
- /* digest */
- sym_op->auth.digest.data = (uint8_t *)rte_pktmbuf_append(
- ut_params->ibuf, reference->digest.len);
-
- TEST_ASSERT_NOT_NULL(sym_op->auth.digest.data,
- "no room to append auth tag");
-
- sym_op->auth.digest.phys_addr = rte_pktmbuf_mtophys_offset(
- ut_params->ibuf, reference->plaintext.len);
- sym_op->auth.digest.length = reference->digest.len;
-
- if (auth_generate)
- memset(sym_op->auth.digest.data, 0, reference->digest.len);
- else
- memcpy(sym_op->auth.digest.data,
- reference->digest.data,
- reference->digest.len);
-
- TEST_HEXDUMP(stdout, "digest:",
- sym_op->auth.digest.data,
- sym_op->auth.digest.length);
-
- sym_op->auth.data.length = reference->plaintext.len;
- sym_op->auth.data.offset = 0;
-
- return 0;
-}
-
-static int
-create_auth_GMAC_operation(struct crypto_testsuite_params *ts_params,
- struct crypto_unittest_params *ut_params,
- const struct test_crypto_vector *reference,
- unsigned int auth_generate)
-{
- /* Generate Crypto op data structure */
- ut_params->op = rte_crypto_op_alloc(ts_params->op_mpool,
- RTE_CRYPTO_OP_TYPE_SYMMETRIC);
- TEST_ASSERT_NOT_NULL(ut_params->op,
- "Failed to allocate pktmbuf offload");
-
- /* Set crypto operation data parameters */
- rte_crypto_op_attach_sym_session(ut_params->op, ut_params->sess);
-
- struct rte_crypto_sym_op *sym_op = ut_params->op->sym;
-
- /* set crypto operation source mbuf */
- sym_op->m_src = ut_params->ibuf;
-
- /* aad */
- sym_op->auth.aad.data = (uint8_t *)rte_pktmbuf_append(ut_params->ibuf,
- reference->aad.len);
- TEST_ASSERT_NOT_NULL(sym_op->auth.aad.data, "no room to append AAD");
- memcpy(sym_op->auth.aad.data, reference->aad.data, reference->aad.len);
-
- TEST_HEXDUMP(stdout, "AAD:", sym_op->auth.aad.data, reference->aad.len);
-
- sym_op->auth.aad.phys_addr = rte_pktmbuf_mtophys(ut_params->ibuf);
- sym_op->auth.aad.length = reference->aad.len;
-
- /* digest */
- sym_op->auth.digest.data = (uint8_t *)rte_pktmbuf_append(
- ut_params->ibuf, reference->digest.len);
-
- TEST_ASSERT_NOT_NULL(sym_op->auth.digest.data,
- "no room to append auth tag");
-
- sym_op->auth.digest.phys_addr = rte_pktmbuf_mtophys_offset(
- ut_params->ibuf, reference->ciphertext.len);
- sym_op->auth.digest.length = reference->digest.len;
-
- if (auth_generate)
- memset(sym_op->auth.digest.data, 0, reference->digest.len);
- else
- memcpy(sym_op->auth.digest.data,
- reference->digest.data,
- reference->digest.len);
-
- TEST_HEXDUMP(stdout, "digest:",
- sym_op->auth.digest.data,
- sym_op->auth.digest.length);
-
- sym_op->cipher.iv.data = (uint8_t *)rte_pktmbuf_prepend(
- ut_params->ibuf, reference->iv.len);
- TEST_ASSERT_NOT_NULL(sym_op->cipher.iv.data, "no room to prepend iv");
-
- sym_op->cipher.iv.phys_addr = rte_pktmbuf_mtophys(ut_params->ibuf);
- sym_op->cipher.iv.length = reference->iv.len;
-
- memcpy(sym_op->cipher.iv.data, reference->iv.data, reference->iv.len);
-
- sym_op->cipher.data.length = 0;
- sym_op->cipher.data.offset = 0;
-
- sym_op->auth.data.length = 0;
- sym_op->auth.data.offset = 0;
-
- return 0;
-}
-
-static int
-create_cipher_auth_operation(struct crypto_testsuite_params *ts_params,
- struct crypto_unittest_params *ut_params,
- const struct test_crypto_vector *reference,
- unsigned int auth_generate)
-{
- /* Generate Crypto op data structure */
- ut_params->op = rte_crypto_op_alloc(ts_params->op_mpool,
- RTE_CRYPTO_OP_TYPE_SYMMETRIC);
- TEST_ASSERT_NOT_NULL(ut_params->op,
- "Failed to allocate pktmbuf offload");
-
- /* Set crypto operation data parameters */
- rte_crypto_op_attach_sym_session(ut_params->op, ut_params->sess);
-
- struct rte_crypto_sym_op *sym_op = ut_params->op->sym;
-
- /* set crypto operation source mbuf */
- sym_op->m_src = ut_params->ibuf;
-
- /* digest */
- sym_op->auth.digest.data = (uint8_t *)rte_pktmbuf_append(
- ut_params->ibuf, reference->digest.len);
-
- TEST_ASSERT_NOT_NULL(sym_op->auth.digest.data,
- "no room to append auth tag");
-
- sym_op->auth.digest.phys_addr = rte_pktmbuf_mtophys_offset(
- ut_params->ibuf, reference->ciphertext.len);
- sym_op->auth.digest.length = reference->digest.len;
-
- if (auth_generate)
- memset(sym_op->auth.digest.data, 0, reference->digest.len);
- else
- memcpy(sym_op->auth.digest.data,
- reference->digest.data,
- reference->digest.len);
-
- TEST_HEXDUMP(stdout, "digest:",
- sym_op->auth.digest.data,
- sym_op->auth.digest.length);
-
- sym_op->cipher.iv.data = (uint8_t *)rte_pktmbuf_prepend(
- ut_params->ibuf, reference->iv.len);
- TEST_ASSERT_NOT_NULL(sym_op->cipher.iv.data, "no room to prepend iv");
-
- sym_op->cipher.iv.phys_addr = rte_pktmbuf_mtophys(ut_params->ibuf);
- sym_op->cipher.iv.length = reference->iv.len;
-
- memcpy(sym_op->cipher.iv.data, reference->iv.data, reference->iv.len);
-
- sym_op->cipher.data.length = reference->ciphertext.len;
- sym_op->cipher.data.offset = reference->iv.len;
-
- sym_op->auth.data.length = reference->ciphertext.len;
- sym_op->auth.data.offset = reference->iv.len;
-
- return 0;
-}
-
-static int
-create_auth_verify_operation(struct crypto_testsuite_params *ts_params,
- struct crypto_unittest_params *ut_params,
- const struct test_crypto_vector *reference)
-{
- return create_auth_operation(ts_params, ut_params, reference, 0);
-}
-
-static int
-create_auth_verify_GMAC_operation(
- struct crypto_testsuite_params *ts_params,
- struct crypto_unittest_params *ut_params,
- const struct test_crypto_vector *reference)
-{
- return create_auth_GMAC_operation(ts_params, ut_params, reference, 0);
-}
-
-static int
-create_cipher_auth_verify_operation(struct crypto_testsuite_params *ts_params,
- struct crypto_unittest_params *ut_params,
- const struct test_crypto_vector *reference)
-{
- return create_cipher_auth_operation(ts_params, ut_params, reference, 0);
-}
-
-static int
-test_authentication_verify_fail_when_data_corruption(
- struct crypto_testsuite_params *ts_params,
- struct crypto_unittest_params *ut_params,
- const struct test_crypto_vector *reference,
- unsigned int data_corrupted)
-{
- int retval;
-
- uint8_t *plaintext;
-
- /* Create session */
- retval = create_auth_session(ut_params,
- ts_params->valid_devs[0],
- reference,
- RTE_CRYPTO_AUTH_OP_VERIFY);
- if (retval < 0)
- return retval;
-
- ut_params->ibuf = rte_pktmbuf_alloc(ts_params->mbuf_pool);
- TEST_ASSERT_NOT_NULL(ut_params->ibuf,
- "Failed to allocate input buffer in mempool");
-
- /* clear mbuf payload */
- memset(rte_pktmbuf_mtod(ut_params->ibuf, uint8_t *), 0,
- rte_pktmbuf_tailroom(ut_params->ibuf));
-
- plaintext = (uint8_t *)rte_pktmbuf_append(ut_params->ibuf,
- reference->plaintext.len);
- TEST_ASSERT_NOT_NULL(plaintext, "no room to append plaintext");
- memcpy(plaintext, reference->plaintext.data, reference->plaintext.len);
-
- TEST_HEXDUMP(stdout, "plaintext:", plaintext, reference->plaintext.len);
-
- /* Create operation */
- retval = create_auth_verify_operation(ts_params, ut_params, reference);
-
- if (retval < 0)
- return retval;
-
- if (data_corrupted)
- data_corruption(plaintext);
- else
- tag_corruption(plaintext, reference->plaintext.len);
-
- ut_params->op = process_crypto_request(ts_params->valid_devs[0],
- ut_params->op);
- TEST_ASSERT_NOT_NULL(ut_params->op, "failed crypto process");
- TEST_ASSERT_EQUAL(ut_params->op->status,
- RTE_CRYPTO_OP_STATUS_AUTH_FAILED,
- "authentication not failed");
-
- ut_params->obuf = ut_params->op->sym->m_src;
- TEST_ASSERT_NOT_NULL(ut_params->obuf, "failed to retrieve obuf");
-
- return 0;
-}
-
-static int
-test_authentication_verify_GMAC_fail_when_corruption(
- struct crypto_testsuite_params *ts_params,
- struct crypto_unittest_params *ut_params,
- const struct test_crypto_vector *reference,
- unsigned int data_corrupted)
-{
- int retval;
-
- /* Create session */
- retval = create_auth_cipher_session(ut_params,
- ts_params->valid_devs[0],
- reference,
- RTE_CRYPTO_AUTH_OP_VERIFY,
- RTE_CRYPTO_CIPHER_OP_DECRYPT);
- if (retval < 0)
- return retval;
-
- ut_params->ibuf = rte_pktmbuf_alloc(ts_params->mbuf_pool);
- TEST_ASSERT_NOT_NULL(ut_params->ibuf,
- "Failed to allocate input buffer in mempool");
-
- /* clear mbuf payload */
- memset(rte_pktmbuf_mtod(ut_params->ibuf, uint8_t *), 0,
- rte_pktmbuf_tailroom(ut_params->ibuf));
-
- /* Create operation */
- retval = create_auth_verify_GMAC_operation(ts_params,
- ut_params,
- reference);
-
- if (retval < 0)
- return retval;
-
- if (data_corrupted)
- data_corruption(ut_params->op->sym->auth.aad.data);
- else
- tag_corruption(ut_params->op->sym->auth.aad.data,
- reference->aad.len);
-
- ut_params->op = process_crypto_request(ts_params->valid_devs[0],
- ut_params->op);
- TEST_ASSERT_NOT_NULL(ut_params->op, "failed crypto process");
- TEST_ASSERT_EQUAL(ut_params->op->status,
- RTE_CRYPTO_OP_STATUS_AUTH_FAILED,
- "authentication not failed");
-
- ut_params->obuf = ut_params->op->sym->m_src;
- TEST_ASSERT_NOT_NULL(ut_params->obuf, "failed to retrieve obuf");
-
- return 0;
-}
-
-static int
-test_authenticated_decryption_fail_when_corruption(
- struct crypto_testsuite_params *ts_params,
- struct crypto_unittest_params *ut_params,
- const struct test_crypto_vector *reference,
- unsigned int data_corrupted)
-{
- int retval;
-
- uint8_t *ciphertext;
-
- /* Create session */
- retval = create_auth_cipher_session(ut_params,
- ts_params->valid_devs[0],
- reference,
- RTE_CRYPTO_AUTH_OP_VERIFY,
- RTE_CRYPTO_CIPHER_OP_DECRYPT);
- if (retval < 0)
- return retval;
-
- ut_params->ibuf = rte_pktmbuf_alloc(ts_params->mbuf_pool);
- TEST_ASSERT_NOT_NULL(ut_params->ibuf,
- "Failed to allocate input buffer in mempool");
-
- /* clear mbuf payload */
- memset(rte_pktmbuf_mtod(ut_params->ibuf, uint8_t *), 0,
- rte_pktmbuf_tailroom(ut_params->ibuf));
-
- ciphertext = (uint8_t *)rte_pktmbuf_append(ut_params->ibuf,
- reference->ciphertext.len);
- TEST_ASSERT_NOT_NULL(ciphertext, "no room to append ciphertext");
- memcpy(ciphertext, reference->ciphertext.data,
- reference->ciphertext.len);
-
- /* Create operation */
- retval = create_cipher_auth_verify_operation(ts_params,
- ut_params,
- reference);
-
- if (retval < 0)
- return retval;
-
- if (data_corrupted)
- data_corruption(ciphertext);
- else
- tag_corruption(ciphertext, reference->ciphertext.len);
-
- ut_params->op = process_crypto_request(ts_params->valid_devs[0],
- ut_params->op);
-
- TEST_ASSERT_NOT_NULL(ut_params->op, "failed crypto process");
- TEST_ASSERT_EQUAL(ut_params->op->status,
- RTE_CRYPTO_OP_STATUS_AUTH_FAILED,
- "authentication not failed");
-
- ut_params->obuf = ut_params->op->sym->m_src;
- TEST_ASSERT_NOT_NULL(ut_params->obuf, "failed to retrieve obuf");
-
- return 0;
-}
-
-static int
-test_authentication_verify_fail_when_data_corrupted(
- struct crypto_testsuite_params *ts_params,
- struct crypto_unittest_params *ut_params,
- const struct test_crypto_vector *reference)
-{
- return test_authentication_verify_fail_when_data_corruption(
- ts_params, ut_params, reference, 1);
-}
-
-static int
-test_authentication_verify_fail_when_tag_corrupted(
- struct crypto_testsuite_params *ts_params,
- struct crypto_unittest_params *ut_params,
- const struct test_crypto_vector *reference)
-{
- return test_authentication_verify_fail_when_data_corruption(
- ts_params, ut_params, reference, 0);
-}
-
-static int
-test_authentication_verify_GMAC_fail_when_data_corrupted(
- struct crypto_testsuite_params *ts_params,
- struct crypto_unittest_params *ut_params,
- const struct test_crypto_vector *reference)
-{
- return test_authentication_verify_GMAC_fail_when_corruption(
- ts_params, ut_params, reference, 1);
-}
-
-static int
-test_authentication_verify_GMAC_fail_when_tag_corrupted(
- struct crypto_testsuite_params *ts_params,
- struct crypto_unittest_params *ut_params,
- const struct test_crypto_vector *reference)
-{
- return test_authentication_verify_GMAC_fail_when_corruption(
- ts_params, ut_params, reference, 0);
-}
-
-static int
-test_authenticated_decryption_fail_when_data_corrupted(
- struct crypto_testsuite_params *ts_params,
- struct crypto_unittest_params *ut_params,
- const struct test_crypto_vector *reference)
-{
- return test_authenticated_decryption_fail_when_corruption(
- ts_params, ut_params, reference, 1);
-}
-
-static int
-test_authenticated_decryption_fail_when_tag_corrupted(
- struct crypto_testsuite_params *ts_params,
- struct crypto_unittest_params *ut_params,
- const struct test_crypto_vector *reference)
-{
- return test_authenticated_decryption_fail_when_corruption(
- ts_params, ut_params, reference, 0);
-}
-
-static int
-authentication_verify_HMAC_SHA1_fail_data_corrupt(void)
-{
- return test_authentication_verify_fail_when_data_corrupted(
- &testsuite_params, &unittest_params,
- &hmac_sha1_test_crypto_vector);
-}
-
-static int
-authentication_verify_HMAC_SHA1_fail_tag_corrupt(void)
-{
- return test_authentication_verify_fail_when_tag_corrupted(
- &testsuite_params, &unittest_params,
- &hmac_sha1_test_crypto_vector);
-}
-
-static int
-authentication_verify_AES128_GMAC_fail_data_corrupt(void)
-{
- return test_authentication_verify_GMAC_fail_when_data_corrupted(
- &testsuite_params, &unittest_params,
- &aes128_gmac_test_vector);
-}
-
-static int
-authentication_verify_AES128_GMAC_fail_tag_corrupt(void)
-{
- return test_authentication_verify_GMAC_fail_when_tag_corrupted(
- &testsuite_params, &unittest_params,
- &aes128_gmac_test_vector);
-}
-
-static int
-auth_decryption_AES128CBC_HMAC_SHA1_fail_data_corrupt(void)
-{
- return test_authenticated_decryption_fail_when_data_corrupted(
- &testsuite_params,
- &unittest_params,
- &aes128cbc_hmac_sha1_test_vector);
-}
-
-static int
-auth_decryption_AES128CBC_HMAC_SHA1_fail_tag_corrupt(void)
-{
- return test_authenticated_decryption_fail_when_tag_corrupted(
- &testsuite_params,
- &unittest_params,
- &aes128cbc_hmac_sha1_test_vector);
-}
-
-static struct unit_test_suite cryptodev_qat_testsuite = {
- .suite_name = "Crypto QAT Unit Test Suite",
- .setup = testsuite_setup,
- .teardown = testsuite_teardown,
- .unit_test_cases = {
- TEST_CASE_ST(ut_setup, ut_teardown,
- test_device_configure_invalid_dev_id),
- TEST_CASE_ST(ut_setup, ut_teardown,
- test_device_configure_invalid_queue_pair_ids),
- TEST_CASE_ST(ut_setup, ut_teardown,
- test_queue_pair_descriptor_setup),
- TEST_CASE_ST(ut_setup, ut_teardown,
- test_multi_session),
-
- TEST_CASE_ST(ut_setup, ut_teardown, test_AES_chain_qat_all),
- TEST_CASE_ST(ut_setup, ut_teardown, test_3DES_chain_qat_all),
- TEST_CASE_ST(ut_setup, ut_teardown,
- test_3DES_cipheronly_qat_all),
- TEST_CASE_ST(ut_setup, ut_teardown, test_stats),
-
- /** AES GCM Authenticated Encryption */
- TEST_CASE_ST(ut_setup, ut_teardown,
- test_mb_AES_GCM_authenticated_encryption_test_case_1),
- TEST_CASE_ST(ut_setup, ut_teardown,
- test_mb_AES_GCM_authenticated_encryption_test_case_2),
- TEST_CASE_ST(ut_setup, ut_teardown,
- test_mb_AES_GCM_authenticated_encryption_test_case_3),
- TEST_CASE_ST(ut_setup, ut_teardown,
- test_mb_AES_GCM_authenticated_encryption_test_case_4),
- TEST_CASE_ST(ut_setup, ut_teardown,
- test_mb_AES_GCM_authenticated_encryption_test_case_5),
- TEST_CASE_ST(ut_setup, ut_teardown,
- test_mb_AES_GCM_authenticated_encryption_test_case_6),
- TEST_CASE_ST(ut_setup, ut_teardown,
- test_mb_AES_GCM_authenticated_encryption_test_case_7),
-
- /** AES GCM Authenticated Decryption */
- TEST_CASE_ST(ut_setup, ut_teardown,
- test_mb_AES_GCM_authenticated_decryption_test_case_1),
- TEST_CASE_ST(ut_setup, ut_teardown,
- test_mb_AES_GCM_authenticated_decryption_test_case_2),
- TEST_CASE_ST(ut_setup, ut_teardown,
- test_mb_AES_GCM_authenticated_decryption_test_case_3),
- TEST_CASE_ST(ut_setup, ut_teardown,
- test_mb_AES_GCM_authenticated_decryption_test_case_4),
- TEST_CASE_ST(ut_setup, ut_teardown,
- test_mb_AES_GCM_authenticated_decryption_test_case_5),
- TEST_CASE_ST(ut_setup, ut_teardown,
- test_mb_AES_GCM_authenticated_decryption_test_case_6),
- TEST_CASE_ST(ut_setup, ut_teardown,
- test_mb_AES_GCM_authenticated_decryption_test_case_7),
-
- /** AES GMAC Authentication */
- TEST_CASE_ST(ut_setup, ut_teardown,
- test_AES_GMAC_authentication_test_case_1),
- TEST_CASE_ST(ut_setup, ut_teardown,
- test_AES_GMAC_authentication_verify_test_case_1),
- TEST_CASE_ST(ut_setup, ut_teardown,
- test_AES_GMAC_authentication_test_case_2),
- TEST_CASE_ST(ut_setup, ut_teardown,
- test_AES_GMAC_authentication_verify_test_case_2),
- TEST_CASE_ST(ut_setup, ut_teardown,
- test_AES_GMAC_authentication_test_case_3),
- TEST_CASE_ST(ut_setup, ut_teardown,
- test_AES_GMAC_authentication_verify_test_case_3),
-
- /** SNOW 3G encrypt only (UEA2) */
- TEST_CASE_ST(ut_setup, ut_teardown,
- test_snow3g_encryption_test_case_1),
- TEST_CASE_ST(ut_setup, ut_teardown,
- test_snow3g_encryption_test_case_2),
- TEST_CASE_ST(ut_setup, ut_teardown,
- test_snow3g_encryption_test_case_3),
- TEST_CASE_ST(ut_setup, ut_teardown,
- test_snow3g_encryption_test_case_4),
- TEST_CASE_ST(ut_setup, ut_teardown,
- test_snow3g_encryption_test_case_5),
-
- TEST_CASE_ST(ut_setup, ut_teardown,
- test_snow3g_encryption_test_case_1_oop),
- TEST_CASE_ST(ut_setup, ut_teardown,
- test_snow3g_decryption_test_case_1_oop),
-
- /** SNOW 3G decrypt only (UEA2) */
- TEST_CASE_ST(ut_setup, ut_teardown,
- test_snow3g_decryption_test_case_1),
- TEST_CASE_ST(ut_setup, ut_teardown,
- test_snow3g_decryption_test_case_2),
- TEST_CASE_ST(ut_setup, ut_teardown,
- test_snow3g_decryption_test_case_3),
- TEST_CASE_ST(ut_setup, ut_teardown,
- test_snow3g_decryption_test_case_4),
- TEST_CASE_ST(ut_setup, ut_teardown,
- test_snow3g_decryption_test_case_5),
- TEST_CASE_ST(ut_setup, ut_teardown,
- test_snow3g_hash_generate_test_case_1),
- TEST_CASE_ST(ut_setup, ut_teardown,
- test_snow3g_hash_generate_test_case_2),
- TEST_CASE_ST(ut_setup, ut_teardown,
- test_snow3g_hash_generate_test_case_3),
- TEST_CASE_ST(ut_setup, ut_teardown,
- test_snow3g_hash_verify_test_case_1),
- TEST_CASE_ST(ut_setup, ut_teardown,
- test_snow3g_hash_verify_test_case_2),
- TEST_CASE_ST(ut_setup, ut_teardown,
- test_snow3g_hash_verify_test_case_3),
- TEST_CASE_ST(ut_setup, ut_teardown,
- test_snow3g_cipher_auth_test_case_1),
- TEST_CASE_ST(ut_setup, ut_teardown,
- test_snow3g_auth_cipher_test_case_1),
-
- /** HMAC_MD5 Authentication */
- TEST_CASE_ST(ut_setup, ut_teardown,
- test_MD5_HMAC_generate_case_1),
- TEST_CASE_ST(ut_setup, ut_teardown,
- test_MD5_HMAC_verify_case_1),
- TEST_CASE_ST(ut_setup, ut_teardown,
- test_MD5_HMAC_generate_case_2),
- TEST_CASE_ST(ut_setup, ut_teardown,
- test_MD5_HMAC_verify_case_2),
-
- /** NULL tests */
- TEST_CASE_ST(ut_setup, ut_teardown,
- test_null_auth_only_operation),
- TEST_CASE_ST(ut_setup, ut_teardown,
- test_null_cipher_only_operation),
- TEST_CASE_ST(ut_setup, ut_teardown,
- test_null_cipher_auth_operation),
- TEST_CASE_ST(ut_setup, ut_teardown,
- test_null_auth_cipher_operation),
-
- TEST_CASE_ST(ut_setup, ut_teardown,
- test_kasumi_hash_generate_test_case_6),
-
- /** KASUMI tests */
- TEST_CASE_ST(ut_setup, ut_teardown,
- test_kasumi_encryption_test_case_1),
- TEST_CASE_ST(ut_setup, ut_teardown,
- test_kasumi_encryption_test_case_3),
- TEST_CASE_ST(ut_setup, ut_teardown,
- test_kasumi_auth_cipher_test_case_1),
- TEST_CASE_ST(ut_setup, ut_teardown,
- test_kasumi_cipher_auth_test_case_1),
-
- /** Negative tests */
- TEST_CASE_ST(ut_setup, ut_teardown,
- authentication_verify_HMAC_SHA1_fail_data_corrupt),
- TEST_CASE_ST(ut_setup, ut_teardown,
- authentication_verify_HMAC_SHA1_fail_tag_corrupt),
- TEST_CASE_ST(ut_setup, ut_teardown,
- authentication_verify_AES128_GMAC_fail_data_corrupt),
- TEST_CASE_ST(ut_setup, ut_teardown,
- authentication_verify_AES128_GMAC_fail_tag_corrupt),
- TEST_CASE_ST(ut_setup, ut_teardown,
- auth_decryption_AES128CBC_HMAC_SHA1_fail_data_corrupt),
- TEST_CASE_ST(ut_setup, ut_teardown,
- auth_decryption_AES128CBC_HMAC_SHA1_fail_tag_corrupt),
-
- TEST_CASES_END() /**< NULL terminate unit test array */
- }
-};
-
-static struct unit_test_suite cryptodev_aesni_mb_testsuite = {
- .suite_name = "Crypto Device AESNI MB Unit Test Suite",
- .setup = testsuite_setup,
- .teardown = testsuite_teardown,
- .unit_test_cases = {
- TEST_CASE_ST(ut_setup, ut_teardown, test_AES_chain_mb_all),
-
- TEST_CASES_END() /**< NULL terminate unit test array */
- }
-};
-
-static struct unit_test_suite cryptodev_openssl_testsuite = {
- .suite_name = "Crypto Device OPENSSL Unit Test Suite",
- .setup = testsuite_setup,
- .teardown = testsuite_teardown,
- .unit_test_cases = {
- TEST_CASE_ST(ut_setup, ut_teardown, test_multi_session),
- TEST_CASE_ST(ut_setup, ut_teardown,
- test_multi_session_random_usage),
- TEST_CASE_ST(ut_setup, ut_teardown,
- test_AES_chain_openssl_all),
- TEST_CASE_ST(ut_setup, ut_teardown,
- test_AES_cipheronly_openssl_all),
- TEST_CASE_ST(ut_setup, ut_teardown,
- test_3DES_chain_openssl_all),
- TEST_CASE_ST(ut_setup, ut_teardown,
- test_3DES_cipheronly_openssl_all),
- TEST_CASE_ST(ut_setup, ut_teardown,
- test_authonly_openssl_all),
-
- /** AES GCM Authenticated Encryption */
- TEST_CASE_ST(ut_setup, ut_teardown,
- test_mb_AES_GCM_authenticated_encryption_test_case_1),
- TEST_CASE_ST(ut_setup, ut_teardown,
- test_mb_AES_GCM_authenticated_encryption_test_case_2),
- TEST_CASE_ST(ut_setup, ut_teardown,
- test_mb_AES_GCM_authenticated_encryption_test_case_3),
- TEST_CASE_ST(ut_setup, ut_teardown,
- test_mb_AES_GCM_authenticated_encryption_test_case_4),
- TEST_CASE_ST(ut_setup, ut_teardown,
- test_mb_AES_GCM_authenticated_encryption_test_case_5),
- TEST_CASE_ST(ut_setup, ut_teardown,
- test_mb_AES_GCM_authenticated_encryption_test_case_6),
- TEST_CASE_ST(ut_setup, ut_teardown,
- test_mb_AES_GCM_authenticated_encryption_test_case_7),
-
- /** AES GCM Authenticated Decryption */
- TEST_CASE_ST(ut_setup, ut_teardown,
- test_mb_AES_GCM_authenticated_decryption_test_case_1),
- TEST_CASE_ST(ut_setup, ut_teardown,
- test_mb_AES_GCM_authenticated_decryption_test_case_2),
- TEST_CASE_ST(ut_setup, ut_teardown,
- test_mb_AES_GCM_authenticated_decryption_test_case_3),
- TEST_CASE_ST(ut_setup, ut_teardown,
- test_mb_AES_GCM_authenticated_decryption_test_case_4),
- TEST_CASE_ST(ut_setup, ut_teardown,
- test_mb_AES_GCM_authenticated_decryption_test_case_5),
- TEST_CASE_ST(ut_setup, ut_teardown,
- test_mb_AES_GCM_authenticated_decryption_test_case_6),
- TEST_CASE_ST(ut_setup, ut_teardown,
- test_mb_AES_GCM_authenticated_decryption_test_case_7),
-
- /** AES GMAC Authentication */
- TEST_CASE_ST(ut_setup, ut_teardown,
- test_AES_GMAC_authentication_test_case_1),
- TEST_CASE_ST(ut_setup, ut_teardown,
- test_AES_GMAC_authentication_verify_test_case_1),
- TEST_CASE_ST(ut_setup, ut_teardown,
- test_AES_GMAC_authentication_test_case_2),
- TEST_CASE_ST(ut_setup, ut_teardown,
- test_AES_GMAC_authentication_verify_test_case_2),
- TEST_CASE_ST(ut_setup, ut_teardown,
- test_AES_GMAC_authentication_test_case_3),
- TEST_CASE_ST(ut_setup, ut_teardown,
- test_AES_GMAC_authentication_verify_test_case_3),
- TEST_CASE_ST(ut_setup, ut_teardown,
- test_AES_GMAC_authentication_test_case_4),
- TEST_CASE_ST(ut_setup, ut_teardown,
- test_AES_GMAC_authentication_verify_test_case_4),
-
- /** Negative tests */
- TEST_CASE_ST(ut_setup, ut_teardown,
- authentication_verify_HMAC_SHA1_fail_data_corrupt),
- TEST_CASE_ST(ut_setup, ut_teardown,
- authentication_verify_HMAC_SHA1_fail_tag_corrupt),
- TEST_CASE_ST(ut_setup, ut_teardown,
- authentication_verify_AES128_GMAC_fail_data_corrupt),
- TEST_CASE_ST(ut_setup, ut_teardown,
- authentication_verify_AES128_GMAC_fail_tag_corrupt),
- TEST_CASE_ST(ut_setup, ut_teardown,
- auth_decryption_AES128CBC_HMAC_SHA1_fail_data_corrupt),
- TEST_CASE_ST(ut_setup, ut_teardown,
- auth_decryption_AES128CBC_HMAC_SHA1_fail_tag_corrupt),
-
- TEST_CASES_END() /**< NULL terminate unit test array */
- }
-};
-
-static struct unit_test_suite cryptodev_aesni_gcm_testsuite = {
- .suite_name = "Crypto Device AESNI GCM Unit Test Suite",
- .setup = testsuite_setup,
- .teardown = testsuite_teardown,
- .unit_test_cases = {
- /** AES GCM Authenticated Encryption */
- TEST_CASE_ST(ut_setup, ut_teardown,
- test_mb_AES_GCM_authenticated_encryption_test_case_1),
- TEST_CASE_ST(ut_setup, ut_teardown,
- test_mb_AES_GCM_authenticated_encryption_test_case_2),
- TEST_CASE_ST(ut_setup, ut_teardown,
- test_mb_AES_GCM_authenticated_encryption_test_case_3),
- TEST_CASE_ST(ut_setup, ut_teardown,
- test_mb_AES_GCM_authenticated_encryption_test_case_4),
- TEST_CASE_ST(ut_setup, ut_teardown,
- test_mb_AES_GCM_authenticated_encryption_test_case_5),
- TEST_CASE_ST(ut_setup, ut_teardown,
- test_mb_AES_GCM_authenticated_encryption_test_case_6),
- TEST_CASE_ST(ut_setup, ut_teardown,
- test_mb_AES_GCM_authenticated_encryption_test_case_7),
-
- /** AES GCM Authenticated Decryption */
- TEST_CASE_ST(ut_setup, ut_teardown,
- test_mb_AES_GCM_authenticated_decryption_test_case_1),
- TEST_CASE_ST(ut_setup, ut_teardown,
- test_mb_AES_GCM_authenticated_decryption_test_case_2),
- TEST_CASE_ST(ut_setup, ut_teardown,
- test_mb_AES_GCM_authenticated_decryption_test_case_3),
- TEST_CASE_ST(ut_setup, ut_teardown,
- test_mb_AES_GCM_authenticated_decryption_test_case_4),
- TEST_CASE_ST(ut_setup, ut_teardown,
- test_mb_AES_GCM_authenticated_decryption_test_case_5),
- TEST_CASE_ST(ut_setup, ut_teardown,
- test_mb_AES_GCM_authenticated_decryption_test_case_6),
- TEST_CASE_ST(ut_setup, ut_teardown,
- test_mb_AES_GCM_authenticated_decryption_test_case_7),
-
- TEST_CASES_END() /**< NULL terminate unit test array */
- }
-};
-
-static struct unit_test_suite cryptodev_sw_kasumi_testsuite = {
- .suite_name = "Crypto Device SW KASUMI Unit Test Suite",
- .setup = testsuite_setup,
- .teardown = testsuite_teardown,
- .unit_test_cases = {
- /** KASUMI encrypt only (UEA1) */
- TEST_CASE_ST(ut_setup, ut_teardown,
- test_kasumi_encryption_test_case_1),
- TEST_CASE_ST(ut_setup, ut_teardown,
- test_kasumi_encryption_test_case_2),
- TEST_CASE_ST(ut_setup, ut_teardown,
- test_kasumi_encryption_test_case_3),
- TEST_CASE_ST(ut_setup, ut_teardown,
- test_kasumi_encryption_test_case_4),
- TEST_CASE_ST(ut_setup, ut_teardown,
- test_kasumi_encryption_test_case_5),
- /** KASUMI decrypt only (UEA1) */
- TEST_CASE_ST(ut_setup, ut_teardown,
- test_kasumi_decryption_test_case_1),
- TEST_CASE_ST(ut_setup, ut_teardown,
- test_kasumi_decryption_test_case_2),
- TEST_CASE_ST(ut_setup, ut_teardown,
- test_kasumi_decryption_test_case_3),
- TEST_CASE_ST(ut_setup, ut_teardown,
- test_kasumi_decryption_test_case_4),
- TEST_CASE_ST(ut_setup, ut_teardown,
- test_kasumi_decryption_test_case_5),
-
- TEST_CASE_ST(ut_setup, ut_teardown,
- test_kasumi_encryption_test_case_1_oop),
- TEST_CASE_ST(ut_setup, ut_teardown,
- test_kasumi_decryption_test_case_1_oop),
-
- /** KASUMI hash only (UIA1) */
- TEST_CASE_ST(ut_setup, ut_teardown,
- test_kasumi_hash_generate_test_case_1),
- TEST_CASE_ST(ut_setup, ut_teardown,
- test_kasumi_hash_generate_test_case_2),
- TEST_CASE_ST(ut_setup, ut_teardown,
- test_kasumi_hash_generate_test_case_3),
- TEST_CASE_ST(ut_setup, ut_teardown,
- test_kasumi_hash_generate_test_case_4),
- TEST_CASE_ST(ut_setup, ut_teardown,
- test_kasumi_hash_generate_test_case_5),
- TEST_CASE_ST(ut_setup, ut_teardown,
- test_kasumi_hash_generate_test_case_6),
- TEST_CASE_ST(ut_setup, ut_teardown,
- test_kasumi_hash_verify_test_case_1),
- TEST_CASE_ST(ut_setup, ut_teardown,
- test_kasumi_hash_verify_test_case_2),
- TEST_CASE_ST(ut_setup, ut_teardown,
- test_kasumi_hash_verify_test_case_3),
- TEST_CASE_ST(ut_setup, ut_teardown,
- test_kasumi_hash_verify_test_case_4),
- TEST_CASE_ST(ut_setup, ut_teardown,
- test_kasumi_hash_verify_test_case_5),
- TEST_CASE_ST(ut_setup, ut_teardown,
- test_kasumi_auth_cipher_test_case_1),
- TEST_CASE_ST(ut_setup, ut_teardown,
- test_kasumi_cipher_auth_test_case_1),
- TEST_CASES_END() /**< NULL terminate unit test array */
- }
-};
-static struct unit_test_suite cryptodev_sw_snow3g_testsuite = {
- .suite_name = "Crypto Device SW SNOW 3G Unit Test Suite",
- .setup = testsuite_setup,
- .teardown = testsuite_teardown,
- .unit_test_cases = {
- /** SNOW 3G encrypt only (UEA2) */
- TEST_CASE_ST(ut_setup, ut_teardown,
- test_snow3g_encryption_test_case_1),
- TEST_CASE_ST(ut_setup, ut_teardown,
- test_snow3g_encryption_test_case_2),
- TEST_CASE_ST(ut_setup, ut_teardown,
- test_snow3g_encryption_test_case_3),
- TEST_CASE_ST(ut_setup, ut_teardown,
- test_snow3g_encryption_test_case_4),
- TEST_CASE_ST(ut_setup, ut_teardown,
- test_snow3g_encryption_test_case_5),
-
- TEST_CASE_ST(ut_setup, ut_teardown,
- test_snow3g_encryption_test_case_1_oop),
- TEST_CASE_ST(ut_setup, ut_teardown,
- test_snow3g_decryption_test_case_1_oop),
-
- TEST_CASE_ST(ut_setup, ut_teardown,
- test_snow3g_encryption_test_case_1_offset_oop),
-
- /** SNOW 3G decrypt only (UEA2) */
- TEST_CASE_ST(ut_setup, ut_teardown,
- test_snow3g_decryption_test_case_1),
- TEST_CASE_ST(ut_setup, ut_teardown,
- test_snow3g_decryption_test_case_2),
- TEST_CASE_ST(ut_setup, ut_teardown,
- test_snow3g_decryption_test_case_3),
- TEST_CASE_ST(ut_setup, ut_teardown,
- test_snow3g_decryption_test_case_4),
- TEST_CASE_ST(ut_setup, ut_teardown,
- test_snow3g_decryption_test_case_5),
- TEST_CASE_ST(ut_setup, ut_teardown,
- test_snow3g_hash_generate_test_case_1),
- TEST_CASE_ST(ut_setup, ut_teardown,
- test_snow3g_hash_generate_test_case_2),
- TEST_CASE_ST(ut_setup, ut_teardown,
- test_snow3g_hash_generate_test_case_3),
- /* Tests with buffers which length is not byte-aligned */
- TEST_CASE_ST(ut_setup, ut_teardown,
- test_snow3g_hash_generate_test_case_4),
- TEST_CASE_ST(ut_setup, ut_teardown,
- test_snow3g_hash_generate_test_case_5),
- TEST_CASE_ST(ut_setup, ut_teardown,
- test_snow3g_hash_generate_test_case_6),
- TEST_CASE_ST(ut_setup, ut_teardown,
- test_snow3g_hash_verify_test_case_1),
- TEST_CASE_ST(ut_setup, ut_teardown,
- test_snow3g_hash_verify_test_case_2),
- TEST_CASE_ST(ut_setup, ut_teardown,
- test_snow3g_hash_verify_test_case_3),
- /* Tests with buffers which length is not byte-aligned */
- TEST_CASE_ST(ut_setup, ut_teardown,
- test_snow3g_hash_verify_test_case_4),
- TEST_CASE_ST(ut_setup, ut_teardown,
- test_snow3g_hash_verify_test_case_5),
- TEST_CASE_ST(ut_setup, ut_teardown,
- test_snow3g_hash_verify_test_case_6),
- TEST_CASE_ST(ut_setup, ut_teardown,
- test_snow3g_cipher_auth_test_case_1),
- TEST_CASE_ST(ut_setup, ut_teardown,
- test_snow3g_auth_cipher_test_case_1),
-
- TEST_CASES_END() /**< NULL terminate unit test array */
- }
-};
-
-static struct unit_test_suite cryptodev_sw_zuc_testsuite = {
- .suite_name = "Crypto Device SW ZUC Unit Test Suite",
- .setup = testsuite_setup,
- .teardown = testsuite_teardown,
- .unit_test_cases = {
- /** ZUC encrypt only (EEA3) */
- TEST_CASE_ST(ut_setup, ut_teardown,
- test_zuc_encryption_test_case_1),
- TEST_CASE_ST(ut_setup, ut_teardown,
- test_zuc_encryption_test_case_2),
- TEST_CASE_ST(ut_setup, ut_teardown,
- test_zuc_encryption_test_case_3),
- TEST_CASE_ST(ut_setup, ut_teardown,
- test_zuc_encryption_test_case_4),
- TEST_CASE_ST(ut_setup, ut_teardown,
- test_zuc_encryption_test_case_5),
- TEST_CASE_ST(ut_setup, ut_teardown,
- test_zuc_hash_generate_test_case_1),
- TEST_CASE_ST(ut_setup, ut_teardown,
- test_zuc_hash_generate_test_case_2),
- TEST_CASE_ST(ut_setup, ut_teardown,
- test_zuc_hash_generate_test_case_3),
- TEST_CASE_ST(ut_setup, ut_teardown,
- test_zuc_hash_generate_test_case_4),
- TEST_CASE_ST(ut_setup, ut_teardown,
- test_zuc_hash_generate_test_case_5),
- TEST_CASES_END() /**< NULL terminate unit test array */
- }
-};
-
-static struct unit_test_suite cryptodev_null_testsuite = {
- .suite_name = "Crypto Device NULL Unit Test Suite",
- .setup = testsuite_setup,
- .teardown = testsuite_teardown,
- .unit_test_cases = {
- TEST_CASE_ST(ut_setup, ut_teardown,
- test_null_auth_only_operation),
- TEST_CASE_ST(ut_setup, ut_teardown,
- test_null_cipher_only_operation),
- TEST_CASE_ST(ut_setup, ut_teardown,
- test_null_cipher_auth_operation),
- TEST_CASE_ST(ut_setup, ut_teardown,
- test_null_auth_cipher_operation),
- TEST_CASE_ST(ut_setup, ut_teardown,
- test_null_invalid_operation),
- TEST_CASE_ST(ut_setup, ut_teardown,
- test_null_burst_operation),
-
- TEST_CASES_END() /**< NULL terminate unit test array */
- }
-};
-
-static int
-test_cryptodev_qat(void /*argv __rte_unused, int argc __rte_unused*/)
-{
- gbl_cryptodev_type = RTE_CRYPTODEV_QAT_SYM_PMD;
- return unit_test_suite_runner(&cryptodev_qat_testsuite);
-}
-
-static int
-test_cryptodev_aesni_mb(void /*argv __rte_unused, int argc __rte_unused*/)
-{
- gbl_cryptodev_type = RTE_CRYPTODEV_AESNI_MB_PMD;
-
- return unit_test_suite_runner(&cryptodev_aesni_mb_testsuite);
-}
-
-static int
-test_cryptodev_openssl(void)
-{
- gbl_cryptodev_type = RTE_CRYPTODEV_OPENSSL_PMD;
-
- return unit_test_suite_runner(&cryptodev_openssl_testsuite);
-}
-
-static int
-test_cryptodev_aesni_gcm(void)
-{
- gbl_cryptodev_type = RTE_CRYPTODEV_AESNI_GCM_PMD;
-
- return unit_test_suite_runner(&cryptodev_aesni_gcm_testsuite);
-}
-
-static int
-test_cryptodev_null(void)
-{
- gbl_cryptodev_type = RTE_CRYPTODEV_NULL_PMD;
-
- return unit_test_suite_runner(&cryptodev_null_testsuite);
-}
-
-static int
-test_cryptodev_sw_snow3g(void /*argv __rte_unused, int argc __rte_unused*/)
-{
- gbl_cryptodev_type = RTE_CRYPTODEV_SNOW3G_PMD;
-
- return unit_test_suite_runner(&cryptodev_sw_snow3g_testsuite);
-}
-
-static int
-test_cryptodev_sw_kasumi(void /*argv __rte_unused, int argc __rte_unused*/)
-{
- gbl_cryptodev_type = RTE_CRYPTODEV_KASUMI_PMD;
-
- return unit_test_suite_runner(&cryptodev_sw_kasumi_testsuite);
-}
-
-static int
-test_cryptodev_sw_zuc(void /*argv __rte_unused, int argc __rte_unused*/)
-{
- gbl_cryptodev_type = RTE_CRYPTODEV_ZUC_PMD;
-
- return unit_test_suite_runner(&cryptodev_sw_zuc_testsuite);
-}
-
-REGISTER_TEST_COMMAND(cryptodev_qat_autotest, test_cryptodev_qat);
-REGISTER_TEST_COMMAND(cryptodev_aesni_mb_autotest, test_cryptodev_aesni_mb);
-REGISTER_TEST_COMMAND(cryptodev_openssl_autotest, test_cryptodev_openssl);
-REGISTER_TEST_COMMAND(cryptodev_aesni_gcm_autotest, test_cryptodev_aesni_gcm);
-REGISTER_TEST_COMMAND(cryptodev_null_autotest, test_cryptodev_null);
-REGISTER_TEST_COMMAND(cryptodev_sw_snow3g_autotest, test_cryptodev_sw_snow3g);
-REGISTER_TEST_COMMAND(cryptodev_sw_kasumi_autotest, test_cryptodev_sw_kasumi);
-REGISTER_TEST_COMMAND(cryptodev_sw_zuc_autotest, test_cryptodev_sw_zuc);
diff --git a/app/test/test_cryptodev.h b/app/test/test_cryptodev.h
deleted file mode 100644
index a9089aae..00000000
--- a/app/test/test_cryptodev.h
+++ /dev/null
@@ -1,74 +0,0 @@
-/*-
- * BSD LICENSE
- *
- * Copyright(c) 2015-2016 Intel Corporation. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * * Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * * Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in
- * the documentation and/or other materials provided with the
- * distribution.
- * * Neither the name of Intel Corporation nor the names of its
- * contributors may be used to endorse or promote products derived
- * from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
- * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
- * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-#ifndef TEST_CRYPTODEV_H_
-#define TEST_CRYPTODEV_H_
-
-#define HEX_DUMP 0
-
-#define FALSE 0
-#define TRUE 1
-
-#define MAX_NUM_OPS_INFLIGHT (4096)
-#define MIN_NUM_OPS_INFLIGHT (128)
-#define DEFAULT_NUM_OPS_INFLIGHT (128)
-
-#define MAX_NUM_QPS_PER_QAT_DEVICE (2)
-#define DEFAULT_NUM_QPS_PER_QAT_DEVICE (2)
-#define DEFAULT_BURST_SIZE (64)
-#define DEFAULT_NUM_XFORMS (2)
-#define NUM_MBUFS (8191)
-#define MBUF_CACHE_SIZE (256)
-#define MBUF_DATAPAYLOAD_SIZE (2048 + DIGEST_BYTE_LENGTH_SHA512)
-#define MBUF_SIZE (sizeof(struct rte_mbuf) + \
- RTE_PKTMBUF_HEADROOM + MBUF_DATAPAYLOAD_SIZE)
-
-#define BYTE_LENGTH(x) (x/8)
-/* HASH DIGEST LENGTHS */
-#define DIGEST_BYTE_LENGTH_MD5 (BYTE_LENGTH(128))
-#define DIGEST_BYTE_LENGTH_SHA1 (BYTE_LENGTH(160))
-#define DIGEST_BYTE_LENGTH_SHA224 (BYTE_LENGTH(224))
-#define DIGEST_BYTE_LENGTH_SHA256 (BYTE_LENGTH(256))
-#define DIGEST_BYTE_LENGTH_SHA384 (BYTE_LENGTH(384))
-#define DIGEST_BYTE_LENGTH_SHA512 (BYTE_LENGTH(512))
-#define DIGEST_BYTE_LENGTH_AES_XCBC (BYTE_LENGTH(96))
-#define DIGEST_BYTE_LENGTH_SNOW3G_UIA2 (BYTE_LENGTH(32))
-#define DIGEST_BYTE_LENGTH_KASUMI_F9 (BYTE_LENGTH(32))
-#define AES_XCBC_MAC_KEY_SZ (16)
-#define DIGEST_BYTE_LENGTH_AES_GCM (BYTE_LENGTH(128))
-
-#define TRUNCATED_DIGEST_BYTE_LENGTH_SHA1 (12)
-#define TRUNCATED_DIGEST_BYTE_LENGTH_SHA224 (16)
-#define TRUNCATED_DIGEST_BYTE_LENGTH_SHA256 (16)
-#define TRUNCATED_DIGEST_BYTE_LENGTH_SHA384 (24)
-#define TRUNCATED_DIGEST_BYTE_LENGTH_SHA512 (32)
-
-#endif /* TEST_CRYPTODEV_H_ */
diff --git a/app/test/test_cryptodev_aes_test_vectors.h b/app/test/test_cryptodev_aes_test_vectors.h
deleted file mode 100644
index 1c68f93e..00000000
--- a/app/test/test_cryptodev_aes_test_vectors.h
+++ /dev/null
@@ -1,1097 +0,0 @@
-/*
- * BSD LICENSE
- *
- * Copyright(c) 2016 Intel Corporation. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * * Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * * Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in
- * the documentation and/or other materials provided with the
- * distribution.
- * * Neither the name of Intel Corporation nor the names of its
- * contributors may be used to endorse or promote products derived
- * from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
- * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
- * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#ifndef TEST_CRYPTODEV_AES_TEST_VECTORS_H_
-#define TEST_CRYPTODEV_AES_TEST_VECTORS_H_
-
-/* test vectors */
-static const uint8_t plaintext_aes128ctr[] = {
- 0x6B, 0xC1, 0xBE, 0xE2, 0x2E, 0x40, 0x9F, 0x96,
- 0xE9, 0x3D, 0x7E, 0x11, 0x73, 0x93, 0x17, 0x2A,
- 0xAE, 0x2D, 0x8A, 0x57, 0x1E, 0x03, 0xAC, 0x9C,
- 0x9E, 0xB7, 0x6F, 0xAC, 0x45, 0xAF, 0x8E, 0x51,
- 0x30, 0xC8, 0x1C, 0x46, 0xA3, 0x5C, 0xE4, 0x11,
- 0xE5, 0xFB, 0xC1, 0x19, 0x1A, 0x0A, 0x52, 0xEF,
- 0xF6, 0x9F, 0x24, 0x45, 0xDF, 0x4F, 0x9B, 0x17,
- 0xAD, 0x2B, 0x41, 0x7B, 0xE6, 0x6C, 0x37, 0x10
-};
-
-static const uint8_t ciphertext64_aes128ctr[] = {
- 0x87, 0x4D, 0x61, 0x91, 0xB6, 0x20, 0xE3, 0x26,
- 0x1B, 0xEF, 0x68, 0x64, 0x99, 0x0D, 0xB6, 0xCE,
- 0x98, 0x06, 0xF6, 0x6B, 0x79, 0x70, 0xFD, 0xFF,
- 0x86, 0x17, 0x18, 0x7B, 0xB9, 0xFF, 0xFD, 0xFF,
- 0x5A, 0xE4, 0xDF, 0x3E, 0xDB, 0xD5, 0xD3, 0x5E,
- 0x5B, 0x4F, 0x09, 0x02, 0x0D, 0xB0, 0x3E, 0xAB,
- 0x1E, 0x03, 0x1D, 0xDA, 0x2F, 0xBE, 0x03, 0xD1,
- 0x79, 0x21, 0x70, 0xA0, 0xF3, 0x00, 0x9C, 0xEE
-};
-
-static const uint8_t plaintext_aes192ctr[] = {
- 0x01, 0x0F, 0x10, 0x1F, 0x20, 0x1C, 0x0E, 0xB8,
- 0xFB, 0x5C, 0xCD, 0xCC, 0x1F, 0xF9, 0xAF, 0x0B,
- 0x95, 0x03, 0x74, 0x99, 0x49, 0xE7, 0x62, 0x55,
- 0xDA, 0xEA, 0x13, 0x20, 0x1D, 0xC6, 0xCC, 0xCC,
- 0xD1, 0x70, 0x75, 0x47, 0x02, 0x2F, 0xFB, 0x86,
- 0xBB, 0x6B, 0x23, 0xD2, 0xC9, 0x74, 0xD7, 0x7B,
- 0x08, 0x03, 0x3B, 0x79, 0x39, 0xBB, 0x91, 0x29,
- 0xDA, 0x14, 0x39, 0x8D, 0xFF, 0x81, 0x50, 0x96,
-};
-
-static const uint8_t ciphertext64_aes192ctr[] = {
- 0x4A, 0x6C, 0xC8, 0xCC, 0x96, 0x2A, 0x13, 0x84,
- 0x1C, 0x36, 0x88, 0xE9, 0xE5, 0x94, 0x70, 0xB2,
- 0x14, 0x5B, 0x13, 0x80, 0xEA, 0xD8, 0x8D, 0x37,
- 0xFD, 0x70, 0xA8, 0x83, 0xE8, 0x2B, 0x88, 0x1E,
- 0xBA, 0x94, 0x3F, 0xF6, 0xB3, 0x1F, 0xDE, 0x34,
- 0xF3, 0x5B, 0x80, 0xE9, 0xAB, 0xF5, 0x1C, 0x29,
- 0xB6, 0xD9, 0x76, 0x2B, 0x06, 0xC6, 0x74, 0xF1,
- 0x59, 0x5E, 0x9E, 0xA5, 0x7B, 0x2D, 0xD7, 0xF0
-};
-
-static const uint8_t plaintext_aes256ctr[] = {
- 0x6B, 0xC1, 0xBE, 0xE2, 0x2E, 0x40, 0x9F, 0x96,
- 0xE9, 0x3D, 0x7E, 0x11, 0x73, 0x93, 0x17, 0x2A,
- 0xAE, 0x2D, 0x8A, 0x57, 0x1E, 0x03, 0xAC, 0x9C,
- 0x9E, 0xB7, 0x6F, 0xAC, 0x45, 0xAF, 0x8E, 0x51,
- 0x30, 0xC8, 0x1C, 0x46, 0xA3, 0x5C, 0xE4, 0x11,
- 0xE5, 0xFB, 0xC1, 0x19, 0x1A, 0x0A, 0x52, 0xEF,
- 0xF6, 0x9F, 0x24, 0x45, 0xDF, 0x4F, 0x9B, 0x17,
- 0xAD, 0x2B, 0x41, 0x7B, 0xE6, 0x6C, 0x37, 0x10
-};
-
-static const uint8_t ciphertext64_aes256ctr[] = {
- 0x60, 0x1E, 0xC3, 0x13, 0x77, 0x57, 0x89, 0xA5,
- 0xB7, 0xA7, 0xF5, 0x04, 0xBB, 0xF3, 0xD2, 0x28,
- 0xF4, 0x43, 0xE3, 0xCA, 0x4D, 0x62, 0xB5, 0x9A,
- 0xCA, 0x84, 0xE9, 0x90, 0xCA, 0xCA, 0xF5, 0xC5,
- 0x2B, 0x09, 0x30, 0xDA, 0xA2, 0x3D, 0xE9, 0x4C,
- 0xE8, 0x70, 0x17, 0xBA, 0x2D, 0x84, 0x98, 0x8D,
- 0xDF, 0xC9, 0xC5, 0x8D, 0xB6, 0x7A, 0xAD, 0xA6,
- 0x13, 0xC2, 0xDD, 0x08, 0x45, 0x79, 0x41, 0xA6
-};
-
-static const uint8_t plaintext_aes_common[] = {
- "What a lousy earth! He wondered how many people "
- "were destitute that same night even in his own "
- "prosperous country, how many homes were "
- "shanties, how many husbands were drunk and "
- "wives socked, and how many children were "
- "bullied, abused, or abandoned. How many "
- "families hungered for food they could not "
- "afford to buy? How many hearts were broken? How "
- "many suicides would take place that same night, "
- "how many people would go insane? How many "
- "cockroaches and landlords would triumph? How "
- "many winners were losers, successes failures, "
- "and rich men poor men? How many wise guys were "
- "stupid? How many happy endings were unhappy "
- "endings? How many honest men were liars, brave "
- "men cowards, loyal men traitors, how many "
- "sainted men were corrupt, how many people in "
- "positions of trust had sold their souls to "
- "bodyguards, how many had never had souls? How "
- "many straight-and-narrow paths were crooked "
- "paths? How many best families were worst "
- "families and how many good people were bad "
- "people? When you added them all up and then "
- "subtracted, you might be left with only the "
- "children, and perhaps with Albert Einstein and "
- "an old violinist or sculptor somewhere."
-};
-
-static const uint8_t ciphertext512_aes128cbc[] = {
- 0x8B, 0x4D, 0xDA, 0x1B, 0xCF, 0x04, 0xA0, 0x31,
- 0xB4, 0xBF, 0xBD, 0x68, 0x43, 0x20, 0x7E, 0x76,
- 0xB1, 0x96, 0x8B, 0xA2, 0x7C, 0xA2, 0x83, 0x9E,
- 0x39, 0x5A, 0x2F, 0x7E, 0x92, 0xB4, 0x48, 0x1A,
- 0x3F, 0x6B, 0x5D, 0xDF, 0x52, 0x85, 0x5F, 0x8E,
- 0x42, 0x3C, 0xFB, 0xE9, 0x1A, 0x24, 0xD6, 0x08,
- 0xDD, 0xFD, 0x16, 0xFB, 0xE9, 0x55, 0xEF, 0xF0,
- 0xA0, 0x8D, 0x13, 0xAB, 0x81, 0xC6, 0x90, 0x01,
- 0xB5, 0x18, 0x84, 0xB3, 0xF6, 0xE6, 0x11, 0x57,
- 0xD6, 0x71, 0xC6, 0x3C, 0x3F, 0x2F, 0x33, 0xEE,
- 0x24, 0x42, 0x6E, 0xAC, 0x0B, 0xCA, 0xEC, 0xF9,
- 0x84, 0xF8, 0x22, 0xAA, 0x60, 0xF0, 0x32, 0xA9,
- 0x75, 0x75, 0x3B, 0xCB, 0x70, 0x21, 0x0A, 0x8D,
- 0x0F, 0xE0, 0xC4, 0x78, 0x2B, 0xF8, 0x97, 0xE3,
- 0xE4, 0x26, 0x4B, 0x29, 0xDA, 0x88, 0xCD, 0x46,
- 0xEC, 0xAA, 0xF9, 0x7F, 0xF1, 0x15, 0xEA, 0xC3,
- 0x87, 0xE6, 0x31, 0xF2, 0xCF, 0xDE, 0x4D, 0x80,
- 0x70, 0x91, 0x7E, 0x0C, 0xF7, 0x26, 0x3A, 0x92,
- 0x4F, 0x18, 0x83, 0xC0, 0x8F, 0x59, 0x01, 0xA5,
- 0x88, 0xD1, 0xDB, 0x26, 0x71, 0x27, 0x16, 0xF5,
- 0xEE, 0x10, 0x82, 0xAC, 0x68, 0x26, 0x9B, 0xE2,
- 0x6D, 0xD8, 0x9A, 0x80, 0xDF, 0x04, 0x31, 0xD5,
- 0xF1, 0x35, 0x5C, 0x3B, 0xDD, 0x9A, 0x65, 0xBA,
- 0x58, 0x34, 0x85, 0x61, 0x1C, 0x42, 0x10, 0x76,
- 0x73, 0x02, 0x42, 0xC9, 0x23, 0x18, 0x8E, 0xB4,
- 0x6F, 0xB4, 0xA3, 0x54, 0x6E, 0x88, 0x3B, 0x62,
- 0x7C, 0x02, 0x8D, 0x4C, 0x9F, 0xC8, 0x45, 0xF4,
- 0xC9, 0xDE, 0x4F, 0xEB, 0x22, 0x83, 0x1B, 0xE4,
- 0x49, 0x37, 0xE4, 0xAD, 0xE7, 0xCD, 0x21, 0x54,
- 0xBC, 0x1C, 0xC2, 0x04, 0x97, 0xB4, 0x10, 0x61,
- 0xF0, 0xE4, 0xEF, 0x27, 0x63, 0x3A, 0xDA, 0x91,
- 0x41, 0x25, 0x62, 0x1C, 0x5C, 0xB6, 0x38, 0x4A,
- 0x88, 0x71, 0x59, 0x5A, 0x8D, 0xA0, 0x09, 0xAF,
- 0x72, 0x94, 0xD7, 0x79, 0x5C, 0x60, 0x7C, 0x8F,
- 0x4C, 0xF5, 0xD9, 0xA1, 0x39, 0x6D, 0x81, 0x28,
- 0xEF, 0x13, 0x28, 0xDF, 0xF5, 0x3E, 0xF7, 0x8E,
- 0x09, 0x9C, 0x78, 0x18, 0x79, 0xB8, 0x68, 0xD7,
- 0xA8, 0x29, 0x62, 0xAD, 0xDE, 0xE1, 0x61, 0x76,
- 0x1B, 0x05, 0x16, 0xCD, 0xBF, 0x02, 0x8E, 0xA6,
- 0x43, 0x6E, 0x92, 0x55, 0x4F, 0x60, 0x9C, 0x03,
- 0xB8, 0x4F, 0xA3, 0x02, 0xAC, 0xA8, 0xA7, 0x0C,
- 0x1E, 0xB5, 0x6B, 0xF8, 0xC8, 0x4D, 0xDE, 0xD2,
- 0xB0, 0x29, 0x6E, 0x40, 0xE6, 0xD6, 0xC9, 0xE6,
- 0xB9, 0x0F, 0xB6, 0x63, 0xF5, 0xAA, 0x2B, 0x96,
- 0xA7, 0x16, 0xAC, 0x4E, 0x0A, 0x33, 0x1C, 0xA6,
- 0xE6, 0xBD, 0x8A, 0xCF, 0x40, 0xA9, 0xB2, 0xFA,
- 0x63, 0x27, 0xFD, 0x9B, 0xD9, 0xFC, 0xD5, 0x87,
- 0x8D, 0x4C, 0xB6, 0xA4, 0xCB, 0xE7, 0x74, 0x55,
- 0xF4, 0xFB, 0x41, 0x25, 0xB5, 0x4B, 0x0A, 0x1B,
- 0xB1, 0xD6, 0xB7, 0xD9, 0x47, 0x2A, 0xC3, 0x98,
- 0x6A, 0xC4, 0x03, 0x73, 0x1F, 0x93, 0x6E, 0x53,
- 0x19, 0x25, 0x64, 0x15, 0x83, 0xF9, 0x73, 0x2A,
- 0x74, 0xB4, 0x93, 0x69, 0xC4, 0x72, 0xFC, 0x26,
- 0xA2, 0x9F, 0x43, 0x45, 0xDD, 0xB9, 0xEF, 0x36,
- 0xC8, 0x3A, 0xCD, 0x99, 0x9B, 0x54, 0x1A, 0x36,
- 0xC1, 0x59, 0xF8, 0x98, 0xA8, 0xCC, 0x28, 0x0D,
- 0x73, 0x4C, 0xEE, 0x98, 0xCB, 0x7C, 0x58, 0x7E,
- 0x20, 0x75, 0x1E, 0xB7, 0xC9, 0xF8, 0xF2, 0x0E,
- 0x63, 0x9E, 0x05, 0x78, 0x1A, 0xB6, 0xA8, 0x7A,
- 0xF9, 0x98, 0x6A, 0xA6, 0x46, 0x84, 0x2E, 0xF6,
- 0x4B, 0xDC, 0x9B, 0x8F, 0x9B, 0x8F, 0xEE, 0xB4,
- 0xAA, 0x3F, 0xEE, 0xC0, 0x37, 0x27, 0x76, 0xC7,
- 0x95, 0xBB, 0x26, 0x74, 0x69, 0x12, 0x7F, 0xF1,
- 0xBB, 0xFF, 0xAE, 0xB5, 0x99, 0x6E, 0xCB, 0x0C
-};
-
-/* AES128-CTR-SHA1 test vector */
-static const struct blockcipher_test_data aes_test_data_1 = {
- .crypto_algo = RTE_CRYPTO_CIPHER_AES_CTR,
- .cipher_key = {
- .data = {
- 0x2B, 0x7E, 0x15, 0x16, 0x28, 0xAE, 0xD2, 0xA6,
- 0xAB, 0xF7, 0x15, 0x88, 0x09, 0xCF, 0x4F, 0x3C
- },
- .len = 16
- },
- .iv = {
- .data = {
- 0xF0, 0xF1, 0xF2, 0xF3, 0xF4, 0xF5, 0xF6, 0xF7,
- 0xF8, 0xF9, 0xFA, 0xFB, 0xFC, 0xFD, 0xFE, 0xFF
- },
- .len = 16
- },
- .plaintext = {
- .data = plaintext_aes128ctr,
- .len = 64
- },
- .ciphertext = {
- .data = ciphertext64_aes128ctr,
- .len = 64
- },
- .auth_algo = RTE_CRYPTO_AUTH_SHA1_HMAC,
- .auth_key = {
- .data = {
- 0xF8, 0x2A, 0xC7, 0x54, 0xDB, 0x96, 0x18, 0xAA,
- 0xC3, 0xA1, 0x53, 0xF6, 0x1F, 0x17, 0x60, 0xBD,
- 0xDE, 0xF4, 0xDE, 0xAD
- },
- .len = 20
- },
- .digest = {
- .data = {
- 0x9B, 0x6F, 0x0C, 0x43, 0xF5, 0xC1, 0x3E, 0xB0,
- 0xB1, 0x70, 0xB8, 0x2B, 0x33, 0x09, 0xD2, 0xB2,
- 0x56, 0x20, 0xFB, 0xFE
- },
- .len = 20,
- .truncated_len = 12
- }
-};
-
-/** AES-192-CTR XCBC test vector */
-static const struct blockcipher_test_data aes_test_data_2 = {
- .crypto_algo = RTE_CRYPTO_CIPHER_AES_CTR,
- .cipher_key = {
- .data = {
- 0xCB, 0xC5, 0xED, 0x5B, 0xE7, 0x7C, 0xBD, 0x8C,
- 0x50, 0xD9, 0x30, 0xF2, 0xB5, 0x6A, 0x0E, 0x5F,
- 0xAA, 0xAE, 0xAD, 0xA2, 0x1F, 0x49, 0x52, 0xD4
- },
- .len = 24
- },
- .iv = {
- .data = {
- 0x3F, 0x69, 0xA8, 0xCD, 0xE8, 0xF0, 0xEF, 0x40,
- 0xB8, 0x7A, 0x4B, 0xED, 0x2B, 0xAF, 0xBF, 0x57
- },
- .len = 16
- },
- .plaintext = {
- .data = plaintext_aes192ctr,
- .len = 64
- },
- .ciphertext = {
- .data = ciphertext64_aes192ctr,
- .len = 64
- },
- .auth_algo = RTE_CRYPTO_AUTH_AES_XCBC_MAC,
- .auth_key = {
- .data = {
- 0x87, 0x61, 0x54, 0x53, 0xC4, 0x6D, 0xDD, 0x51,
- 0xE1, 0x9F, 0x86, 0x64, 0x39, 0x0A, 0xE6, 0x59
- },
- .len = 16
- },
- .digest = {
- .data = {
- 0xCA, 0x33, 0xB3, 0x3B, 0x16, 0x94, 0xAA, 0x55,
- 0x36, 0x6B, 0x45, 0x46
- },
- .len = 12,
- .truncated_len = 12
- }
-};
-
-/** AES-256-CTR SHA1 test vector */
-static const struct blockcipher_test_data aes_test_data_3 = {
- .crypto_algo = RTE_CRYPTO_CIPHER_AES_CTR,
- .cipher_key = {
- .data = {
- 0x60, 0x3D, 0xEB, 0x10, 0x15, 0xCA, 0x71, 0xBE,
- 0x2B, 0x73, 0xAE, 0xF0, 0x85, 0x7D, 0x77, 0x81,
- 0x1F, 0x35, 0x2C, 0x07, 0x3B, 0x61, 0x08, 0xD7,
- 0x2D, 0x98, 0x10, 0xA3, 0x09, 0x14, 0xDF, 0xF4
- },
- .len = 32
- },
- .iv = {
- .data = {
- 0xF0, 0xF1, 0xF2, 0xF3, 0xF4, 0xF5, 0xF6, 0xF7,
- 0xF8, 0xF9, 0xFA, 0xFB, 0xFC, 0xFD, 0xFE, 0xFF
- },
- .len = 16
- },
- .plaintext = {
- .data = plaintext_aes256ctr,
- .len = 64
- },
- .ciphertext = {
- .data = ciphertext64_aes256ctr,
- .len = 64
- },
- .auth_algo = RTE_CRYPTO_AUTH_SHA1_HMAC,
- .auth_key = {
- .data = {
- 0xF8, 0x2A, 0xC7, 0x54, 0xDB, 0x96, 0x18, 0xAA,
- 0xC3, 0xA1, 0x53, 0xF6, 0x1F, 0x17, 0x60, 0xBD,
- 0xDE, 0xF4, 0xDE, 0xAD
- },
- .len = 20
- },
- .digest = {
- .data = {
- 0x3B, 0x1A, 0x9D, 0x82, 0x35, 0xD5, 0xDD, 0x64,
- 0xCC, 0x1B, 0xA9, 0xC0, 0xEB, 0xE9, 0x42, 0x16,
- 0xE7, 0x87, 0xA3, 0xEF
- },
- .len = 20,
- .truncated_len = 12
- }
-};
-
-/** AES-128-CBC SHA1 test vector */
-static const struct blockcipher_test_data aes_test_data_4 = {
- .crypto_algo = RTE_CRYPTO_CIPHER_AES_CBC,
- .cipher_key = {
- .data = {
- 0xE4, 0x23, 0x33, 0x8A, 0x35, 0x64, 0x61, 0xE2,
- 0x49, 0x03, 0xDD, 0xC6, 0xB8, 0xCA, 0x55, 0x7A
- },
- .len = 16
- },
- .iv = {
- .data = {
- 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
- 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F
- },
- .len = 16
- },
- .plaintext = {
- .data = plaintext_aes_common,
- .len = 512
- },
- .ciphertext = {
- .data = ciphertext512_aes128cbc,
- .len = 512
- },
- .auth_algo = RTE_CRYPTO_AUTH_SHA1_HMAC,
- .auth_key = {
- .data = {
- 0xF8, 0x2A, 0xC7, 0x54, 0xDB, 0x96, 0x18, 0xAA,
- 0xC3, 0xA1, 0x53, 0xF6, 0x1F, 0x17, 0x60, 0xBD,
- 0xDE, 0xF4, 0xDE, 0xAD
- },
- .len = 20
- },
- .digest = {
- .data = {
- 0x9A, 0x4F, 0x88, 0x1B, 0xB6, 0x8F, 0xD8, 0x60,
- 0x42, 0x1A, 0x7D, 0x3D, 0xF5, 0x82, 0x80, 0xF1,
- 0x18, 0x8C, 0x1D, 0x32
- },
- .len = 20,
- .truncated_len = 12
- }
-};
-
-/** AES-128-CBC SHA256 test vector */
-static const struct blockcipher_test_data aes_test_data_5 = {
- .crypto_algo = RTE_CRYPTO_CIPHER_AES_CBC,
- .cipher_key = {
- .data = {
- 0xE4, 0x23, 0x33, 0x8A, 0x35, 0x64, 0x61, 0xE2,
- 0x49, 0x03, 0xDD, 0xC6, 0xB8, 0xCA, 0x55, 0x7A
- },
- .len = 16
- },
- .iv = {
- .data = {
- 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
- 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F
- },
- .len = 16
- },
- .plaintext = {
- .data = plaintext_aes_common,
- .len = 512
- },
- .ciphertext = {
- .data = ciphertext512_aes128cbc,
- .len = 512
- },
- .auth_algo = RTE_CRYPTO_AUTH_SHA256_HMAC,
- .auth_key = {
- .data = {
- 0x42, 0x1A, 0x7D, 0x3D, 0xF5, 0x82, 0x80, 0xF1,
- 0xF1, 0x35, 0x5C, 0x3B, 0xDD, 0x9A, 0x65, 0xBA,
- 0x58, 0x34, 0x85, 0x61, 0x1C, 0x42, 0x10, 0x76,
- 0x9A, 0x4F, 0x88, 0x1B, 0xB6, 0x8F, 0xD8, 0x60
- },
- .len = 32
- },
- .digest = {
- .data = {
- 0xC8, 0x57, 0x57, 0x31, 0x03, 0xE0, 0x03, 0x55,
- 0x07, 0xC8, 0x9E, 0x7F, 0x48, 0x9A, 0x61, 0x9A,
- 0x68, 0xEE, 0x03, 0x0E, 0x71, 0x75, 0xC7, 0xF4,
- 0x2E, 0x45, 0x26, 0x32, 0x7C, 0x12, 0x15, 0x15
- },
- .len = 32,
- .truncated_len = 16
- }
-};
-
-/** AES-128-CBC SHA512 test vector */
-static const struct blockcipher_test_data aes_test_data_6 = {
- .crypto_algo = RTE_CRYPTO_CIPHER_AES_CBC,
- .cipher_key = {
- .data = {
- 0xE4, 0x23, 0x33, 0x8A, 0x35, 0x64, 0x61, 0xE2,
- 0x49, 0x03, 0xDD, 0xC6, 0xB8, 0xCA, 0x55, 0x7A
- },
- .len = 16
- },
- .iv = {
- .data = {
- 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
- 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F
- },
- .len = 16
- },
- .plaintext = {
- .data = plaintext_aes_common,
- .len = 512
- },
- .ciphertext = {
- .data = ciphertext512_aes128cbc,
- .len = 512
- },
- .auth_algo = RTE_CRYPTO_AUTH_SHA512_HMAC,
- .auth_key = {
- .data = {
- 0x42, 0x1A, 0x7D, 0x3D, 0xF5, 0x82, 0x80, 0xF1,
- 0xF1, 0x35, 0x5C, 0x3B, 0xDD, 0x9A, 0x65, 0xBA,
- 0x58, 0x34, 0x85, 0x65, 0x1C, 0x42, 0x50, 0x76,
- 0x9A, 0xAF, 0x88, 0x1B, 0xB6, 0x8F, 0xF8, 0x60,
- 0xA2, 0x5A, 0x7F, 0x3F, 0xF4, 0x72, 0x70, 0xF1,
- 0xF5, 0x35, 0x4C, 0x3B, 0xDD, 0x90, 0x65, 0xB0,
- 0x47, 0x3A, 0x75, 0x61, 0x5C, 0xA2, 0x10, 0x76,
- 0x9A, 0xAF, 0x77, 0x5B, 0xB6, 0x7F, 0xF7, 0x60
- },
- .len = 64
- },
- .digest = {
- .data = {
- 0x5D, 0x54, 0x66, 0xC1, 0x6E, 0xBC, 0x04, 0xB8,
- 0x46, 0xB8, 0x08, 0x6E, 0xE0, 0xF0, 0x43, 0x48,
- 0x37, 0x96, 0x9C, 0xC6, 0x9C, 0xC2, 0x1E, 0xE8,
- 0xF2, 0x0C, 0x0B, 0xEF, 0x86, 0xA2, 0xE3, 0x70,
- 0x95, 0xC8, 0xB3, 0x06, 0x47, 0xA9, 0x90, 0xE8,
- 0xA0, 0xC6, 0x72, 0x69, 0x05, 0xC0, 0x0D, 0x0E,
- 0x21, 0x96, 0x65, 0x93, 0x74, 0x43, 0x2A, 0x1D,
- 0x2E, 0xBF, 0xC2, 0xC2, 0xEE, 0xCC, 0x2F, 0x0A
- },
- .len = 64,
- .truncated_len = 32
- }
-};
-
-/** AES-128-CBC XCBC test vector */
-static const struct blockcipher_test_data aes_test_data_7 = {
- .crypto_algo = RTE_CRYPTO_CIPHER_AES_CBC,
- .cipher_key = {
- .data = {
- 0xE4, 0x23, 0x33, 0x8A, 0x35, 0x64, 0x61, 0xE2,
- 0x49, 0x03, 0xDD, 0xC6, 0xB8, 0xCA, 0x55, 0x7A
- },
- .len = 16
- },
- .iv = {
- .data = {
- 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
- 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F
- },
- .len = 16
- },
- .plaintext = {
- .data = plaintext_aes_common,
- .len = 512
- },
- .ciphertext = {
- .data = ciphertext512_aes128cbc,
- .len = 512
- },
- .auth_algo = RTE_CRYPTO_AUTH_AES_XCBC_MAC,
- .auth_key = {
- .data = {
- 0x87, 0x61, 0x54, 0x53, 0xC4, 0x6D, 0xDD, 0x51,
- 0xE1, 0x9F, 0x86, 0x64, 0x39, 0x0A, 0xE6, 0x59
- },
- .len = 16
- },
- .digest = {
- .data = {
- 0xE0, 0xAC, 0x9A, 0xC4, 0x22, 0x64, 0x35, 0x89,
- 0x77, 0x1D, 0x8B, 0x75
- },
- .len = 12,
- .truncated_len = 12
- }
-};
-
-/** AES-128-CBC SHA224 test vector */
-static const struct blockcipher_test_data aes_test_data_8 = {
- .crypto_algo = RTE_CRYPTO_CIPHER_AES_CBC,
- .cipher_key = {
- .data = {
- 0xE4, 0x23, 0x33, 0x8A, 0x35, 0x64, 0x61, 0xE2,
- 0x49, 0x03, 0xDD, 0xC6, 0xB8, 0xCA, 0x55, 0x7A
- },
- .len = 16
- },
- .iv = {
- .data = {
- 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
- 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F
- },
- .len = 16
- },
- .plaintext = {
- .data = plaintext_aes_common,
- .len = 512
- },
- .ciphertext = {
- .data = ciphertext512_aes128cbc,
- .len = 512
- },
- .auth_algo = RTE_CRYPTO_AUTH_SHA224_HMAC,
- .auth_key = {
- .data = {
- 0x42, 0x1A, 0x7D, 0x3D, 0xF5, 0x82, 0x80, 0xF1,
- 0xF1, 0x35, 0x5C, 0x3B, 0xDD, 0x9A, 0x65, 0xBA,
- 0x58, 0x34, 0x85, 0x65, 0x1C, 0x42, 0x50, 0x76,
- 0x9A, 0xAF, 0x88, 0x1B, 0xB6, 0x8F, 0xF8, 0x60,
- 0xA2, 0x5A, 0x7F, 0x3F, 0xF4, 0x72, 0x70, 0xF1,
- 0xF5, 0x35, 0x4C, 0x3B, 0xDD, 0x90, 0x65, 0xB0,
- 0x47, 0x3A, 0x75, 0x61, 0x5C, 0xA2, 0x10, 0x76,
- 0x9A, 0xAF, 0x77, 0x5B, 0xB6, 0x7F, 0xF7, 0x60
- },
- .len = 64
- },
- .digest = {
- .data = {
- 0xA3, 0xCA, 0xC7, 0x1D, 0xA8, 0x61, 0x30, 0x98,
- 0x3B, 0x8F, 0x01, 0x19, 0xAE, 0x8D, 0xBD, 0x34,
- 0x40, 0x63, 0xA8, 0x2F, 0xDF, 0x85, 0x2B, 0x7F,
- 0x63, 0x7C, 0xDD, 0xB7
- },
- .len = 28,
- .truncated_len = 14
- }
-};
-
-/** AES-128-CBC SHA384 test vector */
-static const struct blockcipher_test_data aes_test_data_9 = {
- .crypto_algo = RTE_CRYPTO_CIPHER_AES_CBC,
- .cipher_key = {
- .data = {
- 0xE4, 0x23, 0x33, 0x8A, 0x35, 0x64, 0x61, 0xE2,
- 0x49, 0x03, 0xDD, 0xC6, 0xB8, 0xCA, 0x55, 0x7A
- },
- .len = 16
- },
- .iv = {
- .data = {
- 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
- 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F
- },
- .len = 16
- },
- .plaintext = {
- .data = plaintext_aes_common,
- .len = 512
- },
- .ciphertext = {
- .data = ciphertext512_aes128cbc,
- .len = 512
- },
- .auth_algo = RTE_CRYPTO_AUTH_SHA384_HMAC,
- .auth_key = {
- .data = {
- 0x42, 0x1A, 0x7D, 0x3D, 0xF5, 0x82, 0x80, 0xF1,
- 0xF1, 0x35, 0x5C, 0x3B, 0xDD, 0x9A, 0x65, 0xBA,
- 0x58, 0x34, 0x85, 0x65, 0x1C, 0x42, 0x50, 0x76,
- 0x9A, 0xAF, 0x88, 0x1B, 0xB6, 0x8F, 0xF8, 0x60,
- 0xA2, 0x5A, 0x7F, 0x3F, 0xF4, 0x72, 0x70, 0xF1,
- 0xF5, 0x35, 0x4C, 0x3B, 0xDD, 0x90, 0x65, 0xB0,
- 0x47, 0x3A, 0x75, 0x61, 0x5C, 0xA2, 0x10, 0x76,
- 0x9A, 0xAF, 0x77, 0x5B, 0xB6, 0x7F, 0xF7, 0x60,
- 0x42, 0x1A, 0x7D, 0x3D, 0xF5, 0x82, 0x80, 0xF1,
- 0xF1, 0x35, 0x5C, 0x3B, 0xDD, 0x9A, 0x65, 0xBA,
- 0x58, 0x34, 0x85, 0x65, 0x1C, 0x42, 0x50, 0x76,
- 0x9A, 0xAF, 0x88, 0x1B, 0xB6, 0x8F, 0xF8, 0x60,
- 0xA2, 0x5A, 0x7F, 0x3F, 0xF4, 0x72, 0x70, 0xF1,
- 0xF5, 0x35, 0x4C, 0x3B, 0xDD, 0x90, 0x65, 0xB0,
- 0x47, 0x3A, 0x75, 0x61, 0x5C, 0xA2, 0x10, 0x76,
- 0x9A, 0xAF, 0x77, 0x5B, 0xB6, 0x7F, 0xF7, 0x60
- },
- .len = 128
- },
- .digest = {
- .data = {
- 0x23, 0x60, 0xC8, 0xB1, 0x2D, 0x6C, 0x1E, 0x72,
- 0x25, 0xAB, 0xF9, 0xC3, 0x9A, 0xA9, 0x4F, 0x8C,
- 0x56, 0x38, 0x65, 0x0E, 0x74, 0xD5, 0x45, 0x9D,
- 0xA3, 0xFD, 0x7E, 0x6D, 0x9E, 0x74, 0x88, 0x9D,
- 0xA7, 0x12, 0x9D, 0xD8, 0x81, 0x3C, 0x86, 0x2F,
- 0x4D, 0xF9, 0x6F, 0x0A, 0xB0, 0xC9, 0xEB, 0x0B
- },
- .len = 48,
- .truncated_len = 24
- }
-};
-
-static const uint8_t ciphertext512_aes192cbc[] = {
- 0x45, 0xEE, 0x9A, 0xEA, 0x3C, 0x03, 0xFC, 0x4C,
- 0x84, 0x36, 0xB0, 0xDA, 0xB0, 0xDC, 0xF3, 0x5B,
- 0x75, 0xA7, 0xBE, 0x0E, 0xC0, 0x8D, 0x6C, 0xF8,
- 0xC1, 0x0F, 0xD0, 0x35, 0x1D, 0x82, 0xAE, 0x7C,
- 0x57, 0xC5, 0x7A, 0x55, 0x87, 0x1B, 0xD4, 0x03,
- 0x0A, 0x64, 0xC9, 0xE0, 0xF4, 0xC7, 0x6F, 0x57,
- 0x52, 0xC6, 0x73, 0xBA, 0x84, 0x0B, 0x5B, 0x89,
- 0x21, 0xD2, 0x9B, 0x88, 0x68, 0xF5, 0xA9, 0x7F,
- 0x3F, 0x49, 0xEB, 0xF4, 0xD4, 0x52, 0xD2, 0x64,
- 0x80, 0xB2, 0x53, 0xDA, 0x19, 0xF6, 0x10, 0x24,
- 0x23, 0x26, 0x7A, 0x7C, 0x07, 0x57, 0x4B, 0x0E,
- 0x58, 0x49, 0x61, 0xD1, 0xDC, 0x9A, 0x32, 0x6B,
- 0x0F, 0x43, 0x9E, 0x4D, 0xB4, 0x07, 0x4E, 0xB3,
- 0x51, 0x74, 0xDE, 0x29, 0xBC, 0x98, 0xF9, 0xDF,
- 0x78, 0x9A, 0x18, 0x9C, 0xD6, 0x7A, 0x55, 0x7C,
- 0xE6, 0x1D, 0x5C, 0x1A, 0x99, 0xD2, 0xC3, 0x7B,
- 0x9F, 0x96, 0x74, 0x2D, 0xE0, 0xEF, 0xD1, 0xE3,
- 0x08, 0x9F, 0xAF, 0xE6, 0xED, 0xCA, 0xE1, 0xEA,
- 0x23, 0x6F, 0x7C, 0x81, 0xA8, 0xC0, 0x5B, 0x8B,
- 0x53, 0x90, 0x51, 0x2D, 0x0F, 0xF6, 0x7D, 0xA7,
- 0x1C, 0xBD, 0x83, 0x84, 0x54, 0xA4, 0x15, 0xFB,
- 0x3E, 0x25, 0xA7, 0x3A, 0x0A, 0x73, 0xD9, 0x88,
- 0x6F, 0x80, 0x78, 0x95, 0x7F, 0x60, 0xAA, 0x86,
- 0x8A, 0xFC, 0xDF, 0xC1, 0xCB, 0xDE, 0xBB, 0x25,
- 0x52, 0x20, 0xC6, 0x79, 0xD4, 0x0F, 0x25, 0xE7,
- 0xDB, 0xB2, 0x17, 0xA4, 0x6F, 0x3C, 0x6F, 0x91,
- 0xF6, 0x44, 0x1E, 0xB6, 0x85, 0xBC, 0x7A, 0x14,
- 0x10, 0x72, 0xBD, 0x16, 0x63, 0x39, 0x9E, 0x7B,
- 0x84, 0x5B, 0x17, 0x61, 0xB1, 0x5D, 0x82, 0x0B,
- 0x6D, 0x37, 0xD7, 0x79, 0xB8, 0x24, 0x91, 0x30,
- 0x82, 0x91, 0x02, 0xB1, 0x18, 0x4B, 0xE0, 0xF4,
- 0x13, 0x1B, 0xB2, 0x4C, 0xDA, 0xB8, 0x99, 0x96,
- 0x83, 0x2F, 0xBE, 0x53, 0x8D, 0xDE, 0xFA, 0xAD,
- 0xF6, 0x5C, 0xDB, 0xE5, 0x66, 0x26, 0x8F, 0x13,
- 0x2B, 0x76, 0x47, 0x73, 0xDE, 0x1A, 0x74, 0xA6,
- 0x30, 0xAF, 0x42, 0xA0, 0xE5, 0xD2, 0x8F, 0xC2,
- 0xED, 0x3E, 0x9E, 0x29, 0x54, 0x3C, 0xDE, 0x9F,
- 0x5D, 0x30, 0x2B, 0x63, 0xFB, 0xE3, 0xB1, 0x07,
- 0xEE, 0x74, 0x4A, 0xAF, 0xB1, 0x20, 0x8D, 0xEC,
- 0xE6, 0x78, 0x16, 0x8D, 0xA4, 0x6E, 0x34, 0x7D,
- 0x47, 0xFB, 0x0B, 0xC1, 0x32, 0xD7, 0x0D, 0x6C,
- 0x6F, 0x93, 0x9C, 0x5E, 0xEF, 0x1F, 0x9C, 0x45,
- 0x80, 0x6B, 0x74, 0xA6, 0x81, 0xF2, 0xF6, 0xFA,
- 0xAA, 0x9D, 0x4F, 0xCA, 0xB5, 0x90, 0x59, 0xB0,
- 0x3B, 0xF2, 0xF0, 0x75, 0xFD, 0x8A, 0xD8, 0x97,
- 0x65, 0x88, 0x56, 0x4C, 0x44, 0xDF, 0x73, 0xF7,
- 0x56, 0x9C, 0x48, 0x7E, 0xB0, 0x1F, 0x1D, 0x7D,
- 0x6A, 0x11, 0xF5, 0xC2, 0xF4, 0x17, 0xEF, 0x58,
- 0xD8, 0x2A, 0xAF, 0x56, 0x2F, 0xCF, 0xEC, 0xA4,
- 0x58, 0x8B, 0x60, 0xCE, 0xD4, 0x0F, 0x9C, 0x21,
- 0xEC, 0x3E, 0x74, 0x7B, 0x81, 0x3D, 0x69, 0xC6,
- 0x5E, 0x12, 0x83, 0xE9, 0xEF, 0x81, 0x58, 0x36,
- 0x6A, 0x60, 0x0F, 0x54, 0x28, 0x11, 0xF9, 0x64,
- 0x36, 0xAD, 0x79, 0xF5, 0x1C, 0x74, 0xD0, 0xC3,
- 0x7B, 0x61, 0xE1, 0x92, 0xB0, 0x13, 0x91, 0x87,
- 0x32, 0x1F, 0xF2, 0x5A, 0xDA, 0x25, 0x69, 0xEB,
- 0xD7, 0x32, 0x7F, 0xF5, 0x23, 0x21, 0x54, 0x47,
- 0x7B, 0x1B, 0x33, 0xB0, 0x3D, 0xF6, 0xE2, 0x7E,
- 0x3E, 0xA2, 0x9E, 0xCA, 0x48, 0x0B, 0x4A, 0x29,
- 0x81, 0xD4, 0x4E, 0xD5, 0x69, 0xFB, 0xCD, 0x37,
- 0x8A, 0xC1, 0x5B, 0x50, 0xFF, 0xB5, 0x7D, 0x43,
- 0x0F, 0xAE, 0xA6, 0xC2, 0xE5, 0x8F, 0x45, 0xB2,
- 0x85, 0x99, 0x02, 0xA2, 0x9B, 0xBE, 0x90, 0x43,
- 0x4F, 0x2F, 0x50, 0xE2, 0x77, 0x62, 0xD9, 0xCC
-};
-
-/** AES-192-CBC test vector */
-static const struct blockcipher_test_data aes_test_data_10 = {
- .crypto_algo = RTE_CRYPTO_CIPHER_AES_CBC,
- .cipher_key = {
- .data = {
- 0xE4, 0x23, 0x33, 0x8A, 0x35, 0x64, 0x61, 0xE2,
- 0x49, 0x03, 0xDD, 0xC6, 0xB8, 0xCA, 0x55, 0x7A,
- 0xD4, 0xC3, 0xA3, 0xAA, 0x33, 0x62, 0x61, 0xE0
- },
- .len = 24
- },
- .iv = {
- .data = {
- 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
- 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F
- },
- .len = 16
- },
- .plaintext = {
- .data = plaintext_aes_common,
- .len = 512
- },
- .ciphertext = {
- .data = ciphertext512_aes192cbc,
- .len = 512
- }
-};
-
-static const uint8_t ciphertext512_aes256cbc[] = {
- 0xF3, 0xDD, 0xF0, 0x0B, 0xFF, 0xA2, 0x6A, 0x04,
- 0xBE, 0xDA, 0x52, 0xA6, 0xFE, 0x6B, 0xA6, 0xA7,
- 0x48, 0x1D, 0x7D, 0x98, 0x65, 0xDB, 0xEF, 0x06,
- 0x26, 0xB5, 0x8E, 0xEB, 0x05, 0x0E, 0x77, 0x98,
- 0x17, 0x8E, 0xD0, 0xD4, 0x7B, 0x92, 0x8F, 0x5C,
- 0xD0, 0x74, 0x5C, 0xA8, 0x4B, 0x54, 0xB6, 0x2F,
- 0x83, 0x72, 0x2C, 0xFF, 0x72, 0xE9, 0xE4, 0x15,
- 0x4C, 0x32, 0xAF, 0xC8, 0xC9, 0x89, 0x3C, 0x6E,
- 0x31, 0xD5, 0xC0, 0x16, 0xC0, 0x31, 0x7D, 0x11,
- 0xAB, 0xCB, 0xDE, 0xD2, 0xD6, 0xAA, 0x76, 0x5E,
- 0xBA, 0xF6, 0xE2, 0x92, 0xCB, 0x86, 0x07, 0xFA,
- 0xD4, 0x9E, 0x83, 0xED, 0xFD, 0xB8, 0x70, 0x54,
- 0x6B, 0xBE, 0xEC, 0x72, 0xDD, 0x28, 0x5E, 0x95,
- 0x78, 0xA5, 0x28, 0x43, 0x3D, 0x6D, 0xB1, 0xD9,
- 0x69, 0x1F, 0xC9, 0x66, 0x0E, 0x32, 0x44, 0x08,
- 0xD2, 0xAE, 0x2C, 0x43, 0xF2, 0xD0, 0x7D, 0x26,
- 0x70, 0xE5, 0xA1, 0xCA, 0x37, 0xE9, 0x7D, 0xC7,
- 0xA3, 0xFA, 0x81, 0x91, 0x64, 0xAA, 0x64, 0x91,
- 0x9A, 0x95, 0x2D, 0xC9, 0xF9, 0xCE, 0xFE, 0x9F,
- 0xC4, 0xD8, 0x81, 0xBE, 0x57, 0x84, 0xC5, 0x02,
- 0xDB, 0x30, 0xC1, 0xD9, 0x0E, 0xA0, 0xA6, 0x00,
- 0xD6, 0xF3, 0x52, 0x7E, 0x0D, 0x23, 0x6B, 0x2B,
- 0x34, 0x99, 0x1F, 0x70, 0x27, 0x6D, 0x58, 0x84,
- 0x93, 0x77, 0xB8, 0x3E, 0xF1, 0x71, 0x58, 0x42,
- 0x8B, 0x2B, 0xC8, 0x6D, 0x05, 0x84, 0xFF, 0x4E,
- 0x85, 0xEF, 0x4A, 0x9D, 0x91, 0x6A, 0xD5, 0xE1,
- 0xAF, 0x01, 0xEB, 0x83, 0x8F, 0x23, 0x7C, 0x7F,
- 0x12, 0x91, 0x05, 0xF0, 0x4E, 0xD9, 0x17, 0x62,
- 0x75, 0xBB, 0xAC, 0x97, 0xEE, 0x3B, 0x4E, 0xC7,
- 0xE5, 0x92, 0xF8, 0x9D, 0x4C, 0xF9, 0xEE, 0x55,
- 0x18, 0xBB, 0xCC, 0xB4, 0xF2, 0x59, 0xB9, 0xFC,
- 0x7A, 0x0F, 0x98, 0xD4, 0x8B, 0xFE, 0xF7, 0x83,
- 0x46, 0xE2, 0x83, 0x33, 0x3E, 0x95, 0x8D, 0x17,
- 0x1E, 0x85, 0xF8, 0x8C, 0x51, 0xB0, 0x6C, 0xB5,
- 0x5E, 0x95, 0xBA, 0x4B, 0x69, 0x1B, 0x48, 0x69,
- 0x0B, 0x8F, 0xA5, 0x18, 0x13, 0xB9, 0x77, 0xD1,
- 0x80, 0x32, 0x32, 0x6D, 0x53, 0xA1, 0x95, 0x40,
- 0x96, 0x8A, 0xCC, 0xA3, 0x69, 0xF8, 0x9F, 0xB5,
- 0x8E, 0xD2, 0x68, 0x07, 0x4F, 0xA7, 0xEC, 0xF8,
- 0x20, 0x21, 0x58, 0xF8, 0xD8, 0x9E, 0x5F, 0x40,
- 0xBA, 0xB9, 0x76, 0x57, 0x3B, 0x17, 0xAD, 0xEE,
- 0xCB, 0xDF, 0x07, 0xC1, 0xDF, 0x66, 0xA8, 0x0D,
- 0xC2, 0xCE, 0x8F, 0x79, 0xC3, 0x32, 0xE0, 0x8C,
- 0xFE, 0x5A, 0xF3, 0x55, 0x27, 0x73, 0x6F, 0xA1,
- 0x54, 0xC6, 0xFC, 0x28, 0x9D, 0xBE, 0x97, 0xB9,
- 0x54, 0x97, 0x72, 0x3A, 0x61, 0xAF, 0x6F, 0xDE,
- 0xF8, 0x0E, 0xBB, 0x6B, 0x96, 0x84, 0xDD, 0x9B,
- 0x62, 0xBA, 0x47, 0xB5, 0xC9, 0x3B, 0x4E, 0x8C,
- 0x78, 0x2A, 0xCC, 0x0A, 0x69, 0x54, 0x25, 0x5E,
- 0x8B, 0xAC, 0x56, 0xD9, 0xFE, 0x48, 0xBA, 0xCE,
- 0xA9, 0xCE, 0xA6, 0x1D, 0xBF, 0x3E, 0x3C, 0x66,
- 0x40, 0x71, 0x79, 0xAD, 0x5B, 0x26, 0xAD, 0xBE,
- 0x58, 0x13, 0x64, 0x60, 0x7C, 0x05, 0xFC, 0xE3,
- 0x51, 0x7A, 0xF2, 0xCC, 0x54, 0x16, 0x2C, 0xA4,
- 0xCE, 0x5F, 0x59, 0x12, 0x77, 0xEB, 0xD9, 0x23,
- 0xE3, 0x86, 0xFB, 0xD7, 0x48, 0x76, 0x9D, 0xE3,
- 0x89, 0x87, 0x39, 0xFA, 0x7B, 0x21, 0x0B, 0x76,
- 0xB2, 0xED, 0x1C, 0x27, 0x4B, 0xD5, 0x27, 0x05,
- 0x8C, 0x7D, 0x58, 0x6C, 0xCA, 0xA5, 0x54, 0x9A,
- 0x0F, 0xCB, 0xE9, 0x88, 0x31, 0xAD, 0x49, 0xEE,
- 0x38, 0xFB, 0xC9, 0xFB, 0xB4, 0x7A, 0x00, 0x58,
- 0x20, 0x32, 0xD3, 0x53, 0x5A, 0xDD, 0x74, 0x95,
- 0x60, 0x59, 0x09, 0xAE, 0x7E, 0xEC, 0x74, 0xA3,
- 0xB7, 0x1C, 0x6D, 0xF2, 0xAE, 0x79, 0xA4, 0x7C
-};
-
-/** AES-256-CBC test vector */
-static const struct blockcipher_test_data aes_test_data_11 = {
- .crypto_algo = RTE_CRYPTO_CIPHER_AES_CBC,
- .cipher_key = {
- .data = {
- 0xE4, 0x23, 0x33, 0x8A, 0x35, 0x64, 0x61, 0xE2,
- 0x49, 0x03, 0xDD, 0xC6, 0xB8, 0xCA, 0x55, 0x7A,
- 0xD4, 0xC3, 0xA3, 0xAA, 0x33, 0x62, 0x61, 0xE0,
- 0x37, 0x07, 0xB8, 0x23, 0xA2, 0xA3, 0xB5, 0x8D
- },
- .len = 32
- },
- .iv = {
- .data = {
- 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
- 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F
- },
- .len = 16
- },
- .plaintext = {
- .data = plaintext_aes_common,
- .len = 512
- },
- .ciphertext = {
- .data = ciphertext512_aes256cbc,
- .len = 512
- }
-};
-
-static const struct blockcipher_test_case aes_chain_test_cases[] = {
- {
- .test_descr = "AES-128-CTR HMAC-SHA1 Encryption Digest",
- .test_data = &aes_test_data_1,
- .op_mask = BLOCKCIPHER_TEST_OP_ENC_AUTH_GEN,
- .pmd_mask = BLOCKCIPHER_TEST_TARGET_PMD_MB |
- BLOCKCIPHER_TEST_TARGET_PMD_OPENSSL |
- BLOCKCIPHER_TEST_TARGET_PMD_QAT
- },
- {
- .test_descr = "AES-128-CTR HMAC-SHA1 Decryption Digest "
- "Verify",
- .test_data = &aes_test_data_1,
- .op_mask = BLOCKCIPHER_TEST_OP_AUTH_VERIFY_DEC,
- .pmd_mask = BLOCKCIPHER_TEST_TARGET_PMD_MB |
- BLOCKCIPHER_TEST_TARGET_PMD_OPENSSL |
- BLOCKCIPHER_TEST_TARGET_PMD_QAT
- },
- {
- .test_descr = "AES-192-CTR XCBC Encryption Digest",
- .test_data = &aes_test_data_2,
- .op_mask = BLOCKCIPHER_TEST_OP_ENC_AUTH_GEN,
- .pmd_mask = BLOCKCIPHER_TEST_TARGET_PMD_MB |
- BLOCKCIPHER_TEST_TARGET_PMD_QAT
- },
- {
- .test_descr = "AES-192-CTR XCBC Decryption Digest Verify",
- .test_data = &aes_test_data_2,
- .op_mask = BLOCKCIPHER_TEST_OP_AUTH_VERIFY_DEC,
- .pmd_mask = BLOCKCIPHER_TEST_TARGET_PMD_MB |
- BLOCKCIPHER_TEST_TARGET_PMD_QAT
- },
- {
- .test_descr = "AES-256-CTR HMAC-SHA1 Encryption Digest",
- .test_data = &aes_test_data_3,
- .op_mask = BLOCKCIPHER_TEST_OP_ENC_AUTH_GEN,
- .pmd_mask = BLOCKCIPHER_TEST_TARGET_PMD_MB |
- BLOCKCIPHER_TEST_TARGET_PMD_OPENSSL |
- BLOCKCIPHER_TEST_TARGET_PMD_QAT
- },
- {
- .test_descr = "AES-256-CTR HMAC-SHA1 Decryption Digest "
- "Verify",
- .test_data = &aes_test_data_3,
- .op_mask = BLOCKCIPHER_TEST_OP_AUTH_VERIFY_DEC,
- .pmd_mask = BLOCKCIPHER_TEST_TARGET_PMD_MB |
- BLOCKCIPHER_TEST_TARGET_PMD_OPENSSL |
- BLOCKCIPHER_TEST_TARGET_PMD_QAT
- },
- {
- .test_descr = "AES-128-CBC HMAC-SHA1 Encryption Digest",
- .test_data = &aes_test_data_4,
- .op_mask = BLOCKCIPHER_TEST_OP_ENC_AUTH_GEN,
- .pmd_mask = BLOCKCIPHER_TEST_TARGET_PMD_MB |
- BLOCKCIPHER_TEST_TARGET_PMD_OPENSSL |
- BLOCKCIPHER_TEST_TARGET_PMD_QAT
- },
- {
- .test_descr = "AES-128-CBC HMAC-SHA1 Decryption Digest "
- "Verify",
- .test_data = &aes_test_data_4,
- .op_mask = BLOCKCIPHER_TEST_OP_AUTH_VERIFY_DEC,
- .pmd_mask = BLOCKCIPHER_TEST_TARGET_PMD_MB |
- BLOCKCIPHER_TEST_TARGET_PMD_OPENSSL |
- BLOCKCIPHER_TEST_TARGET_PMD_QAT
- },
- {
- .test_descr = "AES-128-CBC HMAC-SHA256 Encryption Digest",
- .test_data = &aes_test_data_5,
- .op_mask = BLOCKCIPHER_TEST_OP_ENC_AUTH_GEN,
- .pmd_mask = BLOCKCIPHER_TEST_TARGET_PMD_MB |
- BLOCKCIPHER_TEST_TARGET_PMD_OPENSSL |
- BLOCKCIPHER_TEST_TARGET_PMD_QAT
- },
- {
- .test_descr = "AES-128-CBC HMAC-SHA256 Decryption Digest "
- "Verify",
- .test_data = &aes_test_data_5,
- .op_mask = BLOCKCIPHER_TEST_OP_AUTH_VERIFY_DEC,
- .pmd_mask = BLOCKCIPHER_TEST_TARGET_PMD_MB |
- BLOCKCIPHER_TEST_TARGET_PMD_OPENSSL |
- BLOCKCIPHER_TEST_TARGET_PMD_QAT
- },
- {
- .test_descr = "AES-128-CBC HMAC-SHA512 Encryption Digest",
- .test_data = &aes_test_data_6,
- .op_mask = BLOCKCIPHER_TEST_OP_ENC_AUTH_GEN,
- .pmd_mask = BLOCKCIPHER_TEST_TARGET_PMD_MB |
- BLOCKCIPHER_TEST_TARGET_PMD_OPENSSL |
- BLOCKCIPHER_TEST_TARGET_PMD_QAT
- },
- {
- .test_descr = "AES-128-CBC HMAC-SHA512 Encryption Digest "
- "Sessionless",
- .test_data = &aes_test_data_6,
- .op_mask = BLOCKCIPHER_TEST_OP_ENC_AUTH_GEN,
- .feature_mask = BLOCKCIPHER_TEST_FEATURE_SESSIONLESS,
- .pmd_mask = BLOCKCIPHER_TEST_TARGET_PMD_MB |
- BLOCKCIPHER_TEST_TARGET_PMD_OPENSSL
- },
- {
- .test_descr = "AES-128-CBC HMAC-SHA512 Decryption Digest "
- "Verify",
- .test_data = &aes_test_data_6,
- .op_mask = BLOCKCIPHER_TEST_OP_AUTH_VERIFY_DEC,
- .pmd_mask = BLOCKCIPHER_TEST_TARGET_PMD_MB |
- BLOCKCIPHER_TEST_TARGET_PMD_OPENSSL |
- BLOCKCIPHER_TEST_TARGET_PMD_QAT
- },
- {
- .test_descr = "AES-128-CBC XCBC Encryption Digest",
- .test_data = &aes_test_data_7,
- .op_mask = BLOCKCIPHER_TEST_OP_ENC_AUTH_GEN,
- .pmd_mask = BLOCKCIPHER_TEST_TARGET_PMD_MB |
- BLOCKCIPHER_TEST_TARGET_PMD_QAT
- },
- {
- .test_descr = "AES-128-CBC XCBC Decryption Digest Verify",
- .test_data = &aes_test_data_7,
- .op_mask = BLOCKCIPHER_TEST_OP_AUTH_VERIFY_DEC,
- .pmd_mask = BLOCKCIPHER_TEST_TARGET_PMD_MB |
- BLOCKCIPHER_TEST_TARGET_PMD_QAT
- },
- {
- .test_descr = "AES-128-CBC HMAC-SHA1 Encryption Digest "
- "OOP",
- .test_data = &aes_test_data_4,
- .op_mask = BLOCKCIPHER_TEST_OP_ENC_AUTH_GEN,
- .feature_mask = BLOCKCIPHER_TEST_FEATURE_OOP,
- .pmd_mask = BLOCKCIPHER_TEST_TARGET_PMD_QAT |
- BLOCKCIPHER_TEST_TARGET_PMD_OPENSSL
- },
- {
- .test_descr = "AES-128-CBC HMAC-SHA1 Decryption Digest "
- "Verify OOP",
- .test_data = &aes_test_data_4,
- .op_mask = BLOCKCIPHER_TEST_OP_AUTH_VERIFY_DEC,
- .feature_mask = BLOCKCIPHER_TEST_FEATURE_OOP,
- .pmd_mask = BLOCKCIPHER_TEST_TARGET_PMD_QAT |
- BLOCKCIPHER_TEST_TARGET_PMD_OPENSSL
- },
- {
- .test_descr = "AES-128-CBC HMAC-SHA224 Encryption Digest",
- .test_data = &aes_test_data_8,
- .op_mask = BLOCKCIPHER_TEST_OP_ENC_AUTH_GEN,
- .pmd_mask = BLOCKCIPHER_TEST_TARGET_PMD_MB |
- BLOCKCIPHER_TEST_TARGET_PMD_OPENSSL |
- BLOCKCIPHER_TEST_TARGET_PMD_QAT
- },
- {
- .test_descr = "AES-128-CBC HMAC-SHA224 Decryption Digest "
- "Verify",
- .test_data = &aes_test_data_8,
- .op_mask = BLOCKCIPHER_TEST_OP_AUTH_VERIFY_DEC,
- .pmd_mask = BLOCKCIPHER_TEST_TARGET_PMD_MB |
- BLOCKCIPHER_TEST_TARGET_PMD_OPENSSL |
- BLOCKCIPHER_TEST_TARGET_PMD_QAT
- },
- {
- .test_descr = "AES-128-CBC HMAC-SHA384 Encryption Digest",
- .test_data = &aes_test_data_9,
- .op_mask = BLOCKCIPHER_TEST_OP_ENC_AUTH_GEN,
- .pmd_mask = BLOCKCIPHER_TEST_TARGET_PMD_MB |
- BLOCKCIPHER_TEST_TARGET_PMD_OPENSSL |
- BLOCKCIPHER_TEST_TARGET_PMD_QAT
- },
- {
- .test_descr = "AES-128-CBC HMAC-SHA384 Decryption Digest "
- "Verify",
- .test_data = &aes_test_data_9,
- .op_mask = BLOCKCIPHER_TEST_OP_AUTH_VERIFY_DEC,
- .pmd_mask = BLOCKCIPHER_TEST_TARGET_PMD_MB |
- BLOCKCIPHER_TEST_TARGET_PMD_OPENSSL |
- BLOCKCIPHER_TEST_TARGET_PMD_QAT
- },
- {
- .test_descr = "AES-128-CBC HMAC-SHA1 Encryption Digest "
- "Sessionless",
- .test_data = &aes_test_data_4,
- .op_mask = BLOCKCIPHER_TEST_OP_ENC_AUTH_GEN,
- .feature_mask = BLOCKCIPHER_TEST_FEATURE_SESSIONLESS,
- .pmd_mask = BLOCKCIPHER_TEST_TARGET_PMD_OPENSSL
- },
- {
- .test_descr =
- "AES-128-CBC HMAC-SHA1 Decryption Digest "
- "Verify Sessionless",
- .test_data = &aes_test_data_4,
- .op_mask = BLOCKCIPHER_TEST_OP_AUTH_VERIFY_DEC,
- .feature_mask = BLOCKCIPHER_TEST_FEATURE_SESSIONLESS,
- .pmd_mask = BLOCKCIPHER_TEST_TARGET_PMD_OPENSSL
- },
-};
-
-static const struct blockcipher_test_case aes_cipheronly_test_cases[] = {
- {
- .test_descr = "AES-128-CBC Encryption",
- .test_data = &aes_test_data_4,
- .op_mask = BLOCKCIPHER_TEST_OP_ENCRYPT,
- .pmd_mask = BLOCKCIPHER_TEST_TARGET_PMD_OPENSSL
- },
- {
- .test_descr = "AES-128-CBC Decryption",
- .test_data = &aes_test_data_4,
- .op_mask = BLOCKCIPHER_TEST_OP_DECRYPT,
- .pmd_mask = BLOCKCIPHER_TEST_TARGET_PMD_OPENSSL
- },
- {
- .test_descr = "AES-192-CBC Encryption",
- .test_data = &aes_test_data_10,
- .op_mask = BLOCKCIPHER_TEST_OP_ENCRYPT,
- .pmd_mask = BLOCKCIPHER_TEST_TARGET_PMD_OPENSSL
- },
- {
- .test_descr = "AES-192-CBC Decryption",
- .test_data = &aes_test_data_10,
- .op_mask = BLOCKCIPHER_TEST_OP_DECRYPT,
- .pmd_mask = BLOCKCIPHER_TEST_TARGET_PMD_OPENSSL
- },
- {
- .test_descr = "AES-256-CBC Encryption",
- .test_data = &aes_test_data_11,
- .op_mask = BLOCKCIPHER_TEST_OP_ENCRYPT,
- .pmd_mask = BLOCKCIPHER_TEST_TARGET_PMD_OPENSSL
- },
- {
- .test_descr = "AES-256-CBC Decryption",
- .test_data = &aes_test_data_11,
- .op_mask = BLOCKCIPHER_TEST_OP_DECRYPT,
- .pmd_mask = BLOCKCIPHER_TEST_TARGET_PMD_OPENSSL
- },
- {
- .test_descr = "AES-128-CTR Encryption",
- .test_data = &aes_test_data_1,
- .op_mask = BLOCKCIPHER_TEST_OP_ENCRYPT,
- .pmd_mask = BLOCKCIPHER_TEST_TARGET_PMD_OPENSSL
- },
- {
- .test_descr = "AES-128-CTR Decryption",
- .test_data = &aes_test_data_1,
- .op_mask = BLOCKCIPHER_TEST_OP_DECRYPT,
- .pmd_mask = BLOCKCIPHER_TEST_TARGET_PMD_OPENSSL
- },
- {
- .test_descr = "AES-192-CTR Encryption",
- .test_data = &aes_test_data_2,
- .op_mask = BLOCKCIPHER_TEST_OP_ENCRYPT,
- .pmd_mask = BLOCKCIPHER_TEST_TARGET_PMD_OPENSSL
- },
- {
- .test_descr = "AES-192-CTR Decryption",
- .test_data = &aes_test_data_2,
- .op_mask = BLOCKCIPHER_TEST_OP_DECRYPT,
- .pmd_mask = BLOCKCIPHER_TEST_TARGET_PMD_OPENSSL
- },
- {
- .test_descr = "AES-256-CTR Encryption",
- .test_data = &aes_test_data_3,
- .op_mask = BLOCKCIPHER_TEST_OP_ENCRYPT,
- .pmd_mask = BLOCKCIPHER_TEST_TARGET_PMD_OPENSSL
- },
- {
- .test_descr = "AES-256-CTR Decryption",
- .test_data = &aes_test_data_3,
- .op_mask = BLOCKCIPHER_TEST_OP_DECRYPT,
- .pmd_mask = BLOCKCIPHER_TEST_TARGET_PMD_OPENSSL
- },
-};
-
-#endif /* TEST_CRYPTODEV_AES_TEST_VECTORS_H_ */
diff --git a/app/test/test_cryptodev_blockcipher.c b/app/test/test_cryptodev_blockcipher.c
deleted file mode 100644
index 37b10cf3..00000000
--- a/app/test/test_cryptodev_blockcipher.c
+++ /dev/null
@@ -1,538 +0,0 @@
-/*-
- * BSD LICENSE
- *
- * Copyright(c) 2015-2016 Intel Corporation. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * * Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * * Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in
- * the documentation and/or other materials provided with the
- * distribution.
- * * Neither the name of Intel Corporation nor the names of its
- * contributors may be used to endorse or promote products derived
- * from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
- * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
- * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#include <rte_common.h>
-#include <rte_hexdump.h>
-#include <rte_mbuf.h>
-#include <rte_malloc.h>
-#include <rte_memcpy.h>
-
-#include <rte_crypto.h>
-#include <rte_cryptodev.h>
-#include <rte_cryptodev_pmd.h>
-
-#include "test.h"
-#include "test_cryptodev_blockcipher.h"
-#include "test_cryptodev_aes_test_vectors.h"
-#include "test_cryptodev_des_test_vectors.h"
-#include "test_cryptodev_hash_test_vectors.h"
-
-static int
-test_blockcipher_one_case(const struct blockcipher_test_case *t,
- struct rte_mempool *mbuf_pool,
- struct rte_mempool *op_mpool,
- uint8_t dev_id,
- enum rte_cryptodev_type cryptodev_type,
- char *test_msg)
-{
- struct rte_mbuf *ibuf = NULL;
- struct rte_mbuf *obuf = NULL;
- struct rte_mbuf *iobuf;
- struct rte_crypto_sym_xform *cipher_xform = NULL;
- struct rte_crypto_sym_xform *auth_xform = NULL;
- struct rte_crypto_sym_xform *init_xform = NULL;
- struct rte_crypto_sym_op *sym_op = NULL;
- struct rte_crypto_op *op = NULL;
- struct rte_cryptodev_sym_session *sess = NULL;
-
- int status = TEST_SUCCESS;
- const struct blockcipher_test_data *tdata = t->test_data;
- uint8_t cipher_key[tdata->cipher_key.len];
- uint8_t auth_key[tdata->auth_key.len];
- uint32_t buf_len = tdata->ciphertext.len;
- uint32_t digest_len = 0;
- char *buf_p = NULL;
-
- if (tdata->cipher_key.len)
- memcpy(cipher_key, tdata->cipher_key.data,
- tdata->cipher_key.len);
- if (tdata->auth_key.len)
- memcpy(auth_key, tdata->auth_key.data,
- tdata->auth_key.len);
-
- switch (cryptodev_type) {
- case RTE_CRYPTODEV_QAT_SYM_PMD:
- case RTE_CRYPTODEV_OPENSSL_PMD:
- digest_len = tdata->digest.len;
- break;
- case RTE_CRYPTODEV_AESNI_MB_PMD:
- digest_len = tdata->digest.truncated_len;
- break;
- default:
- snprintf(test_msg, BLOCKCIPHER_TEST_MSG_LEN,
- "line %u FAILED: %s",
- __LINE__, "Unsupported PMD type");
- status = TEST_FAILED;
- goto error_exit;
- }
-
- /* preparing data */
- ibuf = rte_pktmbuf_alloc(mbuf_pool);
- if (!ibuf) {
- snprintf(test_msg, BLOCKCIPHER_TEST_MSG_LEN,
- "line %u FAILED: %s",
- __LINE__, "Allocation of rte_mbuf failed");
- status = TEST_FAILED;
- goto error_exit;
- }
-
- if (t->op_mask & BLOCKCIPHER_TEST_OP_CIPHER)
- buf_len += tdata->iv.len;
- if (t->op_mask & BLOCKCIPHER_TEST_OP_AUTH)
- buf_len += digest_len;
-
- buf_p = rte_pktmbuf_append(ibuf, buf_len);
- if (!buf_p) {
- snprintf(test_msg, BLOCKCIPHER_TEST_MSG_LEN,
- "line %u FAILED: %s",
- __LINE__, "No room to append mbuf");
- status = TEST_FAILED;
- goto error_exit;
- }
-
- if (t->op_mask & BLOCKCIPHER_TEST_OP_CIPHER) {
- rte_memcpy(buf_p, tdata->iv.data, tdata->iv.len);
- buf_p += tdata->iv.len;
- }
-
- /* only encryption requires plaintext.data input,
- * decryption/(digest gen)/(digest verify) use ciphertext.data
- * to be computed
- */
- if (t->op_mask & BLOCKCIPHER_TEST_OP_ENCRYPT) {
- rte_memcpy(buf_p, tdata->plaintext.data,
- tdata->plaintext.len);
- buf_p += tdata->plaintext.len;
- } else {
- rte_memcpy(buf_p, tdata->ciphertext.data,
- tdata->ciphertext.len);
- buf_p += tdata->ciphertext.len;
- }
-
- if (t->op_mask & BLOCKCIPHER_TEST_OP_AUTH_VERIFY)
- rte_memcpy(buf_p, tdata->digest.data, digest_len);
- else
- memset(buf_p, 0, digest_len);
-
- if (t->feature_mask & BLOCKCIPHER_TEST_FEATURE_OOP) {
- obuf = rte_pktmbuf_alloc(mbuf_pool);
- if (!obuf) {
- snprintf(test_msg, BLOCKCIPHER_TEST_MSG_LEN, "line %u "
- "FAILED: %s", __LINE__,
- "Allocation of rte_mbuf failed");
- status = TEST_FAILED;
- goto error_exit;
- }
-
- buf_p = rte_pktmbuf_append(obuf, buf_len);
- if (!buf_p) {
- snprintf(test_msg, BLOCKCIPHER_TEST_MSG_LEN, "line %u "
- "FAILED: %s", __LINE__,
- "No room to append mbuf");
- status = TEST_FAILED;
- goto error_exit;
- }
- memset(buf_p, 0, buf_len);
- }
-
- /* Generate Crypto op data structure */
- op = rte_crypto_op_alloc(op_mpool, RTE_CRYPTO_OP_TYPE_SYMMETRIC);
- if (!op) {
- snprintf(test_msg, BLOCKCIPHER_TEST_MSG_LEN,
- "line %u FAILED: %s",
- __LINE__, "Failed to allocate symmetric crypto "
- "operation struct");
- status = TEST_FAILED;
- goto error_exit;
- }
-
- sym_op = op->sym;
-
- sym_op->m_src = ibuf;
-
- if (t->feature_mask & BLOCKCIPHER_TEST_FEATURE_OOP) {
- sym_op->m_dst = obuf;
- iobuf = obuf;
- } else {
- sym_op->m_dst = NULL;
- iobuf = ibuf;
- }
-
- /* sessionless op requires allocate xform using
- * rte_crypto_op_sym_xforms_alloc(), otherwise rte_zmalloc()
- * is used
- */
- if (t->feature_mask & BLOCKCIPHER_TEST_FEATURE_SESSIONLESS) {
- uint32_t n_xforms = 0;
-
- if (t->op_mask & BLOCKCIPHER_TEST_OP_CIPHER)
- n_xforms++;
- if (t->op_mask & BLOCKCIPHER_TEST_OP_AUTH)
- n_xforms++;
-
- if (rte_crypto_op_sym_xforms_alloc(op, n_xforms)
- == NULL) {
- snprintf(test_msg, BLOCKCIPHER_TEST_MSG_LEN, "line %u "
- "FAILED: %s", __LINE__, "Failed to "
- "allocate space for crypto transforms");
- status = TEST_FAILED;
- goto error_exit;
- }
- } else {
- cipher_xform = rte_zmalloc(NULL,
- sizeof(struct rte_crypto_sym_xform), 0);
-
- auth_xform = rte_zmalloc(NULL,
- sizeof(struct rte_crypto_sym_xform), 0);
-
- if (!cipher_xform || !auth_xform) {
- snprintf(test_msg, BLOCKCIPHER_TEST_MSG_LEN, "line %u "
- "FAILED: %s", __LINE__, "Failed to "
- "allocate memory for crypto transforms");
- status = TEST_FAILED;
- goto error_exit;
- }
- }
-
- /* preparing xform, for sessioned op, init_xform is initialized
- * here and later as param in rte_cryptodev_sym_session_create() call
- */
- if (t->op_mask == BLOCKCIPHER_TEST_OP_ENC_AUTH_GEN) {
- if (t->feature_mask & BLOCKCIPHER_TEST_FEATURE_SESSIONLESS) {
- cipher_xform = op->sym->xform;
- auth_xform = cipher_xform->next;
- auth_xform->next = NULL;
- } else {
- cipher_xform->next = auth_xform;
- auth_xform->next = NULL;
- init_xform = cipher_xform;
- }
- } else if (t->op_mask == BLOCKCIPHER_TEST_OP_AUTH_VERIFY_DEC) {
- if (t->feature_mask & BLOCKCIPHER_TEST_FEATURE_SESSIONLESS) {
- auth_xform = op->sym->xform;
- cipher_xform = auth_xform->next;
- cipher_xform->next = NULL;
- } else {
- auth_xform->next = cipher_xform;
- cipher_xform->next = NULL;
- init_xform = auth_xform;
- }
- } else if ((t->op_mask == BLOCKCIPHER_TEST_OP_ENCRYPT) ||
- (t->op_mask == BLOCKCIPHER_TEST_OP_DECRYPT)) {
- if (t->feature_mask & BLOCKCIPHER_TEST_FEATURE_SESSIONLESS)
- cipher_xform = op->sym->xform;
- else
- init_xform = cipher_xform;
- cipher_xform->next = NULL;
- } else if ((t->op_mask == BLOCKCIPHER_TEST_OP_AUTH_GEN) ||
- (t->op_mask == BLOCKCIPHER_TEST_OP_AUTH_VERIFY)) {
- if (t->feature_mask & BLOCKCIPHER_TEST_FEATURE_SESSIONLESS)
- auth_xform = op->sym->xform;
- else
- init_xform = auth_xform;
- auth_xform->next = NULL;
- } else {
- snprintf(test_msg, BLOCKCIPHER_TEST_MSG_LEN,
- "line %u FAILED: %s",
- __LINE__, "Unrecognized operation");
- status = TEST_FAILED;
- goto error_exit;
- }
-
- /*configure xforms & sym_op cipher and auth data*/
- if (t->op_mask & BLOCKCIPHER_TEST_OP_CIPHER) {
- cipher_xform->type = RTE_CRYPTO_SYM_XFORM_CIPHER;
- cipher_xform->cipher.algo = tdata->crypto_algo;
- if (t->op_mask & BLOCKCIPHER_TEST_OP_ENCRYPT)
- cipher_xform->cipher.op =
- RTE_CRYPTO_CIPHER_OP_ENCRYPT;
- else
- cipher_xform->cipher.op =
- RTE_CRYPTO_CIPHER_OP_DECRYPT;
- cipher_xform->cipher.key.data = cipher_key;
- cipher_xform->cipher.key.length = tdata->cipher_key.len;
-
- sym_op->cipher.data.offset = tdata->iv.len;
- sym_op->cipher.data.length = tdata->ciphertext.len;
- sym_op->cipher.iv.data = rte_pktmbuf_mtod(sym_op->m_src,
- uint8_t *);
- sym_op->cipher.iv.length = tdata->iv.len;
- sym_op->cipher.iv.phys_addr = rte_pktmbuf_mtophys(
- sym_op->m_src);
- }
-
- if (t->op_mask & BLOCKCIPHER_TEST_OP_AUTH) {
- uint32_t auth_data_offset = 0;
- uint32_t digest_offset = tdata->ciphertext.len;
-
- if (t->op_mask & BLOCKCIPHER_TEST_OP_CIPHER) {
- digest_offset += tdata->iv.len;
- auth_data_offset += tdata->iv.len;
- }
-
- auth_xform->type = RTE_CRYPTO_SYM_XFORM_AUTH;
- auth_xform->auth.algo = tdata->auth_algo;
- auth_xform->auth.key.length = tdata->auth_key.len;
- auth_xform->auth.key.data = auth_key;
- auth_xform->auth.digest_length = digest_len;
-
- if (t->op_mask & BLOCKCIPHER_TEST_OP_AUTH_GEN) {
- auth_xform->auth.op = RTE_CRYPTO_AUTH_OP_GENERATE;
- sym_op->auth.digest.data = rte_pktmbuf_mtod_offset
- (iobuf, uint8_t *, digest_offset);
- sym_op->auth.digest.phys_addr =
- rte_pktmbuf_mtophys_offset(iobuf,
- digest_offset);
- } else {
- auth_xform->auth.op = RTE_CRYPTO_AUTH_OP_VERIFY;
- sym_op->auth.digest.data = rte_pktmbuf_mtod_offset
- (sym_op->m_src, uint8_t *, digest_offset);
- sym_op->auth.digest.phys_addr =
- rte_pktmbuf_mtophys_offset(sym_op->m_src,
- digest_offset);
- }
-
- sym_op->auth.data.offset = auth_data_offset;
- sym_op->auth.data.length = tdata->ciphertext.len;
- sym_op->auth.digest.length = digest_len;
- }
-
- /* create session for sessioned op */
- if (!(t->feature_mask & BLOCKCIPHER_TEST_FEATURE_SESSIONLESS)) {
- sess = rte_cryptodev_sym_session_create(dev_id,
- init_xform);
- if (!sess) {
- snprintf(test_msg, BLOCKCIPHER_TEST_MSG_LEN, "line %u "
- "FAILED: %s", __LINE__,
- "Session creation failed");
- status = TEST_FAILED;
- goto error_exit;
- }
-
- /* attach symmetric crypto session to crypto operations */
- rte_crypto_op_attach_sym_session(op, sess);
- }
-
- /* Process crypto operation */
- if (rte_cryptodev_enqueue_burst(dev_id, 0, &op, 1) != 1) {
- snprintf(test_msg, BLOCKCIPHER_TEST_MSG_LEN,
- "line %u FAILED: %s",
- __LINE__, "Error sending packet for encryption");
- status = TEST_FAILED;
- goto error_exit;
- }
-
- op = NULL;
-
- while (rte_cryptodev_dequeue_burst(dev_id, 0, &op, 1) == 0)
- rte_pause();
-
- if (!op) {
- snprintf(test_msg, BLOCKCIPHER_TEST_MSG_LEN,
- "line %u FAILED: %s",
- __LINE__, "Failed to process sym crypto op");
- status = TEST_FAILED;
- goto error_exit;
- }
-
- TEST_HEXDUMP(stdout, "m_src:",
- rte_pktmbuf_mtod(sym_op->m_src, uint8_t *), buf_len);
- if (t->feature_mask & BLOCKCIPHER_TEST_FEATURE_OOP)
- TEST_HEXDUMP(stdout, "m_dst:",
- rte_pktmbuf_mtod(sym_op->m_dst, uint8_t *),
- buf_len);
-
- /* Verify results */
- if (op->status != RTE_CRYPTO_OP_STATUS_SUCCESS) {
- if (t->op_mask & BLOCKCIPHER_TEST_OP_AUTH_VERIFY)
- snprintf(test_msg, BLOCKCIPHER_TEST_MSG_LEN, "line %u "
- "FAILED: Digest verification failed "
- "(0x%X)", __LINE__, op->status);
- else
- snprintf(test_msg, BLOCKCIPHER_TEST_MSG_LEN, "line %u "
- "FAILED: Digest verification failed "
- "(0x%X)", __LINE__, op->status);
- status = TEST_FAILED;
- goto error_exit;
- }
-
- if (t->op_mask & BLOCKCIPHER_TEST_OP_CIPHER) {
- uint8_t *crypto_res;
- const uint8_t *compare_ref;
- uint32_t compare_len;
-
- crypto_res = rte_pktmbuf_mtod_offset(iobuf, uint8_t *,
- tdata->iv.len);
-
- if (t->op_mask & BLOCKCIPHER_TEST_OP_ENCRYPT) {
- compare_ref = tdata->ciphertext.data;
- compare_len = tdata->ciphertext.len;
- } else {
- compare_ref = tdata->plaintext.data;
- compare_len = tdata->plaintext.len;
- }
-
- if (memcmp(crypto_res, compare_ref, compare_len)) {
- snprintf(test_msg, BLOCKCIPHER_TEST_MSG_LEN, "line %u "
- "FAILED: %s", __LINE__,
- "Crypto data not as expected");
- status = TEST_FAILED;
- goto error_exit;
- }
- }
-
- if (t->op_mask & BLOCKCIPHER_TEST_OP_AUTH_GEN) {
- uint8_t *auth_res;
-
- if (t->op_mask & BLOCKCIPHER_TEST_OP_CIPHER)
- auth_res = rte_pktmbuf_mtod_offset(iobuf,
- uint8_t *,
- tdata->iv.len + tdata->ciphertext.len);
- else
- auth_res = rte_pktmbuf_mtod_offset(iobuf,
- uint8_t *, tdata->ciphertext.len);
-
- if (memcmp(auth_res, tdata->digest.data, digest_len)) {
- snprintf(test_msg, BLOCKCIPHER_TEST_MSG_LEN, "line %u "
- "FAILED: %s", __LINE__, "Generated "
- "digest data not as expected");
- status = TEST_FAILED;
- goto error_exit;
- }
- }
-
- snprintf(test_msg, BLOCKCIPHER_TEST_MSG_LEN, "PASS");
-
-error_exit:
- if (!(t->feature_mask & BLOCKCIPHER_TEST_FEATURE_SESSIONLESS)) {
- if (sess)
- rte_cryptodev_sym_session_free(dev_id, sess);
- if (cipher_xform)
- rte_free(cipher_xform);
- if (auth_xform)
- rte_free(auth_xform);
- }
-
- if (op)
- rte_crypto_op_free(op);
-
- if (obuf)
- rte_pktmbuf_free(obuf);
-
- if (ibuf)
- rte_pktmbuf_free(ibuf);
-
- return status;
-}
-
-int
-test_blockcipher_all_tests(struct rte_mempool *mbuf_pool,
- struct rte_mempool *op_mpool,
- uint8_t dev_id,
- enum rte_cryptodev_type cryptodev_type,
- enum blockcipher_test_type test_type)
-{
- int status, overall_status = TEST_SUCCESS;
- uint32_t i, test_index = 0;
- char test_msg[BLOCKCIPHER_TEST_MSG_LEN + 1];
- uint32_t n_test_cases = 0;
- uint32_t target_pmd_mask = 0;
- const struct blockcipher_test_case *tcs = NULL;
-
- switch (test_type) {
- case BLKCIPHER_AES_CHAIN_TYPE:
- n_test_cases = sizeof(aes_chain_test_cases) /
- sizeof(aes_chain_test_cases[0]);
- tcs = aes_chain_test_cases;
- break;
- case BLKCIPHER_AES_CIPHERONLY_TYPE:
- n_test_cases = sizeof(aes_cipheronly_test_cases) /
- sizeof(aes_cipheronly_test_cases[0]);
- tcs = aes_cipheronly_test_cases;
- break;
- case BLKCIPHER_3DES_CHAIN_TYPE:
- n_test_cases = sizeof(triple_des_chain_test_cases) /
- sizeof(triple_des_chain_test_cases[0]);
- tcs = triple_des_chain_test_cases;
- break;
- case BLKCIPHER_3DES_CIPHERONLY_TYPE:
- n_test_cases = sizeof(triple_des_cipheronly_test_cases) /
- sizeof(triple_des_cipheronly_test_cases[0]);
- tcs = triple_des_cipheronly_test_cases;
- break;
- case BLKCIPHER_AUTHONLY_TYPE:
- n_test_cases = sizeof(hash_test_cases) /
- sizeof(hash_test_cases[0]);
- tcs = hash_test_cases;
- break;
- default:
- break;
- }
-
- switch (cryptodev_type) {
- case RTE_CRYPTODEV_AESNI_MB_PMD:
- target_pmd_mask = BLOCKCIPHER_TEST_TARGET_PMD_MB;
- break;
- case RTE_CRYPTODEV_QAT_SYM_PMD:
- target_pmd_mask = BLOCKCIPHER_TEST_TARGET_PMD_QAT;
- break;
- case RTE_CRYPTODEV_OPENSSL_PMD:
- target_pmd_mask = BLOCKCIPHER_TEST_TARGET_PMD_OPENSSL;
- break;
- default:
- TEST_ASSERT(0, "Unrecognized cryptodev type");
- break;
- }
-
- for (i = 0; i < n_test_cases; i++) {
- const struct blockcipher_test_case *tc = &tcs[i];
-
- if (!(tc->pmd_mask & target_pmd_mask))
- continue;
-
- status = test_blockcipher_one_case(tc, mbuf_pool, op_mpool,
- dev_id, cryptodev_type, test_msg);
-
- printf(" %u) TestCase %s %s\n", test_index ++,
- tc->test_descr, test_msg);
-
- if (status != TEST_SUCCESS) {
- if (overall_status == TEST_SUCCESS)
- overall_status = status;
-
- if (tc->feature_mask & BLOCKCIPHER_TEST_FEATURE_STOPPER)
- break;
- }
- }
-
- return overall_status;
-}
diff --git a/app/test/test_cryptodev_blockcipher.h b/app/test/test_cryptodev_blockcipher.h
deleted file mode 100644
index 04ff1ee3..00000000
--- a/app/test/test_cryptodev_blockcipher.h
+++ /dev/null
@@ -1,125 +0,0 @@
-/*-
- * BSD LICENSE
- *
- * Copyright(c) 2016 Intel Corporation. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * * Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * * Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in
- * the documentation and/or other materials provided with the
- * distribution.
- * * Neither the name of Intel Corporation nor the names of its
- * contributors may be used to endorse or promote products derived
- * from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
- * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
- * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#ifndef TEST_CRYPTODEV_BLOCKCIPHER_H_
-#define TEST_CRYPTODEV_BLOCKCIPHER_H_
-
-#ifndef BLOCKCIPHER_TEST_MSG_LEN
-#define BLOCKCIPHER_TEST_MSG_LEN 256
-#endif
-
-#define BLOCKCIPHER_TEST_OP_ENCRYPT 0x01
-#define BLOCKCIPHER_TEST_OP_DECRYPT 0x02
-#define BLOCKCIPHER_TEST_OP_AUTH_GEN 0x04
-#define BLOCKCIPHER_TEST_OP_AUTH_VERIFY 0x08
-
-#define BLOCKCIPHER_TEST_FEATURE_OOP 0x01
-#define BLOCKCIPHER_TEST_FEATURE_SESSIONLESS 0x02
-#define BLOCKCIPHER_TEST_FEATURE_STOPPER 0x04 /* stop upon failing */
-
-#define BLOCKCIPHER_TEST_TARGET_PMD_MB 0x0001 /* Multi-buffer flag */
-#define BLOCKCIPHER_TEST_TARGET_PMD_QAT 0x0002 /* QAT flag */
-#define BLOCKCIPHER_TEST_TARGET_PMD_OPENSSL 0x0004 /* SW OPENSSL flag */
-
-#define BLOCKCIPHER_TEST_OP_CIPHER (BLOCKCIPHER_TEST_OP_ENCRYPT | \
- BLOCKCIPHER_TEST_OP_DECRYPT)
-
-#define BLOCKCIPHER_TEST_OP_AUTH (BLOCKCIPHER_TEST_OP_AUTH_GEN | \
- BLOCKCIPHER_TEST_OP_AUTH_VERIFY)
-
-#define BLOCKCIPHER_TEST_OP_ENC_AUTH_GEN (BLOCKCIPHER_TEST_OP_ENCRYPT | \
- BLOCKCIPHER_TEST_OP_AUTH_GEN)
-
-#define BLOCKCIPHER_TEST_OP_AUTH_VERIFY_DEC (BLOCKCIPHER_TEST_OP_DECRYPT | \
- BLOCKCIPHER_TEST_OP_AUTH_VERIFY)
-
-enum blockcipher_test_type {
- BLKCIPHER_AES_CHAIN_TYPE, /* use aes_chain_test_cases[] */
- BLKCIPHER_AES_CIPHERONLY_TYPE, /* use aes_cipheronly_test_cases[] */
- BLKCIPHER_3DES_CHAIN_TYPE, /* use triple_des_chain_test_cases[] */
- BLKCIPHER_3DES_CIPHERONLY_TYPE, /* triple_des_cipheronly_test_cases[] */
- BLKCIPHER_AUTHONLY_TYPE /* use hash_test_cases[] */
-};
-
-struct blockcipher_test_case {
- const char *test_descr; /* test description */
- const struct blockcipher_test_data *test_data;
- uint8_t op_mask; /* operation mask */
- uint8_t feature_mask;
- uint32_t pmd_mask;
-};
-
-struct blockcipher_test_data {
- enum rte_crypto_cipher_algorithm crypto_algo;
-
- struct {
- uint8_t data[64];
- unsigned int len;
- } cipher_key;
-
- struct {
- uint8_t data[64] __rte_aligned(16);
- unsigned int len;
- } iv;
-
- struct {
- const uint8_t *data;
- unsigned int len;
- } plaintext;
-
- struct {
- const uint8_t *data;
- unsigned int len;
- } ciphertext;
-
- enum rte_crypto_auth_algorithm auth_algo;
-
- struct {
- uint8_t data[128];
- unsigned int len;
- } auth_key;
-
- struct {
- uint8_t data[128];
- unsigned int len; /* for qat */
- unsigned int truncated_len; /* for mb */
- } digest;
-};
-
-int
-test_blockcipher_all_tests(struct rte_mempool *mbuf_pool,
- struct rte_mempool *op_mpool,
- uint8_t dev_id,
- enum rte_cryptodev_type cryptodev_type,
- enum blockcipher_test_type test_type);
-
-#endif /* TEST_CRYPTODEV_BLOCKCIPHER_H_ */
diff --git a/app/test/test_cryptodev_des_test_vectors.h b/app/test/test_cryptodev_des_test_vectors.h
deleted file mode 100644
index a1d2d978..00000000
--- a/app/test/test_cryptodev_des_test_vectors.h
+++ /dev/null
@@ -1,955 +0,0 @@
-/*
- * BSD LICENSE
- *
- * Copyright(c) 2016 Intel Corporation. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * * Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * * Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in
- * the documentation and/or other materials provided with the
- * distribution.
- * * Neither the name of Intel Corporation nor the names of its
- * contributors may be used to endorse or promote products derived
- * from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
- * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
- * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#ifndef TEST_CRYPTODEV_DES_TEST_VECTORS_H_
-#define TEST_CRYPTODEV_DES_TEST_VECTORS_H_
-
-static const uint8_t plaintext_des[] = {
- "What a lousy earth! He wondered how many people "
- "were destitute that same night even in his own "
- "prosperous country, how many homes were "
- "shanties, how many husbands were drunk and "
- "wives socked, and how many children were "
- "bullied, abused, or abandoned. How many "
- "families hungered for food they could not "
- "afford to buy? How many hearts were broken? How "
- "many suicides would take place that same night, "
- "how many people would go insane? How many "
- "cockroaches and landlords would triumph? How "
- "many winners were losers, successes failures, "
- "and rich men poor men? How many wise guys were "
- "stupid? How many happy endings were unhappy "
- "endings? How many honest men were liars, brave "
- "men cowards, loyal men traitors, how many "
- "sainted men were corrupt, how many people in "
- "positions of trust had sold their souls to "
- "bodyguards, how many had never had souls? How "
- "many straight-and-narrow paths were crooked "
- "paths? How many best families were worst "
- "families and how many good people were bad "
- "people? When you added them all up and then "
- "subtracted, you might be left with only the "
- "children, and perhaps with Albert Einstein and "
- "an old violinist or sculptor somewhere."
-};
-
-static const uint8_t ciphertext512_des128ctr[] = {
- 0x13, 0x39, 0x3B, 0xBC, 0x1D, 0xE3, 0x23, 0x09,
- 0x9B, 0x08, 0xD1, 0x09, 0x52, 0x93, 0x78, 0x29,
- 0x11, 0x21, 0xBA, 0x01, 0x15, 0xCD, 0xEC, 0xAA,
- 0x79, 0x77, 0x58, 0xAE, 0xAE, 0xBC, 0x97, 0x33,
- 0x94, 0xA9, 0x2D, 0xC0, 0x0A, 0xA9, 0xA4, 0x4B,
- 0x19, 0x07, 0x88, 0x06, 0x7E, 0x81, 0x0F, 0xB5,
- 0x60, 0xCF, 0xA7, 0xC3, 0x2A, 0x43, 0xFF, 0x16,
- 0x3A, 0x5F, 0x11, 0x2D, 0x11, 0x38, 0x37, 0x94,
- 0x2A, 0xC8, 0x3D, 0x20, 0xBB, 0x93, 0x95, 0x54,
- 0x12, 0xFF, 0x0C, 0x47, 0x89, 0x7D, 0x73, 0xD1,
- 0x2E, 0x3A, 0x80, 0x52, 0xA8, 0x92, 0x93, 0x99,
- 0x16, 0xB8, 0x12, 0x1B, 0x8B, 0xA8, 0xC1, 0x81,
- 0x95, 0x18, 0x82, 0xD6, 0x5A, 0xA7, 0xFE, 0xCF,
- 0xC4, 0xAC, 0x85, 0x91, 0x0C, 0x2F, 0x1D, 0x10,
- 0x9A, 0x65, 0x07, 0xB0, 0x2E, 0x5A, 0x2D, 0x48,
- 0x26, 0xF8, 0x17, 0x7A, 0x53, 0xD6, 0xB8, 0xDF,
- 0xB1, 0x10, 0x48, 0x7E, 0x8F, 0xBE, 0x2E, 0xA1,
- 0x0D, 0x9E, 0xA9, 0xF1, 0x3B, 0x3B, 0x33, 0xCD,
- 0xDC, 0x52, 0x7E, 0xC0, 0x0E, 0xA0, 0xD8, 0xA7,
- 0xC6, 0x34, 0x5A, 0xAA, 0x29, 0x8B, 0xA9, 0xAC,
- 0x1F, 0x78, 0xAD, 0xEE, 0x34, 0x59, 0x30, 0xFB,
- 0x2A, 0x20, 0x3D, 0x4D, 0x30, 0xA7, 0x7D, 0xD8,
- 0xA0, 0xC6, 0xA2, 0xD3, 0x9A, 0xFB, 0x50, 0x97,
- 0x4D, 0x25, 0xA2, 0x37, 0x51, 0x54, 0xB7, 0xEB,
- 0xED, 0x77, 0xDB, 0x94, 0x35, 0x8B, 0x70, 0x95,
- 0x4A, 0x00, 0xA7, 0xF1, 0x8A, 0x66, 0x0E, 0xC6,
- 0x05, 0x7B, 0x69, 0x05, 0x42, 0x03, 0x96, 0x2C,
- 0x55, 0x00, 0x1B, 0xC0, 0x19, 0x4D, 0x0D, 0x2E,
- 0xF5, 0x81, 0x11, 0x64, 0xCA, 0xBB, 0xF2, 0x0F,
- 0x9C, 0x60, 0xE2, 0xCC, 0x02, 0x6E, 0x83, 0xD5,
- 0x24, 0xF4, 0x12, 0x0E, 0x6A, 0xEA, 0x4F, 0x6C,
- 0x79, 0x69, 0x65, 0x67, 0xDB, 0xF7, 0xEA, 0x98,
- 0x5D, 0x56, 0x98, 0xB7, 0x88, 0xE7, 0x23, 0xC9,
- 0x17, 0x32, 0x92, 0x33, 0x5A, 0x0C, 0x15, 0x20,
- 0x3B, 0x1C, 0xF9, 0x0F, 0x4D, 0xD1, 0xE8, 0xE6,
- 0x9E, 0x5E, 0x24, 0x1B, 0xA4, 0xB8, 0xB9, 0xE9,
- 0x2F, 0xFC, 0x89, 0xB4, 0xB9, 0xF4, 0xA6, 0xAD,
- 0x55, 0xF4, 0xDF, 0x58, 0x63, 0x25, 0xE3, 0x41,
- 0x70, 0xDF, 0x10, 0xE7, 0x13, 0x87, 0x8D, 0xB3,
- 0x62, 0x4F, 0xF5, 0x86, 0x85, 0x8F, 0x59, 0xF0,
- 0x21, 0x0E, 0x8F, 0x11, 0xAD, 0xBF, 0xDD, 0x61,
- 0x68, 0x3F, 0x54, 0x57, 0x49, 0x38, 0xC8, 0x24,
- 0x8E, 0x0A, 0xAC, 0xCA, 0x2C, 0x36, 0x3E, 0x5F,
- 0x0A, 0xCE, 0xFD, 0x1A, 0x60, 0x63, 0x5A, 0xE6,
- 0x06, 0x64, 0xB5, 0x94, 0x3C, 0xC9, 0xAF, 0x7C,
- 0xCD, 0x49, 0x10, 0xCF, 0xAF, 0x0E, 0x2E, 0x79,
- 0x27, 0xB2, 0x67, 0x02, 0xED, 0xEE, 0x80, 0x77,
- 0x7C, 0x6D, 0x4B, 0xDB, 0xCF, 0x8D, 0x68, 0x00,
- 0x2E, 0xD9, 0xF0, 0x8E, 0x08, 0xBF, 0xA6, 0x9B,
- 0xFE, 0xA4, 0xFB, 0x19, 0x46, 0xAF, 0x1B, 0xA9,
- 0xF8, 0x22, 0x81, 0x21, 0x97, 0xFC, 0xC0, 0x8A,
- 0x26, 0x58, 0x13, 0x29, 0xB6, 0x69, 0x94, 0x4B,
- 0xAB, 0xB3, 0x88, 0x0D, 0xA9, 0x48, 0x0E, 0xE8,
- 0x70, 0xFC, 0xA1, 0x21, 0xC4, 0x2C, 0xE5, 0x99,
- 0xB4, 0xF1, 0x6F, 0xB2, 0x4B, 0x4B, 0xCD, 0x48,
- 0x15, 0x47, 0x2D, 0x72, 0x39, 0x99, 0x9D, 0x24,
- 0x0C, 0x8B, 0xDC, 0xA1, 0xEE, 0xF6, 0xF4, 0x73,
- 0xC3, 0xB8, 0x0C, 0x23, 0x0D, 0xA7, 0xC4, 0x7D,
- 0x27, 0xE2, 0x14, 0x11, 0x53, 0x19, 0xE7, 0xCA,
- 0x94, 0x4E, 0x0D, 0x2C, 0xF7, 0x36, 0x47, 0xDB,
- 0x77, 0x3C, 0x22, 0xAC, 0xBE, 0xE1, 0x06, 0x55,
- 0xE5, 0xDD, 0x8B, 0x65, 0xE8, 0xE9, 0x91, 0x52,
- 0x59, 0x97, 0xFC, 0x8C, 0xEE, 0x96, 0x22, 0x60,
- 0xEE, 0xBF, 0x82, 0xF0, 0xCA, 0x14, 0xF9, 0xD3
-};
-
-static const struct blockcipher_test_data
-triple_des128ctr_test_vector = {
- .crypto_algo = RTE_CRYPTO_CIPHER_3DES_CTR,
- .cipher_key = {
- .data = {
- 0xE4, 0x23, 0x33, 0x8A, 0x35, 0x64, 0x61, 0xE2,
- 0x49, 0x03, 0xDD, 0xC6, 0xB8, 0xCA, 0x55, 0x7A
- },
- .len = 16
- },
- .iv = {
- .data = {
- 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07
- },
- .len = 8
- },
- .plaintext = {
- .data = plaintext_des,
- .len = 512
- },
- .ciphertext = {
- .data = ciphertext512_des128ctr,
- .len = 512
- }
-};
-
-static const struct blockcipher_test_data
-triple_des128ctr_sha1_test_vector = {
- .crypto_algo = RTE_CRYPTO_CIPHER_3DES_CTR,
- .cipher_key = {
- .data = {
- 0xE4, 0x23, 0x33, 0x8A, 0x35, 0x64, 0x61, 0xE2,
- 0x49, 0x03, 0xDD, 0xC6, 0xB8, 0xCA, 0x55, 0x7A
- },
- .len = 16
- },
- .iv = {
- .data = {
- 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07
- },
- .len = 8
- },
- .plaintext = {
- .data = plaintext_des,
- .len = 512
- },
- .ciphertext = {
- .data = ciphertext512_des128ctr,
- .len = 512
- },
- .auth_algo = RTE_CRYPTO_AUTH_SHA1,
- .digest = {
- .data = {
- 0xC3, 0x40, 0xD5, 0xD9, 0x8F, 0x8A, 0xC0, 0xF0,
- 0x46, 0x28, 0x02, 0x01, 0xB5, 0xC1, 0x87, 0x4D,
- 0xAC, 0xFE, 0x48, 0x76
- },
- .len = 20
- }
-};
-
-static const struct blockcipher_test_data
-triple_des128ctr_hmac_sha1_test_vector = {
- .crypto_algo = RTE_CRYPTO_CIPHER_3DES_CTR,
- .cipher_key = {
- .data = {
- 0xE4, 0x23, 0x33, 0x8A, 0x35, 0x64, 0x61, 0xE2,
- 0x49, 0x03, 0xDD, 0xC6, 0xB8, 0xCA, 0x55, 0x7A
- },
- .len = 16
- },
- .iv = {
- .data = {
- 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07
- },
- .len = 8
- },
- .plaintext = {
- .data = plaintext_des,
- .len = 512
- },
- .ciphertext = {
- .data = ciphertext512_des128ctr,
- .len = 512
- },
- .auth_algo = RTE_CRYPTO_AUTH_SHA1_HMAC,
- .auth_key = {
- .data = {
- 0xF8, 0x2A, 0xC7, 0x54, 0xDB, 0x96, 0x18, 0xAA,
- 0xC3, 0xA1, 0x53, 0xF6, 0x1F, 0x17, 0x60, 0xBD,
- 0xDE, 0xF4, 0xDE, 0xAD
- },
- .len = 20
- },
- .digest = {
- .data = {
- 0xF1, 0xC1, 0xDB, 0x4D, 0xFA, 0x7F, 0x2F, 0xE5,
- 0xF8, 0x49, 0xEA, 0x1D, 0x7F, 0xCB, 0x42, 0x59,
- 0xC4, 0x1E, 0xB1, 0x18
- },
- .len = 20
- }
-};
-
-static const uint8_t ciphertext512_des192ctr[] = {
- 0xFF, 0x32, 0x52, 0x97, 0x10, 0xBF, 0x0B, 0x10,
- 0x68, 0x0F, 0x4F, 0x56, 0x8B, 0x2C, 0x7B, 0x8E,
- 0x39, 0x1E, 0x1A, 0x2F, 0x83, 0xDE, 0x5E, 0x35,
- 0xC8, 0x4B, 0xDF, 0xD5, 0xBC, 0x84, 0x50, 0x1A,
- 0x02, 0xDF, 0xB3, 0x11, 0xE4, 0xDA, 0xB8, 0x0E,
- 0x47, 0xC6, 0x0C, 0x51, 0x09, 0x62, 0x9C, 0x5D,
- 0x71, 0x40, 0x49, 0xD8, 0x55, 0xBD, 0x7D, 0x90,
- 0x71, 0xC5, 0xF7, 0x07, 0x6F, 0x08, 0x71, 0x2A,
- 0xB1, 0x77, 0x9B, 0x0F, 0xA1, 0xB0, 0xD6, 0x10,
- 0xB2, 0xE5, 0x31, 0xEC, 0x21, 0x13, 0x89, 0x2A,
- 0x09, 0x7E, 0x30, 0xDB, 0xA0, 0xF0, 0xDC, 0xE4,
- 0x74, 0x64, 0x39, 0xA3, 0xB0, 0xB1, 0x80, 0x66,
- 0x52, 0xD4, 0x4E, 0xC9, 0x5A, 0x52, 0x6A, 0xC7,
- 0xB5, 0x2B, 0x61, 0xD5, 0x17, 0xD5, 0xF3, 0xCC,
- 0x41, 0x61, 0xD2, 0xA6, 0xF4, 0x51, 0x24, 0x3A,
- 0x63, 0x5D, 0x23, 0xB1, 0xF0, 0x22, 0xE7, 0x45,
- 0xFA, 0x5F, 0x7E, 0x99, 0x00, 0x11, 0x28, 0x35,
- 0xA3, 0xF4, 0x61, 0x94, 0x0E, 0x98, 0xCE, 0x35,
- 0xDD, 0x91, 0x1B, 0x0B, 0x4D, 0xEE, 0xFF, 0xFF,
- 0x0B, 0xD4, 0xDC, 0x56, 0xFC, 0x71, 0xE9, 0xEC,
- 0xE8, 0x36, 0x51, 0xF8, 0x8B, 0x6A, 0xE1, 0x8C,
- 0x2B, 0x25, 0x91, 0x91, 0x9B, 0x92, 0x76, 0xB5,
- 0x3D, 0x26, 0xA8, 0x53, 0xEA, 0x30, 0x5B, 0x4D,
- 0xDA, 0x16, 0xDA, 0x7D, 0x04, 0x88, 0xF5, 0x22,
- 0xA8, 0x0C, 0xB9, 0x41, 0xC7, 0x91, 0x64, 0x86,
- 0x99, 0x7D, 0x18, 0xB9, 0x67, 0xA2, 0x6E, 0x05,
- 0x1A, 0x82, 0x8F, 0xA2, 0xEB, 0x4D, 0x0B, 0x8C,
- 0x88, 0x2D, 0xBA, 0x77, 0x87, 0x32, 0x50, 0x3C,
- 0x4C, 0xD8, 0xD3, 0x50, 0x39, 0xFA, 0xDF, 0x48,
- 0x3E, 0x30, 0xF5, 0x76, 0x06, 0xB0, 0x1A, 0x05,
- 0x60, 0x2C, 0xD3, 0xA0, 0x63, 0x1A, 0x19, 0x2D,
- 0x6B, 0x76, 0xF2, 0x31, 0x4C, 0xA7, 0xE6, 0x5C,
- 0x1B, 0x23, 0x20, 0x41, 0x32, 0xE5, 0x83, 0x47,
- 0x04, 0xB6, 0x3E, 0xE0, 0xFD, 0x49, 0x1E, 0x1B,
- 0x75, 0x10, 0x11, 0x46, 0xE9, 0xF9, 0x96, 0x9A,
- 0xD7, 0x59, 0xFE, 0x38, 0x31, 0xFE, 0x79, 0xC4,
- 0xC8, 0x46, 0x88, 0xDE, 0x2E, 0xAE, 0x20, 0xED,
- 0x77, 0x50, 0x40, 0x38, 0x26, 0xD3, 0x35, 0xF6,
- 0x29, 0x55, 0x6A, 0x6B, 0x38, 0x69, 0xFE, 0x90,
- 0x5B, 0xA7, 0xFA, 0x6B, 0x73, 0x4F, 0xB9, 0x5D,
- 0xDC, 0x6F, 0x98, 0xC3, 0x6A, 0xC4, 0xB5, 0x09,
- 0xC5, 0x84, 0xA5, 0x6A, 0x84, 0xA4, 0xB3, 0x8A,
- 0x5F, 0xCA, 0x92, 0x64, 0x9E, 0xC3, 0x0F, 0x84,
- 0x8B, 0x2D, 0x48, 0xC6, 0x67, 0xAE, 0x07, 0xE0,
- 0x28, 0x38, 0x6D, 0xC4, 0x4D, 0x13, 0x87, 0xE0,
- 0xB2, 0x2F, 0xAA, 0xC0, 0xCF, 0x68, 0xD7, 0x9C,
- 0xB8, 0x07, 0xE4, 0x51, 0xD7, 0x75, 0x86, 0xFA,
- 0x0C, 0x50, 0x74, 0x68, 0x00, 0x64, 0x2A, 0x27,
- 0x59, 0xE9, 0x80, 0xEB, 0xC2, 0xA3, 0xFA, 0x58,
- 0xCC, 0x03, 0xE7, 0x7B, 0x66, 0x53, 0xFF, 0x90,
- 0xA0, 0x85, 0xE2, 0xF8, 0x82, 0xFE, 0xC6, 0x2B,
- 0xFF, 0x5E, 0x70, 0x85, 0x34, 0xB7, 0x22, 0x38,
- 0xDB, 0xBC, 0x15, 0x30, 0x59, 0xC1, 0x48, 0x42,
- 0xE5, 0x38, 0x8D, 0x37, 0x59, 0xDB, 0xA3, 0x20,
- 0x17, 0x36, 0x1D, 0x4B, 0xBF, 0x4E, 0xA4, 0x35,
- 0xCC, 0xFE, 0xF5, 0x7A, 0x73, 0xB4, 0x6D, 0x20,
- 0x1D, 0xC0, 0xE5, 0x21, 0x5C, 0xD2, 0x8A, 0x65,
- 0x08, 0xB6, 0x63, 0xAC, 0x9A, 0x1E, 0x3F, 0x3C,
- 0xAB, 0xB6, 0x6D, 0x34, 0xB2, 0x3A, 0x08, 0xDA,
- 0x29, 0x63, 0xD1, 0xA4, 0x83, 0x52, 0xB0, 0x63,
- 0x1B, 0x89, 0x35, 0x57, 0x59, 0x2C, 0x0F, 0x72,
- 0x72, 0xFD, 0xA0, 0xAC, 0xDB, 0xB4, 0xA3, 0xA1,
- 0x18, 0x10, 0x12, 0x97, 0x99, 0x63, 0x38, 0x98,
- 0x96, 0xB5, 0x16, 0x07, 0x4E, 0xE9, 0x2C, 0x97
-};
-
-static const struct blockcipher_test_data
-triple_des192ctr_test_vector = {
- .crypto_algo = RTE_CRYPTO_CIPHER_3DES_CTR,
- .cipher_key = {
- .data = {
- 0xE4, 0x23, 0x33, 0x8A, 0x35, 0x64, 0x61, 0xE2,
- 0x49, 0x03, 0xDD, 0xC6, 0xB8, 0xCA, 0x55, 0x7A,
- 0xD4, 0xC3, 0xA3, 0xAA, 0x33, 0x62, 0x61, 0xE0
- },
- .len = 24
- },
- .iv = {
- .data = {
- 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07
- },
- .len = 8
- },
- .plaintext = {
- .data = plaintext_des,
- .len = 512
- },
- .ciphertext = {
- .data = ciphertext512_des192ctr,
- .len = 512
- }
-};
-
-static const struct blockcipher_test_data
-triple_des192ctr_sha1_test_vector = {
- .crypto_algo = RTE_CRYPTO_CIPHER_3DES_CTR,
- .cipher_key = {
- .data = {
- 0xE4, 0x23, 0x33, 0x8A, 0x35, 0x64, 0x61, 0xE2,
- 0x49, 0x03, 0xDD, 0xC6, 0xB8, 0xCA, 0x55, 0x7A,
- 0xD4, 0xC3, 0xA3, 0xAA, 0x33, 0x62, 0x61, 0xE0
- },
- .len = 24
- },
- .iv = {
- .data = {
- 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07
- },
- .len = 8
- },
- .plaintext = {
- .data = plaintext_des,
- .len = 512
- },
- .ciphertext = {
- .data = ciphertext512_des192ctr,
- .len = 512
- },
- .auth_algo = RTE_CRYPTO_AUTH_SHA1,
- .digest = {
- .data = {
- 0xEA, 0x62, 0xB9, 0xB2, 0x78, 0x6C, 0x8E, 0xDB,
- 0xA3, 0xB6, 0xFF, 0x23, 0x3A, 0x47, 0xD8, 0xC8,
- 0xED, 0x5E, 0x20, 0x1D
- },
- .len = 20
- }
-};
-
-static const struct blockcipher_test_data
-triple_des192ctr_hmac_sha1_test_vector = {
- .crypto_algo = RTE_CRYPTO_CIPHER_3DES_CTR,
- .cipher_key = {
- .data = {
- 0xE4, 0x23, 0x33, 0x8A, 0x35, 0x64, 0x61, 0xE2,
- 0x49, 0x03, 0xDD, 0xC6, 0xB8, 0xCA, 0x55, 0x7A,
- 0xD4, 0xC3, 0xA3, 0xAA, 0x33, 0x62, 0x61, 0xE0
- },
- .len = 24
- },
- .iv = {
- .data = {
- 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07
- },
- .len = 8
- },
- .plaintext = {
- .data = plaintext_des,
- .len = 512
- },
- .ciphertext = {
- .data = ciphertext512_des192ctr,
- .len = 512
- },
- .auth_algo = RTE_CRYPTO_AUTH_SHA1_HMAC,
- .auth_key = {
- .data = {
- 0xF8, 0x2A, 0xC7, 0x54, 0xDB, 0x96, 0x18, 0xAA,
- 0xC3, 0xA1, 0x53, 0xF6, 0x1F, 0x17, 0x60, 0xBD,
- 0xDE, 0xF4, 0xDE, 0xAD
- },
- .len = 20
- },
- .digest = {
- .data = {
- 0x32, 0xD5, 0x19, 0x8F, 0x79, 0x3A, 0xAA, 0x7B,
- 0x70, 0x67, 0x4E, 0x63, 0x88, 0xA3, 0x9A, 0x82,
- 0x07, 0x33, 0x12, 0x94
- },
- .len = 20
- }
-};
-
-static const uint8_t ciphertext512_des128cbc[] = {
- 0x28, 0x2a, 0xff, 0x15, 0x5c, 0xdf, 0xd9, 0x6b,
- 0x54, 0xbc, 0x7b, 0xfb, 0xc5, 0x64, 0x4d, 0xdd,
- 0x3e, 0xf2, 0x9e, 0xb7, 0x53, 0x65, 0x37, 0x05,
- 0xe0, 0xdf, 0xae, 0xf7, 0xc9, 0x27, 0xe4, 0xec,
- 0x11, 0x27, 0xc2, 0x9e, 0x02, 0x4e, 0x03, 0x3b,
- 0x33, 0xf2, 0x66, 0x08, 0x24, 0x5f, 0xab, 0xc2,
- 0x7e, 0x21, 0x19, 0x5d, 0x51, 0xc3, 0xe2, 0x97,
- 0x6f, 0x2e, 0xb4, 0xaa, 0x34, 0x70, 0x88, 0x78,
- 0x4e, 0xe7, 0x3d, 0xe1, 0x9f, 0x87, 0x1c, 0x8b,
- 0xac, 0x8d, 0xa1, 0x1a, 0xcd, 0xb0, 0xf8, 0xb6,
- 0x24, 0x36, 0xe3, 0x8c, 0x07, 0xe7, 0xe4, 0x92,
- 0x13, 0x86, 0x6f, 0x13, 0xec, 0x04, 0x5c, 0xe9,
- 0xb9, 0xca, 0x45, 0x8a, 0x2c, 0x46, 0xda, 0x54,
- 0x1d, 0xb5, 0x81, 0xb1, 0xcd, 0xf3, 0x7d, 0x11,
- 0x6b, 0xb3, 0x0a, 0x45, 0xe5, 0x6e, 0x51, 0x3e,
- 0x2c, 0xac, 0x7c, 0xbc, 0xa7, 0x7e, 0x22, 0x4d,
- 0xe6, 0x02, 0xe3, 0x3f, 0x77, 0xd7, 0x73, 0x72,
- 0x0e, 0xfb, 0x42, 0x85, 0x80, 0xdf, 0xa8, 0x91,
- 0x60, 0x40, 0x48, 0xcd, 0x1b, 0xd9, 0xbf, 0x2f,
- 0xf2, 0xdf, 0xd0, 0xbd, 0x3f, 0x82, 0xce, 0x15,
- 0x9d, 0x6e, 0xc6, 0x59, 0x6f, 0x27, 0x0d, 0xf9,
- 0x26, 0xe2, 0x11, 0x29, 0x50, 0xc3, 0x0a, 0xb7,
- 0xde, 0x9d, 0xe9, 0x55, 0xa1, 0xe9, 0x01, 0x33,
- 0x56, 0x51, 0xa7, 0x3a, 0x9e, 0x63, 0xc5, 0x08,
- 0x01, 0x3b, 0x03, 0x4b, 0xc6, 0xc4, 0xa1, 0xc0,
- 0xc0, 0xd0, 0x0e, 0x48, 0xe5, 0x4c, 0x55, 0x6b,
- 0x4a, 0xc1, 0x0a, 0x24, 0x4b, 0xd0, 0x02, 0xf4,
- 0x31, 0x63, 0x11, 0xbd, 0xa6, 0x1f, 0xf4, 0xae,
- 0x23, 0x5a, 0x40, 0x7e, 0x0e, 0x4e, 0x63, 0x8b,
- 0x66, 0x3d, 0x55, 0x46, 0x6e, 0x5c, 0x76, 0xa7,
- 0x68, 0x31, 0xce, 0x5d, 0xca, 0xe2, 0xb4, 0xb0,
- 0xc1, 0x1f, 0x66, 0x18, 0x75, 0x64, 0x73, 0xa9,
- 0x9e, 0xd5, 0x0e, 0x0e, 0xf7, 0x77, 0x61, 0xf8,
- 0x89, 0xc6, 0xcf, 0x0c, 0x41, 0xd3, 0x8f, 0xfd,
- 0x22, 0x52, 0x4f, 0x94, 0x5c, 0x19, 0x11, 0x3a,
- 0xb5, 0x63, 0xe8, 0x81, 0x33, 0x13, 0x54, 0x3c,
- 0x93, 0x36, 0xb5, 0x5b, 0x51, 0xaf, 0x51, 0xa2,
- 0x08, 0xae, 0x83, 0x15, 0x77, 0x07, 0x28, 0x0d,
- 0x98, 0xe1, 0x2f, 0x69, 0x0e, 0xfb, 0x9a, 0x2e,
- 0x27, 0x27, 0xb0, 0xd5, 0xce, 0xf8, 0x16, 0x55,
- 0xfd, 0xaa, 0xd7, 0x1a, 0x1b, 0x2e, 0x4c, 0x86,
- 0x7a, 0x6a, 0x90, 0xf7, 0x0a, 0x07, 0xd3, 0x81,
- 0x4b, 0x75, 0x6a, 0x79, 0xdb, 0x63, 0x45, 0x0f,
- 0x31, 0x7e, 0xd0, 0x2a, 0x14, 0xff, 0xee, 0xcc,
- 0x97, 0x8a, 0x7d, 0x74, 0xbd, 0x9d, 0xaf, 0x00,
- 0xdb, 0x7e, 0xf3, 0xe6, 0x22, 0x76, 0x77, 0x58,
- 0xba, 0x1c, 0x06, 0x96, 0xfb, 0x6f, 0x41, 0x71,
- 0x66, 0x98, 0xae, 0x31, 0x7d, 0x29, 0x18, 0x71,
- 0x0e, 0xe4, 0x98, 0x7e, 0x59, 0x5a, 0xc9, 0x78,
- 0x9c, 0xfb, 0x6c, 0x81, 0x44, 0xb4, 0x0f, 0x5e,
- 0x18, 0x53, 0xb8, 0x6f, 0xbc, 0x3b, 0x15, 0xf0,
- 0x10, 0xdd, 0x0d, 0x4b, 0x0a, 0x36, 0x0e, 0xb4,
- 0x76, 0x0f, 0x16, 0xa7, 0x5c, 0x9d, 0xcf, 0xb0,
- 0x6d, 0x38, 0x02, 0x07, 0x05, 0xe9, 0xe9, 0x46,
- 0x08, 0xb8, 0x52, 0xd6, 0xd9, 0x4c, 0x81, 0x63,
- 0x1d, 0xe2, 0x5b, 0xd0, 0xf6, 0x5e, 0x1e, 0x81,
- 0x48, 0x08, 0x66, 0x3a, 0x85, 0xed, 0x65, 0xfe,
- 0xe8, 0x05, 0x7a, 0xe1, 0xe6, 0x12, 0xf2, 0x52,
- 0x83, 0xdd, 0x82, 0xbe, 0xf6, 0x34, 0x8a, 0x6f,
- 0xc5, 0x83, 0xcd, 0x3f, 0xbe, 0x58, 0x8b, 0x11,
- 0x78, 0xdc, 0x0c, 0x83, 0x72, 0x5d, 0x05, 0x2a,
- 0x01, 0x29, 0xee, 0x48, 0x9a, 0x67, 0x00, 0x6e,
- 0x14, 0x60, 0x2d, 0x00, 0x52, 0x87, 0x98, 0x5e,
- 0x43, 0xfe, 0xf1, 0x10, 0x14, 0xf1, 0x91, 0xcc
-};
-
-static const struct blockcipher_test_data
-triple_des128cbc_test_vector = {
- .crypto_algo = RTE_CRYPTO_CIPHER_3DES_CBC,
- .cipher_key = {
- .data = {
- 0xE4, 0x23, 0x33, 0x8A, 0x35, 0x64, 0x61, 0xE2,
- 0x49, 0x03, 0xDD, 0xC6, 0xB8, 0xCA, 0x55, 0x7A
- },
- .len = 16
- },
- .iv = {
- .data = {
- 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07
- },
- .len = 8
- },
- .plaintext = {
- .data = plaintext_des,
- .len = 512
- },
- .ciphertext = {
- .data = ciphertext512_des128cbc,
- .len = 512
- }
-};
-
-static const struct blockcipher_test_data
-triple_des128cbc_sha1_test_vector = {
- .crypto_algo = RTE_CRYPTO_CIPHER_3DES_CBC,
- .cipher_key = {
- .data = {
- 0xE4, 0x23, 0x33, 0x8A, 0x35, 0x64, 0x61, 0xE2,
- 0x49, 0x03, 0xDD, 0xC6, 0xB8, 0xCA, 0x55, 0x7A
- },
- .len = 16
- },
- .iv = {
- .data = {
- 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07
- },
- .len = 8
- },
- .plaintext = {
- .data = plaintext_des,
- .len = 512
- },
- .ciphertext = {
- .data = ciphertext512_des128cbc,
- .len = 512
- },
- .auth_algo = RTE_CRYPTO_AUTH_SHA1,
- .digest = {
- .data = {
- 0x94, 0x45, 0x7B, 0xDF, 0xFE, 0x80, 0xB9, 0xA6,
- 0xA0, 0x7A, 0xE8, 0x93, 0x40, 0x7B, 0x85, 0x02,
- 0x1C, 0xD7, 0xE8, 0x87
- },
- .len = 20
- }
-};
-
-static const struct blockcipher_test_data
-triple_des128cbc_hmac_sha1_test_vector = {
- .crypto_algo = RTE_CRYPTO_CIPHER_3DES_CBC,
- .cipher_key = {
- .data = {
- 0xE4, 0x23, 0x33, 0x8A, 0x35, 0x64, 0x61, 0xE2,
- 0x49, 0x03, 0xDD, 0xC6, 0xB8, 0xCA, 0x55, 0x7A
- },
- .len = 16
- },
- .iv = {
- .data = {
- 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07
- },
- .len = 8
- },
- .plaintext = {
- .data = plaintext_des,
- .len = 512
- },
- .ciphertext = {
- .data = ciphertext512_des128cbc,
- .len = 512
- },
- .auth_algo = RTE_CRYPTO_AUTH_SHA1_HMAC,
- .auth_key = {
- .data = {
- 0xF8, 0x2A, 0xC7, 0x54, 0xDB, 0x96, 0x18, 0xAA,
- 0xC3, 0xA1, 0x53, 0xF6, 0x1F, 0x17, 0x60, 0xBD,
- 0xDE, 0xF4, 0xDE, 0xAD
- },
- .len = 20
- },
- .digest = {
- .data = {
- 0x7E, 0xBA, 0xFF, 0x86, 0x8D, 0x65, 0xCD, 0x08,
- 0x76, 0x34, 0x94, 0xE9, 0x9A, 0xCD, 0xB2, 0xBB,
- 0xBF, 0x65, 0xF5, 0x42
- },
- .len = 20
- }
-};
-
-static const uint8_t ciphertext512_des192cbc[] = {
- 0xd0, 0xc9, 0xdc, 0x51, 0x29, 0x97, 0x03, 0x64,
- 0xcd, 0x22, 0xba, 0x3d, 0x2b, 0xbc, 0x21, 0x37,
- 0x7b, 0x1e, 0x29, 0x23, 0xeb, 0x51, 0x6e, 0xac,
- 0xbe, 0x5b, 0xd3, 0x67, 0xe0, 0x3f, 0xc3, 0xb5,
- 0xe3, 0x04, 0x17, 0x42, 0x2b, 0xaa, 0xdd, 0xd6,
- 0x0e, 0x69, 0xd0, 0x8f, 0x8a, 0xfc, 0xb4, 0x55,
- 0x67, 0x06, 0x51, 0xbb, 0x00, 0x57, 0xee, 0x95,
- 0x28, 0x79, 0x3f, 0xd9, 0x97, 0x2b, 0xb0, 0x02,
- 0x35, 0x08, 0xce, 0x7a, 0xc3, 0x43, 0x2c, 0x87,
- 0xaa, 0x97, 0x6a, 0xad, 0xf0, 0x26, 0xea, 0x1d,
- 0xbb, 0x08, 0xe9, 0x52, 0x11, 0xd3, 0xaf, 0x36,
- 0x17, 0x14, 0x21, 0xb2, 0xbc, 0x42, 0x51, 0x33,
- 0x27, 0x8c, 0xd8, 0x45, 0xb9, 0x76, 0xa0, 0x11,
- 0x24, 0x34, 0xde, 0x4d, 0x13, 0x67, 0x1b, 0xc3,
- 0x31, 0x12, 0x66, 0x56, 0x59, 0xd2, 0xb1, 0x8f,
- 0xec, 0x1e, 0xc0, 0x10, 0x7a, 0x86, 0xb1, 0x60,
- 0xc3, 0x01, 0xd6, 0xa8, 0x55, 0xad, 0x58, 0x63,
- 0xca, 0x68, 0xa9, 0x33, 0xe3, 0x93, 0x90, 0x7d,
- 0x8f, 0xca, 0xf8, 0x1c, 0xc2, 0x9e, 0xfb, 0xde,
- 0x9c, 0xc7, 0xf2, 0x6c, 0xff, 0xcc, 0x39, 0x17,
- 0x49, 0x33, 0x0d, 0x7c, 0xed, 0x07, 0x99, 0x91,
- 0x91, 0x6c, 0x5f, 0x3f, 0x02, 0x09, 0xdc, 0x70,
- 0xf9, 0x3b, 0x8d, 0xaa, 0xf4, 0xbc, 0x0e, 0xec,
- 0xf2, 0x26, 0xfb, 0xb2, 0x1c, 0x31, 0xae, 0xc6,
- 0x72, 0xe8, 0x0b, 0x75, 0x05, 0x57, 0x58, 0x98,
- 0x92, 0x37, 0x27, 0x8e, 0x3b, 0x0c, 0x25, 0xfb,
- 0xcf, 0x82, 0x02, 0xd5, 0x0b, 0x1f, 0x89, 0x49,
- 0xcd, 0x0f, 0xa1, 0xa7, 0x08, 0x63, 0x56, 0xa7,
- 0x1f, 0x80, 0x3a, 0xef, 0x24, 0x89, 0x57, 0x1a,
- 0x02, 0xdc, 0x2e, 0x51, 0xbd, 0x4a, 0x10, 0x23,
- 0xfc, 0x02, 0x1a, 0x3f, 0x34, 0xbf, 0x1c, 0x98,
- 0x1a, 0x40, 0x0a, 0x96, 0x8e, 0x41, 0xd5, 0x09,
- 0x55, 0x37, 0xe9, 0x25, 0x11, 0x83, 0xf8, 0xf3,
- 0xd4, 0xb0, 0xdb, 0x16, 0xd7, 0x51, 0x7e, 0x94,
- 0xf7, 0xb4, 0x26, 0xe0, 0xf4, 0x80, 0x01, 0x65,
- 0x51, 0xeb, 0xbc, 0xb0, 0x65, 0x8f, 0xdd, 0xb5,
- 0xf7, 0x00, 0xec, 0x40, 0xab, 0x7d, 0x96, 0xcc,
- 0x8d, 0xec, 0x89, 0x80, 0x31, 0x39, 0xa2, 0x5c,
- 0xb0, 0x55, 0x4c, 0xee, 0xdd, 0x15, 0x2b, 0xa9,
- 0x86, 0x4e, 0x23, 0x14, 0x36, 0xc5, 0x57, 0xf5,
- 0xe3, 0xe8, 0x89, 0xc9, 0xb7, 0xf8, 0xeb, 0x08,
- 0xe5, 0x93, 0x12, 0x5c, 0x0f, 0x79, 0xa1, 0x86,
- 0xe4, 0xc2, 0xeb, 0xa6, 0xa0, 0x50, 0x6a, 0xec,
- 0xd3, 0xce, 0x50, 0x78, 0x4e, 0x4f, 0x93, 0xd8,
- 0xdc, 0xb4, 0xec, 0x02, 0xe9, 0xbd, 0x17, 0x99,
- 0x1e, 0x16, 0x4e, 0xd7, 0xb0, 0x07, 0x02, 0x55,
- 0x63, 0x24, 0x4f, 0x7b, 0x8f, 0xc5, 0x7a, 0x12,
- 0x29, 0xff, 0x5d, 0xc1, 0xe7, 0xae, 0x48, 0xc8,
- 0x57, 0x53, 0xe7, 0xcd, 0x10, 0x6c, 0x19, 0xfc,
- 0xcc, 0xb9, 0xb1, 0xbe, 0x48, 0x9f, 0x2d, 0x3f,
- 0x39, 0x2e, 0xdd, 0x71, 0xde, 0x1b, 0x54, 0xee,
- 0x7d, 0x94, 0x8f, 0x27, 0x23, 0xe9, 0x74, 0x92,
- 0x14, 0x93, 0x84, 0x65, 0xc9, 0x22, 0x7c, 0xa8,
- 0x1b, 0x72, 0x73, 0xb1, 0x23, 0xa0, 0x6b, 0xcc,
- 0xb5, 0x22, 0x06, 0x15, 0xe5, 0x96, 0x03, 0x4a,
- 0x52, 0x8d, 0x1d, 0xbf, 0x3e, 0x82, 0x45, 0x9c,
- 0x75, 0x9e, 0xa9, 0x3a, 0x97, 0xb6, 0x5d, 0xc4,
- 0x75, 0x67, 0xa1, 0xf3, 0x0f, 0x7a, 0xfd, 0x71,
- 0x58, 0x04, 0xf9, 0xa7, 0xc2, 0x56, 0x74, 0x04,
- 0x74, 0x68, 0x6d, 0x8a, 0xf6, 0x6c, 0x5d, 0xd8,
- 0xb5, 0xed, 0x70, 0x23, 0x32, 0x4d, 0x75, 0x92,
- 0x88, 0x7b, 0x39, 0x37, 0x02, 0x4b, 0xb2, 0x1c,
- 0x1f, 0x7e, 0x5b, 0x1b, 0x10, 0xfc, 0x17, 0x21,
- 0x66, 0x62, 0x63, 0xc2, 0xcd, 0x16, 0x96, 0x3e
-};
-
-static const struct blockcipher_test_data
-triple_des192cbc_test_vector = {
- .crypto_algo = RTE_CRYPTO_CIPHER_3DES_CBC,
- .cipher_key = {
- .data = {
- 0xE4, 0x23, 0x33, 0x8A, 0x35, 0x64, 0x61, 0xE2,
- 0x49, 0x03, 0xDD, 0xC6, 0xB8, 0xCA, 0x55, 0x7A,
- 0xD4, 0xC3, 0xA3, 0xAA, 0x33, 0x62, 0x61, 0xE0
- },
- .len = 24
- },
- .iv = {
- .data = {
- 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07
- },
- .len = 8
- },
- .plaintext = {
- .data = plaintext_des,
- .len = 512
- },
- .ciphertext = {
- .data = ciphertext512_des192cbc,
- .len = 512
- }
-};
-
-static const struct blockcipher_test_data
-triple_des192cbc_sha1_test_vector = {
- .crypto_algo = RTE_CRYPTO_CIPHER_3DES_CBC,
- .cipher_key = {
- .data = {
- 0xE4, 0x23, 0x33, 0x8A, 0x35, 0x64, 0x61, 0xE2,
- 0x49, 0x03, 0xDD, 0xC6, 0xB8, 0xCA, 0x55, 0x7A,
- 0xD4, 0xC3, 0xA3, 0xAA, 0x33, 0x62, 0x61, 0xE0
- },
- .len = 24
- },
- .iv = {
- .data = {
- 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07
- },
- .len = 8
- },
- .plaintext = {
- .data = plaintext_des,
- .len = 512
- },
- .ciphertext = {
- .data = ciphertext512_des192cbc,
- .len = 512
- },
- .auth_algo = RTE_CRYPTO_AUTH_SHA1,
- .digest = {
- .data = {
- 0x53, 0x27, 0xC0, 0xE6, 0xD6, 0x1B, 0xD6, 0x45,
- 0x94, 0x2D, 0xCE, 0x8B, 0x29, 0xA3, 0x52, 0x14,
- 0xC1, 0x6B, 0x87, 0x99
- },
- .len = 20
- }
-};
-
-static const struct blockcipher_test_data
-triple_des192cbc_hmac_sha1_test_vector = {
- .crypto_algo = RTE_CRYPTO_CIPHER_3DES_CBC,
- .cipher_key = {
- .data = {
- 0xE4, 0x23, 0x33, 0x8A, 0x35, 0x64, 0x61, 0xE2,
- 0x49, 0x03, 0xDD, 0xC6, 0xB8, 0xCA, 0x55, 0x7A,
- 0xD4, 0xC3, 0xA3, 0xAA, 0x33, 0x62, 0x61, 0xE0
- },
- .len = 24
- },
- .iv = {
- .data = {
- 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07
- },
- .len = 8
- },
- .plaintext = {
- .data = plaintext_des,
- .len = 512
- },
- .ciphertext = {
- .data = ciphertext512_des192cbc,
- .len = 512
- },
- .auth_algo = RTE_CRYPTO_AUTH_SHA1_HMAC,
- .auth_key = {
- .data = {
- 0xF8, 0x2A, 0xC7, 0x54, 0xDB, 0x96, 0x18, 0xAA,
- 0xC3, 0xA1, 0x53, 0xF6, 0x1F, 0x17, 0x60, 0xBD,
- 0xDE, 0xF4, 0xDE, 0xAD
- },
- .len = 20
- },
- .digest = {
- .data = {
- 0xBA, 0xAC, 0x74, 0x19, 0x43, 0xB0, 0x72, 0xB8,
- 0x08, 0xF5, 0x24, 0xC4, 0x09, 0xBD, 0x48, 0xC1,
- 0x3C, 0x50, 0x1C, 0xDD
- },
- .len = 20
- }
-};
-
-static const struct blockcipher_test_case triple_des_chain_test_cases[] = {
- {
- .test_descr = "3DES-128-CBC HMAC-SHA1 Encryption Digest",
- .test_data = &triple_des128cbc_hmac_sha1_test_vector,
- .op_mask = BLOCKCIPHER_TEST_OP_ENC_AUTH_GEN,
- .pmd_mask = BLOCKCIPHER_TEST_TARGET_PMD_OPENSSL |
- BLOCKCIPHER_TEST_TARGET_PMD_QAT
- },
- {
- .test_descr = "3DES-128-CBC HMAC-SHA1 Decryption Digest Verify",
- .test_data = &triple_des128cbc_hmac_sha1_test_vector,
- .op_mask = BLOCKCIPHER_TEST_OP_AUTH_VERIFY_DEC,
- .pmd_mask = BLOCKCIPHER_TEST_TARGET_PMD_OPENSSL |
- BLOCKCIPHER_TEST_TARGET_PMD_QAT
- },
- {
- .test_descr = "3DES-128-CBC SHA1 Encryption Digest",
- .test_data = &triple_des128cbc_sha1_test_vector,
- .op_mask = BLOCKCIPHER_TEST_OP_ENC_AUTH_GEN,
- .pmd_mask = BLOCKCIPHER_TEST_TARGET_PMD_OPENSSL
- },
- {
- .test_descr = "3DES-128-CBC SHA1 Decryption Digest Verify",
- .test_data = &triple_des128cbc_sha1_test_vector,
- .op_mask = BLOCKCIPHER_TEST_OP_AUTH_VERIFY_DEC,
- .pmd_mask = BLOCKCIPHER_TEST_TARGET_PMD_OPENSSL
- },
- {
- .test_descr = "3DES-192-CBC HMAC-SHA1 Encryption Digest",
- .test_data = &triple_des192cbc_hmac_sha1_test_vector,
- .op_mask = BLOCKCIPHER_TEST_OP_ENC_AUTH_GEN,
- .pmd_mask = BLOCKCIPHER_TEST_TARGET_PMD_OPENSSL |
- BLOCKCIPHER_TEST_TARGET_PMD_QAT
- },
- {
- .test_descr = "3DES-192-CBC HMAC-SHA1 Decryption Digest Verify",
- .test_data = &triple_des192cbc_hmac_sha1_test_vector,
- .op_mask = BLOCKCIPHER_TEST_OP_AUTH_VERIFY_DEC,
- .pmd_mask = BLOCKCIPHER_TEST_TARGET_PMD_OPENSSL |
- BLOCKCIPHER_TEST_TARGET_PMD_QAT
- },
- {
- .test_descr = "3DES-192-CBC SHA1 Encryption Digest",
- .test_data = &triple_des192cbc_sha1_test_vector,
- .op_mask = BLOCKCIPHER_TEST_OP_ENC_AUTH_GEN,
- .pmd_mask = BLOCKCIPHER_TEST_TARGET_PMD_OPENSSL
- },
- {
- .test_descr = "3DES-192-CBC SHA1 Decryption Digest Verify",
- .test_data = &triple_des192cbc_sha1_test_vector,
- .op_mask = BLOCKCIPHER_TEST_OP_AUTH_VERIFY_DEC,
- .pmd_mask = BLOCKCIPHER_TEST_TARGET_PMD_OPENSSL
- },
- {
- .test_descr = "3DES-128-CTR HMAC-SHA1 Encryption Digest",
- .test_data = &triple_des128ctr_hmac_sha1_test_vector,
- .op_mask = BLOCKCIPHER_TEST_OP_ENC_AUTH_GEN,
- .pmd_mask = BLOCKCIPHER_TEST_TARGET_PMD_OPENSSL |
- BLOCKCIPHER_TEST_TARGET_PMD_QAT
- },
- {
- .test_descr = "3DES-128-CTR HMAC-SHA1 Decryption Digest Verify",
- .test_data = &triple_des128ctr_hmac_sha1_test_vector,
- .op_mask = BLOCKCIPHER_TEST_OP_AUTH_VERIFY_DEC,
- .pmd_mask = BLOCKCIPHER_TEST_TARGET_PMD_OPENSSL |
- BLOCKCIPHER_TEST_TARGET_PMD_QAT
- },
- {
- .test_descr = "3DES-128-CTR SHA1 Encryption Digest",
- .test_data = &triple_des128ctr_sha1_test_vector,
- .op_mask = BLOCKCIPHER_TEST_OP_ENC_AUTH_GEN,
- .pmd_mask = BLOCKCIPHER_TEST_TARGET_PMD_OPENSSL
- },
- {
- .test_descr = "3DES-128-CTR SHA1 Decryption Digest Verify",
- .test_data = &triple_des128ctr_sha1_test_vector,
- .op_mask = BLOCKCIPHER_TEST_OP_AUTH_VERIFY_DEC,
- .pmd_mask = BLOCKCIPHER_TEST_TARGET_PMD_OPENSSL
- },
- {
- .test_descr = "3DES-192-CTR HMAC-SHA1 Encryption Digest",
- .test_data = &triple_des192ctr_hmac_sha1_test_vector,
- .op_mask = BLOCKCIPHER_TEST_OP_ENC_AUTH_GEN,
- .pmd_mask = BLOCKCIPHER_TEST_TARGET_PMD_OPENSSL |
- BLOCKCIPHER_TEST_TARGET_PMD_QAT
- },
- {
- .test_descr = "3DES-192-CTR HMAC-SHA1 Decryption Digest Verify",
- .test_data = &triple_des192ctr_hmac_sha1_test_vector,
- .op_mask = BLOCKCIPHER_TEST_OP_AUTH_VERIFY_DEC,
- .pmd_mask = BLOCKCIPHER_TEST_TARGET_PMD_OPENSSL |
- BLOCKCIPHER_TEST_TARGET_PMD_QAT
- },
- {
- .test_descr = "3DES-192-CTR SHA1 Encryption Digest",
- .test_data = &triple_des192ctr_sha1_test_vector,
- .op_mask = BLOCKCIPHER_TEST_OP_ENC_AUTH_GEN,
- .pmd_mask = BLOCKCIPHER_TEST_TARGET_PMD_OPENSSL
- },
- {
- .test_descr = "3DES-192-CTR SHA1 Decryption Digest Verify",
- .test_data = &triple_des192ctr_sha1_test_vector,
- .op_mask = BLOCKCIPHER_TEST_OP_AUTH_VERIFY_DEC,
- .pmd_mask = BLOCKCIPHER_TEST_TARGET_PMD_OPENSSL
- },
- {
- .test_descr = "3DES-128-CBC HMAC-SHA1 Encryption Digest OOP",
- .test_data = &triple_des128cbc_hmac_sha1_test_vector,
- .op_mask = BLOCKCIPHER_TEST_OP_ENC_AUTH_GEN,
- .feature_mask = BLOCKCIPHER_TEST_FEATURE_OOP,
- .pmd_mask = BLOCKCIPHER_TEST_TARGET_PMD_OPENSSL |
- BLOCKCIPHER_TEST_TARGET_PMD_QAT
- },
- {
- .test_descr = "3DES-128-CBC HMAC-SHA1 Decryption Digest"
- " Verify OOP",
- .test_data = &triple_des128cbc_hmac_sha1_test_vector,
- .op_mask = BLOCKCIPHER_TEST_OP_AUTH_VERIFY_DEC,
- .feature_mask = BLOCKCIPHER_TEST_FEATURE_OOP,
- .pmd_mask = BLOCKCIPHER_TEST_TARGET_PMD_OPENSSL |
- BLOCKCIPHER_TEST_TARGET_PMD_QAT
- },
- {
- .test_descr = "3DES-128-CBC HMAC-SHA1 Encryption Digest"
- " Sessionless",
- .test_data = &triple_des128cbc_hmac_sha1_test_vector,
- .op_mask = BLOCKCIPHER_TEST_OP_ENC_AUTH_GEN,
- .feature_mask = BLOCKCIPHER_TEST_FEATURE_SESSIONLESS,
- .pmd_mask = BLOCKCIPHER_TEST_TARGET_PMD_OPENSSL
- },
- {
- .test_descr =
- "3DES-128-CBC HMAC-SHA1 Decryption Digest"
- " Verify Sessionless",
- .test_data = &triple_des128cbc_hmac_sha1_test_vector,
- .op_mask = BLOCKCIPHER_TEST_OP_AUTH_VERIFY_DEC,
- .feature_mask = BLOCKCIPHER_TEST_FEATURE_SESSIONLESS,
- .pmd_mask = BLOCKCIPHER_TEST_TARGET_PMD_OPENSSL
- },
-};
-
-static const struct blockcipher_test_case triple_des_cipheronly_test_cases[] = {
- {
- .test_descr = "3DES-128-CBC Encryption",
- .test_data = &triple_des128cbc_test_vector,
- .op_mask = BLOCKCIPHER_TEST_OP_ENCRYPT,
- .pmd_mask = BLOCKCIPHER_TEST_TARGET_PMD_OPENSSL |
- BLOCKCIPHER_TEST_TARGET_PMD_QAT
- },
- {
- .test_descr = "3DES-128-CBC Decryption",
- .test_data = &triple_des128cbc_test_vector,
- .op_mask = BLOCKCIPHER_TEST_OP_DECRYPT,
- .pmd_mask = BLOCKCIPHER_TEST_TARGET_PMD_OPENSSL |
- BLOCKCIPHER_TEST_TARGET_PMD_QAT
- },
- {
- .test_descr = "3DES-192-CBC Encryption",
- .test_data = &triple_des192cbc_test_vector,
- .op_mask = BLOCKCIPHER_TEST_OP_ENCRYPT,
- .pmd_mask = BLOCKCIPHER_TEST_TARGET_PMD_OPENSSL |
- BLOCKCIPHER_TEST_TARGET_PMD_QAT
- },
- {
- .test_descr = "3DES-192-CBC Decryption",
- .test_data = &triple_des192cbc_test_vector,
- .op_mask = BLOCKCIPHER_TEST_OP_DECRYPT,
- .pmd_mask = BLOCKCIPHER_TEST_TARGET_PMD_OPENSSL |
- BLOCKCIPHER_TEST_TARGET_PMD_QAT
- },
- {
- .test_descr = "3DES-128-CTR Encryption",
- .test_data = &triple_des128ctr_test_vector,
- .op_mask = BLOCKCIPHER_TEST_OP_ENCRYPT,
- .pmd_mask = BLOCKCIPHER_TEST_TARGET_PMD_OPENSSL |
- BLOCKCIPHER_TEST_TARGET_PMD_QAT
- },
- {
- .test_descr = "3DES-128-CTR Decryption",
- .test_data = &triple_des128ctr_test_vector,
- .op_mask = BLOCKCIPHER_TEST_OP_DECRYPT,
- .pmd_mask = BLOCKCIPHER_TEST_TARGET_PMD_OPENSSL |
- BLOCKCIPHER_TEST_TARGET_PMD_QAT
- },
- {
- .test_descr = "3DES-192-CTR Encryption",
- .test_data = &triple_des192ctr_test_vector,
- .op_mask = BLOCKCIPHER_TEST_OP_ENCRYPT,
- .pmd_mask = BLOCKCIPHER_TEST_TARGET_PMD_OPENSSL |
- BLOCKCIPHER_TEST_TARGET_PMD_QAT
- },
- {
- .test_descr = "3DES-192-CTR Decryption",
- .test_data = &triple_des192ctr_test_vector,
- .op_mask = BLOCKCIPHER_TEST_OP_DECRYPT,
- .pmd_mask = BLOCKCIPHER_TEST_TARGET_PMD_OPENSSL |
- BLOCKCIPHER_TEST_TARGET_PMD_QAT
- }
-};
-
-#endif /* TEST_CRYPTODEV_DES_TEST_VECTORS_H_ */
diff --git a/app/test/test_cryptodev_gcm_test_vectors.h b/app/test/test_cryptodev_gcm_test_vectors.h
deleted file mode 100644
index b404242b..00000000
--- a/app/test/test_cryptodev_gcm_test_vectors.h
+++ /dev/null
@@ -1,1238 +0,0 @@
-/*-
- * BSD LICENSE
- *
- * Copyright(c) 2015 Intel Corporation. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * * Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * * Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in
- * the documentation and/or other materials provided with the
- * distribution.
- * * Neither the name of Intel Corporation nor the names of its
- * contributors may be used to endorse or promote products derived
- * from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
- * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
- * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#ifndef TEST_CRYPTODEV_GCM_TEST_VECTORS_H_
-#define TEST_CRYPTODEV_GCM_TEST_VECTORS_H_
-
-#define GMAC_LARGE_PLAINTEXT_LENGTH 65376
-
-struct gcm_test_data {
- struct {
- uint8_t data[64];
- unsigned len;
- } key;
-
- struct {
- uint8_t data[64] __rte_aligned(16);
- unsigned len;
- } iv;
-
- struct {
- uint8_t data[64];
- unsigned len;
- } aad;
-
- struct {
- uint8_t data[1024];
- unsigned len;
- } plaintext;
-
- struct {
- uint8_t data[1024];
- unsigned len;
- } ciphertext;
-
- struct {
- uint8_t data[16];
- unsigned len;
- } auth_tag;
-
-};
-
-struct gmac_test_data {
- struct {
- uint8_t data[64];
- unsigned len;
- } key;
-
- struct {
- uint8_t data[64] __rte_aligned(16);
- unsigned len;
- } iv;
-
- struct {
- uint8_t *data;
- unsigned len;
- } aad;
-
- struct {
- uint8_t *data;
- unsigned len;
- } plaintext;
-
- struct {
- uint8_t data[16];
- unsigned len;
- } gmac_tag;
-
-};
-
-/** AES-128 Test Vectors */
-static const struct gcm_test_data gcm_test_case_1 = {
- .key = {
- .data = {
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
- .len = 16
- },
- .iv = {
- .data = {
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00 },
- .len = 12
- },
- .aad = {
- .data = { 0 },
- .len = 0
- },
- .plaintext = {
- .data = {
- 0x00 },
- .len = 0
- },
- .ciphertext = {
- .data = {
- 0x00
- },
- .len = 0
- },
- .auth_tag = {
- .data = {
- 0x58, 0xe2, 0xfc, 0xce, 0xfa, 0x7e, 0x30, 0x61,
- 0x36, 0x7f, 0x1d, 0x57, 0xa4, 0xe7, 0x45, 0x5a },
- .len = 16
- }
-};
-
-/** AES-128 Test Vectors */
-static const struct gcm_test_data gcm_test_case_2 = {
- .key = {
- .data = {
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
- .len = 16
- },
- .iv = {
- .data = {
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00 },
- .len = 12
- },
- .aad = {
- .data = { 0 },
- .len = 0
- },
- .plaintext = {
- .data = {
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
- .len = 16
- },
- .ciphertext = {
- .data = {
- 0x03, 0x88, 0xda, 0xce, 0x60, 0xb6, 0xa3, 0x92,
- 0xf3, 0x28, 0xc2, 0xb9, 0x71, 0xb2, 0xfe, 0x78 },
- .len = 16
- },
- .auth_tag = {
- .data = {
- 0xab, 0x6e, 0x47, 0xd4, 0x2c, 0xec, 0x13, 0xbd,
- 0xf5, 0x3a, 0x67, 0xb2, 0x12, 0x57, 0xbd, 0xdf },
- .len = 16
- }
-};
-
-/** AES-128 Test Vectors */
-static const struct gcm_test_data gcm_test_case_3 = {
- .key = {
- .data = {
- 0xfe, 0xff, 0xe9, 0x92, 0x86, 0x65, 0x73, 0x1c,
- 0x6d, 0x6a, 0x8f, 0x94, 0x67, 0x30, 0x83, 0x08 },
- .len = 16
- },
- .iv = {
- .data = {
- 0xca, 0xfe, 0xba, 0xbe, 0xfa, 0xce, 0xdb, 0xad,
- 0xde, 0xca, 0xf8, 0x88 },
- .len = 12
- },
- .aad = {
- .data = { 0 },
- .len = 0
- },
- .plaintext = {
- .data = {
- 0xd9, 0x31, 0x32, 0x25, 0xf8, 0x84, 0x06, 0xe5,
- 0xa5, 0x59, 0x09, 0xc5, 0xaf, 0xf5, 0x26, 0x9a,
- 0x86, 0xa7, 0xa9, 0x53, 0x15, 0x34, 0xf7, 0xda,
- 0x2e, 0x4c, 0x30, 0x3d, 0x8a, 0x31, 0x8a, 0x72,
- 0x1c, 0x3c, 0x0c, 0x95, 0x95, 0x68, 0x09, 0x53,
- 0x2f, 0xcf, 0x0e, 0x24, 0x49, 0xa6, 0xb5, 0x25,
- 0xb1, 0x6a, 0xed, 0xf5, 0xaa, 0x0d, 0xe6, 0x57,
- 0xba, 0x63, 0x7b, 0x39, 0x1a, 0xaf, 0xd2, 0x55 },
- .len = 64
- },
- .ciphertext = {
- .data = {
- 0x42, 0x83, 0x1e, 0xc2, 0x21, 0x77, 0x74, 0x24,
- 0x4b, 0x72, 0x21, 0xb7, 0x84, 0xd0, 0xd4, 0x9c,
- 0xe3, 0xaa, 0x21, 0x2f, 0x2c, 0x02, 0xa4, 0xe0,
- 0x35, 0xc1, 0x7e, 0x23, 0x29, 0xac, 0xa1, 0x2e,
- 0x21, 0xd5, 0x14, 0xb2, 0x54, 0x66, 0x93, 0x1c,
- 0x7d, 0x8f, 0x6a, 0x5a, 0xac, 0x84, 0xaa, 0x05,
- 0x1b, 0xa3, 0x0b, 0x39, 0x6a, 0x0a, 0xac, 0x97,
- 0x3d, 0x58, 0xe0, 0x91, 0x47, 0x3f, 0x59, 0x85
- },
- .len = 64
- },
- .auth_tag = {
- .data = {
- 0x4d, 0x5c, 0x2a, 0xf3, 0x27, 0xcd, 0x64, 0xa6,
- 0x2c, 0xf3, 0x5a, 0xbd, 0x2b, 0xa6, 0xfa, 0xb4 },
- .len = 16
- }
-};
-
-/** AES-128 Test Vectors */
-static const struct gcm_test_data gcm_test_case_4 = {
- .key = {
- .data = {
- 0xfe, 0xff, 0xe9, 0x92, 0x86, 0x65, 0x73, 0x1c,
- 0x6d, 0x6a, 0x8f, 0x94, 0x67, 0x30, 0x83, 0x08
- },
- .len = 16
- },
- .iv = {
- .data = {
- 0xca, 0xfe, 0xba, 0xbe, 0xfa, 0xce, 0xdb, 0xad,
- 0xde, 0xca, 0xf8, 0x88 },
- .len = 12
- },
- .aad = {
- .data = {
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
- .len = 8
- },
- .plaintext = {
- .data = {
- 0xd9, 0x31, 0x32, 0x25, 0xf8, 0x84, 0x06, 0xe5,
- 0xa5, 0x59, 0x09, 0xc5, 0xaf, 0xf5, 0x26, 0x9a,
- 0x86, 0xa7, 0xa9, 0x53, 0x15, 0x34, 0xf7, 0xda,
- 0x2e, 0x4c, 0x30, 0x3d, 0x8a, 0x31, 0x8a, 0x72,
- 0x1c, 0x3c, 0x0c, 0x95, 0x95, 0x68, 0x09, 0x53,
- 0x2f, 0xcf, 0x0e, 0x24, 0x49, 0xa6, 0xb5, 0x25,
- 0xb1, 0x6a, 0xed, 0xf5, 0xaa, 0x0d, 0xe6, 0x57,
- 0xba, 0x63, 0x7b, 0x39
- },
- .len = 60
- },
- .ciphertext = {
- .data = {
- 0x42, 0x83, 0x1e, 0xc2, 0x21, 0x77, 0x74, 0x24,
- 0x4b, 0x72, 0x21, 0xb7, 0x84, 0xd0, 0xd4, 0x9c,
- 0xe3, 0xaa, 0x21, 0x2f, 0x2c, 0x02, 0xa4, 0xe0,
- 0x35, 0xc1, 0x7e, 0x23, 0x29, 0xac, 0xa1, 0x2e,
- 0x21, 0xd5, 0x14, 0xb2, 0x54, 0x66, 0x93, 0x1c,
- 0x7d, 0x8f, 0x6a, 0x5a, 0xac, 0x84, 0xaa, 0x05,
- 0x1b, 0xa3, 0x0b, 0x39, 0x6a, 0x0a, 0xac, 0x97,
- 0x3d, 0x58, 0xe0, 0x91
- },
- .len = 60
- },
- .auth_tag = {
- .data = {
- 0xA2, 0xA4, 0x35, 0x75, 0xDC, 0xB0, 0x57, 0x74,
- 0x07, 0x02, 0x30, 0xC2, 0xE7, 0x52, 0x02, 0x00
- },
- .len = 16
- }
-
-};
-
-/** AES-128 Test Vectors */
-static const struct gcm_test_data gcm_test_case_5 = {
- .key = {
- .data = {
- 0xfe, 0xff, 0xe9, 0x92, 0x86, 0x65, 0x73, 0x1c,
- 0x6d, 0x6a, 0x8f, 0x94, 0x67, 0x30, 0x83, 0x08
- },
- .len = 16
- },
- .iv = {
- .data = {
- 0xca, 0xfe, 0xba, 0xbe, 0xfa, 0xce, 0xdb, 0xad,
- 0xde, 0xca, 0xf8, 0x88 },
- .len = 12
- },
- .aad = {
- .data = {
- 0xfe, 0xed, 0xfa, 0xce, 0xde, 0xad, 0xbe, 0xef },
- .len = 8
- },
- .plaintext = {
- .data = {
- 0xd9, 0x31, 0x32, 0x25, 0xf8, 0x84, 0x06, 0xe5,
- 0xa5, 0x59, 0x09, 0xc5, 0xaf, 0xf5, 0x26, 0x9a,
- 0x86, 0xa7, 0xa9, 0x53, 0x15, 0x34, 0xf7, 0xda,
- 0x2e, 0x4c, 0x30, 0x3d, 0x8a, 0x31, 0x8a, 0x72,
- 0x1c, 0x3c, 0x0c, 0x95, 0x95, 0x68, 0x09, 0x53,
- 0x2f, 0xcf, 0x0e, 0x24, 0x49, 0xa6, 0xb5, 0x25,
- 0xb1, 0x6a, 0xed, 0xf5, 0xaa, 0x0d, 0xe6, 0x57,
- 0xba, 0x63, 0x7b, 0x39
- },
- .len = 60
- },
- .ciphertext = {
- .data = {
- 0x42, 0x83, 0x1e, 0xc2, 0x21, 0x77, 0x74, 0x24,
- 0x4b, 0x72, 0x21, 0xb7, 0x84, 0xd0, 0xd4, 0x9c,
- 0xe3, 0xaa, 0x21, 0x2f, 0x2c, 0x02, 0xa4, 0xe0,
- 0x35, 0xc1, 0x7e, 0x23, 0x29, 0xac, 0xa1, 0x2e,
- 0x21, 0xd5, 0x14, 0xb2, 0x54, 0x66, 0x93, 0x1c,
- 0x7d, 0x8f, 0x6a, 0x5a, 0xac, 0x84, 0xaa, 0x05,
- 0x1b, 0xa3, 0x0b, 0x39, 0x6a, 0x0a, 0xac, 0x97,
- 0x3d, 0x58, 0xe0, 0x91
- },
- .len = 60
- },
- .auth_tag = {
- .data = {
- 0xC5, 0x2D, 0xFB, 0x54, 0xAF, 0xBB, 0x07, 0xA1,
- 0x9A, 0xFF, 0xBE, 0xE0, 0x61, 0x4C, 0xE7, 0xA5
- },
- .len = 16
- }
-
-};
-
-/** AES-128 Test Vectors */
-static const struct gcm_test_data gcm_test_case_6 = {
- .key = {
- .data = {
- 0xfe, 0xff, 0xe9, 0x92, 0x86, 0x65, 0x73, 0x1c,
- 0x6d, 0x6a, 0x8f, 0x94, 0x67, 0x30, 0x83, 0x08
- },
- .len = 16
- },
- .iv = {
- .data = {
- 0xca, 0xfe, 0xba, 0xbe, 0xfa, 0xce, 0xdb, 0xad,
- 0xde, 0xca, 0xf8, 0x88
- },
- .len = 12
- },
- .aad = {
- .data = {
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00
- },
- .len = 12
- },
- .plaintext = {
- .data = {
- 0xd9, 0x31, 0x32, 0x25, 0xf8, 0x84, 0x06, 0xe5,
- 0xa5, 0x59, 0x09, 0xc5, 0xaf, 0xf5, 0x26, 0x9a,
- 0x86, 0xa7, 0xa9, 0x53, 0x15, 0x34, 0xf7, 0xda,
- 0x2e, 0x4c, 0x30, 0x3d, 0x8a, 0x31, 0x8a, 0x72,
- 0x1c, 0x3c, 0x0c, 0x95, 0x95, 0x68, 0x09, 0x53,
- 0x2f, 0xcf, 0x0e, 0x24, 0x49, 0xa6, 0xb5, 0x25,
- 0xb1, 0x6a, 0xed, 0xf5, 0xaa, 0x0d, 0xe6, 0x57,
- 0xba, 0x63, 0x7b, 0x39
- },
- .len = 60
- },
- .ciphertext = {
- .data = {
- 0x42, 0x83, 0x1e, 0xc2, 0x21, 0x77, 0x74, 0x24,
- 0x4b, 0x72, 0x21, 0xb7, 0x84, 0xd0, 0xd4, 0x9c,
- 0xe3, 0xaa, 0x21, 0x2f, 0x2c, 0x02, 0xa4, 0xe0,
- 0x35, 0xc1, 0x7e, 0x23, 0x29, 0xac, 0xa1, 0x2e,
- 0x21, 0xd5, 0x14, 0xb2, 0x54, 0x66, 0x93, 0x1c,
- 0x7d, 0x8f, 0x6a, 0x5a, 0xac, 0x84, 0xaa, 0x05,
- 0x1b, 0xa3, 0x0b, 0x39, 0x6a, 0x0a, 0xac, 0x97,
- 0x3d, 0x58, 0xe0, 0x91
- },
- .len = 60
- },
- .auth_tag = {
- .data = {
- 0x74, 0xFC, 0xFA, 0x29, 0x3E, 0x60, 0xCC, 0x66,
- 0x09, 0xD6, 0xFD, 0x00, 0xC8, 0x86, 0xD5, 0x42
- },
- .len = 16
- }
-};
-
-/** AES-128 Test Vectors */
-static const struct gcm_test_data gcm_test_case_7 = {
- .key = {
- .data = {
- 0xfe, 0xff, 0xe9, 0x92, 0x86, 0x65, 0x73, 0x1c,
- 0x6d, 0x6a, 0x8f, 0x94, 0x67, 0x30, 0x83, 0x08
- },
- .len = 16
- },
- .iv = {
- .data = {
- 0xca, 0xfe, 0xba, 0xbe, 0xfa, 0xce, 0xdb, 0xad,
- 0xde, 0xca, 0xf8, 0x88
- },
- .len = 12
- },
- .aad = {
- .data = {
- 0xfe, 0xed, 0xfa, 0xce, 0xde, 0xad, 0xbe, 0xef,
- 0xfe, 0xed, 0xfa, 0xce
- },
- .len = 12
- },
- .plaintext = {
- .data = {
- 0xd9, 0x31, 0x32, 0x25, 0xf8, 0x84, 0x06, 0xe5,
- 0xa5, 0x59, 0x09, 0xc5, 0xaf, 0xf5, 0x26, 0x9a,
- 0x86, 0xa7, 0xa9, 0x53, 0x15, 0x34, 0xf7, 0xda,
- 0x2e, 0x4c, 0x30, 0x3d, 0x8a, 0x31, 0x8a, 0x72,
- 0x1c, 0x3c, 0x0c, 0x95, 0x95, 0x68, 0x09, 0x53,
- 0x2f, 0xcf, 0x0e, 0x24, 0x49, 0xa6, 0xb5, 0x25,
- 0xb1, 0x6a, 0xed, 0xf5, 0xaa, 0x0d, 0xe6, 0x57,
- 0xba, 0x63, 0x7b, 0x39
- },
- .len = 60
- },
- .ciphertext = {
- .data = {
- 0x42, 0x83, 0x1e, 0xc2, 0x21, 0x77, 0x74, 0x24,
- 0x4b, 0x72, 0x21, 0xb7, 0x84, 0xd0, 0xd4, 0x9c,
- 0xe3, 0xaa, 0x21, 0x2f, 0x2c, 0x02, 0xa4, 0xe0,
- 0x35, 0xc1, 0x7e, 0x23, 0x29, 0xac, 0xa1, 0x2e,
- 0x21, 0xd5, 0x14, 0xb2, 0x54, 0x66, 0x93, 0x1c,
- 0x7d, 0x8f, 0x6a, 0x5a, 0xac, 0x84, 0xaa, 0x05,
- 0x1b, 0xa3, 0x0b, 0x39, 0x6a, 0x0a, 0xac, 0x97,
- 0x3d, 0x58, 0xe0, 0x91
- },
- .len = 60
- },
- .auth_tag = {
- .data = {
- 0xE9, 0xE4, 0xAB, 0x76, 0xB7, 0xFF, 0xEA, 0xDC,
- 0x69, 0x79, 0x38, 0xA2, 0x0D, 0xCA, 0xF5, 0x92
- },
- .len = 16
- }
-};
-
-/** GMAC Test Vectors */
-static uint8_t gmac_plaintext[GMAC_LARGE_PLAINTEXT_LENGTH] = {
- 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08,
- 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F, 0x10,
- 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08,
- 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F, 0x10,
- 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08,
- 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F, 0x10,
- 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08,
- 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F, 0x10,
- 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08,
- 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F, 0x10,
- 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08,
- 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F, 0x10,
- 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08,
- 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F, 0x10,
- 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08,
- 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F, 0x10,
- 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08,
- 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F, 0x10,
- 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08,
- 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F, 0x10
-};
-
-static const struct gmac_test_data gmac_test_case_1 = {
- .key = {
- .data = {
- 0xfe, 0xff, 0xe9, 0x92, 0x86, 0x65, 0x73, 0x1c,
- 0x6d, 0x6a, 0x8f, 0x94, 0x67, 0x30, 0x83, 0x08
- },
- .len = 16
- },
- .iv = {
- .data = {
- 0xca, 0xfe, 0xba, 0xbe, 0xfa, 0xce, 0xdb, 0xad,
- 0xde, 0xca, 0xf8, 0x88 },
- .len = 12
- },
- .aad = {
- .data = gmac_plaintext,
- .len = 160
- },
- .plaintext = {
- .data = NULL,
- .len = 0
- },
- .gmac_tag = {
- .data = {
- 0x4C, 0x0C, 0x4F, 0x47, 0x2D, 0x78, 0xF6, 0xD8,
- 0x03, 0x53, 0x20, 0x2F, 0x1A, 0xDF, 0x90, 0xD0
- },
- .len = 16
- },
-};
-
-static const struct gmac_test_data gmac_test_case_2 = {
- .key = {
- .data = {
- 0xaa, 0x74, 0x0a, 0xbf, 0xad, 0xcd, 0xa7, 0x79,
- 0x22, 0x0d, 0x3b, 0x40, 0x6c, 0x5d, 0x7e, 0xc0,
- 0x9a, 0x77, 0xfe, 0x9d, 0x94, 0x10, 0x45, 0x39,
- },
- .len = 24
- },
- .iv = {
- .data = {
- 0xab, 0x22, 0x65, 0xb4, 0xc1, 0x68, 0x95,
- 0x55, 0x61, 0xf0, 0x43, 0x15, },
- .len = 12
- },
- .aad = {
- .data = gmac_plaintext,
- .len = 80
- },
- .plaintext = {
- .data = NULL,
- .len = 0
- },
- .gmac_tag = {
- .data = {
- 0xCF, 0x82, 0x80, 0x64, 0x02, 0x46, 0xF4, 0xFB,
- 0x33, 0xAE, 0x1D, 0x90, 0xEA, 0x48, 0x83, 0xDB
- },
- .len = 16
- },
-};
-
-static const struct gmac_test_data gmac_test_case_3 = {
- .key = {
- .data = {
- 0xb5, 0x48, 0xe4, 0x93, 0x4f, 0x5c, 0x64, 0xd3,
- 0xc0, 0xf0, 0xb7, 0x8f, 0x7b, 0x4d, 0x88, 0x24,
- 0xaa, 0xc4, 0x6b, 0x3c, 0x8d, 0x2c, 0xc3, 0x5e,
- 0xe4, 0xbf, 0xb2, 0x54, 0xe4, 0xfc, 0xba, 0xf7,
- },
- .len = 32
- },
- .iv = {
- .data = {
- 0x2e, 0xed, 0xe1, 0xdc, 0x64, 0x47, 0xc7,
- 0xaf, 0xc4, 0x41, 0x53, 0x58,
- },
- .len = 12
- },
- .aad = {
- .data = gmac_plaintext,
- .len = 65
- },
- .plaintext = {
- .data = NULL,
- .len = 0
- },
- .gmac_tag = {
- .data = {
- 0x77, 0x46, 0x0D, 0x6F, 0xB1, 0x87, 0xDB, 0xA9,
- 0x46, 0xAD, 0xCD, 0xFB, 0xB7, 0xF9, 0x13, 0xA1
- },
- .len = 16
- },
-};
-
-/******* GCM PERF VECTORS ***********/
-
-struct cryptodev_perf_test_data {
- struct {
- uint8_t data[64];
- unsigned len;
- } key;
-
- struct {
- uint8_t data[64] __rte_aligned(16);
- unsigned len;
- } iv;
-
- struct {
- uint8_t data[64];
- unsigned len;
- } aad;
-
- struct {
- uint8_t data[2048];
- unsigned len;
- } plaintext;
-
- struct {
- uint8_t data[2048];
- unsigned len;
- } ciphertext;
-
- struct {
- uint8_t data[16];
- unsigned len;
- } auth_tag;
-
- struct {
- uint32_t size;
- uint8_t data[16];
- unsigned len;
- } auth_tags[7];
-
-};
-
-/* 2048B */
-static const struct cryptodev_perf_test_data AES_GCM_128_12IV_0AAD = {
- .key = {
- .data = {
- 0xfe, 0xff, 0xe9, 0x92, 0x86, 0x65, 0x73, 0x1c,
- 0x6d, 0x6a, 0x8f, 0x94, 0x67, 0x30, 0x83, 0x08 },
- .len = 16
- },
- .iv = {
- .data = {
- 0xca, 0xfe, 0xba, 0xbe, 0xfa, 0xce, 0xdb, 0xad,
- 0xde, 0xca, 0xf8, 0x88 },
- .len = 12
- },
- .aad = {
- .data = { 0 },
- .len = 0
- },
- .plaintext = {
- .data = {
- 0xd9, 0x31, 0x32, 0x25, 0xf8, 0x84, 0x06, 0xe5,
- 0xa5, 0x59, 0x09, 0xc5, 0xaf, 0xf5, 0x26, 0x9a,
- 0x86, 0xa7, 0xa9, 0x53, 0x15, 0x34, 0xf7, 0xda,
- 0x2e, 0x4c, 0x30, 0x3d, 0x8a, 0x31, 0x8a, 0x72,
- 0x1c, 0x3c, 0x0c, 0x95, 0x95, 0x68, 0x09, 0x53,
- 0x2f, 0xcf, 0x0e, 0x24, 0x49, 0xa6, 0xb5, 0x25,
- 0xb1, 0x6a, 0xed, 0xf5, 0xaa, 0x0d, 0xe6, 0x57,
- 0xba, 0x63, 0x7b, 0x39, 0x1a, 0xaf, 0xd2, 0x55,
- 0xd9, 0x31, 0x32, 0x25, 0xf8, 0x84, 0x06, 0xe5,
- 0xa5, 0x59, 0x09, 0xc5, 0xaf, 0xf5, 0x26, 0x9a,
- 0x86, 0xa7, 0xa9, 0x53, 0x15, 0x34, 0xf7, 0xda,
- 0x2e, 0x4c, 0x30, 0x3d, 0x8a, 0x31, 0x8a, 0x72,
- 0x1c, 0x3c, 0x0c, 0x95, 0x95, 0x68, 0x09, 0x53,
- 0x2f, 0xcf, 0x0e, 0x24, 0x49, 0xa6, 0xb5, 0x25,
- 0xb1, 0x6a, 0xed, 0xf5, 0xaa, 0x0d, 0xe6, 0x57,
- 0xba, 0x63, 0x7b, 0x39, 0x1a, 0xaf, 0xd2, 0x55,
- 0xd9, 0x31, 0x32, 0x25, 0xf8, 0x84, 0x06, 0xe5,
- 0xa5, 0x59, 0x09, 0xc5, 0xaf, 0xf5, 0x26, 0x9a,
- 0x86, 0xa7, 0xa9, 0x53, 0x15, 0x34, 0xf7, 0xda,
- 0x2e, 0x4c, 0x30, 0x3d, 0x8a, 0x31, 0x8a, 0x72,
- 0x1c, 0x3c, 0x0c, 0x95, 0x95, 0x68, 0x09, 0x53,
- 0x2f, 0xcf, 0x0e, 0x24, 0x49, 0xa6, 0xb5, 0x25,
- 0xb1, 0x6a, 0xed, 0xf5, 0xaa, 0x0d, 0xe6, 0x57,
- 0xba, 0x63, 0x7b, 0x39, 0x1a, 0xaf, 0xd2, 0x55,
- 0xd9, 0x31, 0x32, 0x25, 0xf8, 0x84, 0x06, 0xe5,
- 0xa5, 0x59, 0x09, 0xc5, 0xaf, 0xf5, 0x26, 0x9a,
- 0x86, 0xa7, 0xa9, 0x53, 0x15, 0x34, 0xf7, 0xda,
- 0x2e, 0x4c, 0x30, 0x3d, 0x8a, 0x31, 0x8a, 0x72,
- 0x1c, 0x3c, 0x0c, 0x95, 0x95, 0x68, 0x09, 0x53,
- 0x2f, 0xcf, 0x0e, 0x24, 0x49, 0xa6, 0xb5, 0x25,
- 0xb1, 0x6a, 0xed, 0xf5, 0xaa, 0x0d, 0xe6, 0x57,
- 0xba, 0x63, 0x7b, 0x39, 0x1a, 0xaf, 0xd2, 0x55,
- 0xd9, 0x31, 0x32, 0x25, 0xf8, 0x84, 0x06, 0xe5,
- 0xa5, 0x59, 0x09, 0xc5, 0xaf, 0xf5, 0x26, 0x9a,
- 0x86, 0xa7, 0xa9, 0x53, 0x15, 0x34, 0xf7, 0xda,
- 0x2e, 0x4c, 0x30, 0x3d, 0x8a, 0x31, 0x8a, 0x72,
- 0x1c, 0x3c, 0x0c, 0x95, 0x95, 0x68, 0x09, 0x53,
- 0x2f, 0xcf, 0x0e, 0x24, 0x49, 0xa6, 0xb5, 0x25,
- 0xb1, 0x6a, 0xed, 0xf5, 0xaa, 0x0d, 0xe6, 0x57,
- 0xba, 0x63, 0x7b, 0x39, 0x1a, 0xaf, 0xd2, 0x55,
- 0xd9, 0x31, 0x32, 0x25, 0xf8, 0x84, 0x06, 0xe5,
- 0xa5, 0x59, 0x09, 0xc5, 0xaf, 0xf5, 0x26, 0x9a,
- 0x86, 0xa7, 0xa9, 0x53, 0x15, 0x34, 0xf7, 0xda,
- 0x2e, 0x4c, 0x30, 0x3d, 0x8a, 0x31, 0x8a, 0x72,
- 0x1c, 0x3c, 0x0c, 0x95, 0x95, 0x68, 0x09, 0x53,
- 0x2f, 0xcf, 0x0e, 0x24, 0x49, 0xa6, 0xb5, 0x25,
- 0xb1, 0x6a, 0xed, 0xf5, 0xaa, 0x0d, 0xe6, 0x57,
- 0xba, 0x63, 0x7b, 0x39, 0x1a, 0xaf, 0xd2, 0x55,
- 0xd9, 0x31, 0x32, 0x25, 0xf8, 0x84, 0x06, 0xe5,
- 0xa5, 0x59, 0x09, 0xc5, 0xaf, 0xf5, 0x26, 0x9a,
- 0x86, 0xa7, 0xa9, 0x53, 0x15, 0x34, 0xf7, 0xda,
- 0x2e, 0x4c, 0x30, 0x3d, 0x8a, 0x31, 0x8a, 0x72,
- 0x1c, 0x3c, 0x0c, 0x95, 0x95, 0x68, 0x09, 0x53,
- 0x2f, 0xcf, 0x0e, 0x24, 0x49, 0xa6, 0xb5, 0x25,
- 0xb1, 0x6a, 0xed, 0xf5, 0xaa, 0x0d, 0xe6, 0x57,
- 0xba, 0x63, 0x7b, 0x39, 0x1a, 0xaf, 0xd2, 0x55,
- 0xd9, 0x31, 0x32, 0x25, 0xf8, 0x84, 0x06, 0xe5,
- 0xa5, 0x59, 0x09, 0xc5, 0xaf, 0xf5, 0x26, 0x9a,
- 0x86, 0xa7, 0xa9, 0x53, 0x15, 0x34, 0xf7, 0xda,
- 0x2e, 0x4c, 0x30, 0x3d, 0x8a, 0x31, 0x8a, 0x72,
- 0x1c, 0x3c, 0x0c, 0x95, 0x95, 0x68, 0x09, 0x53,
- 0x2f, 0xcf, 0x0e, 0x24, 0x49, 0xa6, 0xb5, 0x25,
- 0xb1, 0x6a, 0xed, 0xf5, 0xaa, 0x0d, 0xe6, 0x57,
- 0xba, 0x63, 0x7b, 0x39, 0x1a, 0xaf, 0xd2, 0x55,
- 0xd9, 0x31, 0x32, 0x25, 0xf8, 0x84, 0x06, 0xe5,
- 0xa5, 0x59, 0x09, 0xc5, 0xaf, 0xf5, 0x26, 0x9a,
- 0x86, 0xa7, 0xa9, 0x53, 0x15, 0x34, 0xf7, 0xda,
- 0x2e, 0x4c, 0x30, 0x3d, 0x8a, 0x31, 0x8a, 0x72,
- 0x1c, 0x3c, 0x0c, 0x95, 0x95, 0x68, 0x09, 0x53,
- 0x2f, 0xcf, 0x0e, 0x24, 0x49, 0xa6, 0xb5, 0x25,
- 0xb1, 0x6a, 0xed, 0xf5, 0xaa, 0x0d, 0xe6, 0x57,
- 0xba, 0x63, 0x7b, 0x39, 0x1a, 0xaf, 0xd2, 0x55,
- 0xd9, 0x31, 0x32, 0x25, 0xf8, 0x84, 0x06, 0xe5,
- 0xa5, 0x59, 0x09, 0xc5, 0xaf, 0xf5, 0x26, 0x9a,
- 0x86, 0xa7, 0xa9, 0x53, 0x15, 0x34, 0xf7, 0xda,
- 0x2e, 0x4c, 0x30, 0x3d, 0x8a, 0x31, 0x8a, 0x72,
- 0x1c, 0x3c, 0x0c, 0x95, 0x95, 0x68, 0x09, 0x53,
- 0x2f, 0xcf, 0x0e, 0x24, 0x49, 0xa6, 0xb5, 0x25,
- 0xb1, 0x6a, 0xed, 0xf5, 0xaa, 0x0d, 0xe6, 0x57,
- 0xba, 0x63, 0x7b, 0x39, 0x1a, 0xaf, 0xd2, 0x55,
- 0xd9, 0x31, 0x32, 0x25, 0xf8, 0x84, 0x06, 0xe5,
- 0xa5, 0x59, 0x09, 0xc5, 0xaf, 0xf5, 0x26, 0x9a,
- 0x86, 0xa7, 0xa9, 0x53, 0x15, 0x34, 0xf7, 0xda,
- 0x2e, 0x4c, 0x30, 0x3d, 0x8a, 0x31, 0x8a, 0x72,
- 0x1c, 0x3c, 0x0c, 0x95, 0x95, 0x68, 0x09, 0x53,
- 0x2f, 0xcf, 0x0e, 0x24, 0x49, 0xa6, 0xb5, 0x25,
- 0xb1, 0x6a, 0xed, 0xf5, 0xaa, 0x0d, 0xe6, 0x57,
- 0xba, 0x63, 0x7b, 0x39, 0x1a, 0xaf, 0xd2, 0x55,
- 0xd9, 0x31, 0x32, 0x25, 0xf8, 0x84, 0x06, 0xe5,
- 0xa5, 0x59, 0x09, 0xc5, 0xaf, 0xf5, 0x26, 0x9a,
- 0x86, 0xa7, 0xa9, 0x53, 0x15, 0x34, 0xf7, 0xda,
- 0x2e, 0x4c, 0x30, 0x3d, 0x8a, 0x31, 0x8a, 0x72,
- 0x1c, 0x3c, 0x0c, 0x95, 0x95, 0x68, 0x09, 0x53,
- 0x2f, 0xcf, 0x0e, 0x24, 0x49, 0xa6, 0xb5, 0x25,
- 0xb1, 0x6a, 0xed, 0xf5, 0xaa, 0x0d, 0xe6, 0x57,
- 0xba, 0x63, 0x7b, 0x39, 0x1a, 0xaf, 0xd2, 0x55,
- 0xd9, 0x31, 0x32, 0x25, 0xf8, 0x84, 0x06, 0xe5,
- 0xa5, 0x59, 0x09, 0xc5, 0xaf, 0xf5, 0x26, 0x9a,
- 0x86, 0xa7, 0xa9, 0x53, 0x15, 0x34, 0xf7, 0xda,
- 0x2e, 0x4c, 0x30, 0x3d, 0x8a, 0x31, 0x8a, 0x72,
- 0x1c, 0x3c, 0x0c, 0x95, 0x95, 0x68, 0x09, 0x53,
- 0x2f, 0xcf, 0x0e, 0x24, 0x49, 0xa6, 0xb5, 0x25,
- 0xb1, 0x6a, 0xed, 0xf5, 0xaa, 0x0d, 0xe6, 0x57,
- 0xba, 0x63, 0x7b, 0x39, 0x1a, 0xaf, 0xd2, 0x55,
- 0xd9, 0x31, 0x32, 0x25, 0xf8, 0x84, 0x06, 0xe5,
- 0xa5, 0x59, 0x09, 0xc5, 0xaf, 0xf5, 0x26, 0x9a,
- 0x86, 0xa7, 0xa9, 0x53, 0x15, 0x34, 0xf7, 0xda,
- 0x2e, 0x4c, 0x30, 0x3d, 0x8a, 0x31, 0x8a, 0x72,
- 0x1c, 0x3c, 0x0c, 0x95, 0x95, 0x68, 0x09, 0x53,
- 0x2f, 0xcf, 0x0e, 0x24, 0x49, 0xa6, 0xb5, 0x25,
- 0xb1, 0x6a, 0xed, 0xf5, 0xaa, 0x0d, 0xe6, 0x57,
- 0xba, 0x63, 0x7b, 0x39, 0x1a, 0xaf, 0xd2, 0x55,
- 0xd9, 0x31, 0x32, 0x25, 0xf8, 0x84, 0x06, 0xe5,
- 0xa5, 0x59, 0x09, 0xc5, 0xaf, 0xf5, 0x26, 0x9a,
- 0x86, 0xa7, 0xa9, 0x53, 0x15, 0x34, 0xf7, 0xda,
- 0x2e, 0x4c, 0x30, 0x3d, 0x8a, 0x31, 0x8a, 0x72,
- 0x1c, 0x3c, 0x0c, 0x95, 0x95, 0x68, 0x09, 0x53,
- 0x2f, 0xcf, 0x0e, 0x24, 0x49, 0xa6, 0xb5, 0x25,
- 0xb1, 0x6a, 0xed, 0xf5, 0xaa, 0x0d, 0xe6, 0x57,
- 0xba, 0x63, 0x7b, 0x39, 0x1a, 0xaf, 0xd2, 0x55,
- 0xd9, 0x31, 0x32, 0x25, 0xf8, 0x84, 0x06, 0xe5,
- 0xa5, 0x59, 0x09, 0xc5, 0xaf, 0xf5, 0x26, 0x9a,
- 0x86, 0xa7, 0xa9, 0x53, 0x15, 0x34, 0xf7, 0xda,
- 0x2e, 0x4c, 0x30, 0x3d, 0x8a, 0x31, 0x8a, 0x72,
- 0x1c, 0x3c, 0x0c, 0x95, 0x95, 0x68, 0x09, 0x53,
- 0x2f, 0xcf, 0x0e, 0x24, 0x49, 0xa6, 0xb5, 0x25,
- 0xb1, 0x6a, 0xed, 0xf5, 0xaa, 0x0d, 0xe6, 0x57,
- 0xba, 0x63, 0x7b, 0x39, 0x1a, 0xaf, 0xd2, 0x55,
- 0xd9, 0x31, 0x32, 0x25, 0xf8, 0x84, 0x06, 0xe5,
- 0xa5, 0x59, 0x09, 0xc5, 0xaf, 0xf5, 0x26, 0x9a,
- 0x86, 0xa7, 0xa9, 0x53, 0x15, 0x34, 0xf7, 0xda,
- 0x2e, 0x4c, 0x30, 0x3d, 0x8a, 0x31, 0x8a, 0x72,
- 0x1c, 0x3c, 0x0c, 0x95, 0x95, 0x68, 0x09, 0x53,
- 0x2f, 0xcf, 0x0e, 0x24, 0x49, 0xa6, 0xb5, 0x25,
- 0xb1, 0x6a, 0xed, 0xf5, 0xaa, 0x0d, 0xe6, 0x57,
- 0xba, 0x63, 0x7b, 0x39, 0x1a, 0xaf, 0xd2, 0x55,
- 0xd9, 0x31, 0x32, 0x25, 0xf8, 0x84, 0x06, 0xe5,
- 0xa5, 0x59, 0x09, 0xc5, 0xaf, 0xf5, 0x26, 0x9a,
- 0x86, 0xa7, 0xa9, 0x53, 0x15, 0x34, 0xf7, 0xda,
- 0x2e, 0x4c, 0x30, 0x3d, 0x8a, 0x31, 0x8a, 0x72,
- 0x1c, 0x3c, 0x0c, 0x95, 0x95, 0x68, 0x09, 0x53,
- 0x2f, 0xcf, 0x0e, 0x24, 0x49, 0xa6, 0xb5, 0x25,
- 0xb1, 0x6a, 0xed, 0xf5, 0xaa, 0x0d, 0xe6, 0x57,
- 0xba, 0x63, 0x7b, 0x39, 0x1a, 0xaf, 0xd2, 0x55,
- 0xd9, 0x31, 0x32, 0x25, 0xf8, 0x84, 0x06, 0xe5,
- 0xa5, 0x59, 0x09, 0xc5, 0xaf, 0xf5, 0x26, 0x9a,
- 0x86, 0xa7, 0xa9, 0x53, 0x15, 0x34, 0xf7, 0xda,
- 0x2e, 0x4c, 0x30, 0x3d, 0x8a, 0x31, 0x8a, 0x72,
- 0x1c, 0x3c, 0x0c, 0x95, 0x95, 0x68, 0x09, 0x53,
- 0x2f, 0xcf, 0x0e, 0x24, 0x49, 0xa6, 0xb5, 0x25,
- 0xb1, 0x6a, 0xed, 0xf5, 0xaa, 0x0d, 0xe6, 0x57,
- 0xba, 0x63, 0x7b, 0x39, 0x1a, 0xaf, 0xd2, 0x55,
- 0xd9, 0x31, 0x32, 0x25, 0xf8, 0x84, 0x06, 0xe5,
- 0xa5, 0x59, 0x09, 0xc5, 0xaf, 0xf5, 0x26, 0x9a,
- 0x86, 0xa7, 0xa9, 0x53, 0x15, 0x34, 0xf7, 0xda,
- 0x2e, 0x4c, 0x30, 0x3d, 0x8a, 0x31, 0x8a, 0x72,
- 0x1c, 0x3c, 0x0c, 0x95, 0x95, 0x68, 0x09, 0x53,
- 0x2f, 0xcf, 0x0e, 0x24, 0x49, 0xa6, 0xb5, 0x25,
- 0xb1, 0x6a, 0xed, 0xf5, 0xaa, 0x0d, 0xe6, 0x57,
- 0xba, 0x63, 0x7b, 0x39, 0x1a, 0xaf, 0xd2, 0x55,
- 0xd9, 0x31, 0x32, 0x25, 0xf8, 0x84, 0x06, 0xe5,
- 0xa5, 0x59, 0x09, 0xc5, 0xaf, 0xf5, 0x26, 0x9a,
- 0x86, 0xa7, 0xa9, 0x53, 0x15, 0x34, 0xf7, 0xda,
- 0x2e, 0x4c, 0x30, 0x3d, 0x8a, 0x31, 0x8a, 0x72,
- 0x1c, 0x3c, 0x0c, 0x95, 0x95, 0x68, 0x09, 0x53,
- 0x2f, 0xcf, 0x0e, 0x24, 0x49, 0xa6, 0xb5, 0x25,
- 0xb1, 0x6a, 0xed, 0xf5, 0xaa, 0x0d, 0xe6, 0x57,
- 0xba, 0x63, 0x7b, 0x39, 0x1a, 0xaf, 0xd2, 0x55,
- 0xd9, 0x31, 0x32, 0x25, 0xf8, 0x84, 0x06, 0xe5,
- 0xa5, 0x59, 0x09, 0xc5, 0xaf, 0xf5, 0x26, 0x9a,
- 0x86, 0xa7, 0xa9, 0x53, 0x15, 0x34, 0xf7, 0xda,
- 0x2e, 0x4c, 0x30, 0x3d, 0x8a, 0x31, 0x8a, 0x72,
- 0x1c, 0x3c, 0x0c, 0x95, 0x95, 0x68, 0x09, 0x53,
- 0x2f, 0xcf, 0x0e, 0x24, 0x49, 0xa6, 0xb5, 0x25,
- 0xb1, 0x6a, 0xed, 0xf5, 0xaa, 0x0d, 0xe6, 0x57,
- 0xba, 0x63, 0x7b, 0x39, 0x1a, 0xaf, 0xd2, 0x55,
- 0xd9, 0x31, 0x32, 0x25, 0xf8, 0x84, 0x06, 0xe5,
- 0xa5, 0x59, 0x09, 0xc5, 0xaf, 0xf5, 0x26, 0x9a,
- 0x86, 0xa7, 0xa9, 0x53, 0x15, 0x34, 0xf7, 0xda,
- 0x2e, 0x4c, 0x30, 0x3d, 0x8a, 0x31, 0x8a, 0x72,
- 0x1c, 0x3c, 0x0c, 0x95, 0x95, 0x68, 0x09, 0x53,
- 0x2f, 0xcf, 0x0e, 0x24, 0x49, 0xa6, 0xb5, 0x25,
- 0xb1, 0x6a, 0xed, 0xf5, 0xaa, 0x0d, 0xe6, 0x57,
- 0xba, 0x63, 0x7b, 0x39, 0x1a, 0xaf, 0xd2, 0x55,
- 0xd9, 0x31, 0x32, 0x25, 0xf8, 0x84, 0x06, 0xe5,
- 0xa5, 0x59, 0x09, 0xc5, 0xaf, 0xf5, 0x26, 0x9a,
- 0x86, 0xa7, 0xa9, 0x53, 0x15, 0x34, 0xf7, 0xda,
- 0x2e, 0x4c, 0x30, 0x3d, 0x8a, 0x31, 0x8a, 0x72,
- 0x1c, 0x3c, 0x0c, 0x95, 0x95, 0x68, 0x09, 0x53,
- 0x2f, 0xcf, 0x0e, 0x24, 0x49, 0xa6, 0xb5, 0x25,
- 0xb1, 0x6a, 0xed, 0xf5, 0xaa, 0x0d, 0xe6, 0x57,
- 0xba, 0x63, 0x7b, 0x39, 0x1a, 0xaf, 0xd2, 0x55,
- 0xd9, 0x31, 0x32, 0x25, 0xf8, 0x84, 0x06, 0xe5,
- 0xa5, 0x59, 0x09, 0xc5, 0xaf, 0xf5, 0x26, 0x9a,
- 0x86, 0xa7, 0xa9, 0x53, 0x15, 0x34, 0xf7, 0xda,
- 0x2e, 0x4c, 0x30, 0x3d, 0x8a, 0x31, 0x8a, 0x72,
- 0x1c, 0x3c, 0x0c, 0x95, 0x95, 0x68, 0x09, 0x53,
- 0x2f, 0xcf, 0x0e, 0x24, 0x49, 0xa6, 0xb5, 0x25,
- 0xb1, 0x6a, 0xed, 0xf5, 0xaa, 0x0d, 0xe6, 0x57,
- 0xba, 0x63, 0x7b, 0x39, 0x1a, 0xaf, 0xd2, 0x55,
- 0xd9, 0x31, 0x32, 0x25, 0xf8, 0x84, 0x06, 0xe5,
- 0xa5, 0x59, 0x09, 0xc5, 0xaf, 0xf5, 0x26, 0x9a,
- 0x86, 0xa7, 0xa9, 0x53, 0x15, 0x34, 0xf7, 0xda,
- 0x2e, 0x4c, 0x30, 0x3d, 0x8a, 0x31, 0x8a, 0x72,
- 0x1c, 0x3c, 0x0c, 0x95, 0x95, 0x68, 0x09, 0x53,
- 0x2f, 0xcf, 0x0e, 0x24, 0x49, 0xa6, 0xb5, 0x25,
- 0xb1, 0x6a, 0xed, 0xf5, 0xaa, 0x0d, 0xe6, 0x57,
- 0xba, 0x63, 0x7b, 0x39, 0x1a, 0xaf, 0xd2, 0x55,
- 0xd9, 0x31, 0x32, 0x25, 0xf8, 0x84, 0x06, 0xe5,
- 0xa5, 0x59, 0x09, 0xc5, 0xaf, 0xf5, 0x26, 0x9a,
- 0x86, 0xa7, 0xa9, 0x53, 0x15, 0x34, 0xf7, 0xda,
- 0x2e, 0x4c, 0x30, 0x3d, 0x8a, 0x31, 0x8a, 0x72,
- 0x1c, 0x3c, 0x0c, 0x95, 0x95, 0x68, 0x09, 0x53,
- 0x2f, 0xcf, 0x0e, 0x24, 0x49, 0xa6, 0xb5, 0x25,
- 0xb1, 0x6a, 0xed, 0xf5, 0xaa, 0x0d, 0xe6, 0x57,
- 0xba, 0x63, 0x7b, 0x39, 0x1a, 0xaf, 0xd2, 0x55,
- 0xd9, 0x31, 0x32, 0x25, 0xf8, 0x84, 0x06, 0xe5,
- 0xa5, 0x59, 0x09, 0xc5, 0xaf, 0xf5, 0x26, 0x9a,
- 0x86, 0xa7, 0xa9, 0x53, 0x15, 0x34, 0xf7, 0xda,
- 0x2e, 0x4c, 0x30, 0x3d, 0x8a, 0x31, 0x8a, 0x72,
- 0x1c, 0x3c, 0x0c, 0x95, 0x95, 0x68, 0x09, 0x53,
- 0x2f, 0xcf, 0x0e, 0x24, 0x49, 0xa6, 0xb5, 0x25,
- 0xb1, 0x6a, 0xed, 0xf5, 0xaa, 0x0d, 0xe6, 0x57,
- 0xba, 0x63, 0x7b, 0x39, 0x1a, 0xaf, 0xd2, 0x55,
- 0xd9, 0x31, 0x32, 0x25, 0xf8, 0x84, 0x06, 0xe5,
- 0xa5, 0x59, 0x09, 0xc5, 0xaf, 0xf5, 0x26, 0x9a,
- 0x86, 0xa7, 0xa9, 0x53, 0x15, 0x34, 0xf7, 0xda,
- 0x2e, 0x4c, 0x30, 0x3d, 0x8a, 0x31, 0x8a, 0x72,
- 0x1c, 0x3c, 0x0c, 0x95, 0x95, 0x68, 0x09, 0x53,
- 0x2f, 0xcf, 0x0e, 0x24, 0x49, 0xa6, 0xb5, 0x25,
- 0xb1, 0x6a, 0xed, 0xf5, 0xaa, 0x0d, 0xe6, 0x57,
- 0xba, 0x63, 0x7b, 0x39, 0x1a, 0xaf, 0xd2, 0x55,
- 0xd9, 0x31, 0x32, 0x25, 0xf8, 0x84, 0x06, 0xe5,
- 0xa5, 0x59, 0x09, 0xc5, 0xaf, 0xf5, 0x26, 0x9a,
- 0x86, 0xa7, 0xa9, 0x53, 0x15, 0x34, 0xf7, 0xda,
- 0x2e, 0x4c, 0x30, 0x3d, 0x8a, 0x31, 0x8a, 0x72,
- 0x1c, 0x3c, 0x0c, 0x95, 0x95, 0x68, 0x09, 0x53,
- 0x2f, 0xcf, 0x0e, 0x24, 0x49, 0xa6, 0xb5, 0x25,
- 0xb1, 0x6a, 0xed, 0xf5, 0xaa, 0x0d, 0xe6, 0x57,
- 0xba, 0x63, 0x7b, 0x39, 0x1a, 0xaf, 0xd2, 0x55,
- 0xd9, 0x31, 0x32, 0x25, 0xf8, 0x84, 0x06, 0xe5,
- 0xa5, 0x59, 0x09, 0xc5, 0xaf, 0xf5, 0x26, 0x9a,
- 0x86, 0xa7, 0xa9, 0x53, 0x15, 0x34, 0xf7, 0xda,
- 0x2e, 0x4c, 0x30, 0x3d, 0x8a, 0x31, 0x8a, 0x72,
- 0x1c, 0x3c, 0x0c, 0x95, 0x95, 0x68, 0x09, 0x53,
- 0x2f, 0xcf, 0x0e, 0x24, 0x49, 0xa6, 0xb5, 0x25,
- 0xb1, 0x6a, 0xed, 0xf5, 0xaa, 0x0d, 0xe6, 0x57,
- 0xba, 0x63, 0x7b, 0x39, 0x1a, 0xaf, 0xd2, 0x55,
- 0xd9, 0x31, 0x32, 0x25, 0xf8, 0x84, 0x06, 0xe5,
- 0xa5, 0x59, 0x09, 0xc5, 0xaf, 0xf5, 0x26, 0x9a,
- 0x86, 0xa7, 0xa9, 0x53, 0x15, 0x34, 0xf7, 0xda,
- 0x2e, 0x4c, 0x30, 0x3d, 0x8a, 0x31, 0x8a, 0x72,
- 0x1c, 0x3c, 0x0c, 0x95, 0x95, 0x68, 0x09, 0x53,
- 0x2f, 0xcf, 0x0e, 0x24, 0x49, 0xa6, 0xb5, 0x25,
- 0xb1, 0x6a, 0xed, 0xf5, 0xaa, 0x0d, 0xe6, 0x57,
- 0xba, 0x63, 0x7b, 0x39, 0x1a, 0xaf, 0xd2, 0x55
- },
- .len = 2048
- },
- .ciphertext = {
- .data = {
- 0x42, 0x83, 0x1E, 0xC2, 0x21, 0x77, 0x74, 0x24,
- 0x4B, 0x72, 0x21, 0xB7, 0x84, 0xD0, 0xD4, 0x9C,
- 0xE3, 0xAA, 0x21, 0x2F, 0x2C, 0x02, 0xA4, 0xE0,
- 0x35, 0xC1, 0x7E, 0x23, 0x29, 0xAC, 0xA1, 0x2E,
- 0x21, 0xD5, 0x14, 0xB2, 0x54, 0x66, 0x93, 0x1C,
- 0x7D, 0x8F, 0x6A, 0x5A, 0xAC, 0x84, 0xAA, 0x05,
- 0x1B, 0xA3, 0x0B, 0x39, 0x6A, 0x0A, 0xAC, 0x97,
- 0x3D, 0x58, 0xE0, 0x91, 0x47, 0x3F, 0x59, 0x85,
- 0x04, 0x99, 0x55, 0xE1, 0x36, 0x76, 0xB7, 0x14,
- 0x1D, 0xF0, 0xF6, 0x8C, 0x65, 0xD5, 0xAD, 0xFB,
- 0x90, 0x7F, 0x5D, 0xA2, 0xD6, 0xFD, 0xD0, 0xE5,
- 0x0D, 0x9B, 0x68, 0x21, 0x49, 0x42, 0x6E, 0x13,
- 0xEC, 0x22, 0x50, 0x2A, 0x30, 0x47, 0x49, 0xA1,
- 0x7F, 0xC3, 0x09, 0xE0, 0x56, 0x91, 0xC4, 0x54,
- 0x70, 0xD7, 0x19, 0x40, 0xCA, 0x6B, 0x65, 0x27,
- 0x3E, 0xE9, 0xD1, 0x0F, 0x1C, 0xB5, 0x45, 0x0D,
- 0x27, 0xE7, 0xCF, 0x94, 0x10, 0xBF, 0xA2, 0xFA,
- 0x86, 0x20, 0x3F, 0x6E, 0xE9, 0x95, 0x03, 0x5A,
- 0x46, 0x11, 0x75, 0xD5, 0x37, 0x71, 0x7F, 0xE0,
- 0xBC, 0x9F, 0xC8, 0xE9, 0xB1, 0x08, 0x2C, 0x59,
- 0x6E, 0x51, 0x4A, 0x83, 0x38, 0xC1, 0xED, 0xE2,
- 0x2E, 0x88, 0x90, 0xA5, 0x7D, 0xA4, 0x93, 0x9A,
- 0x30, 0xD6, 0x96, 0x34, 0x0F, 0xC4, 0xD1, 0x7E,
- 0xC9, 0x8F, 0xC5, 0xBB, 0x80, 0x50, 0x85, 0x75,
- 0x7D, 0x82, 0x36, 0xDB, 0x62, 0x15, 0xAF, 0x4B,
- 0x0A, 0x9D, 0xCD, 0x64, 0x00, 0xAB, 0x88, 0x28,
- 0xA8, 0x35, 0x17, 0x70, 0x6F, 0x47, 0x44, 0xCD,
- 0x65, 0xAE, 0xD5, 0x05, 0x0A, 0xA8, 0x2F, 0x48,
- 0xAC, 0xA1, 0x72, 0x64, 0x1C, 0x7E, 0xD3, 0xF5,
- 0xD8, 0x4E, 0x73, 0x17, 0x0C, 0xE5, 0x9F, 0xB6,
- 0x00, 0xFA, 0xD7, 0x2C, 0x3D, 0x6A, 0x10, 0x47,
- 0x7C, 0xF2, 0x6B, 0x13, 0x10, 0x8A, 0x76, 0x39,
- 0xF8, 0x50, 0x33, 0xAC, 0x08, 0x1D, 0xA3, 0x48,
- 0xE1, 0xD0, 0x05, 0x49, 0xB7, 0x76, 0x03, 0x72,
- 0x07, 0xC5, 0xD3, 0x08, 0x79, 0x38, 0x66, 0xC1,
- 0x52, 0xAF, 0x83, 0xCD, 0xF3, 0x86, 0x62, 0xBF,
- 0x92, 0x24, 0x97, 0xBD, 0x5D, 0x7D, 0x81, 0x56,
- 0x4C, 0xF3, 0xD2, 0x60, 0xC2, 0xDE, 0x61, 0xC1,
- 0x39, 0x61, 0xDA, 0x07, 0x50, 0xC7, 0x98, 0x63,
- 0x7E, 0xDD, 0x54, 0xCA, 0xDE, 0x12, 0xD2, 0xA8,
- 0x19, 0x08, 0x6E, 0xF9, 0xFA, 0x6F, 0x58, 0x97,
- 0xD4, 0x0B, 0x5C, 0x5B, 0xE5, 0x30, 0xE5, 0x4C,
- 0x0E, 0x16, 0x87, 0xF0, 0x2C, 0xCB, 0x53, 0xB8,
- 0x0C, 0xE5, 0xDF, 0x16, 0x7B, 0xE8, 0xC2, 0xCF,
- 0xCC, 0xFF, 0x51, 0x24, 0xC1, 0xDD, 0x59, 0x9C,
- 0xA7, 0x56, 0x03, 0xB9, 0x0A, 0x37, 0xA2, 0xAC,
- 0x28, 0x8B, 0xEB, 0x51, 0x4E, 0xF1, 0xAE, 0xB5,
- 0xC8, 0xB5, 0xCB, 0x8D, 0x23, 0xF6, 0x24, 0x2D,
- 0xF6, 0x59, 0x62, 0xC0, 0xCB, 0xD3, 0x18, 0xE4,
- 0xB7, 0x73, 0xEF, 0xDB, 0x13, 0x9A, 0xF5, 0xD3,
- 0xD5, 0x61, 0x01, 0x14, 0xA5, 0xE5, 0x0D, 0x27,
- 0xC9, 0xA5, 0x08, 0x1C, 0x60, 0xBA, 0x73, 0xFF,
- 0xA9, 0xE0, 0x27, 0x86, 0x3F, 0xF7, 0x15, 0x03,
- 0x69, 0xA7, 0x2B, 0x57, 0xAC, 0xA6, 0x70, 0x55,
- 0xE9, 0xB5, 0x3F, 0xEB, 0x6F, 0xCE, 0x8A, 0xA1,
- 0x9D, 0x8B, 0x84, 0xF1, 0x7C, 0xD0, 0x35, 0x21,
- 0x91, 0x3D, 0x3D, 0x6E, 0x83, 0xFC, 0x45, 0x36,
- 0x93, 0xDA, 0x66, 0xDF, 0x1A, 0x59, 0x22, 0xA5,
- 0xC4, 0x99, 0x9B, 0xF8, 0x48, 0x9A, 0x50, 0x09,
- 0xAB, 0xAE, 0x56, 0xB6, 0x49, 0x02, 0x3E, 0x90,
- 0xB6, 0x07, 0x7E, 0xA7, 0x6A, 0x0A, 0xB5, 0x85,
- 0x31, 0x0D, 0x84, 0xD4, 0x01, 0xE4, 0x48, 0x63,
- 0xF3, 0xC1, 0x54, 0x65, 0xA6, 0x4C, 0x8B, 0x33,
- 0xF9, 0x70, 0x59, 0x3B, 0xA6, 0xF6, 0x2B, 0x66,
- 0xC5, 0xD2, 0xEB, 0xAB, 0x67, 0xD2, 0xE3, 0x78,
- 0xA9, 0x1A, 0x4C, 0x99, 0xA9, 0xA6, 0xCA, 0xF7,
- 0x65, 0xF0, 0x48, 0xF8, 0x2A, 0xEA, 0x96, 0x9F,
- 0xC4, 0x50, 0x9A, 0x0C, 0xB6, 0x0D, 0x8A, 0x2F,
- 0xC3, 0x99, 0x4E, 0xA0, 0x06, 0x4D, 0xAB, 0x25,
- 0x2E, 0x44, 0x47, 0xB6, 0x98, 0xF1, 0x2C, 0x96,
- 0x54, 0x51, 0x12, 0x41, 0x0D, 0xEF, 0x32, 0x9A,
- 0x4A, 0xBD, 0xA2, 0x26, 0x53, 0xA8, 0xFD, 0x8B,
- 0x6C, 0x95, 0x0A, 0x1A, 0x96, 0xEF, 0x3C, 0x85,
- 0x34, 0x4E, 0x25, 0x9E, 0x1C, 0x67, 0x33, 0x8A,
- 0xFF, 0x6D, 0x98, 0x93, 0x3D, 0x3F, 0x49, 0x6B,
- 0xBF, 0x7C, 0x4F, 0x63, 0x5D, 0x62, 0x64, 0x67,
- 0x0D, 0x07, 0x7F, 0x24, 0x4A, 0x23, 0xBC, 0x35,
- 0xE0, 0x92, 0x6F, 0x51, 0xE7, 0x25, 0x97, 0xB9,
- 0x14, 0x35, 0x2B, 0x48, 0xAC, 0x6F, 0x54, 0xDF,
- 0xF2, 0xB4, 0xB0, 0xE0, 0xD3, 0x28, 0x0D, 0x66,
- 0x46, 0x28, 0x0A, 0x16, 0x9C, 0x87, 0x73, 0xB7,
- 0x9C, 0x2B, 0xB5, 0x43, 0xC9, 0x46, 0xB9, 0x1F,
- 0x5F, 0x3C, 0x45, 0x03, 0x4B, 0xBF, 0x44, 0x4D,
- 0xE1, 0x44, 0xDA, 0x54, 0xC5, 0x32, 0x3A, 0xFA,
- 0x21, 0x5C, 0xAD, 0xD5, 0x1E, 0x1B, 0x54, 0x7C,
- 0x9F, 0xEA, 0x92, 0x8C, 0xEA, 0x69, 0xC0, 0xCE,
- 0xDA, 0x09, 0xAD, 0x95, 0xA0, 0x8E, 0x0B, 0x8E,
- 0x10, 0x4F, 0x5B, 0x8F, 0xB8, 0x2D, 0xAC, 0x4C,
- 0x94, 0x4B, 0x7C, 0x1E, 0xF1, 0x53, 0x20, 0x9B,
- 0xD6, 0xC4, 0x92, 0x4C, 0x7F, 0xFB, 0x8B, 0x8E,
- 0x40, 0x2F, 0x24, 0xA3, 0x4E, 0x46, 0x64, 0xF4,
- 0xC6, 0x35, 0x0F, 0xC7, 0x40, 0x55, 0x43, 0xAF,
- 0x7E, 0x91, 0x76, 0x48, 0x6F, 0x97, 0x7A, 0xF8,
- 0x32, 0x1E, 0xD3, 0x5B, 0xBC, 0x19, 0xB5, 0x48,
- 0xFA, 0x4F, 0x52, 0x77, 0x5B, 0x9E, 0xA2, 0xC8,
- 0x9A, 0x83, 0x30, 0x8D, 0x9F, 0x0B, 0x6F, 0xA8,
- 0x2E, 0x84, 0xCC, 0xC1, 0x50, 0x96, 0x46, 0xAE,
- 0x73, 0x91, 0x7D, 0xCD, 0x88, 0xAB, 0x67, 0x3F,
- 0x66, 0x3A, 0x8D, 0xB1, 0x89, 0x07, 0x93, 0xDB,
- 0x42, 0x22, 0xDC, 0x13, 0xBD, 0xCD, 0xBB, 0x12,
- 0x8D, 0x88, 0x44, 0x13, 0x22, 0x52, 0x81, 0xDC,
- 0xEF, 0xA1, 0xE4, 0xA3, 0xA7, 0xBA, 0xEE, 0x98,
- 0x79, 0x45, 0x29, 0x05, 0x65, 0x3D, 0xDC, 0xAF,
- 0xA1, 0x37, 0x29, 0xFD, 0x05, 0xD1, 0x3A, 0xF7,
- 0x32, 0x1D, 0x02, 0xEC, 0x28, 0x1E, 0x0F, 0x96,
- 0xF3, 0x21, 0x19, 0x5F, 0x49, 0xB9, 0xEA, 0x9A,
- 0xAD, 0x34, 0x58, 0xD1, 0xD9, 0xB1, 0x7D, 0xD2,
- 0xEA, 0xED, 0x74, 0xE8, 0x25, 0x9A, 0x7B, 0xC5,
- 0xC8, 0xD8, 0x76, 0xB6, 0xBC, 0x0B, 0x78, 0xCE,
- 0xD9, 0xA6, 0xBB, 0x2F, 0x79, 0xA4, 0x45, 0x05,
- 0x55, 0x6E, 0x20, 0x84, 0xEB, 0xC8, 0x70, 0xB0,
- 0x3A, 0x2D, 0x06, 0x98, 0x29, 0x10, 0xB8, 0xC5,
- 0xE9, 0xE4, 0xB6, 0xDE, 0x97, 0x9A, 0x0D, 0x8C,
- 0xB6, 0x22, 0x16, 0x59, 0xAB, 0xB5, 0xD7, 0x14,
- 0xAB, 0x08, 0x02, 0x27, 0x7B, 0xF7, 0x0E, 0xAC,
- 0xC5, 0xAC, 0x4D, 0x7F, 0xE5, 0x65, 0x51, 0x40,
- 0x44, 0x92, 0xB1, 0x6A, 0xB7, 0x00, 0x76, 0x89,
- 0x6E, 0x08, 0x5F, 0x45, 0x2B, 0x53, 0x86, 0x86,
- 0xA7, 0x85, 0xBC, 0x62, 0xAC, 0xAA, 0x82, 0x73,
- 0x0A, 0xEB, 0x35, 0x16, 0x95, 0x26, 0xAB, 0x9E,
- 0xE9, 0x64, 0x53, 0x99, 0x08, 0x31, 0xF5, 0x6B,
- 0x1F, 0xFE, 0x47, 0x4B, 0x09, 0x33, 0x4F, 0xBF,
- 0x1F, 0x0B, 0x4C, 0xB2, 0xB4, 0xA4, 0x17, 0xA9,
- 0xAD, 0xC5, 0x62, 0x7C, 0xF1, 0x1B, 0xAE, 0x46,
- 0xD3, 0xAC, 0xFD, 0x43, 0xFE, 0x79, 0xD0, 0x58,
- 0x2F, 0x6C, 0x9F, 0xD0, 0x65, 0xA4, 0x64, 0x03,
- 0xAF, 0x73, 0x46, 0x75, 0x7D, 0x49, 0x1B, 0x4C,
- 0xFA, 0x49, 0xD8, 0x9A, 0xCC, 0x59, 0xC6, 0xC7,
- 0xA1, 0x05, 0xC2, 0x32, 0xC8, 0x6C, 0x50, 0xA8,
- 0x06, 0x58, 0xBE, 0x6C, 0x7D, 0x22, 0xD6, 0x0D,
- 0x74, 0x40, 0xCE, 0xD6, 0x64, 0xD6, 0x47, 0xD0,
- 0xBF, 0xF1, 0x5C, 0x54, 0xF9, 0x06, 0x3F, 0x3D,
- 0x86, 0xBA, 0xF2, 0x0F, 0x5E, 0x2C, 0x01, 0xCC,
- 0xD9, 0xC7, 0xB1, 0x4A, 0xB3, 0xD7, 0x26, 0xCC,
- 0xC3, 0x7A, 0x74, 0x2C, 0xE1, 0x22, 0x65, 0xA0,
- 0x5B, 0xCA, 0xF4, 0xE1, 0x7D, 0xE1, 0x56, 0xFD,
- 0x94, 0x10, 0xC6, 0xA1, 0x4A, 0xE8, 0x6B, 0x34,
- 0x4E, 0x71, 0x60, 0x77, 0x0F, 0x03, 0xDD, 0xFF,
- 0xC8, 0x59, 0x54, 0x6C, 0xD4, 0x4A, 0x55, 0x24,
- 0x35, 0x21, 0x60, 0x73, 0xDF, 0x6F, 0xE7, 0x3C,
- 0xC2, 0xF0, 0xDA, 0xA9, 0xE5, 0x8C, 0xAC, 0xB6,
- 0xFD, 0x2E, 0xF7, 0xA0, 0x18, 0xA7, 0x55, 0x47,
- 0xD1, 0xCB, 0x9E, 0xAA, 0x58, 0x54, 0x3B, 0x37,
- 0x18, 0xB5, 0xC1, 0xBB, 0x41, 0x59, 0xE4, 0x28,
- 0x4A, 0x13, 0x90, 0x6A, 0xF7, 0xD1, 0xB3, 0x71,
- 0xB6, 0x6E, 0xF6, 0x5D, 0x2E, 0x0E, 0x6C, 0x4A,
- 0x7B, 0xF7, 0xB6, 0x21, 0xD4, 0xFC, 0x47, 0x8C,
- 0x9B, 0x0A, 0x90, 0xAC, 0x11, 0x52, 0x86, 0x07,
- 0x24, 0xDA, 0xA9, 0x49, 0x50, 0xD9, 0xDC, 0xE2,
- 0x19, 0x87, 0x73, 0x88, 0xC3, 0xE4, 0xED, 0xC9,
- 0x1C, 0xA8, 0x7E, 0x39, 0x48, 0x91, 0x10, 0xAB,
- 0xFC, 0x3C, 0x1E, 0xEE, 0x08, 0xA1, 0xB9, 0xB2,
- 0x02, 0x57, 0xB1, 0xD1, 0x35, 0x5E, 0x3D, 0x94,
- 0xFB, 0x36, 0x27, 0x1A, 0x0E, 0x75, 0xFC, 0xBC,
- 0xDB, 0xF3, 0xF5, 0x7C, 0x08, 0x39, 0xAA, 0xF4,
- 0x2E, 0xEE, 0xCF, 0xCD, 0x2D, 0x70, 0xB8, 0x84,
- 0xE6, 0x22, 0x5C, 0xC0, 0xB9, 0x33, 0xCB, 0x97,
- 0xA1, 0xA3, 0xEE, 0x93, 0x71, 0xCF, 0xC9, 0x21,
- 0x31, 0x7A, 0xEC, 0xE7, 0x70, 0xF2, 0xAA, 0x91,
- 0xAA, 0x48, 0xAD, 0xAC, 0x03, 0xB1, 0x26, 0x52,
- 0xBC, 0x65, 0x22, 0xA1, 0x09, 0x3D, 0xAB, 0x16,
- 0x08, 0xBF, 0xCF, 0x3F, 0x59, 0x08, 0x6F, 0x68,
- 0xEB, 0x8A, 0xB3, 0xCF, 0x77, 0x82, 0xFB, 0x25,
- 0x78, 0x16, 0x4C, 0xDB, 0x72, 0xF5, 0xCF, 0x79,
- 0x71, 0xE4, 0x4E, 0x23, 0x15, 0x7F, 0x1E, 0xA8,
- 0x3E, 0xC0, 0x59, 0x91, 0x20, 0xAE, 0x2C, 0x1D,
- 0x90, 0xC8, 0x49, 0x42, 0x48, 0x29, 0x82, 0x66,
- 0x68, 0x49, 0x73, 0xDA, 0xE4, 0x28, 0xCD, 0x7B,
- 0x4D, 0xE4, 0x23, 0x34, 0xB9, 0xE1, 0xB4, 0x42,
- 0x67, 0x22, 0x5B, 0xEE, 0xE6, 0x74, 0x32, 0x6F,
- 0x21, 0x9F, 0x97, 0x46, 0x03, 0xE1, 0xC9, 0x7A,
- 0x14, 0x27, 0x30, 0xE1, 0xB2, 0x34, 0xE6, 0xAF,
- 0x7B, 0xAA, 0xDD, 0x89, 0x04, 0x30, 0xD6, 0x78,
- 0x0B, 0x3D, 0xC3, 0x69, 0xB0, 0x67, 0x4F, 0x4E,
- 0x12, 0x21, 0x93, 0x2D, 0x79, 0xDD, 0x8B, 0xDB,
- 0xEA, 0x90, 0x66, 0x54, 0xA8, 0x05, 0xF2, 0xE4,
- 0x59, 0x8A, 0x96, 0x52, 0x30, 0xF0, 0x4E, 0x9A,
- 0xE5, 0xD8, 0x72, 0x1C, 0x3B, 0x63, 0x02, 0xB9,
- 0xC7, 0xA1, 0xDA, 0xC8, 0x6C, 0x48, 0xE0, 0xDE,
- 0x59, 0x64, 0x89, 0x2C, 0xF9, 0xC8, 0x3B, 0x00,
- 0xEC, 0xF2, 0x68, 0x51, 0x67, 0x05, 0x85, 0xAF,
- 0xB8, 0xD5, 0x65, 0xEE, 0x73, 0x26, 0x88, 0xFB,
- 0xA9, 0xD6, 0x6C, 0x68, 0x9D, 0x9F, 0x23, 0x6A,
- 0x10, 0x24, 0x82, 0xB2, 0xB7, 0x40, 0x19, 0x3E,
- 0x6F, 0xA2, 0xD5, 0x2C, 0x6E, 0x8D, 0xE9, 0x33,
- 0x6E, 0x24, 0x94, 0x05, 0xE9, 0x2D, 0xD9, 0x3A,
- 0x8C, 0xE5, 0xCC, 0x1D, 0x3F, 0xB8, 0x71, 0xA8,
- 0x98, 0x33, 0xBB, 0x1A, 0xAC, 0x41, 0x0A, 0x04,
- 0xFE, 0x4D, 0x46, 0x17, 0x8A, 0xCB, 0xF3, 0x4B,
- 0x97, 0x02, 0xCC, 0x9D, 0x11, 0xF1, 0xBC, 0xA9,
- 0xC1, 0xD1, 0xB6, 0xD6, 0x7B, 0x5F, 0x9D, 0x22,
- 0x86, 0x71, 0xEC, 0x42, 0x53, 0xB7, 0x85, 0x30,
- 0xAF, 0x1D, 0x01, 0xA7, 0xBF, 0x72, 0xC2, 0xC6,
- 0xC9, 0xB8, 0xD8, 0xC7, 0xE9, 0xC4, 0xBA, 0xC5,
- 0xB1, 0x8A, 0xB8, 0x62, 0xBF, 0x75, 0x75, 0x69,
- 0xF8, 0x8D, 0x7E, 0xD9, 0xD2, 0x28, 0xB5, 0x40,
- 0xCE, 0xCB, 0xB8, 0x74, 0x31, 0x40, 0x7B, 0x0D,
- 0x73, 0x98, 0x99, 0x12, 0xB7, 0x75, 0x3E, 0xBC,
- 0xAE, 0x48, 0xCA, 0xA9, 0x1E, 0xA7, 0x95, 0x31,
- 0x87, 0x0F, 0x14, 0x52, 0xB6, 0x8E, 0x42, 0x50,
- 0xB2, 0x76, 0x75, 0xD8, 0x7E, 0x66, 0x23, 0x13,
- 0x8B, 0x29, 0xAA, 0x13, 0xCA, 0x8A, 0xD8, 0x9B,
- 0x7B, 0x38, 0xD2, 0xE8, 0x67, 0xD1, 0x89, 0x25,
- 0x9C, 0x63, 0x2F, 0xC3, 0x26, 0xC7, 0x74, 0x83,
- 0x05, 0xED, 0x67, 0x02, 0x85, 0xAD, 0x1D, 0x0E,
- 0xA9, 0xD6, 0xE1, 0xC7, 0x39, 0xA0, 0x6E, 0x72,
- 0xCE, 0x56, 0x6C, 0xB8, 0x4A, 0xDE, 0x11, 0xA2,
- 0xBF, 0xC1, 0x84, 0x98, 0x8F, 0xCA, 0x79, 0x74,
- 0xCA, 0x9F, 0x45, 0x16, 0xBC, 0xB1, 0xF4, 0x03,
- 0x76, 0x6E, 0xD5, 0x46, 0x60, 0xD7, 0x1D, 0xF0,
- 0x87, 0x29, 0x63, 0x07, 0x06, 0xB9, 0xC2, 0x69,
- 0x6D, 0xF9, 0x4B, 0x30, 0x96, 0x83, 0xB8, 0xC5,
- 0xBE, 0x3A, 0xBA, 0xD0, 0x3E, 0x2B, 0x04, 0x16,
- 0x6A, 0x00, 0x3B, 0x1A, 0x8E, 0xF8, 0xF6, 0x21,
- 0x01, 0xD6, 0x08, 0x41, 0x74, 0xA2, 0xFC, 0x36,
- 0xED, 0x11, 0x51, 0x5A, 0x4A, 0x21, 0x1A, 0x03,
- 0x11, 0x95, 0x11, 0xF6, 0x73, 0x38, 0x67, 0xFC,
- 0xF1, 0x2B, 0x22, 0x54, 0x65, 0x40, 0x7D, 0x8C,
- 0x13, 0xC4, 0x46, 0x87, 0x09, 0x2B, 0xB5, 0xA1,
- 0x82, 0x49, 0x46, 0x56, 0xF5, 0x5F, 0xF1, 0x04,
- 0xD8, 0x6F, 0xDB, 0x38, 0xAD, 0xF4, 0x1A, 0xA3,
- 0xFF, 0x7C, 0xC7, 0xA6, 0xAF, 0x87, 0x5C, 0x8C,
- 0xEA, 0x3C, 0x9D, 0x7A, 0x4A, 0xD8, 0xA8, 0x66,
- 0xDB, 0xBF, 0x12, 0x58, 0x98, 0x8E, 0xBA, 0x6F,
- 0xAF, 0x20, 0xDA, 0xEE, 0x82, 0x34, 0x2F, 0x33,
- 0x88, 0x98, 0xBA, 0xB2, 0x54, 0x7F, 0x9E, 0x63,
- 0x19, 0x6C, 0x7D, 0xCE, 0x85, 0xF8, 0xB6, 0x77,
- 0xCB, 0x38, 0x1F, 0xB1, 0x79, 0xBD, 0xED, 0x32,
- 0xE3, 0xB9, 0x40, 0xEF, 0x3E, 0x6C, 0x29, 0x88,
- 0x70, 0x99, 0x47, 0xA6, 0x4A, 0x1C, 0xCC, 0x0B,
- 0x9B, 0x72, 0xA9, 0x29, 0x83, 0x4C, 0xDE, 0x4F,
- 0x65, 0x4E, 0xCE, 0xBD, 0xFA, 0x76, 0x8D, 0xA6,
- 0x1A, 0xD8, 0x66, 0xFE, 0xA4, 0x2A, 0x61, 0x50,
- 0xEE, 0x15, 0xF1, 0xF0, 0x9D, 0xFF, 0xEC, 0xEE,
- 0x00, 0x03, 0xFE, 0xAC, 0x53, 0x02, 0xCC, 0x87,
- 0xB1, 0xA2, 0xD8, 0x34, 0x2C, 0xEC, 0xA6, 0x4C,
- 0x02, 0xC0, 0xC1, 0x72, 0xD6, 0x54, 0x35, 0x24,
- 0x25, 0x8B, 0xEC, 0xDA, 0x47, 0x5F, 0x5D, 0x7E,
- 0xD8, 0x01, 0x51, 0xDD, 0x8F, 0xB4, 0x48, 0xDD,
- 0x94, 0x99, 0x95, 0x77, 0xB3, 0x42, 0x14, 0xEB,
- 0x26, 0x61, 0xE9, 0x22, 0xE3, 0x07, 0x73, 0xFB,
- 0xEF, 0x38, 0x55, 0x35, 0x8F, 0xCC, 0x30, 0x1E,
- 0x38, 0xE0, 0x35, 0xF4, 0x9A, 0x7C, 0xCF, 0x38,
- 0x0B, 0x9E, 0xF4, 0x88, 0x4A, 0xEA, 0xF2, 0x67,
- 0x9F, 0x61, 0x40, 0x34, 0x09, 0xDC, 0xBF, 0xFB,
- 0x22, 0x27, 0x04, 0x8B, 0x8D, 0x85, 0x7F, 0xB2,
- 0x29, 0x62, 0x25, 0x73, 0x7F, 0x46, 0x2E, 0xA3,
- 0x8E, 0xAF, 0xEC, 0x55, 0x98, 0x1A, 0xEE, 0x29,
- 0xA0, 0x1A, 0x5F, 0xFE, 0x5D, 0xA5, 0x76, 0x93,
- 0xAB, 0x57, 0x56, 0xEA, 0xDB, 0x39, 0xAC, 0x48,
- 0xBE, 0x95, 0x92, 0x2B, 0xC6, 0xE1, 0x2F, 0x36,
- 0x4B, 0x08, 0x01, 0x90, 0x50, 0xD8, 0xFA, 0xF9,
- 0x94, 0x4E, 0x76, 0x9B, 0x72, 0x59, 0xC2, 0x2F,
- 0x61, 0x04, 0x0A, 0x9E, 0x28, 0xE5, 0x24, 0x1E,
- 0x79, 0xCF, 0x8D, 0xB6, 0x52, 0xA7, 0x79, 0x5F,
- 0x44, 0x98, 0xD5, 0x0E, 0x6E, 0x4B, 0x64, 0x9B,
- },
- .len = 2048
- },
- .auth_tags[0] = {
- .size = 64,
- .data = { 0x4d, 0x5c, 0x2a, 0xf3, 0x27, 0xcd, 0x64, 0xa6,
- 0x2c, 0xf3, 0x5a, 0xbd, 0x2b, 0xa6, 0xfa, 0xb4 },
- .len = 16
- },
- .auth_tags[1] = {
- .size = 128,
- .data = { 0xE9, 0xA9, 0x75, 0xB6, 0xEF, 0x6F, 0x8C, 0xF1,
- 0xB3, 0xA9, 0x19, 0xA4, 0xAE, 0x66, 0xBD, 0x9E },
- .len = 16
- },
- .auth_tags[2] = {
- .size = 256,
- .data = { 0x29, 0xC3, 0x18, 0x96, 0x54, 0xCB, 0xF5, 0xAA,
- 0x4E, 0x62, 0xB6, 0xFF, 0x45, 0xA6, 0x18, 0x0C },
- .len = 16
- },
- .auth_tags[3] = {
- .size = 512,
- .data = { 0x3B, 0xD7, 0xC3, 0x5F, 0xE4, 0x1B, 0xC2, 0xBC,
- 0xE9, 0xAC, 0xF2, 0xCE, 0xA7, 0x7B, 0x1D, 0x70 },
- .len = 16
- },
- .auth_tags[4] = {
- .size = 1024,
- .data = { 0xCC, 0xBB, 0xBC, 0xCF, 0x86, 0x01, 0x4D, 0x93,
- 0x4B, 0x68, 0x55, 0x19, 0xA1, 0x40, 0xCD, 0xEA },
- .len = 16
- },
- .auth_tags[5] = {
- .size = 1536,
- .data = { 0x67, 0x31, 0x11, 0xA2, 0x58, 0xB5, 0x1C, 0x23,
- 0xC0, 0x41, 0x05, 0x30, 0xC6, 0xBA, 0xFA, 0x88 },
- .len = 16
- },
- .auth_tags[6] = {
- .size = 2048,
- .data = { 0x03, 0x9C, 0x6B, 0xB9, 0x57, 0xBF, 0x6E, 0x86,
- 0x3A, 0x09, 0x5F, 0x08, 0xA9, 0xE4, 0xF2, 0x1F },
- .len = 16
- },
- .auth_tag = {
- .data = {
- 0x03, 0x9C, 0x6B, 0xB9, 0x57, 0xBF, 0x6E, 0x86,
- 0x3A, 0x09, 0x5F, 0x08, 0xA9, 0xE4, 0xF2, 0x1F
- },
- .len = 16
- },
-};
-
-static const struct gmac_test_data gmac_test_case_4 = {
- .key = {
- .data = {
- 0xfe, 0xff, 0xe9, 0x92, 0x86, 0x65, 0x73, 0x1c,
- 0x6d, 0x6a, 0x8f, 0x94, 0x67, 0x30, 0x83, 0x08
- },
- .len = 16
- },
- .iv = {
- .data = {
- 0xca, 0xfe, 0xba, 0xbe, 0xfa, 0xce, 0xdb, 0xad,
- 0xde, 0xca, 0xf8, 0x88
- },
- .len = 12
- },
- .aad = {
- .data = gmac_plaintext,
- .len = GMAC_LARGE_PLAINTEXT_LENGTH
- },
- .plaintext = {
- .data = NULL,
- .len = 0
- },
- .gmac_tag = {
- .data = {
- 0x88, 0x82, 0xb4, 0x93, 0x8f, 0x04, 0xcd, 0x06,
- 0xfd, 0xac, 0x6d, 0x8b, 0x9c, 0x9e, 0x8f, 0xec
- },
- .len = 16
- }
-};
-
-#endif /* TEST_CRYPTODEV_GCM_TEST_VECTORS_H_ */
diff --git a/app/test/test_cryptodev_hash_test_vectors.h b/app/test/test_cryptodev_hash_test_vectors.h
deleted file mode 100644
index 9f095cf3..00000000
--- a/app/test/test_cryptodev_hash_test_vectors.h
+++ /dev/null
@@ -1,491 +0,0 @@
-/*
- * BSD LICENSE
- *
- * Copyright(c) 2016 Intel Corporation. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * * Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * * Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in
- * the documentation and/or other materials provided with the
- * distribution.
- * * Neither the name of Intel Corporation nor the names of its
- * contributors may be used to endorse or promote products derived
- * from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
- * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
- * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#ifndef TEST_CRYPTODEV_HASH_TEST_VECTORS_H_
-#define TEST_CRYPTODEV_HASH_TEST_VECTORS_H_
-
-static const uint8_t plaintext_hash[] = {
- "What a lousy earth! He wondered how many people "
- "were destitute that same night even in his own "
- "prosperous country, how many homes were "
- "shanties, how many husbands were drunk and "
- "wives socked, and how many children were "
- "bullied, abused, or abandoned. How many "
- "families hungered for food they could not "
- "afford to buy? How many hearts were broken? How "
- "many suicides would take place that same night, "
- "how many people would go insane? How many "
- "cockroaches and landlords would triumph? How "
- "many winners were losers, successes failures, "
- "and rich men poor men? How many wise guys were "
- "stupid? How many happy endings were unhappy "
- "endings? How many honest men were liars, brave "
- "men cowards, loyal men traitors, how many "
- "sainted men were corrupt, how many people in "
- "positions of trust had sold their souls to "
- "bodyguards, how many had never had souls? How "
- "many straight-and-narrow paths were crooked "
- "paths? How many best families were worst "
- "families and how many good people were bad "
- "people? When you added them all up and then "
- "subtracted, you might be left with only the "
- "children, and perhaps with Albert Einstein and "
- "an old violinist or sculptor somewhere."
-};
-
-static const struct blockcipher_test_data
-md5_test_vector = {
- .auth_algo = RTE_CRYPTO_AUTH_MD5,
- .ciphertext = {
- .data = plaintext_hash,
- .len = 512
- },
- .digest = {
- .data = {
- 0xB3, 0xE6, 0xBB, 0x50, 0x41, 0x35, 0x3C, 0x6B,
- 0x7A, 0xFF, 0xD2, 0x64, 0xAF, 0xD5, 0x1C, 0xB2
- },
- .len = 16
- }
-};
-
-static const struct blockcipher_test_data
-hmac_md5_test_vector = {
- .auth_algo = RTE_CRYPTO_AUTH_MD5_HMAC,
- .ciphertext = {
- .data = plaintext_hash,
- .len = 512
- },
- .auth_key = {
- .data = {
- 0xF8, 0x2A, 0xC7, 0x54, 0xDB, 0x96, 0x18, 0xAA,
- 0xC3, 0xA1, 0x53, 0xF6, 0x1F, 0x17, 0x60, 0xBD
- },
- .len = 16
- },
- .digest = {
- .data = {
- 0x50, 0xE8, 0xDE, 0xC5, 0xC1, 0x76, 0xAC, 0xAE,
- 0x15, 0x4A, 0xF1, 0x7F, 0x7E, 0x04, 0x42, 0x9B
- },
- .len = 16
- }
-};
-
-static const struct blockcipher_test_data
-sha1_test_vector = {
- .auth_algo = RTE_CRYPTO_AUTH_SHA1,
- .ciphertext = {
- .data = plaintext_hash,
- .len = 512
- },
- .digest = {
- .data = {
- 0xA2, 0x8D, 0x40, 0x78, 0xDD, 0x9F, 0xBB, 0xD5,
- 0x35, 0x62, 0xFB, 0xFA, 0x93, 0xFD, 0x7D, 0x70,
- 0xA6, 0x7D, 0x45, 0xCA
- },
- .len = 20
- }
-};
-
-static const struct blockcipher_test_data
-hmac_sha1_test_vector = {
- .auth_algo = RTE_CRYPTO_AUTH_SHA1_HMAC,
- .ciphertext = {
- .data = plaintext_hash,
- .len = 512
- },
- .auth_key = {
- .data = {
- 0xF8, 0x2A, 0xC7, 0x54, 0xDB, 0x96, 0x18, 0xAA,
- 0xC3, 0xA1, 0x53, 0xF6, 0x1F, 0x17, 0x60, 0xBD,
- 0xDE, 0xF4, 0xDE, 0xAD
- },
- .len = 20
- },
- .digest = {
- .data = {
- 0xC4, 0xB7, 0x0E, 0x6B, 0xDE, 0xD1, 0xE7, 0x77,
- 0x7E, 0x2E, 0x8F, 0xFC, 0x48, 0x39, 0x46, 0x17,
- 0x3F, 0x91, 0x64, 0x59
- },
- .len = 20
- }
-};
-
-static const struct blockcipher_test_data
-sha224_test_vector = {
- .auth_algo = RTE_CRYPTO_AUTH_SHA224,
- .ciphertext = {
- .data = plaintext_hash,
- .len = 512
- },
- .digest = {
- .data = {
- 0x91, 0xE7, 0xCD, 0x75, 0x14, 0x9C, 0xA9, 0xE9,
- 0x2E, 0x46, 0x12, 0x20, 0x22, 0xF9, 0x68, 0x28,
- 0x39, 0x26, 0xDF, 0xB5, 0x78, 0x62, 0xB2, 0x6E,
- 0x5E, 0x8F, 0x25, 0x84
- },
- .len = 28
- }
-};
-
-static const struct blockcipher_test_data
-hmac_sha224_test_vector = {
- .auth_algo = RTE_CRYPTO_AUTH_SHA224_HMAC,
- .ciphertext = {
- .data = plaintext_hash,
- .len = 512
- },
- .auth_key = {
- .data = {
- 0xF8, 0x2A, 0xC7, 0x54, 0xDB, 0x96, 0x18, 0xAA,
- 0xC3, 0xA1, 0x53, 0xF6, 0x1F, 0x17, 0x60, 0xBD,
- 0xDE, 0xF4, 0xDE, 0xAD, 0x26, 0xEB, 0xAB, 0x92,
- 0xFB, 0xBF, 0xB0, 0x8C
- },
- .len = 28
- },
- .digest = {
- .data = {
- 0x70, 0x0F, 0x04, 0x4D, 0x22, 0x02, 0x7D, 0x31,
- 0x36, 0xDA, 0x77, 0x19, 0xB9, 0x66, 0x37, 0x7B,
- 0xF1, 0x8A, 0x63, 0xBB, 0x5D, 0x1D, 0xE3, 0x9F,
- 0x92, 0xF6, 0xAA, 0x19
- },
- .len = 28
- }
-};
-
-static const struct blockcipher_test_data
-sha256_test_vector = {
- .auth_algo = RTE_CRYPTO_AUTH_SHA256,
- .ciphertext = {
- .data = plaintext_hash,
- .len = 512
- },
- .digest = {
- .data = {
- 0x7F, 0xF1, 0x0C, 0xF5, 0x90, 0x97, 0x19, 0x0F,
- 0x00, 0xE4, 0x83, 0x01, 0xCA, 0x59, 0x00, 0x2E,
- 0x1F, 0xC7, 0x84, 0xEE, 0x76, 0xA6, 0x39, 0x15,
- 0x76, 0x2F, 0x87, 0xF9, 0x01, 0x06, 0xF3, 0xB7
- },
- .len = 32
- }
-};
-
-static const struct blockcipher_test_data
-hmac_sha256_test_vector = {
- .auth_algo = RTE_CRYPTO_AUTH_SHA256_HMAC,
- .ciphertext = {
- .data = plaintext_hash,
- .len = 512
- },
- .auth_key = {
- .data = {
- 0xF8, 0x2A, 0xC7, 0x54, 0xDB, 0x96, 0x18, 0xAA,
- 0xC3, 0xA1, 0x53, 0xF6, 0x1F, 0x17, 0x60, 0xBD,
- 0xDE, 0xF4, 0xDE, 0xAD, 0x26, 0xEB, 0xAB, 0x92,
- 0xFB, 0xBF, 0xB0, 0x8C, 0x29, 0x87, 0x90, 0xAC
- },
- .len = 32
- },
- .digest = {
- .data = {
- 0xAF, 0x8F, 0x70, 0x1B, 0x4B, 0xAF, 0x34, 0xCB,
- 0x02, 0x24, 0x48, 0x45, 0x83, 0x52, 0x8F, 0x22,
- 0x06, 0x4D, 0x64, 0x09, 0x0A, 0xCC, 0x02, 0x77,
- 0x71, 0x83, 0x48, 0x71, 0x07, 0x02, 0x25, 0x17
- },
- .len = 32
- }
-};
-
-static const struct blockcipher_test_data
-sha384_test_vector = {
- .auth_algo = RTE_CRYPTO_AUTH_SHA384,
- .ciphertext = {
- .data = plaintext_hash,
- .len = 512
- },
- .digest = {
- .data = {
- 0x1D, 0xE7, 0x3F, 0x55, 0x86, 0xFE, 0x48, 0x9F,
- 0xAC, 0xC6, 0x85, 0x32, 0xFA, 0x8E, 0xA6, 0x77,
- 0x25, 0x84, 0xA5, 0x98, 0x8D, 0x0B, 0x80, 0xF4,
- 0xEB, 0x2C, 0xFB, 0x6C, 0xEA, 0x7B, 0xFD, 0xD5,
- 0xAD, 0x41, 0xAB, 0x15, 0xB0, 0x03, 0x15, 0xEC,
- 0x9E, 0x3D, 0xED, 0xCB, 0x80, 0x7B, 0xF4, 0xB6
- },
- .len = 48
- }
-};
-
-static const struct blockcipher_test_data
-hmac_sha384_test_vector = {
- .auth_algo = RTE_CRYPTO_AUTH_SHA384_HMAC,
- .ciphertext = {
- .data = plaintext_hash,
- .len = 512
- },
- .auth_key = {
- .data = {
- 0xF8, 0x2A, 0xC7, 0x54, 0xDB, 0x96, 0x18, 0xAA,
- 0xC3, 0xA1, 0x53, 0xF6, 0x1F, 0x17, 0x60, 0xBD,
- 0xDE, 0xF4, 0xDE, 0xAD, 0x26, 0xEB, 0xAB, 0x92,
- 0xFB, 0xBF, 0xB0, 0x8C, 0x29, 0x87, 0x90, 0xAC,
- 0x39, 0x8B, 0x5C, 0x49, 0x68, 0x1E, 0x3A, 0x05,
- 0xCC, 0x68, 0x5C, 0x76, 0xCB, 0x3C, 0x71, 0x89
- },
- .len = 48
- },
- .digest = {
- .data = {
- 0xE2, 0x83, 0x18, 0x55, 0xB5, 0x8D, 0x94, 0x9B,
- 0x01, 0xB6, 0xE2, 0x57, 0x7A, 0x62, 0xF5, 0xF4,
- 0xAB, 0x39, 0xF3, 0x3C, 0x28, 0xA0, 0x0F, 0xCC,
- 0xEE, 0x1C, 0xF1, 0xF8, 0x69, 0xF1, 0x24, 0x3B,
- 0x10, 0x90, 0x0A, 0xE3, 0xF0, 0x59, 0xDD, 0xC0,
- 0x6F, 0xE6, 0x8C, 0x84, 0xD5, 0x03, 0xF8, 0x9E
- },
- .len = 48
- }
-};
-
-static const struct blockcipher_test_data
-sha512_test_vector = {
- .auth_algo = RTE_CRYPTO_AUTH_SHA512,
- .ciphertext = {
- .data = plaintext_hash,
- .len = 512
- },
- .digest = {
- .data = {
- 0xB9, 0xBA, 0x28, 0x48, 0x3C, 0xC2, 0xD3, 0x65,
- 0x4A, 0xD6, 0x00, 0x1D, 0xCE, 0x61, 0x64, 0x54,
- 0x45, 0x8C, 0x64, 0x0E, 0xED, 0x0E, 0xD8, 0x1C,
- 0x72, 0xCE, 0xD2, 0x44, 0x91, 0xC8, 0xEB, 0xC7,
- 0x99, 0xC5, 0xCA, 0x89, 0x72, 0x64, 0x96, 0x41,
- 0xC8, 0xEA, 0xB2, 0x4E, 0xD1, 0x21, 0x13, 0x49,
- 0x64, 0x4E, 0x15, 0x68, 0x12, 0x67, 0x26, 0x0F,
- 0x2C, 0x3C, 0x83, 0x25, 0x27, 0x86, 0xF0, 0xDB
- },
- .len = 64
- }
-};
-
-static const struct blockcipher_test_data
-hmac_sha512_test_vector = {
- .auth_algo = RTE_CRYPTO_AUTH_SHA512_HMAC,
- .ciphertext = {
- .data = plaintext_hash,
- .len = 512
- },
- .auth_key = {
- .data = {
- 0xF8, 0x2A, 0xC7, 0x54, 0xDB, 0x96, 0x18, 0xAA,
- 0xC3, 0xA1, 0x53, 0xF6, 0x1F, 0x17, 0x60, 0xBD,
- 0xDE, 0xF4, 0xDE, 0xAD, 0x26, 0xEB, 0xAB, 0x92,
- 0xFB, 0xBF, 0xB0, 0x8C, 0x29, 0x87, 0x90, 0xAC,
- 0x39, 0x8B, 0x5C, 0x49, 0x68, 0x1E, 0x3A, 0x05,
- 0xCC, 0x68, 0x5C, 0x76, 0xCB, 0x3C, 0x71, 0x89,
- 0xDE, 0xAA, 0x36, 0x44, 0x98, 0x93, 0x97, 0x1E,
- 0x6D, 0x53, 0x83, 0x87, 0xB3, 0xB7, 0x56, 0x41
- },
- .len = 64
- },
- .digest = {
- .data = {
- 0xB8, 0x0B, 0x35, 0x97, 0x3F, 0x24, 0x3F, 0x05,
- 0x2A, 0x7F, 0x2F, 0xD8, 0xD7, 0x56, 0x58, 0xAD,
- 0x6F, 0x8D, 0x1F, 0x4C, 0x30, 0xF9, 0xA8, 0x29,
- 0x7A, 0xE0, 0x8D, 0x88, 0xF5, 0x2E, 0x94, 0xF5,
- 0x06, 0xF7, 0x5D, 0x57, 0x32, 0xA8, 0x49, 0x29,
- 0xEA, 0x6B, 0x6D, 0x95, 0xBD, 0x76, 0xF5, 0x79,
- 0x97, 0x37, 0x0F, 0xBE, 0xC2, 0x45, 0xA0, 0x87,
- 0xAF, 0x24, 0x27, 0x0C, 0x78, 0xBA, 0xBE, 0x20
- },
- .len = 64
- }
-};
-
-static const struct blockcipher_test_case hash_test_cases[] = {
- {
- .test_descr = "MD5 Digest",
- .test_data = &md5_test_vector,
- .op_mask = BLOCKCIPHER_TEST_OP_AUTH_GEN,
- .pmd_mask = BLOCKCIPHER_TEST_TARGET_PMD_OPENSSL
- },
- {
- .test_descr = "MD5 Digest Verify",
- .test_data = &md5_test_vector,
- .op_mask = BLOCKCIPHER_TEST_OP_AUTH_VERIFY,
- .pmd_mask = BLOCKCIPHER_TEST_TARGET_PMD_OPENSSL
- },
- {
- .test_descr = "HMAC-MD5 Digest",
- .test_data = &hmac_md5_test_vector,
- .op_mask = BLOCKCIPHER_TEST_OP_AUTH_GEN,
- .pmd_mask = BLOCKCIPHER_TEST_TARGET_PMD_OPENSSL
- },
- {
- .test_descr = "HMAC-MD5 Digest Verify",
- .test_data = &hmac_md5_test_vector,
- .op_mask = BLOCKCIPHER_TEST_OP_AUTH_VERIFY,
- .pmd_mask = BLOCKCIPHER_TEST_TARGET_PMD_OPENSSL
- },
- {
- .test_descr = "SHA1 Digest",
- .test_data = &sha1_test_vector,
- .op_mask = BLOCKCIPHER_TEST_OP_AUTH_GEN,
- .pmd_mask = BLOCKCIPHER_TEST_TARGET_PMD_OPENSSL
- },
- {
- .test_descr = "SHA1 Digest Verify",
- .test_data = &sha1_test_vector,
- .op_mask = BLOCKCIPHER_TEST_OP_AUTH_VERIFY,
- .pmd_mask = BLOCKCIPHER_TEST_TARGET_PMD_OPENSSL
- },
- {
- .test_descr = "HMAC-SHA1 Digest",
- .test_data = &hmac_sha1_test_vector,
- .op_mask = BLOCKCIPHER_TEST_OP_AUTH_GEN,
- .pmd_mask = BLOCKCIPHER_TEST_TARGET_PMD_OPENSSL
- },
- {
- .test_descr = "HMAC-SHA1 Digest Verify",
- .test_data = &hmac_sha1_test_vector,
- .op_mask = BLOCKCIPHER_TEST_OP_AUTH_VERIFY,
- .pmd_mask = BLOCKCIPHER_TEST_TARGET_PMD_OPENSSL
- },
- {
- .test_descr = "SHA224 Digest",
- .test_data = &sha224_test_vector,
- .op_mask = BLOCKCIPHER_TEST_OP_AUTH_GEN,
- .pmd_mask = BLOCKCIPHER_TEST_TARGET_PMD_OPENSSL
- },
- {
- .test_descr = "SHA224 Digest Verify",
- .test_data = &sha224_test_vector,
- .op_mask = BLOCKCIPHER_TEST_OP_AUTH_VERIFY,
- .pmd_mask = BLOCKCIPHER_TEST_TARGET_PMD_OPENSSL
- },
- {
- .test_descr = "HMAC-SHA224 Digest",
- .test_data = &hmac_sha224_test_vector,
- .op_mask = BLOCKCIPHER_TEST_OP_AUTH_GEN,
- .pmd_mask = BLOCKCIPHER_TEST_TARGET_PMD_OPENSSL
- },
- {
- .test_descr = "HMAC-SHA224 Digest Verify",
- .test_data = &hmac_sha224_test_vector,
- .op_mask = BLOCKCIPHER_TEST_OP_AUTH_VERIFY,
- .pmd_mask = BLOCKCIPHER_TEST_TARGET_PMD_OPENSSL
- },
- {
- .test_descr = "SHA256 Digest",
- .test_data = &sha256_test_vector,
- .op_mask = BLOCKCIPHER_TEST_OP_AUTH_GEN,
- .pmd_mask = BLOCKCIPHER_TEST_TARGET_PMD_OPENSSL
- },
- {
- .test_descr = "SHA256 Digest Verify",
- .test_data = &sha256_test_vector,
- .op_mask = BLOCKCIPHER_TEST_OP_AUTH_VERIFY,
- .pmd_mask = BLOCKCIPHER_TEST_TARGET_PMD_OPENSSL
- },
- {
- .test_descr = "HMAC-SHA256 Digest",
- .test_data = &hmac_sha256_test_vector,
- .op_mask = BLOCKCIPHER_TEST_OP_AUTH_GEN,
- .pmd_mask = BLOCKCIPHER_TEST_TARGET_PMD_OPENSSL
- },
- {
- .test_descr = "HMAC-SHA256 Digest Verify",
- .test_data = &hmac_sha256_test_vector,
- .op_mask = BLOCKCIPHER_TEST_OP_AUTH_VERIFY,
- .pmd_mask = BLOCKCIPHER_TEST_TARGET_PMD_OPENSSL
- },
- {
- .test_descr = "SHA384 Digest",
- .test_data = &sha384_test_vector,
- .op_mask = BLOCKCIPHER_TEST_OP_AUTH_GEN,
- .pmd_mask = BLOCKCIPHER_TEST_TARGET_PMD_OPENSSL
- },
- {
- .test_descr = "SHA384 Digest Verify",
- .test_data = &sha384_test_vector,
- .op_mask = BLOCKCIPHER_TEST_OP_AUTH_VERIFY,
- .pmd_mask = BLOCKCIPHER_TEST_TARGET_PMD_OPENSSL
- },
- {
- .test_descr = "HMAC-SHA384 Digest",
- .test_data = &hmac_sha384_test_vector,
- .op_mask = BLOCKCIPHER_TEST_OP_AUTH_GEN,
- .pmd_mask = BLOCKCIPHER_TEST_TARGET_PMD_OPENSSL
- },
- {
- .test_descr = "HMAC-SHA384 Digest Verify",
- .test_data = &hmac_sha384_test_vector,
- .op_mask = BLOCKCIPHER_TEST_OP_AUTH_VERIFY,
- .pmd_mask = BLOCKCIPHER_TEST_TARGET_PMD_OPENSSL
- },
- {
- .test_descr = "SHA512 Digest",
- .test_data = &sha512_test_vector,
- .op_mask = BLOCKCIPHER_TEST_OP_AUTH_GEN,
- .pmd_mask = BLOCKCIPHER_TEST_TARGET_PMD_OPENSSL
- },
- {
- .test_descr = "SHA512 Digest Verify",
- .test_data = &sha512_test_vector,
- .op_mask = BLOCKCIPHER_TEST_OP_AUTH_VERIFY,
- .pmd_mask = BLOCKCIPHER_TEST_TARGET_PMD_OPENSSL
- },
- {
- .test_descr = "HMAC-SHA512 Digest",
- .test_data = &hmac_sha512_test_vector,
- .op_mask = BLOCKCIPHER_TEST_OP_AUTH_GEN,
- .pmd_mask = BLOCKCIPHER_TEST_TARGET_PMD_OPENSSL
- },
- {
- .test_descr = "HMAC-SHA512 Digest Verify",
- .test_data = &hmac_sha512_test_vector,
- .op_mask = BLOCKCIPHER_TEST_OP_AUTH_VERIFY,
- .pmd_mask = BLOCKCIPHER_TEST_TARGET_PMD_OPENSSL
- },
-};
-
-#endif /* TEST_CRYPTODEV_HASH_TEST_VECTORS_H_ */
diff --git a/app/test/test_cryptodev_hmac_test_vectors.h b/app/test/test_cryptodev_hmac_test_vectors.h
deleted file mode 100644
index d30215fd..00000000
--- a/app/test/test_cryptodev_hmac_test_vectors.h
+++ /dev/null
@@ -1,121 +0,0 @@
-/*-
- * BSD LICENSE
- *
- * Copyright(c) 2016 Intel Corporation. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * * Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * * Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in
- * the documentation and/or other materials provided with the
- * distribution.
- * * Neither the name of Intel Corporation nor the names of its
- * contributors may be used to endorse or promote products derived
- * from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
- * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
- * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#ifndef APP_TEST_TEST_CRYPTODEV_HMAC_TEST_VECTORS_H_
-#define APP_TEST_TEST_CRYPTODEV_HMAC_TEST_VECTORS_H_
-
-/* *** MD5 test vectors *** */
-
-#define MD5_DIGEST_LEN 16
-
-struct HMAC_MD5_vector {
- struct {
- uint8_t data[64];
- uint16_t len;
- } key;
-
- struct {
- uint8_t data[1024];
- uint16_t len;
- } plaintext;
-
- struct {
- uint8_t data[16];
- uint16_t len;
- } auth_tag;
-};
-
-static const struct
-HMAC_MD5_vector HMAC_MD5_test_case_1 = {
- .key = {
- .data = {
- 0xF8, 0x2A, 0xC7, 0x54, 0xDB, 0x96, 0x18, 0xAA,
- 0xC3, 0xA1, 0x53, 0xF6, 0x1F, 0x17, 0x60, 0xBD
- },
- .len = 16
- },
- .plaintext = {
- .data = {
- 0x87, 0x4D, 0x61, 0x91, 0xB6, 0x20, 0xE3, 0x26,
- 0x1B, 0xEF, 0x68, 0x64, 0x99, 0x0D, 0xB6, 0xCE,
- 0x98, 0x06, 0xF6, 0x6B, 0x79, 0x70, 0xFD, 0xFF,
- 0x86, 0x17, 0x18, 0x7B, 0xB9, 0xFF, 0xFD, 0xFF,
- 0x5A, 0xE4, 0xDF, 0x3E, 0xDB, 0xD5, 0xD3, 0x5E,
- 0x5B, 0x4F, 0x09, 0x02, 0x0D, 0xB0, 0x3E, 0xAB,
- 0x1E, 0x03, 0x1D, 0xDA, 0x2F, 0xBE, 0x03, 0xD1,
- 0x79, 0x21, 0x70, 0xA0, 0xF3, 0x00, 0x9C, 0xEE
- },
- .len = 64
- },
- .auth_tag = {
- .data = {
- 0x67, 0x83, 0xE1, 0x0F, 0xB0, 0xBF, 0x33, 0x49,
- 0x22, 0x04, 0x89, 0xDF, 0x86, 0xD0, 0x5F, 0x0C
- },
- .len = MD5_DIGEST_LEN
- }
-};
-
-static const struct
-HMAC_MD5_vector HMAC_MD5_test_case_2 = {
- .key = {
- .data = {
- 0xF8, 0x2A, 0xC7, 0x54, 0xDB, 0x96, 0x18, 0xAA,
- 0xC3, 0xA1, 0x53, 0xF6, 0x1F, 0x17, 0x60, 0xBD,
- 0xF8, 0x2A, 0xC7, 0x54, 0xDB, 0x96, 0x18, 0xAA,
- 0xC3, 0xA1, 0x53, 0xF6, 0x1F, 0x17, 0x60, 0xBD
- },
- .len = 32
- },
- .plaintext = {
- .data = {
- 0x87, 0x4D, 0x61, 0x91, 0xB6, 0x20, 0xE3, 0x26,
- 0x1B, 0xEF, 0x68, 0x64, 0x99, 0x0D, 0xB6, 0xCE,
- 0x98, 0x06, 0xF6, 0x6B, 0x79, 0x70, 0xFD, 0xFF,
- 0x86, 0x17, 0x18, 0x7B, 0xB9, 0xFF, 0xFD, 0xFF,
- 0x5A, 0xE4, 0xDF, 0x3E, 0xDB, 0xD5, 0xD3, 0x5E,
- 0x5B, 0x4F, 0x09, 0x02, 0x0D, 0xB0, 0x3E, 0xAB,
- 0x1E, 0x03, 0x1D, 0xDA, 0x2F, 0xBE, 0x03, 0xD1,
- 0x79, 0x21, 0x70, 0xA0, 0xF3, 0x00, 0x9C, 0xEE
- },
- .len = 64
- },
- .auth_tag = {
- .data = {
- 0x39, 0x24, 0x70, 0x7A, 0x30, 0x38, 0x1E, 0x2B,
- 0x9F, 0x6B, 0xD9, 0x3C, 0xAD, 0xC2, 0x73, 0x52
- },
- .len = MD5_DIGEST_LEN
- }
-};
-
-#endif /* APP_TEST_TEST_CRYPTODEV_HMAC_TEST_VECTORS_H_ */
diff --git a/app/test/test_cryptodev_kasumi_hash_test_vectors.h b/app/test/test_cryptodev_kasumi_hash_test_vectors.h
deleted file mode 100644
index 69742faa..00000000
--- a/app/test/test_cryptodev_kasumi_hash_test_vectors.h
+++ /dev/null
@@ -1,337 +0,0 @@
-/*-
- * BSD LICENSE
- *
- * Copyright(c) 2016 Intel Corporation. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * * Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * * Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in
- * the documentation and/or other materials provided with the
- * distribution.
- * * Neither the name of Intel Corporation nor the names of its
- * contributors may be used to endorse or promote products derived
- * from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
- * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
- * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#ifndef TEST_CRYPTODEV_KASUMI_HASH_TEST_VECTORS_H_
-#define TEST_CRYPTODEV_KASUMI_HASH_TEST_VECTORS_H_
-
-struct kasumi_hash_test_data {
- struct {
- uint8_t data[16];
- unsigned len;
- } key;
-
- /* Includes: COUNT (4 bytes) and FRESH (4 bytes) */
- struct {
- uint8_t data[8];
- unsigned len;
- } aad;
-
- /* Includes message and DIRECTION (1 bit), plus 1 0*,
- * with enough 0s, so total length is multiple of 64 bits */
- struct {
- uint8_t data[2056];
- unsigned len; /* length must be in Bits */
- } plaintext;
-
- /* Actual length of data to be hashed */
- struct {
- unsigned len;
- } validAuthLenInBits;
-
- struct {
- unsigned len;
- } validAuthOffsetLenInBits;
-
- struct {
- uint8_t data[64];
- unsigned len;
- } digest;
-};
-
-struct kasumi_hash_test_data kasumi_hash_test_case_1 = {
- .key = {
- .data = {
- 0x2B, 0xD6, 0x45, 0x9F, 0x82, 0xC5, 0xB3, 0x00,
- 0x95, 0x2C, 0x49, 0x10, 0x48, 0x81, 0xFF, 0x48
- },
- .len = 16
- },
- .aad = {
- .data = {
- 0x38, 0xA6, 0xF0, 0x56, 0x05, 0xD2, 0xEC, 0x49,
- },
- .len = 8
- },
- .plaintext = {
- .data = {
- 0x6B, 0x22, 0x77, 0x37, 0x29, 0x6F, 0x39, 0x3C,
- 0x80, 0x79, 0x35, 0x3E, 0xDC, 0x87, 0xE2, 0xE8,
- 0x05, 0xD2, 0xEC, 0x49, 0xA4, 0xF2, 0xD8, 0xE2
- },
- .len = 192
- },
- .validAuthLenInBits = {
- .len = 189
- },
- .validAuthOffsetLenInBits = {
- .len = 64
- },
- .digest = {
- .data = {0xF6, 0x3B, 0xD7, 0x2C},
- .len = 4
- }
-};
-
-struct kasumi_hash_test_data kasumi_hash_test_case_2 = {
- .key = {
- .data = {
- 0xD4, 0x2F, 0x68, 0x24, 0x28, 0x20, 0x1C, 0xAF,
- 0xCD, 0x9F, 0x97, 0x94, 0x5E, 0x6D, 0xE7, 0xB7
- },
- .len = 16
- },
- .aad = {
- .data = {
- 0x3E, 0xDC, 0x87, 0xE2, 0xA4, 0xF2, 0xD8, 0xE2,
- },
- .len = 8
- },
- .plaintext = {
- .data = {
- 0xB5, 0x92, 0x43, 0x84, 0x32, 0x8A, 0x4A, 0xE0,
- 0x0B, 0x73, 0x71, 0x09, 0xF8, 0xB6, 0xC8, 0xDD,
- 0x2B, 0x4D, 0xB6, 0x3D, 0xD5, 0x33, 0x98, 0x1C,
- 0xEB, 0x19, 0xAA, 0xD5, 0x2A, 0x5B, 0x2B, 0xC3
- },
- .len = 256
- },
- .validAuthLenInBits = {
- .len = 254
- },
- .validAuthOffsetLenInBits = {
- .len = 64
- },
- .digest = {
- .data = {0xA9, 0xDA, 0xF1, 0xFF},
- .len = 4
- }
-};
-
-struct kasumi_hash_test_data kasumi_hash_test_case_3 = {
- .key = {
- .data = {
- 0xFD, 0xB9, 0xCF, 0xDF, 0x28, 0x93, 0x6C, 0xC4,
- 0x83, 0xA3, 0x18, 0x69, 0xD8, 0x1B, 0x8F, 0xAB
- },
- .len = 16
- },
- .aad = {
- .data = {
- 0x36, 0xAF, 0x61, 0x44, 0x98, 0x38, 0xF0, 0x3A,
- },
- .len = 8
- },
- .plaintext = {
- .data = {
- 0x59, 0x32, 0xBC, 0x0A, 0xCE, 0x2B, 0x0A, 0xBA,
- 0x33, 0xD8, 0xAC, 0x18, 0x8A, 0xC5, 0x4F, 0x34,
- 0x6F, 0xAD, 0x10, 0xBF, 0x9D, 0xEE, 0x29, 0x20,
- 0xB4, 0x3B, 0xD0, 0xC5, 0x3A, 0x91, 0x5C, 0xB7,
- 0xDF, 0x6C, 0xAA, 0x72, 0x05, 0x3A, 0xBF, 0xF3,
- 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
- },
- .len = 384
- },
- .validAuthLenInBits = {
- .len = 319
- },
- .validAuthOffsetLenInBits = {
- .len = 64
- },
- .digest = {
- .data = {0x15, 0x37, 0xD3, 0x16},
- .len = 4
- }
-};
-
-struct kasumi_hash_test_data kasumi_hash_test_case_4 = {
- .key = {
- .data = {
- 0xC7, 0x36, 0xC6, 0xAA, 0xB2, 0x2B, 0xFF, 0xF9,
- 0x1E, 0x26, 0x98, 0xD2, 0xE2, 0x2A, 0xD5, 0x7E
- },
- .len = 16
- },
- .aad = {
- .data = {
- 0x14, 0x79, 0x3E, 0x41, 0x03, 0x97, 0xE8, 0xFD
- },
- .len = 8
- },
- .plaintext = {
- .data = {
- 0xD0, 0xA7, 0xD4, 0x63, 0xDF, 0x9F, 0xB2, 0xB2,
- 0x78, 0x83, 0x3F, 0xA0, 0x2E, 0x23, 0x5A, 0xA1,
- 0x72, 0xBD, 0x97, 0x0C, 0x14, 0x73, 0xE1, 0x29,
- 0x07, 0xFB, 0x64, 0x8B, 0x65, 0x99, 0xAA, 0xA0,
- 0xB2, 0x4A, 0x03, 0x86, 0x65, 0x42, 0x2B, 0x20,
- 0xA4, 0x99, 0x27, 0x6A, 0x50, 0x42, 0x70, 0x09,
- 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
- },
- .len = 448
- },
- .validAuthLenInBits = {
- .len = 384
- },
- .validAuthOffsetLenInBits = {
- .len = 64
- },
- .digest = {
- .data = {0xDD, 0x7D, 0xFA, 0xDD },
- .len = 4
- }
-};
-
-struct kasumi_hash_test_data kasumi_hash_test_case_5 = {
- .key = {
- .data = {
- 0xF4, 0xEB, 0xEC, 0x69, 0xE7, 0x3E, 0xAF, 0x2E,
- 0xB2, 0xCF, 0x6A, 0xF4, 0xB3, 0x12, 0x0F, 0xFD
- },
- .len = 16
- },
- .aad = {
- .data = {
- 0x29, 0x6F, 0x39, 0x3C, 0x6B, 0x22, 0x77, 0x37,
- },
- .len = 8
- },
- .plaintext = {
- .data = {
- 0x10, 0xBF, 0xFF, 0x83, 0x9E, 0x0C, 0x71, 0x65,
- 0x8D, 0xBB, 0x2D, 0x17, 0x07, 0xE1, 0x45, 0x72,
- 0x4F, 0x41, 0xC1, 0x6F, 0x48, 0xBF, 0x40, 0x3C,
- 0x3B, 0x18, 0xE3, 0x8F, 0xD5, 0xD1, 0x66, 0x3B,
- 0x6F, 0x6D, 0x90, 0x01, 0x93, 0xE3, 0xCE, 0xA8,
- 0xBB, 0x4F, 0x1B, 0x4F, 0x5B, 0xE8, 0x22, 0x03,
- 0x22, 0x32, 0xA7, 0x8D, 0x7D, 0x75, 0x23, 0x8D,
- 0x5E, 0x6D, 0xAE, 0xCD, 0x3B, 0x43, 0x22, 0xCF,
- 0x59, 0xBC, 0x7E, 0xA8, 0x4A, 0xB1, 0x88, 0x11,
- 0xB5, 0xBF, 0xB7, 0xBC, 0x55, 0x3F, 0x4F, 0xE4,
- 0x44, 0x78, 0xCE, 0x28, 0x7A, 0x14, 0x87, 0x99,
- 0x90, 0xD1, 0x8D, 0x12, 0xCA, 0x79, 0xD2, 0xC8,
- 0x55, 0x14, 0x90, 0x21, 0xCD, 0x5C, 0xE8, 0xCA,
- 0x03, 0x71, 0xCA, 0x04, 0xFC, 0xCE, 0x14, 0x3E,
- 0x3D, 0x7C, 0xFE, 0xE9, 0x45, 0x85, 0xB5, 0x88,
- 0x5C, 0xAC, 0x46, 0x06, 0x8B, 0xC0, 0x00, 0x00
- },
- .len = 1024
- },
- .validAuthLenInBits = {
- .len = 1000
- },
- .validAuthOffsetLenInBits = {
- .len = 64
- },
- .digest = {
- .data = {0xC3, 0x83, 0x83, 0x9D},
- .len = 4
- }
-};
-
-struct kasumi_hash_test_data kasumi_hash_test_case_6 = {
- .key = {
- .data = {
- 0x83, 0xFD, 0x23, 0xA2, 0x44, 0xA7, 0x4C, 0xF3,
- 0x58, 0xDA, 0x30, 0x19, 0xF1, 0x72, 0x26, 0x35
- },
- .len = 16
- },
- .aad = {
- .data = {
- 0x36, 0xAF, 0x61, 0x44, 0x4F, 0x30, 0x2A, 0xD2
- },
- .len = 8
- },
- .plaintext = {
- .data = {
- 0x35, 0xC6, 0x87, 0x16, 0x63, 0x3C, 0x66, 0xFB,
- 0x75, 0x0C, 0x26, 0x68, 0x65, 0xD5, 0x3C, 0x11,
- 0xEA, 0x05, 0xB1, 0xE9, 0xFA, 0x49, 0xC8, 0x39,
- 0x8D, 0x48, 0xE1, 0xEF, 0xA5, 0x90, 0x9D, 0x39,
- 0x47, 0x90, 0x28, 0x37, 0xF5, 0xAE, 0x96, 0xD5,
- 0xA0, 0x5B, 0xC8, 0xD6, 0x1C, 0xA8, 0xDB, 0xEF,
- 0x1B, 0x13, 0xA4, 0xB4, 0xAB, 0xFE, 0x4F, 0xB1,
- 0x00, 0x60, 0x45, 0xB6, 0x74, 0xBB, 0x54, 0x72,
- 0x93, 0x04, 0xC3, 0x82, 0xBE, 0x53, 0xA5, 0xAF,
- 0x05, 0x55, 0x61, 0x76, 0xF6, 0xEA, 0xA2, 0xEF,
- 0x1D, 0x05, 0xE4, 0xB0, 0x83, 0x18, 0x1E, 0xE6,
- 0x74, 0xCD, 0xA5, 0xA4, 0x85, 0xF7, 0x4D, 0x7A,
- 0xC0
- },
- .len = 776
- },
- .validAuthLenInBits = {
- .len = 768
- },
- .validAuthOffsetLenInBits = {
- .len = 64
- },
- .digest = {
- .data = {0x95, 0xAE, 0x41, 0xBA},
- .len = 4
- }
-};
-
-struct kasumi_hash_test_data kasumi_hash_test_case_7 = {
- .key = {
- .data = {
- 0x5A, 0xCB, 0x1D, 0x64, 0x4C, 0x0D, 0x51, 0x20,
- 0x4E, 0xA5, 0xF1, 0x45, 0x10, 0x10, 0xD8, 0x52
- },
- .len = 16
- },
- .aad = {
- .data = {
- 0x38, 0xA6, 0xF0, 0x56, 0x05, 0xD2, 0xEC, 0x49,
- },
- .len = 8
- },
- .plaintext = {
- .data = {
- 0xAD, 0x9C, 0x44, 0x1F, 0x89, 0x0B, 0x38, 0xC4,
- 0x57, 0xA4, 0x9D, 0x42, 0x14, 0x07, 0xE8, 0xC0
- },
- .len = 128
- },
- .validAuthLenInBits = {
- .len = 120
- },
- .validAuthOffsetLenInBits = {
- .len = 64
- },
- .digest = {
- .data = {0x87, 0x5F, 0xE4, 0x89},
- .len = 4
- }
-};
-#endif /* TEST_CRYPTODEV_KASUMI_HASH_TEST_VECTORS_H_ */
diff --git a/app/test/test_cryptodev_kasumi_test_vectors.h b/app/test/test_cryptodev_kasumi_test_vectors.h
deleted file mode 100644
index ef1dc6f3..00000000
--- a/app/test/test_cryptodev_kasumi_test_vectors.h
+++ /dev/null
@@ -1,407 +0,0 @@
-/*-
- * BSD LICENSE
- *
- * Copyright(c) 2016 Intel Corporation. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * * Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * * Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in
- * the documentation and/or other materials provided with the
- * distribution.
- * * Neither the name of Intel Corporation nor the names of its
- * contributors may be used to endorse or promote products derived
- * from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
- * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
- * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#ifndef TEST_CRYPTODEV_KASUMI_TEST_VECTORS_H_
-#define TEST_CRYPTODEV_KASUMI_TEST_VECTORS_H_
-
-struct kasumi_test_data {
- struct {
- uint8_t data[64];
- unsigned len;
- } key;
-
- struct {
- uint8_t data[64] __rte_aligned(16);
- unsigned len;
- } iv;
-
- /* Includes: COUNT (4 bytes) and FRESH (4 bytes) */
- struct {
- uint8_t data[8];
- unsigned len;
- } aad;
-
- struct {
- uint8_t data[1024]; /* Data may include direction bit */
- unsigned len; /* length must be in Bits */
- } plaintext;
-
- struct {
- unsigned len;
- } validDataLenInBits;
-
- struct {
- uint8_t data[1024];
- unsigned len; /* length must be in Bits */
- } ciphertext;
-
- struct {
- unsigned len;
- } validCipherLenInBits;
-
- struct {
- unsigned len;
- } validCipherOffsetLenInBits;
-
- /* Actual length of data to be hashed */
- struct {
- unsigned len;
- } validAuthLenInBits;
-
- struct {
- unsigned len;
- } validAuthOffsetLenInBits;
-
- struct {
- uint8_t data[64];
- unsigned len;
- } digest;
-
-};
-
-struct kasumi_test_data kasumi_test_case_1 = {
- .key = {
- .data = {
- 0x2B, 0xD6, 0x45, 0x9F, 0x82, 0xC5, 0xB3, 0x00,
- 0x95, 0x2C, 0x49, 0x10, 0x48, 0x81, 0xFF, 0x48
- },
- .len = 16
- },
- .iv = {
- .data = {
- 0x72, 0xA4, 0xF2, 0x0F, 0x64, 0x00, 0x00, 0x00
- },
- .len = 8
- },
- .plaintext = {
- .data = {
- 0x7E, 0xC6, 0x12, 0x72, 0x74, 0x3B, 0xF1, 0x61,
- 0x47, 0x26, 0x44, 0x6A, 0x6C, 0x38, 0xCE, 0xD1,
- 0x66, 0xF6, 0xCA, 0x76, 0xEB, 0x54, 0x30, 0x04,
- 0x42, 0x86, 0x34, 0x6C, 0xEF, 0x13, 0x0F, 0x92,
- 0x92, 0x2B, 0x03, 0x45, 0x0D, 0x3A, 0x99, 0x75,
- 0xE5, 0xBD, 0x2E, 0xA0, 0xEB, 0x55, 0xAD, 0x8E,
- 0x1B, 0x19, 0x9E, 0x3E, 0xC4, 0x31, 0x60, 0x20,
- 0xE9, 0xA1, 0xB2, 0x85, 0xE7, 0x62, 0x79, 0x53,
- 0x59, 0xB7, 0xBD, 0xFD, 0x39, 0xBE, 0xF4, 0xB2,
- 0x48, 0x45, 0x83, 0xD5, 0xAF, 0xE0, 0x82, 0xAE,
- 0xE6, 0x38, 0xBF, 0x5F, 0xD5, 0xA6, 0x06, 0x19,
- 0x39, 0x01, 0xA0, 0x8F, 0x4A, 0xB4, 0x1A, 0xAB,
- 0x9B, 0x13, 0x48, 0x80
- },
- .len = 800
- },
- .ciphertext = {
- .data = {
- 0xD1, 0xE2, 0xDE, 0x70, 0xEE, 0xF8, 0x6C, 0x69,
- 0x64, 0xFB, 0x54, 0x2B, 0xC2, 0xD4, 0x60, 0xAA,
- 0xBF, 0xAA, 0x10, 0xA4, 0xA0, 0x93, 0x26, 0x2B,
- 0x7D, 0x19, 0x9E, 0x70, 0x6F, 0xC2, 0xD4, 0x89,
- 0x15, 0x53, 0x29, 0x69, 0x10, 0xF3, 0xA9, 0x73,
- 0x01, 0x26, 0x82, 0xE4, 0x1C, 0x4E, 0x2B, 0x02,
- 0xBE, 0x20, 0x17, 0xB7, 0x25, 0x3B, 0xBF, 0x93,
- 0x09, 0xDE, 0x58, 0x19, 0xCB, 0x42, 0xE8, 0x19,
- 0x56, 0xF4, 0xC9, 0x9B, 0xC9, 0x76, 0x5C, 0xAF,
- 0x53, 0xB1, 0xD0, 0xBB, 0x82, 0x79, 0x82, 0x6A,
- 0xDB, 0xBC, 0x55, 0x22, 0xE9, 0x15, 0xC1, 0x20,
- 0xA6, 0x18, 0xA5, 0xA7, 0xF5, 0xE8, 0x97, 0x08,
- 0x93, 0x39, 0x65, 0x0F
- },
- .len = 800
- },
- .validCipherLenInBits = {
- .len = 798
- },
- .validCipherOffsetLenInBits = {
- .len = 64
- },
-};
-
-struct kasumi_test_data kasumi_test_case_2 = {
- .key = {
- .data = {
- 0xEF, 0xA8, 0xB2, 0x22, 0x9E, 0x72, 0x0C, 0x2A,
- 0x7C, 0x36, 0xEA, 0x55, 0xE9, 0x60, 0x56, 0x95
- },
- .len = 16
- },
- .iv = {
- .data = {
- 0xE2, 0x8B, 0xCF, 0x7B, 0xC0, 0x00, 0x00, 0x00
- },
- .len = 8
- },
- .plaintext = {
- .data = {
- 0x10, 0x11, 0x12, 0x31, 0xE0, 0x60, 0x25, 0x3A,
- 0x43, 0xFD, 0x3F, 0x57, 0xE3, 0x76, 0x07, 0xAB,
- 0x28, 0x27, 0xB5, 0x99, 0xB6, 0xB1, 0xBB, 0xDA,
- 0x37, 0xA8, 0xAB, 0xCC, 0x5A, 0x8C, 0x55, 0x0D,
- 0x1B, 0xFB, 0x2F, 0x49, 0x46, 0x24, 0xFB, 0x50,
- 0x36, 0x7F, 0xA3, 0x6C, 0xE3, 0xBC, 0x68, 0xF1,
- 0x1C, 0xF9, 0x3B, 0x15, 0x10, 0x37, 0x6B, 0x02,
- 0x13, 0x0F, 0x81, 0x2A, 0x9F, 0xA1, 0x69, 0xD8
- },
- .len = 512
- },
- .ciphertext = {
- .data = {
- 0x3D, 0xEA, 0xCC, 0x7C, 0x15, 0x82, 0x1C, 0xAA,
- 0x89, 0xEE, 0xCA, 0xDE, 0x9B, 0x5B, 0xD3, 0x61,
- 0x4B, 0xD0, 0xC8, 0x41, 0x9D, 0x71, 0x03, 0x85,
- 0xDD, 0xBE, 0x58, 0x49, 0xEF, 0x1B, 0xAC, 0x5A,
- 0xE8, 0xB1, 0x4A, 0x5B, 0x0A, 0x67, 0x41, 0x52,
- 0x1E, 0xB4, 0xE0, 0x0B, 0xB9, 0xEC, 0xF3, 0xE9,
- 0xF7, 0xCC, 0xB9, 0xCA, 0xE7, 0x41, 0x52, 0xD7,
- 0xF4, 0xE2, 0xA0, 0x34, 0xB6, 0xEA, 0x00, 0xEC
- },
- .len = 512
- },
- .validCipherLenInBits = {
- .len = 510
- },
- .validCipherOffsetLenInBits = {
- .len = 64
- }
-};
-
-struct kasumi_test_data kasumi_test_case_3 = {
- .key = {
- .data = {
- 0x5A, 0xCB, 0x1D, 0x64, 0x4C, 0x0D, 0x51, 0x20,
- 0x4E, 0xA5, 0xF1, 0x45, 0x10, 0x10, 0xD8, 0x52
- },
- .len = 16
- },
- .iv = {
- .data = {
- 0xFA, 0x55, 0x6B, 0x26, 0x1C, 0x00, 0x00, 0x00
- },
- .len = 8
- },
- .aad = {
- .data = {
- 0x38, 0xA6, 0xF0, 0x56, 0x05, 0xD2, 0xEC, 0x49
- },
- .len = 8
- },
- .plaintext = {
- .data = {
- 0xAD, 0x9C, 0x44, 0x1F, 0x89, 0x0B, 0x38, 0xC4,
- 0x57, 0xA4, 0x9D, 0x42, 0x14, 0x07, 0xE8, 0xC0
- },
- .len = 128
- },
- .ciphertext = {
- .data = {
- 0x9B, 0xC9, 0x2C, 0xA8, 0x03, 0xC6, 0x7B, 0x28,
- 0xA1, 0x1A, 0x4B, 0xEE, 0x5A, 0x0C, 0x25
- },
- .len = 120
- },
- .validDataLenInBits = {
- .len = 128
- },
- .validCipherLenInBits = {
- .len = 120
- },
- .validCipherOffsetLenInBits = {
- .len = 64
- },
- .validAuthLenInBits = {
- .len = 120
- },
- .validAuthOffsetLenInBits = {
- .len = 64
- },
- .digest = {
- .data = {0x87, 0x5F, 0xE4, 0x89},
- .len = 4
- }
-};
-
-struct kasumi_test_data kasumi_test_case_4 = {
- .key = {
- .data = {
- 0xD3, 0xC5, 0xD5, 0x92, 0x32, 0x7F, 0xB1, 0x1C,
- 0x40, 0x35, 0xC6, 0x68, 0x0A, 0xF8, 0xC6, 0xD1
- },
- .len = 16
- },
- .iv = {
- .data = {
- 0x39, 0x8A, 0x59, 0xB4, 0x2C, 0x00, 0x00, 0x00,
- },
- .len = 8
- },
- .plaintext = {
- .data = {
- 0x98, 0x1B, 0xA6, 0x82, 0x4C, 0x1B, 0xFB, 0x1A,
- 0xB4, 0x85, 0x47, 0x20, 0x29, 0xB7, 0x1D, 0x80,
- 0x8C, 0xE3, 0x3E, 0x2C, 0xC3, 0xC0, 0xB5, 0xFC,
- 0x1F, 0x3D, 0xE8, 0xA6, 0xDC, 0x66, 0xB1, 0xF0
- },
- .len = 256
- },
- .ciphertext = {
- .data = {
- 0x5B, 0xB9, 0x43, 0x1B, 0xB1, 0xE9, 0x8B, 0xD1,
- 0x1B, 0x93, 0xDB, 0x7C, 0x3D, 0x45, 0x13, 0x65,
- 0x59, 0xBB, 0x86, 0xA2, 0x95, 0xAA, 0x20, 0x4E,
- 0xCB, 0xEB, 0xF6, 0xF7, 0xA5, 0x10, 0x15, 0x10
- },
- .len = 256
- },
- .validCipherLenInBits = {
- .len = 253
- },
- .validCipherOffsetLenInBits = {
- .len = 64
- }
-};
-
-struct kasumi_test_data kasumi_test_case_5 = {
- .key = {
- .data = {
- 0x60, 0x90, 0xEA, 0xE0, 0x4C, 0x83, 0x70, 0x6E,
- 0xEC, 0xBF, 0x65, 0x2B, 0xE8, 0xE3, 0x65, 0x66
- },
- .len = 16
- },
- .iv = {
- .data = {
- 0x72, 0xA4, 0xF2, 0x0F, 0x48, 0x00, 0x00, 0x00
- },
- .len = 8
- },
- .plaintext = {
- .data = {
- 0x40, 0x98, 0x1B, 0xA6, 0x82, 0x4C, 0x1B, 0xFB,
- 0x42, 0x86, 0xB2, 0x99, 0x78, 0x3D, 0xAF, 0x44,
- 0x2C, 0x09, 0x9F, 0x7A, 0xB0, 0xF5, 0x8D, 0x5C,
- 0x8E, 0x46, 0xB1, 0x04, 0xF0, 0x8F, 0x01, 0xB4,
- 0x1A, 0xB4, 0x85, 0x47, 0x20, 0x29, 0xB7, 0x1D,
- 0x36, 0xBD, 0x1A, 0x3D, 0x90, 0xDC, 0x3A, 0x41,
- 0xB4, 0x6D, 0x51, 0x67, 0x2A, 0xC4, 0xC9, 0x66,
- 0x3A, 0x2B, 0xE0, 0x63, 0xDA, 0x4B, 0xC8, 0xD2,
- 0x80, 0x8C, 0xE3, 0x3E, 0x2C, 0xCC, 0xBF, 0xC6,
- 0x34, 0xE1, 0xB2, 0x59, 0x06, 0x08, 0x76, 0xA0,
- 0xFB, 0xB5, 0xA4, 0x37, 0xEB, 0xCC, 0x8D, 0x31,
- 0xC1, 0x9E, 0x44, 0x54, 0x31, 0x87, 0x45, 0xE3,
- 0x98, 0x76, 0x45, 0x98, 0x7A, 0x98, 0x6F, 0x2C,
- 0xB0
- },
- .len = 840
- },
- .ciphertext = {
- .data = {
- 0xDD, 0xB3, 0x64, 0xDD, 0x2A, 0xAE, 0xC2, 0x4D,
- 0xFF, 0x29, 0x19, 0x57, 0xB7, 0x8B, 0xAD, 0x06,
- 0x3A, 0xC5, 0x79, 0xCD, 0x90, 0x41, 0xBA, 0xBE,
- 0x89, 0xFD, 0x19, 0x5C, 0x05, 0x78, 0xCB, 0x9F,
- 0xDE, 0x42, 0x17, 0x56, 0x61, 0x78, 0xD2, 0x02,
- 0x40, 0x20, 0x6D, 0x07, 0xCF, 0xA6, 0x19, 0xEC,
- 0x05, 0x9F, 0x63, 0x51, 0x44, 0x59, 0xFC, 0x10,
- 0xD4, 0x2D, 0xC9, 0x93, 0x4E, 0x56, 0xEB, 0xC0,
- 0xCB, 0xC6, 0x0D, 0x4D, 0x2D, 0xF1, 0x74, 0x77,
- 0x4C, 0xBD, 0xCD, 0x5D, 0xA4, 0xA3, 0x50, 0x31,
- 0x7A, 0x7F, 0x12, 0xE1, 0x94, 0x94, 0x71, 0xF8,
- 0xA2, 0x95, 0xF2, 0x72, 0xE6, 0x8F, 0xC0, 0x71,
- 0x59, 0xB0, 0x7D, 0x8E, 0x2D, 0x26, 0xE4, 0x59,
- 0x9E
- },
- .len = 840
- },
- .validCipherLenInBits = {
- .len = 837
- },
- .validCipherOffsetLenInBits = {
- .len = 64
- },
-};
-
-struct kasumi_test_data kasumi_test_case_6 = {
- .key = {
- .data = {
- 0x5A, 0xCB, 0x1D, 0x64, 0x4C, 0x0D, 0x51, 0x20,
- 0x4E, 0xA5, 0xF1, 0x45, 0x10, 0x10, 0xD8, 0x52
- },
- .len = 16
- },
- .iv = {
- .data = {
- 0xFA, 0x55, 0x6B, 0x26, 0x1C, 0x00, 0x00, 0x00
- },
- .len = 8
- },
- .aad = {
- .data = {
- 0x38, 0xA6, 0xF0, 0x56, 0x05, 0xD2, 0xEC, 0x49
- },
- .len = 8
- },
- .plaintext = {
- .data = {
- 0xAD, 0x9C, 0x44, 0x1F, 0x89, 0x0B, 0x38, 0xC4,
- 0x57, 0xA4, 0x9D, 0x42, 0x14, 0x07, 0xE8, 0xC0
- },
- .len = 128
- },
- .ciphertext = {
- .data = {
- 0x9B, 0xC9, 0x2C, 0xA8, 0x03, 0xC6, 0x7B, 0x28,
- 0xA1, 0x1A, 0x4B, 0xEE, 0x5A, 0x0C, 0x25
- },
- .len = 120
- },
- .validDataLenInBits = {
- .len = 128
- },
- .validCipherLenInBits = {
- .len = 120
- },
- .validCipherOffsetLenInBits = {
- .len = 64
- },
- .validAuthLenInBits = {
- .len = 120
- },
- .validAuthOffsetLenInBits = {
- .len = 64
- },
- .digest = {
- .data = {0x0F, 0xD2, 0xAA, 0xB5},
- .len = 4
- }
-};
-
-#endif /* TEST_CRYPTODEV_KASUMI_TEST_VECTORS_H_ */
diff --git a/app/test/test_cryptodev_perf.c b/app/test/test_cryptodev_perf.c
deleted file mode 100644
index 89a67952..00000000
--- a/app/test/test_cryptodev_perf.c
+++ /dev/null
@@ -1,4287 +0,0 @@
-/*-
- * BSD LICENSE
- *
- * Copyright(c) 2015-2016 Intel Corporation. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * * Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * * Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in
- * the documentation and/or other materials provided with the
- * distribution.
- * * Neither the name of Intel Corporation nor the names of its
- * contributors may be used to endorse or promote products derived
- * from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
- * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
- * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#include <rte_common.h>
-#include <rte_mbuf.h>
-#include <rte_malloc.h>
-#include <rte_memcpy.h>
-
-#include <rte_crypto.h>
-#include <rte_cryptodev.h>
-#include <rte_cycles.h>
-
-#include "test.h"
-#include "test_cryptodev.h"
-#include "test_cryptodev_gcm_test_vectors.h"
-
-
-#define PERF_NUM_OPS_INFLIGHT (128)
-#define DEFAULT_NUM_REQS_TO_SUBMIT (10000000)
-
-struct crypto_testsuite_params {
- struct rte_mempool *mbuf_mp;
- struct rte_mempool *op_mpool;
-
- uint16_t nb_queue_pairs;
-
- struct rte_cryptodev_config conf;
- struct rte_cryptodev_qp_conf qp_conf;
- uint8_t dev_id;
-};
-
-enum chain_mode {
- CIPHER_HASH,
- HASH_CIPHER,
- CIPHER_ONLY,
- HASH_ONLY
-};
-
-
-struct symmetric_op {
- const uint8_t *iv_data;
- uint32_t iv_len;
-
- const uint8_t *aad_data;
- uint32_t aad_len;
-
- const uint8_t *p_data;
- uint32_t p_len;
-
- const uint8_t *c_data;
- uint32_t c_len;
-
- const uint8_t *t_data;
- uint32_t t_len;
-
-};
-
-struct symmetric_session_attrs {
- enum rte_crypto_cipher_operation cipher;
- enum rte_crypto_auth_operation auth;
-
- enum rte_crypto_cipher_algorithm cipher_algorithm;
- const uint8_t *key_cipher_data;
- uint32_t key_cipher_len;
-
- enum rte_crypto_auth_algorithm auth_algorithm;
- const uint8_t *key_auth_data;
- uint32_t key_auth_len;
-
- uint32_t digest_len;
-};
-
-#define ALIGN_POW2_ROUNDUP(num, align) \
- (((num) + (align) - 1) & ~((align) - 1))
-
-/*
- * This struct is needed to avoid unnecessary allocation or checking
- * of allocation of crypto params with current alloc on the fly
- * implementation.
- */
-
-struct crypto_params {
- uint8_t *aad;
- uint8_t *iv;
- uint8_t *digest;
-};
-
-struct perf_test_params {
-
- unsigned total_operations;
- unsigned burst_size;
- unsigned buf_size;
-
- enum chain_mode chain;
-
- enum rte_crypto_cipher_algorithm cipher_algo;
- unsigned cipher_key_length;
- enum rte_crypto_auth_algorithm auth_algo;
-
- struct symmetric_session_attrs *session_attrs;
-
- struct symmetric_op *symmetric_op;
-};
-
-#define MAX_NUM_OF_OPS_PER_UT (128)
-
-struct crypto_unittest_params {
- struct rte_crypto_sym_xform cipher_xform;
- struct rte_crypto_sym_xform auth_xform;
-
- struct rte_cryptodev_sym_session *sess;
-
- struct rte_crypto_op *op;
-
- struct rte_mbuf *obuf[MAX_NUM_OF_OPS_PER_UT];
- struct rte_mbuf *ibuf[MAX_NUM_OF_OPS_PER_UT];
-
- uint8_t *digest;
-};
-
-static struct rte_cryptodev_sym_session *
-test_perf_create_snow3g_session(uint8_t dev_id, enum chain_mode chain,
- enum rte_crypto_cipher_algorithm cipher_algo,
- unsigned int cipher_key_len,
- enum rte_crypto_auth_algorithm auth_algo);
-static struct rte_cryptodev_sym_session *
-test_perf_create_openssl_session(uint8_t dev_id, enum chain_mode chain,
- enum rte_crypto_cipher_algorithm cipher_algo,
- unsigned int cipher_key_len,
- enum rte_crypto_auth_algorithm auth_algo);
-static struct rte_mbuf *
-test_perf_create_pktmbuf(struct rte_mempool *mpool, unsigned buf_sz);
-static inline struct rte_crypto_op *
-test_perf_set_crypto_op_snow3g(struct rte_crypto_op *op, struct rte_mbuf *m,
- struct rte_cryptodev_sym_session *sess, unsigned data_len,
- unsigned digest_len);
-static inline struct rte_crypto_op *
-test_perf_set_crypto_op_aes(struct rte_crypto_op *op, struct rte_mbuf *m,
- struct rte_cryptodev_sym_session *sess, unsigned int data_len,
- unsigned int digest_len);
-static inline struct rte_crypto_op *
-test_perf_set_crypto_op_aes_gcm(struct rte_crypto_op *op, struct rte_mbuf *m,
- struct rte_cryptodev_sym_session *sess, unsigned int data_len,
- unsigned int digest_len);
-static inline struct rte_crypto_op *
-test_perf_set_crypto_op_3des(struct rte_crypto_op *op, struct rte_mbuf *m,
- struct rte_cryptodev_sym_session *sess, unsigned int data_len,
- unsigned int digest_len);
-static uint32_t get_auth_digest_length(enum rte_crypto_auth_algorithm algo);
-
-
-static const char *chain_mode_name(enum chain_mode mode)
-{
- switch (mode) {
- case CIPHER_HASH: return "cipher_hash"; break;
- case HASH_CIPHER: return "hash_cipher"; break;
- case CIPHER_ONLY: return "cipher_only"; break;
- case HASH_ONLY: return "hash_only"; break;
- default: return ""; break;
- }
-}
-
-static const char *pmd_name(enum rte_cryptodev_type pmd)
-{
- switch (pmd) {
- case RTE_CRYPTODEV_NULL_PMD: return RTE_STR(CRYPTODEV_NAME_NULL_PMD); break;
- case RTE_CRYPTODEV_AESNI_GCM_PMD:
- return RTE_STR(CRYPTODEV_NAME_AESNI_GCM_PMD);
- case RTE_CRYPTODEV_AESNI_MB_PMD:
- return RTE_STR(CRYPTODEV_NAME_AESNI_MB_PMD);
- case RTE_CRYPTODEV_QAT_SYM_PMD:
- return RTE_STR(CRYPTODEV_NAME_QAT_SYM_PMD);
- case RTE_CRYPTODEV_SNOW3G_PMD:
- return RTE_STR(CRYPTODEV_NAME_SNOW3G_PMD);
- default:
- return "";
- }
-}
-
-static const char *cipher_algo_name(enum rte_crypto_cipher_algorithm cipher_algo)
-{
- switch (cipher_algo) {
- case RTE_CRYPTO_CIPHER_NULL: return "NULL";
- case RTE_CRYPTO_CIPHER_3DES_CBC: return "3DES_CBC";
- case RTE_CRYPTO_CIPHER_3DES_CTR: return "3DES_CTR";
- case RTE_CRYPTO_CIPHER_3DES_ECB: return "3DES_ECB";
- case RTE_CRYPTO_CIPHER_AES_CBC: return "AES_CBC";
- case RTE_CRYPTO_CIPHER_AES_CCM: return "AES_CCM";
- case RTE_CRYPTO_CIPHER_AES_CTR: return "AES_CTR";
- case RTE_CRYPTO_CIPHER_AES_ECB: return "AES_ECB";
- case RTE_CRYPTO_CIPHER_AES_F8: return "AES_F8";
- case RTE_CRYPTO_CIPHER_AES_GCM: return "AES_GCM";
- case RTE_CRYPTO_CIPHER_AES_XTS: return "AES_XTS";
- case RTE_CRYPTO_CIPHER_ARC4: return "ARC4";
- case RTE_CRYPTO_CIPHER_KASUMI_F8: return "KASUMI_F8";
- case RTE_CRYPTO_CIPHER_SNOW3G_UEA2: return "SNOW3G_UEA2";
- case RTE_CRYPTO_CIPHER_ZUC_EEA3: return "ZUC_EEA3";
- default: return "Another cipher algo";
- }
-}
-
-static const char *auth_algo_name(enum rte_crypto_auth_algorithm auth_algo)
-{
- switch (auth_algo) {
- case RTE_CRYPTO_AUTH_NULL: return "NULL"; break;
- case RTE_CRYPTO_AUTH_AES_CBC_MAC: return "AES_CBC_MAC"; break;
- case RTE_CRYPTO_AUTH_AES_CCM: return "AES_CCM"; break;
- case RTE_CRYPTO_AUTH_AES_CMAC: return "AES_CMAC,"; break;
- case RTE_CRYPTO_AUTH_AES_GCM: return "AES_GCM"; break;
- case RTE_CRYPTO_AUTH_AES_GMAC: return "AES_GMAC"; break;
- case RTE_CRYPTO_AUTH_AES_XCBC_MAC: return "AES_XCBC_MAC"; break;
- case RTE_CRYPTO_AUTH_KASUMI_F9: return "KASUMI_F9"; break;
- case RTE_CRYPTO_AUTH_MD5: return "MD5"; break;
- case RTE_CRYPTO_AUTH_MD5_HMAC: return "MD5_HMAC,"; break;
- case RTE_CRYPTO_AUTH_SHA1: return "SHA1"; break;
- case RTE_CRYPTO_AUTH_SHA1_HMAC: return "SHA1_HMAC"; break;
- case RTE_CRYPTO_AUTH_SHA224: return "SHA224"; break;
- case RTE_CRYPTO_AUTH_SHA224_HMAC: return "SHA224_HMAC"; break;
- case RTE_CRYPTO_AUTH_SHA256: return "SHA256"; break;
- case RTE_CRYPTO_AUTH_SHA256_HMAC: return "SHA256_HMAC"; break;
- case RTE_CRYPTO_AUTH_SHA384: return "SHA384,"; break;
- case RTE_CRYPTO_AUTH_SHA384_HMAC: return "SHA384_HMAC,"; break;
- case RTE_CRYPTO_AUTH_SHA512: return "SHA512,"; break;
- case RTE_CRYPTO_AUTH_SHA512_HMAC: return "SHA512_HMAC,"; break;
- case RTE_CRYPTO_AUTH_SNOW3G_UIA2: return "SNOW3G_UIA2"; break;
- case RTE_CRYPTO_AUTH_ZUC_EIA3: return "RTE_CRYPTO_AUTH_ZUC_EIA3"; break;
- default: return "Another auth algo"; break;
- };
-}
-
-static struct rte_mbuf *
-setup_test_string(struct rte_mempool *mpool,
- const uint8_t *data, size_t len, uint8_t blocksize)
-{
- struct rte_mbuf *m = rte_pktmbuf_alloc(mpool);
- size_t t_len = len - (blocksize ? (len % blocksize) : 0);
-
- if (m) {
- char *dst = rte_pktmbuf_append(m, t_len);
-
- if (!dst) {
- rte_pktmbuf_free(m);
- return NULL;
- }
-
- rte_memcpy(dst, (const void *)data, t_len);
- }
- return m;
-}
-
-static struct crypto_testsuite_params testsuite_params = { NULL };
-static struct crypto_unittest_params unittest_params;
-static enum rte_cryptodev_type gbl_cryptodev_perftest_devtype;
-
-static int
-testsuite_setup(void)
-{
- struct crypto_testsuite_params *ts_params = &testsuite_params;
- struct rte_cryptodev_info info;
- unsigned i, nb_devs, valid_dev_id = 0;
- int ret;
- uint16_t qp_id;
-
- ts_params->mbuf_mp = rte_mempool_lookup("CRYPTO_PERF_MBUFPOOL");
- if (ts_params->mbuf_mp == NULL) {
- /* Not already created so create */
- ts_params->mbuf_mp = rte_pktmbuf_pool_create(
- "CRYPTO_PERF_MBUFPOOL",
- NUM_MBUFS, MBUF_CACHE_SIZE, 0, MBUF_SIZE,
- rte_socket_id());
- if (ts_params->mbuf_mp == NULL) {
- RTE_LOG(ERR, USER1, "Can't create CRYPTO_PERF_MBUFPOOL\n");
- return TEST_FAILED;
- }
- }
-
-
- ts_params->op_mpool = rte_crypto_op_pool_create("CRYPTO_OP_POOL",
- RTE_CRYPTO_OP_TYPE_SYMMETRIC,
- NUM_MBUFS, MBUF_CACHE_SIZE,
- DEFAULT_NUM_XFORMS *
- sizeof(struct rte_crypto_sym_xform),
- rte_socket_id());
- if (ts_params->op_mpool == NULL) {
- RTE_LOG(ERR, USER1, "Can't create CRYPTO_OP_POOL\n");
- return TEST_FAILED;
- }
-
- /* Create 2 AESNI MB devices if required */
- if (gbl_cryptodev_perftest_devtype == RTE_CRYPTODEV_AESNI_MB_PMD) {
-#ifndef RTE_LIBRTE_PMD_AESNI_MB
- RTE_LOG(ERR, USER1, "CONFIG_RTE_LIBRTE_PMD_AESNI_MB must be"
- " enabled in config file to run this testsuite.\n");
- return TEST_FAILED;
-#endif
- nb_devs = rte_cryptodev_count_devtype(RTE_CRYPTODEV_AESNI_MB_PMD);
- if (nb_devs < 2) {
- for (i = nb_devs; i < 2; i++) {
- ret = rte_eal_vdev_init(
- RTE_STR(CRYPTODEV_NAME_AESNI_MB_PMD), NULL);
-
- TEST_ASSERT(ret == 0,
- "Failed to create instance %u of pmd : %s",
- i, RTE_STR(CRYPTODEV_NAME_AESNI_MB_PMD));
- }
- }
- }
-
- /* Create 2 AESNI GCM devices if required */
- if (gbl_cryptodev_perftest_devtype == RTE_CRYPTODEV_AESNI_GCM_PMD) {
-#ifndef RTE_LIBRTE_PMD_AESNI_GCM
- RTE_LOG(ERR, USER1, "CONFIG_RTE_LIBRTE_PMD_AESNI_GCM must be"
- " enabled in config file to run this testsuite.\n");
- return TEST_FAILED;
-#endif
- nb_devs = rte_cryptodev_count_devtype(RTE_CRYPTODEV_AESNI_GCM_PMD);
- if (nb_devs < 2) {
- for (i = nb_devs; i < 2; i++) {
- ret = rte_eal_vdev_init(
- RTE_STR(CRYPTODEV_NAME_AESNI_GCM_PMD), NULL);
-
- TEST_ASSERT(ret == 0,
- "Failed to create instance %u of pmd : %s",
- i, RTE_STR(CRYPTODEV_NAME_AESNI_GCM_PMD));
- }
- }
- }
-
- /* Create 2 SNOW3G devices if required */
- if (gbl_cryptodev_perftest_devtype == RTE_CRYPTODEV_SNOW3G_PMD) {
-#ifndef RTE_LIBRTE_PMD_SNOW3G
- RTE_LOG(ERR, USER1, "CONFIG_RTE_LIBRTE_PMD_SNOW3G must be"
- " enabled in config file to run this testsuite.\n");
- return TEST_FAILED;
-#endif
- nb_devs = rte_cryptodev_count_devtype(RTE_CRYPTODEV_SNOW3G_PMD);
- if (nb_devs < 2) {
- for (i = nb_devs; i < 2; i++) {
- ret = rte_eal_vdev_init(
- RTE_STR(CRYPTODEV_NAME_SNOW3G_PMD), NULL);
-
- TEST_ASSERT(ret == 0,
- "Failed to create instance %u of pmd : %s",
- i, RTE_STR(CRYPTODEV_NAME_SNOW3G_PMD));
- }
- }
- }
-
- /* Create 2 OPENSSL devices if required */
- if (gbl_cryptodev_perftest_devtype == RTE_CRYPTODEV_OPENSSL_PMD) {
-#ifndef RTE_LIBRTE_PMD_OPENSSL
- RTE_LOG(ERR, USER1, "CONFIG_RTE_LIBRTE_PMD_OPENSSL must be"
- " enabled in config file to run this testsuite.\n");
- return TEST_FAILED;
-#endif
- nb_devs = rte_cryptodev_count_devtype(
- RTE_CRYPTODEV_OPENSSL_PMD);
- if (nb_devs < 2) {
- for (i = nb_devs; i < 2; i++) {
- ret = rte_eal_vdev_init(
- RTE_STR(CRYPTODEV_NAME_OPENSSL_PMD),
- NULL);
-
- TEST_ASSERT(ret == 0, "Failed to create "
- "instance %u of pmd : %s", i,
- RTE_STR(CRYPTODEV_NAME_OPENSSL_PMD));
- }
- }
- }
-
-#ifndef RTE_LIBRTE_PMD_QAT
- if (gbl_cryptodev_perftest_devtype == RTE_CRYPTODEV_QAT_SYM_PMD) {
- RTE_LOG(ERR, USER1, "CONFIG_RTE_LIBRTE_PMD_QAT must be enabled "
- "in config file to run this testsuite.\n");
- return TEST_FAILED;
- }
-#endif
-
- nb_devs = rte_cryptodev_count();
- if (nb_devs < 1) {
- RTE_LOG(ERR, USER1, "No crypto devices found?\n");
- return TEST_FAILED;
- }
-
- /* Search for the first valid */
- for (i = 0; i < nb_devs; i++) {
- rte_cryptodev_info_get(i, &info);
- if (info.dev_type == gbl_cryptodev_perftest_devtype) {
- ts_params->dev_id = i;
- valid_dev_id = 1;
- break;
- }
- }
-
- if (!valid_dev_id)
- return TEST_FAILED;
-
- /*
- * Using Crypto Device Id 0 by default.
- * Set up all the qps on this device
- */
-
- rte_cryptodev_info_get(ts_params->dev_id, &info);
-
- ts_params->conf.nb_queue_pairs = info.max_nb_queue_pairs;
- ts_params->conf.socket_id = SOCKET_ID_ANY;
- ts_params->conf.session_mp.nb_objs = info.sym.max_nb_sessions;
-
- TEST_ASSERT_SUCCESS(rte_cryptodev_configure(ts_params->dev_id,
- &ts_params->conf),
- "Failed to configure cryptodev %u",
- ts_params->dev_id);
-
- ts_params->qp_conf.nb_descriptors = PERF_NUM_OPS_INFLIGHT;
- for (qp_id = 0; qp_id < ts_params->conf.nb_queue_pairs ; qp_id++) {
-
- TEST_ASSERT_SUCCESS(rte_cryptodev_queue_pair_setup(
- ts_params->dev_id, qp_id,
- &ts_params->qp_conf,
- rte_cryptodev_socket_id(ts_params->dev_id)),
- "Failed to setup queue pair %u on cryptodev %u",
- qp_id, ts_params->dev_id);
- }
-
- return TEST_SUCCESS;
-}
-static void
-testsuite_teardown(void)
-{
- struct crypto_testsuite_params *ts_params =
- &testsuite_params;
-
- if (ts_params->mbuf_mp != NULL)
- RTE_LOG(DEBUG, USER1, "CRYPTO_PERF_MBUFPOOL count %u\n",
- rte_mempool_avail_count(ts_params->mbuf_mp));
- if (ts_params->op_mpool != NULL)
- RTE_LOG(DEBUG, USER1, "CRYPTO_PERF_OP POOL count %u\n",
- rte_mempool_avail_count(ts_params->op_mpool));
-}
-
-static int
-ut_setup(void)
-{
- struct crypto_testsuite_params *ts_params = &testsuite_params;
- struct crypto_unittest_params *ut_params = &unittest_params;
-
- /* Clear unit test parameters before running test */
- memset(ut_params, 0, sizeof(*ut_params));
-
- rte_cryptodev_stats_reset(ts_params->dev_id);
-
- /* Start the device */
- TEST_ASSERT_SUCCESS(rte_cryptodev_start(ts_params->dev_id),
- "Failed to start cryptodev %u",
- ts_params->dev_id);
-
- return TEST_SUCCESS;
-}
-
-static void
-ut_teardown(void)
-{
- struct crypto_testsuite_params *ts_params = &testsuite_params;
- struct crypto_unittest_params *ut_params = &unittest_params;
- struct rte_cryptodev_stats stats;
-
- unsigned i;
-
- /* free crypto session structure */
- if (ut_params->sess)
- rte_cryptodev_sym_session_free(ts_params->dev_id,
- ut_params->sess);
-
- /* free crypto operation structure */
- if (ut_params->op)
- rte_crypto_op_free(ut_params->op);
-
- for (i = 0; i < MAX_NUM_OF_OPS_PER_UT; i++) {
- if (ut_params->obuf[i])
- rte_pktmbuf_free(ut_params->obuf[i]);
- else if (ut_params->ibuf[i])
- rte_pktmbuf_free(ut_params->ibuf[i]);
- }
-
- if (ts_params->mbuf_mp != NULL)
- RTE_LOG(DEBUG, USER1, "CRYPTO_PERF_MBUFPOOL count %u\n",
- rte_mempool_avail_count(ts_params->mbuf_mp));
-
- rte_cryptodev_stats_get(ts_params->dev_id, &stats);
-
- /* Stop the device */
- rte_cryptodev_stop(ts_params->dev_id);
-}
-
-const char plaintext_quote[] =
- "THE COUNT OF MONTE CRISTO by Alexandre Dumas, Pere Chapter 1. "
- "Marseilles--The Arrival. On the 24th of February, 1815, the "
- "look-out at Notre-Dame de la Garde signalled the three-master,"
- " the Pharaon from Smyrna, Trieste, and Naples. As usual, a "
- "pilot put off immediately, and rounding the Chateau d'If, got "
- "on board the vessel between Cape Morgion and Rion island. "
- "Immediately, and according to custom, the ramparts of Fort "
- "Saint-Jean were covered with spectators; it is always an event "
- "at Marseilles for a ship to come into port, especially when "
- "this ship, like the Pharaon, has been built, rigged, and laden"
- " at the old Phocee docks, and belongs to an owner of the city."
- " The ship drew on and had safely passed the strait, which some"
- " volcanic shock has made between the Calasareigne and Jaros "
- "islands; had doubled Pomegue, and approached the harbor under"
- " topsails, jib, and spanker, but so slowly and sedately that"
- " the idlers, with that instinct which is the forerunner of "
- "evil, asked one another what misfortune could have happened "
- "on board. However, those experienced in navigation saw plainly"
- " that if any accident had occurred, it was not to the vessel "
- "herself, for she bore down with all the evidence of being "
- "skilfully handled, the anchor a-cockbill, the jib-boom guys "
- "already eased off, and standing by the side of the pilot, who"
- " was steering the Pharaon towards the narrow entrance of the"
- " inner port, was a young man, who, with activity and vigilant"
- " eye, watched every motion of the ship, and repeated each "
- "direction of the pilot. The vague disquietude which prevailed "
- "among the spectators had so much affected one of the crowd "
- "that he did not await the arrival of the vessel in harbor, but"
- " jumping into a small skiff, desired to be pulled alongside "
- "the Pharaon, which he reached as she rounded into La Reserve "
- "basin. When the young man on board saw this person approach, "
- "he left his station by the pilot, and, hat in hand, leaned "
- "over the ship's bulwarks. He was a fine, tall, slim young "
- "fellow of eighteen or twenty, with black eyes, and hair as "
- "dark as a raven's wing; and his whole appearance bespoke that "
- "calmness and resolution peculiar to men accustomed from their "
- "cradle to contend with danger. \"Ah, is it you, Dantes?\" "
- "cried the man in the skiff. \"What's the matter? and why have "
- "you such an air of sadness aboard?\" \"A great misfortune, M. "
- "Morrel,\" replied the young man,--\"a great misfortune, for me"
- " especially! Off Civita Vecchia we lost our brave Captain "
- "Leclere.\" \"And the cargo?\" inquired the owner, eagerly. "
- "\"Is all safe, M. Morrel; and I think you will be satisfied on"
- " that head. But poor Captain Leclere--\" \"What happened to "
- "him?\" asked the owner, with an air of considerable "
- "resignation. \"What happened to the worthy captain?\" \"He "
- "died.\" \"Fell into the sea?\" \"No, sir, he died of "
- "brain-fever in dreadful agony.\" Then turning to the crew, "
- "he said, \"Bear a hand there, to take in sail!\" All hands "
- "obeyed, and at once the eight or ten seamen who composed the "
- "crew, sprang to their respective stations at the spanker "
- "brails and outhaul, topsail sheets and halyards, the jib "
- "downhaul, and the topsail clewlines and buntlines. The young "
- "sailor gave a look to see that his orders were promptly and "
- "accurately obeyed, and then turned again to the owner. \"And "
- "how did this misfortune occur?\" inquired the latter, resuming"
- " the interrupted conversation. \"Alas, sir, in the most "
- "unexpected manner. After a long talk with the harbor-master, "
- "Captain Leclere left Naples greatly disturbed in mind. In "
- "twenty-four hours he was attacked by a fever, and died three "
- "days afterwards. We performed the usual burial service, and he"
- " is at his rest, sewn up in his hammock with a thirty-six "
- "pound shot at his head and his heels, off El Giglio island. "
- "We bring to his widow his sword and cross of honor. It was "
- "worth while, truly,\" added the young man with a melancholy "
- "smile, \"to make war against the English for ten years, and "
- "to die in his bed at last, like everybody else.";
-
-#define QUOTE_LEN_64B (64)
-#define QUOTE_LEN_128B (128)
-#define QUOTE_LEN_256B (256)
-#define QUOTE_LEN_512B (512)
-#define QUOTE_LEN_768B (768)
-#define QUOTE_LEN_1024B (1024)
-#define QUOTE_LEN_1280B (1280)
-#define QUOTE_LEN_1536B (1536)
-#define QUOTE_LEN_1792B (1792)
-#define QUOTE_LEN_2048B (2048)
-
-
-/* ***** AES-CBC / HMAC-SHA256 Performance Tests ***** */
-
-#define HMAC_KEY_LENGTH_SHA256 (DIGEST_BYTE_LENGTH_SHA256)
-
-#define CIPHER_KEY_LENGTH_AES_CBC (16)
-#define CIPHER_IV_LENGTH_AES_CBC (CIPHER_KEY_LENGTH_AES_CBC)
-
-static uint8_t aes_cbc_128_key[] = {
- 0xE4, 0x23, 0x33, 0x8A, 0x35, 0x64, 0x61, 0xE2,
- 0xF1, 0x35, 0x5C, 0x3B, 0xDD, 0x9A, 0x65, 0xBA };
-
-static uint8_t aes_cbc_128_iv[] = {
- 0xf5, 0xd3, 0x89, 0x0f, 0x47, 0x00, 0xcb, 0x52,
- 0x42, 0x1a, 0x7d, 0x3d, 0xf5, 0x82, 0x80, 0xf1 };
-
-static uint8_t hmac_sha256_key[] = {
- 0xff, 0xcb, 0x37, 0x30, 0x1d, 0x4a, 0xc2, 0x41,
- 0x49, 0x03, 0xDD, 0xC6, 0xB8, 0xCA, 0x55, 0x7A,
- 0x58, 0x34, 0x85, 0x61, 0x1C, 0x42, 0x10, 0x76,
- 0x9a, 0x4f, 0x88, 0x1b, 0xb6, 0x8f, 0xd8, 0x60 };
-
-
-/* Cipher text output */
-
-static const uint8_t AES_CBC_ciphertext_64B[] = {
- 0x05, 0x15, 0x77, 0x32, 0xc9, 0x66, 0x91, 0x50,
- 0x93, 0x9f, 0xbb, 0x4e, 0x2e, 0x5a, 0x02, 0xd0,
- 0x2d, 0x9d, 0x31, 0x5d, 0xc8, 0x9e, 0x86, 0x36,
- 0x54, 0x5c, 0x50, 0xe8, 0x75, 0x54, 0x74, 0x5e,
- 0xd5, 0xa2, 0x84, 0x21, 0x2d, 0xc5, 0xf8, 0x1c,
- 0x55, 0x1a, 0xba, 0x91, 0xce, 0xb5, 0xa3, 0x1e,
- 0x31, 0xbf, 0xe9, 0xa1, 0x97, 0x5c, 0x2b, 0xd6,
- 0x57, 0xa5, 0x9f, 0xab, 0xbd, 0xb0, 0x9b, 0x9c
-};
-
-static const uint8_t AES_CBC_ciphertext_128B[] = {
- 0x79, 0x92, 0x65, 0xc8, 0xfb, 0x0a, 0xc7, 0xc4,
- 0x9b, 0x3b, 0xbe, 0x69, 0x7f, 0x7c, 0xf4, 0x4e,
- 0xa5, 0x0d, 0xf6, 0x33, 0xc4, 0xdf, 0xf3, 0x0d,
- 0xdb, 0xb9, 0x68, 0x34, 0xb0, 0x0d, 0xbd, 0xb9,
- 0xa7, 0xf3, 0x86, 0x50, 0x2a, 0xbe, 0x50, 0x5d,
- 0xb3, 0xbe, 0x72, 0xf9, 0x02, 0xb1, 0x69, 0x0b,
- 0x8c, 0x96, 0x4c, 0x3c, 0x0c, 0x1e, 0x76, 0xe5,
- 0x7e, 0x75, 0xdd, 0xd0, 0xa9, 0x75, 0x00, 0x13,
- 0x6b, 0x1e, 0xc0, 0xad, 0xfc, 0x03, 0xb5, 0x99,
- 0xdc, 0x37, 0x35, 0xfc, 0x16, 0x34, 0xfd, 0xb4,
- 0xea, 0x1e, 0xb6, 0x51, 0xdf, 0xab, 0x87, 0xd6,
- 0x87, 0x41, 0xfa, 0x1c, 0xc6, 0x78, 0xa6, 0x3c,
- 0x1d, 0x76, 0xfe, 0xff, 0x65, 0xfc, 0x63, 0x1e,
- 0x1f, 0xe2, 0x7c, 0x9b, 0xa2, 0x72, 0xc3, 0x34,
- 0x23, 0xdf, 0x01, 0xf0, 0xfd, 0x02, 0x8b, 0x97,
- 0x00, 0x2b, 0x97, 0x4e, 0xab, 0x98, 0x21, 0x3c
-};
-
-static const uint8_t AES_CBC_ciphertext_256B[] = {
- 0xc7, 0x71, 0x2b, 0xed, 0x2c, 0x97, 0x59, 0xfa,
- 0xcf, 0x5a, 0xb9, 0x31, 0x92, 0xe0, 0xc9, 0x92,
- 0xc0, 0x2d, 0xd5, 0x9c, 0x84, 0xbf, 0x70, 0x36,
- 0x13, 0x48, 0xe0, 0xb1, 0xbf, 0x6c, 0xcd, 0x91,
- 0xa0, 0xc3, 0x57, 0x6c, 0x3f, 0x0e, 0x34, 0x41,
- 0xe7, 0x9c, 0xc0, 0xec, 0x18, 0x0c, 0x05, 0x52,
- 0x78, 0xe2, 0x3c, 0x6e, 0xdf, 0xa5, 0x49, 0xc7,
- 0xf2, 0x55, 0x00, 0x8f, 0x65, 0x6d, 0x4b, 0xd0,
- 0xcb, 0xd4, 0xd2, 0x0b, 0xea, 0xf4, 0xb0, 0x85,
- 0x61, 0x9e, 0x36, 0xc0, 0x71, 0xb7, 0x80, 0xad,
- 0x40, 0x78, 0xb4, 0x70, 0x2b, 0xe8, 0x80, 0xc5,
- 0x19, 0x35, 0x96, 0x55, 0x3b, 0x40, 0x03, 0xbb,
- 0x9f, 0xa6, 0xc2, 0x82, 0x92, 0x04, 0xc3, 0xa6,
- 0x96, 0xc4, 0x7f, 0x4c, 0x3e, 0x3c, 0x79, 0x82,
- 0x88, 0x8b, 0x3f, 0x8b, 0xc5, 0x9f, 0x44, 0xbe,
- 0x71, 0xe7, 0x09, 0xa2, 0x40, 0xa2, 0x23, 0x4e,
- 0x9f, 0x31, 0xab, 0x6f, 0xdf, 0x59, 0x40, 0xe1,
- 0x12, 0x15, 0x55, 0x4b, 0xea, 0x3f, 0xa1, 0x41,
- 0x4f, 0xaf, 0xcd, 0x27, 0x2a, 0x61, 0xa1, 0x9e,
- 0x82, 0x30, 0x05, 0x05, 0x55, 0xce, 0x99, 0xd3,
- 0x8f, 0x3f, 0x86, 0x79, 0xdc, 0x9f, 0x33, 0x07,
- 0x75, 0x26, 0xc8, 0x72, 0x81, 0x0f, 0x9b, 0xf7,
- 0xb1, 0xfb, 0xd3, 0x91, 0x36, 0x08, 0xab, 0x26,
- 0x70, 0x53, 0x0c, 0x99, 0xfd, 0xa9, 0x07, 0xb4,
- 0xe9, 0xce, 0xc1, 0xd6, 0xd2, 0x2c, 0x71, 0x80,
- 0xec, 0x59, 0x61, 0x0b, 0x24, 0xf0, 0x6d, 0x33,
- 0x73, 0x45, 0x6e, 0x80, 0x03, 0x45, 0xf2, 0x76,
- 0xa5, 0x8a, 0xc9, 0xcf, 0xaf, 0x4a, 0xed, 0x35,
- 0xc0, 0x97, 0x52, 0xc5, 0x00, 0xdf, 0xef, 0xc7,
- 0x9f, 0xf2, 0xe8, 0x15, 0x3e, 0xb3, 0x30, 0xe7,
- 0x00, 0xd0, 0x4e, 0xeb, 0x79, 0xf6, 0xf6, 0xcf,
- 0xf0, 0xe7, 0x61, 0xd5, 0x3d, 0x6a, 0x73, 0x9d
-};
-
-static const uint8_t AES_CBC_ciphertext_512B[] = {
- 0xb4, 0xc6, 0xc6, 0x5f, 0x7e, 0xca, 0x05, 0x70,
- 0x21, 0x7b, 0x92, 0x9e, 0x23, 0xe7, 0x92, 0xb8,
- 0x27, 0x3d, 0x20, 0x29, 0x57, 0xfa, 0x1f, 0x26,
- 0x0a, 0x04, 0x34, 0xa6, 0xf2, 0xdc, 0x44, 0xb6,
- 0x43, 0x40, 0x62, 0xde, 0x0c, 0xde, 0x1c, 0x30,
- 0x43, 0x85, 0x0b, 0xe8, 0x93, 0x1f, 0xa1, 0x2a,
- 0x8a, 0x27, 0x35, 0x39, 0x14, 0x9f, 0x37, 0x64,
- 0x59, 0xb5, 0x0e, 0x96, 0x82, 0x5d, 0x63, 0x45,
- 0xd6, 0x93, 0x89, 0x46, 0xe4, 0x71, 0x31, 0xeb,
- 0x0e, 0xd1, 0x7b, 0xda, 0x90, 0xb5, 0x81, 0xac,
- 0x76, 0x54, 0x54, 0x85, 0x0b, 0xa9, 0x46, 0x9c,
- 0xf0, 0xfd, 0xde, 0x5d, 0xa8, 0xe3, 0xee, 0xe9,
- 0xf4, 0x9d, 0x34, 0x76, 0x39, 0xe7, 0xc3, 0x4a,
- 0x84, 0x38, 0x92, 0x61, 0xf1, 0x12, 0x9f, 0x05,
- 0xda, 0xdb, 0xc1, 0xd4, 0xb0, 0xa0, 0x27, 0x19,
- 0xa0, 0x56, 0x5d, 0x9b, 0xcc, 0x47, 0x7c, 0x15,
- 0x1d, 0x52, 0x66, 0xd5, 0xff, 0xef, 0x12, 0x23,
- 0x86, 0xe2, 0xee, 0x81, 0x2c, 0x3d, 0x7d, 0x28,
- 0xd5, 0x42, 0xdf, 0xdb, 0x75, 0x1c, 0xeb, 0xdf,
- 0x13, 0x23, 0xd5, 0x17, 0x89, 0xea, 0xd7, 0x01,
- 0xff, 0x57, 0x6a, 0x44, 0x61, 0xf4, 0xea, 0xbe,
- 0x97, 0x9b, 0xc2, 0xb1, 0x9c, 0x5d, 0xff, 0x4f,
- 0x73, 0x2d, 0x3f, 0x57, 0x28, 0x38, 0xbf, 0x3d,
- 0x9f, 0xda, 0x49, 0x55, 0x8f, 0xb2, 0x77, 0xec,
- 0x0f, 0xbc, 0xce, 0xb8, 0xc6, 0xe1, 0x03, 0xed,
- 0x35, 0x9c, 0xf2, 0x4d, 0xa4, 0x29, 0x6c, 0xd6,
- 0x6e, 0x05, 0x53, 0x46, 0xc1, 0x41, 0x09, 0x36,
- 0x0b, 0x7d, 0xf4, 0x9e, 0x0f, 0xba, 0x86, 0x33,
- 0xdd, 0xf1, 0xa7, 0xf7, 0xd5, 0x29, 0xa8, 0xa7,
- 0x4d, 0xce, 0x0c, 0xf5, 0xb4, 0x6c, 0xd8, 0x27,
- 0xb0, 0x87, 0x2a, 0x6f, 0x7f, 0x3f, 0x8f, 0xc3,
- 0xe2, 0x3e, 0x94, 0xcf, 0x61, 0x4a, 0x09, 0x3d,
- 0xf9, 0x55, 0x19, 0x31, 0xf2, 0xd2, 0x4a, 0x3e,
- 0xc1, 0xf5, 0xed, 0x7c, 0x45, 0xb0, 0x0c, 0x7b,
- 0xdd, 0xa6, 0x0a, 0x26, 0x66, 0xec, 0x85, 0x49,
- 0x00, 0x38, 0x05, 0x7c, 0x9c, 0x1c, 0x92, 0xf5,
- 0xf7, 0xdb, 0x5d, 0xbd, 0x61, 0x0c, 0xc9, 0xaf,
- 0xfd, 0x57, 0x3f, 0xee, 0x2b, 0xad, 0x73, 0xef,
- 0xa3, 0xc1, 0x66, 0x26, 0x44, 0x5e, 0xf9, 0x12,
- 0x86, 0x66, 0xa9, 0x61, 0x75, 0xa1, 0xbc, 0x40,
- 0x7f, 0xa8, 0x08, 0x02, 0xc0, 0x76, 0x0e, 0x76,
- 0xb3, 0x26, 0x3d, 0x1c, 0x40, 0x65, 0xe4, 0x18,
- 0x0f, 0x62, 0x17, 0x8f, 0x1e, 0x61, 0xb8, 0x08,
- 0x83, 0x54, 0x42, 0x11, 0x03, 0x30, 0x8e, 0xb7,
- 0xc1, 0x9c, 0xec, 0x69, 0x52, 0x95, 0xfb, 0x7b,
- 0x1a, 0x0c, 0x20, 0x24, 0xf7, 0xb8, 0x38, 0x0c,
- 0xb8, 0x7b, 0xb6, 0x69, 0x70, 0xd0, 0x61, 0xb9,
- 0x70, 0x06, 0xc2, 0x5b, 0x20, 0x47, 0xf7, 0xd9,
- 0x32, 0xc2, 0xf2, 0x90, 0xb6, 0x4d, 0xcd, 0x3c,
- 0x6d, 0x74, 0xea, 0x82, 0x35, 0x1b, 0x08, 0x44,
- 0xba, 0xb7, 0x33, 0x82, 0x33, 0x27, 0x54, 0x77,
- 0x6e, 0x58, 0xfe, 0x46, 0x5a, 0xb4, 0x88, 0x53,
- 0x8d, 0x9b, 0xb1, 0xab, 0xdf, 0x04, 0xe1, 0xfb,
- 0xd7, 0x1e, 0xd7, 0x38, 0x64, 0x54, 0xba, 0xb0,
- 0x6c, 0x84, 0x7a, 0x0f, 0xa7, 0x80, 0x6b, 0x86,
- 0xd9, 0xc9, 0xc6, 0x31, 0x95, 0xfa, 0x8a, 0x2c,
- 0x14, 0xe1, 0x85, 0x66, 0x27, 0xfd, 0x63, 0x3e,
- 0xf0, 0xfa, 0x81, 0xc9, 0x89, 0x4f, 0xe2, 0x6a,
- 0x8c, 0x17, 0xb5, 0xc7, 0x9f, 0x5d, 0x3f, 0x6b,
- 0x3f, 0xcd, 0x13, 0x7a, 0x3c, 0xe6, 0x4e, 0xfa,
- 0x7a, 0x10, 0xb8, 0x7c, 0x40, 0xec, 0x93, 0x11,
- 0x1f, 0xd0, 0x9e, 0xc3, 0x56, 0xb9, 0xf5, 0x21,
- 0x18, 0x41, 0x31, 0xea, 0x01, 0x8d, 0xea, 0x1c,
- 0x95, 0x5e, 0x56, 0x33, 0xbc, 0x7a, 0x3f, 0x6f
-};
-
-static const uint8_t AES_CBC_ciphertext_768B[] = {
- 0x3e, 0x7f, 0x9e, 0x4c, 0x88, 0x15, 0x68, 0x69,
- 0x10, 0x09, 0xe1, 0xa7, 0x0f, 0x27, 0x88, 0x2d,
- 0x90, 0x73, 0x4f, 0x67, 0xd3, 0x8b, 0xaf, 0xa1,
- 0x2c, 0x37, 0xa5, 0x6c, 0x7c, 0xbd, 0x95, 0x4c,
- 0x82, 0xcf, 0x05, 0x49, 0x16, 0x5c, 0xe7, 0x06,
- 0xd4, 0xcb, 0x55, 0x65, 0x9a, 0xd0, 0xe1, 0x46,
- 0x3a, 0x37, 0x71, 0xad, 0xb0, 0xb4, 0x99, 0x1e,
- 0x23, 0x57, 0x48, 0x96, 0x9c, 0xc5, 0xc4, 0xdb,
- 0x64, 0x3e, 0xc9, 0x7f, 0x90, 0x5a, 0xa0, 0x08,
- 0x75, 0x4c, 0x09, 0x06, 0x31, 0x6e, 0x59, 0x29,
- 0xfc, 0x2f, 0x72, 0xde, 0xf2, 0x40, 0x5a, 0xfe,
- 0xd3, 0x66, 0x64, 0xb8, 0x9c, 0xc9, 0xa6, 0x1f,
- 0xc3, 0x52, 0xcd, 0xb5, 0xd1, 0x4f, 0x43, 0x3f,
- 0xf4, 0x59, 0x25, 0xc4, 0xdd, 0x3e, 0x58, 0x7c,
- 0x21, 0xd6, 0x21, 0xce, 0xa4, 0xbe, 0x08, 0x23,
- 0x46, 0x68, 0xc0, 0x00, 0x91, 0x47, 0xca, 0x9b,
- 0xe0, 0xb4, 0xe3, 0xab, 0xbf, 0xcf, 0x68, 0x26,
- 0x97, 0x23, 0x09, 0x93, 0x64, 0x8f, 0x57, 0x59,
- 0xe2, 0x41, 0x7c, 0xa2, 0x48, 0x7e, 0xd5, 0x2c,
- 0x54, 0x09, 0x1b, 0x07, 0x94, 0xca, 0x39, 0x83,
- 0xdd, 0xf4, 0x7a, 0x1d, 0x2d, 0xdd, 0x67, 0xf7,
- 0x3c, 0x30, 0x89, 0x3e, 0xc1, 0xdc, 0x1d, 0x8f,
- 0xfc, 0xb1, 0xe9, 0x13, 0x31, 0xb0, 0x16, 0xdb,
- 0x88, 0xf2, 0x32, 0x7e, 0x73, 0xa3, 0xdf, 0x08,
- 0x6b, 0x53, 0x92, 0x08, 0xc9, 0x9d, 0x98, 0xb2,
- 0xf4, 0x8c, 0xb1, 0x95, 0xdc, 0xb6, 0xfc, 0xec,
- 0xf1, 0xc9, 0x0d, 0x6d, 0x42, 0x2c, 0xf5, 0x38,
- 0x29, 0xf4, 0xd8, 0x98, 0x0f, 0xb0, 0x81, 0xa5,
- 0xaa, 0xe6, 0x1f, 0x6e, 0x87, 0x32, 0x1b, 0x02,
- 0x07, 0x57, 0x38, 0x83, 0xf3, 0xe4, 0x54, 0x7c,
- 0xa8, 0x43, 0xdf, 0x3f, 0x42, 0xfd, 0x67, 0x28,
- 0x06, 0x4d, 0xea, 0xce, 0x1f, 0x84, 0x4a, 0xcd,
- 0x8c, 0x61, 0x5e, 0x8f, 0x61, 0xed, 0x84, 0x03,
- 0x53, 0x6a, 0x9e, 0xbf, 0x68, 0x83, 0xa7, 0x42,
- 0x56, 0x57, 0xcd, 0x45, 0x29, 0xfc, 0x7b, 0x07,
- 0xfc, 0xe9, 0xb9, 0x42, 0xfd, 0x29, 0xd5, 0xfd,
- 0x98, 0x11, 0xd1, 0x8d, 0x67, 0x29, 0x47, 0x61,
- 0xd8, 0x27, 0x37, 0x79, 0x29, 0xd1, 0x94, 0x6f,
- 0x8d, 0xf3, 0x1b, 0x3d, 0x6a, 0xb1, 0x59, 0xef,
- 0x1b, 0xd4, 0x70, 0x0e, 0xac, 0xab, 0xa0, 0x2b,
- 0x1f, 0x5e, 0x04, 0xf0, 0x0e, 0x35, 0x72, 0x90,
- 0xfc, 0xcf, 0x86, 0x43, 0xea, 0x45, 0x6d, 0x22,
- 0x63, 0x06, 0x1a, 0x58, 0xd7, 0x2d, 0xc5, 0xb0,
- 0x60, 0x69, 0xe8, 0x53, 0xc2, 0xa2, 0x57, 0x83,
- 0xc4, 0x31, 0xb4, 0xc6, 0xb3, 0xa1, 0x77, 0xb3,
- 0x1c, 0xca, 0x89, 0x3f, 0xf5, 0x10, 0x3b, 0x36,
- 0x31, 0x7d, 0x00, 0x46, 0x00, 0x92, 0xa0, 0xa0,
- 0x34, 0xd8, 0x5e, 0x62, 0xa9, 0xe0, 0x23, 0x37,
- 0x50, 0x85, 0xc7, 0x3a, 0x20, 0xa3, 0x98, 0xc0,
- 0xac, 0x20, 0x06, 0x0f, 0x17, 0x3c, 0xfc, 0x43,
- 0x8c, 0x9d, 0xec, 0xf5, 0x9a, 0x35, 0x96, 0xf7,
- 0xb7, 0x4c, 0xf9, 0x69, 0xf8, 0xd4, 0x1e, 0x9e,
- 0xf9, 0x7c, 0xc4, 0xd2, 0x11, 0x14, 0x41, 0xb9,
- 0x89, 0xd6, 0x07, 0xd2, 0x37, 0x07, 0x5e, 0x5e,
- 0xae, 0x60, 0xdc, 0xe4, 0xeb, 0x38, 0x48, 0x6d,
- 0x95, 0x8d, 0x71, 0xf2, 0xba, 0xda, 0x5f, 0x08,
- 0x9d, 0x4a, 0x0f, 0x56, 0x90, 0x64, 0xab, 0xb6,
- 0x88, 0x22, 0xa8, 0x90, 0x1f, 0x76, 0x2c, 0x83,
- 0x43, 0xce, 0x32, 0x55, 0x45, 0x84, 0x57, 0x43,
- 0xf9, 0xa8, 0xd1, 0x4f, 0xe3, 0xc1, 0x72, 0x9c,
- 0xeb, 0x64, 0xf7, 0xe4, 0x61, 0x2b, 0x93, 0xd1,
- 0x1f, 0xbb, 0x5c, 0xff, 0xa1, 0x59, 0x69, 0xcf,
- 0xf7, 0xaf, 0x58, 0x45, 0xd5, 0x3e, 0x98, 0x7d,
- 0x26, 0x39, 0x5c, 0x75, 0x3c, 0x4a, 0xbf, 0x5e,
- 0x12, 0x10, 0xb0, 0x93, 0x0f, 0x86, 0x82, 0xcf,
- 0xb2, 0xec, 0x70, 0x5c, 0x0b, 0xad, 0x5d, 0x63,
- 0x65, 0x32, 0xa6, 0x04, 0x58, 0x03, 0x91, 0x2b,
- 0xdb, 0x8f, 0xd3, 0xa3, 0x2b, 0x3a, 0xf5, 0xa1,
- 0x62, 0x6c, 0xb6, 0xf0, 0x13, 0x3b, 0x8c, 0x07,
- 0x10, 0x82, 0xc9, 0x56, 0x24, 0x87, 0xfc, 0x56,
- 0xe8, 0xef, 0x90, 0x8b, 0xd6, 0x48, 0xda, 0x53,
- 0x04, 0x49, 0x41, 0xa4, 0x67, 0xe0, 0x33, 0x24,
- 0x6b, 0x9c, 0x07, 0x55, 0x4c, 0x5d, 0xe9, 0x35,
- 0xfa, 0xbd, 0xea, 0xa8, 0x3f, 0xe9, 0xf5, 0x20,
- 0x5c, 0x60, 0x0f, 0x0d, 0x24, 0xcb, 0x1a, 0xd6,
- 0xe8, 0x5c, 0xa8, 0x42, 0xae, 0xd0, 0xd2, 0xf2,
- 0xa8, 0xbe, 0xea, 0x0f, 0x8d, 0xfb, 0x81, 0xa3,
- 0xa4, 0xef, 0xb7, 0x3e, 0x91, 0xbd, 0x26, 0x0f,
- 0x8e, 0xf1, 0xb2, 0xa5, 0x47, 0x06, 0xfa, 0x40,
- 0x8b, 0x31, 0x7a, 0x5a, 0x74, 0x2a, 0x0a, 0x7c,
- 0x62, 0x5d, 0x39, 0xa4, 0xae, 0x14, 0x85, 0x08,
- 0x5b, 0x20, 0x85, 0xf1, 0x57, 0x6e, 0x71, 0x13,
- 0x4e, 0x2b, 0x49, 0x87, 0x01, 0xdf, 0x37, 0xed,
- 0x28, 0xee, 0x4d, 0xa1, 0xf4, 0xb3, 0x3b, 0xba,
- 0x2d, 0xb3, 0x46, 0x17, 0x84, 0x80, 0x9d, 0xd7,
- 0x93, 0x1f, 0x28, 0x7c, 0xf5, 0xf9, 0xd6, 0x85,
- 0x8c, 0xa5, 0x44, 0xe9, 0x2c, 0x65, 0x51, 0x5f,
- 0x53, 0x7a, 0x09, 0xd9, 0x30, 0x16, 0x95, 0x89,
- 0x9c, 0x0b, 0xef, 0x90, 0x6d, 0x23, 0xd3, 0x48,
- 0x57, 0x3b, 0x55, 0x69, 0x96, 0xfc, 0xf7, 0x52,
- 0x92, 0x38, 0x36, 0xbf, 0xa9, 0x0a, 0xbb, 0x68,
- 0x45, 0x08, 0x25, 0xee, 0x59, 0xfe, 0xee, 0xf2,
- 0x2c, 0xd4, 0x5f, 0x78, 0x59, 0x0d, 0x90, 0xf1,
- 0xd7, 0xe4, 0x39, 0x0e, 0x46, 0x36, 0xf5, 0x75,
- 0x03, 0x3c, 0x28, 0xfb, 0xfa, 0x8f, 0xef, 0xc9,
- 0x61, 0x00, 0x94, 0xc3, 0xd2, 0x0f, 0xd9, 0xda
-};
-
-static const uint8_t AES_CBC_ciphertext_1024B[] = {
- 0x7d, 0x01, 0x7e, 0x2f, 0x92, 0xb3, 0xea, 0x72,
- 0x4a, 0x3f, 0x10, 0xf9, 0x2b, 0xb0, 0xd5, 0xb9,
- 0x19, 0x68, 0x94, 0xe9, 0x93, 0xe9, 0xd5, 0x26,
- 0x20, 0x44, 0xe2, 0x47, 0x15, 0x8d, 0x75, 0x48,
- 0x8e, 0xe4, 0x40, 0x81, 0xb5, 0x06, 0xa8, 0xb8,
- 0x0e, 0x0f, 0x3b, 0xbc, 0x5b, 0xbe, 0x3b, 0xa2,
- 0x2a, 0x0c, 0x48, 0x98, 0x19, 0xdf, 0xe9, 0x25,
- 0x75, 0xab, 0x93, 0x44, 0xb1, 0x72, 0x70, 0xbb,
- 0x20, 0xcf, 0x78, 0xe9, 0x4d, 0xc6, 0xa9, 0xa9,
- 0x84, 0x78, 0xc5, 0xc0, 0xc4, 0xc9, 0x79, 0x1a,
- 0xbc, 0x61, 0x25, 0x5f, 0xac, 0x01, 0x03, 0xb7,
- 0xef, 0x07, 0xf2, 0x62, 0x98, 0xee, 0xe3, 0xad,
- 0x94, 0x75, 0x30, 0x67, 0xb9, 0x15, 0x00, 0xe7,
- 0x11, 0x32, 0x2e, 0x6b, 0x55, 0x9f, 0xac, 0x68,
- 0xde, 0x61, 0x05, 0x80, 0x01, 0xf3, 0xad, 0xab,
- 0xaf, 0x45, 0xe0, 0xf4, 0x68, 0x5c, 0xc0, 0x52,
- 0x92, 0xc8, 0x21, 0xb6, 0xf5, 0x8a, 0x1d, 0xbb,
- 0xfc, 0x4a, 0x11, 0x62, 0xa2, 0xc4, 0xf1, 0x2d,
- 0x0e, 0xb2, 0xc7, 0x17, 0x34, 0xb4, 0x2a, 0x54,
- 0x81, 0xc2, 0x1e, 0xcf, 0x51, 0x0a, 0x76, 0x54,
- 0xf1, 0x48, 0x0d, 0x5c, 0xcd, 0x38, 0x3e, 0x38,
- 0x3e, 0xf8, 0x46, 0x1d, 0x00, 0xf5, 0x62, 0xe1,
- 0x5c, 0xb7, 0x8d, 0xce, 0xd0, 0x3f, 0xbb, 0x22,
- 0xf1, 0xe5, 0xb1, 0xa0, 0x58, 0x5e, 0x3c, 0x0f,
- 0x15, 0xd1, 0xac, 0x3e, 0xc7, 0x72, 0xc4, 0xde,
- 0x8b, 0x95, 0x3e, 0x91, 0xf7, 0x1d, 0x04, 0x9a,
- 0xc8, 0xe4, 0xbf, 0xd3, 0x22, 0xca, 0x4a, 0xdc,
- 0xb6, 0x16, 0x79, 0x81, 0x75, 0x2f, 0x6b, 0xa7,
- 0x04, 0x98, 0xa7, 0x4e, 0xc1, 0x19, 0x90, 0x33,
- 0x33, 0x3c, 0x7f, 0xdd, 0xac, 0x09, 0x0c, 0xc3,
- 0x91, 0x34, 0x74, 0xab, 0xa5, 0x35, 0x0a, 0x13,
- 0xc3, 0x56, 0x67, 0x6d, 0x1a, 0x3e, 0xbf, 0x56,
- 0x06, 0x67, 0x15, 0x5f, 0xfc, 0x8b, 0xa2, 0x3c,
- 0x5e, 0xaf, 0x56, 0x1f, 0xe3, 0x2e, 0x9d, 0x0a,
- 0xf9, 0x9b, 0xc7, 0xb5, 0x03, 0x1c, 0x68, 0x99,
- 0xfa, 0x3c, 0x37, 0x59, 0xc1, 0xf7, 0x6a, 0x83,
- 0x22, 0xee, 0xca, 0x7f, 0x7d, 0x49, 0xe6, 0x48,
- 0x84, 0x54, 0x7a, 0xff, 0xb3, 0x72, 0x21, 0xd8,
- 0x7a, 0x5d, 0xb1, 0x4b, 0xcc, 0x01, 0x6f, 0x90,
- 0xc6, 0x68, 0x1c, 0x2c, 0xa1, 0xe2, 0x74, 0x40,
- 0x26, 0x9b, 0x57, 0x53, 0xa3, 0x7c, 0x0b, 0x0d,
- 0xcf, 0x05, 0x5d, 0x62, 0x4f, 0x75, 0x06, 0x62,
- 0x1f, 0x26, 0x32, 0xaa, 0x25, 0xcc, 0x26, 0x8d,
- 0xae, 0x01, 0x47, 0xa3, 0x00, 0x42, 0xe2, 0x4c,
- 0xee, 0x29, 0xa2, 0x81, 0xa0, 0xfd, 0xeb, 0xff,
- 0x9a, 0x66, 0x6e, 0x47, 0x5b, 0xab, 0x93, 0x5a,
- 0x02, 0x6d, 0x6f, 0xf2, 0x6e, 0x02, 0x9d, 0xb1,
- 0xab, 0x56, 0xdc, 0x8b, 0x9b, 0x17, 0xa8, 0xfb,
- 0x87, 0x42, 0x7c, 0x91, 0x1e, 0x14, 0xc6, 0x6f,
- 0xdc, 0xf0, 0x27, 0x30, 0xfa, 0x3f, 0xc4, 0xad,
- 0x57, 0x85, 0xd2, 0xc9, 0x32, 0x2c, 0x13, 0xa6,
- 0x04, 0x04, 0x50, 0x05, 0x2f, 0x72, 0xd9, 0x44,
- 0x55, 0x6e, 0x93, 0x40, 0xed, 0x7e, 0xd4, 0x40,
- 0x3e, 0x88, 0x3b, 0x8b, 0xb6, 0xeb, 0xc6, 0x5d,
- 0x9c, 0x99, 0xa1, 0xcf, 0x30, 0xb2, 0xdc, 0x48,
- 0x8a, 0x01, 0xa7, 0x61, 0x77, 0x50, 0x14, 0xf3,
- 0x0c, 0x49, 0x53, 0xb3, 0xb4, 0xb4, 0x28, 0x41,
- 0x4a, 0x2d, 0xd2, 0x4d, 0x2a, 0x30, 0x31, 0x83,
- 0x03, 0x5e, 0xaa, 0xd3, 0xa3, 0xd1, 0xa1, 0xca,
- 0x62, 0xf0, 0xe1, 0xf2, 0xff, 0xf0, 0x19, 0xa6,
- 0xde, 0x22, 0x47, 0xb5, 0x28, 0x7d, 0xf7, 0x07,
- 0x16, 0x0d, 0xb1, 0x55, 0x81, 0x95, 0xe5, 0x1d,
- 0x4d, 0x78, 0xa9, 0x3e, 0xce, 0xe3, 0x1c, 0xf9,
- 0x47, 0xc8, 0xec, 0xc5, 0xc5, 0x93, 0x4c, 0x34,
- 0x20, 0x6b, 0xee, 0x9a, 0xe6, 0x86, 0x57, 0x58,
- 0xd5, 0x58, 0xf1, 0x33, 0x10, 0x29, 0x9e, 0x93,
- 0x2f, 0xf5, 0x90, 0x00, 0x17, 0x67, 0x4f, 0x39,
- 0x18, 0xe1, 0xcf, 0x55, 0x78, 0xbb, 0xe6, 0x29,
- 0x3e, 0x77, 0xd5, 0x48, 0xb7, 0x42, 0x72, 0x53,
- 0x27, 0xfa, 0x5b, 0xe0, 0x36, 0x14, 0x97, 0xb8,
- 0x9b, 0x3c, 0x09, 0x77, 0xc1, 0x0a, 0xe4, 0xa2,
- 0x63, 0xfc, 0xbe, 0x5c, 0x17, 0xcf, 0x01, 0xf5,
- 0x03, 0x0f, 0x17, 0xbc, 0x93, 0xdd, 0x5f, 0xe2,
- 0xf3, 0x08, 0xa8, 0xb1, 0x85, 0xb6, 0x34, 0x3f,
- 0x87, 0x42, 0xa5, 0x42, 0x3b, 0x0e, 0xd6, 0x83,
- 0x6a, 0xfd, 0x5d, 0xc9, 0x67, 0xd5, 0x51, 0xc9,
- 0x2a, 0x4e, 0x91, 0xb0, 0x59, 0xb2, 0x0f, 0xa2,
- 0xe6, 0x47, 0x73, 0xc2, 0xa2, 0xae, 0xbb, 0xc8,
- 0x42, 0xa3, 0x2a, 0x27, 0x29, 0x48, 0x8c, 0x54,
- 0x6c, 0xec, 0x00, 0x2a, 0x42, 0xa3, 0x7a, 0x0f,
- 0x12, 0x66, 0x6b, 0x96, 0xf6, 0xd0, 0x56, 0x4f,
- 0x49, 0x5c, 0x47, 0xec, 0x05, 0x62, 0x54, 0xb2,
- 0x64, 0x5a, 0x69, 0x1f, 0x19, 0xb4, 0x84, 0x5c,
- 0xbe, 0x48, 0x8e, 0xfc, 0x58, 0x21, 0xce, 0xfa,
- 0xaa, 0x84, 0xd2, 0xc1, 0x08, 0xb3, 0x87, 0x0f,
- 0x4f, 0xa3, 0x3a, 0xb6, 0x44, 0xbe, 0x2e, 0x9a,
- 0xdd, 0xb5, 0x44, 0x80, 0xca, 0xf4, 0xc3, 0x6e,
- 0xba, 0x93, 0x77, 0xe0, 0x53, 0xfb, 0x37, 0xfb,
- 0x88, 0xc3, 0x1f, 0x25, 0xde, 0x3e, 0x11, 0xf4,
- 0x89, 0xe7, 0xd1, 0x3b, 0xb4, 0x23, 0xcb, 0x70,
- 0xba, 0x35, 0x97, 0x7c, 0xbe, 0x84, 0x13, 0xcf,
- 0xe0, 0x4d, 0x33, 0x91, 0x71, 0x85, 0xbb, 0x4b,
- 0x97, 0x32, 0x5d, 0xa0, 0xb9, 0x8f, 0xdc, 0x27,
- 0x5a, 0xeb, 0x71, 0xf1, 0xd5, 0x0d, 0x65, 0xb4,
- 0x22, 0x81, 0xde, 0xa7, 0x58, 0x20, 0x0b, 0x18,
- 0x11, 0x76, 0x5c, 0xe6, 0x6a, 0x2c, 0x99, 0x69,
- 0xdc, 0xed, 0x67, 0x08, 0x5d, 0x5e, 0xe9, 0x1e,
- 0x55, 0x70, 0xc1, 0x5a, 0x76, 0x1b, 0x8d, 0x2e,
- 0x0d, 0xf9, 0xcc, 0x30, 0x8c, 0x44, 0x0f, 0x63,
- 0x8c, 0x42, 0x8a, 0x9f, 0x4c, 0xd1, 0x48, 0x28,
- 0x8a, 0xf5, 0x56, 0x2e, 0x23, 0x12, 0xfe, 0x67,
- 0x9a, 0x13, 0x65, 0x75, 0x83, 0xf1, 0x3c, 0x98,
- 0x07, 0x6b, 0xb7, 0x27, 0x5b, 0xf0, 0x70, 0xda,
- 0x30, 0xf8, 0x74, 0x4e, 0x7a, 0x32, 0x84, 0xcc,
- 0x0e, 0xcd, 0x80, 0x8b, 0x82, 0x31, 0x9a, 0x48,
- 0xcf, 0x75, 0x00, 0x1f, 0x4f, 0xe0, 0x8e, 0xa3,
- 0x6a, 0x2c, 0xd4, 0x73, 0x4c, 0x63, 0x7c, 0xa6,
- 0x4d, 0x5e, 0xfd, 0x43, 0x3b, 0x27, 0xe1, 0x5e,
- 0xa3, 0xa9, 0x5c, 0x3b, 0x60, 0xdd, 0xc6, 0x8d,
- 0x5a, 0xf1, 0x3e, 0x89, 0x4b, 0x24, 0xcf, 0x01,
- 0x3a, 0x2d, 0x44, 0xe7, 0xda, 0xe7, 0xa1, 0xac,
- 0x11, 0x05, 0x0c, 0xa9, 0x7a, 0x82, 0x8c, 0x5c,
- 0x29, 0x68, 0x9c, 0x73, 0x13, 0xcc, 0x67, 0x32,
- 0x11, 0x5e, 0xe5, 0xcc, 0x8c, 0xf5, 0xa7, 0x52,
- 0x83, 0x9a, 0x70, 0xef, 0xde, 0x55, 0x9c, 0xc7,
- 0x8a, 0xed, 0xad, 0x28, 0x4a, 0xc5, 0x92, 0x6d,
- 0x8e, 0x47, 0xca, 0xe3, 0xf8, 0x77, 0xb5, 0x26,
- 0x64, 0x84, 0xc2, 0xf1, 0xd7, 0xae, 0x0c, 0xb9,
- 0x39, 0x0f, 0x43, 0x6b, 0xe9, 0xe0, 0x09, 0x4b,
- 0xe5, 0xe3, 0x17, 0xa6, 0x68, 0x69, 0x46, 0xf4,
- 0xf0, 0x68, 0x7f, 0x2f, 0x1c, 0x7e, 0x4c, 0xd2,
- 0xb5, 0xc6, 0x16, 0x85, 0xcf, 0x02, 0x4c, 0x89,
- 0x0b, 0x25, 0xb0, 0xeb, 0xf3, 0x77, 0x08, 0x6a,
- 0x46, 0x5c, 0xf6, 0x2f, 0xf1, 0x24, 0xc3, 0x4d,
- 0x80, 0x60, 0x4d, 0x69, 0x98, 0xde, 0xc7, 0xa1,
- 0xf6, 0x4e, 0x18, 0x0c, 0x2a, 0xb0, 0xb2, 0xe0,
- 0x46, 0xe7, 0x49, 0x37, 0xc8, 0x5a, 0x23, 0x24,
- 0xe3, 0x0f, 0xcc, 0x92, 0xb4, 0x8d, 0xdc, 0x9e
-};
-
-static const uint8_t AES_CBC_ciphertext_1280B[] = {
- 0x91, 0x99, 0x5e, 0x9e, 0x84, 0xff, 0x59, 0x45,
- 0xc1, 0xf4, 0xbc, 0x9c, 0xb9, 0x30, 0x6c, 0x51,
- 0x73, 0x52, 0xb4, 0x44, 0x09, 0x79, 0xe2, 0x89,
- 0x75, 0xeb, 0x54, 0x26, 0xce, 0xd8, 0x24, 0x98,
- 0xaa, 0xf8, 0x13, 0x16, 0x68, 0x58, 0xc4, 0x82,
- 0x0e, 0x31, 0xd3, 0x6a, 0x13, 0x58, 0x31, 0xe9,
- 0x3a, 0xc1, 0x8b, 0xc5, 0x3f, 0x50, 0x42, 0xd1,
- 0x93, 0xe4, 0x9b, 0x65, 0x2b, 0xf4, 0x1d, 0x9e,
- 0x2d, 0xdb, 0x48, 0xef, 0x9a, 0x01, 0x68, 0xb6,
- 0xea, 0x7a, 0x2b, 0xad, 0xfe, 0x77, 0x44, 0x7e,
- 0x5a, 0xc5, 0x64, 0xb4, 0xfe, 0x5c, 0x80, 0xf3,
- 0x20, 0x7e, 0xaf, 0x5b, 0xf8, 0xd1, 0x38, 0xa0,
- 0x8d, 0x09, 0x77, 0x06, 0xfe, 0xf5, 0xf4, 0xe4,
- 0xee, 0xb8, 0x95, 0x27, 0xed, 0x07, 0xb8, 0xaa,
- 0x25, 0xb4, 0xe1, 0x4c, 0xeb, 0x3f, 0xdb, 0x39,
- 0x66, 0x28, 0x1b, 0x60, 0x42, 0x8b, 0x99, 0xd9,
- 0x49, 0xd6, 0x8c, 0xa4, 0x9d, 0xd8, 0x93, 0x58,
- 0x8f, 0xfa, 0xd3, 0xf7, 0x37, 0x9c, 0x88, 0xab,
- 0x16, 0x50, 0xfe, 0x01, 0x1f, 0x88, 0x48, 0xbe,
- 0x21, 0xa9, 0x90, 0x9e, 0x73, 0xe9, 0x82, 0xf7,
- 0xbf, 0x4b, 0x43, 0xf4, 0xbf, 0x22, 0x3c, 0x45,
- 0x47, 0x95, 0x5b, 0x49, 0x71, 0x07, 0x1c, 0x8b,
- 0x49, 0xa4, 0xa3, 0x49, 0xc4, 0x5f, 0xb1, 0xf5,
- 0xe3, 0x6b, 0xf1, 0xdc, 0xea, 0x92, 0x7b, 0x29,
- 0x40, 0xc9, 0x39, 0x5f, 0xdb, 0xbd, 0xf3, 0x6a,
- 0x09, 0x9b, 0x2a, 0x5e, 0xc7, 0x0b, 0x25, 0x94,
- 0x55, 0x71, 0x9c, 0x7e, 0x0e, 0xb4, 0x08, 0x12,
- 0x8c, 0x6e, 0x77, 0xb8, 0x29, 0xf1, 0xc6, 0x71,
- 0x04, 0x40, 0x77, 0x18, 0x3f, 0x01, 0x09, 0x9c,
- 0x23, 0x2b, 0x5d, 0x2a, 0x88, 0x20, 0x23, 0x59,
- 0x74, 0x2a, 0x67, 0x8f, 0xb7, 0xba, 0x38, 0x9f,
- 0x0f, 0xcf, 0x94, 0xdf, 0xe1, 0x8f, 0x35, 0x5e,
- 0x34, 0x0c, 0x32, 0x92, 0x2b, 0x23, 0x81, 0xf4,
- 0x73, 0xa0, 0x5a, 0x2a, 0xbd, 0xa6, 0x6b, 0xae,
- 0x43, 0xe2, 0xdc, 0x01, 0xc1, 0xc6, 0xc3, 0x04,
- 0x06, 0xbb, 0xb0, 0x89, 0xb3, 0x4e, 0xbd, 0x81,
- 0x1b, 0x03, 0x63, 0x93, 0xed, 0x4e, 0xf6, 0xe5,
- 0x94, 0x6f, 0xd6, 0xf3, 0x20, 0xf3, 0xbc, 0x30,
- 0xc5, 0xd6, 0xbe, 0x1c, 0x05, 0x34, 0x26, 0x4d,
- 0x46, 0x5e, 0x56, 0x63, 0xfb, 0xdb, 0xcd, 0xed,
- 0xb0, 0x7f, 0x83, 0x94, 0x55, 0x54, 0x2f, 0xab,
- 0xc9, 0xb7, 0x16, 0x4f, 0x9e, 0x93, 0x25, 0xd7,
- 0x9f, 0x39, 0x2b, 0x63, 0xcf, 0x1e, 0xa3, 0x0e,
- 0x28, 0x47, 0x8a, 0x5f, 0x40, 0x02, 0x89, 0x1f,
- 0x83, 0xe7, 0x87, 0xd1, 0x90, 0x17, 0xb8, 0x27,
- 0x64, 0xe1, 0xe1, 0x48, 0x5a, 0x55, 0x74, 0x99,
- 0x27, 0x9d, 0x05, 0x67, 0xda, 0x70, 0x12, 0x8f,
- 0x94, 0x96, 0xfd, 0x36, 0xa4, 0x1d, 0x22, 0xe5,
- 0x0b, 0xe5, 0x2f, 0x38, 0x55, 0xa3, 0x5d, 0x0b,
- 0xcf, 0xd4, 0xa9, 0xb8, 0xd6, 0x9a, 0x16, 0x2e,
- 0x6c, 0x4a, 0x25, 0x51, 0x7a, 0x09, 0x48, 0xdd,
- 0xf0, 0xa3, 0x5b, 0x08, 0x1e, 0x2f, 0x03, 0x91,
- 0x80, 0xe8, 0x0f, 0xe9, 0x5a, 0x2f, 0x90, 0xd3,
- 0x64, 0xed, 0xd7, 0x51, 0x17, 0x66, 0x53, 0x40,
- 0x43, 0x74, 0xef, 0x0a, 0x0d, 0x49, 0x41, 0xf2,
- 0x67, 0x6e, 0xea, 0x14, 0xc8, 0x74, 0xd6, 0xa9,
- 0xb9, 0x6a, 0xe3, 0xec, 0x7d, 0xe8, 0x6a, 0x21,
- 0x3a, 0x52, 0x42, 0xfe, 0x9a, 0x15, 0x6d, 0x60,
- 0x64, 0x88, 0xc5, 0xb2, 0x8b, 0x15, 0x2c, 0xff,
- 0xe2, 0x35, 0xc3, 0xee, 0x9f, 0xcd, 0x82, 0xd9,
- 0x14, 0x35, 0x2a, 0xb7, 0xf5, 0x2f, 0x7b, 0xbc,
- 0x01, 0xfd, 0xa8, 0xe0, 0x21, 0x4e, 0x73, 0xf9,
- 0xf2, 0xb0, 0x79, 0xc9, 0x10, 0x52, 0x8f, 0xa8,
- 0x3e, 0x3b, 0xbe, 0xc5, 0xde, 0xf6, 0x53, 0xe3,
- 0x1c, 0x25, 0x3a, 0x1f, 0x13, 0xbf, 0x13, 0xbb,
- 0x94, 0xc2, 0x97, 0x43, 0x64, 0x47, 0x8f, 0x76,
- 0xd7, 0xaa, 0xeb, 0xa4, 0x03, 0x50, 0x0c, 0x10,
- 0x50, 0xd8, 0xf7, 0x75, 0x52, 0x42, 0xe2, 0x94,
- 0x67, 0xf4, 0x60, 0xfb, 0x21, 0x9b, 0x7a, 0x05,
- 0x50, 0x7c, 0x1b, 0x4a, 0x8b, 0x29, 0xe1, 0xac,
- 0xd7, 0x99, 0xfd, 0x0d, 0x65, 0x92, 0xcd, 0x23,
- 0xa7, 0x35, 0x8e, 0x13, 0xf2, 0xe4, 0x10, 0x74,
- 0xc6, 0x4f, 0x19, 0xf7, 0x01, 0x0b, 0x46, 0xab,
- 0xef, 0x8d, 0x4a, 0x4a, 0xfa, 0xda, 0xf3, 0xfb,
- 0x40, 0x28, 0x88, 0xa2, 0x65, 0x98, 0x4d, 0x88,
- 0xc7, 0xbf, 0x00, 0xc8, 0xd0, 0x91, 0xcb, 0x89,
- 0x2f, 0xb0, 0x85, 0xfc, 0xa1, 0xc1, 0x9e, 0x83,
- 0x88, 0xad, 0x95, 0xc0, 0x31, 0xa0, 0xad, 0xa2,
- 0x42, 0xb5, 0xe7, 0x55, 0xd4, 0x93, 0x5a, 0x74,
- 0x4e, 0x41, 0xc3, 0xcf, 0x96, 0x83, 0x46, 0xa1,
- 0xb7, 0x5b, 0xb1, 0x34, 0x67, 0x4e, 0xb1, 0xd7,
- 0x40, 0x20, 0x72, 0xe9, 0xc8, 0x74, 0xb7, 0xde,
- 0x72, 0x29, 0x77, 0x4c, 0x74, 0x7e, 0xcc, 0x18,
- 0xa5, 0x8d, 0x79, 0x8c, 0xd6, 0x6e, 0xcb, 0xd9,
- 0xe1, 0x61, 0xe7, 0x36, 0xbc, 0x37, 0xea, 0xee,
- 0xd8, 0x3c, 0x5e, 0x7c, 0x47, 0x50, 0xd5, 0xec,
- 0x37, 0xc5, 0x63, 0xc3, 0xc9, 0x99, 0x23, 0x9f,
- 0x64, 0x39, 0xdf, 0x13, 0x96, 0x6d, 0xea, 0x08,
- 0x0c, 0x27, 0x2d, 0xfe, 0x0f, 0xc2, 0xa3, 0x97,
- 0x04, 0x12, 0x66, 0x0d, 0x94, 0xbf, 0xbe, 0x3e,
- 0xb9, 0xcf, 0x8e, 0xc1, 0x9d, 0xb1, 0x64, 0x17,
- 0x54, 0x92, 0x3f, 0x0a, 0x51, 0xc8, 0xf5, 0x82,
- 0x98, 0x73, 0x03, 0xc0, 0x5a, 0x51, 0x01, 0x67,
- 0xb4, 0x01, 0x04, 0x06, 0xbc, 0x37, 0xde, 0x96,
- 0x23, 0x3c, 0xce, 0x98, 0x3f, 0xd6, 0x51, 0x1b,
- 0x01, 0x83, 0x0a, 0x1c, 0xf9, 0xeb, 0x7e, 0x72,
- 0xa9, 0x51, 0x23, 0xc8, 0xd7, 0x2f, 0x12, 0xbc,
- 0x08, 0xac, 0x07, 0xe7, 0xa7, 0xe6, 0x46, 0xae,
- 0x54, 0xa3, 0xc2, 0xf2, 0x05, 0x2d, 0x06, 0x5e,
- 0xfc, 0xe2, 0xa2, 0x23, 0xac, 0x86, 0xf2, 0x54,
- 0x83, 0x4a, 0xb6, 0x48, 0x93, 0xa1, 0x78, 0xc2,
- 0x07, 0xec, 0x82, 0xf0, 0x74, 0xa9, 0x18, 0xe9,
- 0x53, 0x44, 0x49, 0xc2, 0x94, 0xf8, 0x94, 0x92,
- 0x08, 0x3f, 0xbf, 0xa6, 0xe5, 0xc6, 0x03, 0x8a,
- 0xc6, 0x90, 0x48, 0x6c, 0xee, 0xbd, 0x44, 0x92,
- 0x1f, 0x2a, 0xce, 0x1d, 0xb8, 0x31, 0xa2, 0x9d,
- 0x24, 0x93, 0xa8, 0x9f, 0x36, 0x00, 0x04, 0x7b,
- 0xcb, 0x93, 0x59, 0xa1, 0x53, 0xdb, 0x13, 0x7a,
- 0x54, 0xb1, 0x04, 0xdb, 0xce, 0x48, 0x4f, 0xe5,
- 0x2f, 0xcb, 0xdf, 0x8f, 0x50, 0x7c, 0xfc, 0x76,
- 0x80, 0xb4, 0xdc, 0x3b, 0xc8, 0x98, 0x95, 0xf5,
- 0x50, 0xba, 0x70, 0x5a, 0x97, 0xd5, 0xfc, 0x98,
- 0x4d, 0xf3, 0x61, 0x0f, 0xcf, 0xac, 0x49, 0x0a,
- 0xdb, 0xc1, 0x42, 0x8f, 0xb6, 0x29, 0xd5, 0x65,
- 0xef, 0x83, 0xf1, 0x30, 0x4b, 0x84, 0xd0, 0x69,
- 0xde, 0xd2, 0x99, 0xe5, 0xec, 0xd3, 0x90, 0x86,
- 0x39, 0x2a, 0x6e, 0xd5, 0x32, 0xe3, 0x0d, 0x2d,
- 0x01, 0x8b, 0x17, 0x55, 0x1d, 0x65, 0x57, 0xbf,
- 0xd8, 0x75, 0xa4, 0x85, 0xb6, 0x4e, 0x35, 0x14,
- 0x58, 0xe4, 0x89, 0xb8, 0x7a, 0x58, 0x86, 0x0c,
- 0xbd, 0x8b, 0x05, 0x7b, 0x63, 0xc0, 0x86, 0x80,
- 0x33, 0x46, 0xd4, 0x9b, 0xb6, 0x0a, 0xeb, 0x6c,
- 0xae, 0xd6, 0x57, 0x7a, 0xc7, 0x59, 0x33, 0xa0,
- 0xda, 0xa4, 0x12, 0xbf, 0x52, 0x22, 0x05, 0x8d,
- 0xeb, 0xee, 0xd5, 0xec, 0xea, 0x29, 0x9b, 0x76,
- 0x95, 0x50, 0x6d, 0x99, 0xe1, 0x45, 0x63, 0x09,
- 0x16, 0x5f, 0xb0, 0xf2, 0x5b, 0x08, 0x33, 0xdd,
- 0x8f, 0xb7, 0x60, 0x7a, 0x8e, 0xc6, 0xfc, 0xac,
- 0xa9, 0x56, 0x2c, 0xa9, 0x8b, 0x74, 0x33, 0xad,
- 0x2a, 0x7e, 0x96, 0xb6, 0xba, 0x22, 0x28, 0xcf,
- 0x4d, 0x96, 0xb7, 0xd1, 0xfa, 0x99, 0x4a, 0x61,
- 0xe6, 0x84, 0xd1, 0x94, 0xca, 0xf5, 0x86, 0xb0,
- 0xba, 0x34, 0x7a, 0x04, 0xcc, 0xd4, 0x81, 0xcd,
- 0xd9, 0x86, 0xb6, 0xe0, 0x5a, 0x6f, 0x9b, 0x99,
- 0xf0, 0xdf, 0x49, 0xae, 0x6d, 0xc2, 0x54, 0x67,
- 0xe0, 0xb4, 0x34, 0x2d, 0x1c, 0x46, 0xdf, 0x73,
- 0x3b, 0x45, 0x43, 0xe7, 0x1f, 0xa3, 0x36, 0x35,
- 0x25, 0x33, 0xd9, 0xc0, 0x54, 0x38, 0x6e, 0x6b,
- 0x80, 0xcf, 0x50, 0xa4, 0xb6, 0x21, 0x17, 0xfd,
- 0x9b, 0x5c, 0x36, 0xca, 0xcc, 0x73, 0x73, 0xad,
- 0xe0, 0x57, 0x77, 0x90, 0x0e, 0x7f, 0x0f, 0x87,
- 0x7f, 0xdb, 0x73, 0xbf, 0xda, 0xc2, 0xb3, 0x05,
- 0x22, 0x06, 0xf5, 0xa3, 0xfc, 0x1e, 0x8f, 0xda,
- 0xcf, 0x49, 0xd6, 0xb3, 0x66, 0x2c, 0xb5, 0x00,
- 0xaf, 0x85, 0x6e, 0xb8, 0x5b, 0x8c, 0xa1, 0xa4,
- 0x21, 0xce, 0x40, 0xf3, 0x98, 0xac, 0xec, 0x88,
- 0x62, 0x43, 0x2a, 0xac, 0xca, 0xcf, 0xb9, 0x30,
- 0xeb, 0xfc, 0xef, 0xf0, 0x6e, 0x64, 0x6d, 0xe7,
- 0x54, 0x88, 0x6b, 0x22, 0x29, 0xbe, 0xa5, 0x8c,
- 0x31, 0x23, 0x3b, 0x4a, 0x80, 0x37, 0xe6, 0xd0,
- 0x05, 0xfc, 0x10, 0x0e, 0xdd, 0xbb, 0x00, 0xc5,
- 0x07, 0x20, 0x59, 0xd3, 0x41, 0x17, 0x86, 0x46,
- 0xab, 0x68, 0xf6, 0x48, 0x3c, 0xea, 0x5a, 0x06,
- 0x30, 0x21, 0x19, 0xed, 0x74, 0xbe, 0x0b, 0x97,
- 0xee, 0x91, 0x35, 0x94, 0x1f, 0xcb, 0x68, 0x7f,
- 0xe4, 0x48, 0xb0, 0x16, 0xfb, 0xf0, 0x74, 0xdb,
- 0x06, 0x59, 0x2e, 0x5a, 0x9c, 0xce, 0x8f, 0x7d,
- 0xba, 0x48, 0xd5, 0x3f, 0x5c, 0xb0, 0xc2, 0x33,
- 0x48, 0x60, 0x17, 0x08, 0x85, 0xba, 0xff, 0xb9,
- 0x34, 0x0a, 0x3d, 0x8f, 0x21, 0x13, 0x12, 0x1b
-};
-
-static const uint8_t AES_CBC_ciphertext_1536B[] = {
- 0x89, 0x93, 0x05, 0x99, 0xa9, 0xed, 0xea, 0x62,
- 0xc9, 0xda, 0x51, 0x15, 0xce, 0x42, 0x91, 0xc3,
- 0x80, 0xc8, 0x03, 0x88, 0xc2, 0x63, 0xda, 0x53,
- 0x1a, 0xf3, 0xeb, 0xd5, 0xba, 0x6f, 0x23, 0xb2,
- 0xed, 0x8f, 0x89, 0xb1, 0xb3, 0xca, 0x90, 0x7a,
- 0xdd, 0x3f, 0xf6, 0xca, 0x86, 0x58, 0x54, 0xbc,
- 0xab, 0x0f, 0xf4, 0xab, 0x6d, 0x5d, 0x42, 0xd0,
- 0x17, 0x49, 0x17, 0xd1, 0x93, 0xea, 0xe8, 0x22,
- 0xc1, 0x34, 0x9f, 0x3a, 0x3b, 0xaa, 0xe9, 0x1b,
- 0x93, 0xff, 0x6b, 0x68, 0xba, 0xe6, 0xd2, 0x39,
- 0x3d, 0x55, 0x34, 0x8f, 0x98, 0x86, 0xb4, 0xd8,
- 0x7c, 0x0d, 0x3e, 0x01, 0x63, 0x04, 0x01, 0xff,
- 0x16, 0x0f, 0x51, 0x5f, 0x73, 0x53, 0xf0, 0x3a,
- 0x38, 0xb4, 0x4d, 0x8d, 0xaf, 0xa3, 0xca, 0x2f,
- 0x6f, 0xdf, 0xc0, 0x41, 0x6c, 0x48, 0x60, 0x1a,
- 0xe4, 0xe7, 0x8a, 0x65, 0x6f, 0x8d, 0xd7, 0xe1,
- 0x10, 0xab, 0x78, 0x5b, 0xb9, 0x69, 0x1f, 0xe0,
- 0x5c, 0xf1, 0x19, 0x12, 0x21, 0xc7, 0x51, 0xbc,
- 0x61, 0x5f, 0xc0, 0x36, 0x17, 0xc0, 0x28, 0xd9,
- 0x51, 0xcb, 0x43, 0xd9, 0xfa, 0xd1, 0xad, 0x79,
- 0x69, 0x86, 0x49, 0xc5, 0xe5, 0x69, 0x27, 0xce,
- 0x22, 0xd0, 0xe1, 0x6a, 0xf9, 0x02, 0xca, 0x6c,
- 0x34, 0xc7, 0xb8, 0x02, 0xc1, 0x38, 0x7f, 0xd5,
- 0x15, 0xf5, 0xd6, 0xeb, 0xf9, 0x30, 0x40, 0x43,
- 0xea, 0x87, 0xde, 0x35, 0xf6, 0x83, 0x59, 0x09,
- 0x68, 0x62, 0x00, 0x87, 0xb8, 0xe7, 0xca, 0x05,
- 0x0f, 0xac, 0x42, 0x58, 0x45, 0xaa, 0xc9, 0x9b,
- 0xfd, 0x2a, 0xda, 0x65, 0x33, 0x93, 0x9d, 0xc6,
- 0x93, 0x8d, 0xe2, 0xc5, 0x71, 0xc1, 0x5c, 0x13,
- 0xde, 0x7b, 0xd4, 0xb9, 0x4c, 0x35, 0x61, 0x85,
- 0x90, 0x78, 0xf7, 0x81, 0x98, 0x45, 0x99, 0x24,
- 0x58, 0x73, 0x28, 0xf8, 0x31, 0xab, 0x54, 0x2e,
- 0xc0, 0x38, 0x77, 0x25, 0x5c, 0x06, 0x9c, 0xc3,
- 0x69, 0x21, 0x92, 0x76, 0xe1, 0x16, 0xdc, 0xa9,
- 0xee, 0xb6, 0x80, 0x66, 0x43, 0x11, 0x24, 0xb3,
- 0x07, 0x17, 0x89, 0x0f, 0xcb, 0xe0, 0x60, 0xa8,
- 0x9d, 0x06, 0x4b, 0x6e, 0x72, 0xb7, 0xbc, 0x4f,
- 0xb8, 0xc0, 0x80, 0xa2, 0xfb, 0x46, 0x5b, 0x8f,
- 0x11, 0x01, 0x92, 0x9d, 0x37, 0x09, 0x98, 0xc8,
- 0x0a, 0x46, 0xae, 0x12, 0xac, 0x61, 0x3f, 0xe7,
- 0x41, 0x1a, 0xaa, 0x2e, 0xdc, 0xd7, 0x2a, 0x47,
- 0xee, 0xdf, 0x08, 0xd1, 0xff, 0xea, 0x13, 0xc6,
- 0x05, 0xdb, 0x29, 0xcc, 0x03, 0xba, 0x7b, 0x6d,
- 0x40, 0xc1, 0xc9, 0x76, 0x75, 0x03, 0x7a, 0x71,
- 0xc9, 0x5f, 0xd9, 0xe0, 0x61, 0x69, 0x36, 0x8f,
- 0xb2, 0xbc, 0x28, 0xf3, 0x90, 0x71, 0xda, 0x5f,
- 0x08, 0xd5, 0x0d, 0xc1, 0xe6, 0xbd, 0x2b, 0xc6,
- 0x6c, 0x42, 0xfd, 0xbf, 0x10, 0xe8, 0x5f, 0x87,
- 0x3d, 0x21, 0x42, 0x85, 0x01, 0x0a, 0xbf, 0x8e,
- 0x49, 0xd3, 0x9c, 0x89, 0x3b, 0xea, 0xe1, 0xbf,
- 0xe9, 0x9b, 0x5e, 0x0e, 0xb8, 0xeb, 0xcd, 0x3a,
- 0xf6, 0x29, 0x41, 0x35, 0xdd, 0x9b, 0x13, 0x24,
- 0xe0, 0x1d, 0x8a, 0xcb, 0x20, 0xf8, 0x41, 0x51,
- 0x3e, 0x23, 0x8c, 0x67, 0x98, 0x39, 0x53, 0x77,
- 0x2a, 0x68, 0xf4, 0x3c, 0x7e, 0xd6, 0xc4, 0x6e,
- 0xf1, 0x53, 0xe9, 0xd8, 0x5c, 0xc1, 0xa9, 0x38,
- 0x6f, 0x5e, 0xe4, 0xd4, 0x29, 0x1c, 0x6c, 0xee,
- 0x2f, 0xea, 0xde, 0x61, 0x71, 0x5a, 0xea, 0xce,
- 0x23, 0x6e, 0x1b, 0x16, 0x43, 0xb7, 0xc0, 0xe3,
- 0x87, 0xa1, 0x95, 0x1e, 0x97, 0x4d, 0xea, 0xa6,
- 0xf7, 0x25, 0xac, 0x82, 0x2a, 0xd3, 0xa6, 0x99,
- 0x75, 0xdd, 0xc1, 0x55, 0x32, 0x6b, 0xea, 0x33,
- 0x88, 0xce, 0x06, 0xac, 0x15, 0x39, 0x19, 0xa3,
- 0x59, 0xaf, 0x7a, 0x1f, 0xd9, 0x72, 0x5e, 0xf7,
- 0x4c, 0xf3, 0x5d, 0x6b, 0xf2, 0x16, 0x92, 0xa8,
- 0x9e, 0x3d, 0xd4, 0x4c, 0x72, 0x55, 0x4e, 0x4a,
- 0xf7, 0x8b, 0x2f, 0x67, 0x5a, 0x90, 0xb7, 0xcf,
- 0x16, 0xd3, 0x7b, 0x5a, 0x9a, 0xc8, 0x9f, 0xbf,
- 0x01, 0x76, 0x3b, 0x86, 0x2c, 0x2a, 0x78, 0x10,
- 0x70, 0x05, 0x38, 0xf9, 0xdd, 0x2a, 0x1d, 0x00,
- 0x25, 0xb7, 0x10, 0xac, 0x3b, 0x3c, 0x4d, 0x3c,
- 0x01, 0x68, 0x3c, 0x5a, 0x29, 0xc2, 0xa0, 0x1b,
- 0x95, 0x67, 0xf9, 0x0a, 0x60, 0xb7, 0x11, 0x9c,
- 0x40, 0x45, 0xd7, 0xb0, 0xda, 0x49, 0x87, 0xcd,
- 0xb0, 0x9b, 0x61, 0x8c, 0xf4, 0x0d, 0x94, 0x1d,
- 0x79, 0x66, 0x13, 0x0b, 0xc6, 0x6b, 0x19, 0xee,
- 0xa0, 0x6b, 0x64, 0x7d, 0xc4, 0xff, 0x98, 0x72,
- 0x60, 0xab, 0x7f, 0x0f, 0x4d, 0x5d, 0x6b, 0xc3,
- 0xba, 0x5e, 0x0d, 0x04, 0xd9, 0x59, 0x17, 0xd0,
- 0x64, 0xbe, 0xfb, 0x58, 0xfc, 0xed, 0x18, 0xf6,
- 0xac, 0x19, 0xa4, 0xfd, 0x16, 0x59, 0x80, 0x58,
- 0xb8, 0x0f, 0x79, 0x24, 0x60, 0x18, 0x62, 0xa9,
- 0xa3, 0xa0, 0xe8, 0x81, 0xd6, 0xec, 0x5b, 0xfe,
- 0x5b, 0xb8, 0xa4, 0x00, 0xa9, 0xd0, 0x90, 0x17,
- 0xe5, 0x50, 0x3d, 0x2b, 0x12, 0x6e, 0x2a, 0x13,
- 0x65, 0x7c, 0xdf, 0xdf, 0xa7, 0xdd, 0x9f, 0x78,
- 0x5f, 0x8f, 0x4e, 0x90, 0xa6, 0x10, 0xe4, 0x7b,
- 0x68, 0x6b, 0xfd, 0xa9, 0x6d, 0x47, 0xfa, 0xec,
- 0x42, 0x35, 0x07, 0x12, 0x3e, 0x78, 0x23, 0x15,
- 0xff, 0xe2, 0x65, 0xc7, 0x47, 0x89, 0x2f, 0x97,
- 0x7c, 0xd7, 0x6b, 0x69, 0x35, 0x79, 0x6f, 0x85,
- 0xb4, 0xa9, 0x75, 0x04, 0x32, 0x9a, 0xfe, 0xf0,
- 0xce, 0xe3, 0xf1, 0xab, 0x15, 0x47, 0xe4, 0x9c,
- 0xc1, 0x48, 0x32, 0x3c, 0xbe, 0x44, 0x72, 0xc9,
- 0xaa, 0x50, 0x37, 0xa6, 0xbe, 0x41, 0xcf, 0xe8,
- 0x17, 0x4e, 0x37, 0xbe, 0xf1, 0x34, 0x2c, 0xd9,
- 0x60, 0x48, 0x09, 0xa5, 0x26, 0x00, 0x31, 0x77,
- 0x4e, 0xac, 0x7c, 0x89, 0x75, 0xe3, 0xde, 0x26,
- 0x4c, 0x32, 0x54, 0x27, 0x8e, 0x92, 0x26, 0x42,
- 0x85, 0x76, 0x01, 0x76, 0x62, 0x4c, 0x29, 0xe9,
- 0x38, 0x05, 0x51, 0x54, 0x97, 0xa3, 0x03, 0x59,
- 0x5e, 0xec, 0x0c, 0xe4, 0x96, 0xb7, 0x15, 0xa8,
- 0x41, 0x06, 0x2b, 0x78, 0x95, 0x24, 0xf6, 0x32,
- 0xc5, 0xec, 0xd7, 0x89, 0x28, 0x1e, 0xec, 0xb1,
- 0xc7, 0x21, 0x0c, 0xd3, 0x80, 0x7c, 0x5a, 0xe6,
- 0xb1, 0x3a, 0x52, 0x33, 0x84, 0x4e, 0x32, 0x6e,
- 0x7a, 0xf6, 0x43, 0x15, 0x5b, 0xa6, 0xba, 0xeb,
- 0xa8, 0xe4, 0xff, 0x4f, 0xbd, 0xbd, 0xa8, 0x5e,
- 0xbe, 0x27, 0xaf, 0xc5, 0xf7, 0x9e, 0xdf, 0x48,
- 0x22, 0xca, 0x6a, 0x0b, 0x3c, 0xd7, 0xe0, 0xdc,
- 0xf3, 0x71, 0x08, 0xdc, 0x28, 0x13, 0x08, 0xf2,
- 0x08, 0x1d, 0x9d, 0x7b, 0xd9, 0xde, 0x6f, 0xe6,
- 0xe8, 0x88, 0x18, 0xc2, 0xcd, 0x93, 0xc5, 0x38,
- 0x21, 0x68, 0x4c, 0x9a, 0xfb, 0xb6, 0x18, 0x16,
- 0x73, 0x2c, 0x1d, 0x6f, 0x95, 0xfb, 0x65, 0x4f,
- 0x7c, 0xec, 0x8d, 0x6c, 0xa8, 0xc0, 0x55, 0x28,
- 0xc6, 0xc3, 0xea, 0xeb, 0x05, 0xf5, 0x65, 0xeb,
- 0x53, 0xe1, 0x54, 0xef, 0xb8, 0x64, 0x98, 0x2d,
- 0x98, 0x9e, 0xc8, 0xfe, 0xa2, 0x07, 0x30, 0xf7,
- 0xf7, 0xae, 0xdb, 0x32, 0xf8, 0x71, 0x9d, 0x06,
- 0xdf, 0x9b, 0xda, 0x61, 0x7d, 0xdb, 0xae, 0x06,
- 0x24, 0x63, 0x74, 0xb6, 0xf3, 0x1b, 0x66, 0x09,
- 0x60, 0xff, 0x2b, 0x29, 0xf5, 0xa9, 0x9d, 0x61,
- 0x5d, 0x55, 0x10, 0x82, 0x21, 0xbb, 0x64, 0x0d,
- 0xef, 0x5c, 0xe3, 0x30, 0x1b, 0x60, 0x1e, 0x5b,
- 0xfe, 0x6c, 0xf5, 0x15, 0xa3, 0x86, 0x27, 0x58,
- 0x46, 0x00, 0x20, 0xcb, 0x86, 0x9a, 0x52, 0x29,
- 0x20, 0x68, 0x4d, 0x67, 0x88, 0x70, 0xc2, 0x31,
- 0xd8, 0xbb, 0xa5, 0xa7, 0x88, 0x7f, 0x66, 0xbc,
- 0xaa, 0x0f, 0xe1, 0x78, 0x7b, 0x97, 0x3c, 0xb7,
- 0xd7, 0xd8, 0x04, 0xe0, 0x09, 0x60, 0xc8, 0xd0,
- 0x9e, 0xe5, 0x6b, 0x31, 0x7f, 0x88, 0xfe, 0xc3,
- 0xfd, 0x89, 0xec, 0x76, 0x4b, 0xb3, 0xa7, 0x37,
- 0x03, 0xb7, 0xc6, 0x10, 0x7c, 0x9d, 0x0c, 0x75,
- 0xd3, 0x08, 0x14, 0x94, 0x03, 0x42, 0x25, 0x26,
- 0x85, 0xf7, 0xf0, 0x90, 0x06, 0x3e, 0x6f, 0x60,
- 0x52, 0x55, 0xd5, 0x0f, 0x79, 0x64, 0x69, 0x69,
- 0x46, 0xf9, 0x7f, 0x7f, 0x03, 0xf1, 0x1f, 0xdb,
- 0x39, 0x05, 0xba, 0x4a, 0x8f, 0x17, 0xe7, 0xba,
- 0xe2, 0x07, 0x7c, 0x1d, 0x9e, 0xbc, 0x94, 0xc0,
- 0x61, 0x59, 0x8e, 0x72, 0xaf, 0xfc, 0x99, 0xe4,
- 0xd5, 0xa8, 0xee, 0x0a, 0x48, 0x2d, 0x82, 0x8b,
- 0x34, 0x54, 0x8a, 0xce, 0xc7, 0xfa, 0xdd, 0xba,
- 0x54, 0xdf, 0xb3, 0x30, 0x33, 0x73, 0x2e, 0xd5,
- 0x52, 0xab, 0x49, 0x91, 0x4e, 0x0a, 0xd6, 0x2f,
- 0x67, 0xe4, 0xdd, 0x64, 0x48, 0x16, 0xd9, 0x85,
- 0xaa, 0x52, 0xa5, 0x0b, 0xd3, 0xb4, 0x2d, 0x77,
- 0x5e, 0x52, 0x77, 0x17, 0xcf, 0xbe, 0x88, 0x04,
- 0x01, 0x52, 0xe2, 0xf1, 0x46, 0xe2, 0x91, 0x30,
- 0x65, 0xcf, 0xc0, 0x65, 0x45, 0xc3, 0x7e, 0xf4,
- 0x2e, 0xb5, 0xaf, 0x6f, 0xab, 0x1a, 0xfa, 0x70,
- 0x35, 0xb8, 0x4f, 0x2d, 0x78, 0x90, 0x33, 0xb5,
- 0x9a, 0x67, 0xdb, 0x2f, 0x28, 0x32, 0xb6, 0x54,
- 0xab, 0x4c, 0x6b, 0x85, 0xed, 0x6c, 0x3e, 0x05,
- 0x2a, 0xc7, 0x32, 0xe8, 0xf5, 0xa3, 0x7b, 0x4e,
- 0x7b, 0x58, 0x24, 0x73, 0xf7, 0xfd, 0xc7, 0xc8,
- 0x6c, 0x71, 0x68, 0xb1, 0xf6, 0xc5, 0x9e, 0x1e,
- 0xe3, 0x5c, 0x25, 0xc0, 0x5b, 0x3e, 0x59, 0xa1,
- 0x18, 0x5a, 0xe8, 0xb5, 0xd1, 0x44, 0x13, 0xa3,
- 0xe6, 0x05, 0x76, 0xd2, 0x8d, 0x6e, 0x54, 0x68,
- 0x0c, 0xa4, 0x7b, 0x8b, 0xd3, 0x8c, 0x42, 0x13,
- 0x87, 0xda, 0xdf, 0x8f, 0xa5, 0x83, 0x7a, 0x42,
- 0x99, 0xb7, 0xeb, 0xe2, 0x79, 0xe0, 0xdb, 0xda,
- 0x33, 0xa8, 0x50, 0x3a, 0xd7, 0xe7, 0xd3, 0x61,
- 0x18, 0xb8, 0xaa, 0x2d, 0xc8, 0xd8, 0x2c, 0x28,
- 0xe5, 0x97, 0x0a, 0x7c, 0x6c, 0x7f, 0x09, 0xd7,
- 0x88, 0x80, 0xac, 0x12, 0xed, 0xf8, 0xc6, 0xb5,
- 0x2d, 0xd6, 0x63, 0x9b, 0x98, 0x35, 0x26, 0xde,
- 0xf6, 0x31, 0xee, 0x7e, 0xa0, 0xfb, 0x16, 0x98,
- 0xb1, 0x96, 0x1d, 0xee, 0xe3, 0x2f, 0xfb, 0x41,
- 0xdd, 0xea, 0x10, 0x1e, 0x03, 0x89, 0x18, 0xd2,
- 0x47, 0x0c, 0xa0, 0x57, 0xda, 0x76, 0x3a, 0x37,
- 0x2c, 0xe4, 0xf9, 0x77, 0xc8, 0x43, 0x5f, 0xcb,
- 0xd6, 0x85, 0xf7, 0x22, 0xe4, 0x32, 0x25, 0xa8,
- 0xdc, 0x21, 0xc0, 0xf5, 0x95, 0xb2, 0xf8, 0x83,
- 0xf0, 0x65, 0x61, 0x15, 0x48, 0x94, 0xb7, 0x03,
- 0x7f, 0x66, 0xa1, 0x39, 0x1f, 0xdd, 0xce, 0x96,
- 0xfe, 0x58, 0x81, 0x3d, 0x41, 0x11, 0x87, 0x13,
- 0x26, 0x1b, 0x6d, 0xf3, 0xca, 0x2e, 0x2c, 0x76,
- 0xd3, 0x2f, 0x6d, 0x49, 0x70, 0x53, 0x05, 0x96,
- 0xcc, 0x30, 0x2b, 0x83, 0xf2, 0xc6, 0xb2, 0x4b,
- 0x22, 0x13, 0x95, 0x42, 0xeb, 0x56, 0x4d, 0x22,
- 0xe6, 0x43, 0x6f, 0xba, 0xe7, 0x3b, 0xe5, 0x59,
- 0xce, 0x57, 0x88, 0x85, 0xb6, 0xbf, 0x15, 0x37,
- 0xb3, 0x7a, 0x7e, 0xc4, 0xbc, 0x99, 0xfc, 0xe4,
- 0x89, 0x00, 0x68, 0x39, 0xbc, 0x5a, 0xba, 0xab,
- 0x52, 0xab, 0xe6, 0x81, 0xfd, 0x93, 0x62, 0xe9,
- 0xb7, 0x12, 0xd1, 0x18, 0x1a, 0xb9, 0x55, 0x4a,
- 0x0f, 0xae, 0x35, 0x11, 0x04, 0x27, 0xf3, 0x42,
- 0x4e, 0xca, 0xdf, 0x9f, 0x12, 0x62, 0xea, 0x03,
- 0xc0, 0xa9, 0x22, 0x7b, 0x6c, 0x6c, 0xe3, 0xdf,
- 0x16, 0xad, 0x03, 0xc9, 0xfe, 0xa4, 0xdd, 0x4f
-};
-
-static const uint8_t AES_CBC_ciphertext_1792B[] = {
- 0x59, 0xcc, 0xfe, 0x8f, 0xb4, 0x9d, 0x0e, 0xd1,
- 0x85, 0xfc, 0x9b, 0x43, 0xc1, 0xb7, 0x54, 0x67,
- 0x01, 0xef, 0xb8, 0x71, 0x36, 0xdb, 0x50, 0x48,
- 0x7a, 0xea, 0xcf, 0xce, 0xba, 0x30, 0x10, 0x2e,
- 0x96, 0x2b, 0xfd, 0xcf, 0x00, 0xe3, 0x1f, 0xac,
- 0x66, 0x14, 0x30, 0x86, 0x49, 0xdb, 0x01, 0x8b,
- 0x07, 0xdd, 0x00, 0x9d, 0x0d, 0x5c, 0x19, 0x11,
- 0xe8, 0x44, 0x2b, 0x25, 0x70, 0xed, 0x7c, 0x33,
- 0x0d, 0xe3, 0x34, 0x93, 0x63, 0xad, 0x26, 0xb1,
- 0x11, 0x91, 0x34, 0x2e, 0x1d, 0x50, 0xaa, 0xd4,
- 0xef, 0x3a, 0x6d, 0xd7, 0x33, 0x20, 0x0d, 0x3f,
- 0x9b, 0xdd, 0xc3, 0xa5, 0xc5, 0xf1, 0x99, 0xdc,
- 0xea, 0x52, 0xda, 0x55, 0xea, 0xa2, 0x7a, 0xc5,
- 0x78, 0x44, 0x4a, 0x02, 0x33, 0x19, 0x62, 0x37,
- 0xf8, 0x8b, 0xd1, 0x0c, 0x21, 0xdf, 0x40, 0x19,
- 0x81, 0xea, 0xfb, 0x1c, 0xa7, 0xcc, 0x60, 0xfe,
- 0x63, 0x25, 0x8f, 0xf3, 0x73, 0x0f, 0x45, 0xe6,
- 0x6a, 0x18, 0xbf, 0xbe, 0xad, 0x92, 0x2a, 0x1e,
- 0x15, 0x65, 0x6f, 0xef, 0x92, 0xcd, 0x0e, 0x19,
- 0x3d, 0x42, 0xa8, 0xfc, 0x0d, 0x32, 0x58, 0xe0,
- 0x56, 0x9f, 0xd6, 0x9b, 0x8b, 0xec, 0xe0, 0x45,
- 0x4d, 0x7e, 0x73, 0x87, 0xff, 0x74, 0x92, 0x59,
- 0x60, 0x13, 0x93, 0xda, 0xec, 0xbf, 0xfa, 0x20,
- 0xb6, 0xe7, 0xdf, 0xc7, 0x10, 0xf5, 0x79, 0xb4,
- 0xd7, 0xac, 0xaf, 0x2b, 0x37, 0x52, 0x30, 0x1d,
- 0xbe, 0x0f, 0x60, 0x77, 0x3d, 0x03, 0x63, 0xa9,
- 0xae, 0xb1, 0xf3, 0xca, 0xca, 0xb4, 0x21, 0xd7,
- 0x6f, 0x2e, 0x5e, 0x9b, 0x68, 0x53, 0x80, 0xab,
- 0x30, 0x23, 0x0a, 0x72, 0x6b, 0xb1, 0xd8, 0x25,
- 0x5d, 0x3a, 0x62, 0x9b, 0x4f, 0x59, 0x3b, 0x79,
- 0xa8, 0x9e, 0x08, 0x6d, 0x37, 0xb0, 0xfc, 0x42,
- 0x51, 0x25, 0x86, 0xbd, 0x54, 0x5a, 0x95, 0x20,
- 0x6c, 0xac, 0xb9, 0x30, 0x1c, 0x03, 0xc9, 0x49,
- 0x38, 0x55, 0x31, 0x49, 0xed, 0xa9, 0x0e, 0xc3,
- 0x65, 0xb4, 0x68, 0x6b, 0x07, 0x4c, 0x0a, 0xf9,
- 0x21, 0x69, 0x7c, 0x9f, 0x28, 0x80, 0xe9, 0x49,
- 0x22, 0x7c, 0xec, 0x97, 0xf7, 0x70, 0xb4, 0xb8,
- 0x25, 0xe7, 0x80, 0x2c, 0x43, 0x24, 0x8a, 0x2e,
- 0xac, 0xa2, 0x84, 0x20, 0xe7, 0xf4, 0x6b, 0x86,
- 0x37, 0x05, 0xc7, 0x59, 0x04, 0x49, 0x2a, 0x99,
- 0x80, 0x46, 0x32, 0x19, 0xe6, 0x30, 0xce, 0xc0,
- 0xef, 0x6e, 0xec, 0xe5, 0x2f, 0x24, 0xc1, 0x78,
- 0x45, 0x02, 0xd3, 0x64, 0x99, 0xf5, 0xc7, 0xbc,
- 0x8f, 0x8c, 0x75, 0xb1, 0x0a, 0xc8, 0xc3, 0xbd,
- 0x5e, 0x7e, 0xbd, 0x0e, 0xdf, 0x4b, 0x96, 0x6a,
- 0xfd, 0x03, 0xdb, 0xd1, 0x31, 0x1e, 0x27, 0xf9,
- 0xe5, 0x83, 0x9a, 0xfc, 0x13, 0x4c, 0xd3, 0x04,
- 0xdb, 0xdb, 0x3f, 0x35, 0x93, 0x4e, 0x14, 0x6b,
- 0x00, 0x5c, 0xb6, 0x11, 0x50, 0xee, 0x61, 0x5c,
- 0x10, 0x5c, 0xd0, 0x90, 0x02, 0x2e, 0x12, 0xe0,
- 0x50, 0x44, 0xad, 0x75, 0xcd, 0x94, 0xcf, 0x92,
- 0xcb, 0xe3, 0xe8, 0x77, 0x4b, 0xd7, 0x1a, 0x7c,
- 0xdd, 0x6b, 0x49, 0x21, 0x7c, 0xe8, 0x2c, 0x25,
- 0x49, 0x86, 0x1e, 0x54, 0xae, 0xfc, 0x0e, 0x80,
- 0xb1, 0xd5, 0xa5, 0x23, 0xcf, 0xcc, 0x0e, 0x11,
- 0xe2, 0x7c, 0x3c, 0x25, 0x78, 0x64, 0x03, 0xa1,
- 0xdd, 0x9f, 0x74, 0x12, 0x7b, 0x21, 0xb5, 0x73,
- 0x15, 0x3c, 0xed, 0xad, 0x07, 0x62, 0x21, 0x79,
- 0xd4, 0x2f, 0x0d, 0x72, 0xe9, 0x7c, 0x6b, 0x96,
- 0x6e, 0xe5, 0x36, 0x4a, 0xd2, 0x38, 0xe1, 0xff,
- 0x6e, 0x26, 0xa4, 0xac, 0x83, 0x07, 0xe6, 0x67,
- 0x74, 0x6c, 0xec, 0x8b, 0x4b, 0x79, 0x33, 0x50,
- 0x2f, 0x8f, 0xa0, 0x8f, 0xfa, 0x38, 0x6a, 0xa2,
- 0x3a, 0x42, 0x85, 0x15, 0x90, 0xd0, 0xb3, 0x0d,
- 0x8a, 0xe4, 0x60, 0x03, 0xef, 0xf9, 0x65, 0x8a,
- 0x4e, 0x50, 0x8c, 0x65, 0xba, 0x61, 0x16, 0xc3,
- 0x93, 0xb7, 0x75, 0x21, 0x98, 0x25, 0x60, 0x6e,
- 0x3d, 0x68, 0xba, 0x7c, 0xe4, 0xf3, 0xd9, 0x9b,
- 0xfb, 0x7a, 0xed, 0x1f, 0xb3, 0x4b, 0x88, 0x74,
- 0x2c, 0xb8, 0x8c, 0x22, 0x95, 0xce, 0x90, 0xf1,
- 0xdb, 0x80, 0xa6, 0x39, 0xae, 0x82, 0xa1, 0xef,
- 0x75, 0xec, 0xfe, 0xf1, 0xe8, 0x04, 0xfd, 0x99,
- 0x1b, 0x5f, 0x45, 0x87, 0x4f, 0xfa, 0xa2, 0x3e,
- 0x3e, 0xb5, 0x01, 0x4b, 0x46, 0xeb, 0x13, 0x9a,
- 0xe4, 0x7d, 0x03, 0x87, 0xb1, 0x59, 0x91, 0x8e,
- 0x37, 0xd3, 0x16, 0xce, 0xef, 0x4b, 0xe9, 0x46,
- 0x8d, 0x2a, 0x50, 0x2f, 0x41, 0xd3, 0x7b, 0xcf,
- 0xf0, 0xb7, 0x8b, 0x65, 0x0f, 0xa3, 0x27, 0x10,
- 0xe9, 0xa9, 0xe9, 0x2c, 0xbe, 0xbb, 0x82, 0xe3,
- 0x7b, 0x0b, 0x81, 0x3e, 0xa4, 0x6a, 0x4f, 0x3b,
- 0xd5, 0x61, 0xf8, 0x47, 0x04, 0x99, 0x5b, 0xff,
- 0xf3, 0x14, 0x6e, 0x57, 0x5b, 0xbf, 0x1b, 0xb4,
- 0x3f, 0xf9, 0x31, 0xf6, 0x95, 0xd5, 0x10, 0xa9,
- 0x72, 0x28, 0x23, 0xa9, 0x6a, 0xa2, 0xcf, 0x7d,
- 0xe3, 0x18, 0x95, 0xda, 0xbc, 0x6f, 0xe9, 0xd8,
- 0xef, 0x49, 0x3f, 0xd3, 0xef, 0x1f, 0xe1, 0x50,
- 0xe8, 0x8a, 0xc0, 0xce, 0xcc, 0xb7, 0x5e, 0x0e,
- 0x8b, 0x95, 0x80, 0xfd, 0x58, 0x2a, 0x9b, 0xc8,
- 0xb4, 0x17, 0x04, 0x46, 0x74, 0xd4, 0x68, 0x91,
- 0x33, 0xc8, 0x31, 0x15, 0x84, 0x16, 0x35, 0x03,
- 0x64, 0x6d, 0xa9, 0x4e, 0x20, 0xeb, 0xa9, 0x3f,
- 0x21, 0x5e, 0x9b, 0x09, 0xc3, 0x45, 0xf8, 0x7c,
- 0x59, 0x62, 0x29, 0x9a, 0x5c, 0xcf, 0xb4, 0x27,
- 0x5e, 0x13, 0xea, 0xb3, 0xef, 0xd9, 0x01, 0x2a,
- 0x65, 0x5f, 0x14, 0xf4, 0xbf, 0x28, 0x89, 0x3d,
- 0xdd, 0x9d, 0x52, 0xbd, 0x9e, 0x5b, 0x3b, 0xd2,
- 0xc2, 0x81, 0x35, 0xb6, 0xac, 0xdd, 0x27, 0xc3,
- 0x7b, 0x01, 0x5a, 0x6d, 0x4c, 0x5e, 0x2c, 0x30,
- 0xcb, 0x3a, 0xfa, 0xc1, 0xd7, 0x31, 0x67, 0x3e,
- 0x08, 0x6a, 0xe8, 0x8c, 0x75, 0xac, 0x1a, 0x6a,
- 0x52, 0xf7, 0x51, 0xcd, 0x85, 0x3f, 0x3c, 0xa7,
- 0xea, 0xbc, 0xd7, 0x18, 0x9e, 0x27, 0x73, 0xe6,
- 0x2b, 0x58, 0xb6, 0xd2, 0x29, 0x68, 0xd5, 0x8f,
- 0x00, 0x4d, 0x55, 0xf6, 0x61, 0x5a, 0xcc, 0x51,
- 0xa6, 0x5e, 0x85, 0xcb, 0x0b, 0xfd, 0x06, 0xca,
- 0xf5, 0xbf, 0x0d, 0x13, 0x74, 0x78, 0x6d, 0x9e,
- 0x20, 0x11, 0x84, 0x3e, 0x78, 0x17, 0x04, 0x4f,
- 0x64, 0x2c, 0x3b, 0x3e, 0x93, 0x7b, 0x58, 0x33,
- 0x07, 0x52, 0xf7, 0x60, 0x6a, 0xa8, 0x3b, 0x19,
- 0x27, 0x7a, 0x93, 0xc5, 0x53, 0xad, 0xec, 0xf6,
- 0xc8, 0x94, 0xee, 0x92, 0xea, 0xee, 0x7e, 0xea,
- 0xb9, 0x5f, 0xac, 0x59, 0x5d, 0x2e, 0x78, 0x53,
- 0x72, 0x81, 0x92, 0xdd, 0x1c, 0x63, 0xbe, 0x02,
- 0xeb, 0xa8, 0x1b, 0x2a, 0x6e, 0x72, 0xe3, 0x2d,
- 0x84, 0x0d, 0x8a, 0x22, 0xf6, 0xba, 0xab, 0x04,
- 0x8e, 0x04, 0x24, 0xdb, 0xcc, 0xe2, 0x69, 0xeb,
- 0x4e, 0xfa, 0x6b, 0x5b, 0xc8, 0xc0, 0xd9, 0x25,
- 0xcb, 0x40, 0x8d, 0x4b, 0x8e, 0xa0, 0xd4, 0x72,
- 0x98, 0x36, 0x46, 0x3b, 0x4f, 0x5f, 0x96, 0x84,
- 0x03, 0x28, 0x86, 0x4d, 0xa1, 0x8a, 0xd7, 0xb2,
- 0x5b, 0x27, 0x01, 0x80, 0x62, 0x49, 0x56, 0xb9,
- 0xa0, 0xa1, 0xe3, 0x6e, 0x22, 0x2a, 0x5d, 0x03,
- 0x86, 0x40, 0x36, 0x22, 0x5e, 0xd2, 0xe5, 0xc0,
- 0x6b, 0xfa, 0xac, 0x80, 0x4e, 0x09, 0x99, 0xbc,
- 0x2f, 0x9b, 0xcc, 0xf3, 0x4e, 0xf7, 0x99, 0x98,
- 0x11, 0x6e, 0x6f, 0x62, 0x22, 0x6b, 0x92, 0x95,
- 0x3b, 0xc3, 0xd2, 0x8e, 0x0f, 0x07, 0xc2, 0x51,
- 0x5c, 0x4d, 0xb2, 0x6e, 0xc0, 0x27, 0x73, 0xcd,
- 0x57, 0xb7, 0xf0, 0xe9, 0x2e, 0xc8, 0xe2, 0x0c,
- 0xd1, 0xb5, 0x0f, 0xff, 0xf9, 0xec, 0x38, 0xba,
- 0x97, 0xd6, 0x94, 0x9b, 0xd1, 0x79, 0xb6, 0x6a,
- 0x01, 0x17, 0xe4, 0x7e, 0xa6, 0xd5, 0x86, 0x19,
- 0xae, 0xf3, 0xf0, 0x62, 0x73, 0xc0, 0xf0, 0x0a,
- 0x7a, 0x96, 0x93, 0x72, 0x89, 0x7e, 0x25, 0x57,
- 0xf8, 0xf7, 0xd5, 0x1e, 0xe5, 0xac, 0xd6, 0x38,
- 0x4f, 0xe8, 0x81, 0xd1, 0x53, 0x41, 0x07, 0x2d,
- 0x58, 0x34, 0x1c, 0xef, 0x74, 0x2e, 0x61, 0xca,
- 0xd3, 0xeb, 0xd6, 0x93, 0x0a, 0xf2, 0xf2, 0x86,
- 0x9c, 0xe3, 0x7a, 0x52, 0xf5, 0x42, 0xf1, 0x8b,
- 0x10, 0xf2, 0x25, 0x68, 0x7e, 0x61, 0xb1, 0x19,
- 0xcf, 0x8f, 0x5a, 0x53, 0xb7, 0x68, 0x4f, 0x1a,
- 0x71, 0xe9, 0x83, 0x91, 0x3a, 0x78, 0x0f, 0xf7,
- 0xd4, 0x74, 0xf5, 0x06, 0xd2, 0x88, 0xb0, 0x06,
- 0xe5, 0xc0, 0xfb, 0xb3, 0x91, 0xad, 0xc0, 0x84,
- 0x31, 0xf2, 0x3a, 0xcf, 0x63, 0xe6, 0x4a, 0xd3,
- 0x78, 0xbe, 0xde, 0x73, 0x3e, 0x02, 0x8e, 0xb8,
- 0x3a, 0xf6, 0x55, 0xa7, 0xf8, 0x5a, 0xb5, 0x0e,
- 0x0c, 0xc5, 0xe5, 0x66, 0xd5, 0xd2, 0x18, 0xf3,
- 0xef, 0xa5, 0xc9, 0x68, 0x69, 0xe0, 0xcd, 0x00,
- 0x33, 0x99, 0x6e, 0xea, 0xcb, 0x06, 0x7a, 0xe1,
- 0xe1, 0x19, 0x0b, 0xe7, 0x08, 0xcd, 0x09, 0x1b,
- 0x85, 0xec, 0xc4, 0xd4, 0x75, 0xf0, 0xd6, 0xfb,
- 0x84, 0x95, 0x07, 0x44, 0xca, 0xa5, 0x2a, 0x6c,
- 0xc2, 0x00, 0x58, 0x08, 0x87, 0x9e, 0x0a, 0xd4,
- 0x06, 0xe2, 0x91, 0x5f, 0xb7, 0x1b, 0x11, 0xfa,
- 0x85, 0xfc, 0x7c, 0xf2, 0x0f, 0x6e, 0x3c, 0x8a,
- 0xe1, 0x0f, 0xa0, 0x33, 0x84, 0xce, 0x81, 0x4d,
- 0x32, 0x4d, 0xeb, 0x41, 0xcf, 0x5a, 0x05, 0x60,
- 0x47, 0x6c, 0x2a, 0xc4, 0x17, 0xd5, 0x16, 0x3a,
- 0xe4, 0xe7, 0xab, 0x84, 0x94, 0x22, 0xff, 0x56,
- 0xb0, 0x0c, 0x92, 0x6c, 0x19, 0x11, 0x4c, 0xb3,
- 0xed, 0x58, 0x48, 0x84, 0x2a, 0xe2, 0x19, 0x2a,
- 0xe1, 0xc0, 0x56, 0x82, 0x3c, 0x83, 0xb4, 0x58,
- 0x2d, 0xf0, 0xb5, 0x1e, 0x76, 0x85, 0x51, 0xc2,
- 0xe4, 0x95, 0x27, 0x96, 0xd1, 0x90, 0xc3, 0x17,
- 0x75, 0xa1, 0xbb, 0x46, 0x5f, 0xa6, 0xf2, 0xef,
- 0x71, 0x56, 0x92, 0xc5, 0x8a, 0x85, 0x52, 0xe4,
- 0x63, 0x21, 0x6f, 0x55, 0x85, 0x2b, 0x6b, 0x0d,
- 0xc9, 0x92, 0x77, 0x67, 0xe3, 0xff, 0x2a, 0x2b,
- 0x90, 0x01, 0x3d, 0x74, 0x63, 0x04, 0x61, 0x3c,
- 0x8e, 0xf8, 0xfc, 0x04, 0xdd, 0x21, 0x85, 0x92,
- 0x1e, 0x4d, 0x51, 0x8d, 0xb5, 0x6b, 0xf1, 0xda,
- 0x96, 0xf5, 0x8e, 0x3c, 0x38, 0x5a, 0xac, 0x9b,
- 0xba, 0x0c, 0x84, 0x5d, 0x50, 0x12, 0xc7, 0xc5,
- 0x7a, 0xcb, 0xb1, 0xfa, 0x16, 0x93, 0xdf, 0x98,
- 0xda, 0x3f, 0x49, 0xa3, 0x94, 0x78, 0x70, 0xc7,
- 0x0b, 0xb6, 0x91, 0xa6, 0x16, 0x2e, 0xcf, 0xfd,
- 0x51, 0x6a, 0x5b, 0xad, 0x7a, 0xdd, 0xa9, 0x48,
- 0x48, 0xac, 0xd6, 0x45, 0xbc, 0x23, 0x31, 0x1d,
- 0x86, 0x54, 0x8a, 0x7f, 0x04, 0x97, 0x71, 0x9e,
- 0xbc, 0x2e, 0x6b, 0xd9, 0x33, 0xc8, 0x20, 0xc9,
- 0xe0, 0x25, 0x86, 0x59, 0x15, 0xcf, 0x63, 0xe5,
- 0x99, 0xf1, 0x24, 0xf1, 0xba, 0xc4, 0x15, 0x02,
- 0xe2, 0xdb, 0xfe, 0x4a, 0xf8, 0x3b, 0x91, 0x13,
- 0x8d, 0x03, 0x81, 0x9f, 0xb3, 0x3f, 0x04, 0x03,
- 0x58, 0xc0, 0xef, 0x27, 0x82, 0x14, 0xd2, 0x7f,
- 0x93, 0x70, 0xb7, 0xb2, 0x02, 0x21, 0xb3, 0x07,
- 0x7f, 0x1c, 0xef, 0x88, 0xee, 0x29, 0x7a, 0x0b,
- 0x3d, 0x75, 0x5a, 0x93, 0xfe, 0x7f, 0x14, 0xf7,
- 0x4e, 0x4b, 0x7f, 0x21, 0x02, 0xad, 0xf9, 0x43,
- 0x29, 0x1a, 0xe8, 0x1b, 0xf5, 0x32, 0xb2, 0x96,
- 0xe6, 0xe8, 0x96, 0x20, 0x9b, 0x96, 0x8e, 0x7b,
- 0xfe, 0xd8, 0xc9, 0x9c, 0x65, 0x16, 0xd6, 0x68,
- 0x95, 0xf8, 0x22, 0xe2, 0xae, 0x84, 0x03, 0xfd,
- 0x87, 0xa2, 0x72, 0x79, 0x74, 0x95, 0xfa, 0xe1,
- 0xfe, 0xd0, 0x4e, 0x3d, 0x39, 0x2e, 0x67, 0x55,
- 0x71, 0x6c, 0x89, 0x33, 0x49, 0x0c, 0x1b, 0x46,
- 0x92, 0x31, 0x6f, 0xa6, 0xf0, 0x09, 0xbd, 0x2d,
- 0xe2, 0xca, 0xda, 0x18, 0x33, 0xce, 0x67, 0x37,
- 0xfd, 0x6f, 0xcb, 0x9d, 0xbd, 0x42, 0xbc, 0xb2,
- 0x9c, 0x28, 0xcd, 0x65, 0x3c, 0x61, 0xbc, 0xde,
- 0x9d, 0xe1, 0x2a, 0x3e, 0xbf, 0xee, 0x3c, 0xcb,
- 0xb1, 0x50, 0xa9, 0x2c, 0xbe, 0xb5, 0x43, 0xd0,
- 0xec, 0x29, 0xf9, 0x16, 0x6f, 0x31, 0xd9, 0x9b,
- 0x92, 0xb1, 0x32, 0xae, 0x0f, 0xb6, 0x9d, 0x0e,
- 0x25, 0x7f, 0x89, 0x1f, 0x1d, 0x01, 0x68, 0xab,
- 0x3d, 0xd1, 0x74, 0x5b, 0x4c, 0x38, 0x7f, 0x3d,
- 0x33, 0xa5, 0xa2, 0x9f, 0xda, 0x84, 0xa5, 0x82,
- 0x2d, 0x16, 0x66, 0x46, 0x08, 0x30, 0x14, 0x48,
- 0x5e, 0xca, 0xe3, 0xf4, 0x8c, 0xcb, 0x32, 0xc6,
- 0xf1, 0x43, 0x62, 0xc6, 0xef, 0x16, 0xfa, 0x43,
- 0xae, 0x9c, 0x53, 0xe3, 0x49, 0x45, 0x80, 0xfd,
- 0x1d, 0x8c, 0xa9, 0x6d, 0x77, 0x76, 0xaa, 0x40,
- 0xc4, 0x4e, 0x7b, 0x78, 0x6b, 0xe0, 0x1d, 0xce,
- 0x56, 0x3d, 0xf0, 0x11, 0xfe, 0x4f, 0x6a, 0x6d,
- 0x0f, 0x4f, 0x90, 0x38, 0x92, 0x17, 0xfa, 0x56,
- 0x12, 0xa6, 0xa1, 0x0a, 0xea, 0x2f, 0x50, 0xf9,
- 0x60, 0x66, 0x6c, 0x7d, 0x5a, 0x08, 0x8e, 0x3c,
- 0xf3, 0xf0, 0x33, 0x02, 0x11, 0x02, 0xfe, 0x4c,
- 0x56, 0x2b, 0x9f, 0x0c, 0xbd, 0x65, 0x8a, 0x83,
- 0xde, 0x7c, 0x05, 0x26, 0x93, 0x19, 0xcc, 0xf3,
- 0x71, 0x0e, 0xad, 0x2f, 0xb3, 0xc9, 0x38, 0x50,
- 0x64, 0xd5, 0x4c, 0x60, 0x5f, 0x02, 0x13, 0x34,
- 0xc9, 0x75, 0xc4, 0x60, 0xab, 0x2e, 0x17, 0x7d
-};
-
-static const uint8_t AES_CBC_ciphertext_2048B[] = {
- 0x8b, 0x55, 0xbd, 0xfd, 0x2b, 0x35, 0x76, 0x5c,
- 0xd1, 0x90, 0xd7, 0x6a, 0x63, 0x1e, 0x39, 0x71,
- 0x0d, 0x5c, 0xd8, 0x03, 0x00, 0x75, 0xf1, 0x07,
- 0x03, 0x8d, 0x76, 0xeb, 0x3b, 0x00, 0x1e, 0x33,
- 0x88, 0xfc, 0x8f, 0x08, 0x4d, 0x33, 0xf1, 0x3c,
- 0xee, 0xd0, 0x5d, 0x19, 0x8b, 0x3c, 0x50, 0x86,
- 0xfd, 0x8d, 0x58, 0x21, 0xb4, 0xae, 0x0f, 0x81,
- 0xe9, 0x9f, 0xc9, 0xc0, 0x90, 0xf7, 0x04, 0x6f,
- 0x39, 0x1d, 0x8a, 0x3f, 0x8d, 0x32, 0x23, 0xb5,
- 0x1f, 0xcc, 0x8a, 0x12, 0x2d, 0x46, 0x82, 0x5e,
- 0x6a, 0x34, 0x8c, 0xb1, 0x93, 0x70, 0x3b, 0xde,
- 0x55, 0xaf, 0x16, 0x35, 0x99, 0x84, 0xd5, 0x88,
- 0xc9, 0x54, 0xb1, 0xb2, 0xd3, 0xeb, 0x9e, 0x55,
- 0x9a, 0xa9, 0xa7, 0xf5, 0xda, 0x29, 0xcf, 0xe1,
- 0x98, 0x64, 0x45, 0x77, 0xf2, 0x12, 0x69, 0x8f,
- 0x78, 0xd8, 0x82, 0x41, 0xb2, 0x9f, 0xe2, 0x1c,
- 0x63, 0x9b, 0x24, 0x81, 0x67, 0x95, 0xa2, 0xff,
- 0x26, 0x9d, 0x65, 0x48, 0x61, 0x30, 0x66, 0x41,
- 0x68, 0x84, 0xbb, 0x59, 0x14, 0x8e, 0x9a, 0x62,
- 0xb6, 0xca, 0xda, 0xbe, 0x7c, 0x41, 0x52, 0x6e,
- 0x1b, 0x86, 0xbf, 0x08, 0xeb, 0x37, 0x84, 0x60,
- 0xe4, 0xc4, 0x1e, 0xa8, 0x4c, 0x84, 0x60, 0x2f,
- 0x70, 0x90, 0xf2, 0x26, 0xe7, 0x65, 0x0c, 0xc4,
- 0x58, 0x36, 0x8e, 0x4d, 0xdf, 0xff, 0x9a, 0x39,
- 0x93, 0x01, 0xcf, 0x6f, 0x6d, 0xde, 0xef, 0x79,
- 0xb0, 0xce, 0xe2, 0x98, 0xdb, 0x85, 0x8d, 0x62,
- 0x9d, 0xb9, 0x63, 0xfd, 0xf0, 0x35, 0xb5, 0xa9,
- 0x1b, 0xf9, 0xe5, 0xd4, 0x2e, 0x22, 0x2d, 0xcc,
- 0x42, 0xbf, 0x0e, 0x51, 0xf7, 0x15, 0x07, 0x32,
- 0x75, 0x5b, 0x74, 0xbb, 0x00, 0xef, 0xd4, 0x66,
- 0x8b, 0xad, 0x71, 0x53, 0x94, 0xd7, 0x7d, 0x2c,
- 0x40, 0x3e, 0x69, 0xa0, 0x4c, 0x86, 0x5e, 0x06,
- 0xed, 0xdf, 0x22, 0xe2, 0x24, 0x25, 0x4e, 0x9b,
- 0x5f, 0x49, 0x74, 0xba, 0xed, 0xb1, 0xa6, 0xeb,
- 0xae, 0x3f, 0xc6, 0x9e, 0x0b, 0x29, 0x28, 0x9a,
- 0xb6, 0xb2, 0x74, 0x58, 0xec, 0xa6, 0x4a, 0xed,
- 0xe5, 0x10, 0x00, 0x85, 0xe1, 0x63, 0x41, 0x61,
- 0x30, 0x7c, 0x97, 0xcf, 0x75, 0xcf, 0xb6, 0xf3,
- 0xf7, 0xda, 0x35, 0x3f, 0x85, 0x8c, 0x64, 0xca,
- 0xb7, 0xea, 0x7f, 0xe4, 0xa3, 0x4d, 0x30, 0x84,
- 0x8c, 0x9c, 0x80, 0x5a, 0x50, 0xa5, 0x64, 0xae,
- 0x26, 0xd3, 0xb5, 0x01, 0x73, 0x36, 0x8a, 0x92,
- 0x49, 0xc4, 0x1a, 0x94, 0x81, 0x9d, 0xf5, 0x6c,
- 0x50, 0xe1, 0x58, 0x0b, 0x75, 0xdd, 0x6b, 0x6a,
- 0xca, 0x69, 0xea, 0xc3, 0x33, 0x90, 0x9f, 0x3b,
- 0x65, 0x5d, 0x5e, 0xee, 0x31, 0xb7, 0x32, 0xfd,
- 0x56, 0x83, 0xb6, 0xfb, 0xa8, 0x04, 0xfc, 0x1e,
- 0x11, 0xfb, 0x02, 0x23, 0x53, 0x49, 0x45, 0xb1,
- 0x07, 0xfc, 0xba, 0xe7, 0x5f, 0x5d, 0x2d, 0x7f,
- 0x9e, 0x46, 0xba, 0xe9, 0xb0, 0xdb, 0x32, 0x04,
- 0xa4, 0xa7, 0x98, 0xab, 0x91, 0xcd, 0x02, 0x05,
- 0xf5, 0x74, 0x31, 0x98, 0x83, 0x3d, 0x33, 0x11,
- 0x0e, 0xe3, 0x8d, 0xa8, 0xc9, 0x0e, 0xf3, 0xb9,
- 0x47, 0x67, 0xe9, 0x79, 0x2b, 0x34, 0xcd, 0x9b,
- 0x45, 0x75, 0x29, 0xf0, 0xbf, 0xcc, 0xda, 0x3a,
- 0x91, 0xb2, 0x15, 0x27, 0x7a, 0xe5, 0xf5, 0x6a,
- 0x5e, 0xbe, 0x2c, 0x98, 0xe8, 0x40, 0x96, 0x4f,
- 0x8a, 0x09, 0xfd, 0xf6, 0xb2, 0xe7, 0x45, 0xb6,
- 0x08, 0xc1, 0x69, 0xe1, 0xb3, 0xc4, 0x24, 0x34,
- 0x07, 0x85, 0xd5, 0xa9, 0x78, 0xca, 0xfa, 0x4b,
- 0x01, 0x19, 0x4d, 0x95, 0xdc, 0xa5, 0xc1, 0x9c,
- 0xec, 0x27, 0x5b, 0xa6, 0x54, 0x25, 0xbd, 0xc8,
- 0x0a, 0xb7, 0x11, 0xfb, 0x4e, 0xeb, 0x65, 0x2e,
- 0xe1, 0x08, 0x9c, 0x3a, 0x45, 0x44, 0x33, 0xef,
- 0x0d, 0xb9, 0xff, 0x3e, 0x68, 0x9c, 0x61, 0x2b,
- 0x11, 0xb8, 0x5c, 0x47, 0x0f, 0x94, 0xf2, 0xf8,
- 0x0b, 0xbb, 0x99, 0x18, 0x85, 0xa3, 0xba, 0x44,
- 0xf3, 0x79, 0xb3, 0x63, 0x2c, 0x1f, 0x2a, 0x35,
- 0x3b, 0x23, 0x98, 0xab, 0xf4, 0x16, 0x36, 0xf8,
- 0xde, 0x86, 0xa4, 0xd4, 0x75, 0xff, 0x51, 0xf9,
- 0xeb, 0x42, 0x5f, 0x55, 0xe2, 0xbe, 0xd1, 0x5b,
- 0xb5, 0x38, 0xeb, 0xb4, 0x4d, 0xec, 0xec, 0x99,
- 0xe1, 0x39, 0x43, 0xaa, 0x64, 0xf7, 0xc9, 0xd8,
- 0xf2, 0x9a, 0x71, 0x43, 0x39, 0x17, 0xe8, 0xa8,
- 0xa2, 0xe2, 0xa4, 0x2c, 0x18, 0x11, 0x49, 0xdf,
- 0x18, 0xdd, 0x85, 0x6e, 0x65, 0x96, 0xe2, 0xba,
- 0xa1, 0x0a, 0x2c, 0xca, 0xdc, 0x5f, 0xe4, 0xf4,
- 0x35, 0x03, 0xb2, 0xa9, 0xda, 0xcf, 0xb7, 0x6d,
- 0x65, 0x82, 0x82, 0x67, 0x9d, 0x0e, 0xf3, 0xe8,
- 0x85, 0x6c, 0x69, 0xb8, 0x4c, 0xa6, 0xc6, 0x2e,
- 0x40, 0xb5, 0x54, 0x28, 0x95, 0xe4, 0x57, 0xe0,
- 0x5b, 0xf8, 0xde, 0x59, 0xe0, 0xfd, 0x89, 0x48,
- 0xac, 0x56, 0x13, 0x54, 0xb9, 0x1b, 0xf5, 0x59,
- 0x97, 0xb6, 0xb3, 0xe8, 0xac, 0x2d, 0xfc, 0xd2,
- 0xea, 0x57, 0x96, 0x57, 0xa8, 0x26, 0x97, 0x2c,
- 0x01, 0x89, 0x56, 0xea, 0xec, 0x8c, 0x53, 0xd5,
- 0xd7, 0x9e, 0xc9, 0x98, 0x0b, 0xad, 0x03, 0x75,
- 0xa0, 0x6e, 0x98, 0x8b, 0x97, 0x8d, 0x8d, 0x85,
- 0x7d, 0x74, 0xa7, 0x2d, 0xde, 0x67, 0x0c, 0xcd,
- 0x54, 0xb8, 0x15, 0x7b, 0xeb, 0xf5, 0x84, 0xb9,
- 0x78, 0xab, 0xd8, 0x68, 0x91, 0x1f, 0x6a, 0xa6,
- 0x28, 0x22, 0xf7, 0x00, 0x49, 0x00, 0xbe, 0x41,
- 0x71, 0x0a, 0xf5, 0xe7, 0x9f, 0xb4, 0x11, 0x41,
- 0x3f, 0xcd, 0xa9, 0xa9, 0x01, 0x8b, 0x6a, 0xeb,
- 0x54, 0x4c, 0x58, 0x92, 0x68, 0x02, 0x0e, 0xe9,
- 0xed, 0x65, 0x4c, 0xfb, 0x95, 0x48, 0x58, 0xa2,
- 0xaa, 0x57, 0x69, 0x13, 0x82, 0x0c, 0x2c, 0x4b,
- 0x5d, 0x4e, 0x18, 0x30, 0xef, 0x1c, 0xb1, 0x9d,
- 0x05, 0x05, 0x02, 0x1c, 0x97, 0xc9, 0x48, 0xfe,
- 0x5e, 0x7b, 0x77, 0xa3, 0x1f, 0x2a, 0x81, 0x42,
- 0xf0, 0x4b, 0x85, 0x12, 0x9c, 0x1f, 0x44, 0xb1,
- 0x14, 0x91, 0x92, 0x65, 0x77, 0xb1, 0x87, 0xa2,
- 0xfc, 0xa4, 0xe7, 0xd2, 0x9b, 0xf2, 0x17, 0xf0,
- 0x30, 0x1c, 0x8d, 0x33, 0xbc, 0x25, 0x28, 0x48,
- 0xfd, 0x30, 0x79, 0x0a, 0x99, 0x3e, 0xb4, 0x0f,
- 0x1e, 0xa6, 0x68, 0x76, 0x19, 0x76, 0x29, 0xac,
- 0x5d, 0xb8, 0x1e, 0x42, 0xd6, 0x85, 0x04, 0xbf,
- 0x64, 0x1c, 0x2d, 0x53, 0xe9, 0x92, 0x78, 0xf8,
- 0xc3, 0xda, 0x96, 0x92, 0x10, 0x6f, 0x45, 0x85,
- 0xaf, 0x5e, 0xcc, 0xa8, 0xc0, 0xc6, 0x2e, 0x73,
- 0x51, 0x3f, 0x5e, 0xd7, 0x52, 0x33, 0x71, 0x12,
- 0x6d, 0x85, 0xee, 0xea, 0x85, 0xa8, 0x48, 0x2b,
- 0x40, 0x64, 0x6d, 0x28, 0x73, 0x16, 0xd7, 0x82,
- 0xd9, 0x90, 0xed, 0x1f, 0xa7, 0x5c, 0xb1, 0x5c,
- 0x27, 0xb9, 0x67, 0x8b, 0xb4, 0x17, 0x13, 0x83,
- 0x5f, 0x09, 0x72, 0x0a, 0xd7, 0xa0, 0xec, 0x81,
- 0x59, 0x19, 0xb9, 0xa6, 0x5a, 0x37, 0x34, 0x14,
- 0x47, 0xf6, 0xe7, 0x6c, 0xd2, 0x09, 0x10, 0xe7,
- 0xdd, 0xbb, 0x02, 0xd1, 0x28, 0xfa, 0x01, 0x2c,
- 0x93, 0x64, 0x2e, 0x1b, 0x4c, 0x02, 0x52, 0xcb,
- 0x07, 0xa1, 0xb6, 0x46, 0x02, 0x80, 0xd9, 0x8f,
- 0x5c, 0x62, 0xbe, 0x78, 0x9e, 0x75, 0xc4, 0x97,
- 0x91, 0x39, 0x12, 0x65, 0xb9, 0x3b, 0xc2, 0xd1,
- 0xaf, 0xf2, 0x1f, 0x4e, 0x4d, 0xd1, 0xf0, 0x9f,
- 0xb7, 0x12, 0xfd, 0xe8, 0x75, 0x18, 0xc0, 0x9d,
- 0x8c, 0x70, 0xff, 0x77, 0x05, 0xb6, 0x1a, 0x1f,
- 0x96, 0x48, 0xf6, 0xfe, 0xd5, 0x5d, 0x98, 0xa5,
- 0x72, 0x1c, 0x84, 0x76, 0x3e, 0xb8, 0x87, 0x37,
- 0xdd, 0xd4, 0x3a, 0x45, 0xdd, 0x09, 0xd8, 0xe7,
- 0x09, 0x2f, 0x3e, 0x33, 0x9e, 0x7b, 0x8c, 0xe4,
- 0x85, 0x12, 0x4e, 0xf8, 0x06, 0xb7, 0xb1, 0x85,
- 0x24, 0x96, 0xd8, 0xfe, 0x87, 0x92, 0x81, 0xb1,
- 0xa3, 0x38, 0xb9, 0x56, 0xe1, 0xf6, 0x36, 0x41,
- 0xbb, 0xd6, 0x56, 0x69, 0x94, 0x57, 0xb3, 0xa4,
- 0xca, 0xa4, 0xe1, 0x02, 0x3b, 0x96, 0x71, 0xe0,
- 0xb2, 0x2f, 0x85, 0x48, 0x1b, 0x4a, 0x41, 0x80,
- 0x4b, 0x9c, 0xe0, 0xc9, 0x39, 0xb8, 0xb1, 0xca,
- 0x64, 0x77, 0x46, 0x58, 0xe6, 0x84, 0xd5, 0x2b,
- 0x65, 0xce, 0xe9, 0x09, 0xa3, 0xaa, 0xfb, 0x83,
- 0xa9, 0x28, 0x68, 0xfd, 0xcd, 0xfd, 0x76, 0x83,
- 0xe1, 0x20, 0x22, 0x77, 0x3a, 0xa3, 0xb2, 0x93,
- 0x14, 0x91, 0xfc, 0xe2, 0x17, 0x63, 0x2b, 0xa6,
- 0x29, 0x38, 0x7b, 0x9b, 0x8b, 0x15, 0x77, 0xd6,
- 0xaa, 0x92, 0x51, 0x53, 0x50, 0xff, 0xa0, 0x35,
- 0xa0, 0x59, 0x7d, 0xf0, 0x11, 0x23, 0x49, 0xdf,
- 0x5a, 0x21, 0xc2, 0xfe, 0x35, 0xa0, 0x1d, 0xe2,
- 0xae, 0xa2, 0x8a, 0x61, 0x5b, 0xf7, 0xf1, 0x1c,
- 0x1c, 0xec, 0xc4, 0xf6, 0xdc, 0xaa, 0xc8, 0xc2,
- 0xe5, 0xa1, 0x2e, 0x14, 0xe5, 0xc6, 0xc9, 0x73,
- 0x03, 0x78, 0xeb, 0xed, 0xe0, 0x3e, 0xc5, 0xf4,
- 0xf1, 0x50, 0xb2, 0x01, 0x91, 0x96, 0xf5, 0xbb,
- 0xe1, 0x32, 0xcd, 0xa8, 0x66, 0xbf, 0x73, 0x85,
- 0x94, 0xd6, 0x7e, 0x68, 0xc5, 0xe4, 0xed, 0xd5,
- 0xe3, 0x67, 0x4c, 0xa5, 0xb3, 0x1f, 0xdf, 0xf8,
- 0xb3, 0x73, 0x5a, 0xac, 0xeb, 0x46, 0x16, 0x24,
- 0xab, 0xca, 0xa4, 0xdd, 0x87, 0x0e, 0x24, 0x83,
- 0x32, 0x04, 0x4c, 0xd8, 0xda, 0x7d, 0xdc, 0xe3,
- 0x01, 0x93, 0xf3, 0xc1, 0x5b, 0xbd, 0xc3, 0x1d,
- 0x40, 0x62, 0xde, 0x94, 0x03, 0x85, 0x91, 0x2a,
- 0xa0, 0x25, 0x10, 0xd3, 0x32, 0x9f, 0x93, 0x00,
- 0xa7, 0x8a, 0xfa, 0x77, 0x7c, 0xaf, 0x4d, 0xc8,
- 0x7a, 0xf3, 0x16, 0x2b, 0xba, 0xeb, 0x74, 0x51,
- 0xb8, 0xdd, 0x32, 0xad, 0x68, 0x7d, 0xdd, 0xca,
- 0x60, 0x98, 0xc9, 0x9b, 0xb6, 0x5d, 0x4d, 0x3a,
- 0x66, 0x8a, 0xbe, 0x05, 0xf9, 0x0c, 0xc5, 0xba,
- 0x52, 0x82, 0x09, 0x1f, 0x5a, 0x66, 0x89, 0x69,
- 0xa3, 0x5d, 0x93, 0x50, 0x7d, 0x44, 0xc3, 0x2a,
- 0xb8, 0xab, 0xec, 0xa6, 0x5a, 0xae, 0x4a, 0x6a,
- 0xcd, 0xfd, 0xb6, 0xff, 0x3d, 0x98, 0x05, 0xd9,
- 0x5b, 0x29, 0xc4, 0x6f, 0xe0, 0x76, 0xe2, 0x3f,
- 0xec, 0xd7, 0xa4, 0x91, 0x63, 0xf5, 0x4e, 0x4b,
- 0xab, 0x20, 0x8c, 0x3a, 0x41, 0xed, 0x8b, 0x4b,
- 0xb9, 0x01, 0x21, 0xc0, 0x6d, 0xfd, 0x70, 0x5b,
- 0x20, 0x92, 0x41, 0x89, 0x74, 0xb7, 0xe9, 0x8b,
- 0xfc, 0x6d, 0x17, 0x3f, 0x7f, 0x89, 0x3d, 0x6b,
- 0x8f, 0xbc, 0xd2, 0x57, 0xe9, 0xc9, 0x6e, 0xa7,
- 0x19, 0x26, 0x18, 0xad, 0xef, 0xb5, 0x87, 0xbf,
- 0xb8, 0xa8, 0xd6, 0x7d, 0xdd, 0x5f, 0x94, 0x54,
- 0x09, 0x92, 0x2b, 0xf5, 0x04, 0xf7, 0x36, 0x69,
- 0x8e, 0xf4, 0xdc, 0x1d, 0x6e, 0x55, 0xbb, 0xe9,
- 0x13, 0x05, 0x83, 0x35, 0x9c, 0xed, 0xcf, 0x8c,
- 0x26, 0x8c, 0x7b, 0xc7, 0x0b, 0xba, 0xfd, 0xe2,
- 0x84, 0x5c, 0x2a, 0x79, 0x43, 0x99, 0xb2, 0xc3,
- 0x82, 0x87, 0xc8, 0xcd, 0x37, 0x6d, 0xa1, 0x2b,
- 0x39, 0xb2, 0x38, 0x99, 0xd9, 0xfc, 0x02, 0x15,
- 0x55, 0x21, 0x62, 0x59, 0xeb, 0x00, 0x86, 0x08,
- 0x20, 0xbe, 0x1a, 0x62, 0x4d, 0x7e, 0xdf, 0x68,
- 0x73, 0x5b, 0x5f, 0xaf, 0x84, 0x96, 0x2e, 0x1f,
- 0x6b, 0x03, 0xc9, 0xa6, 0x75, 0x18, 0xe9, 0xd4,
- 0xbd, 0xc8, 0xec, 0x9a, 0x5a, 0xb3, 0x99, 0xab,
- 0x5f, 0x7c, 0x08, 0x7f, 0x69, 0x4d, 0x52, 0xa2,
- 0x30, 0x17, 0x3b, 0x16, 0x15, 0x1b, 0x11, 0x62,
- 0x3e, 0x80, 0x4b, 0x85, 0x7c, 0x9c, 0xd1, 0x3a,
- 0x13, 0x01, 0x5e, 0x45, 0xf1, 0xc8, 0x5f, 0xcd,
- 0x0e, 0x21, 0xf5, 0x82, 0xd4, 0x7b, 0x5c, 0x45,
- 0x27, 0x6b, 0xef, 0xfe, 0xb8, 0xc0, 0x6f, 0xdc,
- 0x60, 0x7b, 0xe4, 0xd5, 0x75, 0x71, 0xe6, 0xe8,
- 0x7d, 0x6b, 0x6d, 0x80, 0xaf, 0x76, 0x41, 0x58,
- 0xb7, 0xac, 0xb7, 0x13, 0x2f, 0x81, 0xcc, 0xf9,
- 0x19, 0x97, 0xe8, 0xee, 0x40, 0x91, 0xfc, 0x89,
- 0x13, 0x1e, 0x67, 0x9a, 0xdb, 0x8f, 0x8f, 0xc7,
- 0x4a, 0xc9, 0xaf, 0x2f, 0x67, 0x01, 0x3c, 0xb8,
- 0xa8, 0x3e, 0x78, 0x93, 0x1b, 0xdf, 0xbb, 0x34,
- 0x0b, 0x1a, 0xfa, 0xc2, 0x2d, 0xc5, 0x1c, 0xec,
- 0x97, 0x4f, 0x48, 0x41, 0x15, 0x0e, 0x75, 0xed,
- 0x66, 0x8c, 0x17, 0x7f, 0xb1, 0x48, 0x13, 0xc1,
- 0xfb, 0x60, 0x06, 0xf9, 0x72, 0x41, 0x3e, 0xcf,
- 0x6e, 0xb6, 0xc8, 0xeb, 0x4b, 0x5a, 0xd2, 0x0c,
- 0x28, 0xda, 0x02, 0x7a, 0x46, 0x21, 0x42, 0xb5,
- 0x34, 0xda, 0xcb, 0x5e, 0xbd, 0x66, 0x5c, 0xca,
- 0xff, 0x52, 0x43, 0x89, 0xf9, 0x10, 0x9a, 0x9e,
- 0x9b, 0xe3, 0xb0, 0x51, 0xe9, 0xf3, 0x0a, 0x35,
- 0x77, 0x54, 0xcc, 0xac, 0xa6, 0xf1, 0x2e, 0x36,
- 0x89, 0xac, 0xc5, 0xc6, 0x62, 0x5a, 0xc0, 0x6d,
- 0xc4, 0xe1, 0xf7, 0x64, 0x30, 0xff, 0x11, 0x40,
- 0x13, 0x89, 0xd8, 0xd7, 0x73, 0x3f, 0x93, 0x08,
- 0x68, 0xab, 0x66, 0x09, 0x1a, 0xea, 0x78, 0xc9,
- 0x52, 0xf2, 0xfd, 0x93, 0x1b, 0x94, 0xbe, 0x5c,
- 0xe5, 0x00, 0x6e, 0x00, 0xb9, 0xea, 0x27, 0xaa,
- 0xb3, 0xee, 0xe3, 0xc8, 0x6a, 0xb0, 0xc1, 0x8e,
- 0x9b, 0x54, 0x40, 0x10, 0x96, 0x06, 0xe8, 0xb3,
- 0xf5, 0x55, 0x77, 0xd7, 0x5c, 0x94, 0xc1, 0x74,
- 0xf3, 0x07, 0x64, 0xac, 0x1c, 0xde, 0xc7, 0x22,
- 0xb0, 0xbf, 0x2a, 0x5a, 0xc0, 0x8f, 0x8a, 0x83,
- 0x50, 0xc2, 0x5e, 0x97, 0xa0, 0xbe, 0x49, 0x7e,
- 0x47, 0xaf, 0xa7, 0x20, 0x02, 0x35, 0xa4, 0x57,
- 0xd9, 0x26, 0x63, 0xdb, 0xf1, 0x34, 0x42, 0x89,
- 0x36, 0xd1, 0x77, 0x6f, 0xb1, 0xea, 0x79, 0x7e,
- 0x95, 0x10, 0x5a, 0xee, 0xa3, 0xae, 0x6f, 0xba,
- 0xa9, 0xef, 0x5a, 0x7e, 0x34, 0x03, 0x04, 0x07,
- 0x92, 0xd6, 0x07, 0x79, 0xaa, 0x14, 0x90, 0x97,
- 0x05, 0x4d, 0xa6, 0x27, 0x10, 0x5c, 0x25, 0x24,
- 0xcb, 0xcc, 0xf6, 0x77, 0x9e, 0x43, 0x23, 0xd4,
- 0x98, 0xef, 0x22, 0xa8, 0xad, 0xf2, 0x26, 0x08,
- 0x59, 0x69, 0xa4, 0xc3, 0x97, 0xe0, 0x5c, 0x6f,
- 0xeb, 0x3d, 0xd4, 0x62, 0x6e, 0x80, 0x61, 0x02,
- 0xf4, 0xfc, 0x94, 0x79, 0xbb, 0x4e, 0x6d, 0xd7,
- 0x30, 0x5b, 0x10, 0x11, 0x5a, 0x3d, 0xa7, 0x50,
- 0x1d, 0x9a, 0x13, 0x5f, 0x4f, 0xa8, 0xa7, 0xb6,
- 0x39, 0xc7, 0xea, 0xe6, 0x19, 0x61, 0x69, 0xc7,
- 0x9a, 0x3a, 0xeb, 0x9d, 0xdc, 0xf7, 0x06, 0x37,
- 0xbd, 0xac, 0xe3, 0x18, 0xff, 0xfe, 0x11, 0xdb,
- 0x67, 0x42, 0xb4, 0xea, 0xa8, 0xbd, 0xb0, 0x76,
- 0xd2, 0x74, 0x32, 0xc2, 0xa4, 0x9c, 0xe7, 0x60,
- 0xc5, 0x30, 0x9a, 0x57, 0x66, 0xcd, 0x0f, 0x02,
- 0x4c, 0xea, 0xe9, 0xd3, 0x2a, 0x5c, 0x09, 0xc2,
- 0xff, 0x6a, 0xde, 0x5d, 0xb7, 0xe9, 0x75, 0x6b,
- 0x29, 0x94, 0xd6, 0xf7, 0xc3, 0xdf, 0xfb, 0x70,
- 0xec, 0xb5, 0x8c, 0xb0, 0x78, 0x7a, 0xee, 0x52,
- 0x5f, 0x8c, 0xae, 0x85, 0xe5, 0x98, 0xa2, 0xb7,
- 0x7c, 0x02, 0x2a, 0xcc, 0x9e, 0xde, 0x99, 0x5f,
- 0x84, 0x20, 0xbb, 0xdc, 0xf2, 0xd2, 0x13, 0x46,
- 0x3c, 0xd6, 0x4d, 0xe7, 0x50, 0xef, 0x55, 0xc3,
- 0x96, 0x9f, 0xec, 0x6c, 0xd8, 0xe2, 0xea, 0xed,
- 0xc7, 0x33, 0xc9, 0xb3, 0x1c, 0x4f, 0x1d, 0x83,
- 0x1d, 0xe4, 0xdd, 0xb2, 0x24, 0x8f, 0xf9, 0xf5
-};
-
-
-static const uint8_t HMAC_SHA256_ciphertext_64B_digest[] = {
- 0xc5, 0x6d, 0x4f, 0x29, 0xf4, 0xd2, 0xcc, 0x87,
- 0x3c, 0x81, 0x02, 0x6d, 0x38, 0x7a, 0x67, 0x3e,
- 0x95, 0x9c, 0x5c, 0x8f, 0xda, 0x5c, 0x06, 0xe0,
- 0x65, 0xf1, 0x6c, 0x51, 0x52, 0x49, 0x3e, 0x5f
-};
-
-static const uint8_t HMAC_SHA256_ciphertext_128B_digest[] = {
- 0x76, 0x64, 0x2d, 0x69, 0x71, 0x5d, 0x6a, 0xd8,
- 0x9f, 0x74, 0x11, 0x2f, 0x58, 0xe0, 0x4a, 0x2f,
- 0x6c, 0x88, 0x5e, 0x4d, 0x9c, 0x79, 0x83, 0x1c,
- 0x8a, 0x14, 0xd0, 0x07, 0xfb, 0xbf, 0x6c, 0x8f
-};
-
-static const uint8_t HMAC_SHA256_ciphertext_256B_digest[] = {
- 0x05, 0xa7, 0x44, 0xcd, 0x91, 0x8c, 0x95, 0xcf,
- 0x7b, 0x8f, 0xd3, 0x90, 0x86, 0x7e, 0x7b, 0xb9,
- 0x05, 0xd6, 0x6e, 0x7a, 0xc1, 0x7b, 0x26, 0xff,
- 0xd3, 0x4b, 0xe0, 0x22, 0x8b, 0xa8, 0x47, 0x52
-};
-
-static const uint8_t HMAC_SHA256_ciphertext_512B_digest[] = {
- 0x08, 0xb7, 0x29, 0x54, 0x18, 0x7e, 0x97, 0x49,
- 0xc6, 0x7c, 0x9f, 0x94, 0xa5, 0x4f, 0xa2, 0x25,
- 0xd0, 0xe2, 0x30, 0x7b, 0xad, 0x93, 0xc9, 0x12,
- 0x0f, 0xf0, 0xf0, 0x71, 0xc2, 0xf6, 0x53, 0x8f
-};
-
-static const uint8_t HMAC_SHA256_ciphertext_768B_digest[] = {
- 0xe4, 0x3e, 0x73, 0x93, 0x03, 0xaf, 0x6f, 0x9c,
- 0xca, 0x57, 0x3b, 0x4a, 0x6e, 0x83, 0x58, 0xf5,
- 0x66, 0xc2, 0xb4, 0xa7, 0xe0, 0xee, 0x63, 0x6b,
- 0x48, 0xb7, 0x50, 0x45, 0x69, 0xdf, 0x5c, 0x5b
-};
-
-static const uint8_t HMAC_SHA256_ciphertext_1024B_digest[] = {
- 0x03, 0xb9, 0x96, 0x26, 0xdc, 0x1c, 0xab, 0xe2,
- 0xf5, 0x70, 0x55, 0x15, 0x67, 0x6e, 0x48, 0x11,
- 0xe7, 0x67, 0xea, 0xfa, 0x5c, 0x6b, 0x28, 0x22,
- 0xc9, 0x0e, 0x67, 0x04, 0xb3, 0x71, 0x7f, 0x88
-};
-
-static const uint8_t HMAC_SHA256_ciphertext_1280B_digest[] = {
- 0x01, 0x91, 0xb8, 0x78, 0xd3, 0x21, 0x74, 0xa5,
- 0x1c, 0x8b, 0xd4, 0xd2, 0xc0, 0x49, 0xd7, 0xd2,
- 0x16, 0x46, 0x66, 0x85, 0x50, 0x6d, 0x08, 0xcc,
- 0xc7, 0x0a, 0xa3, 0x71, 0xcc, 0xde, 0xee, 0xdc
-};
-
-static const uint8_t HMAC_SHA256_ciphertext_1536B_digest[] = {
- 0xf2, 0xe5, 0xe9, 0x57, 0x53, 0xd7, 0x69, 0x28,
- 0x7b, 0x69, 0xb5, 0x49, 0xa3, 0x31, 0x56, 0x5f,
- 0xa4, 0xe9, 0x87, 0x26, 0x2f, 0xe0, 0x2d, 0xd6,
- 0x08, 0x44, 0x01, 0x71, 0x0c, 0x93, 0x85, 0x84
-};
-
-static const uint8_t HMAC_SHA256_ciphertext_1792B_digest[] = {
- 0xf6, 0x57, 0x62, 0x01, 0xbf, 0x2d, 0xea, 0x4a,
- 0xef, 0x43, 0x85, 0x60, 0x18, 0xdf, 0x8b, 0xb4,
- 0x60, 0xc0, 0xfd, 0x2f, 0x90, 0x15, 0xe6, 0x91,
- 0x56, 0x61, 0x68, 0x7f, 0x5e, 0x92, 0xa8, 0xdd
-};
-
-static const uint8_t HMAC_SHA256_ciphertext_2048B_digest[] = {
- 0x81, 0x1a, 0x29, 0xbc, 0x6b, 0x9f, 0xbb, 0xb8,
- 0xef, 0x71, 0x7b, 0x1f, 0x6f, 0xd4, 0x7e, 0x68,
- 0x3a, 0x9c, 0xb9, 0x98, 0x22, 0x81, 0xfa, 0x95,
- 0xee, 0xbc, 0x7f, 0x23, 0x29, 0x88, 0x76, 0xb8
-};
-
-struct crypto_data_params {
- const char *name;
- uint16_t length;
- const char *plaintext;
- struct crypto_expected_output {
- const uint8_t *ciphertext;
- const uint8_t *digest;
- } expected;
-};
-
-#define MAX_PACKET_SIZE_INDEX 10
-
-struct crypto_data_params aes_cbc_hmac_sha256_output[MAX_PACKET_SIZE_INDEX] = {
- { "64B", 64, &plaintext_quote[sizeof(plaintext_quote) - 1 - 64],
- { AES_CBC_ciphertext_64B, HMAC_SHA256_ciphertext_64B_digest } },
- { "128B", 128, &plaintext_quote[sizeof(plaintext_quote) - 1 - 128],
- { AES_CBC_ciphertext_128B, HMAC_SHA256_ciphertext_128B_digest } },
- { "256B", 256, &plaintext_quote[sizeof(plaintext_quote) - 1 - 256],
- { AES_CBC_ciphertext_256B, HMAC_SHA256_ciphertext_256B_digest } },
- { "512B", 512, &plaintext_quote[sizeof(plaintext_quote) - 1 - 512],
- { AES_CBC_ciphertext_512B, HMAC_SHA256_ciphertext_512B_digest } },
- { "768B", 768, &plaintext_quote[sizeof(plaintext_quote) - 1 - 768],
- { AES_CBC_ciphertext_768B, HMAC_SHA256_ciphertext_768B_digest } },
- { "1024B", 1024, &plaintext_quote[sizeof(plaintext_quote) - 1 - 1024],
- { AES_CBC_ciphertext_1024B, HMAC_SHA256_ciphertext_1024B_digest } },
- { "1280B", 1280, &plaintext_quote[sizeof(plaintext_quote) - 1 - 1280],
- { AES_CBC_ciphertext_1280B, HMAC_SHA256_ciphertext_1280B_digest } },
- { "1536B", 1536, &plaintext_quote[sizeof(plaintext_quote) - 1 - 1536],
- { AES_CBC_ciphertext_1536B, HMAC_SHA256_ciphertext_1536B_digest } },
- { "1792B", 1792, &plaintext_quote[sizeof(plaintext_quote) - 1 - 1792],
- { AES_CBC_ciphertext_1792B, HMAC_SHA256_ciphertext_1792B_digest } },
- { "2048B", 2048, &plaintext_quote[sizeof(plaintext_quote) - 1 - 2048],
- { AES_CBC_ciphertext_2048B, HMAC_SHA256_ciphertext_2048B_digest } }
-};
-
-static int
-test_perf_crypto_qp_vary_burst_size(uint16_t dev_num)
-{
- uint32_t num_to_submit = 4096;
- struct rte_crypto_op *c_ops[num_to_submit];
- struct rte_crypto_op *proc_ops[num_to_submit];
- uint64_t failed_polls, retries, start_cycles, end_cycles, total_cycles = 0;
- uint32_t burst_sent, burst_received;
- uint32_t i, burst_size, num_sent, num_received;
- struct crypto_testsuite_params *ts_params = &testsuite_params;
- struct crypto_unittest_params *ut_params = &unittest_params;
- struct crypto_data_params *data_params = aes_cbc_hmac_sha256_output;
-
- if (rte_cryptodev_count() == 0) {
- printf("\nNo crypto devices available. Is kernel driver loaded?\n");
- return TEST_FAILED;
- }
-
- /* Setup Cipher Parameters */
- ut_params->cipher_xform.type = RTE_CRYPTO_SYM_XFORM_CIPHER;
- ut_params->cipher_xform.next = &ut_params->auth_xform;
-
- ut_params->cipher_xform.cipher.algo = RTE_CRYPTO_CIPHER_AES_CBC;
- ut_params->cipher_xform.cipher.op = RTE_CRYPTO_CIPHER_OP_DECRYPT;
- ut_params->cipher_xform.cipher.key.data = aes_cbc_128_key;
- ut_params->cipher_xform.cipher.key.length = CIPHER_IV_LENGTH_AES_CBC;
-
-
- /* Setup HMAC Parameters */
- ut_params->auth_xform.type = RTE_CRYPTO_SYM_XFORM_AUTH;
- ut_params->auth_xform.next = NULL;
-
- ut_params->auth_xform.auth.op = RTE_CRYPTO_AUTH_OP_VERIFY;
- ut_params->auth_xform.auth.algo = RTE_CRYPTO_AUTH_SHA256_HMAC;
- ut_params->auth_xform.auth.key.data = hmac_sha256_key;
- ut_params->auth_xform.auth.key.length = HMAC_KEY_LENGTH_SHA256;
- ut_params->auth_xform.auth.digest_length = DIGEST_BYTE_LENGTH_SHA256;
-
- /* Create Crypto session*/
- ut_params->sess = rte_cryptodev_sym_session_create(ts_params->dev_id,
- &ut_params->cipher_xform);
-
- TEST_ASSERT_NOT_NULL(ut_params->sess, "Session creation failed");
-
- /* Generate Crypto op data structure(s) */
- for (i = 0; i < num_to_submit ; i++) {
- struct rte_mbuf *m = setup_test_string(ts_params->mbuf_mp,
- data_params[0].expected.ciphertext,
- data_params[0].length, 0);
- TEST_ASSERT_NOT_NULL(m, "Failed to allocate tx_buf");
-
- ut_params->digest = (uint8_t *)rte_pktmbuf_append(m,
- DIGEST_BYTE_LENGTH_SHA256);
- TEST_ASSERT_NOT_NULL(ut_params->digest,
- "no room to append digest");
-
- rte_memcpy(ut_params->digest, data_params[0].expected.digest,
- DIGEST_BYTE_LENGTH_SHA256);
-
-
- struct rte_crypto_op *op =
- rte_crypto_op_alloc(ts_params->op_mpool,
- RTE_CRYPTO_OP_TYPE_SYMMETRIC);
-
- rte_crypto_op_attach_sym_session(op, ut_params->sess);
-
- op->sym->auth.digest.data = ut_params->digest;
- op->sym->auth.digest.phys_addr = rte_pktmbuf_mtophys_offset(m,
- data_params[0].length);
- op->sym->auth.digest.length = DIGEST_BYTE_LENGTH_SHA256;
-
- op->sym->auth.data.offset = CIPHER_IV_LENGTH_AES_CBC;
- op->sym->auth.data.length = data_params[0].length;
-
-
- op->sym->cipher.iv.data = (uint8_t *)rte_pktmbuf_prepend(m,
- CIPHER_IV_LENGTH_AES_CBC);
- op->sym->cipher.iv.phys_addr = rte_pktmbuf_mtophys(m);
- op->sym->cipher.iv.length = CIPHER_IV_LENGTH_AES_CBC;
-
- rte_memcpy(op->sym->cipher.iv.data, aes_cbc_128_iv,
- CIPHER_IV_LENGTH_AES_CBC);
-
- op->sym->cipher.data.offset = CIPHER_IV_LENGTH_AES_CBC;
- op->sym->cipher.data.length = data_params[0].length;
-
- op->sym->m_src = m;
-
- c_ops[i] = op;
- }
-
- printf("\nTest to measure the IA cycle cost using AES128_CBC_SHA256_HMAC "
- "algorithm with a constant request size of %u.",
- data_params[0].length);
- printf("\nThis test will keep retries at 0 and only measure IA cycle "
- "cost for each request.");
- printf("\nDev No\tQP No\tNum Sent\tNum Received\tTx/Rx burst");
- printf("\tRetries (Device Busy)\tAverage IA cycle cost "
- "(assuming 0 retries)");
- for (i = 2; i <= 128 ; i *= 2) {
- num_sent = 0;
- num_received = 0;
- retries = 0;
- failed_polls = 0;
- burst_size = i;
- total_cycles = 0;
- while (num_sent < num_to_submit) {
- start_cycles = rte_rdtsc_precise();
- burst_sent = rte_cryptodev_enqueue_burst(dev_num,
- 0, &c_ops[num_sent],
- ((num_to_submit-num_sent) < burst_size) ?
- num_to_submit-num_sent : burst_size);
- if (burst_sent == 0)
- retries++;
- else
- num_sent += burst_sent;
- end_cycles = rte_rdtsc_precise();
- total_cycles += (end_cycles - start_cycles);
- /*
- * Wait until requests have been sent.
- */
- rte_delay_ms(1);
-
- start_cycles = rte_rdtsc_precise();
- burst_received = rte_cryptodev_dequeue_burst(
- dev_num, 0, proc_ops, burst_size);
- if (burst_received == 0)
- failed_polls++;
- else
- num_received += burst_received;
- end_cycles = rte_rdtsc_precise();
- total_cycles += end_cycles - start_cycles;
- }
-
- while (num_received != num_to_submit) {
- if (gbl_cryptodev_perftest_devtype ==
- RTE_CRYPTODEV_AESNI_MB_PMD)
- rte_cryptodev_enqueue_burst(dev_num, 0,
- NULL, 0);
-
- burst_received = rte_cryptodev_dequeue_burst(
- dev_num, 0, proc_ops, burst_size);
- if (burst_received == 0)
- failed_polls++;
- else
- num_received += burst_received;
- }
-
- printf("\n%u\t%u\t%u\t\t%u\t\t%u", dev_num, 0,
- num_sent, num_received, burst_size);
- printf("\t\t%"PRIu64, retries);
- printf("\t\t\t%"PRIu64, total_cycles/num_received);
- }
- printf("\n");
-
- for (i = 0; i < num_to_submit ; i++) {
- rte_pktmbuf_free(c_ops[i]->sym->m_src);
- rte_crypto_op_free(c_ops[i]);
- }
- return TEST_SUCCESS;
-}
-
-static int
-test_perf_snow3G_optimise_cyclecount(struct perf_test_params *pparams)
-{
- uint32_t num_to_submit = pparams->total_operations;
- struct rte_crypto_op *c_ops[num_to_submit];
- struct rte_crypto_op *proc_ops[num_to_submit];
- uint64_t failed_polls, retries, start_cycles, end_cycles, total_cycles = 0;
- uint32_t burst_sent = 0, burst_received = 0;
- uint32_t i, burst_size, num_sent, num_ops_received;
- struct crypto_testsuite_params *ts_params = &testsuite_params;
- static struct rte_cryptodev_sym_session *sess;
-
- if (rte_cryptodev_count() == 0) {
- printf("\nNo crypto devices found. Is PMD build configured?\n");
- printf("\nAnd is kernel driver loaded for HW PMDs?\n");
- return TEST_FAILED;
- }
-
- /* Create Crypto session*/
- sess = test_perf_create_snow3g_session(ts_params->dev_id,
- pparams->chain, pparams->cipher_algo,
- pparams->cipher_key_length, pparams->auth_algo);
- TEST_ASSERT_NOT_NULL(sess, "Session creation failed");
-
- /* Generate Crypto op data structure(s)*/
- for (i = 0; i < num_to_submit ; i++) {
- struct rte_mbuf *m = test_perf_create_pktmbuf(
- ts_params->mbuf_mp,
- pparams->buf_size);
- TEST_ASSERT_NOT_NULL(m, "Failed to allocate tx_buf");
-
- struct rte_crypto_op *op =
- rte_crypto_op_alloc(ts_params->op_mpool,
- RTE_CRYPTO_OP_TYPE_SYMMETRIC);
- TEST_ASSERT_NOT_NULL(op, "Failed to allocate op");
-
- op = test_perf_set_crypto_op_snow3g(op, m, sess, pparams->buf_size,
- get_auth_digest_length(pparams->auth_algo));
- TEST_ASSERT_NOT_NULL(op, "Failed to attach op to session");
-
- c_ops[i] = op;
- }
-
- printf("\nOn %s dev%u qp%u, %s, cipher algo:%s, auth_algo:%s, "
- "Packet Size %u bytes",
- pmd_name(gbl_cryptodev_perftest_devtype),
- ts_params->dev_id, 0,
- chain_mode_name(pparams->chain),
- cipher_algo_name(pparams->cipher_algo),
- auth_algo_name(pparams->auth_algo),
- pparams->buf_size);
- printf("\nOps Tx\tOps Rx\tOps/burst ");
- printf("Retries EmptyPolls\tIACycles/CyOp\tIACycles/Burst\tIACycles/Byte");
-
- for (i = 2; i <= 128 ; i *= 2) {
- num_sent = 0;
- num_ops_received = 0;
- retries = 0;
- failed_polls = 0;
- burst_size = i;
- total_cycles = 0;
- while (num_sent < num_to_submit) {
- start_cycles = rte_rdtsc_precise();
- burst_sent = rte_cryptodev_enqueue_burst(ts_params->dev_id,
- 0, &c_ops[num_sent],
- ((num_to_submit-num_sent) < burst_size) ?
- num_to_submit-num_sent : burst_size);
- end_cycles = rte_rdtsc_precise();
- if (burst_sent == 0)
- retries++;
- num_sent += burst_sent;
- total_cycles += (end_cycles - start_cycles);
-
- /* Wait until requests have been sent. */
-
- rte_delay_ms(1);
-
- start_cycles = rte_rdtsc_precise();
- burst_received = rte_cryptodev_dequeue_burst(
- ts_params->dev_id, 0, proc_ops, burst_size);
- end_cycles = rte_rdtsc_precise();
- if (burst_received < burst_sent)
- failed_polls++;
- num_ops_received += burst_received;
-
- total_cycles += end_cycles - start_cycles;
- }
-
- while (num_ops_received != num_to_submit) {
- if (gbl_cryptodev_perftest_devtype ==
- RTE_CRYPTODEV_AESNI_MB_PMD)
- rte_cryptodev_enqueue_burst(ts_params->dev_id, 0,
- NULL, 0);
- start_cycles = rte_rdtsc_precise();
- burst_received = rte_cryptodev_dequeue_burst(
- ts_params->dev_id, 0, proc_ops, burst_size);
- end_cycles = rte_rdtsc_precise();
- total_cycles += end_cycles - start_cycles;
- if (burst_received == 0)
- failed_polls++;
- num_ops_received += burst_received;
- }
-
- printf("\n%u\t%u\t%u", num_sent, num_ops_received, burst_size);
- printf("\t\t%"PRIu64, retries);
- printf("\t%"PRIu64, failed_polls);
- printf("\t\t%"PRIu64, total_cycles/num_ops_received);
- printf("\t\t%"PRIu64, (total_cycles/num_ops_received)*burst_size);
- printf("\t\t%"PRIu64, total_cycles/(num_ops_received*pparams->buf_size));
- }
- printf("\n");
-
- for (i = 0; i < num_to_submit ; i++) {
- rte_pktmbuf_free(c_ops[i]->sym->m_src);
- rte_crypto_op_free(c_ops[i]);
- }
- rte_cryptodev_sym_session_free(ts_params->dev_id, sess);
-
- return TEST_SUCCESS;
-}
-
-static int
-test_perf_snow3G_vary_burst_size(void)
-{
- unsigned total_operations = 4096;
- /*no need to vary pkt size for QAT, should have no effect on IA cycles */
- uint16_t buf_lengths[] = {40};
- uint8_t i, j;
-
- struct perf_test_params params_set[] = {
- {
- .chain = CIPHER_ONLY,
- .cipher_algo = RTE_CRYPTO_CIPHER_SNOW3G_UEA2,
- .cipher_key_length = 16,
- .auth_algo = RTE_CRYPTO_AUTH_NULL,
- },
- {
- .chain = HASH_ONLY,
- .cipher_algo = RTE_CRYPTO_CIPHER_NULL,
- .auth_algo = RTE_CRYPTO_AUTH_SNOW3G_UIA2,
- .cipher_key_length = 16
- },
- };
-
- printf("\n\nStart %s.", __func__);
- printf("\nThis Test measures the average IA cycle cost using a "
- "constant request(packet) size. ");
- printf("Cycle cost is only valid when indicators show device is not busy,"
- " i.e. Retries and EmptyPolls = 0");
-
- for (i = 0; i < RTE_DIM(params_set); i++) {
- printf("\n");
- params_set[i].total_operations = total_operations;
-
- for (j = 0;
- j < RTE_DIM(buf_lengths);
- j++) {
-
- params_set[i].buf_size = buf_lengths[j];
-
- test_perf_snow3G_optimise_cyclecount(&params_set[i]);
- }
-
- }
-
- return 0;
-}
-
-static int
-test_perf_openssl_optimise_cyclecount(struct perf_test_params *pparams)
-{
- uint32_t num_to_submit = pparams->total_operations;
- struct rte_crypto_op *c_ops[num_to_submit];
- struct rte_crypto_op *proc_ops[num_to_submit];
- uint64_t failed_polls, retries, start_cycles,
- end_cycles, total_cycles = 0;
- uint32_t burst_sent = 0, burst_received = 0;
- uint32_t i, burst_size, num_sent, num_ops_received;
-
- struct crypto_testsuite_params *ts_params = &testsuite_params;
-
- static struct rte_cryptodev_sym_session *sess;
-
- static struct rte_crypto_op *(*test_perf_set_crypto_op)
- (struct rte_crypto_op *, struct rte_mbuf *,
- struct rte_cryptodev_sym_session *,
- unsigned int, unsigned int);
-
- unsigned int digest_length = get_auth_digest_length(pparams->auth_algo);
-
- if (rte_cryptodev_count() == 0) {
- printf("\nNo crypto devices found. Is PMD build configured?\n");
- return TEST_FAILED;
- }
-
- /* Create Crypto session*/
- sess = test_perf_create_openssl_session(ts_params->dev_id,
- pparams->chain, pparams->cipher_algo,
- pparams->cipher_key_length, pparams->auth_algo);
- TEST_ASSERT_NOT_NULL(sess, "Session creation failed");
-
- /* Generate Crypto op data structure(s)*/
- for (i = 0; i < num_to_submit ; i++) {
- struct rte_mbuf *m = test_perf_create_pktmbuf(
- ts_params->mbuf_mp,
- pparams->buf_size);
- TEST_ASSERT_NOT_NULL(m, "Failed to allocate tx_buf");
-
- struct rte_crypto_op *op =
- rte_crypto_op_alloc(ts_params->op_mpool,
- RTE_CRYPTO_OP_TYPE_SYMMETRIC);
- TEST_ASSERT_NOT_NULL(op, "Failed to allocate op");
-
- switch (pparams->cipher_algo) {
- case RTE_CRYPTO_CIPHER_3DES_CBC:
- case RTE_CRYPTO_CIPHER_3DES_CTR:
- test_perf_set_crypto_op = test_perf_set_crypto_op_3des;
- break;
- case RTE_CRYPTO_CIPHER_AES_CBC:
- case RTE_CRYPTO_CIPHER_AES_CTR:
- test_perf_set_crypto_op = test_perf_set_crypto_op_aes;
- break;
- case RTE_CRYPTO_CIPHER_AES_GCM:
- test_perf_set_crypto_op =
- test_perf_set_crypto_op_aes_gcm;
- break;
- default:
- return TEST_FAILED;
- }
-
- op = test_perf_set_crypto_op(op, m, sess, pparams->buf_size,
- digest_length);
- TEST_ASSERT_NOT_NULL(op, "Failed to attach op to session");
-
- c_ops[i] = op;
- }
-
- printf("\nOn %s dev%u qp%u, %s, cipher algo:%s, cipher key length:%u, "
- "auth_algo:%s, Packet Size %u bytes",
- pmd_name(gbl_cryptodev_perftest_devtype),
- ts_params->dev_id, 0,
- chain_mode_name(pparams->chain),
- cipher_algo_name(pparams->cipher_algo),
- pparams->cipher_key_length,
- auth_algo_name(pparams->auth_algo),
- pparams->buf_size);
- printf("\nOps Tx\tOps Rx\tOps/burst ");
- printf("Retries EmptyPolls\tIACycles/CyOp\tIACycles/Burst\t"
- "IACycles/Byte");
-
- for (i = 2; i <= 128 ; i *= 2) {
- num_sent = 0;
- num_ops_received = 0;
- retries = 0;
- failed_polls = 0;
- burst_size = i;
- total_cycles = 0;
- while (num_sent < num_to_submit) {
- start_cycles = rte_rdtsc_precise();
- burst_sent = rte_cryptodev_enqueue_burst(
- ts_params->dev_id,
- 0, &c_ops[num_sent],
- ((num_to_submit - num_sent) <
- burst_size) ?
- num_to_submit - num_sent : burst_size);
- end_cycles = rte_rdtsc_precise();
- if (burst_sent == 0)
- retries++;
- num_sent += burst_sent;
- total_cycles += (end_cycles - start_cycles);
-
- /* Wait until requests have been sent. */
- rte_delay_ms(1);
-
- start_cycles = rte_rdtsc_precise();
- burst_received = rte_cryptodev_dequeue_burst(
- ts_params->dev_id, 0, proc_ops,
- burst_size);
- end_cycles = rte_rdtsc_precise();
- if (burst_received < burst_sent)
- failed_polls++;
- num_ops_received += burst_received;
-
- total_cycles += end_cycles - start_cycles;
- }
-
- while (num_ops_received != num_to_submit) {
- /* Sending 0 length burst to flush sw crypto device */
- rte_cryptodev_enqueue_burst(ts_params->dev_id, 0,
- NULL, 0);
-
- start_cycles = rte_rdtsc_precise();
- burst_received = rte_cryptodev_dequeue_burst(
- ts_params->dev_id, 0, proc_ops,
- burst_size);
- end_cycles = rte_rdtsc_precise();
-
- total_cycles += end_cycles - start_cycles;
- if (burst_received == 0)
- failed_polls++;
- num_ops_received += burst_received;
- }
-
- printf("\n%u\t%u\t%u", num_sent, num_ops_received, burst_size);
- printf("\t\t%"PRIu64, retries);
- printf("\t%"PRIu64, failed_polls);
- printf("\t\t%"PRIu64, total_cycles/num_ops_received);
- printf("\t\t%"PRIu64, (total_cycles/num_ops_received) *
- burst_size);
- printf("\t\t%"PRIu64,
- total_cycles /
- (num_ops_received * pparams->buf_size));
- }
- printf("\n");
-
- for (i = 0; i < num_to_submit ; i++) {
- rte_pktmbuf_free(c_ops[i]->sym->m_src);
- rte_crypto_op_free(c_ops[i]);
- }
- rte_cryptodev_sym_session_free(ts_params->dev_id, sess);
-
- return TEST_SUCCESS;
-}
-
-static uint32_t get_auth_key_max_length(enum rte_crypto_auth_algorithm algo)
-{
- switch (algo) {
- case RTE_CRYPTO_AUTH_SNOW3G_UIA2:
- return 16;
- case RTE_CRYPTO_AUTH_SHA1_HMAC:
- return 64;
- case RTE_CRYPTO_AUTH_SHA224_HMAC:
- return 64;
- case RTE_CRYPTO_AUTH_SHA256_HMAC:
- return 64;
- case RTE_CRYPTO_AUTH_SHA384_HMAC:
- return 128;
- case RTE_CRYPTO_AUTH_SHA512_HMAC:
- return 128;
- case RTE_CRYPTO_AUTH_AES_GCM:
- return 0;
- default:
- return 0;
- }
-}
-
-static uint32_t get_auth_digest_length(enum rte_crypto_auth_algorithm algo)
-{
- switch (algo) {
- case RTE_CRYPTO_AUTH_SNOW3G_UIA2:
- return 4;
- case RTE_CRYPTO_AUTH_SHA1_HMAC:
- return TRUNCATED_DIGEST_BYTE_LENGTH_SHA1;
- case RTE_CRYPTO_AUTH_SHA224_HMAC:
- return TRUNCATED_DIGEST_BYTE_LENGTH_SHA224;
- case RTE_CRYPTO_AUTH_SHA256_HMAC:
- return TRUNCATED_DIGEST_BYTE_LENGTH_SHA256;
- case RTE_CRYPTO_AUTH_SHA384_HMAC:
- return TRUNCATED_DIGEST_BYTE_LENGTH_SHA384;
- case RTE_CRYPTO_AUTH_SHA512_HMAC:
- return TRUNCATED_DIGEST_BYTE_LENGTH_SHA512;
- case RTE_CRYPTO_AUTH_AES_GCM:
- return DIGEST_BYTE_LENGTH_AES_GCM;
- default:
- return 0;
- }
-}
-
-static uint8_t aes_key[] = {
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
-};
-
-static uint8_t aes_iv[] = {
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
-};
-
-static uint8_t triple_des_key[] = {
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-};
-
-static uint8_t triple_des_iv[] = {
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-};
-
-static uint8_t hmac_sha_key[] = {
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
-};
-
-static uint8_t snow3g_cipher_key[] = {
- 0x2B, 0xD6, 0x45, 0x9F, 0x82, 0xC5, 0xB3, 0x00,
- 0x95, 0x2C, 0x49, 0x10, 0x48, 0x81, 0xFF, 0x48
-};
-
-static uint8_t snow3g_iv[] = {
- 0x72, 0xA4, 0xF2, 0x0F, 0x64, 0x00, 0x00, 0x00,
- 0x72, 0xA4, 0xF2, 0x0F, 0x64, 0x00, 0x00, 0x00
-};
-
-static uint8_t snow3g_hash_key[] = {
- 0xC7, 0x36, 0xC6, 0xAA, 0xB2, 0x2B, 0xFF, 0xF9,
- 0x1E, 0x26, 0x98, 0xD2, 0xE2, 0x2A, 0xD5, 0x7E
-};
-
-static struct rte_cryptodev_sym_session *
-test_perf_create_aes_sha_session(uint8_t dev_id, enum chain_mode chain,
- enum rte_crypto_cipher_algorithm cipher_algo,
- unsigned cipher_key_len,
- enum rte_crypto_auth_algorithm auth_algo)
-{
- struct rte_crypto_sym_xform cipher_xform = { 0 };
- struct rte_crypto_sym_xform auth_xform = { 0 };
-
-
- /* Setup Cipher Parameters */
- cipher_xform.type = RTE_CRYPTO_SYM_XFORM_CIPHER;
- cipher_xform.cipher.algo = cipher_algo;
- cipher_xform.cipher.op = RTE_CRYPTO_CIPHER_OP_ENCRYPT;
-
- cipher_xform.cipher.key.data = aes_key;
- cipher_xform.cipher.key.length = cipher_key_len;
-
- /* Setup HMAC Parameters */
- auth_xform.type = RTE_CRYPTO_SYM_XFORM_AUTH;
- auth_xform.auth.op = RTE_CRYPTO_AUTH_OP_GENERATE;
- auth_xform.auth.algo = auth_algo;
-
- auth_xform.auth.key.data = hmac_sha_key;
- auth_xform.auth.key.length = get_auth_key_max_length(auth_algo);
- auth_xform.auth.digest_length = get_auth_digest_length(auth_algo);
-
- switch (chain) {
- case CIPHER_HASH:
- cipher_xform.next = &auth_xform;
- auth_xform.next = NULL;
- /* Create Crypto session*/
- return rte_cryptodev_sym_session_create(dev_id, &cipher_xform);
- case HASH_CIPHER:
- auth_xform.next = &cipher_xform;
- cipher_xform.next = NULL;
- /* Create Crypto session*/
- return rte_cryptodev_sym_session_create(dev_id, &auth_xform);
- default:
- return NULL;
- }
-}
-
-#define SNOW3G_CIPHER_IV_LENGTH 16
-
-static struct rte_cryptodev_sym_session *
-test_perf_create_snow3g_session(uint8_t dev_id, enum chain_mode chain,
- enum rte_crypto_cipher_algorithm cipher_algo, unsigned cipher_key_len,
- enum rte_crypto_auth_algorithm auth_algo)
-{
- struct rte_crypto_sym_xform cipher_xform = {0};
- struct rte_crypto_sym_xform auth_xform = {0};
-
-
- /* Setup Cipher Parameters */
- cipher_xform.type = RTE_CRYPTO_SYM_XFORM_CIPHER;
- cipher_xform.cipher.algo = cipher_algo;
- cipher_xform.cipher.op = RTE_CRYPTO_CIPHER_OP_ENCRYPT;
-
- cipher_xform.cipher.key.data = snow3g_cipher_key;
- cipher_xform.cipher.key.length = cipher_key_len;
-
- /* Setup HMAC Parameters */
- auth_xform.type = RTE_CRYPTO_SYM_XFORM_AUTH;
- auth_xform.auth.op = RTE_CRYPTO_AUTH_OP_GENERATE;
- auth_xform.auth.algo = auth_algo;
-
- auth_xform.auth.add_auth_data_length = SNOW3G_CIPHER_IV_LENGTH;
- auth_xform.auth.key.data = snow3g_hash_key;
- auth_xform.auth.key.length = get_auth_key_max_length(auth_algo);
- auth_xform.auth.digest_length = get_auth_digest_length(auth_algo);
-
- switch (chain) {
- case CIPHER_HASH:
- cipher_xform.next = &auth_xform;
- auth_xform.next = NULL;
- /* Create Crypto session*/
- return rte_cryptodev_sym_session_create(dev_id, &cipher_xform);
- case HASH_CIPHER:
- auth_xform.next = &cipher_xform;
- cipher_xform.next = NULL;
- /* Create Crypto session*/
- return rte_cryptodev_sym_session_create(dev_id, &auth_xform);
- case CIPHER_ONLY:
- cipher_xform.next = NULL;
- /* Create Crypto session*/
- return rte_cryptodev_sym_session_create(dev_id, &cipher_xform);
- case HASH_ONLY:
- auth_xform.next = NULL;
- /* Create Crypto session */
- return rte_cryptodev_sym_session_create(dev_id, &auth_xform);
- default:
- return NULL;
- }
-}
-
-static struct rte_cryptodev_sym_session *
-test_perf_create_openssl_session(uint8_t dev_id, enum chain_mode chain,
- enum rte_crypto_cipher_algorithm cipher_algo,
- unsigned int cipher_key_len,
- enum rte_crypto_auth_algorithm auth_algo)
-{
- struct rte_crypto_sym_xform cipher_xform = { 0 };
- struct rte_crypto_sym_xform auth_xform = { 0 };
-
- /* Setup Cipher Parameters */
- cipher_xform.type = RTE_CRYPTO_SYM_XFORM_CIPHER;
- cipher_xform.cipher.algo = cipher_algo;
- cipher_xform.cipher.op = RTE_CRYPTO_CIPHER_OP_ENCRYPT;
-
- switch (cipher_algo) {
- case RTE_CRYPTO_CIPHER_3DES_CBC:
- case RTE_CRYPTO_CIPHER_3DES_CTR:
- cipher_xform.cipher.key.data = triple_des_key;
- break;
- case RTE_CRYPTO_CIPHER_AES_CBC:
- case RTE_CRYPTO_CIPHER_AES_CTR:
- case RTE_CRYPTO_CIPHER_AES_GCM:
- cipher_xform.cipher.key.data = aes_key;
- break;
- default:
- return NULL;
- }
-
- cipher_xform.cipher.key.length = cipher_key_len;
-
- /* Setup Auth Parameters */
- auth_xform.type = RTE_CRYPTO_SYM_XFORM_AUTH;
- auth_xform.auth.op = RTE_CRYPTO_AUTH_OP_GENERATE;
- auth_xform.auth.algo = auth_algo;
-
- switch (auth_algo) {
- case RTE_CRYPTO_AUTH_SHA1_HMAC:
- auth_xform.auth.key.data = hmac_sha_key;
- break;
- case RTE_CRYPTO_AUTH_AES_GCM:
- auth_xform.auth.key.data = NULL;
- break;
- default:
- return NULL;
- }
-
- auth_xform.auth.key.length = get_auth_key_max_length(auth_algo);
- auth_xform.auth.digest_length = get_auth_digest_length(auth_algo);
-
- switch (chain) {
- case CIPHER_HASH:
- cipher_xform.next = &auth_xform;
- auth_xform.next = NULL;
- /* Create Crypto session*/
- return rte_cryptodev_sym_session_create(dev_id, &cipher_xform);
- case HASH_CIPHER:
- auth_xform.next = &cipher_xform;
- cipher_xform.next = NULL;
- /* Create Crypto session*/
- return rte_cryptodev_sym_session_create(dev_id, &auth_xform);
- default:
- return NULL;
- }
-}
-
-#define AES_BLOCK_SIZE 16
-#define AES_CIPHER_IV_LENGTH 16
-
-#define TRIPLE_DES_BLOCK_SIZE 8
-#define TRIPLE_DES_CIPHER_IV_LENGTH 8
-
-static struct rte_mbuf *
-test_perf_create_pktmbuf(struct rte_mempool *mpool, unsigned buf_sz)
-{
- struct rte_mbuf *m = rte_pktmbuf_alloc(mpool);
-
- if (rte_pktmbuf_append(m, buf_sz) == NULL) {
- rte_pktmbuf_free(m);
- return NULL;
- }
-
- memset(rte_pktmbuf_mtod(m, uint8_t *), 0, buf_sz);
-
- return m;
-}
-
-static inline struct rte_crypto_op *
-test_perf_set_crypto_op_aes(struct rte_crypto_op *op, struct rte_mbuf *m,
- struct rte_cryptodev_sym_session *sess, unsigned data_len,
- unsigned digest_len)
-{
- if (rte_crypto_op_attach_sym_session(op, sess) != 0) {
- rte_crypto_op_free(op);
- return NULL;
- }
-
- /* Authentication Parameters */
- op->sym->auth.digest.data = rte_pktmbuf_mtod_offset(m, uint8_t *,
- AES_CIPHER_IV_LENGTH + data_len);
- op->sym->auth.digest.phys_addr = rte_pktmbuf_mtophys_offset(m,
- AES_CIPHER_IV_LENGTH + data_len);
- op->sym->auth.digest.length = digest_len;
- op->sym->auth.aad.data = aes_iv;
- op->sym->auth.aad.length = AES_CIPHER_IV_LENGTH;
-
- /* Cipher Parameters */
- op->sym->cipher.iv.data = rte_pktmbuf_mtod(m, uint8_t *);
- op->sym->cipher.iv.phys_addr = rte_pktmbuf_mtophys(m);
- op->sym->cipher.iv.length = AES_CIPHER_IV_LENGTH;
-
- rte_memcpy(op->sym->cipher.iv.data, aes_iv, AES_CIPHER_IV_LENGTH);
-
- /* Data lengths/offsets Parameters */
- op->sym->auth.data.offset = AES_CIPHER_IV_LENGTH;
- op->sym->auth.data.length = data_len;
-
- op->sym->cipher.data.offset = AES_CIPHER_IV_LENGTH;
- op->sym->cipher.data.length = data_len;
-
- op->sym->m_src = m;
-
- return op;
-}
-
-static inline struct rte_crypto_op *
-test_perf_set_crypto_op_aes_gcm(struct rte_crypto_op *op, struct rte_mbuf *m,
- struct rte_cryptodev_sym_session *sess, unsigned int data_len,
- unsigned int digest_len)
-{
- if (rte_crypto_op_attach_sym_session(op, sess) != 0) {
- rte_crypto_op_free(op);
- return NULL;
- }
-
- /* Authentication Parameters */
- op->sym->auth.digest.data = (uint8_t *)m->buf_addr +
- (m->data_off + data_len);
- op->sym->auth.digest.phys_addr =
- rte_pktmbuf_mtophys_offset(m, data_len);
- op->sym->auth.digest.length = digest_len;
- op->sym->auth.aad.data = aes_iv;
- op->sym->auth.aad.length = AES_CIPHER_IV_LENGTH;
-
- /* Cipher Parameters */
- op->sym->cipher.iv.data = aes_iv;
- op->sym->cipher.iv.length = AES_CIPHER_IV_LENGTH;
-
- /* Data lengths/offsets Parameters */
- op->sym->auth.data.offset = AES_BLOCK_SIZE;
- op->sym->auth.data.length = data_len - AES_BLOCK_SIZE;
-
- op->sym->cipher.data.offset = AES_BLOCK_SIZE;
- op->sym->cipher.data.length = data_len - AES_BLOCK_SIZE;
-
- op->sym->m_src = m;
-
- return op;
-}
-
-static inline struct rte_crypto_op *
-test_perf_set_crypto_op_snow3g(struct rte_crypto_op *op, struct rte_mbuf *m,
- struct rte_cryptodev_sym_session *sess, unsigned data_len,
- unsigned digest_len)
-{
- if (rte_crypto_op_attach_sym_session(op, sess) != 0) {
- rte_crypto_op_free(op);
- return NULL;
- }
-
- /* Authentication Parameters */
- op->sym->auth.digest.data = (uint8_t *)m->buf_addr +
- (m->data_off + data_len);
- op->sym->auth.digest.phys_addr =
- rte_pktmbuf_mtophys_offset(m, data_len);
- op->sym->auth.digest.length = digest_len;
- op->sym->auth.aad.data = snow3g_iv;
- op->sym->auth.aad.length = SNOW3G_CIPHER_IV_LENGTH;
-
- /* Cipher Parameters */
- op->sym->cipher.iv.data = snow3g_iv;
- op->sym->cipher.iv.length = SNOW3G_CIPHER_IV_LENGTH;
-
- /* Data lengths/offsets Parameters */
- op->sym->auth.data.offset = 0;
- op->sym->auth.data.length = data_len << 3;
-
- op->sym->cipher.data.offset = 0;
- op->sym->cipher.data.length = data_len << 3;
-
- op->sym->m_src = m;
-
- return op;
-}
-
-static inline struct rte_crypto_op *
-test_perf_set_crypto_op_snow3g_cipher(struct rte_crypto_op *op,
- struct rte_mbuf *m,
- struct rte_cryptodev_sym_session *sess,
- unsigned data_len)
-{
- if (rte_crypto_op_attach_sym_session(op, sess) != 0) {
- rte_crypto_op_free(op);
- return NULL;
- }
-
- /* Cipher Parameters */
- op->sym->cipher.iv.data = rte_pktmbuf_mtod(m, uint8_t *);
- op->sym->cipher.iv.length = SNOW3G_CIPHER_IV_LENGTH;
- rte_memcpy(op->sym->cipher.iv.data, snow3g_iv, SNOW3G_CIPHER_IV_LENGTH);
- op->sym->cipher.iv.phys_addr = rte_pktmbuf_mtophys(m);
-
- op->sym->cipher.data.offset = SNOW3G_CIPHER_IV_LENGTH;
- op->sym->cipher.data.length = data_len << 3;
-
- op->sym->m_src = m;
-
- return op;
-}
-
-
-static inline struct rte_crypto_op *
-test_perf_set_crypto_op_snow3g_hash(struct rte_crypto_op *op,
- struct rte_mbuf *m,
- struct rte_cryptodev_sym_session *sess,
- unsigned data_len,
- unsigned digest_len)
-{
- if (rte_crypto_op_attach_sym_session(op, sess) != 0) {
- rte_crypto_op_free(op);
- return NULL;
- }
-
- /* Authentication Parameters */
-
- op->sym->auth.digest.data =
- (uint8_t *)rte_pktmbuf_mtod_offset(m, uint8_t *,
- data_len);
- op->sym->auth.digest.phys_addr =
- rte_pktmbuf_mtophys_offset(m, data_len +
- SNOW3G_CIPHER_IV_LENGTH);
- op->sym->auth.digest.length = digest_len;
- op->sym->auth.aad.data = rte_pktmbuf_mtod(m, uint8_t *);
- op->sym->auth.aad.length = SNOW3G_CIPHER_IV_LENGTH;
- rte_memcpy(op->sym->auth.aad.data, snow3g_iv,
- SNOW3G_CIPHER_IV_LENGTH);
- op->sym->auth.aad.phys_addr = rte_pktmbuf_mtophys(m);
-
- /* Data lengths/offsets Parameters */
- op->sym->auth.data.offset = SNOW3G_CIPHER_IV_LENGTH;
- op->sym->auth.data.length = data_len << 3;
-
- op->sym->m_src = m;
-
- return op;
-}
-
-
-static inline struct rte_crypto_op *
-test_perf_set_crypto_op_3des(struct rte_crypto_op *op, struct rte_mbuf *m,
- struct rte_cryptodev_sym_session *sess, unsigned int data_len,
- unsigned int digest_len)
-{
- if (rte_crypto_op_attach_sym_session(op, sess) != 0) {
- rte_crypto_op_free(op);
- return NULL;
- }
-
- /* Authentication Parameters */
- op->sym->auth.digest.data = (uint8_t *)m->buf_addr +
- (m->data_off + data_len);
- op->sym->auth.digest.phys_addr =
- rte_pktmbuf_mtophys_offset(m, data_len);
- op->sym->auth.digest.length = digest_len;
- op->sym->auth.aad.data = triple_des_iv;
- op->sym->auth.aad.length = TRIPLE_DES_CIPHER_IV_LENGTH;
-
- /* Cipher Parameters */
- op->sym->cipher.iv.data = triple_des_iv;
- op->sym->cipher.iv.length = TRIPLE_DES_CIPHER_IV_LENGTH;
-
- /* Data lengths/offsets Parameters */
- op->sym->auth.data.offset = 0;
- op->sym->auth.data.length = data_len;
-
- op->sym->cipher.data.offset = TRIPLE_DES_BLOCK_SIZE;
- op->sym->cipher.data.length = data_len - TRIPLE_DES_BLOCK_SIZE;
-
- op->sym->m_src = m;
-
- return op;
-}
-
-/* An mbuf set is used in each burst. An mbuf can be used by multiple bursts at
- * same time, i.e. as they're not dereferenced there's no need to wait until
- * finished with to re-use */
-#define NUM_MBUF_SETS 8
-
-static int
-test_perf_aes_sha(uint8_t dev_id, uint16_t queue_id,
- struct perf_test_params *pparams)
-{
- uint16_t i, k, l, m;
- uint16_t j = 0;
- uint16_t ops_unused = 0;
-
- uint64_t burst_enqueued = 0, total_enqueued = 0, burst_dequeued = 0;
- uint64_t processed = 0, failed_polls = 0, retries = 0;
- uint64_t tsc_start = 0, tsc_end = 0;
-
- uint16_t digest_length = get_auth_digest_length(pparams->auth_algo);
-
- struct rte_crypto_op *ops[pparams->burst_size];
- struct rte_crypto_op *proc_ops[pparams->burst_size];
-
- struct rte_mbuf *mbufs[pparams->burst_size * 8];
-
- struct crypto_testsuite_params *ts_params = &testsuite_params;
-
- static struct rte_cryptodev_sym_session *sess;
-
- if (rte_cryptodev_count() == 0) {
- printf("\nNo crypto devices available. Is kernel driver loaded?\n");
- return TEST_FAILED;
- }
-
- /* Create Crypto session*/
- sess = test_perf_create_aes_sha_session(ts_params->dev_id,
- pparams->chain, pparams->cipher_algo,
- pparams->cipher_key_length, pparams->auth_algo);
- TEST_ASSERT_NOT_NULL(sess, "Session creation failed");
-
- /* Generate a burst of crypto operations */
- for (i = 0; i < (pparams->burst_size * NUM_MBUF_SETS); i++) {
- mbufs[i] = test_perf_create_pktmbuf(
- ts_params->mbuf_mp,
- pparams->buf_size);
-
- if (mbufs[i] == NULL) {
- printf("\nFailed to get mbuf - freeing the rest.\n");
- for (k = 0; k < i; k++)
- rte_pktmbuf_free(mbufs[k]);
- return -1;
- }
- /* Make room for Digest and IV in mbuf */
- rte_pktmbuf_append(mbufs[i], digest_length);
- rte_pktmbuf_prepend(mbufs[i], AES_CIPHER_IV_LENGTH);
- }
-
-
- tsc_start = rte_rdtsc_precise();
-
- while (total_enqueued < pparams->total_operations) {
- uint16_t burst_size =
- total_enqueued+pparams->burst_size <= pparams->total_operations ?
- pparams->burst_size : pparams->total_operations-total_enqueued;
- uint16_t ops_needed = burst_size-ops_unused;
-
- if (ops_needed != rte_crypto_op_bulk_alloc(ts_params->op_mpool,
- RTE_CRYPTO_OP_TYPE_SYMMETRIC, ops, ops_needed)){
- printf("\nFailed to alloc enough ops, finish dequeuing "
- "and free ops below.");
- } else {
- for (i = 0; i < ops_needed; i++)
- ops[i] = test_perf_set_crypto_op_aes(ops[i],
- mbufs[i + (pparams->burst_size *
- (j % NUM_MBUF_SETS))],
- sess, pparams->buf_size, digest_length);
-
- /* enqueue burst */
- burst_enqueued = rte_cryptodev_enqueue_burst(dev_id,
- queue_id, ops, burst_size);
-
- if (burst_enqueued < burst_size)
- retries++;
-
- ops_unused = burst_size-burst_enqueued;
- total_enqueued += burst_enqueued;
- }
-
- /* dequeue burst */
- burst_dequeued = rte_cryptodev_dequeue_burst(dev_id, queue_id,
- proc_ops, pparams->burst_size);
- if (burst_dequeued == 0)
- failed_polls++;
- else {
- processed += burst_dequeued;
-
- for (l = 0; l < burst_dequeued; l++)
- rte_crypto_op_free(proc_ops[l]);
- }
- j++;
- }
-
- /* Dequeue any operations still in the crypto device */
- while (processed < pparams->total_operations) {
- /* Sending 0 length burst to flush sw crypto device */
- rte_cryptodev_enqueue_burst(dev_id, queue_id, NULL, 0);
-
- /* dequeue burst */
- burst_dequeued = rte_cryptodev_dequeue_burst(dev_id, queue_id,
- proc_ops, pparams->burst_size);
- if (burst_dequeued == 0)
- failed_polls++;
- else {
- processed += burst_dequeued;
-
- for (m = 0; m < burst_dequeued; m++)
- rte_crypto_op_free(proc_ops[m]);
- }
- }
-
- tsc_end = rte_rdtsc_precise();
-
- double ops_s = ((double)processed / (tsc_end - tsc_start)) * rte_get_tsc_hz();
- double throughput = (ops_s * pparams->buf_size * 8) / 1000000000;
-
- printf("\t%u\t%6.2f\t%10.2f\t%8"PRIu64"\t%8"PRIu64, pparams->buf_size, ops_s/1000000,
- throughput, retries, failed_polls);
-
- for (i = 0; i < pparams->burst_size * NUM_MBUF_SETS; i++)
- rte_pktmbuf_free(mbufs[i]);
- rte_cryptodev_sym_session_free(dev_id, sess);
-
- printf("\n");
- return TEST_SUCCESS;
-}
-
-
-static int
-test_perf_snow3g(uint8_t dev_id, uint16_t queue_id,
- struct perf_test_params *pparams)
-{
- uint16_t i, k, l, m;
- uint16_t j = 0;
- uint16_t ops_unused = 0;
- uint64_t burst_enqueued = 0, total_enqueued = 0, burst_dequeued = 0;
- uint64_t processed = 0, failed_polls = 0, retries = 0;
- uint64_t tsc_start = 0, tsc_end = 0;
-
- uint16_t digest_length = get_auth_digest_length(pparams->auth_algo);
-
- struct rte_crypto_op *ops[pparams->burst_size];
- struct rte_crypto_op *proc_ops[pparams->burst_size];
-
- struct rte_mbuf *mbufs[pparams->burst_size * NUM_MBUF_SETS];
-
- struct crypto_testsuite_params *ts_params = &testsuite_params;
-
- static struct rte_cryptodev_sym_session *sess;
-
- if (rte_cryptodev_count() == 0) {
- printf("\nNo crypto devices found. Is PMD build configured?\n");
- printf("\nAnd is kernel driver loaded for HW PMDs?\n");
- return TEST_FAILED;
- }
-
- /* Create Crypto session*/
- sess = test_perf_create_snow3g_session(ts_params->dev_id,
- pparams->chain, pparams->cipher_algo,
- pparams->cipher_key_length, pparams->auth_algo);
- TEST_ASSERT_NOT_NULL(sess, "Session creation failed");
-
- /* Generate a burst of crypto operations */
- for (i = 0; i < (pparams->burst_size * NUM_MBUF_SETS); i++) {
- /*
- * Buffer size + iv/aad len is allocated, for perf tests they
- * are equal + digest len.
- */
- mbufs[i] = test_perf_create_pktmbuf(
- ts_params->mbuf_mp,
- pparams->buf_size + SNOW3G_CIPHER_IV_LENGTH +
- digest_length);
-
- if (mbufs[i] == NULL) {
- printf("\nFailed to get mbuf - freeing the rest.\n");
- for (k = 0; k < i; k++)
- rte_pktmbuf_free(mbufs[k]);
- return -1;
- }
-
- }
-
- tsc_start = rte_rdtsc_precise();
-
- while (total_enqueued < pparams->total_operations) {
- uint16_t burst_size =
- (total_enqueued+pparams->burst_size)
- <= pparams->total_operations ?
- pparams->burst_size : pparams->total_operations-total_enqueued;
- uint16_t ops_needed = burst_size-ops_unused;
- /* Handle the last burst correctly */
- uint16_t op_offset = pparams->burst_size - burst_size;
-
- if (ops_needed !=
- rte_crypto_op_bulk_alloc(ts_params->op_mpool,
- RTE_CRYPTO_OP_TYPE_SYMMETRIC,
- ops+op_offset, ops_needed)) {
- printf("\nFailed to alloc enough ops.");
- /*Don't exit, dequeue, more ops should become available*/
- } else {
- for (i = 0; i < ops_needed; i++) {
- if (pparams->chain == HASH_ONLY)
- ops[i+op_offset] =
- test_perf_set_crypto_op_snow3g_hash(ops[i+op_offset],
- mbufs[i +
- (pparams->burst_size * (j % NUM_MBUF_SETS))],
- sess,
- pparams->buf_size, digest_length);
- else if (pparams->chain == CIPHER_ONLY)
- ops[i+op_offset] =
- test_perf_set_crypto_op_snow3g_cipher(ops[i+op_offset],
- mbufs[i +
- (pparams->burst_size * (j % NUM_MBUF_SETS))],
- sess,
- pparams->buf_size);
- else
- return 1;
- }
-
- /* enqueue burst */
- burst_enqueued =
- rte_cryptodev_enqueue_burst(dev_id, queue_id,
- ops+op_offset, burst_size);
-
- if (burst_enqueued < burst_size)
- retries++;
-
- ops_unused = burst_size-burst_enqueued;
- total_enqueued += burst_enqueued;
- }
-
- /* dequeue burst */
- burst_dequeued = rte_cryptodev_dequeue_burst(dev_id, queue_id,
- proc_ops, pparams->burst_size);
- if (burst_dequeued == 0) {
- failed_polls++;
- } else {
- processed += burst_dequeued;
- for (l = 0; l < burst_dequeued; l++)
- rte_crypto_op_free(proc_ops[l]);
- }
- j++;
- }
-
- /* Dequeue any operations still in the crypto device */
- while (processed < pparams->total_operations) {
- /* Sending 0 length burst to flush sw crypto device */
- rte_cryptodev_enqueue_burst(dev_id, queue_id, NULL, 0);
-
- /* dequeue burst */
- burst_dequeued = rte_cryptodev_dequeue_burst(dev_id, queue_id,
- proc_ops, pparams->burst_size);
- if (burst_dequeued == 0)
- failed_polls++;
- else {
- processed += burst_dequeued;
- for (m = 0; m < burst_dequeued; m++)
- rte_crypto_op_free(proc_ops[m]);
- }
- }
-
- tsc_end = rte_rdtsc_precise();
-
- double ops_s = ((double)processed / (tsc_end - tsc_start)) * rte_get_tsc_hz();
- double cycles_burst = (double) (tsc_end - tsc_start) /
- (double) processed * pparams->burst_size;
- double cycles_buff = (double) (tsc_end - tsc_start) / (double) processed;
- double cycles_B = cycles_buff / pparams->buf_size;
- double throughput = (ops_s * pparams->buf_size * 8) / 1000000;
-
- if (gbl_cryptodev_perftest_devtype == RTE_CRYPTODEV_QAT_SYM_PMD) {
- /* Cycle count misleading on HW devices for this test, so don't print */
- printf("%4u\t%6.2f\t%10.2f\t n/a \t\t n/a "
- "\t\t n/a \t\t%8"PRIu64"\t%8"PRIu64,
- pparams->buf_size, ops_s/1000000,
- throughput, retries, failed_polls);
- } else {
- printf("%4u\t%6.2f\t%10.2f\t%10.2f\t%8.2f"
- "\t%8.2f\t%8"PRIu64"\t%8"PRIu64,
- pparams->buf_size, ops_s/1000000, throughput, cycles_burst,
- cycles_buff, cycles_B, retries, failed_polls);
- }
-
- for (i = 0; i < pparams->burst_size * NUM_MBUF_SETS; i++)
- rte_pktmbuf_free(mbufs[i]);
- rte_cryptodev_sym_session_free(dev_id, sess);
-
- printf("\n");
- return TEST_SUCCESS;
-}
-
-static int
-test_perf_openssl(uint8_t dev_id, uint16_t queue_id,
- struct perf_test_params *pparams)
-{
- uint16_t i, k, l, m;
- uint16_t j = 0;
- uint16_t ops_unused = 0;
-
- uint64_t burst_enqueued = 0, total_enqueued = 0, burst_dequeued = 0;
- uint64_t processed = 0, failed_polls = 0, retries = 0;
- uint64_t tsc_start = 0, tsc_end = 0;
-
- unsigned int digest_length = get_auth_digest_length(pparams->auth_algo);
-
- struct rte_crypto_op *ops[pparams->burst_size];
- struct rte_crypto_op *proc_ops[pparams->burst_size];
-
- struct rte_mbuf *mbufs[pparams->burst_size * NUM_MBUF_SETS];
-
- struct crypto_testsuite_params *ts_params = &testsuite_params;
-
- static struct rte_cryptodev_sym_session *sess;
-
- static struct rte_crypto_op *(*test_perf_set_crypto_op)
- (struct rte_crypto_op *, struct rte_mbuf *,
- struct rte_cryptodev_sym_session *,
- unsigned int, unsigned int);
-
- switch (pparams->cipher_algo) {
- case RTE_CRYPTO_CIPHER_3DES_CBC:
- case RTE_CRYPTO_CIPHER_3DES_CTR:
- test_perf_set_crypto_op = test_perf_set_crypto_op_3des;
- break;
- case RTE_CRYPTO_CIPHER_AES_CBC:
- case RTE_CRYPTO_CIPHER_AES_CTR:
- test_perf_set_crypto_op = test_perf_set_crypto_op_aes;
- break;
- case RTE_CRYPTO_CIPHER_AES_GCM:
- test_perf_set_crypto_op = test_perf_set_crypto_op_aes_gcm;
- break;
- default:
- return TEST_FAILED;
- }
-
- if (rte_cryptodev_count() == 0) {
- printf("\nNo crypto devices found. Is PMD build configured?\n");
- return TEST_FAILED;
- }
-
- /* Create Crypto session*/
- sess = test_perf_create_openssl_session(ts_params->dev_id,
- pparams->chain, pparams->cipher_algo,
- pparams->cipher_key_length, pparams->auth_algo);
- TEST_ASSERT_NOT_NULL(sess, "Session creation failed");
-
- /* Generate a burst of crypto operations */
- for (i = 0; i < (pparams->burst_size * NUM_MBUF_SETS); i++) {
- mbufs[i] = test_perf_create_pktmbuf(
- ts_params->mbuf_mp,
- pparams->buf_size);
-
- if (mbufs[i] == NULL) {
- printf("\nFailed to get mbuf - freeing the rest.\n");
- for (k = 0; k < i; k++)
- rte_pktmbuf_free(mbufs[k]);
- return -1;
- }
- }
-
- tsc_start = rte_rdtsc_precise();
-
- while (total_enqueued < pparams->total_operations) {
- uint16_t burst_size =
- total_enqueued + pparams->burst_size <=
- pparams->total_operations ? pparams->burst_size :
- pparams->total_operations - total_enqueued;
- uint16_t ops_needed = burst_size - ops_unused;
-
- if (ops_needed != rte_crypto_op_bulk_alloc(ts_params->op_mpool,
- RTE_CRYPTO_OP_TYPE_SYMMETRIC, ops, ops_needed)){
- printf("\nFailed to alloc enough ops, finish dequeuing "
- "and free ops below.");
- } else {
- for (i = 0; i < ops_needed; i++)
- ops[i] = test_perf_set_crypto_op(ops[i],
- mbufs[i + (pparams->burst_size *
- (j % NUM_MBUF_SETS))],
- sess, pparams->buf_size, digest_length);
-
- /* enqueue burst */
- burst_enqueued = rte_cryptodev_enqueue_burst(dev_id,
- queue_id, ops, burst_size);
-
- if (burst_enqueued < burst_size)
- retries++;
-
- ops_unused = burst_size - burst_enqueued;
- total_enqueued += burst_enqueued;
- }
-
- /* dequeue burst */
- burst_dequeued = rte_cryptodev_dequeue_burst(dev_id, queue_id,
- proc_ops, pparams->burst_size);
- if (burst_dequeued == 0)
- failed_polls++;
- else {
- processed += burst_dequeued;
-
- for (l = 0; l < burst_dequeued; l++)
- rte_crypto_op_free(proc_ops[l]);
- }
- j++;
- }
-
- /* Dequeue any operations still in the crypto device */
- while (processed < pparams->total_operations) {
- /* Sending 0 length burst to flush sw crypto device */
- rte_cryptodev_enqueue_burst(dev_id, queue_id, NULL, 0);
-
- /* dequeue burst */
- burst_dequeued = rte_cryptodev_dequeue_burst(dev_id, queue_id,
- proc_ops, pparams->burst_size);
- if (burst_dequeued == 0)
- failed_polls++;
- else {
- processed += burst_dequeued;
-
- for (m = 0; m < burst_dequeued; m++)
- rte_crypto_op_free(proc_ops[m]);
- }
- }
-
- tsc_end = rte_rdtsc_precise();
-
- double ops_s = ((double)processed / (tsc_end - tsc_start))
- * rte_get_tsc_hz();
- double throughput = (ops_s * pparams->buf_size * NUM_MBUF_SETS)
- / 1000000000;
-
- printf("\t%u\t%6.2f\t%10.2f\t%8"PRIu64"\t%8"PRIu64, pparams->buf_size,
- ops_s / 1000000, throughput, retries, failed_polls);
-
- for (i = 0; i < pparams->burst_size * NUM_MBUF_SETS; i++)
- rte_pktmbuf_free(mbufs[i]);
- rte_cryptodev_sym_session_free(dev_id, sess);
-
- printf("\n");
- return TEST_SUCCESS;
-}
-
-/*
-
- perf_test_aes_sha("avx2", HASH_CIPHER, 16, CBC, SHA1);
- perf_test_aes_sha("avx2", HASH_CIPHER, 16, CBC, SHA_256);
- perf_test_aes_sha("avx2", HASH_CIPHER, 16, CBC, SHA_512);
-
- perf_test_aes_sha("avx2", CIPHER_HASH, 32, CBC, SHA1);
- perf_test_aes_sha("avx2", CIPHER_HASH, 32, CBC, SHA_256);
- perf_test_aes_sha("avx2", CIPHER_HASH, 32, CBC, SHA_512);
-
- perf_test_aes_sha("avx2", HASH_CIPHER, 32, CBC, SHA1);
- perf_test_aes_sha("avx2", HASH_CIPHER, 32, CBC, SHA_256);
- perf_test_aes_sha("avx2", HASH_CIPHER, 32, CBC, SHA_512);
- */
-static int
-test_perf_aes_cbc_encrypt_digest_vary_pkt_size(void)
-{
- unsigned total_operations = 1000000;
- unsigned burst_size = 32;
- unsigned buf_lengths[] = { 64, 128, 256, 512, 768, 1024, 1280, 1536, 1792, 2048 };
- uint8_t i, j;
-
- struct perf_test_params params_set[] = {
- {
- .chain = CIPHER_HASH,
-
- .cipher_algo = RTE_CRYPTO_CIPHER_AES_CBC,
- .cipher_key_length = 16,
- .auth_algo = RTE_CRYPTO_AUTH_SHA1_HMAC
- },
- {
- .chain = CIPHER_HASH,
-
- .cipher_algo = RTE_CRYPTO_CIPHER_AES_CBC,
- .cipher_key_length = 16,
- .auth_algo = RTE_CRYPTO_AUTH_SHA256_HMAC
- },
- {
- .chain = CIPHER_HASH,
-
- .cipher_algo = RTE_CRYPTO_CIPHER_AES_CBC,
- .cipher_key_length = 16,
- .auth_algo = RTE_CRYPTO_AUTH_SHA512_HMAC
- },
- {
- .chain = CIPHER_HASH,
-
- .cipher_algo = RTE_CRYPTO_CIPHER_AES_CBC,
- .cipher_key_length = 32,
- .auth_algo = RTE_CRYPTO_AUTH_SHA1_HMAC
- },
- {
- .chain = CIPHER_HASH,
-
- .cipher_algo = RTE_CRYPTO_CIPHER_AES_CBC,
- .cipher_key_length = 32,
- .auth_algo = RTE_CRYPTO_AUTH_SHA256_HMAC
- },
- {
- .chain = CIPHER_HASH,
-
- .cipher_algo = RTE_CRYPTO_CIPHER_AES_CBC,
- .cipher_key_length = 32,
- .auth_algo = RTE_CRYPTO_AUTH_SHA512_HMAC
- },
- };
-
- for (i = 0; i < RTE_DIM(params_set); i++) {
-
- params_set[i].total_operations = total_operations;
- params_set[i].burst_size = burst_size;
- printf("\n%s. cipher algo: %s auth algo: %s cipher key size=%u."
- " burst_size: %d ops\n",
- chain_mode_name(params_set[i].chain),
- cipher_algo_name(params_set[i].cipher_algo),
- auth_algo_name(params_set[i].auth_algo),
- params_set[i].cipher_key_length,
- burst_size);
- printf("\nBuffer Size(B)\tOPS(M)\tThroughput(Gbps)\t"
- "Retries\tEmptyPolls\n");
- for (j = 0; j < RTE_DIM(buf_lengths); j++) {
- params_set[i].buf_size = buf_lengths[j];
- test_perf_aes_sha(testsuite_params.dev_id, 0,
- &params_set[i]);
- }
- }
- return 0;
-}
-
-static int
-test_perf_snow3G_vary_pkt_size(void)
-{
- unsigned total_operations = 1000000;
- uint8_t i, j;
- unsigned k;
- uint16_t burst_sizes[] = { 64 };
- uint16_t buf_lengths[] = { 40, 64, 80, 120, 240, 256, 400, 512, 600, 1024, 2048 };
-
- struct perf_test_params params_set[] = {
- {
- .chain = CIPHER_ONLY,
- .cipher_algo = RTE_CRYPTO_CIPHER_SNOW3G_UEA2,
- .cipher_key_length = 16,
- .auth_algo = RTE_CRYPTO_AUTH_NULL,
- },
- {
- .chain = HASH_ONLY,
- .cipher_algo = RTE_CRYPTO_CIPHER_NULL,
- .auth_algo = RTE_CRYPTO_AUTH_SNOW3G_UIA2,
- .cipher_key_length = 16
- },
- };
-
- printf("\n\nStart %s.", __func__);
- printf("\nTest to measure max throughput at various pkt sizes.");
- printf("\nOn HW devices t'put maximised when high Retries and EmptyPolls"
- " so cycle cost not relevant (n/a displayed).");
-
- for (i = 0; i < RTE_DIM(params_set); i++) {
- printf("\n\n");
- params_set[i].total_operations = total_operations;
- for (k = 0; k < RTE_DIM(burst_sizes); k++) {
- printf("\nOn %s dev%u qp%u, %s, "
- "cipher algo:%s, auth algo:%s, burst_size: %d ops",
- pmd_name(gbl_cryptodev_perftest_devtype),
- testsuite_params.dev_id, 0,
- chain_mode_name(params_set[i].chain),
- cipher_algo_name(params_set[i].cipher_algo),
- auth_algo_name(params_set[i].auth_algo),
- burst_sizes[k]);
-
- params_set[i].burst_size = burst_sizes[k];
- printf("\nPktSzB\tOp/s(M)\tThruput(Mbps)\tCycles/Burst\t"
- "Cycles/buf\tCycles/B\tRetries\t\tEmptyPolls\n");
- for (j = 0; j < RTE_DIM(buf_lengths); j++) {
-
- params_set[i].buf_size = buf_lengths[j];
-
- test_perf_snow3g(testsuite_params.dev_id, 0, &params_set[i]);
- }
- }
- }
-
- return 0;
-}
-
-static int
-test_perf_openssl_vary_pkt_size(void)
-{
- unsigned int total_operations = 10000;
- unsigned int burst_size = { 64 };
- unsigned int buf_lengths[] = { 64, 128, 256, 512, 768, 1024, 1280, 1536,
- 1792, 2048 };
- uint8_t i, j;
-
- struct perf_test_params params_set[] = {
- {
- .chain = CIPHER_HASH,
-
- .cipher_algo = RTE_CRYPTO_CIPHER_3DES_CBC,
- .cipher_key_length = 16,
- .auth_algo = RTE_CRYPTO_AUTH_SHA1_HMAC
- },
- {
- .chain = CIPHER_HASH,
-
- .cipher_algo = RTE_CRYPTO_CIPHER_3DES_CBC,
- .cipher_key_length = 24,
- .auth_algo = RTE_CRYPTO_AUTH_SHA1_HMAC
- },
- {
- .chain = CIPHER_HASH,
-
- .cipher_algo = RTE_CRYPTO_CIPHER_AES_CTR,
- .cipher_key_length = 16,
- .auth_algo = RTE_CRYPTO_AUTH_SHA1_HMAC
- },
- {
- .chain = CIPHER_HASH,
-
- .cipher_algo = RTE_CRYPTO_CIPHER_AES_CTR,
- .cipher_key_length = 32,
- .auth_algo = RTE_CRYPTO_AUTH_SHA1_HMAC
- },
- {
- .chain = CIPHER_HASH,
-
- .cipher_algo = RTE_CRYPTO_CIPHER_3DES_CTR,
- .cipher_key_length = 16,
- .auth_algo = RTE_CRYPTO_AUTH_SHA1_HMAC
- },
- {
- .chain = CIPHER_HASH,
-
- .cipher_algo = RTE_CRYPTO_CIPHER_3DES_CTR,
- .cipher_key_length = 24,
- .auth_algo = RTE_CRYPTO_AUTH_SHA1_HMAC
- },
- {
- .chain = CIPHER_HASH,
-
- .cipher_algo = RTE_CRYPTO_CIPHER_AES_GCM,
- .cipher_key_length = 16,
- .auth_algo = RTE_CRYPTO_AUTH_AES_GCM
- },
- };
-
- for (i = 0; i < RTE_DIM(params_set); i++) {
- params_set[i].total_operations = total_operations;
- params_set[i].burst_size = burst_size;
- printf("\n%s. cipher algo: %s auth algo: %s cipher key size=%u."
- " burst_size: %d ops\n",
- chain_mode_name(params_set[i].chain),
- cipher_algo_name(params_set[i].cipher_algo),
- auth_algo_name(params_set[i].auth_algo),
- params_set[i].cipher_key_length,
- burst_size);
- printf("\nBuffer Size(B)\tOPS(M)\tThroughput(Gbps)\tRetries\t"
- "EmptyPolls\n");
- for (j = 0; j < RTE_DIM(buf_lengths); j++) {
- params_set[i].buf_size = buf_lengths[j];
- test_perf_openssl(testsuite_params.dev_id, 0,
- &params_set[i]);
- }
- }
-
- return 0;
-}
-
-static int
-test_perf_openssl_vary_burst_size(void)
-{
- unsigned int total_operations = 4096;
- uint16_t buf_lengths[] = { 40 };
- uint8_t i, j;
-
- struct perf_test_params params_set[] = {
- {
- .chain = CIPHER_HASH,
-
- .cipher_algo = RTE_CRYPTO_CIPHER_3DES_CBC,
- .cipher_key_length = 16,
- .auth_algo = RTE_CRYPTO_AUTH_SHA1_HMAC
- },
- {
- .chain = CIPHER_HASH,
-
- .cipher_algo = RTE_CRYPTO_CIPHER_3DES_CBC,
- .cipher_key_length = 24,
- .auth_algo = RTE_CRYPTO_AUTH_SHA1_HMAC
- },
- {
- .chain = CIPHER_HASH,
-
- .cipher_algo = RTE_CRYPTO_CIPHER_AES_CTR,
- .cipher_key_length = 16,
- .auth_algo = RTE_CRYPTO_AUTH_SHA1_HMAC
- },
- {
- .chain = CIPHER_HASH,
-
- .cipher_algo = RTE_CRYPTO_CIPHER_AES_CTR,
- .cipher_key_length = 32,
- .auth_algo = RTE_CRYPTO_AUTH_SHA1_HMAC
- },
- {
- .chain = CIPHER_HASH,
-
- .cipher_algo = RTE_CRYPTO_CIPHER_3DES_CTR,
- .cipher_key_length = 16,
- .auth_algo = RTE_CRYPTO_AUTH_SHA1_HMAC
- },
- {
- .chain = CIPHER_HASH,
-
- .cipher_algo = RTE_CRYPTO_CIPHER_3DES_CTR,
- .cipher_key_length = 24,
- .auth_algo = RTE_CRYPTO_AUTH_SHA1_HMAC
- },
- {
- .chain = CIPHER_HASH,
-
- .cipher_algo = RTE_CRYPTO_CIPHER_AES_GCM,
- .cipher_key_length = 16,
- .auth_algo = RTE_CRYPTO_AUTH_AES_GCM
- },
- };
-
- printf("\n\nStart %s.", __func__);
- printf("\nThis Test measures the average IA cycle cost using a "
- "constant request(packet) size. ");
- printf("Cycle cost is only valid when indicators show device is not"
- " busy, i.e. Retries and EmptyPolls = 0");
-
- for (i = 0; i < RTE_DIM(params_set); i++) {
- printf("\n");
- params_set[i].total_operations = total_operations;
-
- for (j = 0; j < RTE_DIM(buf_lengths); j++) {
- params_set[i].buf_size = buf_lengths[j];
- test_perf_openssl_optimise_cyclecount(&params_set[i]);
- }
- }
-
- return 0;
-}
-
-static int
-test_perf_aes_cbc_vary_burst_size(void)
-{
- return test_perf_crypto_qp_vary_burst_size(testsuite_params.dev_id);
-}
-
-
-static struct rte_cryptodev_sym_session *
-test_perf_create_session(uint8_t dev_id, struct perf_test_params *pparams)
-{
- static struct rte_cryptodev_sym_session *sess;
- struct rte_crypto_sym_xform cipher_xform = { 0 };
- struct rte_crypto_sym_xform auth_xform = { 0 };
-
- uint8_t cipher_key[pparams->session_attrs->key_cipher_len];
- uint8_t auth_key[pparams->session_attrs->key_auth_len];
-
- memcpy(cipher_key, pparams->session_attrs->key_cipher_data,
- pparams->session_attrs->key_cipher_len);
- memcpy(auth_key, pparams->session_attrs->key_auth_data,
- pparams->session_attrs->key_auth_len);
-
- cipher_xform.type = RTE_CRYPTO_SYM_XFORM_CIPHER;
- cipher_xform.next = NULL;
-
- cipher_xform.cipher.algo = pparams->session_attrs->cipher_algorithm;
- cipher_xform.cipher.op = pparams->session_attrs->cipher;
- cipher_xform.cipher.key.data = cipher_key;
- cipher_xform.cipher.key.length = pparams->session_attrs->key_cipher_len;
-
- auth_xform.type = RTE_CRYPTO_SYM_XFORM_AUTH;
- auth_xform.next = NULL;
-
- auth_xform.auth.op = pparams->session_attrs->auth;
- auth_xform.auth.algo = pparams->session_attrs->auth_algorithm;
-
- auth_xform.auth.digest_length = pparams->session_attrs->digest_len;
- auth_xform.auth.key.length = pparams->session_attrs->key_auth_len;
-
-
- cipher_xform.cipher.op = RTE_CRYPTO_CIPHER_OP_ENCRYPT;
- if (cipher_xform.cipher.op == RTE_CRYPTO_CIPHER_OP_ENCRYPT) {
- cipher_xform.next = &auth_xform;
- sess = rte_cryptodev_sym_session_create(dev_id,
- &cipher_xform);
- } else {
- auth_xform.next = &cipher_xform;
- sess = rte_cryptodev_sym_session_create(dev_id,
- &auth_xform);
- }
-
- return sess;
-}
-
-static inline struct rte_crypto_op *
-perf_gcm_set_crypto_op(struct rte_crypto_op *op, struct rte_mbuf *m,
- struct rte_cryptodev_sym_session *sess,
- struct crypto_params *m_hlp,
- struct perf_test_params *params)
-{
- if (rte_crypto_op_attach_sym_session(op, sess) != 0) {
- rte_crypto_op_free(op);
- return NULL;
- }
-
- uint16_t iv_pad_len = ALIGN_POW2_ROUNDUP(params->symmetric_op->iv_len,
- 16);
-
- op->sym->auth.digest.data = m_hlp->digest;
- op->sym->auth.digest.phys_addr = rte_pktmbuf_mtophys_offset(
- m,
- params->symmetric_op->aad_len +
- iv_pad_len +
- params->symmetric_op->p_len);
-
- op->sym->auth.digest.length = params->symmetric_op->t_len;
-
- op->sym->auth.aad.data = m_hlp->aad;
- op->sym->auth.aad.length = params->symmetric_op->aad_len;
- op->sym->auth.aad.phys_addr = rte_pktmbuf_mtophys_offset(
- m,
- iv_pad_len);
-
- rte_memcpy(op->sym->auth.aad.data, params->symmetric_op->aad_data,
- params->symmetric_op->aad_len);
-
- op->sym->cipher.iv.data = m_hlp->iv;
- rte_memcpy(op->sym->cipher.iv.data, params->symmetric_op->iv_data,
- params->symmetric_op->iv_len);
- if (params->symmetric_op->iv_len == 12)
- op->sym->cipher.iv.data[15] = 1;
-
- op->sym->cipher.iv.length = params->symmetric_op->iv_len;
-
- op->sym->auth.data.offset =
- iv_pad_len + params->symmetric_op->aad_len;
- op->sym->auth.data.length = params->symmetric_op->p_len;
-
- op->sym->cipher.data.offset =
- iv_pad_len + params->symmetric_op->aad_len;
- op->sym->cipher.data.length = params->symmetric_op->p_len;
-
- op->sym->m_src = m;
-
- return op;
-}
-
-static struct rte_mbuf *
-test_perf_create_pktmbuf_fill(struct rte_mempool *mpool,
- struct perf_test_params *params,
- unsigned buf_sz, struct crypto_params *m_hlp)
-{
- struct rte_mbuf *m = rte_pktmbuf_alloc(mpool);
- uint16_t iv_pad_len =
- ALIGN_POW2_ROUNDUP(params->symmetric_op->iv_len, 16);
- uint16_t aad_len = params->symmetric_op->aad_len;
- uint16_t digest_size = params->symmetric_op->t_len;
- char *p;
-
- p = rte_pktmbuf_append(m, aad_len);
- if (p == NULL) {
- rte_pktmbuf_free(m);
- return NULL;
- }
- m_hlp->aad = (uint8_t *)p;
-
- p = rte_pktmbuf_append(m, iv_pad_len);
- if (p == NULL) {
- rte_pktmbuf_free(m);
- return NULL;
- }
- m_hlp->iv = (uint8_t *)p;
-
- p = rte_pktmbuf_append(m, buf_sz);
- if (p == NULL) {
- rte_pktmbuf_free(m);
- return NULL;
- }
- rte_memcpy(p, params->symmetric_op->p_data, buf_sz);
-
- p = rte_pktmbuf_append(m, digest_size);
- if (p == NULL) {
- rte_pktmbuf_free(m);
- return NULL;
- }
- m_hlp->digest = (uint8_t *)p;
-
- return m;
-}
-
-static int
-perf_AES_GCM(uint8_t dev_id, uint16_t queue_id,
- struct perf_test_params *pparams, uint32_t test_ops)
-{
- int j = 0;
- struct crypto_testsuite_params *ts_params = &testsuite_params;
- struct rte_cryptodev_sym_session *sess;
- struct rte_crypto_op *ops[pparams->burst_size];
- struct rte_crypto_op *proc_ops[pparams->burst_size];
- uint32_t total_operations = pparams->total_operations;
-
- uint64_t burst_enqueued = 0, total_enqueued = 0, burst_dequeued = 0;
- uint64_t processed = 0, failed_polls = 0, retries = 0;
- uint64_t tsc_start = 0, tsc_end = 0;
-
- uint16_t i = 0, l = 0, m = 0;
- uint16_t burst = pparams->burst_size * NUM_MBUF_SETS;
- uint16_t ops_unused = 0;
-
- struct rte_mbuf *mbufs[burst];
- struct crypto_params m_hlp[burst];
-
- if (rte_cryptodev_count() == 0) {
- printf("\nNo crypto devices available. "
- "Is kernel driver loaded?\n");
- return TEST_FAILED;
- }
-
- sess = test_perf_create_session(dev_id, pparams);
- TEST_ASSERT_NOT_NULL(sess, "Session creation failed");
-
- for (i = 0; i < burst; i++) {
- mbufs[i] = test_perf_create_pktmbuf_fill(
- ts_params->mbuf_mp,
- pparams, pparams->symmetric_op->p_len,
- &m_hlp[i]);
- }
-
- if (test_ops)
- total_operations = test_ops;
-
- tsc_start = rte_rdtsc_precise();
- while (total_enqueued < total_operations) {
- uint16_t burst_size =
- total_enqueued+pparams->burst_size <= total_operations ?
- pparams->burst_size : total_operations-total_enqueued;
- uint16_t ops_needed = burst_size-ops_unused;
-
- if (ops_needed != rte_crypto_op_bulk_alloc(ts_params->op_mpool,
- RTE_CRYPTO_OP_TYPE_SYMMETRIC, ops, ops_needed)){
- printf("\nFailed to alloc enough ops, "
- "finish dequeuing");
- } else {
- for (i = 0; i < ops_needed; i++)
- ops[i] = perf_gcm_set_crypto_op(ops[i],
- mbufs[i + (pparams->burst_size *
- (j % NUM_MBUF_SETS))],
- sess, &m_hlp[i + (pparams->burst_size *
- (j % NUM_MBUF_SETS))], pparams);
-
- /* enqueue burst */
- burst_enqueued = rte_cryptodev_enqueue_burst(dev_id,
- queue_id, ops, burst_size);
-
- if (burst_enqueued < burst_size)
- retries++;
-
- ops_unused = burst_size-burst_enqueued;
- total_enqueued += burst_enqueued;
- }
-
- /* dequeue burst */
- burst_dequeued = rte_cryptodev_dequeue_burst(dev_id, queue_id,
- proc_ops, pparams->burst_size);
- if (burst_dequeued == 0)
- failed_polls++;
- else {
- processed += burst_dequeued;
-
- for (l = 0; l < burst_dequeued; l++)
- rte_crypto_op_free(proc_ops[l]);
- }
-
- j++;
- }
-
- /* Dequeue any operations still in the crypto device */
- while (processed < total_operations) {
- /* Sending 0 length burst to flush sw crypto device */
- rte_cryptodev_enqueue_burst(dev_id, queue_id, NULL, 0);
-
- /* dequeue burst */
- burst_dequeued = rte_cryptodev_dequeue_burst(dev_id, queue_id,
- proc_ops, pparams->burst_size);
- if (burst_dequeued == 0)
- failed_polls++;
- else {
- processed += burst_dequeued;
-
- for (m = 0; m < burst_dequeued; m++) {
- if (test_ops) {
- uint16_t iv_pad_len = ALIGN_POW2_ROUNDUP
- (pparams->symmetric_op->iv_len, 16);
- uint8_t *pkt = rte_pktmbuf_mtod(
- proc_ops[m]->sym->m_src,
- uint8_t *);
-
- TEST_ASSERT_BUFFERS_ARE_EQUAL(
- pparams->symmetric_op->c_data,
- pkt + iv_pad_len +
- pparams->symmetric_op->aad_len,
- pparams->symmetric_op->c_len,
- "GCM Ciphertext data not as expected");
-
- TEST_ASSERT_BUFFERS_ARE_EQUAL(
- pparams->symmetric_op->t_data,
- pkt + iv_pad_len +
- pparams->symmetric_op->aad_len +
- pparams->symmetric_op->c_len,
- pparams->symmetric_op->t_len,
- "GCM MAC data not as expected");
-
- }
- rte_crypto_op_free(proc_ops[m]);
- }
- }
- }
-
- tsc_end = rte_rdtsc_precise();
-
- double ops_s = ((double)processed / (tsc_end - tsc_start))
- * rte_get_tsc_hz();
- double throughput = (ops_s * pparams->symmetric_op->p_len * 8)
- / 1000000000;
-
- if (!test_ops) {
- printf("\n%u\t\t%6.2f\t%16.2f\t%8"PRIu64"\t%10"PRIu64,
- pparams->symmetric_op->p_len,
- ops_s/1000000, throughput, retries, failed_polls);
- }
-
- for (i = 0; i < burst; i++)
- rte_pktmbuf_free(mbufs[i]);
- rte_cryptodev_sym_session_free(dev_id, sess);
-
- return 0;
-}
-
-static int
-test_perf_AES_GCM(int continual_buf_len, int continual_size)
-{
- uint16_t i, j, k, loops = 1;
-
- uint16_t buf_lengths[] = { 64, 128, 256, 512, 1024, 1536, 2048 };
-
- static const struct cryptodev_perf_test_data *gcm_tests[] = {
- &AES_GCM_128_12IV_0AAD
- };
-
- if (continual_buf_len)
- loops = continual_size;
-
- int TEST_CASES_GCM = RTE_DIM(gcm_tests);
-
- const unsigned burst_size = 32;
-
- struct symmetric_op ops_set[TEST_CASES_GCM];
- struct perf_test_params params_set[TEST_CASES_GCM];
- struct symmetric_session_attrs session_attrs[TEST_CASES_GCM];
- static const struct cryptodev_perf_test_data *gcm_test;
-
- for (i = 0; i < TEST_CASES_GCM; ++i) {
-
- gcm_test = gcm_tests[i];
-
- session_attrs[i].cipher =
- RTE_CRYPTO_CIPHER_OP_ENCRYPT;
- session_attrs[i].cipher_algorithm =
- RTE_CRYPTO_CIPHER_AES_GCM;
- session_attrs[i].key_cipher_data =
- gcm_test->key.data;
- session_attrs[i].key_cipher_len =
- gcm_test->key.len;
- session_attrs[i].auth_algorithm =
- RTE_CRYPTO_AUTH_AES_GCM;
- session_attrs[i].auth =
- RTE_CRYPTO_AUTH_OP_GENERATE;
- session_attrs[i].key_auth_data = NULL;
- session_attrs[i].key_auth_len = 0;
- session_attrs[i].digest_len =
- gcm_test->auth_tag.len;
-
- ops_set[i].aad_data = gcm_test->aad.data;
- ops_set[i].aad_len = gcm_test->aad.len;
- ops_set[i].iv_data = gcm_test->iv.data;
- ops_set[i].iv_len = gcm_test->iv.len;
- ops_set[i].p_data = gcm_test->plaintext.data;
- ops_set[i].p_len = buf_lengths[i];
- ops_set[i].c_data = gcm_test->ciphertext.data;
- ops_set[i].c_len = buf_lengths[i];
- ops_set[i].t_data = gcm_test->auth_tags[i].data;
- ops_set[i].t_len = gcm_test->auth_tags[i].len;
-
- params_set[i].chain = CIPHER_HASH;
- params_set[i].session_attrs = &session_attrs[i];
- params_set[i].symmetric_op = &ops_set[i];
- if (continual_buf_len)
- params_set[i].total_operations = 0xFFFFFF;
- else
- params_set[i].total_operations = 1000000;
-
- params_set[i].burst_size = burst_size;
-
- }
-
- if (continual_buf_len)
- printf("\nCipher algo: %s Cipher hash: %s cipher key size: %ub"
- " burst size: %u", "AES_GCM", "AES_GCM",
- gcm_test->key.len << 3, burst_size);
-
- for (i = 0; i < RTE_DIM(gcm_tests); i++) {
-
- if (!continual_buf_len) {
- printf("\nCipher algo: %s Cipher hash: %s cipher key size: %ub"
- " burst size: %u", "AES_GCM", "AES_GCM",
- gcm_test->key.len << 3, burst_size);
- printf("\nBuffer Size(B)\tOPS(M)\tThroughput(Gbps)\t"
- " Retries\tEmptyPolls");
- }
-
- uint16_t len = RTE_DIM(buf_lengths);
- uint16_t p = 0;
-
- if (continual_buf_len) {
- for (k = 0; k < RTE_DIM(buf_lengths); k++)
- if (buf_lengths[k] == continual_buf_len) {
- len = k + 1;
- p = k;
- break;
- }
- }
- for (j = p; j < len; ++j) {
-
- params_set[i].symmetric_op->c_len = buf_lengths[j];
- params_set[i].symmetric_op->p_len = buf_lengths[j];
-
- ops_set[i].t_data = gcm_tests[i]->auth_tags[j].data;
- ops_set[i].t_len = gcm_tests[i]->auth_tags[j].len;
-
- /* Run is twice, one for encryption/hash checks,
- * one for perf
- */
- if (perf_AES_GCM(testsuite_params.dev_id, 0,
- &params_set[i], 1))
- return TEST_FAILED;
-
- for (k = 0; k < loops; k++) {
- if (continual_buf_len)
- printf("\n\nBuffer Size(B)\tOPS(M)\t"
- "Throughput(Gbps)\t"
- "Retries\tEmptyPolls");
- if (perf_AES_GCM(testsuite_params.dev_id, 0,
- &params_set[i], 0))
- return TEST_FAILED;
- if (continual_buf_len)
- printf("\n\nCompleted loop %i of %i ...",
- k+1, loops);
- }
- }
-
- }
- printf("\n");
- return 0;
-}
-
-static int test_cryptodev_perf_AES_GCM(void)
-{
- return test_perf_AES_GCM(0, 0);
-}
-/*
- * This function calls AES GCM performance tests providing
- * size of packet as an argument. If size of packet is not
- * in the buf_lengths array, all sizes will be used
- */
-static int test_continual_perf_AES_GCM(void)
-{
- return test_perf_AES_GCM(1024, 10);
-}
-
-static int
-test_perf_continual_performance_test(void)
-{
- unsigned int total_operations = 0xFFFFFF;
- unsigned int total_loops = 10;
- unsigned int burst_size = 32;
- uint8_t i;
-
- struct perf_test_params params_set = {
- .total_operations = total_operations,
- .burst_size = burst_size,
- .buf_size = 1024,
-
- .chain = CIPHER_HASH,
-
- .cipher_algo = RTE_CRYPTO_CIPHER_AES_CBC,
- .cipher_key_length = 16,
- .auth_algo = RTE_CRYPTO_AUTH_SHA1_HMAC
- };
-
- for (i = 1; i <= total_loops; ++i) {
- printf("\n%s. cipher algo: %s auth algo: %s cipher key size=%u."
- " burst_size: %d ops\n",
- chain_mode_name(params_set.chain),
- cipher_algo_name(params_set.cipher_algo),
- auth_algo_name(params_set.auth_algo),
- params_set.cipher_key_length,
- burst_size);
- printf("\nBuffer Size(B)\tOPS(M)\tThroughput(Gbps)\t"
- "Retries\tEmptyPolls\n");
- test_perf_aes_sha(testsuite_params.dev_id, 0,
- &params_set);
- printf("\nCompleted loop %i of %i ...", i, total_loops);
- }
- return 0;
-}
-
-static struct unit_test_suite cryptodev_qat_continual_testsuite = {
- .suite_name = "Crypto Device Continual Performance Test",
- .setup = testsuite_setup,
- .teardown = testsuite_teardown,
- .unit_test_cases = {
- TEST_CASE_ST(ut_setup, ut_teardown,
- test_perf_continual_performance_test),
- TEST_CASE_ST(ut_setup, ut_teardown,
- test_continual_perf_AES_GCM),
- TEST_CASES_END() /**< NULL terminate unit test array */
- }
-};
-
-static struct unit_test_suite cryptodev_testsuite = {
- .suite_name = "Crypto Device Unit Test Suite",
- .setup = testsuite_setup,
- .teardown = testsuite_teardown,
- .unit_test_cases = {
- TEST_CASE_ST(ut_setup, ut_teardown,
- test_perf_aes_cbc_encrypt_digest_vary_pkt_size),
- TEST_CASE_ST(ut_setup, ut_teardown,
- test_cryptodev_perf_AES_GCM),
- TEST_CASE_ST(ut_setup, ut_teardown,
- test_perf_aes_cbc_vary_burst_size),
- TEST_CASES_END() /**< NULL terminate unit test array */
- }
-};
-
-static struct unit_test_suite cryptodev_gcm_testsuite = {
- .suite_name = "Crypto Device AESNI GCM Unit Test Suite",
- .setup = testsuite_setup,
- .teardown = testsuite_teardown,
- .unit_test_cases = {
- TEST_CASE_ST(ut_setup, ut_teardown,
- test_cryptodev_perf_AES_GCM),
- TEST_CASES_END() /**< NULL terminate unit test array */
- }
-};
-
-static struct unit_test_suite cryptodev_aes_testsuite = {
- .suite_name = "Crypto Device AESNI MB Unit Test Suite",
- .setup = testsuite_setup,
- .teardown = testsuite_teardown,
- .unit_test_cases = {
- TEST_CASE_ST(ut_setup, ut_teardown,
- test_perf_aes_cbc_encrypt_digest_vary_pkt_size),
- TEST_CASES_END() /**< NULL terminate unit test array */
- }
-};
-
-static struct unit_test_suite cryptodev_snow3g_testsuite = {
- .suite_name = "Crypto Device SNOW3G Unit Test Suite",
- .setup = testsuite_setup,
- .teardown = testsuite_teardown,
- .unit_test_cases = {
- TEST_CASE_ST(ut_setup, ut_teardown,
- test_perf_snow3G_vary_pkt_size),
- TEST_CASE_ST(ut_setup, ut_teardown,
- test_perf_snow3G_vary_burst_size),
- TEST_CASES_END() /**< NULL terminate unit test array */
- }
-};
-
-static struct unit_test_suite cryptodev_openssl_testsuite = {
- .suite_name = "Crypto Device OPENSSL Unit Test Suite",
- .setup = testsuite_setup,
- .teardown = testsuite_teardown,
- .unit_test_cases = {
- TEST_CASE_ST(ut_setup, ut_teardown,
- test_perf_openssl_vary_pkt_size),
- TEST_CASE_ST(ut_setup, ut_teardown,
- test_perf_openssl_vary_burst_size),
- TEST_CASES_END() /**< NULL terminate unit test array */
- }
-};
-
-static int
-perftest_aesni_gcm_cryptodev(void)
-{
- gbl_cryptodev_perftest_devtype = RTE_CRYPTODEV_AESNI_GCM_PMD;
-
- return unit_test_suite_runner(&cryptodev_gcm_testsuite);
-}
-
-static int
-perftest_aesni_mb_cryptodev(void /*argv __rte_unused, int argc __rte_unused*/)
-{
- gbl_cryptodev_perftest_devtype = RTE_CRYPTODEV_AESNI_MB_PMD;
-
- return unit_test_suite_runner(&cryptodev_aes_testsuite);
-}
-
-static int
-perftest_qat_cryptodev(void /*argv __rte_unused, int argc __rte_unused*/)
-{
- gbl_cryptodev_perftest_devtype = RTE_CRYPTODEV_QAT_SYM_PMD;
-
- return unit_test_suite_runner(&cryptodev_testsuite);
-}
-
-static int
-perftest_sw_snow3g_cryptodev(void /*argv __rte_unused, int argc __rte_unused*/)
-{
- gbl_cryptodev_perftest_devtype = RTE_CRYPTODEV_SNOW3G_PMD;
-
- return unit_test_suite_runner(&cryptodev_snow3g_testsuite);
-}
-
-static int
-perftest_qat_snow3g_cryptodev(void /*argv __rte_unused, int argc __rte_unused*/)
-{
- gbl_cryptodev_perftest_devtype = RTE_CRYPTODEV_QAT_SYM_PMD;
-
- return unit_test_suite_runner(&cryptodev_snow3g_testsuite);
-}
-
-static int
-perftest_openssl_cryptodev(void /*argv __rte_unused, int argc __rte_unused*/)
-{
- gbl_cryptodev_perftest_devtype = RTE_CRYPTODEV_OPENSSL_PMD;
-
- return unit_test_suite_runner(&cryptodev_openssl_testsuite);
-}
-
-static int
-perftest_qat_continual_cryptodev(void)
-{
- gbl_cryptodev_perftest_devtype = RTE_CRYPTODEV_QAT_SYM_PMD;
-
- return unit_test_suite_runner(&cryptodev_qat_continual_testsuite);
-}
-
-REGISTER_TEST_COMMAND(cryptodev_aesni_mb_perftest, perftest_aesni_mb_cryptodev);
-REGISTER_TEST_COMMAND(cryptodev_qat_perftest, perftest_qat_cryptodev);
-REGISTER_TEST_COMMAND(cryptodev_sw_snow3g_perftest, perftest_sw_snow3g_cryptodev);
-REGISTER_TEST_COMMAND(cryptodev_qat_snow3g_perftest, perftest_qat_snow3g_cryptodev);
-REGISTER_TEST_COMMAND(cryptodev_aesni_gcm_perftest, perftest_aesni_gcm_cryptodev);
-REGISTER_TEST_COMMAND(cryptodev_openssl_perftest,
- perftest_openssl_cryptodev);
-REGISTER_TEST_COMMAND(cryptodev_qat_continual_perftest,
- perftest_qat_continual_cryptodev);
diff --git a/app/test/test_cryptodev_snow3g_hash_test_vectors.h b/app/test/test_cryptodev_snow3g_hash_test_vectors.h
deleted file mode 100644
index a8a47db5..00000000
--- a/app/test/test_cryptodev_snow3g_hash_test_vectors.h
+++ /dev/null
@@ -1,548 +0,0 @@
-/*-
- * BSD LICENSE
- *
- * Copyright(c) 2016 Intel Corporation. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * * Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * * Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in
- * the documentation and/or other materials provided with the
- * distribution.
- * * Neither the name of Intel Corporation nor the names of its
- * contributors may be used to endorse or promote products derived
- * from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
- * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
- * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#ifndef TEST_CRYPTODEV_SNOW3G_HASH_TEST_VECTORS_H_
-#define TEST_CRYPTODEV_SNOW3G_HASH_TEST_VECTORS_H_
-
-struct snow3g_hash_test_data {
- struct {
- uint8_t data[64];
- unsigned len;
- } key;
-
- struct {
- uint8_t data[64];
- unsigned len;
- } aad;
-
- struct {
- uint8_t data[2056];
- unsigned len; /* length must be in Bits */
- } plaintext;
-
- struct {
- unsigned len;
- } validAuthLenInBits;
-
- struct {
- unsigned len;
- } validAuthOffsetLenInBits;
-
- struct {
- uint8_t data[64];
- unsigned len;
- } digest;
-};
-
-struct snow3g_hash_test_data snow3g_hash_test_case_1 = {
- .key = {
- .data = {
- 0xC7, 0x36, 0xC6, 0xAA, 0xB2, 0x2B, 0xFF, 0xF9,
- 0x1E, 0x26, 0x98, 0xD2, 0xE2, 0x2A, 0xD5, 0x7E
- },
- .len = 16
- },
- .aad = {
- .data = {
- 0x14, 0x79, 0x3E, 0x41, 0x03, 0x97, 0xE8, 0xFD,
- 0x94, 0x79, 0x3E, 0x41, 0x03, 0x97, 0x68, 0xFD
- },
- .len = 16
- },
- .plaintext = {
- .data = {
- 0xD0, 0xA7, 0xD4, 0x63, 0xDF, 0x9F, 0xB2, 0xB2,
- 0x78, 0x83, 0x3F, 0xA0, 0x2E, 0x23, 0x5A, 0xA1,
- 0x72, 0xBD, 0x97, 0x0C, 0x14, 0x73, 0xE1, 0x29,
- 0x07, 0xFB, 0x64, 0x8B, 0x65, 0x99, 0xAA, 0xA0,
- 0xB2, 0x4A, 0x03, 0x86, 0x65, 0x42, 0x2B, 0x20,
- 0xA4, 0x99, 0x27, 0x6A, 0x50, 0x42, 0x70, 0x09
- },
- .len = 384
- },
- .validAuthLenInBits = {
- .len = 384
- },
- .validAuthOffsetLenInBits = {
- .len = 128
- },
- .digest = {
- .data = {0x38, 0xB5, 0x54, 0xC0 },
- .len = 4
- }
-};
-
-struct snow3g_hash_test_data snow3g_hash_test_case_2 = {
- .key = {
- .data = {
- 0xF4, 0xEB, 0xEC, 0x69, 0xE7, 0x3E, 0xAF, 0x2E,
- 0xB2, 0xCF, 0x6A, 0xF4, 0xB3, 0x12, 0x0F, 0xFD
- },
- .len = 16
- },
- .aad = {
- .data = {
- 0x29, 0x6F, 0x39, 0x3C, 0x6B, 0x22, 0x77, 0x37,
- 0xA9, 0x6F, 0x39, 0x3C, 0x6B, 0x22, 0xF7, 0x37
- },
- .len = 16
- },
- .plaintext = {
- .data = {
- 0x10, 0xBF, 0xFF, 0x83, 0x9E, 0x0C, 0x71, 0x65,
- 0x8D, 0xBB, 0x2D, 0x17, 0x07, 0xE1, 0x45, 0x72,
- 0x4F, 0x41, 0xC1, 0x6F, 0x48, 0xBF, 0x40, 0x3C,
- 0x3B, 0x18, 0xE3, 0x8F, 0xD5, 0xD1, 0x66, 0x3B,
- 0x6F, 0x6D, 0x90, 0x01, 0x93, 0xE3, 0xCE, 0xA8,
- 0xBB, 0x4F, 0x1B, 0x4F, 0x5B, 0xE8, 0x22, 0x03,
- 0x22, 0x32, 0xA7, 0x8D, 0x7D, 0x75, 0x23, 0x8D,
- 0x5E, 0x6D, 0xAE, 0xCD, 0x3B, 0x43, 0x22, 0xCF,
- 0x59, 0xBC, 0x7E, 0xA8, 0x4A, 0xB1, 0x88, 0x11,
- 0xB5, 0xBF, 0xB7, 0xBC, 0x55, 0x3F, 0x4F, 0xE4,
- 0x44, 0x78, 0xCE, 0x28, 0x7A, 0x14, 0x87, 0x99,
- 0x90, 0xD1, 0x8D, 0x12, 0xCA, 0x79, 0xD2, 0xC8,
- 0x55, 0x14, 0x90, 0x21, 0xCD, 0x5C, 0xE8, 0xCA,
- 0x03, 0x71, 0xCA, 0x04, 0xFC, 0xCE, 0x14, 0x3E,
- 0x3D, 0x7C, 0xFE, 0xE9, 0x45, 0x85, 0xB5, 0x88,
- 0x5C, 0xAC, 0x46, 0x06, 0x8B
- },
- .len = 1000
- },
- .validAuthLenInBits = {
- .len = 1000
- },
- .validAuthOffsetLenInBits = {
- .len = 128
- },
- .digest = {
- .data = {0x06, 0x17, 0x45, 0xAE},
- .len = 4
- }
-};
-
-struct snow3g_hash_test_data snow3g_hash_test_case_3 = {
- .key = {
- .data = {
- 0xB3, 0x12, 0x0F, 0xFD, 0xB2, 0xCF, 0x6A, 0xF4,
- 0xE7, 0x3E, 0xAF, 0x2E, 0xF4, 0xEB, 0xEC, 0x69
- },
- .len = 16
- },
- .aad = {
- .data = {
- 0x29, 0x6F, 0x39, 0x3C, 0x6B, 0x22, 0x77, 0x37,
- 0xA9, 0x6F, 0x39, 0x3C, 0x6B, 0x22, 0xF7, 0x37
- },
- .len = 16
- },
- .plaintext = {
- .data = {
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
- 0xE0, 0x95, 0x80, 0x45, 0xF3, 0xA0, 0xBB, 0xA4,
- 0xE3, 0x96, 0x83, 0x46, 0xF0, 0xA3, 0xB8, 0xA7,
- 0xC0, 0x2A, 0x01, 0x8A, 0xE6, 0x40, 0x76, 0x52,
- 0x26, 0xB9, 0x87, 0xC9, 0x13, 0xE6, 0xCB, 0xF0,
- 0x83, 0x57, 0x00, 0x16, 0xCF, 0x83, 0xEF, 0xBC,
- 0x61, 0xC0, 0x82, 0x51, 0x3E, 0x21, 0x56, 0x1A,
- 0x42, 0x7C, 0x00, 0x9D, 0x28, 0xC2, 0x98, 0xEF,
- 0xAC, 0xE7, 0x8E, 0xD6, 0xD5, 0x6C, 0x2D, 0x45,
- 0x05, 0xAD, 0x03, 0x2E, 0x9C, 0x04, 0xDC, 0x60,
- 0xE7, 0x3A, 0x81, 0x69, 0x6D, 0xA6, 0x65, 0xC6,
- 0xC4, 0x86, 0x03, 0xA5, 0x7B, 0x45, 0xAB, 0x33,
- 0x22, 0x15, 0x85, 0xE6, 0x8E, 0xE3, 0x16, 0x91,
- 0x87, 0xFB, 0x02, 0x39, 0x52, 0x86, 0x32, 0xDD,
- 0x65, 0x6C, 0x80, 0x7E, 0xA3, 0x24, 0x8B, 0x7B,
- 0x46, 0xD0, 0x02, 0xB2, 0xB5, 0xC7, 0x45, 0x8E,
- 0xB8, 0x5B, 0x9C, 0xE9, 0x58, 0x79, 0xE0, 0x34,
- 0x08, 0x59, 0x05, 0x5E, 0x3B, 0x0A, 0xBB, 0xC3,
- 0xEA, 0xCE, 0x87, 0x19, 0xCA, 0xA8, 0x02, 0x65,
- 0xC9, 0x72, 0x05, 0xD5, 0xDC, 0x4B, 0xCC, 0x90,
- 0x2F, 0xE1, 0x83, 0x96, 0x29, 0xED, 0x71, 0x32,
- 0x8A, 0x0F, 0x04, 0x49, 0xF5, 0x88, 0x55, 0x7E,
- 0x68, 0x98, 0x86, 0x0E, 0x04, 0x2A, 0xEC, 0xD8,
- 0x4B, 0x24, 0x04, 0xC2, 0x12, 0xC9, 0x22, 0x2D,
- 0xA5, 0xBF, 0x8A, 0x89, 0xEF, 0x67, 0x97, 0x87,
- 0x0C, 0xF5, 0x07, 0x71, 0xA6, 0x0F, 0x66, 0xA2,
- 0xEE, 0x62, 0x85, 0x36, 0x57, 0xAD, 0xDF, 0x04,
- 0xCD, 0xDE, 0x07, 0xFA, 0x41, 0x4E, 0x11, 0xF1,
- 0x2B, 0x4D, 0x81, 0xB9, 0xB4, 0xE8, 0xAC, 0x53,
- 0x8E, 0xA3, 0x06, 0x66, 0x68, 0x8D, 0x88, 0x1F,
- 0x6C, 0x34, 0x84, 0x21, 0x99, 0x2F, 0x31, 0xB9,
- 0x4F, 0x88, 0x06, 0xED, 0x8F, 0xCC, 0xFF, 0x4C,
- 0x91, 0x23, 0xB8, 0x96, 0x42, 0x52, 0x7A, 0xD6,
- 0x13, 0xB1, 0x09, 0xBF, 0x75, 0x16, 0x74, 0x85,
- 0xF1, 0x26, 0x8B, 0xF8, 0x84, 0xB4, 0xCD, 0x23,
- 0xD2, 0x9A, 0x09, 0x34, 0x92, 0x57, 0x03, 0xD6,
- 0x34, 0x09, 0x8F, 0x77, 0x67, 0xF1, 0xBE, 0x74,
- 0x91, 0xE7, 0x08, 0xA8, 0xBB, 0x94, 0x9A, 0x38,
- 0x73, 0x70, 0x8A, 0xEF, 0x4A, 0x36, 0x23, 0x9E,
- 0x50, 0xCC, 0x08, 0x23, 0x5C, 0xD5, 0xED, 0x6B,
- 0xBE, 0x57, 0x86, 0x68, 0xA1, 0x7B, 0x58, 0xC1,
- 0x17, 0x1D, 0x0B, 0x90, 0xE8, 0x13, 0xA9, 0xE4,
- 0xF5, 0x8A, 0x89, 0xD7, 0x19, 0xB1, 0x10, 0x42,
- 0xD6, 0x36, 0x0B, 0x1B, 0x0F, 0x52, 0xDE, 0xB7,
- 0x30, 0xA5, 0x8D, 0x58, 0xFA, 0xF4, 0x63, 0x15,
- 0x95, 0x4B, 0x0A, 0x87, 0x26, 0x91, 0x47, 0x59,
- 0x77, 0xDC, 0x88, 0xC0, 0xD7, 0x33, 0xFE, 0xFF,
- 0x54, 0x60, 0x0A, 0x0C, 0xC1, 0xD0, 0x30, 0x0A,
- 0xAA, 0xEB, 0x94, 0x57, 0x2C, 0x6E, 0x95, 0xB0,
- 0x1A, 0xE9, 0x0D, 0xE0, 0x4F, 0x1D, 0xCE, 0x47,
- 0xF8, 0x7E, 0x8F, 0xA7, 0xBE, 0xBF, 0x77, 0xE1,
- 0xDB, 0xC2, 0x0D, 0x6B, 0xA8, 0x5C, 0xB9, 0x14,
- 0x3D, 0x51, 0x8B, 0x28, 0x5D, 0xFA, 0x04, 0xB6,
- 0x98, 0xBF, 0x0C, 0xF7, 0x81, 0x9F, 0x20, 0xFA,
- 0x7A, 0x28, 0x8E, 0xB0, 0x70, 0x3D, 0x99, 0x5C,
- 0x59, 0x94, 0x0C, 0x7C, 0x66, 0xDE, 0x57, 0xA9,
- 0xB7, 0x0F, 0x82, 0x37, 0x9B, 0x70, 0xE2, 0x03,
- 0x1E, 0x45, 0x0F, 0xCF, 0xD2, 0x18, 0x13, 0x26,
- 0xFC, 0xD2, 0x8D, 0x88, 0x23, 0xBA, 0xAA, 0x80,
- 0xDF, 0x6E, 0x0F, 0x44, 0x35, 0x59, 0x64, 0x75,
- 0x39, 0xFD, 0x89, 0x07, 0xC0, 0xFF, 0xD9, 0xD7,
- 0x9C, 0x13, 0x0E, 0xD8, 0x1C, 0x9A, 0xFD, 0x9B,
- 0x7E, 0x84, 0x8C, 0x9F, 0xED, 0x38, 0x44, 0x3D,
- 0x5D, 0x38, 0x0E, 0x53, 0xFB, 0xDB, 0x8A, 0xC8,
- 0xC3, 0xD3, 0xF0, 0x68, 0x76, 0x05, 0x4F, 0x12,
- 0x24, 0x61, 0x10, 0x7D, 0xE9, 0x2F, 0xEA, 0x09,
- 0xC6, 0xF6, 0x92, 0x3A, 0x18, 0x8D, 0x53, 0xAF,
- 0xE5, 0x4A, 0x10, 0xF6, 0x0E, 0x6E, 0x9D, 0x5A,
- 0x03, 0xD9, 0x96, 0xB5, 0xFB, 0xC8, 0x20, 0xF8,
- 0xA6, 0x37, 0x11, 0x6A, 0x27, 0xAD, 0x04, 0xB4,
- 0x44, 0xA0, 0x93, 0x2D, 0xD6, 0x0F, 0xBD, 0x12,
- 0x67, 0x1C, 0x11, 0xE1, 0xC0, 0xEC, 0x73, 0xE7,
- 0x89, 0x87, 0x9F, 0xAA, 0x3D, 0x42, 0xC6, 0x4D,
- 0x20, 0xCD, 0x12, 0x52, 0x74, 0x2A, 0x37, 0x68,
- 0xC2, 0x5A, 0x90, 0x15, 0x85, 0x88, 0x8E, 0xCE,
- 0xE1, 0xE6, 0x12, 0xD9, 0x93, 0x6B, 0x40, 0x3B,
- 0x07, 0x75, 0x94, 0x9A, 0x66, 0xCD, 0xFD, 0x99,
- 0xA2, 0x9B, 0x13, 0x45, 0xBA, 0xA8, 0xD9, 0xD5,
- 0x40, 0x0C, 0x91, 0x02, 0x4B, 0x0A, 0x60, 0x73,
- 0x63, 0xB0, 0x13, 0xCE, 0x5D, 0xE9, 0xAE, 0x86,
- 0x9D, 0x3B, 0x8D, 0x95, 0xB0, 0x57, 0x0B, 0x3C,
- 0x2D, 0x39, 0x14, 0x22, 0xD3, 0x24, 0x50, 0xCB,
- 0xCF, 0xAE, 0x96, 0x65, 0x22, 0x86, 0xE9, 0x6D,
- 0xEC, 0x12, 0x14, 0xA9, 0x34, 0x65, 0x27, 0x98,
- 0x0A, 0x81, 0x92, 0xEA, 0xC1, 0xC3, 0x9A, 0x3A,
- 0xAF, 0x6F, 0x15, 0x35, 0x1D, 0xA6, 0xBE, 0x76,
- 0x4D, 0xF8, 0x97, 0x72, 0xEC, 0x04, 0x07, 0xD0,
- 0x6E, 0x44, 0x15, 0xBE, 0xFA, 0xE7, 0xC9, 0x25,
- 0x80, 0xDF, 0x9B, 0xF5, 0x07, 0x49, 0x7C, 0x8F,
- 0x29, 0x95, 0x16, 0x0D, 0x4E, 0x21, 0x8D, 0xAA,
- 0xCB, 0x02, 0x94, 0x4A, 0xBF, 0x83, 0x34, 0x0C,
- 0xE8, 0xBE, 0x16, 0x86, 0xA9, 0x60, 0xFA, 0xF9,
- 0x0E, 0x2D, 0x90, 0xC5, 0x5C, 0xC6, 0x47, 0x5B,
- 0xAB, 0xC3, 0x17, 0x1A, 0x80, 0xA3, 0x63, 0x17,
- 0x49, 0x54, 0x95, 0x5D, 0x71, 0x01, 0xDA, 0xB1,
- 0x6A, 0xE8, 0x17, 0x91, 0x67, 0xE2, 0x14, 0x44,
- 0xB4, 0x43, 0xA9, 0xEA, 0xAA, 0x7C, 0x91, 0xDE,
- 0x36, 0xD1, 0x18, 0xC3, 0x9D, 0x38, 0x9F, 0x8D,
- 0xD4, 0x46, 0x9A, 0x84, 0x6C, 0x9A, 0x26, 0x2B,
- 0xF7, 0xFA, 0x18, 0x48, 0x7A, 0x79, 0xE8, 0xDE,
- 0x11, 0x69, 0x9E, 0x0B, 0x8F, 0xDF, 0x55, 0x7C,
- 0xB4, 0x87, 0x19, 0xD4, 0x53, 0xBA, 0x71, 0x30,
- 0x56, 0x10, 0x9B, 0x93, 0xA2, 0x18, 0xC8, 0x96,
- 0x75, 0xAC, 0x19, 0x5F, 0xB4, 0xFB, 0x06, 0x63,
- 0x9B, 0x37, 0x97, 0x14, 0x49, 0x55, 0xB3, 0xC9,
- 0x32, 0x7D, 0x1A, 0xEC, 0x00, 0x3D, 0x42, 0xEC,
- 0xD0, 0xEA, 0x98, 0xAB, 0xF1, 0x9F, 0xFB, 0x4A,
- 0xF3, 0x56, 0x1A, 0x67, 0xE7, 0x7C, 0x35, 0xBF,
- 0x15, 0xC5, 0x9C, 0x24, 0x12, 0xDA, 0x88, 0x1D,
- 0xB0, 0x2B, 0x1B, 0xFB, 0xCE, 0xBF, 0xAC, 0x51,
- 0x52, 0xBC, 0x99, 0xBC, 0x3F, 0x1D, 0x15, 0xF7,
- 0x71, 0x00, 0x1B, 0x70, 0x29, 0xFE, 0xDB, 0x02,
- 0x8F, 0x8B, 0x85, 0x2B, 0xC4, 0x40, 0x7E, 0xB8,
- 0x3F, 0x89, 0x1C, 0x9C, 0xA7, 0x33, 0x25, 0x4F,
- 0xDD, 0x1E, 0x9E, 0xDB, 0x56, 0x91, 0x9C, 0xE9,
- 0xFE, 0xA2, 0x1C, 0x17, 0x40, 0x72, 0x52, 0x1C,
- 0x18, 0x31, 0x9A, 0x54, 0xB5, 0xD4, 0xEF, 0xBE,
- 0xBD, 0xDF, 0x1D, 0x8B, 0x69, 0xB1, 0xCB, 0xF2,
- 0x5F, 0x48, 0x9F, 0xCC, 0x98, 0x13, 0x72, 0x54,
- 0x7C, 0xF4, 0x1D, 0x00, 0x8E, 0xF0, 0xBC, 0xA1,
- 0x92, 0x6F, 0x93, 0x4B, 0x73, 0x5E, 0x09, 0x0B,
- 0x3B, 0x25, 0x1E, 0xB3, 0x3A, 0x36, 0xF8, 0x2E,
- 0xD9, 0xB2, 0x9C, 0xF4, 0xCB, 0x94, 0x41, 0x88,
- 0xFA, 0x0E, 0x1E, 0x38, 0xDD, 0x77, 0x8F, 0x7D,
- 0x1C, 0x9D, 0x98, 0x7B, 0x28, 0xD1, 0x32, 0xDF,
- 0xB9, 0x73, 0x1F, 0xA4, 0xF4, 0xB4, 0x16, 0x93,
- 0x5B, 0xE4, 0x9D, 0xE3, 0x05, 0x16, 0xAF, 0x35,
- 0x78, 0x58, 0x1F, 0x2F, 0x13, 0xF5, 0x61, 0xC0,
- 0x66, 0x33, 0x61, 0x94, 0x1E, 0xAB, 0x24, 0x9A,
- 0x4B, 0xC1, 0x23, 0xF8, 0xD1, 0x5C, 0xD7, 0x11,
- 0xA9, 0x56, 0xA1, 0xBF, 0x20, 0xFE, 0x6E, 0xB7,
- 0x8A, 0xEA, 0x23, 0x73, 0x36, 0x1D, 0xA0, 0x42,
- 0x6C, 0x79, 0xA5, 0x30, 0xC3, 0xBB, 0x1D, 0xE0,
- 0xC9, 0x97, 0x22, 0xEF, 0x1F, 0xDE, 0x39, 0xAC,
- 0x2B, 0x00, 0xA0, 0xA8, 0xEE, 0x7C, 0x80, 0x0A,
- 0x08, 0xBC, 0x22, 0x64, 0xF8, 0x9F, 0x4E, 0xFF,
- 0xE6, 0x27, 0xAC, 0x2F, 0x05, 0x31, 0xFB, 0x55,
- 0x4F, 0x6D, 0x21, 0xD7, 0x4C, 0x59, 0x0A, 0x70,
- 0xAD, 0xFA, 0xA3, 0x90, 0xBD, 0xFB, 0xB3, 0xD6,
- 0x8E, 0x46, 0x21, 0x5C, 0xAB, 0x18, 0x7D, 0x23,
- 0x68, 0xD5, 0xA7, 0x1F, 0x5E, 0xBE, 0xC0, 0x81,
- 0xCD, 0x3B, 0x20, 0xC0, 0x82, 0xDB, 0xE4, 0xCD,
- 0x2F, 0xAC, 0xA2, 0x87, 0x73, 0x79, 0x5D, 0x6B,
- 0x0C, 0x10, 0x20, 0x4B, 0x65, 0x9A, 0x93, 0x9E,
- 0xF2, 0x9B, 0xBE, 0x10, 0x88, 0x24, 0x36, 0x24,
- 0x42, 0x99, 0x27, 0xA7, 0xEB, 0x57, 0x6D, 0xD3,
- 0xA0, 0x0E, 0xA5, 0xE0, 0x1A, 0xF5, 0xD4, 0x75,
- 0x83, 0xB2, 0x27, 0x2C, 0x0C, 0x16, 0x1A, 0x80,
- 0x65, 0x21, 0xA1, 0x6F, 0xF9, 0xB0, 0xA7, 0x22,
- 0xC0, 0xCF, 0x26, 0xB0, 0x25, 0xD5, 0x83, 0x6E,
- 0x22, 0x58, 0xA4, 0xF7, 0xD4, 0x77, 0x3A, 0xC8,
- 0x01, 0xE4, 0x26, 0x3B, 0xC2, 0x94, 0xF4, 0x3D,
- 0xEF, 0x7F, 0xA8, 0x70, 0x3F, 0x3A, 0x41, 0x97,
- 0x46, 0x35, 0x25, 0x88, 0x76, 0x52, 0xB0, 0xB2,
- 0xA4, 0xA2, 0xA7, 0xCF, 0x87, 0xF0, 0x09, 0x14,
- 0x87, 0x1E, 0x25, 0x03, 0x91, 0x13, 0xC7, 0xE1,
- 0x61, 0x8D, 0xA3, 0x40, 0x64, 0xB5, 0x7A, 0x43,
- 0xC4, 0x63, 0x24, 0x9F, 0xB8, 0xD0, 0x5E, 0x0F,
- 0x26, 0xF4, 0xA6, 0xD8, 0x49, 0x72, 0xE7, 0xA9,
- 0x05, 0x48, 0x24, 0x14, 0x5F, 0x91, 0x29, 0x5C,
- 0xDB, 0xE3, 0x9A, 0x6F, 0x92, 0x0F, 0xAC, 0xC6,
- 0x59, 0x71, 0x2B, 0x46, 0xA5, 0x4B, 0xA2, 0x95,
- 0xBB, 0xE6, 0xA9, 0x01, 0x54, 0xE9, 0x1B, 0x33,
- 0x98, 0x5A, 0x2B, 0xCD, 0x42, 0x0A, 0xD5, 0xC6,
- 0x7E, 0xC9, 0xAD, 0x8E, 0xB7, 0xAC, 0x68, 0x64,
- 0xDB, 0x27, 0x2A, 0x51, 0x6B, 0xC9, 0x4C, 0x28,
- 0x39, 0xB0, 0xA8, 0x16, 0x9A, 0x6B, 0xF5, 0x8E,
- 0x1A, 0x0C, 0x2A, 0xDA, 0x8C, 0x88, 0x3B, 0x7B,
- 0xF4, 0x97, 0xA4, 0x91, 0x71, 0x26, 0x8E, 0xD1,
- 0x5D, 0xDD, 0x29, 0x69, 0x38, 0x4E, 0x7F, 0xF4,
- 0xBF, 0x4A, 0xAB, 0x2E, 0xC9, 0xEC, 0xC6, 0x52,
- 0x9C, 0xF6, 0x29, 0xE2, 0xDF, 0x0F, 0x08, 0xA7,
- 0x7A, 0x65, 0xAF, 0xA1, 0x2A, 0xA9, 0xB5, 0x05,
- 0xDF, 0x8B, 0x28, 0x7E, 0xF6, 0xCC, 0x91, 0x49,
- 0x3D, 0x1C, 0xAA, 0x39, 0x07, 0x6E, 0x28, 0xEF,
- 0x1E, 0xA0, 0x28, 0xF5, 0x11, 0x8D, 0xE6, 0x1A,
- 0xE0, 0x2B, 0xB6, 0xAE, 0xFC, 0x33, 0x43, 0xA0,
- 0x50, 0x29, 0x2F, 0x19, 0x9F, 0x40, 0x18, 0x57,
- 0xB2, 0xBE, 0xAD, 0x5E, 0x6E, 0xE2, 0xA1, 0xF1,
- 0x91, 0x02, 0x2F, 0x92, 0x78, 0x01, 0x6F, 0x04,
- 0x77, 0x91, 0xA9, 0xD1, 0x8D, 0xA7, 0xD2, 0xA6,
- 0xD2, 0x7F, 0x2E, 0x0E, 0x51, 0xC2, 0xF6, 0xEA,
- 0x30, 0xE8, 0xAC, 0x49, 0xA0, 0x60, 0x4F, 0x4C,
- 0x13, 0x54, 0x2E, 0x85, 0xB6, 0x83, 0x81, 0xB9,
- 0xFD, 0xCF, 0xA0, 0xCE, 0x4B, 0x2D, 0x34, 0x13,
- 0x54, 0x85, 0x2D, 0x36, 0x02, 0x45, 0xC5, 0x36,
- 0xB6, 0x12, 0xAF, 0x71, 0xF3, 0xE7, 0x7C, 0x90,
- 0x95, 0xAE, 0x2D, 0xBD, 0xE5, 0x04, 0xB2, 0x65,
- 0x73, 0x3D, 0xAB, 0xFE, 0x10, 0xA2, 0x0F, 0xC7,
- 0xD6, 0xD3, 0x2C, 0x21, 0xCC, 0xC7, 0x2B, 0x8B,
- 0x34, 0x44, 0xAE, 0x66, 0x3D, 0x65, 0x92, 0x2D,
- 0x17, 0xF8, 0x2C, 0xAA, 0x2B, 0x86, 0x5C, 0xD8,
- 0x89, 0x13, 0xD2, 0x91, 0xA6, 0x58, 0x99, 0x02,
- 0x6E, 0xA1, 0x32, 0x84, 0x39, 0x72, 0x3C, 0x19,
- 0x8C, 0x36, 0xB0, 0xC3, 0xC8, 0xD0, 0x85, 0xBF,
- 0xAF, 0x8A, 0x32, 0x0F, 0xDE, 0x33, 0x4B, 0x4A,
- 0x49, 0x19, 0xB4, 0x4C, 0x2B, 0x95, 0xF6, 0xE8,
- 0xEC, 0xF7, 0x33, 0x93, 0xF7, 0xF0, 0xD2, 0xA4,
- 0x0E, 0x60, 0xB1, 0xD4, 0x06, 0x52, 0x6B, 0x02,
- 0x2D, 0xDC, 0x33, 0x18, 0x10, 0xB1, 0xA5, 0xF7,
- 0xC3, 0x47, 0xBD, 0x53, 0xED, 0x1F, 0x10, 0x5D,
- 0x6A, 0x0D, 0x30, 0xAB, 0xA4, 0x77, 0xE1, 0x78,
- 0x88, 0x9A, 0xB2, 0xEC, 0x55, 0xD5, 0x58, 0xDE,
- 0xAB, 0x26, 0x30, 0x20, 0x43, 0x36, 0x96, 0x2B,
- 0x4D, 0xB5, 0xB6, 0x63, 0xB6, 0x90, 0x2B, 0x89,
- 0xE8, 0x5B, 0x31, 0xBC, 0x6A, 0xF5, 0x0F, 0xC5,
- 0x0A, 0xCC, 0xB3, 0xFB, 0x9B, 0x57, 0xB6, 0x63,
- 0x29, 0x70, 0x31, 0x37, 0x8D, 0xB4, 0x78, 0x96,
- 0xD7, 0xFB, 0xAF, 0x6C, 0x60, 0x0A, 0xDD, 0x2C,
- 0x67, 0xF9, 0x36, 0xDB, 0x03, 0x79, 0x86, 0xDB,
- 0x85, 0x6E, 0xB4, 0x9C, 0xF2, 0xDB, 0x3F, 0x7D,
- 0xA6, 0xD2, 0x36, 0x50, 0xE4, 0x38, 0xF1, 0x88,
- 0x40, 0x41, 0xB0, 0x13, 0x11, 0x9E, 0x4C, 0x2A,
- 0xE5, 0xAF, 0x37, 0xCC, 0xCD, 0xFB, 0x68, 0x66,
- 0x07, 0x38, 0xB5, 0x8B, 0x3C, 0x59, 0xD1, 0xC0,
- 0x24, 0x84, 0x37, 0x47, 0x2A, 0xBA, 0x1F, 0x35,
- 0xCA, 0x1F, 0xB9, 0x0C, 0xD7, 0x14, 0xAA, 0x9F,
- 0x63, 0x55, 0x34, 0xF4, 0x9E, 0x7C, 0x5B, 0xBA,
- 0x81, 0xC2, 0xB6, 0xB3, 0x6F, 0xDE, 0xE2, 0x1C,
- 0xA2, 0x7E, 0x34, 0x7F, 0x79, 0x3D, 0x2C, 0xE9,
- 0x44, 0xED, 0xB2, 0x3C, 0x8C, 0x9B, 0x91, 0x4B,
- 0xE1, 0x03, 0x35, 0xE3, 0x50, 0xFE, 0xB5, 0x07,
- 0x03, 0x94, 0xB7, 0xA4, 0xA1, 0x5C, 0x0C, 0xA1,
- 0x20, 0x28, 0x35, 0x68, 0xB7, 0xBF, 0xC2, 0x54,
- 0xFE, 0x83, 0x8B, 0x13, 0x7A, 0x21, 0x47, 0xCE,
- 0x7C, 0x11, 0x3A, 0x3A, 0x4D, 0x65, 0x49, 0x9D,
- 0x9E, 0x86, 0xB8, 0x7D, 0xBC, 0xC7, 0xF0, 0x3B,
- 0xBD, 0x3A, 0x3A, 0xB1, 0xAA, 0x24, 0x3E, 0xCE,
- 0x5B, 0xA9, 0xBC, 0xF2, 0x5F, 0x82, 0x83, 0x6C,
- 0xFE, 0x47, 0x3B, 0x2D, 0x83, 0xE7, 0xA7, 0x20,
- 0x1C, 0xD0, 0xB9, 0x6A, 0x72, 0x45, 0x1E, 0x86,
- 0x3F, 0x6C, 0x3B, 0xA6, 0x64, 0xA6, 0xD0, 0x73,
- 0xD1, 0xF7, 0xB5, 0xED, 0x99, 0x08, 0x65, 0xD9,
- 0x78, 0xBD, 0x38, 0x15, 0xD0, 0x60, 0x94, 0xFC,
- 0x9A, 0x2A, 0xBA, 0x52, 0x21, 0xC2, 0x2D, 0x5A,
- 0xB9, 0x96, 0x38, 0x9E, 0x37, 0x21, 0xE3, 0xAF,
- 0x5F, 0x05, 0xBE, 0xDD, 0xC2, 0x87, 0x5E, 0x0D,
- 0xFA, 0xEB, 0x39, 0x02, 0x1E, 0xE2, 0x7A, 0x41,
- 0x18, 0x7C, 0xBB, 0x45, 0xEF, 0x40, 0xC3, 0xE7,
- 0x3B, 0xC0, 0x39, 0x89, 0xF9, 0xA3, 0x0D, 0x12,
- 0xC5, 0x4B, 0xA7, 0xD2, 0x14, 0x1D, 0xA8, 0xA8,
- 0x75, 0x49, 0x3E, 0x65, 0x77, 0x6E, 0xF3, 0x5F,
- 0x97, 0xDE, 0xBC, 0x22, 0x86, 0xCC, 0x4A, 0xF9,
- 0xB4, 0x62, 0x3E, 0xEE, 0x90, 0x2F, 0x84, 0x0C,
- 0x52, 0xF1, 0xB8, 0xAD, 0x65, 0x89, 0x39, 0xAE,
- 0xF7, 0x1F, 0x3F, 0x72, 0xB9, 0xEC, 0x1D, 0xE2,
- 0x15, 0x88, 0xBD, 0x35, 0x48, 0x4E, 0xA4, 0x44,
- 0x36, 0x34, 0x3F, 0xF9, 0x5E, 0xAD, 0x6A, 0xB1,
- 0xD8, 0xAF, 0xB1, 0xB2, 0xA3, 0x03, 0xDF, 0x1B,
- 0x71, 0xE5, 0x3C, 0x4A, 0xEA, 0x6B, 0x2E, 0x3E,
- 0x93, 0x72, 0xBE, 0x0D, 0x1B, 0xC9, 0x97, 0x98,
- 0xB0, 0xCE, 0x3C, 0xC1, 0x0D, 0x2A, 0x59, 0x6D,
- 0x56, 0x5D, 0xBA, 0x82, 0xF8, 0x8C, 0xE4, 0xCF,
- 0xF3, 0xB3, 0x3D, 0x5D, 0x24, 0xE9, 0xC0, 0x83,
- 0x11, 0x24, 0xBF, 0x1A, 0xD5, 0x4B, 0x79, 0x25,
- 0x32, 0x98, 0x3D, 0xD6, 0xC3, 0xA8, 0xB7, 0xD0
- },
- .len = 16448
- },
- .validAuthLenInBits = {
- .len = 16448
- },
- .validAuthOffsetLenInBits = {
- .len = 128
- },
- .digest = {
- .data = {0x17, 0x9F, 0x2F, 0xA6},
- .len = 4
- }
-};
-
-struct snow3g_hash_test_data snow3g_hash_test_case_4 = {
- .key = {
- .data = {
- 0x2B, 0xD6, 0x45, 0x9F, 0x82, 0xC5, 0xB3, 0x00,
- 0x95, 0x2C, 0x49, 0x10, 0x48, 0x81, 0xFF, 0x48
- },
- .len = 16
- },
- .aad = {
- .data = {
- 0x38, 0xA6, 0xF0, 0x56, 0x05, 0xD2, 0xEC, 0x49,
- 0x38, 0xA6, 0xF0, 0x56, 0x05, 0xD2, 0xEC, 0x49,
- },
- .len = 16
- },
- .plaintext = {
- .data = {
- 0x6B, 0x22, 0x77, 0x37, 0x29, 0x6F, 0x39, 0x3C,
- 0x80, 0x79, 0x35, 0x3E, 0xDC, 0x87, 0xE2, 0xE8,
- 0x05, 0xD2, 0xEC, 0x49, 0xA4, 0xF2, 0xD8, 0xE0
- },
- .len = 189
- },
- .validAuthLenInBits = {
- .len = 189
- },
- .validAuthOffsetLenInBits = {
- .len = 128
- },
- .digest = {
- .data = {0x2B, 0xCE, 0x18, 0x20},
- .len = 4
- }
-};
-
-struct snow3g_hash_test_data snow3g_hash_test_case_5 = {
- .key = {
- .data = {
- 0xD4, 0x2F, 0x68, 0x24, 0x28, 0x20, 0x1C, 0xAF,
- 0xCD, 0x9F, 0x97, 0x94, 0x5E, 0x6D, 0xE7, 0xB7
- },
- .len = 16
- },
- .aad = {
- .data = {
- 0x3E, 0xDC, 0x87, 0xE2, 0xA4, 0xF2, 0xD8, 0xE2,
- 0xBE, 0xDC, 0x87, 0xE2, 0xA4, 0xF2, 0x58, 0xE2
- },
- .len = 16
- },
- .plaintext = {
- .data = {
- 0xB5, 0x92, 0x43, 0x84, 0x32, 0x8A, 0x4A, 0xE0,
- 0x0B, 0x73, 0x71, 0x09, 0xF8, 0xB6, 0xC8, 0xDD,
- 0x2B, 0x4D, 0xB6, 0x3D, 0xD5, 0x33, 0x98, 0x1C,
- 0xEB, 0x19, 0xAA, 0xD5, 0x2A, 0x5B, 0x2B, 0xC0
- },
- .len = 254
- },
- .validAuthLenInBits = {
- .len = 254
- },
- .validAuthOffsetLenInBits = {
- .len = 128
- },
- .digest = {
- .data = {0xFC, 0x7B, 0x18, 0xBD},
- .len = 4
- }
-};
-
-struct snow3g_hash_test_data snow3g_hash_test_case_6 = {
- .key = {
- .data = {
- 0xFD, 0xB9, 0xCF, 0xDF, 0x28, 0x93, 0x6C, 0xC4,
- 0x83, 0xA3, 0x18, 0x69, 0xD8, 0x1B, 0x8F, 0xAB
- },
- .len = 16
- },
- .aad = {
- .data = {
- 0x36, 0xAF, 0x61, 0x44, 0x98, 0x38, 0xF0, 0x3A,
- 0xB6, 0xAF, 0x61, 0x44, 0x98, 0x38, 0x70, 0x3A
- },
- .len = 16
- },
- .plaintext = {
- .data = {
- 0x59, 0x32, 0xBC, 0x0A, 0xCE, 0x2B, 0x0A, 0xBA,
- 0x33, 0xD8, 0xAC, 0x18, 0x8A, 0xC5, 0x4F, 0x34,
- 0x6F, 0xAD, 0x10, 0xBF, 0x9D, 0xEE, 0x29, 0x20,
- 0xB4, 0x3B, 0xD0, 0xC5, 0x3A, 0x91, 0x5C, 0xB7,
- 0xDF, 0x6C, 0xAA, 0x72, 0x05, 0x3A, 0xBF, 0xF2
- },
- .len = 319
- },
- .validAuthLenInBits = {
- .len = 319
- },
- .validAuthOffsetLenInBits = {
- .len = 128
- },
- .digest = {
- .data = {0x02, 0xF1, 0xFA, 0xAF},
- .len = 4
- }
-};
-#endif /* TEST_CRYPTODEV_SNOW3G_HASH_TEST_VECTORS_H_ */
diff --git a/app/test/test_cryptodev_snow3g_test_vectors.h b/app/test/test_cryptodev_snow3g_test_vectors.h
deleted file mode 100644
index 51917c14..00000000
--- a/app/test/test_cryptodev_snow3g_test_vectors.h
+++ /dev/null
@@ -1,443 +0,0 @@
-/*-
- * BSD LICENSE
- *
- * Copyright(c) 2015 Intel Corporation. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * * Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * * Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in
- * the documentation and/or other materials provided with the
- * distribution.
- * * Neither the name of Intel Corporation nor the names of its
- * contributors may be used to endorse or promote products derived
- * from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
- * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
- * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#ifndef TEST_CRYPTODEV_SNOW3G_TEST_VECTORS_H_
-#define TEST_CRYPTODEV_SNOW3G_TEST_VECTORS_H_
-
-struct snow3g_test_data {
- struct {
- uint8_t data[64];
- unsigned len;
- } key;
-
- struct {
- uint8_t data[64] __rte_aligned(16);
- unsigned len;
- } iv;
-
- struct {
- uint8_t data[1024];
- unsigned len; /* length must be in Bits */
- } plaintext;
-
- struct {
- uint8_t data[1024];
- unsigned len; /* length must be in Bits */
- } ciphertext;
-
- struct {
- unsigned len;
- } validDataLenInBits;
-
- struct {
- unsigned len;
- } validCipherLenInBits;
-
- struct {
- unsigned len;
- } validCipherOffsetLenInBits;
-
- struct {
- unsigned len;
- } validAuthLenInBits;
-
- struct {
- unsigned len;
- } validAuthOffsetLenInBits;
-
- struct {
- uint8_t data[64];
- unsigned len;
- } aad;
-
- struct {
- uint8_t data[64];
- unsigned len;
- } digest;
-};
-struct snow3g_test_data snow3g_test_case_1 = {
- .key = {
- .data = {
- 0x2B, 0xD6, 0x45, 0x9F, 0x82, 0xC5, 0xB3, 0x00,
- 0x95, 0x2C, 0x49, 0x10, 0x48, 0x81, 0xFF, 0x48
- },
- .len = 16
- },
- .iv = {
- .data = {
- 0x72, 0xA4, 0xF2, 0x0F, 0x64, 0x00, 0x00, 0x00,
- 0x72, 0xA4, 0xF2, 0x0F, 0x64, 0x00, 0x00, 0x00
- },
- .len = 16
- },
- .plaintext = {
- .data = {
- 0x7E, 0xC6, 0x12, 0x72, 0x74, 0x3B, 0xF1, 0x61,
- 0x47, 0x26, 0x44, 0x6A, 0x6C, 0x38, 0xCE, 0xD1,
- 0x66, 0xF6, 0xCA, 0x76, 0xEB, 0x54, 0x30, 0x04,
- 0x42, 0x86, 0x34, 0x6C, 0xEF, 0x13, 0x0F, 0x92,
- 0x92, 0x2B, 0x03, 0x45, 0x0D, 0x3A, 0x99, 0x75,
- 0xE5, 0xBD, 0x2E, 0xA0, 0xEB, 0x55, 0xAD, 0x8E,
- 0x1B, 0x19, 0x9E, 0x3E, 0xC4, 0x31, 0x60, 0x20,
- 0xE9, 0xA1, 0xB2, 0x85, 0xE7, 0x62, 0x79, 0x53,
- 0x59, 0xB7, 0xBD, 0xFD, 0x39, 0xBE, 0xF4, 0xB2,
- 0x48, 0x45, 0x83, 0xD5, 0xAF, 0xE0, 0x82, 0xAE,
- 0xE6, 0x38, 0xBF, 0x5F, 0xD5, 0xA6, 0x06, 0x19,
- 0x39, 0x01, 0xA0, 0x8F, 0x4A, 0xB4, 0x1A, 0xAB,
- 0x9B, 0x13, 0x48, 0x80
- },
- .len = 800
- },
- .ciphertext = {
- .data = {
- 0x8C, 0xEB, 0xA6, 0x29, 0x43, 0xDC, 0xED, 0x3A,
- 0x09, 0x90, 0xB0, 0x6E, 0xA1, 0xB0, 0xA2, 0xC4,
- 0xFB, 0x3C, 0xED, 0xC7, 0x1B, 0x36, 0x9F, 0x42,
- 0xBA, 0x64, 0xC1, 0xEB, 0x66, 0x65, 0xE7, 0x2A,
- 0xA1, 0xC9, 0xBB, 0x0D, 0xEA, 0xA2, 0x0F, 0xE8,
- 0x60, 0x58, 0xB8, 0xBA, 0xEE, 0x2C, 0x2E, 0x7F,
- 0x0B, 0xEC, 0xCE, 0x48, 0xB5, 0x29, 0x32, 0xA5,
- 0x3C, 0x9D, 0x5F, 0x93, 0x1A, 0x3A, 0x7C, 0x53,
- 0x22, 0x59, 0xAF, 0x43, 0x25, 0xE2, 0xA6, 0x5E,
- 0x30, 0x84, 0xAD, 0x5F, 0x6A, 0x51, 0x3B, 0x7B,
- 0xDD, 0xC1, 0xB6, 0x5F, 0x0A, 0xA0, 0xD9, 0x7A,
- 0x05, 0x3D, 0xB5, 0x5A, 0x88, 0xC4, 0xC4, 0xF9,
- 0x60, 0x5E, 0x41, 0x40
- },
- .len = 800
- },
- .validDataLenInBits = {
- .len = 798
- },
- .validCipherLenInBits = {
- .len = 800
- },
- .validCipherOffsetLenInBits = {
- .len = 128
- },
- .aad = {
- .data = {
- 0x72, 0xA4, 0xF2, 0x0F, 0x64, 0x00, 0x00, 0x00,
- 0x72, 0xA4, 0xF2, 0x0F, 0x64, 0x00, 0x00, 0x00
- },
- .len = 16
- }
-};
-
-struct snow3g_test_data snow3g_test_case_2 = {
- .key = {
- .data = {
- 0xEF, 0xA8, 0xB2, 0x22, 0x9E, 0x72, 0x0C, 0x2A,
- 0x7C, 0x36, 0xEA, 0x55, 0xE9, 0x60, 0x56, 0x95
- },
- .len = 16
- },
- .iv = {
- .data = {
- 0xE2, 0x8B, 0xCF, 0x7B, 0xC0, 0x00, 0x00, 0x00,
- 0xE2, 0x8B, 0xCF, 0x7B, 0xC0, 0x00, 0x00, 0x00
- },
- .len = 16
- },
- .plaintext = {
- .data = {
- 0x10, 0x11, 0x12, 0x31, 0xE0, 0x60, 0x25, 0x3A,
- 0x43, 0xFD, 0x3F, 0x57, 0xE3, 0x76, 0x07, 0xAB,
- 0x28, 0x27, 0xB5, 0x99, 0xB6, 0xB1, 0xBB, 0xDA,
- 0x37, 0xA8, 0xAB, 0xCC, 0x5A, 0x8C, 0x55, 0x0D,
- 0x1B, 0xFB, 0x2F, 0x49, 0x46, 0x24, 0xFB, 0x50,
- 0x36, 0x7F, 0xA3, 0x6C, 0xE3, 0xBC, 0x68, 0xF1,
- 0x1C, 0xF9, 0x3B, 0x15, 0x10, 0x37, 0x6B, 0x02,
- 0x13, 0x0F, 0x81, 0x2A, 0x9F, 0xA1, 0x69, 0xD8
- },
- .len = 512
- },
- .ciphertext = {
- .data = {
- 0xE0, 0xDA, 0x15, 0xCA, 0x8E, 0x25, 0x54, 0xF5,
- 0xE5, 0x6C, 0x94, 0x68, 0xDC, 0x6C, 0x7C, 0x12,
- 0x9C, 0x56, 0x8A, 0xA5, 0x03, 0x23, 0x17, 0xE0,
- 0x4E, 0x07, 0x29, 0x64, 0x6C, 0xAB, 0xEF, 0xA6,
- 0x89, 0x86, 0x4C, 0x41, 0x0F, 0x24, 0xF9, 0x19,
- 0xE6, 0x1E, 0x3D, 0xFD, 0xFA, 0xD7, 0x7E, 0x56,
- 0x0D, 0xB0, 0xA9, 0xCD, 0x36, 0xC3, 0x4A, 0xE4,
- 0x18, 0x14, 0x90, 0xB2, 0x9F, 0x5F, 0xA2, 0xFC
- },
- .len = 512
- },
- .validDataLenInBits = {
- .len = 510
- },
- .validCipherLenInBits = {
- .len = 512
- },
- .validCipherOffsetLenInBits = {
- .len = 128
- },
- .aad = {
- .data = {
- 0xE2, 0x8B, 0xCF, 0x7B, 0xC0, 0x00, 0x00, 0x00,
- 0xE2, 0x8B, 0xCF, 0x7B, 0xC0, 0x00, 0x00, 0x00
- },
- .len = 16
- }
-};
-
-struct snow3g_test_data snow3g_test_case_3 = {
- .key = {
- .data = {
- 0x5A, 0xCB, 0x1D, 0x64, 0x4C, 0x0D, 0x51, 0x20,
- 0x4E, 0xA5, 0xF1, 0x45, 0x10, 0x10, 0xD8, 0x52
- },
- .len = 16
- },
- .iv = {
- .data = {
- 0xFA, 0x55, 0x6B, 0x26, 0x1C, 0x00, 0x00, 0x00,
- 0xFA, 0x55, 0x6B, 0x26, 0x1C, 0x00, 0x00, 0x00
- },
- .len = 16
- },
- .plaintext = {
- .data = {
- 0xAD, 0x9C, 0x44, 0x1F, 0x89, 0x0B, 0x38, 0xC4,
- 0x57, 0xA4, 0x9D, 0x42, 0x14, 0x07, 0xE8
- },
- .len = 120
- },
- .ciphertext = {
- .data = {
- 0xBA, 0x0F, 0x31, 0x30, 0x03, 0x34, 0xC5, 0x6B,
- 0x52, 0xA7, 0x49, 0x7C, 0xBA, 0xC0, 0x46
- },
- .len = 120
- },
- .validDataLenInBits = {
- .len = 120
- },
- .validCipherLenInBits = {
- .len = 120
- },
- .validCipherOffsetLenInBits = {
- .len = 128
- },
- .aad = {
- .data = {
- 0xFA, 0x55, 0x6B, 0x26, 0x1C, 0x00, 0x00, 0x00,
- 0xFA, 0x55, 0x6B, 0x26, 0x1C, 0x00, 0x00, 0x00
- },
- .len = 16
- },
- .digest = {
- .data = {0xE8, 0x60, 0x5A, 0x3E},
- .len = 4
- },
- .validAuthLenInBits = {
- .len = 120
- },
- .validAuthOffsetLenInBits = {
- .len = 128
- }
-};
-
-struct snow3g_test_data snow3g_test_case_4 = {
- .key = {
- .data = {
- 0xD3, 0xC5, 0xD5, 0x92, 0x32, 0x7F, 0xB1, 0x1C,
- 0x40, 0x35, 0xC6, 0x68, 0x0A, 0xF8, 0xC6, 0xD1
- },
- .len = 16
- },
- .iv = {
- .data = {
- 0x39, 0x8A, 0x59, 0xB4, 0x2C, 0x00, 0x00, 0x00,
- 0x39, 0x8A, 0x59, 0xB4, 0x2C, 0x00, 0x00, 0x00
- },
- .len = 16
- },
- .plaintext = {
- .data = {
- 0x98, 0x1B, 0xA6, 0x82, 0x4C, 0x1B, 0xFB, 0x1A,
- 0xB4, 0x85, 0x47, 0x20, 0x29, 0xB7, 0x1D, 0x80,
- 0x8C, 0xE3, 0x3E, 0x2C, 0xC3, 0xC0, 0xB5, 0xFC,
- 0x1F, 0x3D, 0xE8, 0xA6, 0xDC, 0x66, 0xB1, 0xF0
- },
- .len = 256
- },
- .ciphertext = {
- .data = {
- 0x98, 0x9B, 0x71, 0x9C, 0xDC, 0x33, 0xCE, 0xB7,
- 0xCF, 0x27, 0x6A, 0x52, 0x82, 0x7C, 0xEF, 0x94,
- 0xA5, 0x6C, 0x40, 0xC0, 0xAB, 0x9D, 0x81, 0xF7,
- 0xA2, 0xA9, 0xBA, 0xC6, 0x0E, 0x11, 0xC4, 0xB0
- },
- .len = 256
- },
- .validDataLenInBits = {
- .len = 253
- },
- .validCipherLenInBits = {
- .len = 256
- },
- .validCipherOffsetLenInBits = {
- .len = 128
- }
-};
-
-struct snow3g_test_data snow3g_test_case_5 = {
- .key = {
- .data = {
- 0x60, 0x90, 0xEA, 0xE0, 0x4C, 0x83, 0x70, 0x6E,
- 0xEC, 0xBF, 0x65, 0x2B, 0xE8, 0xE3, 0x65, 0x66
- },
- .len = 16
- },
- .iv = {
- .data = {
- 0x72, 0xA4, 0xF2, 0x0F, 0x48, 0x00, 0x00, 0x00,
- 0x72, 0xA4, 0xF2, 0x0F, 0x48, 0x00, 0x00, 0x00
- },
- .len = 16},
- .plaintext = {
- .data = {
- 0x40, 0x98, 0x1B, 0xA6, 0x82, 0x4C, 0x1B, 0xFB,
- 0x42, 0x86, 0xB2, 0x99, 0x78, 0x3D, 0xAF, 0x44,
- 0x2C, 0x09, 0x9F, 0x7A, 0xB0, 0xF5, 0x8D, 0x5C,
- 0x8E, 0x46, 0xB1, 0x04, 0xF0, 0x8F, 0x01, 0xB4,
- 0x1A, 0xB4, 0x85, 0x47, 0x20, 0x29, 0xB7, 0x1D,
- 0x36, 0xBD, 0x1A, 0x3D, 0x90, 0xDC, 0x3A, 0x41,
- 0xB4, 0x6D, 0x51, 0x67, 0x2A, 0xC4, 0xC9, 0x66,
- 0x3A, 0x2B, 0xE0, 0x63, 0xDA, 0x4B, 0xC8, 0xD2,
- 0x80, 0x8C, 0xE3, 0x3E, 0x2C, 0xCC, 0xBF, 0xC6,
- 0x34, 0xE1, 0xB2, 0x59, 0x06, 0x08, 0x76, 0xA0,
- 0xFB, 0xB5, 0xA4, 0x37, 0xEB, 0xCC, 0x8D, 0x31,
- 0xC1, 0x9E, 0x44, 0x54, 0x31, 0x87, 0x45, 0xE3,
- 0x98, 0x76, 0x45, 0x98, 0x7A, 0x98, 0x6F, 0x2C,
- 0xB0
- },
- .len = 840
- },
- .ciphertext = {
- .data = {
- 0x58, 0x92, 0xBB, 0xA8, 0x8B, 0xBB, 0xCA, 0xAE,
- 0xAE, 0x76, 0x9A, 0xA0, 0x6B, 0x68, 0x3D, 0x3A,
- 0x17, 0xCC, 0x04, 0xA3, 0x69, 0x88, 0x16, 0x97,
- 0x43, 0x5E, 0x44, 0xFE, 0xD5, 0xFF, 0x9A, 0xF5,
- 0x7B, 0x9E, 0x89, 0x0D, 0x4D, 0x5C, 0x64, 0x70,
- 0x98, 0x85, 0xD4, 0x8A, 0xE4, 0x06, 0x90, 0xEC,
- 0x04, 0x3B, 0xAA, 0xE9, 0x70, 0x57, 0x96, 0xE4,
- 0xA9, 0xFF, 0x5A, 0x4B, 0x8D, 0x8B, 0x36, 0xD7,
- 0xF3, 0xFE, 0x57, 0xCC, 0x6C, 0xFD, 0x6C, 0xD0,
- 0x05, 0xCD, 0x38, 0x52, 0xA8, 0x5E, 0x94, 0xCE,
- 0x6B, 0xCD, 0x90, 0xD0, 0xD0, 0x78, 0x39, 0xCE,
- 0x09, 0x73, 0x35, 0x44, 0xCA, 0x8E, 0x35, 0x08,
- 0x43, 0x24, 0x85, 0x50, 0x92, 0x2A, 0xC1, 0x28,
- 0x18
- },
- .len = 840
- },
- .validDataLenInBits = {
- .len = 837
- },
- .validCipherLenInBits = {
- .len = 840
- },
- .validCipherOffsetLenInBits = {
- .len = 128
- }
-};
-struct snow3g_test_data snow3g_test_case_6 = {
- .key = {
- .data = {
- 0xC7, 0x36, 0xC6, 0xAA, 0xB2, 0x2B, 0xFF, 0xF9,
- 0x1E, 0x26, 0x98, 0xD2, 0xE2, 0x2A, 0xD5, 0x7E
- },
- .len = 16
- },
- .iv = {
- .data = {
- 0x14, 0x79, 0x3E, 0x41, 0x03, 0x97, 0xE8, 0xFD,
- 0x94, 0x79, 0x3E, 0x41, 0x03, 0x97, 0x68, 0xFD
- },
- .len = 16
- },
- .aad = {
- .data = {
- 0x14, 0x79, 0x3E, 0x41, 0x03, 0x97, 0xE8, 0xFD,
- 0x94, 0x79, 0x3E, 0x41, 0x03, 0x97, 0x68, 0xFD
- },
- .len = 16
- },
- .plaintext = {
- .data = {
- 0xD0, 0xA7, 0xD4, 0x63, 0xDF, 0x9F, 0xB2, 0xB2,
- 0x78, 0x83, 0x3F, 0xA0, 0x2E, 0x23, 0x5A, 0xA1,
- 0x72, 0xBD, 0x97, 0x0C, 0x14, 0x73, 0xE1, 0x29,
- 0x07, 0xFB, 0x64, 0x8B, 0x65, 0x99, 0xAA, 0xA0,
- 0xB2, 0x4A, 0x03, 0x86, 0x65, 0x42, 0x2B, 0x20,
- 0xA4, 0x99, 0x27, 0x6A, 0x50, 0x42, 0x70, 0x09
- },
- .len = 384
- },
- .ciphertext = {
- .data = {
- 0x95, 0x2E, 0x5A, 0xE1, 0x50, 0xB8, 0x59, 0x2A,
- 0x9B, 0xA0, 0x38, 0xA9, 0x8E, 0x2F, 0xED, 0xAB,
- 0xFD, 0xC8, 0x3B, 0x47, 0x46, 0x0B, 0x50, 0x16,
- 0xEC, 0x88, 0x45, 0xB6, 0x05, 0xC7, 0x54, 0xF8,
- 0xBD, 0x91, 0xAA, 0xB6, 0xA4, 0xDC, 0x64, 0xB4,
- 0xCB, 0xEB, 0x97, 0x06, 0x4C, 0xF7, 0x02, 0x3D
- },
- .len = 384
- },
- .digest = {
- .data = {0x38, 0xB5, 0x54, 0xC0 },
- .len = 4
- },
- .validDataLenInBits = {
- .len = 384
- },
- .validCipherLenInBits = {
- .len = 384
- },
- .validCipherOffsetLenInBits = {
- .len = 128
- },
- .validAuthLenInBits = {
- .len = 384
- },
- .validAuthOffsetLenInBits = {
- .len = 128
- }
-};
-
-#endif /* TEST_CRYPTODEV_SNOW3G_TEST_VECTORS_H_ */
diff --git a/app/test/test_cryptodev_zuc_hash_test_vectors.h b/app/test/test_cryptodev_zuc_hash_test_vectors.h
deleted file mode 100644
index 988452cb..00000000
--- a/app/test/test_cryptodev_zuc_hash_test_vectors.h
+++ /dev/null
@@ -1,359 +0,0 @@
-/*-
- * BSD LICENSE
- *
- * Copyright(c) 2016 Intel Corporation. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * * Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * * Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in
- * the documentation and/or other materials provided with the
- * distribution.
- * * Neither the name of Intel Corporation nor the names of its
- * contributors may be used to endorse or promote products derived
- * from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY ExPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
- * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
- * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, ExEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#ifndef TEST_CRYPTODEV_ZUC_HASH_TEST_VECTORS_H_
-#define TEST_CRYPTODEV_ZUC_HASH_TEST_VECTORS_H_
-
-struct zuc_hash_test_data {
- struct {
- uint8_t data[64];
- unsigned len;
- } key;
-
- struct {
- uint8_t data[64];
- unsigned len;
- } aad;
-
- struct {
- uint8_t data[2056];
- unsigned len; /* length must be in Bits */
- } plaintext;
-
- struct {
- unsigned len;
- } validAuthLenInBits;
-
- struct {
- unsigned len;
- } validAuthOffsetLenInBits;
-
- struct {
- uint8_t data[64];
- unsigned len;
- } digest;
-};
-
-struct zuc_hash_test_data zuc_hash_test_case_1 = {
- .key = {
- .data = {
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
- },
- .len = 16
- },
- .aad = {
- .data = {
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
- },
- .len = 16
- },
- .plaintext = {
- .data = {0x00},
- .len = 8
- },
- .validAuthLenInBits = {
- .len = 1
- },
- .validAuthOffsetLenInBits = {
- .len = 128
- },
- .digest = {
- .data = {0xC8, 0xA9, 0x59, 0x5E},
- .len = 4
- }
-};
-
-struct zuc_hash_test_data zuc_hash_test_case_2 = {
- .key = {
- .data = {
- 0x47, 0x05, 0x41, 0x25, 0x56, 0x1E, 0xB2, 0xDD,
- 0xA9, 0x40, 0x59, 0xDA, 0x05, 0x09, 0x78, 0x50
- },
- .len = 16
- },
- .aad = {
- .data = {
- 0x56, 0x1E, 0xB2, 0xDD, 0xA0, 0x00, 0x00, 0x00,
- 0x56, 0x1E, 0xB2, 0xDD, 0xA0, 0x00, 0x00, 0x00
- },
- .len = 16
- },
- .plaintext = {
- .data = {
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00
- },
- .len = 96
- },
- .validAuthLenInBits = {
- .len = 90
- },
- .validAuthOffsetLenInBits = {
- .len = 128
- },
- .digest = {
- .data = {0x67, 0x19, 0xA0, 0x88},
- .len = 4
- }
-};
-
-struct zuc_hash_test_data zuc_hash_test_case_3 = {
- .key = {
- .data = {
- 0xC9, 0xE6, 0xCE, 0xC4, 0x60, 0x7C, 0x72, 0xDB,
- 0x00, 0x0A, 0xEF, 0xA8, 0x83, 0x85, 0xAB, 0x0A
- },
- .len = 16
- },
- .aad = {
- .data = {
- 0xA9, 0x40, 0x59, 0xDA, 0x50, 0x00, 0x00, 0x00,
- 0x29, 0x40, 0x59, 0xDA, 0x50, 0x00, 0x80, 0x00
- },
- .len = 16
- },
- .plaintext = {
- .data = {
- 0x98, 0x3B, 0x41, 0xD4, 0x7D, 0x78, 0x0C, 0x9E,
- 0x1A, 0xD1, 0x1D, 0x7E, 0xB7, 0x03, 0x91, 0xB1,
- 0xDE, 0x0B, 0x35, 0xDA, 0x2D, 0xC6, 0x2F, 0x83,
- 0xE7, 0xB7, 0x8D, 0x63, 0x06, 0xCA, 0x0E, 0xA0,
- 0x7E, 0x94, 0x1B, 0x7B, 0xE9, 0x13, 0x48, 0xF9,
- 0xFC, 0xB1, 0x70, 0xE2, 0x21, 0x7F, 0xEC, 0xD9,
- 0x7F, 0x9F, 0x68, 0xAD, 0xB1, 0x6E, 0x5D, 0x7D,
- 0x21, 0xE5, 0x69, 0xD2, 0x80, 0xED, 0x77, 0x5C,
- 0xEB, 0xDE, 0x3F, 0x40, 0x93, 0xC5, 0x38, 0x81,
- 0x00
- },
- .len = 584
- },
- .validAuthLenInBits = {
- .len = 577
- },
- .validAuthOffsetLenInBits = {
- .len = 128
- },
- .digest = {
- .data = {0xFA, 0xE8, 0xFF, 0x0B},
- .len = 4
- }
-};
-
-struct zuc_hash_test_data zuc_hash_test_case_4 = {
- .key = {
- .data = {
- 0xC8, 0xA4, 0x82, 0x62, 0xD0, 0xC2, 0xE2, 0xBA,
- 0xC4, 0xB9, 0x6E, 0xF7, 0x7E, 0x80, 0xCA, 0x59
- },
- .len = 16
- },
- .aad = {
- .data = {
- 0x05, 0x09, 0x78, 0x50, 0x80, 0x00, 0x00, 0x00,
- 0x85, 0x09, 0x78, 0x50, 0x80, 0x00, 0x80, 0x00
- },
- .len = 16
- },
- .plaintext = {
- .data = {
- 0xB5, 0x46, 0x43, 0x0B, 0xF8, 0x7B, 0x4F, 0x1E,
- 0xE8, 0x34, 0x70, 0x4C, 0xD6, 0x95, 0x1C, 0x36,
- 0xE2, 0x6F, 0x10, 0x8C, 0xF7, 0x31, 0x78, 0x8F,
- 0x48, 0xDC, 0x34, 0xF1, 0x67, 0x8C, 0x05, 0x22,
- 0x1C, 0x8F, 0xA7, 0xFF, 0x2F, 0x39, 0xF4, 0x77,
- 0xE7, 0xE4, 0x9E, 0xF6, 0x0A, 0x4E, 0xC2, 0xC3,
- 0xDE, 0x24, 0x31, 0x2A, 0x96, 0xAA, 0x26, 0xE1,
- 0xCF, 0xBA, 0x57, 0x56, 0x38, 0x38, 0xB2, 0x97,
- 0xF4, 0x7E, 0x85, 0x10, 0xC7, 0x79, 0xFD, 0x66,
- 0x54, 0xB1, 0x43, 0x38, 0x6F, 0xA6, 0x39, 0xD3,
- 0x1E, 0xDB, 0xD6, 0xC0, 0x6E, 0x47, 0xD1, 0x59,
- 0xD9, 0x43, 0x62, 0xF2, 0x6A, 0xEE, 0xED, 0xEE,
- 0x0E, 0x4F, 0x49, 0xD9, 0xBF, 0x84, 0x12, 0x99,
- 0x54, 0x15, 0xBF, 0xAD, 0x56, 0xEE, 0x82, 0xD1,
- 0xCA, 0x74, 0x63, 0xAB, 0xF0, 0x85, 0xB0, 0x82,
- 0xB0, 0x99, 0x04, 0xD6, 0xD9, 0x90, 0xD4, 0x3C,
- 0xF2, 0xE0, 0x62, 0xF4, 0x08, 0x39, 0xD9, 0x32,
- 0x48, 0xB1, 0xEB, 0x92, 0xCD, 0xFE, 0xD5, 0x30,
- 0x0B, 0xC1, 0x48, 0x28, 0x04, 0x30, 0xB6, 0xD0,
- 0xCA, 0xA0, 0x94, 0xB6, 0xEC, 0x89, 0x11, 0xAB,
- 0x7D, 0xC3, 0x68, 0x24, 0xB8, 0x24, 0xDC, 0x0A,
- 0xF6, 0x68, 0x2B, 0x09, 0x35, 0xFD, 0xE7, 0xB4,
- 0x92, 0xA1, 0x4D, 0xC2, 0xF4, 0x36, 0x48, 0x03,
- 0x8D, 0xA2, 0xCF, 0x79, 0x17, 0x0D, 0x2D, 0x50,
- 0x13, 0x3F, 0xD4, 0x94, 0x16, 0xCB, 0x6E, 0x33,
- 0xBE, 0xA9, 0x0B, 0x8B, 0xF4, 0x55, 0x9B, 0x03,
- 0x73, 0x2A, 0x01, 0xEA, 0x29, 0x0E, 0x6D, 0x07,
- 0x4F, 0x79, 0xBB, 0x83, 0xC1, 0x0E, 0x58, 0x00,
- 0x15, 0xCC, 0x1A, 0x85, 0xB3, 0x6B, 0x55, 0x01,
- 0x04, 0x6E, 0x9C, 0x4B, 0xDC, 0xAE, 0x51, 0x35,
- 0x69, 0x0B, 0x86, 0x66, 0xBD, 0x54, 0xB7, 0xA7,
- 0x03, 0xEA, 0x7B, 0x6F, 0x22, 0x0A, 0x54, 0x69,
- 0xA5, 0x68, 0x02, 0x7E
- },
- .len = 2080
- },
- .validAuthLenInBits = {
- .len = 2079
- },
- .validAuthOffsetLenInBits = {
- .len = 128
- },
- .digest = {
- .data = {0x00, 0x4A, 0xC4, 0xD6},
- .len = 4
- }
-};
-
-struct zuc_hash_test_data zuc_hash_test_case_5 = {
- .key = {
- .data = {
- 0x6B, 0x8B, 0x08, 0xEE, 0x79, 0xE0, 0xB5, 0x98,
- 0x2D, 0x6D, 0x12, 0x8E, 0xA9, 0xF2, 0x20, 0xCB
- },
- .len = 16
- },
- .aad = {
- .data = {
- 0x56, 0x1E, 0xB2, 0xDD, 0xE0, 0x00, 0x00, 0x00,
- 0x56, 0x1E, 0xB2, 0xDD, 0xE0, 0x00, 0x00, 0x00
- },
- .len = 16
- },
- .plaintext = {
- .data = {
- 0x5B, 0xAD, 0x72, 0x47, 0x10, 0xBA, 0x1C, 0x56,
- 0xD5, 0xA3, 0x15, 0xF8, 0xD4, 0x0F, 0x6E, 0x09,
- 0x37, 0x80, 0xBE, 0x8E, 0x8D, 0xE0, 0x7B, 0x69,
- 0x92, 0x43, 0x20, 0x18, 0xE0, 0x8E, 0xD9, 0x6A,
- 0x57, 0x34, 0xAF, 0x8B, 0xAD, 0x8A, 0x57, 0x5D,
- 0x3A, 0x1F, 0x16, 0x2F, 0x85, 0x04, 0x5C, 0xC7,
- 0x70, 0x92, 0x55, 0x71, 0xD9, 0xF5, 0xB9, 0x4E,
- 0x45, 0x4A, 0x77, 0xC1, 0x6E, 0x72, 0x93, 0x6B,
- 0xF0, 0x16, 0xAE, 0x15, 0x74, 0x99, 0xF0, 0x54,
- 0x3B, 0x5D, 0x52, 0xCA, 0xA6, 0xDB, 0xEA, 0xB6,
- 0x97, 0xD2, 0xBB, 0x73, 0xE4, 0x1B, 0x80, 0x75,
- 0xDC, 0xE7, 0x9B, 0x4B, 0x86, 0x04, 0x4F, 0x66,
- 0x1D, 0x44, 0x85, 0xA5, 0x43, 0xDD, 0x78, 0x60,
- 0x6E, 0x04, 0x19, 0xE8, 0x05, 0x98, 0x59, 0xD3,
- 0xCB, 0x2B, 0x67, 0xCE, 0x09, 0x77, 0x60, 0x3F,
- 0x81, 0xFF, 0x83, 0x9E, 0x33, 0x18, 0x59, 0x54,
- 0x4C, 0xFB, 0xC8, 0xD0, 0x0F, 0xEF, 0x1A, 0x4C,
- 0x85, 0x10, 0xFB, 0x54, 0x7D, 0x6B, 0x06, 0xC6,
- 0x11, 0xEF, 0x44, 0xF1, 0xBC, 0xE1, 0x07, 0xCF,
- 0xA4, 0x5A, 0x06, 0xAA, 0xB3, 0x60, 0x15, 0x2B,
- 0x28, 0xDC, 0x1E, 0xBE, 0x6F, 0x7F, 0xE0, 0x9B,
- 0x05, 0x16, 0xF9, 0xA5, 0xB0, 0x2A, 0x1B, 0xD8,
- 0x4B, 0xB0, 0x18, 0x1E, 0x2E, 0x89, 0xE1, 0x9B,
- 0xD8, 0x12, 0x59, 0x30, 0xD1, 0x78, 0x68, 0x2F,
- 0x38, 0x62, 0xDC, 0x51, 0xB6, 0x36, 0xF0, 0x4E,
- 0x72, 0x0C, 0x47, 0xC3, 0xCE, 0x51, 0xAD, 0x70,
- 0xD9, 0x4B, 0x9B, 0x22, 0x55, 0xFB, 0xAE, 0x90,
- 0x65, 0x49, 0xF4, 0x99, 0xF8, 0xC6, 0xD3, 0x99,
- 0x47, 0xED, 0x5E, 0x5D, 0xF8, 0xE2, 0xDE, 0xF1,
- 0x13, 0x25, 0x3E, 0x7B, 0x08, 0xD0, 0xA7, 0x6B,
- 0x6B, 0xFC, 0x68, 0xC8, 0x12, 0xF3, 0x75, 0xC7,
- 0x9B, 0x8F, 0xE5, 0xFD, 0x85, 0x97, 0x6A, 0xA6,
- 0xD4, 0x6B, 0x4A, 0x23, 0x39, 0xD8, 0xAE, 0x51,
- 0x47, 0xF6, 0x80, 0xFB, 0xE7, 0x0F, 0x97, 0x8B,
- 0x38, 0xEF, 0xFD, 0x7B, 0x2F, 0x78, 0x66, 0xA2,
- 0x25, 0x54, 0xE1, 0x93, 0xA9, 0x4E, 0x98, 0xA6,
- 0x8B, 0x74, 0xBD, 0x25, 0xBB, 0x2B, 0x3F, 0x5F,
- 0xB0, 0xA5, 0xFD, 0x59, 0x88, 0x7F, 0x9A, 0xB6,
- 0x81, 0x59, 0xB7, 0x17, 0x8D, 0x5B, 0x7B, 0x67,
- 0x7C, 0xB5, 0x46, 0xBF, 0x41, 0xEA, 0xDC, 0xA2,
- 0x16, 0xFC, 0x10, 0x85, 0x01, 0x28, 0xF8, 0xBD,
- 0xEF, 0x5C, 0x8D, 0x89, 0xF9, 0x6A, 0xFA, 0x4F,
- 0xA8, 0xB5, 0x48, 0x85, 0x56, 0x5E, 0xD8, 0x38,
- 0xA9, 0x50, 0xFE, 0xE5, 0xF1, 0xC3, 0xB0, 0xA4,
- 0xF6, 0xFB, 0x71, 0xE5, 0x4D, 0xFD, 0x16, 0x9E,
- 0x82, 0xCE, 0xCC, 0x72, 0x66, 0xC8, 0x50, 0xE6,
- 0x7C, 0x5E, 0xF0, 0xBA, 0x96, 0x0F, 0x52, 0x14,
- 0x06, 0x0E, 0x71, 0xEB, 0x17, 0x2A, 0x75, 0xFC,
- 0x14, 0x86, 0x83, 0x5C, 0xBE, 0xA6, 0x53, 0x44,
- 0x65, 0xB0, 0x55, 0xC9, 0x6A, 0x72, 0xE4, 0x10,
- 0x52, 0x24, 0x18, 0x23, 0x25, 0xD8, 0x30, 0x41,
- 0x4B, 0x40, 0x21, 0x4D, 0xAA, 0x80, 0x91, 0xD2,
- 0xE0, 0xFB, 0x01, 0x0A, 0xE1, 0x5C, 0x6D, 0xE9,
- 0x08, 0x50, 0x97, 0x3B, 0xDF, 0x1E, 0x42, 0x3B,
- 0xE1, 0x48, 0xA2, 0x37, 0xB8, 0x7A, 0x0C, 0x9F,
- 0x34, 0xD4, 0xB4, 0x76, 0x05, 0xB8, 0x03, 0xD7,
- 0x43, 0xA8, 0x6A, 0x90, 0x39, 0x9A, 0x4A, 0xF3,
- 0x96, 0xD3, 0xA1, 0x20, 0x0A, 0x62, 0xF3, 0xD9,
- 0x50, 0x79, 0x62, 0xE8, 0xE5, 0xBE, 0xE6, 0xD3,
- 0xDA, 0x2B, 0xB3, 0xF7, 0x23, 0x76, 0x64, 0xAC,
- 0x7A, 0x29, 0x28, 0x23, 0x90, 0x0B, 0xC6, 0x35,
- 0x03, 0xB2, 0x9E, 0x80, 0xD6, 0x3F, 0x60, 0x67,
- 0xBF, 0x8E, 0x17, 0x16, 0xAC, 0x25, 0xBE, 0xBA,
- 0x35, 0x0D, 0xEB, 0x62, 0xA9, 0x9F, 0xE0, 0x31,
- 0x85, 0xEB, 0x4F, 0x69, 0x93, 0x7E, 0xCD, 0x38,
- 0x79, 0x41, 0xFD, 0xA5, 0x44, 0xBA, 0x67, 0xDB,
- 0x09, 0x11, 0x77, 0x49, 0x38, 0xB0, 0x18, 0x27,
- 0xBC, 0xC6, 0x9C, 0x92, 0xB3, 0xF7, 0x72, 0xA9,
- 0xD2, 0x85, 0x9E, 0xF0, 0x03, 0x39, 0x8B, 0x1F,
- 0x6B, 0xBA, 0xD7, 0xB5, 0x74, 0xF7, 0x98, 0x9A,
- 0x1D, 0x10, 0xB2, 0xDF, 0x79, 0x8E, 0x0D, 0xBF,
- 0x30, 0xD6, 0x58, 0x74, 0x64, 0xD2, 0x48, 0x78,
- 0xCD, 0x00, 0xC0, 0xEA, 0xEE, 0x8A, 0x1A, 0x0C,
- 0xC7, 0x53, 0xA2, 0x79, 0x79, 0xE1, 0x1B, 0x41,
- 0xDB, 0x1D, 0xE3, 0xD5, 0x03, 0x8A, 0xFA, 0xF4,
- 0x9F, 0x5C, 0x68, 0x2C, 0x37, 0x48, 0xD8, 0xA3,
- 0xA9, 0xEC, 0x54, 0xE6, 0xA3, 0x71, 0x27, 0x5F,
- 0x16, 0x83, 0x51, 0x0F, 0x8E, 0x4F, 0x90, 0x93,
- 0x8F, 0x9A, 0xB6, 0xE1, 0x34, 0xC2, 0xCF, 0xDF,
- 0x48, 0x41, 0xCB, 0xA8, 0x8E, 0x0C, 0xFF, 0x2B,
- 0x0B, 0xCC, 0x8E, 0x6A, 0xDC, 0xB7, 0x11, 0x09,
- 0xB5, 0x19, 0x8F, 0xEC, 0xF1, 0xBB, 0x7E, 0x5C,
- 0x53, 0x1A, 0xCA, 0x50, 0xA5, 0x6A, 0x8A, 0x3B,
- 0x6D, 0xE5, 0x98, 0x62, 0xD4, 0x1F, 0xA1, 0x13,
- 0xD9, 0xCD, 0x95, 0x78, 0x08, 0xF0, 0x85, 0x71,
- 0xD9, 0xA4, 0xBB, 0x79, 0x2A, 0xF2, 0x71, 0xF6,
- 0xCC, 0x6D, 0xBB, 0x8D, 0xC7, 0xEC, 0x36, 0xE3,
- 0x6B, 0xE1, 0xED, 0x30, 0x81, 0x64, 0xC3, 0x1C,
- 0x7C, 0x0A, 0xFC, 0x54, 0x1C
- },
- .len = 5672
- },
- .validAuthLenInBits = {
- .len = 5670
- },
- .validAuthOffsetLenInBits = {
- .len = 128
- },
- .digest = {
- .data = {0x0C, 0xA1, 0x27, 0x92},
- .len = 4
- }
-};
-
-#endif /* TEST_CRYPTODEV_ZUC_HASH_TEST_VECTORS_H_ */
diff --git a/app/test/test_cryptodev_zuc_test_vectors.h b/app/test/test_cryptodev_zuc_test_vectors.h
deleted file mode 100644
index 03a3d1f4..00000000
--- a/app/test/test_cryptodev_zuc_test_vectors.h
+++ /dev/null
@@ -1,582 +0,0 @@
-/*-
- * BSD LICENSE
- *
- * Copyright(c) 2016 Intel Corporation. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * * Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * * Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in
- * the documentation and/or other materials provided with the
- * distribution.
- * * Neither the name of Intel Corporation nor the names of its
- * contributors may be used to endorse or promote products derived
- * from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY ExPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
- * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
- * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, ExEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#ifndef TEST_CRYPTODEV_ZUC_TEST_VECTORS_H_
-#define TEST_CRYPTODEV_ZUC_TEST_VECTORS_H_
-
-struct zuc_test_data {
- struct {
- uint8_t data[64];
- unsigned len;
- } key;
-
- struct {
- uint8_t data[64] __rte_aligned(16);
- unsigned len;
- } iv;
-
- struct {
- uint8_t data[1024];
- unsigned len; /* length must be in Bits */
- } plaintext;
-
- struct {
- uint8_t data[1024];
- unsigned len; /* length must be in Bits */
- } ciphertext;
-
- struct {
- unsigned len;
- } validDataLenInBits;
-
- struct {
- unsigned len;
- } validCipherLenInBits;
-
- struct {
- unsigned len;
- } validCipherOffsetLenInBits;
-
- struct {
- unsigned len;
- } validAuthLenInBits;
-
- struct {
- unsigned len;
- } validAuthOffsetLenInBits;
-
- struct {
- uint8_t data[64];
- unsigned len;
- } aad;
-
- struct {
- uint8_t data[64];
- unsigned len;
- } digest;
-};
-struct zuc_test_data zuc_test_case_1 = {
- .key = {
- .data = {
- 0x17, 0x3D, 0x14, 0xBA, 0x50, 0x03, 0x73, 0x1D,
- 0x7A, 0x60, 0x04, 0x94, 0x70, 0xF0, 0x0A, 0x29
- },
- .len = 16
- },
- .iv = {
- .data = {
- 0x66, 0x03, 0x54, 0x92, 0x78, 0x00, 0x00, 0x00,
- 0x66, 0x03, 0x54, 0x92, 0x78, 0x00, 0x00, 0x00
- },
- .len = 16
- },
- .plaintext = {
- .data = {
- 0x6C, 0xF6, 0x53, 0x40, 0x73, 0x55, 0x52, 0xAB,
- 0x0C, 0x97, 0x52, 0xFA, 0x6F, 0x90, 0x25, 0xFE,
- 0x0B, 0xD6, 0x75, 0xD9, 0x00, 0x58, 0x75, 0xB2,
- 0x00
- },
- .len = 200
- },
- .ciphertext = {
- .data = {
- 0xA6, 0xC8, 0x5F, 0xC6, 0x6A, 0xFB, 0x85, 0x33,
- 0xAA, 0xFC, 0x25, 0x18, 0xDF, 0xE7, 0x84, 0x94,
- 0x0E, 0xE1, 0xE4, 0xB0, 0x30, 0x23, 0x8C, 0xC8,
- 0x00
- },
- .len = 200
- },
- .validDataLenInBits = {
- .len = 193
- },
- .validCipherLenInBits = {
- .len = 193
- },
- .validCipherOffsetLenInBits = {
- .len = 128
- }
-};
-
-struct zuc_test_data zuc_test_case_2 = {
- .key = {
- .data = {
- 0xE5, 0xBD, 0x3E, 0xA0, 0xEB, 0x55, 0xAD, 0xE8,
- 0x66, 0xC6, 0xAC, 0x58, 0xBD, 0x54, 0x30, 0x2A
- },
- .len = 16
- },
- .iv = {
- .data = {
- 0x00, 0x05, 0x68, 0x23, 0xC4, 0x00, 0x00, 0x00,
- 0x00, 0x05, 0x68, 0x23, 0xC4, 0x00, 0x00, 0x00
- },
- .len = 16
- },
- .plaintext = {
- .data = {
- 0x14, 0xA8, 0xEF, 0x69, 0x3D, 0x67, 0x85, 0x07,
- 0xBB, 0xE7, 0x27, 0x0A, 0x7F, 0x67, 0xFF, 0x50,
- 0x06, 0xC3, 0x52, 0x5B, 0x98, 0x07, 0xE4, 0x67,
- 0xC4, 0xE5, 0x60, 0x00, 0xBA, 0x33, 0x8F, 0x5D,
- 0x42, 0x95, 0x59, 0x03, 0x67, 0x51, 0x82, 0x22,
- 0x46, 0xC8, 0x0D, 0x3B, 0x38, 0xF0, 0x7F, 0x4B,
- 0xE2, 0xD8, 0xFF, 0x58, 0x05, 0xF5, 0x13, 0x22,
- 0x29, 0xBD, 0xE9, 0x3B, 0xBB, 0xDC, 0xAF, 0x38,
- 0x2B, 0xF1, 0xEE, 0x97, 0x2F, 0xBF, 0x99, 0x77,
- 0xBA, 0xDA, 0x89, 0x45, 0x84, 0x7A, 0x2A, 0x6C,
- 0x9A, 0xD3, 0x4A, 0x66, 0x75, 0x54, 0xE0, 0x4D,
- 0x1F, 0x7F, 0xA2, 0xC3, 0x32, 0x41, 0xBD, 0x8F,
- 0x01, 0xBA, 0x22, 0x0D
- },
- .len = 800
- },
- .ciphertext = {
- .data = {
- 0x13, 0x1D, 0x43, 0xE0, 0xDE, 0xA1, 0xBE, 0x5C,
- 0x5A, 0x1B, 0xFD, 0x97, 0x1D, 0x85, 0x2C, 0xBF,
- 0x71, 0x2D, 0x7B, 0x4F, 0x57, 0x96, 0x1F, 0xEA,
- 0x32, 0x08, 0xAF, 0xA8, 0xBC, 0xA4, 0x33, 0xF4,
- 0x56, 0xAD, 0x09, 0xC7, 0x41, 0x7E, 0x58, 0xBC,
- 0x69, 0xCF, 0x88, 0x66, 0xD1, 0x35, 0x3F, 0x74,
- 0x86, 0x5E, 0x80, 0x78, 0x1D, 0x20, 0x2D, 0xFB,
- 0x3E, 0xCF, 0xF7, 0xFC, 0xBC, 0x3B, 0x19, 0x0F,
- 0xE8, 0x2A, 0x20, 0x4E, 0xD0, 0xE3, 0x50, 0xFC,
- 0x0F, 0x6F, 0x26, 0x13, 0xB2, 0xF2, 0xBC, 0xA6,
- 0xDF, 0x5A, 0x47, 0x3A, 0x57, 0xA4, 0xA0, 0x0D,
- 0x98, 0x5E, 0xBA, 0xD8, 0x80, 0xD6, 0xF2, 0x38,
- 0x64, 0xA0, 0x7B, 0x01
- },
- .len = 800
- },
- .validDataLenInBits = {
- .len = 800
- },
- .validCipherLenInBits = {
- .len = 800
- },
- .validCipherOffsetLenInBits = {
- .len = 128
- }
-};
-
-struct zuc_test_data zuc_test_case_3 = {
- .key = {
- .data = {
- 0xD4, 0x55, 0x2A, 0x8F, 0xD6, 0xE6, 0x1C, 0xC8,
- 0x1A, 0x20, 0x09, 0x14, 0x1A, 0x29, 0xC1, 0x0B
- },
- .len = 16
- },
- .iv = {
- .data = {
- 0x76, 0x45, 0x2E, 0xC1, 0x14, 0x00, 0x00, 0x00,
- 0x76, 0x45, 0x2E, 0xC1, 0x14, 0x00, 0x00, 0x00
- },
- .len = 16
- },
- .plaintext = {
- .data = {
- 0x38, 0xF0, 0x7F, 0x4B, 0xE2, 0xD8, 0xFF, 0x58,
- 0x05, 0xF5, 0x13, 0x22, 0x29, 0xBD, 0xE9, 0x3B,
- 0xBB, 0xDC, 0xAF, 0x38, 0x2B, 0xF1, 0xEE, 0x97,
- 0x2F, 0xBF, 0x99, 0x77, 0xBA, 0xDA, 0x89, 0x45,
- 0x84, 0x7A, 0x2A, 0x6C, 0x9A, 0xD3, 0x4A, 0x66,
- 0x75, 0x54, 0xE0, 0x4D, 0x1F, 0x7F, 0xA2, 0xC3,
- 0x32, 0x41, 0xBD, 0x8F, 0x01, 0xBA, 0x22, 0x0D,
- 0x3C, 0xA4, 0xEC, 0x41, 0xE0, 0x74, 0x59, 0x5F,
- 0x54, 0xAE, 0x2B, 0x45, 0x4F, 0xD9, 0x71, 0x43,
- 0x20, 0x43, 0x60, 0x19, 0x65, 0xCC, 0xA8, 0x5C,
- 0x24, 0x17, 0xED, 0x6C, 0xBE, 0xC3, 0xBA, 0xDA,
- 0x84, 0xFC, 0x8A, 0x57, 0x9A, 0xEA, 0x78, 0x37,
- 0xB0, 0x27, 0x11, 0x77, 0x24, 0x2A, 0x64, 0xDC,
- 0x0A, 0x9D, 0xE7, 0x1A, 0x8E, 0xDE, 0xE8, 0x6C,
- 0xA3, 0xD4, 0x7D, 0x03, 0x3D, 0x6B, 0xF5, 0x39,
- 0x80, 0x4E, 0xCA, 0x86, 0xC5, 0x84, 0xA9, 0x05,
- 0x2D, 0xE4, 0x6A, 0xD3, 0xFC, 0xED, 0x65, 0x54,
- 0x3B, 0xD9, 0x02, 0x07, 0x37, 0x2B, 0x27, 0xAF,
- 0xB7, 0x92, 0x34, 0xF5, 0xFF, 0x43, 0xEA, 0x87,
- 0x08, 0x20, 0xE2, 0xC2, 0xB7, 0x8A, 0x8A, 0xAE,
- 0x61, 0xCC, 0xE5, 0x2A, 0x05, 0x15, 0xE3, 0x48,
- 0xD1, 0x96, 0x66, 0x4A, 0x34, 0x56, 0xB1, 0x82,
- 0xA0, 0x7C, 0x40, 0x6E, 0x4A, 0x20, 0x79, 0x12,
- 0x71, 0xCF, 0xED, 0xA1, 0x65, 0xD5, 0x35, 0xEC,
- 0x5E, 0xA2, 0xD4, 0xDF, 0x40
- },
- .len = 1576
- },
- .ciphertext = {
- .data = {
- 0x83, 0x83, 0xB0, 0x22, 0x9F, 0xCC, 0x0B, 0x9D,
- 0x22, 0x95, 0xEC, 0x41, 0xC9, 0x77, 0xE9, 0xC2,
- 0xBB, 0x72, 0xE2, 0x20, 0x37, 0x81, 0x41, 0xF9,
- 0xC8, 0x31, 0x8F, 0x3A, 0x27, 0x0D, 0xFB, 0xCD,
- 0xEE, 0x64, 0x11, 0xC2, 0xB3, 0x04, 0x4F, 0x17,
- 0x6D, 0xC6, 0xE0, 0x0F, 0x89, 0x60, 0xF9, 0x7A,
- 0xFA, 0xCD, 0x13, 0x1A, 0xD6, 0xA3, 0xB4, 0x9B,
- 0x16, 0xB7, 0xBA, 0xBC, 0xF2, 0xA5, 0x09, 0xEB,
- 0xB1, 0x6A, 0x75, 0xDC, 0xAB, 0x14, 0xFF, 0x27,
- 0x5D, 0xBE, 0xEE, 0xA1, 0xA2, 0xB1, 0x55, 0xF9,
- 0xD5, 0x2C, 0x26, 0x45, 0x2D, 0x01, 0x87, 0xC3,
- 0x10, 0xA4, 0xEE, 0x55, 0xBE, 0xAA, 0x78, 0xAB,
- 0x40, 0x24, 0x61, 0x5B, 0xA9, 0xF5, 0xD5, 0xAD,
- 0xC7, 0x72, 0x8F, 0x73, 0x56, 0x06, 0x71, 0xF0,
- 0x13, 0xE5, 0xE5, 0x50, 0x08, 0x5D, 0x32, 0x91,
- 0xDF, 0x7D, 0x5F, 0xEC, 0xED, 0xDE, 0xD5, 0x59,
- 0x64, 0x1B, 0x6C, 0x2F, 0x58, 0x52, 0x33, 0xBC,
- 0x71, 0xE9, 0x60, 0x2B, 0xD2, 0x30, 0x58, 0x55,
- 0xBB, 0xD2, 0x5F, 0xFA, 0x7F, 0x17, 0xEC, 0xBC,
- 0x04, 0x2D, 0xAA, 0xE3, 0x8C, 0x1F, 0x57, 0xAD,
- 0x8E, 0x8E, 0xBD, 0x37, 0x34, 0x6F, 0x71, 0xBE,
- 0xFD, 0xBB, 0x74, 0x32, 0xE0, 0xE0, 0xBB, 0x2C,
- 0xFC, 0x09, 0xBC, 0xD9, 0x65, 0x70, 0xCB, 0x0C,
- 0x0C, 0x39, 0xDF, 0x5E, 0x29, 0x29, 0x4E, 0x82,
- 0x70, 0x3A, 0x63, 0x7F, 0x80
- },
- .len = 1576
- },
- .validDataLenInBits = {
- .len = 1570
- },
- .validCipherLenInBits = {
- .len = 1570
- },
- .validCipherOffsetLenInBits = {
- .len = 128
- },
- .aad = {
- .data = {
- 0xFA, 0x55, 0x6B, 0x26, 0x1C, 0x00, 0x00, 0x00,
- 0xFA, 0x55, 0x6B, 0x26, 0x1C, 0x00, 0x00, 0x00
- },
- .len = 16
- },
- .digest = {
- .data = {0xE8, 0x60, 0x5A, 0x3E},
- .len = 4
- },
- .validAuthLenInBits = {
- .len = 120
- },
- .validAuthOffsetLenInBits = {
- .len = 128
- }
-};
-
-struct zuc_test_data zuc_test_case_4 = {
- .key = {
- .data = {
- 0xDB, 0x84, 0xB4, 0xFB, 0xCC, 0xDA, 0x56, 0x3B,
- 0x66, 0x22, 0x7B, 0xFE, 0x45, 0x6F, 0x0F, 0x77
- },
- .len = 16
- },
- .iv = {
- .data = {
- 0xE4, 0x85, 0x0F, 0xE1, 0x84, 0x00, 0x00, 0x00,
- 0xE4, 0x85, 0x0F, 0xE1, 0x84, 0x00, 0x00, 0x00
- },
- .len = 16
- },
- .plaintext = {
- .data = {
- 0xE5, 0x39, 0xF3, 0xB8, 0x97, 0x32, 0x40, 0xDA,
- 0x03, 0xF2, 0xB8, 0xAA, 0x05, 0xEE, 0x0A, 0x00,
- 0xDB, 0xAF, 0xC0, 0xE1, 0x82, 0x05, 0x5D, 0xFE,
- 0x3D, 0x73, 0x83, 0xD9, 0x2C, 0xEF, 0x40, 0xE9,
- 0x29, 0x28, 0x60, 0x5D, 0x52, 0xD0, 0x5F, 0x4F,
- 0x90, 0x18, 0xA1, 0xF1, 0x89, 0xAE, 0x39, 0x97,
- 0xCE, 0x19, 0x15, 0x5F, 0xB1, 0x22, 0x1D, 0xB8,
- 0xBB, 0x09, 0x51, 0xA8, 0x53, 0xAD, 0x85, 0x2C,
- 0xE1, 0x6C, 0xFF, 0x07, 0x38, 0x2C, 0x93, 0xA1,
- 0x57, 0xDE, 0x00, 0xDD, 0xB1, 0x25, 0xC7, 0x53,
- 0x9F, 0xD8, 0x50, 0x45, 0xE4, 0xEE, 0x07, 0xE0,
- 0xC4, 0x3F, 0x9E, 0x9D, 0x6F, 0x41, 0x4F, 0xC4,
- 0xD1, 0xC6, 0x29, 0x17, 0x81, 0x3F, 0x74, 0xC0,
- 0x0F, 0xC8, 0x3F, 0x3E, 0x2E, 0xD7, 0xC4, 0x5B,
- 0xA5, 0x83, 0x52, 0x64, 0xB4, 0x3E, 0x0B, 0x20,
- 0xAF, 0xDA, 0x6B, 0x30, 0x53, 0xBF, 0xB6, 0x42,
- 0x3B, 0x7F, 0xCE, 0x25, 0x47, 0x9F, 0xF5, 0xF1,
- 0x39, 0xDD, 0x9B, 0x5B, 0x99, 0x55, 0x58, 0xE2,
- 0xA5, 0x6B, 0xE1, 0x8D, 0xD5, 0x81, 0xCD, 0x01,
- 0x7C, 0x73, 0x5E, 0x6F, 0x0D, 0x0D, 0x97, 0xC4,
- 0xDD, 0xC1, 0xD1, 0xDA, 0x70, 0xC6, 0xDB, 0x4A,
- 0x12, 0xCC, 0x92, 0x77, 0x8E, 0x2F, 0xBB, 0xD6,
- 0xF3, 0xBA, 0x52, 0xAF, 0x91, 0xC9, 0xC6, 0xB6,
- 0x4E, 0x8D, 0xA4, 0xF7, 0xA2, 0xC2, 0x66, 0xD0,
- 0x2D, 0x00, 0x17, 0x53, 0xDF, 0x08, 0x96, 0x03,
- 0x93, 0xC5, 0xD5, 0x68, 0x88, 0xBF, 0x49, 0xEB,
- 0x5C, 0x16, 0xD9, 0xA8, 0x04, 0x27, 0xA4, 0x16,
- 0xBC, 0xB5, 0x97, 0xDF, 0x5B, 0xFE, 0x6F, 0x13,
- 0x89, 0x0A, 0x07, 0xEE, 0x13, 0x40, 0xE6, 0x47,
- 0x6B, 0x0D, 0x9A, 0xA8, 0xF8, 0x22, 0xAB, 0x0F,
- 0xD1, 0xAB, 0x0D, 0x20, 0x4F, 0x40, 0xB7, 0xCE,
- 0x6F, 0x2E, 0x13, 0x6E, 0xB6, 0x74, 0x85, 0xE5,
- 0x07, 0x80, 0x4D, 0x50, 0x45, 0x88, 0xAD, 0x37,
- 0xFF, 0xD8, 0x16, 0x56, 0x8B, 0x2D, 0xC4, 0x03,
- 0x11, 0xDF, 0xB6, 0x54, 0xCD, 0xEA, 0xD4, 0x7E,
- 0x23, 0x85, 0xC3, 0x43, 0x62, 0x03, 0xDD, 0x83,
- 0x6F, 0x9C, 0x64, 0xD9, 0x74, 0x62, 0xAD, 0x5D,
- 0xFA, 0x63, 0xB5, 0xCF, 0xE0, 0x8A, 0xCB, 0x95,
- 0x32, 0x86, 0x6F, 0x5C, 0xA7, 0x87, 0x56, 0x6F,
- 0xCA, 0x93, 0xE6, 0xB1, 0x69, 0x3E, 0xE1, 0x5C,
- 0xF6, 0xF7, 0xA2, 0xD6, 0x89, 0xD9, 0x74, 0x17,
- 0x98, 0xDC, 0x1C, 0x23, 0x8E, 0x1B, 0xE6, 0x50,
- 0x73, 0x3B, 0x18, 0xFB, 0x34, 0xFF, 0x88, 0x0E,
- 0x16, 0xBB, 0xD2, 0x1B, 0x47, 0xAC
- },
- .len = 2800
- },
- .ciphertext = {
- .data = {
- 0x4B, 0xBF, 0xA9, 0x1B, 0xA2, 0x5D, 0x47, 0xDB,
- 0x9A, 0x9F, 0x19, 0x0D, 0x96, 0x2A, 0x19, 0xAB,
- 0x32, 0x39, 0x26, 0xB3, 0x51, 0xFB, 0xD3, 0x9E,
- 0x35, 0x1E, 0x05, 0xDA, 0x8B, 0x89, 0x25, 0xE3,
- 0x0B, 0x1C, 0xCE, 0x0D, 0x12, 0x21, 0x10, 0x10,
- 0x95, 0x81, 0x5C, 0xC7, 0xCB, 0x63, 0x19, 0x50,
- 0x9E, 0xC0, 0xD6, 0x79, 0x40, 0x49, 0x19, 0x87,
- 0xE1, 0x3F, 0x0A, 0xFF, 0xAC, 0x33, 0x2A, 0xA6,
- 0xAA, 0x64, 0x62, 0x6D, 0x3E, 0x9A, 0x19, 0x17,
- 0x51, 0x9E, 0x0B, 0x97, 0xB6, 0x55, 0xC6, 0xA1,
- 0x65, 0xE4, 0x4C, 0xA9, 0xFE, 0xAC, 0x07, 0x90,
- 0xD2, 0xA3, 0x21, 0xAD, 0x3D, 0x86, 0xB7, 0x9C,
- 0x51, 0x38, 0x73, 0x9F, 0xA3, 0x8D, 0x88, 0x7E,
- 0xC7, 0xDE, 0xF4, 0x49, 0xCE, 0x8A, 0xBD, 0xD3,
- 0xE7, 0xF8, 0xDC, 0x4C, 0xA9, 0xE7, 0xB7, 0x33,
- 0x14, 0xAD, 0x31, 0x0F, 0x90, 0x25, 0xE6, 0x19,
- 0x46, 0xB3, 0xA5, 0x6D, 0xC6, 0x49, 0xEC, 0x0D,
- 0xA0, 0xD6, 0x39, 0x43, 0xDF, 0xF5, 0x92, 0xCF,
- 0x96, 0x2A, 0x7E, 0xFB, 0x2C, 0x85, 0x24, 0xE3,
- 0x5A, 0x2A, 0x6E, 0x78, 0x79, 0xD6, 0x26, 0x04,
- 0xEF, 0x26, 0x86, 0x95, 0xFA, 0x40, 0x03, 0x02,
- 0x7E, 0x22, 0xE6, 0x08, 0x30, 0x77, 0x52, 0x20,
- 0x64, 0xBD, 0x4A, 0x5B, 0x90, 0x6B, 0x5F, 0x53,
- 0x12, 0x74, 0xF2, 0x35, 0xED, 0x50, 0x6C, 0xFF,
- 0x01, 0x54, 0xC7, 0x54, 0x92, 0x8A, 0x0C, 0xE5,
- 0x47, 0x6F, 0x2C, 0xB1, 0x02, 0x0A, 0x12, 0x22,
- 0xD3, 0x2C, 0x14, 0x55, 0xEC, 0xAE, 0xF1, 0xE3,
- 0x68, 0xFB, 0x34, 0x4D, 0x17, 0x35, 0xBF, 0xBE,
- 0xDE, 0xB7, 0x1D, 0x0A, 0x33, 0xA2, 0xA5, 0x4B,
- 0x1D, 0xA5, 0xA2, 0x94, 0xE6, 0x79, 0x14, 0x4D,
- 0xDF, 0x11, 0xEB, 0x1A, 0x3D, 0xE8, 0xCF, 0x0C,
- 0xC0, 0x61, 0x91, 0x79, 0x74, 0xF3, 0x5C, 0x1D,
- 0x9C, 0xA0, 0xAC, 0x81, 0x80, 0x7F, 0x8F, 0xCC,
- 0xE6, 0x19, 0x9A, 0x6C, 0x77, 0x12, 0xDA, 0x86,
- 0x50, 0x21, 0xB0, 0x4C, 0xE0, 0x43, 0x95, 0x16,
- 0xF1, 0xA5, 0x26, 0xCC, 0xDA, 0x9F, 0xD9, 0xAB,
- 0xBD, 0x53, 0xC3, 0xA6, 0x84, 0xF9, 0xAE, 0x1E,
- 0x7E, 0xE6, 0xB1, 0x1D, 0xA1, 0x38, 0xEA, 0x82,
- 0x6C, 0x55, 0x16, 0xB5, 0xAA, 0xDF, 0x1A, 0xBB,
- 0xE3, 0x6F, 0xA7, 0xFF, 0xF9, 0x2E, 0x3A, 0x11,
- 0x76, 0x06, 0x4E, 0x8D, 0x95, 0xF2, 0xE4, 0x88,
- 0x2B, 0x55, 0x00, 0xB9, 0x32, 0x28, 0xB2, 0x19,
- 0x4A, 0x47, 0x5C, 0x1A, 0x27, 0xF6, 0x3F, 0x9F,
- 0xFD, 0x26, 0x49, 0x89, 0xA1, 0xBC
- },
- .len = 2800
- },
- .validDataLenInBits = {
- .len = 2798
- },
- .validCipherLenInBits = {
- .len = 2798
- },
- .validCipherOffsetLenInBits = {
- .len = 128
- }
-};
-
-struct zuc_test_data zuc_test_case_5 = {
- .key = {
- .data = {
- 0xE1, 0x3F, 0xED, 0x21, 0xB4, 0x6E, 0x4E, 0x7E,
- 0xC3, 0x12, 0x53, 0xB2, 0xBB, 0x17, 0xB3, 0xE0
- },
- .len = 16
- },
- .iv = {
- .data = {
- 0x27, 0x38, 0xCD, 0xAA, 0xD0, 0x00, 0x00, 0x00,
- 0x27, 0x38, 0xCD, 0xAA, 0xD0, 0x00, 0x00, 0x00
- },
- .len = 16
- },
- .plaintext = {
- .data = {
- 0x8D, 0x74, 0xE2, 0x0D, 0x54, 0x89, 0x4E, 0x06,
- 0xD3, 0xCB, 0x13, 0xCB, 0x39, 0x33, 0x06, 0x5E,
- 0x86, 0x74, 0xBE, 0x62, 0xAD, 0xB1, 0xC7, 0x2B,
- 0x3A, 0x64, 0x69, 0x65, 0xAB, 0x63, 0xCB, 0x7B,
- 0x78, 0x54, 0xDF, 0xDC, 0x27, 0xE8, 0x49, 0x29,
- 0xF4, 0x9C, 0x64, 0xB8, 0x72, 0xA4, 0x90, 0xB1,
- 0x3F, 0x95, 0x7B, 0x64, 0x82, 0x7E, 0x71, 0xF4,
- 0x1F, 0xBD, 0x42, 0x69, 0xA4, 0x2C, 0x97, 0xF8,
- 0x24, 0x53, 0x70, 0x27, 0xF8, 0x6E, 0x9F, 0x4A,
- 0xD8, 0x2D, 0x1D, 0xF4, 0x51, 0x69, 0x0F, 0xDD,
- 0x98, 0xB6, 0xD0, 0x3F, 0x3A, 0x0E, 0xBE, 0x3A,
- 0x31, 0x2D, 0x6B, 0x84, 0x0B, 0xA5, 0xA1, 0x82,
- 0x0B, 0x2A, 0x2C, 0x97, 0x09, 0xC0, 0x90, 0xD2,
- 0x45, 0xED, 0x26, 0x7C, 0xF8, 0x45, 0xAE, 0x41,
- 0xFA, 0x97, 0x5D, 0x33, 0x33, 0xAC, 0x30, 0x09,
- 0xFD, 0x40, 0xEB, 0xA9, 0xEB, 0x5B, 0x88, 0x57,
- 0x14, 0xB7, 0x68, 0xB6, 0x97, 0x13, 0x8B, 0xAF,
- 0x21, 0x38, 0x0E, 0xCA, 0x49, 0xF6, 0x44, 0xD4,
- 0x86, 0x89, 0xE4, 0x21, 0x57, 0x60, 0xB9, 0x06,
- 0x73, 0x9F, 0x0D, 0x2B, 0x3F, 0x09, 0x11, 0x33,
- 0xCA, 0x15, 0xD9, 0x81, 0xCB, 0xE4, 0x01, 0xBA,
- 0xF7, 0x2D, 0x05, 0xAC, 0xE0, 0x5C, 0xCC, 0xB2,
- 0xD2, 0x97, 0xF4, 0xEF, 0x6A, 0x5F, 0x58, 0xD9,
- 0x12, 0x46, 0xCF, 0xA7, 0x72, 0x15, 0xB8, 0x92,
- 0xAB, 0x44, 0x1D, 0x52, 0x78, 0x45, 0x27, 0x95,
- 0xCC, 0xB7, 0xF5, 0xD7, 0x90, 0x57, 0xA1, 0xC4,
- 0xF7, 0x7F, 0x80, 0xD4, 0x6D, 0xB2, 0x03, 0x3C,
- 0xB7, 0x9B, 0xED, 0xF8, 0xE6, 0x05, 0x51, 0xCE,
- 0x10, 0xC6, 0x67, 0xF6, 0x2A, 0x97, 0xAB, 0xAF,
- 0xAB, 0xBC, 0xD6, 0x77, 0x20, 0x18, 0xDF, 0x96,
- 0xA2, 0x82, 0xEA, 0x73, 0x7C, 0xE2, 0xCB, 0x33,
- 0x12, 0x11, 0xF6, 0x0D, 0x53, 0x54, 0xCE, 0x78,
- 0xF9, 0x91, 0x8D, 0x9C, 0x20, 0x6C, 0xA0, 0x42,
- 0xC9, 0xB6, 0x23, 0x87, 0xDD, 0x70, 0x96, 0x04,
- 0xA5, 0x0A, 0xF1, 0x6D, 0x8D, 0x35, 0xA8, 0x90,
- 0x6B, 0xE4, 0x84, 0xCF, 0x2E, 0x74, 0xA9, 0x28,
- 0x99, 0x40, 0x36, 0x43, 0x53, 0x24, 0x9B, 0x27,
- 0xB4, 0xC9, 0xAE, 0x29, 0xED, 0xDF, 0xC7, 0xDA,
- 0x64, 0x18, 0x79, 0x1A, 0x4E, 0x7B, 0xAA, 0x06,
- 0x60, 0xFA, 0x64, 0x51, 0x1F, 0x2D, 0x68, 0x5C,
- 0xC3, 0xA5, 0xFF, 0x70, 0xE0, 0xD2, 0xB7, 0x42,
- 0x92, 0xE3, 0xB8, 0xA0, 0xCD, 0x6B, 0x04, 0xB1,
- 0xC7, 0x90, 0xB8, 0xEA, 0xD2, 0x70, 0x37, 0x08,
- 0x54, 0x0D, 0xEA, 0x2F, 0xC0, 0x9C, 0x3D, 0xA7,
- 0x70, 0xF6, 0x54, 0x49, 0xE8, 0x4D, 0x81, 0x7A,
- 0x4F, 0x55, 0x10, 0x55, 0xE1, 0x9A, 0xB8, 0x50,
- 0x18, 0xA0, 0x02, 0x8B, 0x71, 0xA1, 0x44, 0xD9,
- 0x67, 0x91, 0xE9, 0xA3, 0x57, 0x79, 0x33, 0x50,
- 0x4E, 0xEE, 0x00, 0x60, 0x34, 0x0C, 0x69, 0xD2,
- 0x74, 0xE1, 0xBF, 0x9D, 0x80, 0x5D, 0xCB, 0xCC,
- 0x1A, 0x6F, 0xAA, 0x97, 0x68, 0x00, 0xB6, 0xFF,
- 0x2B, 0x67, 0x1D, 0xC4, 0x63, 0x65, 0x2F, 0xA8,
- 0xA3, 0x3E, 0xE5, 0x09, 0x74, 0xC1, 0xC2, 0x1B,
- 0xE0, 0x1E, 0xAB, 0xB2, 0x16, 0x74, 0x30, 0x26,
- 0x9D, 0x72, 0xEE, 0x51, 0x1C, 0x9D, 0xDE, 0x30,
- 0x79, 0x7C, 0x9A, 0x25, 0xD8, 0x6C, 0xE7, 0x4F,
- 0x5B, 0x96, 0x1B, 0xE5, 0xFD, 0xFB, 0x68, 0x07,
- 0x81, 0x40, 0x39, 0xE7, 0x13, 0x76, 0x36, 0xBD,
- 0x1D, 0x7F, 0xA9, 0xE0, 0x9E, 0xFD, 0x20, 0x07,
- 0x50, 0x59, 0x06, 0xA5, 0xAC, 0x45, 0xDF, 0xDE,
- 0xED, 0x77, 0x57, 0xBB, 0xEE, 0x74, 0x57, 0x49,
- 0xC2, 0x96, 0x33, 0x35, 0x0B, 0xEE, 0x0E, 0xA6,
- 0xF4, 0x09, 0xDF, 0x45, 0x80, 0x16, 0x00
- },
- .len = 4024
- },
- .ciphertext = {
- .data = {
- 0x94, 0xEA, 0xA4, 0xAA, 0x30, 0xA5, 0x71, 0x37,
- 0xDD, 0xF0, 0x9B, 0x97, 0xB2, 0x56, 0x18, 0xA2,
- 0x0A, 0x13, 0xE2, 0xF1, 0x0F, 0xA5, 0xBF, 0x81,
- 0x61, 0xA8, 0x79, 0xCC, 0x2A, 0xE7, 0x97, 0xA6,
- 0xB4, 0xCF, 0x2D, 0x9D, 0xF3, 0x1D, 0xEB, 0xB9,
- 0x90, 0x5C, 0xCF, 0xEC, 0x97, 0xDE, 0x60, 0x5D,
- 0x21, 0xC6, 0x1A, 0xB8, 0x53, 0x1B, 0x7F, 0x3C,
- 0x9D, 0xA5, 0xF0, 0x39, 0x31, 0xF8, 0xA0, 0x64,
- 0x2D, 0xE4, 0x82, 0x11, 0xF5, 0xF5, 0x2F, 0xFE,
- 0xA1, 0x0F, 0x39, 0x2A, 0x04, 0x76, 0x69, 0x98,
- 0x5D, 0xA4, 0x54, 0xA2, 0x8F, 0x08, 0x09, 0x61,
- 0xA6, 0xC2, 0xB6, 0x2D, 0xAA, 0x17, 0xF3, 0x3C,
- 0xD6, 0x0A, 0x49, 0x71, 0xF4, 0x8D, 0x2D, 0x90,
- 0x93, 0x94, 0xA5, 0x5F, 0x48, 0x11, 0x7A, 0xCE,
- 0x43, 0xD7, 0x08, 0xE6, 0xB7, 0x7D, 0x3D, 0xC4,
- 0x6D, 0x8B, 0xC0, 0x17, 0xD4, 0xD1, 0xAB, 0xB7,
- 0x7B, 0x74, 0x28, 0xC0, 0x42, 0xB0, 0x6F, 0x2F,
- 0x99, 0xD8, 0xD0, 0x7C, 0x98, 0x79, 0xD9, 0x96,
- 0x00, 0x12, 0x7A, 0x31, 0x98, 0x5F, 0x10, 0x99,
- 0xBB, 0xD7, 0xD6, 0xC1, 0x51, 0x9E, 0xDE, 0x8F,
- 0x5E, 0xEB, 0x4A, 0x61, 0x0B, 0x34, 0x9A, 0xC0,
- 0x1E, 0xA2, 0x35, 0x06, 0x91, 0x75, 0x6B, 0xD1,
- 0x05, 0xC9, 0x74, 0xA5, 0x3E, 0xDD, 0xB3, 0x5D,
- 0x1D, 0x41, 0x00, 0xB0, 0x12, 0xE5, 0x22, 0xAB,
- 0x41, 0xF4, 0xC5, 0xF2, 0xFD, 0xE7, 0x6B, 0x59,
- 0xCB, 0x8B, 0x96, 0xD8, 0x85, 0xCF, 0xE4, 0x08,
- 0x0D, 0x13, 0x28, 0xA0, 0xD6, 0x36, 0xCC, 0x0E,
- 0xDC, 0x05, 0x80, 0x0B, 0x76, 0xAC, 0xCA, 0x8F,
- 0xEF, 0x67, 0x20, 0x84, 0xD1, 0xF5, 0x2A, 0x8B,
- 0xBD, 0x8E, 0x09, 0x93, 0x32, 0x09, 0x92, 0xC7,
- 0xFF, 0xBA, 0xE1, 0x7C, 0x40, 0x84, 0x41, 0xE0,
- 0xEE, 0x88, 0x3F, 0xC8, 0xA8, 0xB0, 0x5E, 0x22,
- 0xF5, 0xFF, 0x7F, 0x8D, 0x1B, 0x48, 0xC7, 0x4C,
- 0x46, 0x8C, 0x46, 0x7A, 0x02, 0x8F, 0x09, 0xFD,
- 0x7C, 0xE9, 0x11, 0x09, 0xA5, 0x70, 0xA2, 0xD5,
- 0xC4, 0xD5, 0xF4, 0xFA, 0x18, 0xC5, 0xDD, 0x3E,
- 0x45, 0x62, 0xAF, 0xE2, 0x4E, 0xF7, 0x71, 0x90,
- 0x1F, 0x59, 0xAF, 0x64, 0x58, 0x98, 0xAC, 0xEF,
- 0x08, 0x8A, 0xBA, 0xE0, 0x7E, 0x92, 0xD5, 0x2E,
- 0xB2, 0xDE, 0x55, 0x04, 0x5B, 0xB1, 0xB7, 0xC4,
- 0x16, 0x4E, 0xF2, 0xD7, 0xA6, 0xCA, 0xC1, 0x5E,
- 0xEB, 0x92, 0x6D, 0x7E, 0xA2, 0xF0, 0x8B, 0x66,
- 0xE1, 0xF7, 0x59, 0xF3, 0xAE, 0xE4, 0x46, 0x14,
- 0x72, 0x5A, 0xA3, 0xC7, 0x48, 0x2B, 0x30, 0x84,
- 0x4C, 0x14, 0x3F, 0xF8, 0x5B, 0x53, 0xF1, 0xE5,
- 0x83, 0xC5, 0x01, 0x25, 0x7D, 0xDD, 0xD0, 0x96,
- 0xB8, 0x12, 0x68, 0xDA, 0xA3, 0x03, 0xF1, 0x72,
- 0x34, 0xC2, 0x33, 0x35, 0x41, 0xF0, 0xBB, 0x8E,
- 0x19, 0x06, 0x48, 0xC5, 0x80, 0x7C, 0x86, 0x6D,
- 0x71, 0x93, 0x22, 0x86, 0x09, 0xAD, 0xB9, 0x48,
- 0x68, 0x6F, 0x7D, 0xE2, 0x94, 0xA8, 0x02, 0xCC,
- 0x38, 0xF7, 0xFE, 0x52, 0x08, 0xF5, 0xEA, 0x31,
- 0x96, 0xD0, 0x16, 0x7B, 0x9B, 0xDD, 0x02, 0xF0,
- 0xD2, 0xA5, 0x22, 0x1C, 0xA5, 0x08, 0xF8, 0x93,
- 0xAF, 0x5C, 0x4B, 0x4B, 0xB9, 0xF4, 0xF5, 0x20,
- 0xFD, 0x84, 0x28, 0x9B, 0x3D, 0xBE, 0x7E, 0x61,
- 0x49, 0x7A, 0x7E, 0x2A, 0x58, 0x40, 0x37, 0xEA,
- 0x63, 0x7B, 0x69, 0x81, 0x12, 0x71, 0x74, 0xAF,
- 0x57, 0xB4, 0x71, 0xDF, 0x4B, 0x27, 0x68, 0xFD,
- 0x79, 0xC1, 0x54, 0x0F, 0xB3, 0xED, 0xF2, 0xEA,
- 0x22, 0xCB, 0x69, 0xBE, 0xC0, 0xCF, 0x8D, 0x93,
- 0x3D, 0x9C, 0x6F, 0xDD, 0x64, 0x5E, 0x85, 0x05,
- 0x91, 0xCC, 0xA3, 0xD6, 0x2C, 0x0C, 0xC0
- },
- .len = 4024
- },
- .validDataLenInBits = {
- .len = 4019
- },
- .validCipherLenInBits = {
- .len = 4019
- },
- .validCipherOffsetLenInBits = {
- .len = 128
- }
-};
-
-#endif /* TEST_CRYPTODEV_ZUC_TEST_VECTORS_H_ */
diff --git a/app/test/test_cycles.c b/app/test/test_cycles.c
deleted file mode 100644
index f1897979..00000000
--- a/app/test/test_cycles.c
+++ /dev/null
@@ -1,137 +0,0 @@
-/*-
- * BSD LICENSE
- *
- * Copyright(c) 2010-2014 Intel Corporation. All rights reserved.
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * * Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * * Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in
- * the documentation and/or other materials provided with the
- * distribution.
- * * Neither the name of Intel Corporation nor the names of its
- * contributors may be used to endorse or promote products derived
- * from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
- * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
- * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#include <stdio.h>
-#include <stdint.h>
-
-#include <rte_common.h>
-#include <rte_cycles.h>
-
-#include "test.h"
-
-#define N 10000
-
-/*
- * Cycles test
- * ===========
- *
- * - Loop N times and check that the timer always increments and
- * never decrements during this loop.
- *
- * - Wait one second using rte_usleep() and check that the increment
- * of cycles is correct with regard to the frequency of the timer.
- */
-
-static int
-test_cycles(void)
-{
- unsigned i;
- uint64_t start_cycles, cycles, prev_cycles;
- uint64_t hz = rte_get_timer_hz();
- uint64_t max_inc = (hz / 100); /* 10 ms max between 2 reads */
-
- /* check that the timer is always incrementing */
- start_cycles = rte_get_timer_cycles();
- prev_cycles = start_cycles;
- for (i=0; i<N; i++) {
- cycles = rte_get_timer_cycles();
- if ((uint64_t)(cycles - prev_cycles) > max_inc) {
- printf("increment too high or going backwards\n");
- return -1;
- }
- prev_cycles = cycles;
- }
-
- /* check that waiting 1 second is precise */
- prev_cycles = rte_get_timer_cycles();
- rte_delay_us(1000000);
- cycles = rte_get_timer_cycles();
-
- if ((uint64_t)(cycles - prev_cycles) > (hz + max_inc)) {
- printf("delay_us is not accurate: too long\n");
- return -1;
- }
- if ((uint64_t)(cycles - prev_cycles) < (hz - max_inc)) {
- printf("delay_us is not accurate: too short\n");
- return -1;
- }
-
- return 0;
-}
-
-REGISTER_TEST_COMMAND(cycles_autotest, test_cycles);
-
-/*
- * rte_delay_us_callback test
- *
- * - check if callback is correctly registered/unregistered
- *
- */
-
-static unsigned int pattern;
-static void my_rte_delay_us(unsigned int us)
-{
- pattern += us;
-}
-
-static int
-test_user_delay_us(void)
-{
- pattern = 0;
-
- rte_delay_us(2);
- if (pattern != 0)
- return -1;
-
- /* register custom delay function */
- rte_delay_us_callback_register(my_rte_delay_us);
-
- rte_delay_us(2);
- if (pattern != 2)
- return -1;
-
- rte_delay_us(3);
- if (pattern != 5)
- return -1;
-
- /* restore original delay function */
- rte_delay_us_callback_register(rte_delay_us_block);
-
- rte_delay_us(3);
- if (pattern != 5)
- return -1;
-
- return 0;
-}
-
-REGISTER_TEST_COMMAND(user_delay_us, test_user_delay_us);
diff --git a/app/test/test_debug.c b/app/test/test_debug.c
deleted file mode 100644
index 0a3b2c46..00000000
--- a/app/test/test_debug.c
+++ /dev/null
@@ -1,149 +0,0 @@
-/*-
- * BSD LICENSE
- *
- * Copyright(c) 2010-2014 Intel Corporation. All rights reserved.
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * * Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * * Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in
- * the documentation and/or other materials provided with the
- * distribution.
- * * Neither the name of Intel Corporation nor the names of its
- * contributors may be used to endorse or promote products derived
- * from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
- * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
- * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#include <stdio.h>
-#include <stdint.h>
-#include <sys/wait.h>
-#include <unistd.h>
-
-#include <rte_debug.h>
-#include <rte_common.h>
-#include <rte_eal.h>
-
-#include "test.h"
-
-/*
- * Debug test
- * ==========
- */
-
-/* use fork() to test rte_panic() */
-static int
-test_panic(void)
-{
- int pid;
- int status;
-
- pid = fork();
-
- if (pid == 0)
- rte_panic("Test Debug\n");
- else if (pid < 0){
- printf("Fork Failed\n");
- return -1;
- }
- wait(&status);
- if(status == 0){
- printf("Child process terminated normally!\n");
- return -1;
- } else
- printf("Child process terminated as expected - Test passed!\n");
-
- return 0;
-}
-
-/* use fork() to test rte_exit() */
-static int
-test_exit_val(int exit_val)
-{
- int pid;
- int status;
-
- pid = fork();
-
- if (pid == 0)
- rte_exit(exit_val, __func__);
- else if (pid < 0){
- printf("Fork Failed\n");
- return -1;
- }
- wait(&status);
- printf("Child process status: %d\n", status);
-#ifndef RTE_EAL_ALWAYS_PANIC_ON_ERROR
- if(!WIFEXITED(status) || WEXITSTATUS(status) != (uint8_t)exit_val){
- printf("Child process terminated with incorrect status (expected = %d)!\n",
- exit_val);
- return -1;
- }
-#endif
- return 0;
-}
-
-static int
-test_exit(void)
-{
- int test_vals[] = { 0, 1, 2, 255, -1 };
- unsigned i;
- for (i = 0; i < sizeof(test_vals) / sizeof(test_vals[0]); i++){
- if (test_exit_val(test_vals[i]) < 0)
- return -1;
- }
- printf("%s Passed\n", __func__);
- return 0;
-}
-
-static void
-dummy_app_usage(const char *progname)
-{
- RTE_SET_USED(progname);
-}
-
-static int
-test_usage(void)
-{
- if (rte_set_application_usage_hook(dummy_app_usage) != NULL) {
- printf("Non-NULL value returned for initial usage hook\n");
- return -1;
- }
- if (rte_set_application_usage_hook(NULL) != dummy_app_usage) {
- printf("Incorrect value returned for application usage hook\n");
- return -1;
- }
- return 0;
-}
-
-static int
-test_debug(void)
-{
- rte_dump_stack();
- rte_dump_registers();
- if (test_panic() < 0)
- return -1;
- if (test_exit() < 0)
- return -1;
- if (test_usage() < 0)
- return -1;
- return 0;
-}
-
-REGISTER_TEST_COMMAND(debug_autotest, test_debug);
diff --git a/app/test/test_devargs.c b/app/test/test_devargs.c
deleted file mode 100644
index 63242f1c..00000000
--- a/app/test/test_devargs.c
+++ /dev/null
@@ -1,134 +0,0 @@
-/*-
- * BSD LICENSE
- *
- * Copyright 2014 6WIND S.A.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * * Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * * Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in
- * the documentation and/or other materials provided with the
- * distribution.
- * * Neither the name of 6WIND S.A nor the names of its contributors
- * may be used to endorse or promote products derived from this
- * software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
- * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
- * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <sys/queue.h>
-
-#include <rte_debug.h>
-#include <rte_devargs.h>
-
-#include "test.h"
-
-/* clear devargs list that was modified by the test */
-static void free_devargs_list(void)
-{
- struct rte_devargs *devargs;
-
- while (!TAILQ_EMPTY(&devargs_list)) {
- devargs = TAILQ_FIRST(&devargs_list);
- TAILQ_REMOVE(&devargs_list, devargs, next);
- free(devargs->args);
- free(devargs);
- }
-}
-
-static int
-test_devargs(void)
-{
- struct rte_devargs_list save_devargs_list;
- struct rte_devargs *devargs;
-
- /* save the real devargs_list, it is restored at the end of the test */
- save_devargs_list = devargs_list;
- TAILQ_INIT(&devargs_list);
-
- /* test valid cases */
- if (rte_eal_devargs_add(RTE_DEVTYPE_WHITELISTED_PCI, "08:00.1") < 0)
- goto fail;
- if (rte_eal_devargs_add(RTE_DEVTYPE_WHITELISTED_PCI, "0000:5:00.0") < 0)
- goto fail;
- if (rte_eal_devargs_add(RTE_DEVTYPE_BLACKLISTED_PCI, "04:00.0,arg=val") < 0)
- goto fail;
- if (rte_eal_devargs_add(RTE_DEVTYPE_BLACKLISTED_PCI, "0000:01:00.1") < 0)
- goto fail;
- if (rte_eal_devargs_type_count(RTE_DEVTYPE_WHITELISTED_PCI) != 2)
- goto fail;
- if (rte_eal_devargs_type_count(RTE_DEVTYPE_BLACKLISTED_PCI) != 2)
- goto fail;
- if (rte_eal_devargs_type_count(RTE_DEVTYPE_VIRTUAL) != 0)
- goto fail;
- if (rte_eal_devargs_add(RTE_DEVTYPE_VIRTUAL, "net_ring0") < 0)
- goto fail;
- if (rte_eal_devargs_add(RTE_DEVTYPE_VIRTUAL, "net_ring1,key=val,k2=val2") < 0)
- goto fail;
- if (rte_eal_devargs_type_count(RTE_DEVTYPE_VIRTUAL) != 2)
- goto fail;
- free_devargs_list();
-
- /* check virtual device with argument parsing */
- if (rte_eal_devargs_add(RTE_DEVTYPE_VIRTUAL, "net_ring1,k1=val,k2=val2") < 0)
- goto fail;
- devargs = TAILQ_FIRST(&devargs_list);
- if (strncmp(devargs->virt.drv_name, "net_ring1",
- sizeof(devargs->virt.drv_name)) != 0)
- goto fail;
- if (!devargs->args || strcmp(devargs->args, "k1=val,k2=val2") != 0)
- goto fail;
- free_devargs_list();
-
- /* check PCI device with empty argument parsing */
- if (rte_eal_devargs_add(RTE_DEVTYPE_WHITELISTED_PCI, "04:00.1") < 0)
- goto fail;
- devargs = TAILQ_FIRST(&devargs_list);
- if (devargs->pci.addr.domain != 0 ||
- devargs->pci.addr.bus != 4 ||
- devargs->pci.addr.devid != 0 ||
- devargs->pci.addr.function != 1)
- goto fail;
- if (!devargs->args || strcmp(devargs->args, "") != 0)
- goto fail;
- free_devargs_list();
-
- /* test error case: bad PCI address */
- if (rte_eal_devargs_add(RTE_DEVTYPE_WHITELISTED_PCI, "08:1") == 0)
- goto fail;
- if (rte_eal_devargs_add(RTE_DEVTYPE_WHITELISTED_PCI, "00.1") == 0)
- goto fail;
- if (rte_eal_devargs_add(RTE_DEVTYPE_WHITELISTED_PCI, "foo") == 0)
- goto fail;
- if (rte_eal_devargs_add(RTE_DEVTYPE_WHITELISTED_PCI, ",") == 0)
- goto fail;
- if (rte_eal_devargs_add(RTE_DEVTYPE_WHITELISTED_PCI, "000f:0:0") == 0)
- goto fail;
-
- devargs_list = save_devargs_list;
- return 0;
-
- fail:
- free_devargs_list();
- devargs_list = save_devargs_list;
- return -1;
-}
-
-REGISTER_TEST_COMMAND(devargs_autotest, test_devargs);
diff --git a/app/test/test_distributor.c b/app/test/test_distributor.c
deleted file mode 100644
index 85cb8f39..00000000
--- a/app/test/test_distributor.c
+++ /dev/null
@@ -1,579 +0,0 @@
-/*-
- * BSD LICENSE
- *
- * Copyright(c) 2010-2014 Intel Corporation. All rights reserved.
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * * Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * * Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in
- * the documentation and/or other materials provided with the
- * distribution.
- * * Neither the name of Intel Corporation nor the names of its
- * contributors may be used to endorse or promote products derived
- * from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
- * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
- * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#include "test.h"
-
-#include <unistd.h>
-#include <string.h>
-#include <rte_cycles.h>
-#include <rte_errno.h>
-#include <rte_mempool.h>
-#include <rte_mbuf.h>
-#include <rte_distributor.h>
-
-#define ITER_POWER 20 /* log 2 of how many iterations we do when timing. */
-#define BURST 32
-#define BIG_BATCH 1024
-
-/* statics - all zero-initialized by default */
-static volatile int quit; /**< general quit variable for all threads */
-static volatile int zero_quit; /**< var for when we just want thr0 to quit*/
-static volatile unsigned worker_idx;
-
-struct worker_stats {
- volatile unsigned handled_packets;
-} __rte_cache_aligned;
-struct worker_stats worker_stats[RTE_MAX_LCORE];
-
-/* returns the total count of the number of packets handled by the worker
- * functions given below.
- */
-static inline unsigned
-total_packet_count(void)
-{
- unsigned i, count = 0;
- for (i = 0; i < worker_idx; i++)
- count += worker_stats[i].handled_packets;
- return count;
-}
-
-/* resets the packet counts for a new test */
-static inline void
-clear_packet_count(void)
-{
- memset(&worker_stats, 0, sizeof(worker_stats));
-}
-
-/* this is the basic worker function for sanity test
- * it does nothing but return packets and count them.
- */
-static int
-handle_work(void *arg)
-{
- struct rte_mbuf *pkt = NULL;
- struct rte_distributor *d = arg;
- unsigned count = 0;
- unsigned id = __sync_fetch_and_add(&worker_idx, 1);
-
- pkt = rte_distributor_get_pkt(d, id, NULL);
- while (!quit) {
- worker_stats[id].handled_packets++, count++;
- pkt = rte_distributor_get_pkt(d, id, pkt);
- }
- worker_stats[id].handled_packets++, count++;
- rte_distributor_return_pkt(d, id, pkt);
- return 0;
-}
-
-/* do basic sanity testing of the distributor. This test tests the following:
- * - send 32 packets through distributor with the same tag and ensure they
- * all go to the one worker
- * - send 32 packets throught the distributor with two different tags and
- * verify that they go equally to two different workers.
- * - send 32 packets with different tags through the distributors and
- * just verify we get all packets back.
- * - send 1024 packets through the distributor, gathering the returned packets
- * as we go. Then verify that we correctly got all 1024 pointers back again,
- * not necessarily in the same order (as different flows).
- */
-static int
-sanity_test(struct rte_distributor *d, struct rte_mempool *p)
-{
- struct rte_mbuf *bufs[BURST];
- unsigned i;
-
- printf("=== Basic distributor sanity tests ===\n");
- clear_packet_count();
- if (rte_mempool_get_bulk(p, (void *)bufs, BURST) != 0) {
- printf("line %d: Error getting mbufs from pool\n", __LINE__);
- return -1;
- }
-
- /* now set all hash values in all buffers to zero, so all pkts go to the
- * one worker thread */
- for (i = 0; i < BURST; i++)
- bufs[i]->hash.usr = 0;
-
- rte_distributor_process(d, bufs, BURST);
- rte_distributor_flush(d);
- if (total_packet_count() != BURST) {
- printf("Line %d: Error, not all packets flushed. "
- "Expected %u, got %u\n",
- __LINE__, BURST, total_packet_count());
- return -1;
- }
-
- for (i = 0; i < rte_lcore_count() - 1; i++)
- printf("Worker %u handled %u packets\n", i,
- worker_stats[i].handled_packets);
- printf("Sanity test with all zero hashes done.\n");
- if (worker_stats[0].handled_packets != BURST)
- return -1;
-
- /* pick two flows and check they go correctly */
- if (rte_lcore_count() >= 3) {
- clear_packet_count();
- for (i = 0; i < BURST; i++)
- bufs[i]->hash.usr = (i & 1) << 8;
-
- rte_distributor_process(d, bufs, BURST);
- rte_distributor_flush(d);
- if (total_packet_count() != BURST) {
- printf("Line %d: Error, not all packets flushed. "
- "Expected %u, got %u\n",
- __LINE__, BURST, total_packet_count());
- return -1;
- }
-
- for (i = 0; i < rte_lcore_count() - 1; i++)
- printf("Worker %u handled %u packets\n", i,
- worker_stats[i].handled_packets);
- printf("Sanity test with two hash values done\n");
-
- if (worker_stats[0].handled_packets != 16 ||
- worker_stats[1].handled_packets != 16)
- return -1;
- }
-
- /* give a different hash value to each packet,
- * so load gets distributed */
- clear_packet_count();
- for (i = 0; i < BURST; i++)
- bufs[i]->hash.usr = i;
-
- rte_distributor_process(d, bufs, BURST);
- rte_distributor_flush(d);
- if (total_packet_count() != BURST) {
- printf("Line %d: Error, not all packets flushed. "
- "Expected %u, got %u\n",
- __LINE__, BURST, total_packet_count());
- return -1;
- }
-
- for (i = 0; i < rte_lcore_count() - 1; i++)
- printf("Worker %u handled %u packets\n", i,
- worker_stats[i].handled_packets);
- printf("Sanity test with non-zero hashes done\n");
-
- rte_mempool_put_bulk(p, (void *)bufs, BURST);
-
- /* sanity test with BIG_BATCH packets to ensure they all arrived back
- * from the returned packets function */
- clear_packet_count();
- struct rte_mbuf *many_bufs[BIG_BATCH], *return_bufs[BIG_BATCH];
- unsigned num_returned = 0;
-
- /* flush out any remaining packets */
- rte_distributor_flush(d);
- rte_distributor_clear_returns(d);
- if (rte_mempool_get_bulk(p, (void *)many_bufs, BIG_BATCH) != 0) {
- printf("line %d: Error getting mbufs from pool\n", __LINE__);
- return -1;
- }
- for (i = 0; i < BIG_BATCH; i++)
- many_bufs[i]->hash.usr = i << 2;
-
- for (i = 0; i < BIG_BATCH/BURST; i++) {
- rte_distributor_process(d, &many_bufs[i*BURST], BURST);
- num_returned += rte_distributor_returned_pkts(d,
- &return_bufs[num_returned],
- BIG_BATCH - num_returned);
- }
- rte_distributor_flush(d);
- num_returned += rte_distributor_returned_pkts(d,
- &return_bufs[num_returned], BIG_BATCH - num_returned);
-
- if (num_returned != BIG_BATCH) {
- printf("line %d: Number returned is not the same as "
- "number sent\n", __LINE__);
- return -1;
- }
- /* big check - make sure all packets made it back!! */
- for (i = 0; i < BIG_BATCH; i++) {
- unsigned j;
- struct rte_mbuf *src = many_bufs[i];
- for (j = 0; j < BIG_BATCH; j++)
- if (return_bufs[j] == src)
- break;
-
- if (j == BIG_BATCH) {
- printf("Error: could not find source packet #%u\n", i);
- return -1;
- }
- }
- printf("Sanity test of returned packets done\n");
-
- rte_mempool_put_bulk(p, (void *)many_bufs, BIG_BATCH);
-
- printf("\n");
- return 0;
-}
-
-
-/* to test that the distributor does not lose packets, we use this worker
- * function which frees mbufs when it gets them. The distributor thread does
- * the mbuf allocation. If distributor drops packets we'll eventually run out
- * of mbufs.
- */
-static int
-handle_work_with_free_mbufs(void *arg)
-{
- struct rte_mbuf *pkt = NULL;
- struct rte_distributor *d = arg;
- unsigned count = 0;
- unsigned id = __sync_fetch_and_add(&worker_idx, 1);
-
- pkt = rte_distributor_get_pkt(d, id, NULL);
- while (!quit) {
- worker_stats[id].handled_packets++, count++;
- rte_pktmbuf_free(pkt);
- pkt = rte_distributor_get_pkt(d, id, pkt);
- }
- worker_stats[id].handled_packets++, count++;
- rte_distributor_return_pkt(d, id, pkt);
- return 0;
-}
-
-/* Perform a sanity test of the distributor with a large number of packets,
- * where we allocate a new set of mbufs for each burst. The workers then
- * free the mbufs. This ensures that we don't have any packet leaks in the
- * library.
- */
-static int
-sanity_test_with_mbuf_alloc(struct rte_distributor *d, struct rte_mempool *p)
-{
- unsigned i;
- struct rte_mbuf *bufs[BURST];
-
- printf("=== Sanity test with mbuf alloc/free ===\n");
- clear_packet_count();
- for (i = 0; i < ((1<<ITER_POWER)); i += BURST) {
- unsigned j;
- while (rte_mempool_get_bulk(p, (void *)bufs, BURST) < 0)
- rte_distributor_process(d, NULL, 0);
- for (j = 0; j < BURST; j++) {
- bufs[j]->hash.usr = (i+j) << 1;
- rte_mbuf_refcnt_set(bufs[j], 1);
- }
-
- rte_distributor_process(d, bufs, BURST);
- }
-
- rte_distributor_flush(d);
- if (total_packet_count() < (1<<ITER_POWER)) {
- printf("Line %u: Packet count is incorrect, %u, expected %u\n",
- __LINE__, total_packet_count(),
- (1<<ITER_POWER));
- return -1;
- }
-
- printf("Sanity test with mbuf alloc/free passed\n\n");
- return 0;
-}
-
-static int
-handle_work_for_shutdown_test(void *arg)
-{
- struct rte_mbuf *pkt = NULL;
- struct rte_distributor *d = arg;
- unsigned count = 0;
- const unsigned id = __sync_fetch_and_add(&worker_idx, 1);
-
- pkt = rte_distributor_get_pkt(d, id, NULL);
- /* wait for quit single globally, or for worker zero, wait
- * for zero_quit */
- while (!quit && !(id == 0 && zero_quit)) {
- worker_stats[id].handled_packets++, count++;
- rte_pktmbuf_free(pkt);
- pkt = rte_distributor_get_pkt(d, id, NULL);
- }
- worker_stats[id].handled_packets++, count++;
- rte_distributor_return_pkt(d, id, pkt);
-
- if (id == 0) {
- /* for worker zero, allow it to restart to pick up last packet
- * when all workers are shutting down.
- */
- while (zero_quit)
- usleep(100);
- pkt = rte_distributor_get_pkt(d, id, NULL);
- while (!quit) {
- worker_stats[id].handled_packets++, count++;
- rte_pktmbuf_free(pkt);
- pkt = rte_distributor_get_pkt(d, id, NULL);
- }
- rte_distributor_return_pkt(d, id, pkt);
- }
- return 0;
-}
-
-
-/* Perform a sanity test of the distributor with a large number of packets,
- * where we allocate a new set of mbufs for each burst. The workers then
- * free the mbufs. This ensures that we don't have any packet leaks in the
- * library.
- */
-static int
-sanity_test_with_worker_shutdown(struct rte_distributor *d,
- struct rte_mempool *p)
-{
- struct rte_mbuf *bufs[BURST];
- unsigned i;
-
- printf("=== Sanity test of worker shutdown ===\n");
-
- clear_packet_count();
- if (rte_mempool_get_bulk(p, (void *)bufs, BURST) != 0) {
- printf("line %d: Error getting mbufs from pool\n", __LINE__);
- return -1;
- }
-
- /* now set all hash values in all buffers to zero, so all pkts go to the
- * one worker thread */
- for (i = 0; i < BURST; i++)
- bufs[i]->hash.usr = 0;
-
- rte_distributor_process(d, bufs, BURST);
- /* at this point, we will have processed some packets and have a full
- * backlog for the other ones at worker 0.
- */
-
- /* get more buffers to queue up, again setting them to the same flow */
- if (rte_mempool_get_bulk(p, (void *)bufs, BURST) != 0) {
- printf("line %d: Error getting mbufs from pool\n", __LINE__);
- return -1;
- }
- for (i = 0; i < BURST; i++)
- bufs[i]->hash.usr = 0;
-
- /* get worker zero to quit */
- zero_quit = 1;
- rte_distributor_process(d, bufs, BURST);
-
- /* flush the distributor */
- rte_distributor_flush(d);
- if (total_packet_count() != BURST * 2) {
- printf("Line %d: Error, not all packets flushed. "
- "Expected %u, got %u\n",
- __LINE__, BURST * 2, total_packet_count());
- return -1;
- }
-
- for (i = 0; i < rte_lcore_count() - 1; i++)
- printf("Worker %u handled %u packets\n", i,
- worker_stats[i].handled_packets);
-
- printf("Sanity test with worker shutdown passed\n\n");
- return 0;
-}
-
-/* Test that the flush function is able to move packets between workers when
- * one worker shuts down..
- */
-static int
-test_flush_with_worker_shutdown(struct rte_distributor *d,
- struct rte_mempool *p)
-{
- struct rte_mbuf *bufs[BURST];
- unsigned i;
-
- printf("=== Test flush fn with worker shutdown ===\n");
-
- clear_packet_count();
- if (rte_mempool_get_bulk(p, (void *)bufs, BURST) != 0) {
- printf("line %d: Error getting mbufs from pool\n", __LINE__);
- return -1;
- }
-
- /* now set all hash values in all buffers to zero, so all pkts go to the
- * one worker thread */
- for (i = 0; i < BURST; i++)
- bufs[i]->hash.usr = 0;
-
- rte_distributor_process(d, bufs, BURST);
- /* at this point, we will have processed some packets and have a full
- * backlog for the other ones at worker 0.
- */
-
- /* get worker zero to quit */
- zero_quit = 1;
-
- /* flush the distributor */
- rte_distributor_flush(d);
-
- zero_quit = 0;
- if (total_packet_count() != BURST) {
- printf("Line %d: Error, not all packets flushed. "
- "Expected %u, got %u\n",
- __LINE__, BURST, total_packet_count());
- return -1;
- }
-
- for (i = 0; i < rte_lcore_count() - 1; i++)
- printf("Worker %u handled %u packets\n", i,
- worker_stats[i].handled_packets);
-
- printf("Flush test with worker shutdown passed\n\n");
- return 0;
-}
-
-static
-int test_error_distributor_create_name(void)
-{
- struct rte_distributor *d = NULL;
- char *name = NULL;
-
- d = rte_distributor_create(name, rte_socket_id(),
- rte_lcore_count() - 1);
- if (d != NULL || rte_errno != EINVAL) {
- printf("ERROR: No error on create() with NULL name param\n");
- return -1;
- }
-
- return 0;
-}
-
-
-static
-int test_error_distributor_create_numworkers(void)
-{
- struct rte_distributor *d = NULL;
- d = rte_distributor_create("test_numworkers", rte_socket_id(),
- RTE_MAX_LCORE + 10);
- if (d != NULL || rte_errno != EINVAL) {
- printf("ERROR: No error on create() with num_workers > MAX\n");
- return -1;
- }
- return 0;
-}
-
-
-/* Useful function which ensures that all worker functions terminate */
-static void
-quit_workers(struct rte_distributor *d, struct rte_mempool *p)
-{
- const unsigned num_workers = rte_lcore_count() - 1;
- unsigned i;
- struct rte_mbuf *bufs[RTE_MAX_LCORE];
- rte_mempool_get_bulk(p, (void *)bufs, num_workers);
-
- zero_quit = 0;
- quit = 1;
- for (i = 0; i < num_workers; i++)
- bufs[i]->hash.usr = i << 1;
- rte_distributor_process(d, bufs, num_workers);
-
- rte_mempool_put_bulk(p, (void *)bufs, num_workers);
-
- rte_distributor_process(d, NULL, 0);
- rte_distributor_flush(d);
- rte_eal_mp_wait_lcore();
- quit = 0;
- worker_idx = 0;
-}
-
-static int
-test_distributor(void)
-{
- static struct rte_distributor *d;
- static struct rte_mempool *p;
-
- if (rte_lcore_count() < 2) {
- printf("ERROR: not enough cores to test distributor\n");
- return -1;
- }
-
- if (d == NULL) {
- d = rte_distributor_create("Test_distributor", rte_socket_id(),
- rte_lcore_count() - 1);
- if (d == NULL) {
- printf("Error creating distributor\n");
- return -1;
- }
- } else {
- rte_distributor_flush(d);
- rte_distributor_clear_returns(d);
- }
-
- const unsigned nb_bufs = (511 * rte_lcore_count()) < BIG_BATCH ?
- (BIG_BATCH * 2) - 1 : (511 * rte_lcore_count());
- if (p == NULL) {
- p = rte_pktmbuf_pool_create("DT_MBUF_POOL", nb_bufs, BURST,
- 0, RTE_MBUF_DEFAULT_BUF_SIZE, rte_socket_id());
- if (p == NULL) {
- printf("Error creating mempool\n");
- return -1;
- }
- }
-
- rte_eal_mp_remote_launch(handle_work, d, SKIP_MASTER);
- if (sanity_test(d, p) < 0)
- goto err;
- quit_workers(d, p);
-
- rte_eal_mp_remote_launch(handle_work_with_free_mbufs, d, SKIP_MASTER);
- if (sanity_test_with_mbuf_alloc(d, p) < 0)
- goto err;
- quit_workers(d, p);
-
- if (rte_lcore_count() > 2) {
- rte_eal_mp_remote_launch(handle_work_for_shutdown_test, d,
- SKIP_MASTER);
- if (sanity_test_with_worker_shutdown(d, p) < 0)
- goto err;
- quit_workers(d, p);
-
- rte_eal_mp_remote_launch(handle_work_for_shutdown_test, d,
- SKIP_MASTER);
- if (test_flush_with_worker_shutdown(d, p) < 0)
- goto err;
- quit_workers(d, p);
-
- } else {
- printf("Not enough cores to run tests for worker shutdown\n");
- }
-
- if (test_error_distributor_create_numworkers() == -1 ||
- test_error_distributor_create_name() == -1) {
- printf("rte_distributor_create parameter check tests failed");
- return -1;
- }
-
- return 0;
-
-err:
- quit_workers(d, p);
- return -1;
-}
-
-REGISTER_TEST_COMMAND(distributor_autotest, test_distributor);
diff --git a/app/test/test_distributor_perf.c b/app/test/test_distributor_perf.c
deleted file mode 100644
index 7947fe9b..00000000
--- a/app/test/test_distributor_perf.c
+++ /dev/null
@@ -1,260 +0,0 @@
-/*-
- * BSD LICENSE
- *
- * Copyright(c) 2010-2014 Intel Corporation. All rights reserved.
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * * Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * * Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in
- * the documentation and/or other materials provided with the
- * distribution.
- * * Neither the name of Intel Corporation nor the names of its
- * contributors may be used to endorse or promote products derived
- * from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
- * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
- * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#include "test.h"
-
-#include <unistd.h>
-#include <string.h>
-#include <rte_mempool.h>
-#include <rte_cycles.h>
-#include <rte_common.h>
-#include <rte_mbuf.h>
-#include <rte_distributor.h>
-
-#define ITER_POWER 20 /* log 2 of how many iterations we do when timing. */
-#define BURST 32
-#define BIG_BATCH 1024
-
-/* static vars - zero initialized by default */
-static volatile int quit;
-static volatile unsigned worker_idx;
-
-struct worker_stats {
- volatile unsigned handled_packets;
-} __rte_cache_aligned;
-struct worker_stats worker_stats[RTE_MAX_LCORE];
-
-/* worker thread used for testing the time to do a round-trip of a cache
- * line between two cores and back again
- */
-static void
-flip_bit(volatile uint64_t *arg)
-{
- uint64_t old_val = 0;
- while (old_val != 2) {
- while (!*arg)
- rte_pause();
- old_val = *arg;
- *arg = 0;
- }
-}
-
-/* test case to time the number of cycles to round-trip a cache line between
- * two cores and back again.
- */
-static void
-time_cache_line_switch(void)
-{
- /* allocate a full cache line for data, we use only first byte of it */
- uint64_t data[RTE_CACHE_LINE_SIZE*3 / sizeof(uint64_t)];
-
- unsigned i, slaveid = rte_get_next_lcore(rte_lcore_id(), 0, 0);
- volatile uint64_t *pdata = &data[0];
- *pdata = 1;
- rte_eal_remote_launch((lcore_function_t *)flip_bit, &data[0], slaveid);
- while (*pdata)
- rte_pause();
-
- const uint64_t start_time = rte_rdtsc();
- for (i = 0; i < (1 << ITER_POWER); i++) {
- while (*pdata)
- rte_pause();
- *pdata = 1;
- }
- const uint64_t end_time = rte_rdtsc();
-
- while (*pdata)
- rte_pause();
- *pdata = 2;
- rte_eal_wait_lcore(slaveid);
- printf("==== Cache line switch test ===\n");
- printf("Time for %u iterations = %"PRIu64" ticks\n", (1<<ITER_POWER),
- end_time-start_time);
- printf("Ticks per iteration = %"PRIu64"\n\n",
- (end_time-start_time) >> ITER_POWER);
-}
-
-/* returns the total count of the number of packets handled by the worker
- * functions given below.
- */
-static unsigned
-total_packet_count(void)
-{
- unsigned i, count = 0;
- for (i = 0; i < worker_idx; i++)
- count += worker_stats[i].handled_packets;
- return count;
-}
-
-/* resets the packet counts for a new test */
-static void
-clear_packet_count(void)
-{
- memset(&worker_stats, 0, sizeof(worker_stats));
-}
-
-/* this is the basic worker function for performance tests.
- * it does nothing but return packets and count them.
- */
-static int
-handle_work(void *arg)
-{
- struct rte_mbuf *pkt = NULL;
- struct rte_distributor *d = arg;
- unsigned count = 0;
- unsigned id = __sync_fetch_and_add(&worker_idx, 1);
-
- pkt = rte_distributor_get_pkt(d, id, NULL);
- while (!quit) {
- worker_stats[id].handled_packets++, count++;
- pkt = rte_distributor_get_pkt(d, id, pkt);
- }
- worker_stats[id].handled_packets++, count++;
- rte_distributor_return_pkt(d, id, pkt);
- return 0;
-}
-
-/* this basic performance test just repeatedly sends in 32 packets at a time
- * to the distributor and verifies at the end that we got them all in the worker
- * threads and finally how long per packet the processing took.
- */
-static inline int
-perf_test(struct rte_distributor *d, struct rte_mempool *p)
-{
- unsigned i;
- uint64_t start, end;
- struct rte_mbuf *bufs[BURST];
-
- clear_packet_count();
- if (rte_mempool_get_bulk(p, (void *)bufs, BURST) != 0) {
- printf("Error getting mbufs from pool\n");
- return -1;
- }
- /* ensure we have different hash value for each pkt */
- for (i = 0; i < BURST; i++)
- bufs[i]->hash.usr = i;
-
- start = rte_rdtsc();
- for (i = 0; i < (1<<ITER_POWER); i++)
- rte_distributor_process(d, bufs, BURST);
- end = rte_rdtsc();
-
- do {
- usleep(100);
- rte_distributor_process(d, NULL, 0);
- } while (total_packet_count() < (BURST << ITER_POWER));
-
- printf("=== Performance test of distributor ===\n");
- printf("Time per burst: %"PRIu64"\n", (end - start) >> ITER_POWER);
- printf("Time per packet: %"PRIu64"\n\n",
- ((end - start) >> ITER_POWER)/BURST);
- rte_mempool_put_bulk(p, (void *)bufs, BURST);
-
- for (i = 0; i < rte_lcore_count() - 1; i++)
- printf("Worker %u handled %u packets\n", i,
- worker_stats[i].handled_packets);
- printf("Total packets: %u (%x)\n", total_packet_count(),
- total_packet_count());
- printf("=== Perf test done ===\n\n");
-
- return 0;
-}
-
-/* Useful function which ensures that all worker functions terminate */
-static void
-quit_workers(struct rte_distributor *d, struct rte_mempool *p)
-{
- const unsigned num_workers = rte_lcore_count() - 1;
- unsigned i;
- struct rte_mbuf *bufs[RTE_MAX_LCORE];
- rte_mempool_get_bulk(p, (void *)bufs, num_workers);
-
- quit = 1;
- for (i = 0; i < num_workers; i++)
- bufs[i]->hash.usr = i << 1;
- rte_distributor_process(d, bufs, num_workers);
-
- rte_mempool_put_bulk(p, (void *)bufs, num_workers);
-
- rte_distributor_process(d, NULL, 0);
- rte_eal_mp_wait_lcore();
- quit = 0;
- worker_idx = 0;
-}
-
-static int
-test_distributor_perf(void)
-{
- static struct rte_distributor *d;
- static struct rte_mempool *p;
-
- if (rte_lcore_count() < 2) {
- printf("ERROR: not enough cores to test distributor\n");
- return -1;
- }
-
- /* first time how long it takes to round-trip a cache line */
- time_cache_line_switch();
-
- if (d == NULL) {
- d = rte_distributor_create("Test_perf", rte_socket_id(),
- rte_lcore_count() - 1);
- if (d == NULL) {
- printf("Error creating distributor\n");
- return -1;
- }
- } else {
- rte_distributor_flush(d);
- rte_distributor_clear_returns(d);
- }
-
- const unsigned nb_bufs = (511 * rte_lcore_count()) < BIG_BATCH ?
- (BIG_BATCH * 2) - 1 : (511 * rte_lcore_count());
- if (p == NULL) {
- p = rte_pktmbuf_pool_create("DPT_MBUF_POOL", nb_bufs, BURST,
- 0, RTE_MBUF_DEFAULT_BUF_SIZE, rte_socket_id());
- if (p == NULL) {
- printf("Error creating mempool\n");
- return -1;
- }
- }
-
- rte_eal_mp_remote_launch(handle_work, d, SKIP_MASTER);
- if (perf_test(d, p) < 0)
- return -1;
- quit_workers(d, p);
-
- return 0;
-}
-
-REGISTER_TEST_COMMAND(distributor_perf_autotest, test_distributor_perf);
diff --git a/app/test/test_eal_flags.c b/app/test/test_eal_flags.c
deleted file mode 100644
index 91b40664..00000000
--- a/app/test/test_eal_flags.c
+++ /dev/null
@@ -1,1444 +0,0 @@
-/*-
- * BSD LICENSE
- *
- * Copyright(c) 2010-2014 Intel Corporation. All rights reserved.
- * Copyright(c) 2014 6WIND S.A.
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * * Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * * Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in
- * the documentation and/or other materials provided with the
- * distribution.
- * * Neither the name of Intel Corporation nor the names of its
- * contributors may be used to endorse or promote products derived
- * from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
- * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
- * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-#include <stdio.h>
-
-#include "test.h"
-
-#include <string.h>
-#include <stdarg.h>
-#include <libgen.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <errno.h>
-#include <unistd.h>
-#include <dirent.h>
-#include <sys/wait.h>
-#include <sys/file.h>
-#include <limits.h>
-
-#include <rte_debug.h>
-#include <rte_string_fns.h>
-
-#include "process.h"
-
-#ifdef RTE_LIBRTE_XEN_DOM0
-#define DEFAULT_MEM_SIZE "30"
-#else
-#define DEFAULT_MEM_SIZE "18"
-#endif
-#define mp_flag "--proc-type=secondary"
-#define no_hpet "--no-hpet"
-#define no_huge "--no-huge"
-#define no_shconf "--no-shconf"
-#define pci_whitelist "--pci-whitelist"
-#define vdev "--vdev"
-#define memtest "memtest"
-#define memtest1 "memtest1"
-#define memtest2 "memtest2"
-#define SOCKET_MEM_STRLEN (RTE_MAX_NUMA_NODES * 10)
-#define launch_proc(ARGV) process_dup(ARGV, \
- sizeof(ARGV)/(sizeof(ARGV[0])), __func__)
-
-enum hugepage_action {
- HUGEPAGE_CHECK_EXISTS = 0,
- HUGEPAGE_CHECK_LOCKED,
- HUGEPAGE_DELETE,
- HUGEPAGE_INVALID
-};
-
-/* if string contains a hugepage path */
-static int
-get_hugepage_path(char * src, int src_len, char * dst, int dst_len)
-{
-#define NUM_TOKENS 4
- char *tokens[NUM_TOKENS];
-
- /* if we couldn't properly split the string */
- if (rte_strsplit(src, src_len, tokens, NUM_TOKENS, ' ') < NUM_TOKENS)
- return 0;
-
- if (strncmp(tokens[2], "hugetlbfs", sizeof("hugetlbfs")) == 0) {
- snprintf(dst, dst_len, "%s", tokens[1]);
- return 1;
- }
- return 0;
-}
-
-/*
- * Cycles through hugepage directories and looks for hugepage
- * files associated with a given prefix. Depending on value of
- * action, the hugepages are checked if they exist, checked if
- * they can be locked, or are simply deleted.
- *
- * Returns 1 if it finds at least one hugepage matching the action
- * Returns 0 if no matching hugepages were found
- * Returns -1 if it encounters an error
- */
-static int
-process_hugefiles(const char * prefix, enum hugepage_action action)
-{
- FILE * hugedir_handle = NULL;
- DIR * hugepage_dir = NULL;
- struct dirent *dirent = NULL;
-
- char hugefile_prefix[PATH_MAX] = {0};
- char hugedir[PATH_MAX] = {0};
- char line[PATH_MAX] = {0};
-
- int fd, lck_result, result = 0;
-
- const int prefix_len = snprintf(hugefile_prefix,
- sizeof(hugefile_prefix), "%smap_", prefix);
- if (prefix_len <= 0 || prefix_len >= (int)sizeof(hugefile_prefix)
- || prefix_len >= (int)sizeof(dirent->d_name)) {
- printf("Error creating hugefile filename prefix\n");
- return -1;
- }
-
- /* get hugetlbfs mountpoints from /proc/mounts */
- hugedir_handle = fopen("/proc/mounts", "r");
-
- if (hugedir_handle == NULL) {
- printf("Error parsing /proc/mounts!\n");
- return -1;
- }
-
- /* read and parse script output */
- while (fgets(line, sizeof(line), hugedir_handle) != NULL) {
-
- /* check if we have a hugepage filesystem path */
- if (!get_hugepage_path(line, sizeof(line), hugedir, sizeof(hugedir)))
- continue;
-
- /* check if directory exists */
- if ((hugepage_dir = opendir(hugedir)) == NULL) {
- fclose(hugedir_handle);
- printf("Error reading %s: %s\n", hugedir, strerror(errno));
- return -1;
- }
-
- while ((dirent = readdir(hugepage_dir)) != NULL) {
- if (memcmp(dirent->d_name, hugefile_prefix, prefix_len) != 0)
- continue;
-
- switch (action) {
- case HUGEPAGE_CHECK_EXISTS:
- {
- /* file exists, return */
- result = 1;
- goto end;
- }
- break;
- case HUGEPAGE_DELETE:
- {
- char file_path[PATH_MAX] = {0};
-
- snprintf(file_path, sizeof(file_path),
- "%s/%s", hugedir, dirent->d_name);
-
- /* remove file */
- if (remove(file_path) < 0) {
- printf("Error deleting %s - %s!\n",
- dirent->d_name, strerror(errno));
- closedir(hugepage_dir);
- result = -1;
- goto end;
- }
- result = 1;
- }
- break;
- case HUGEPAGE_CHECK_LOCKED:
- {
- /* try and lock the file */
- fd = openat(dirfd(hugepage_dir), dirent->d_name, O_RDONLY);
-
- /* this shouldn't happen */
- if (fd == -1) {
- printf("Error opening %s - %s!\n",
- dirent->d_name, strerror(errno));
- closedir(hugepage_dir);
- result = -1;
- goto end;
- }
-
- /* non-blocking lock */
- lck_result = flock(fd, LOCK_EX | LOCK_NB);
-
- /* if lock succeeds, there's something wrong */
- if (lck_result != -1) {
- result = 0;
-
- /* unlock the resulting lock */
- flock(fd, LOCK_UN);
- close(fd);
- closedir(hugepage_dir);
- goto end;
- }
- result = 1;
- close(fd);
- }
- break;
- /* shouldn't happen */
- default:
- goto end;
- } /* switch */
-
- } /* read hugepage directory */
- closedir(hugepage_dir);
- } /* read /proc/mounts */
-end:
- fclose(hugedir_handle);
- return result;
-}
-
-#ifdef RTE_EXEC_ENV_LINUXAPP
-/*
- * count the number of "node*" files in /sys/devices/system/node/
- */
-static int
-get_number_of_sockets(void)
-{
- struct dirent *dirent = NULL;
- const char * nodedir = "/sys/devices/system/node/";
- DIR * dir = NULL;
- int result = 0;
-
- /* check if directory exists */
- if ((dir = opendir(nodedir)) == NULL) {
- /* if errno==ENOENT this means we don't have NUMA support */
- if (errno == ENOENT) {
- printf("No NUMA nodes detected: assuming 1 available socket\n");
- return 1;
- }
- printf("Error opening %s: %s\n", nodedir, strerror(errno));
- return -1;
- }
-
- while ((dirent = readdir(dir)) != NULL)
- if (strncmp(dirent->d_name, "node", sizeof("node") - 1) == 0)
- result++;
-
- closedir(dir);
- return result;
-}
-#endif
-
-static char*
-get_current_prefix(char * prefix, int size)
-{
- char path[PATH_MAX] = {0};
- char buf[PATH_MAX] = {0};
-
- /* get file for config (fd is always 3) */
- snprintf(path, sizeof(path), "/proc/self/fd/%d", 3);
-
- /* return NULL on error */
- if (readlink(path, buf, sizeof(buf)) == -1)
- return NULL;
-
- /* get the basename */
- snprintf(buf, sizeof(buf), "%s", basename(buf));
-
- /* copy string all the way from second char up to start of _config */
- snprintf(prefix, size, "%.*s",
- (int)(strnlen(buf, sizeof(buf)) - sizeof("_config")),
- &buf[1]);
-
- return prefix;
-}
-
-/*
- * Test that the app doesn't run with invalid whitelist option.
- * Final tests ensures it does run with valid options as sanity check (one
- * test for with Domain+BDF, second for just with BDF)
- */
-static int
-test_whitelist_flag(void)
-{
- unsigned i;
-#ifdef RTE_EXEC_ENV_BSDAPP
- /* BSD target doesn't support prefixes at this point */
- const char * prefix = "";
-#else
- char prefix[PATH_MAX], tmp[PATH_MAX];
- if (get_current_prefix(tmp, sizeof(tmp)) == NULL) {
- printf("Error - unable to get current prefix!\n");
- return -1;
- }
- snprintf(prefix, sizeof(prefix), "--file-prefix=%s", tmp);
-#endif
-
- const char *wlinval[][11] = {
- {prgname, prefix, mp_flag, "-n", "1", "-c", "1",
- pci_whitelist, "error", "", ""},
- {prgname, prefix, mp_flag, "-n", "1", "-c", "1",
- pci_whitelist, "0:0:0", "", ""},
- {prgname, prefix, mp_flag, "-n", "1", "-c", "1",
- pci_whitelist, "0:error:0.1", "", ""},
- {prgname, prefix, mp_flag, "-n", "1", "-c", "1",
- pci_whitelist, "0:0:0.1error", "", ""},
- {prgname, prefix, mp_flag, "-n", "1", "-c", "1",
- pci_whitelist, "error0:0:0.1", "", ""},
- {prgname, prefix, mp_flag, "-n", "1", "-c", "1",
- pci_whitelist, "0:0:0.1.2", "", ""},
- };
- /* Test with valid whitelist option */
- const char *wlval1[] = {prgname, prefix, mp_flag, "-n", "1", "-c", "1",
- pci_whitelist, "00FF:09:0B.3"};
- const char *wlval2[] = {prgname, prefix, mp_flag, "-n", "1", "-c", "1",
- pci_whitelist, "09:0B.3", pci_whitelist, "0a:0b.1"};
- const char *wlval3[] = {prgname, prefix, mp_flag, "-n", "1", "-c", "1",
- pci_whitelist, "09:0B.3,type=test",
- pci_whitelist, "08:00.1,type=normal",
- };
-
- for (i = 0; i < sizeof(wlinval) / sizeof(wlinval[0]); i++) {
- if (launch_proc(wlinval[i]) == 0) {
- printf("Error - process did run ok with invalid "
- "whitelist parameter\n");
- return -1;
- }
- }
- if (launch_proc(wlval1) != 0 ) {
- printf("Error - process did not run ok with valid whitelist\n");
- return -1;
- }
- if (launch_proc(wlval2) != 0 ) {
- printf("Error - process did not run ok with valid whitelist value set\n");
- return -1;
- }
- if (launch_proc(wlval3) != 0 ) {
- printf("Error - process did not run ok with valid whitelist + args\n");
- return -1;
- }
-
- return 0;
-}
-
-/*
- * Test that the app doesn't run with invalid blacklist option.
- * Final test ensures it does run with valid options as sanity check
- */
-static int
-test_invalid_b_flag(void)
-{
-#ifdef RTE_EXEC_ENV_BSDAPP
- /* BSD target doesn't support prefixes at this point */
- const char * prefix = "";
-#else
- char prefix[PATH_MAX], tmp[PATH_MAX];
- if (get_current_prefix(tmp, sizeof(tmp)) == NULL) {
- printf("Error - unable to get current prefix!\n");
- return -1;
- }
- snprintf(prefix, sizeof(prefix), "--file-prefix=%s", tmp);
-#endif
-
- const char *blinval[][9] = {
- {prgname, prefix, mp_flag, "-n", "1", "-c", "1", "-b", "error"},
- {prgname, prefix, mp_flag, "-n", "1", "-c", "1", "-b", "0:0:0"},
- {prgname, prefix, mp_flag, "-n", "1", "-c", "1", "-b", "0:error:0.1"},
- {prgname, prefix, mp_flag, "-n", "1", "-c", "1", "-b", "0:0:0.1error"},
- {prgname, prefix, mp_flag, "-n", "1", "-c", "1", "-b", "error0:0:0.1"},
- {prgname, prefix, mp_flag, "-n", "1", "-c", "1", "-b", "0:0:0.1.2"},
- };
- /* Test with valid blacklist option */
- const char *blval[] = {prgname, prefix, mp_flag, "-n", "1", "-c", "1", "-b", "FF:09:0B.3"};
-
- int i;
-
- for (i = 0; i != sizeof (blinval) / sizeof (blinval[0]); i++) {
- if (launch_proc(blinval[i]) == 0) {
- printf("Error - process did run ok with invalid "
- "blacklist parameter\n");
- return -1;
- }
- }
- if (launch_proc(blval) != 0) {
- printf("Error - process did not run ok with valid blacklist value\n");
- return -1;
- }
- return 0;
-}
-
-/*
- * Test that the app doesn't run with invalid vdev option.
- * Final test ensures it does run with valid options as sanity check
- */
-#ifdef RTE_LIBRTE_PMD_RING
-static int
-test_invalid_vdev_flag(void)
-{
-#ifdef RTE_EXEC_ENV_BSDAPP
- /* BSD target doesn't support prefixes at this point, and we also need to
- * run another primary process here */
- const char * prefix = no_shconf;
-#else
- const char * prefix = "--file-prefix=vdev";
-#endif
-
- /* Test with invalid vdev option */
- const char *vdevinval[] = {prgname, prefix, "-n", "1",
- "-c", "1", vdev, "eth_dummy"};
-
- /* Test with valid vdev option */
- const char *vdevval1[] = {prgname, prefix, "-n", "1",
- "-c", "1", vdev, "net_ring0"};
-
- const char *vdevval2[] = {prgname, prefix, "-n", "1",
- "-c", "1", vdev, "net_ring0,args=test"};
-
- const char *vdevval3[] = {prgname, prefix, "-n", "1",
- "-c", "1", vdev, "net_ring0,nodeaction=r1:0:CREATE"};
-
- if (launch_proc(vdevinval) == 0) {
- printf("Error - process did run ok with invalid "
- "vdev parameter\n");
- return -1;
- }
-
- if (launch_proc(vdevval1) != 0) {
- printf("Error - process did not run ok with valid vdev value\n");
- return -1;
- }
-
- if (launch_proc(vdevval2) != 0) {
- printf("Error - process did not run ok with valid vdev value,"
- "with dummy args\n");
- return -1;
- }
-
- if (launch_proc(vdevval3) != 0) {
- printf("Error - process did not run ok with valid vdev value,"
- "with valid args\n");
- return -1;
- }
- return 0;
-}
-#endif
-
-/*
- * Test that the app doesn't run with invalid -r option.
- */
-static int
-test_invalid_r_flag(void)
-{
-#ifdef RTE_EXEC_ENV_BSDAPP
- /* BSD target doesn't support prefixes at this point */
- const char * prefix = "";
-#else
- char prefix[PATH_MAX], tmp[PATH_MAX];
- if (get_current_prefix(tmp, sizeof(tmp)) == NULL) {
- printf("Error - unable to get current prefix!\n");
- return -1;
- }
- snprintf(prefix, sizeof(prefix), "--file-prefix=%s", tmp);
-#endif
-
- const char *rinval[][9] = {
- {prgname, prefix, mp_flag, "-n", "1", "-c", "1", "-r", "error"},
- {prgname, prefix, mp_flag, "-n", "1", "-c", "1", "-r", "0"},
- {prgname, prefix, mp_flag, "-n", "1", "-c", "1", "-r", "-1"},
- {prgname, prefix, mp_flag, "-n", "1", "-c", "1", "-r", "17"},
- };
- /* Test with valid blacklist option */
- const char *rval[] = {prgname, prefix, mp_flag, "-n", "1", "-c", "1", "-r", "16"};
-
- int i;
-
- for (i = 0; i != sizeof (rinval) / sizeof (rinval[0]); i++) {
- if (launch_proc(rinval[i]) == 0) {
- printf("Error - process did run ok with invalid "
- "-r (rank) parameter\n");
- return -1;
- }
- }
- if (launch_proc(rval) != 0) {
- printf("Error - process did not run ok with valid -r (rank) value\n");
- return -1;
- }
- return 0;
-}
-
-/*
- * Test that the app doesn't run without the coremask/corelist flags. In all cases
- * should give an error and fail to run
- */
-static int
-test_missing_c_flag(void)
-{
-#ifdef RTE_EXEC_ENV_BSDAPP
- /* BSD target doesn't support prefixes at this point */
- const char * prefix = "";
-#else
- char prefix[PATH_MAX], tmp[PATH_MAX];
- if (get_current_prefix(tmp, sizeof(tmp)) == NULL) {
- printf("Error - unable to get current prefix!\n");
- return -1;
- }
- snprintf(prefix, sizeof(prefix), "--file-prefix=%s", tmp);
-#endif
-
- /* -c flag but no coremask value */
- const char *argv1[] = { prgname, prefix, mp_flag, "-n", "3", "-c"};
- /* No -c, -l or --lcores flag at all */
- const char *argv2[] = { prgname, prefix, mp_flag, "-n", "3"};
- /* bad coremask value */
- const char *argv3[] = { prgname, prefix, mp_flag,
- "-n", "3", "-c", "error" };
- /* sanity check of tests - valid coremask value */
- const char *argv4[] = { prgname, prefix, mp_flag,
- "-n", "3", "-c", "1" };
- /* -l flag but no corelist value */
- const char *argv5[] = { prgname, prefix, mp_flag,
- "-n", "3", "-l"};
- const char *argv6[] = { prgname, prefix, mp_flag,
- "-n", "3", "-l", " " };
- /* bad corelist values */
- const char *argv7[] = { prgname, prefix, mp_flag,
- "-n", "3", "-l", "error" };
- const char *argv8[] = { prgname, prefix, mp_flag,
- "-n", "3", "-l", "1-" };
- const char *argv9[] = { prgname, prefix, mp_flag,
- "-n", "3", "-l", "1," };
- const char *argv10[] = { prgname, prefix, mp_flag,
- "-n", "3", "-l", "1#2" };
- /* sanity check test - valid corelist value */
- const char *argv11[] = { prgname, prefix, mp_flag,
- "-n", "3", "-l", "1-2,3" };
-
- /* --lcores flag but no lcores value */
- const char *argv12[] = { prgname, prefix, mp_flag,
- "-n", "3", "--lcores" };
- const char *argv13[] = { prgname, prefix, mp_flag,
- "-n", "3", "--lcores", " " };
- /* bad lcores value */
- const char *argv14[] = { prgname, prefix, mp_flag,
- "-n", "3", "--lcores", "1-3-5" };
- const char *argv15[] = { prgname, prefix, mp_flag,
- "-n", "3", "--lcores", "0-1,,2" };
- const char *argv16[] = { prgname, prefix, mp_flag,
- "-n", "3", "--lcores", "0-,1" };
- const char *argv17[] = { prgname, prefix, mp_flag,
- "-n", "3", "--lcores", "(0-,2-4)" };
- const char *argv18[] = { prgname, prefix, mp_flag,
- "-n", "3", "--lcores", "(-1,2)" };
- const char *argv19[] = { prgname, prefix, mp_flag,
- "-n", "3", "--lcores", "(2-4)@(2-4-6)" };
- const char *argv20[] = { prgname, prefix, mp_flag,
- "-n", "3", "--lcores", "(a,2)" };
- const char *argv21[] = { prgname, prefix, mp_flag,
- "-n", "3", "--lcores", "1-3@(1,3)" };
- const char *argv22[] = { prgname, prefix, mp_flag,
- "-n", "3", "--lcores", "3@((1,3)" };
- const char *argv23[] = { prgname, prefix, mp_flag,
- "-n", "3", "--lcores", "(4-7)=(1,3)" };
- const char *argv24[] = { prgname, prefix, mp_flag,
- "-n", "3", "--lcores", "[4-7]@(1,3)" };
- /* sanity check of tests - valid lcores value */
- const char *argv25[] = { prgname, prefix, mp_flag,
- "-n", "3", "--lcores",
- "0-1,2@(5-7),(3-5)@(0,2),(0,6),7"};
-
- if (launch_proc(argv2) != 0) {
- printf("Error - "
- "process did not run ok when missing -c flag\n");
- return -1;
- }
-
- if (launch_proc(argv1) == 0
- || launch_proc(argv3) == 0) {
- printf("Error - "
- "process ran without error with invalid -c flag\n");
- return -1;
- }
- if (launch_proc(argv4) != 0) {
- printf("Error - "
- "process did not run ok with valid coremask value\n");
- return -1;
- }
-
- /* start -l test */
- if (launch_proc(argv5) == 0
- || launch_proc(argv6) == 0
- || launch_proc(argv7) == 0
- || launch_proc(argv8) == 0
- || launch_proc(argv9) == 0
- || launch_proc(argv10) == 0) {
- printf("Error - "
- "process ran without error with invalid -l flag\n");
- return -1;
- }
- if (launch_proc(argv11) != 0) {
- printf("Error - "
- "process did not run ok with valid corelist value\n");
- return -1;
- }
-
- /* start --lcores tests */
- if (launch_proc(argv12) == 0 || launch_proc(argv13) == 0 ||
- launch_proc(argv14) == 0 || launch_proc(argv15) == 0 ||
- launch_proc(argv16) == 0 || launch_proc(argv17) == 0 ||
- launch_proc(argv18) == 0 || launch_proc(argv19) == 0 ||
- launch_proc(argv20) == 0 || launch_proc(argv21) == 0 ||
- launch_proc(argv21) == 0 || launch_proc(argv22) == 0 ||
- launch_proc(argv23) == 0 || launch_proc(argv24) == 0) {
- printf("Error - "
- "process ran without error with invalid --lcore flag\n");
- return -1;
- }
-
- if (launch_proc(argv25) != 0) {
- printf("Error - "
- "process did not run ok with valid corelist value\n");
- return -1;
- }
-
- return 0;
-}
-
-/*
- * Test --master-lcore option with matching coremask
- */
-static int
-test_master_lcore_flag(void)
-{
-#ifdef RTE_EXEC_ENV_BSDAPP
- /* BSD target doesn't support prefixes at this point */
- const char *prefix = "";
-#else
- char prefix[PATH_MAX], tmp[PATH_MAX];
- if (get_current_prefix(tmp, sizeof(tmp)) == NULL) {
- printf("Error - unable to get current prefix!\n");
- return -1;
- }
- snprintf(prefix, sizeof(prefix), "--file-prefix=%s", tmp);
-#endif
-
- /* --master-lcore flag but no value */
- const char *argv1[] = { prgname, prefix, mp_flag, "-n", "1", "-c", "3", "--master-lcore"};
- /* --master-lcore flag with invalid value */
- const char *argv2[] = { prgname, prefix, mp_flag, "-n", "1", "-c", "3", "--master-lcore", "-1"};
- const char *argv3[] = { prgname, prefix, mp_flag, "-n", "1", "-c", "3", "--master-lcore", "X"};
- /* master lcore not in coremask */
- const char *argv4[] = { prgname, prefix, mp_flag, "-n", "1", "-c", "3", "--master-lcore", "2"};
- /* valid value */
- const char *argv5[] = { prgname, prefix, mp_flag, "-n", "1", "-c", "3", "--master-lcore", "1"};
- /* valid value set before coremask */
- const char *argv6[] = { prgname, prefix, mp_flag, "-n", "1", "--master-lcore", "1", "-c", "3"};
-
- if (launch_proc(argv1) == 0
- || launch_proc(argv2) == 0
- || launch_proc(argv3) == 0
- || launch_proc(argv4) == 0) {
- printf("Error - process ran without error with wrong --master-lcore\n");
- return -1;
- }
- if (launch_proc(argv5) != 0
- || launch_proc(argv6) != 0) {
- printf("Error - process did not run ok with valid --master-lcore\n");
- return -1;
- }
- return 0;
-}
-
-/*
- * Test that the app doesn't run with invalid -n flag option.
- * Final test ensures it does run with valid options as sanity check
- * Since -n is not compulsory for MP, we instead use --no-huge and --no-shconf
- * flags.
- */
-static int
-test_invalid_n_flag(void)
-{
-#ifdef RTE_EXEC_ENV_BSDAPP
- /* BSD target doesn't support prefixes at this point */
- const char * prefix = "";
-#else
- char prefix[PATH_MAX], tmp[PATH_MAX];
- if (get_current_prefix(tmp, sizeof(tmp)) == NULL) {
- printf("Error - unable to get current prefix!\n");
- return -1;
- }
- snprintf(prefix, sizeof(prefix), "--file-prefix=%s", tmp);
-#endif
-
- /* -n flag but no value */
- const char *argv1[] = { prgname, prefix, no_huge, no_shconf, "-c", "1", "-n"};
- /* bad numeric value */
- const char *argv2[] = { prgname, prefix, no_huge, no_shconf, "-c", "1", "-n", "e" };
- /* zero is invalid */
- const char *argv3[] = { prgname, prefix, no_huge, no_shconf, "-c", "1", "-n", "0" };
- /* sanity test - check with good value */
- const char *argv4[] = { prgname, prefix, no_huge, no_shconf, "-c", "1", "-n", "2" };
- /* sanity test - check with no -n flag */
- const char *argv5[] = { prgname, prefix, no_huge, no_shconf, "-c", "1"};
-
- if (launch_proc(argv1) == 0
- || launch_proc(argv2) == 0
- || launch_proc(argv3) == 0) {
- printf("Error - process ran without error when"
- "invalid -n flag\n");
- return -1;
- }
- if (launch_proc(argv4) != 0) {
- printf("Error - process did not run ok with valid num-channel value\n");
- return -1;
- }
- if (launch_proc(argv5) != 0) {
- printf("Error - process did not run ok without -n flag\n");
- return -1;
- }
-
- return 0;
-}
-
-/*
- * Test that the app runs with HPET, and without HPET
- */
-static int
-test_no_hpet_flag(void)
-{
- char prefix[PATH_MAX], tmp[PATH_MAX];
-
-#ifdef RTE_EXEC_ENV_BSDAPP
- return 0;
-#endif
- if (get_current_prefix(tmp, sizeof(tmp)) == NULL) {
- printf("Error - unable to get current prefix!\n");
- return -1;
- }
- snprintf(prefix, sizeof(prefix), "--file-prefix=%s", tmp);
-
- /* With --no-hpet */
- const char *argv1[] = {prgname, prefix, mp_flag, no_hpet, "-c", "1", "-n", "2"};
- /* Without --no-hpet */
- const char *argv2[] = {prgname, prefix, mp_flag, "-c", "1", "-n", "2"};
-
- if (launch_proc(argv1) != 0) {
- printf("Error - process did not run ok with --no-hpet flag\n");
- return -1;
- }
- if (launch_proc(argv2) != 0) {
- printf("Error - process did not run ok without --no-hpet flag\n");
- return -1;
- }
- return 0;
-}
-
-/*
- * Test that the app runs with --no-huge and doesn't run when --socket-mem are
- * specified with --no-huge.
- */
-static int
-test_no_huge_flag(void)
-{
-#ifdef RTE_EXEC_ENV_BSDAPP
- /* BSD target doesn't support prefixes at this point, and we also need to
- * run another primary process here */
- const char * prefix = no_shconf;
-#else
- const char * prefix = "--file-prefix=nohuge";
-#endif
-
- /* With --no-huge */
- const char *argv1[] = {prgname, prefix, no_huge, "-c", "1", "-n", "2"};
- /* With --no-huge and -m */
- const char *argv2[] = {prgname, prefix, no_huge, "-c", "1", "-n", "2",
- "-m", DEFAULT_MEM_SIZE};
-
- /* With --no-huge and --socket-mem */
- const char *argv3[] = {prgname, prefix, no_huge, "-c", "1", "-n", "2",
- "--socket-mem=" DEFAULT_MEM_SIZE};
- /* With --no-huge, -m and --socket-mem */
- const char *argv4[] = {prgname, prefix, no_huge, "-c", "1", "-n", "2",
- "-m", DEFAULT_MEM_SIZE, "--socket-mem=" DEFAULT_MEM_SIZE};
- if (launch_proc(argv1) != 0) {
- printf("Error - process did not run ok with --no-huge flag\n");
- return -1;
- }
- if (launch_proc(argv2) != 0) {
- printf("Error - process did not run ok with --no-huge and -m flags\n");
- return -1;
- }
-#ifdef RTE_EXEC_ENV_BSDAPP
- /* BSD target does not support NUMA, hence no --socket-mem tests */
- return 0;
-#endif
-
- if (launch_proc(argv3) == 0) {
- printf("Error - process run ok with --no-huge and --socket-mem "
- "flags\n");
- return -1;
- }
- if (launch_proc(argv4) == 0) {
- printf("Error - process run ok with --no-huge, -m and "
- "--socket-mem flags\n");
- return -1;
- }
- return 0;
-}
-
-#ifdef RTE_LIBRTE_XEN_DOM0
-static int
-test_dom0_misc_flags(void)
-{
- char prefix[PATH_MAX], tmp[PATH_MAX];
-
- if (get_current_prefix(tmp, sizeof(tmp)) == NULL) {
- printf("Error - unable to get current prefix!\n");
- return -1;
- }
- snprintf(prefix, sizeof(prefix), "--file-prefix=%s", tmp);
-
- /* check that some general flags don't prevent things from working.
- * All cases, apart from the first, app should run.
- * No futher testing of output done.
- */
- /* sanity check - failure with invalid option */
- const char *argv0[] = {prgname, prefix, mp_flag, "-c", "1", "--invalid-opt"};
-
- /* With --no-pci */
- const char *argv1[] = {prgname, prefix, mp_flag, "-c", "1", "--no-pci"};
- /* With -v */
- const char *argv2[] = {prgname, prefix, mp_flag, "-c", "1", "-v"};
- /* With valid --syslog */
- const char *argv3[] = {prgname, prefix, mp_flag, "-c", "1",
- "--syslog", "syslog"};
- /* With empty --syslog (should fail) */
- const char *argv4[] = {prgname, prefix, mp_flag, "-c", "1", "--syslog"};
- /* With invalid --syslog */
- const char *argv5[] = {prgname, prefix, mp_flag, "-c", "1", "--syslog", "error"};
- /* With no-sh-conf */
- const char *argv6[] = {prgname, "-c", "1", "-n", "2", "-m", "20",
- "--no-shconf", "--file-prefix=noshconf" };
-
- if (launch_proc(argv0) == 0) {
- printf("Error - process ran ok with invalid flag\n");
- return -1;
- }
- if (launch_proc(argv1) != 0) {
- printf("Error - process did not run ok with --no-pci flag\n");
- return -1;
- }
- if (launch_proc(argv2) != 0) {
- printf("Error - process did not run ok with -v flag\n");
- return -1;
- }
- if (launch_proc(argv3) != 0) {
- printf("Error - process did not run ok with --syslog flag\n");
- return -1;
- }
- if (launch_proc(argv4) == 0) {
- printf("Error - process run ok with empty --syslog flag\n");
- return -1;
- }
- if (launch_proc(argv5) == 0) {
- printf("Error - process run ok with invalid --syslog flag\n");
- return -1;
- }
- if (launch_proc(argv6) != 0) {
- printf("Error - process did not run ok with --no-shconf flag\n");
- return -1;
- }
-
- return 0;
-}
-#else
-static int
-test_misc_flags(void)
-{
- char hugepath[PATH_MAX] = {0};
-#ifdef RTE_EXEC_ENV_BSDAPP
- /* BSD target doesn't support prefixes at this point */
- const char * prefix = "";
- const char * nosh_prefix = "";
-#else
- char prefix[PATH_MAX], tmp[PATH_MAX];
- const char * nosh_prefix = "--file-prefix=noshconf";
- FILE * hugedir_handle = NULL;
- char line[PATH_MAX] = {0};
- unsigned i, isempty = 1;
- if (get_current_prefix(tmp, sizeof(tmp)) == NULL) {
- printf("Error - unable to get current prefix!\n");
- return -1;
- }
- snprintf(prefix, sizeof(prefix), "--file-prefix=%s", tmp);
-
- /*
- * get first valid hugepage path
- */
-
- /* get hugetlbfs mountpoints from /proc/mounts */
- hugedir_handle = fopen("/proc/mounts", "r");
-
- if (hugedir_handle == NULL) {
- printf("Error opening /proc/mounts!\n");
- return -1;
- }
-
- /* read /proc/mounts */
- while (fgets(line, sizeof(line), hugedir_handle) != NULL) {
-
- /* find first valid hugepath */
- if (get_hugepage_path(line, sizeof(line), hugepath, sizeof(hugepath)))
- break;
- }
-
- fclose(hugedir_handle);
-
- /* check if path is not empty */
- for (i = 0; i < sizeof(hugepath); i++)
- if (hugepath[i] != '\0')
- isempty = 0;
-
- if (isempty) {
- printf("No mounted hugepage dir found!\n");
- return -1;
- }
-#endif
-
-
- /* check that some general flags don't prevent things from working.
- * All cases, apart from the first, app should run.
- * No futher testing of output done.
- */
- /* sanity check - failure with invalid option */
- const char *argv0[] = {prgname, prefix, mp_flag, "-c", "1", "--invalid-opt"};
-
- /* With --no-pci */
- const char *argv1[] = {prgname, prefix, mp_flag, "-c", "1", "--no-pci"};
- /* With -v */
- const char *argv2[] = {prgname, prefix, mp_flag, "-c", "1", "-v"};
- /* With valid --syslog */
- const char *argv3[] = {prgname, prefix, mp_flag, "-c", "1",
- "--syslog", "syslog"};
- /* With empty --syslog (should fail) */
- const char *argv4[] = {prgname, prefix, mp_flag, "-c", "1", "--syslog"};
- /* With invalid --syslog */
- const char *argv5[] = {prgname, prefix, mp_flag, "-c", "1", "--syslog", "error"};
- /* With no-sh-conf */
- const char *argv6[] = {prgname, "-c", "1", "-n", "2", "-m", DEFAULT_MEM_SIZE,
- no_shconf, nosh_prefix };
-
-#ifdef RTE_EXEC_ENV_BSDAPP
- return 0;
-#endif
- /* With --huge-dir */
- const char *argv7[] = {prgname, "-c", "1", "-n", "2", "-m", DEFAULT_MEM_SIZE,
- "--file-prefix=hugedir", "--huge-dir", hugepath};
- /* With empty --huge-dir (should fail) */
- const char *argv8[] = {prgname, "-c", "1", "-n", "2", "-m", DEFAULT_MEM_SIZE,
- "--file-prefix=hugedir", "--huge-dir"};
- /* With invalid --huge-dir */
- const char *argv9[] = {prgname, "-c", "1", "-n", "2", "-m", DEFAULT_MEM_SIZE,
- "--file-prefix=hugedir", "--huge-dir", "invalid"};
- /* Secondary process with invalid --huge-dir (should run as flag has no
- * effect on secondary processes) */
- const char *argv10[] = {prgname, prefix, mp_flag, "-c", "1", "--huge-dir", "invalid"};
-
- /* try running with base-virtaddr param */
- const char *argv11[] = {prgname, "--file-prefix=virtaddr",
- "-c", "1", "-n", "2", "--base-virtaddr=0x12345678"};
-
- /* try running with --vfio-intr INTx flag */
- const char *argv12[] = {prgname, "--file-prefix=intr",
- "-c", "1", "-n", "2", "--vfio-intr=legacy"};
-
- /* try running with --vfio-intr MSI flag */
- const char *argv13[] = {prgname, "--file-prefix=intr",
- "-c", "1", "-n", "2", "--vfio-intr=msi"};
-
- /* try running with --vfio-intr MSI-X flag */
- const char *argv14[] = {prgname, "--file-prefix=intr",
- "-c", "1", "-n", "2", "--vfio-intr=msix"};
-
- /* try running with --vfio-intr invalid flag */
- const char *argv15[] = {prgname, "--file-prefix=intr",
- "-c", "1", "-n", "2", "--vfio-intr=invalid"};
-
-
- if (launch_proc(argv0) == 0) {
- printf("Error - process ran ok with invalid flag\n");
- return -1;
- }
- if (launch_proc(argv1) != 0) {
- printf("Error - process did not run ok with --no-pci flag\n");
- return -1;
- }
- if (launch_proc(argv2) != 0) {
- printf("Error - process did not run ok with -v flag\n");
- return -1;
- }
- if (launch_proc(argv3) != 0) {
- printf("Error - process did not run ok with --syslog flag\n");
- return -1;
- }
- if (launch_proc(argv4) == 0) {
- printf("Error - process run ok with empty --syslog flag\n");
- return -1;
- }
- if (launch_proc(argv5) == 0) {
- printf("Error - process run ok with invalid --syslog flag\n");
- return -1;
- }
- if (launch_proc(argv6) != 0) {
- printf("Error - process did not run ok with --no-shconf flag\n");
- return -1;
- }
-#ifdef RTE_EXEC_ENV_BSDAPP
- return 0;
-#endif
- if (launch_proc(argv7) != 0) {
- printf("Error - process did not run ok with --huge-dir flag\n");
- return -1;
- }
- if (launch_proc(argv8) == 0) {
- printf("Error - process run ok with empty --huge-dir flag\n");
- return -1;
- }
- if (launch_proc(argv9) == 0) {
- printf("Error - process run ok with invalid --huge-dir flag\n");
- return -1;
- }
- if (launch_proc(argv10) != 0) {
- printf("Error - secondary process did not run ok with invalid --huge-dir flag\n");
- return -1;
- }
- if (launch_proc(argv11) != 0) {
- printf("Error - process did not run ok with --base-virtaddr parameter\n");
- return -1;
- }
- if (launch_proc(argv12) != 0) {
- printf("Error - process did not run ok with "
- "--vfio-intr INTx parameter\n");
- return -1;
- }
- if (launch_proc(argv13) != 0) {
- printf("Error - process did not run ok with "
- "--vfio-intr MSI parameter\n");
- return -1;
- }
- if (launch_proc(argv14) != 0) {
- printf("Error - process did not run ok with "
- "--vfio-intr MSI-X parameter\n");
- return -1;
- }
- if (launch_proc(argv15) == 0) {
- printf("Error - process run ok with "
- "--vfio-intr invalid parameter\n");
- return -1;
- }
- return 0;
-}
-#endif
-
-static int
-test_file_prefix(void)
-{
- /*
- * 1. check if current process hugefiles are locked
- * 2. try to run secondary process without a corresponding primary process
- * (while failing to run, it will also remove any unused hugepage files)
- * 3. check if current process hugefiles are still in place and are locked
- * 4. run a primary process with memtest1 prefix
- * 5. check if memtest1 hugefiles are created
- * 6. run a primary process with memtest2 prefix
- * 7. check that only memtest2 hugefiles are present in the hugedir
- */
-
-#ifdef RTE_EXEC_ENV_BSDAPP
- return 0;
-#endif
-
- /* this should fail unless the test itself is run with "memtest" prefix */
- const char *argv0[] = {prgname, mp_flag, "-c", "1", "-n", "2", "-m", DEFAULT_MEM_SIZE,
- "--file-prefix=" memtest };
-
- /* primary process with memtest1 */
- const char *argv1[] = {prgname, "-c", "1", "-n", "2", "-m", DEFAULT_MEM_SIZE,
- "--file-prefix=" memtest1 };
-
- /* primary process with memtest2 */
- const char *argv2[] = {prgname, "-c", "1", "-n", "2", "-m", DEFAULT_MEM_SIZE,
- "--file-prefix=" memtest2 };
-
- char prefix[32];
- if (get_current_prefix(prefix, sizeof(prefix)) == NULL) {
- printf("Error - unable to get current prefix!\n");
- return -1;
- }
-#ifdef RTE_LIBRTE_XEN_DOM0
- return 0;
-#endif
-
- /* check if files for current prefix are present */
- if (process_hugefiles(prefix, HUGEPAGE_CHECK_EXISTS) != 1) {
- printf("Error - hugepage files for %s were not created!\n", prefix);
- return -1;
- }
-
- /* checks if files for current prefix are locked */
- if (process_hugefiles(prefix, HUGEPAGE_CHECK_LOCKED) != 1) {
- printf("Error - hugepages for current process aren't locked!\n");
- return -1;
- }
-
- /* check if files for secondary process are present */
- if (process_hugefiles(memtest, HUGEPAGE_CHECK_EXISTS) == 1) {
- /* check if they are not locked */
- if (process_hugefiles(memtest, HUGEPAGE_CHECK_LOCKED) == 1) {
- printf("Error - hugepages for current process are locked!\n");
- return -1;
- }
- /* they aren't locked, delete them */
- else {
- if (process_hugefiles(memtest, HUGEPAGE_DELETE) != 1) {
- printf("Error - deleting hugepages failed!\n");
- return -1;
- }
- }
- }
-
- if (launch_proc(argv0) == 0) {
- printf("Error - secondary process ran ok without primary process\n");
- return -1;
- }
-
- /* check if files for current prefix are present */
- if (process_hugefiles(prefix, HUGEPAGE_CHECK_EXISTS) != 1) {
- printf("Error - hugepage files for %s were not created!\n", prefix);
- return -1;
- }
-
- /* checks if files for current prefix are locked */
- if (process_hugefiles(prefix, HUGEPAGE_CHECK_LOCKED) != 1) {
- printf("Error - hugepages for current process aren't locked!\n");
- return -1;
- }
-
- if (launch_proc(argv1) != 0) {
- printf("Error - failed to run with --file-prefix=%s\n", memtest);
- return -1;
- }
-
- /* check if memtest1_map0 is present */
- if (process_hugefiles(memtest1, HUGEPAGE_CHECK_EXISTS) != 1) {
- printf("Error - hugepage files for %s were not created!\n", memtest1);
- return -1;
- }
-
- if (launch_proc(argv2) != 0) {
- printf("Error - failed to run with --file-prefix=%s\n", memtest2);
- return -1;
- }
-
- /* check if hugefiles for memtest2 are present */
- if (process_hugefiles(memtest2, HUGEPAGE_CHECK_EXISTS) != 1) {
- printf("Error - hugepage files for %s were not created!\n", memtest2);
- return -1;
- }
-
- /* check if hugefiles for memtest1 are present */
- if (process_hugefiles(memtest1, HUGEPAGE_CHECK_EXISTS) != 0) {
- printf("Error - hugepage files for %s were not deleted!\n", memtest1);
- return -1;
- }
-
- return 0;
-}
-
-/*
- * Tests for correct handling of -m and --socket-mem flags
- */
-static int
-test_memory_flags(void)
-{
-#ifdef RTE_EXEC_ENV_BSDAPP
- /* BSD target doesn't support prefixes at this point */
- const char * prefix = "";
-#else
- char prefix[PATH_MAX], tmp[PATH_MAX];
- if (get_current_prefix(tmp, sizeof(tmp)) == NULL) {
- printf("Error - unable to get current prefix!\n");
- return -1;
- }
- snprintf(prefix, sizeof(prefix), "--file-prefix=%s", tmp);
-#endif
-
- /* valid -m flag and mp flag */
- const char *argv0[] = {prgname, prefix, mp_flag, "-c", "10",
- "-n", "2", "-m", DEFAULT_MEM_SIZE};
-
- /* valid -m flag */
- const char *argv1[] = {prgname, "-c", "10", "-n", "2",
- "--file-prefix=" memtest, "-m", DEFAULT_MEM_SIZE};
-
- /* invalid (zero) --socket-mem flag */
- const char *argv2[] = {prgname, "-c", "10", "-n", "2",
- "--file-prefix=" memtest, "--socket-mem=0,0,0,0"};
-
- /* invalid (incomplete) --socket-mem flag */
- const char *argv3[] = {prgname, "-c", "10", "-n", "2",
- "--file-prefix=" memtest, "--socket-mem=2,2,"};
-
- /* invalid (mixed with invalid data) --socket-mem flag */
- const char *argv4[] = {prgname, "-c", "10", "-n", "2",
- "--file-prefix=" memtest, "--socket-mem=2,2,Fred"};
-
- /* invalid (with numeric value as last character) --socket-mem flag */
- const char *argv5[] = {prgname, "-c", "10", "-n", "2",
- "--file-prefix=" memtest, "--socket-mem=2,2,Fred0"};
-
- /* invalid (with empty socket) --socket-mem flag */
- const char *argv6[] = {prgname, "-c", "10", "-n", "2",
- "--file-prefix=" memtest, "--socket-mem=2,,2"};
-
- /* invalid (null) --socket-mem flag */
- const char *argv7[] = {prgname, "-c", "10", "-n", "2",
- "--file-prefix=" memtest, "--socket-mem="};
-
- /* valid --socket-mem specified together with -m flag */
- const char *argv8[] = {prgname, "-c", "10", "-n", "2",
- "--file-prefix=" memtest, "-m", DEFAULT_MEM_SIZE, "--socket-mem=2,2"};
-
- /* construct an invalid socket mask with 2 megs on each socket plus
- * extra 2 megs on socket that doesn't exist on current system */
- char invalid_socket_mem[SOCKET_MEM_STRLEN];
- char buf[SOCKET_MEM_STRLEN]; /* to avoid copying string onto itself */
-
-#ifdef RTE_EXEC_ENV_BSDAPP
- int i, num_sockets = 1;
-#else
- int i, num_sockets = get_number_of_sockets();
-#endif
-
- if (num_sockets <= 0 || num_sockets > RTE_MAX_NUMA_NODES) {
- printf("Error - cannot get number of sockets!\n");
- return -1;
- }
-
- snprintf(invalid_socket_mem, sizeof(invalid_socket_mem), "--socket-mem=");
-
- /* add one extra socket */
- for (i = 0; i < num_sockets + 1; i++) {
- snprintf(buf, sizeof(buf), "%s%s", invalid_socket_mem, DEFAULT_MEM_SIZE);
- snprintf(invalid_socket_mem, sizeof(invalid_socket_mem), "%s", buf);
-
- if (num_sockets + 1 - i > 1) {
- snprintf(buf, sizeof(buf), "%s,", invalid_socket_mem);
- snprintf(invalid_socket_mem, sizeof(invalid_socket_mem), "%s", buf);
- }
- }
-
- /* construct a valid socket mask with 2 megs on each existing socket */
- char valid_socket_mem[SOCKET_MEM_STRLEN];
-
- snprintf(valid_socket_mem, sizeof(valid_socket_mem), "--socket-mem=");
-
- /* add one extra socket */
- for (i = 0; i < num_sockets; i++) {
- snprintf(buf, sizeof(buf), "%s%s", valid_socket_mem, DEFAULT_MEM_SIZE);
- snprintf(valid_socket_mem, sizeof(valid_socket_mem), "%s", buf);
-
- if (num_sockets - i > 1) {
- snprintf(buf, sizeof(buf), "%s,", valid_socket_mem);
- snprintf(valid_socket_mem, sizeof(valid_socket_mem), "%s", buf);
- }
- }
-
- /* invalid --socket-mem flag (with extra socket) */
- const char *argv9[] = {prgname, "-c", "10", "-n", "2",
- "--file-prefix=" memtest, invalid_socket_mem};
-
- /* valid --socket-mem flag */
- const char *argv10[] = {prgname, "-c", "10", "-n", "2",
- "--file-prefix=" memtest, valid_socket_mem};
-
- if (launch_proc(argv0) != 0) {
- printf("Error - secondary process failed with valid -m flag !\n");
- return -1;
- }
-
-#ifdef RTE_EXEC_ENV_BSDAPP
- /* no other tests are applicable to BSD */
- return 0;
-#endif
-
- if (launch_proc(argv1) != 0) {
- printf("Error - process failed with valid -m flag!\n");
- return -1;
- }
-#ifdef RTE_LIBRTE_XEN_DOM0
- return 0;
-#endif
- if (launch_proc(argv2) == 0) {
- printf("Error - process run ok with invalid (zero) --socket-mem!\n");
- return -1;
- }
-
- if (launch_proc(argv3) == 0) {
- printf("Error - process run ok with invalid "
- "(incomplete) --socket-mem!\n");
- return -1;
- }
-
- if (launch_proc(argv4) == 0) {
- printf("Error - process run ok with invalid "
- "(mixed with invalid input) --socket-mem!\n");
- return -1;
- }
-
- if (launch_proc(argv5) == 0) {
- printf("Error - process run ok with invalid "
- "(mixed with invalid input with a numeric value as "
- "last character) --socket-mem!\n");
- return -1;
- }
-
- if (launch_proc(argv6) == 0) {
- printf("Error - process run ok with invalid "
- "(with empty socket) --socket-mem!\n");
- return -1;
- }
-
- if (launch_proc(argv7) == 0) {
- printf("Error - process run ok with invalid (null) --socket-mem!\n");
- return -1;
- }
-
- if (launch_proc(argv8) == 0) {
- printf("Error - process run ok with --socket-mem and -m specified!\n");
- return -1;
- }
-
- if (launch_proc(argv9) == 0) {
- printf("Error - process run ok with extra socket in --socket-mem!\n");
- return -1;
- }
-
- if (launch_proc(argv10) != 0) {
- printf("Error - process failed with valid --socket-mem!\n");
- return -1;
- }
-
- return 0;
-}
-
-static int
-test_eal_flags(void)
-{
- int ret = 0;
-
- ret = test_missing_c_flag();
- if (ret < 0) {
- printf("Error in test_missing_c_flag()\n");
- return ret;
- }
-
- ret = test_master_lcore_flag();
- if (ret < 0) {
- printf("Error in test_master_lcore_flag()\n");
- return ret;
- }
-
- ret = test_invalid_n_flag();
- if (ret < 0) {
- printf("Error in test_invalid_n_flag()\n");
- return ret;
- }
-
- ret = test_no_hpet_flag();
- if (ret < 0) {
- printf("Error in test_no_hpet_flag()\n");
- return ret;
- }
-
- ret = test_no_huge_flag();
- if (ret < 0) {
- printf("Error in test_no_huge_flag()\n");
- return ret;
- }
-
- ret = test_whitelist_flag();
- if (ret < 0) {
- printf("Error in test_invalid_whitelist_flag()\n");
- return ret;
- }
-
- ret = test_invalid_b_flag();
- if (ret < 0) {
- printf("Error in test_invalid_b_flag()\n");
- return ret;
- }
-
-#ifdef RTE_LIBRTE_PMD_RING
- ret = test_invalid_vdev_flag();
- if (ret < 0) {
- printf("Error in test_invalid_vdev_flag()\n");
- return ret;
- }
-#endif
- ret = test_invalid_r_flag();
- if (ret < 0) {
- printf("Error in test_invalid_r_flag()\n");
- return ret;
- }
-
- ret = test_memory_flags();
- if (ret < 0) {
- printf("Error in test_memory_flags()\n");
- return ret;
- }
-
- ret = test_file_prefix();
- if (ret < 0) {
- printf("Error in test_file_prefix()\n");
- return ret;
- }
-
-#ifdef RTE_LIBRTE_XEN_DOM0
- ret = test_dom0_misc_flags();
-#else
- ret = test_misc_flags();
-#endif
- if (ret < 0) {
- printf("Error in test_misc_flags()");
- return ret;
- }
-
- return ret;
-}
-
-REGISTER_TEST_COMMAND(eal_flags_autotest, test_eal_flags);
diff --git a/app/test/test_eal_fs.c b/app/test/test_eal_fs.c
deleted file mode 100644
index 78978120..00000000
--- a/app/test/test_eal_fs.c
+++ /dev/null
@@ -1,206 +0,0 @@
-/*-
- * BSD LICENSE
- *
- * Copyright(c) 2010-2014 Intel Corporation. All rights reserved.
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * * Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * * Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in
- * the documentation and/or other materials provided with the
- * distribution.
- * * Neither the name of Intel Corporation nor the names of its
- * contributors may be used to endorse or promote products derived
- * from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
- * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
- * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#include "test.h"
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <errno.h>
-
-/* eal_filesystem.h is not a public header file, so use relative path */
-#include "../../lib/librte_eal/common/eal_filesystem.h"
-
-static int
-test_parse_sysfs_value(void)
-{
- char filename[PATH_MAX] = "";
- char proc_path[PATH_MAX];
- char file_template[] = "/tmp/eal_test_XXXXXX";
- int tmp_file_handle = -1;
- FILE *fd = NULL;
- unsigned valid_number;
- unsigned long retval = 0;
-
-#ifdef RTE_EXEC_ENV_BSDAPP
- /* BSD doesn't have /proc/pid/fd */
- return 0;
-#endif
-
- printf("Testing function eal_parse_sysfs_value()\n");
-
- /* get a temporary filename to use for all tests - create temp file handle and then
- * use /proc to get the actual file that we can open */
- tmp_file_handle = mkstemp(file_template);
- if (tmp_file_handle == -1) {
- perror("mkstemp() failure");
- goto error;
- }
- snprintf(proc_path, sizeof(proc_path), "/proc/self/fd/%d", tmp_file_handle);
- if (readlink(proc_path, filename, sizeof(filename)) < 0) {
- perror("readlink() failure");
- goto error;
- }
- printf("Temporary file is: %s\n", filename);
-
- /* test we get an error value if we use file before it's created */
- printf("Test reading a missing file ...\n");
- if (eal_parse_sysfs_value("/dev/not-quite-null", &retval) == 0) {
- printf("Error with eal_parse_sysfs_value() - returned success on reading empty file\n");
- goto error;
- }
- printf("Confirmed return error when reading empty file\n");
-
- /* test reading a valid number value with "\n" on the end */
- printf("Test reading valid values ...\n");
- valid_number = 15;
- fd = fopen(filename,"w");
- if (fd == NULL) {
- printf("line %d, Error opening %s: %s\n", __LINE__, filename, strerror(errno));
- goto error;
- }
- fprintf(fd,"%u\n", valid_number);
- fclose(fd);
- fd = NULL;
- if (eal_parse_sysfs_value(filename, &retval) < 0) {
- printf("eal_parse_sysfs_value() returned error - test failed\n");
- goto error;
- }
- if (retval != valid_number) {
- printf("Invalid value read by eal_parse_sysfs_value() - test failed\n");
- goto error;
- }
- printf("Read '%u\\n' ok\n", valid_number);
-
- /* test reading a valid hex number value with "\n" on the end */
- valid_number = 25;
- fd = fopen(filename,"w");
- if (fd == NULL) {
- printf("line %d, Error opening %s: %s\n", __LINE__, filename, strerror(errno));
- goto error;
- }
- fprintf(fd,"0x%x\n", valid_number);
- fclose(fd);
- fd = NULL;
- if (eal_parse_sysfs_value(filename, &retval) < 0) {
- printf("eal_parse_sysfs_value() returned error - test failed\n");
- goto error;
- }
- if (retval != valid_number) {
- printf("Invalid value read by eal_parse_sysfs_value() - test failed\n");
- goto error;
- }
- printf("Read '0x%x\\n' ok\n", valid_number);
-
- printf("Test reading invalid values ...\n");
-
- /* test reading an empty file - expect failure!*/
- fd = fopen(filename,"w");
- if (fd == NULL) {
- printf("line %d, Error opening %s: %s\n", __LINE__, filename, strerror(errno));
- goto error;
- }
- fclose(fd);
- fd = NULL;
- if (eal_parse_sysfs_value(filename, &retval) == 0) {
- printf("eal_parse_sysfs_value() read invalid value - test failed\n");
- goto error;
- }
-
- /* test reading a valid number value *without* "\n" on the end - expect failure!*/
- valid_number = 3;
- fd = fopen(filename,"w");
- if (fd == NULL) {
- printf("line %d, Error opening %s: %s\n", __LINE__, filename, strerror(errno));
- goto error;
- }
- fprintf(fd,"%u", valid_number);
- fclose(fd);
- fd = NULL;
- if (eal_parse_sysfs_value(filename, &retval) == 0) {
- printf("eal_parse_sysfs_value() read invalid value - test failed\n");
- goto error;
- }
-
- /* test reading a valid number value followed by string - expect failure!*/
- valid_number = 3;
- fd = fopen(filename,"w");
- if (fd == NULL) {
- printf("line %d, Error opening %s: %s\n", __LINE__, filename, strerror(errno));
- goto error;
- }
- fprintf(fd,"%uJ\n", valid_number);
- fclose(fd);
- fd = NULL;
- if (eal_parse_sysfs_value(filename, &retval) == 0) {
- printf("eal_parse_sysfs_value() read invalid value - test failed\n");
- goto error;
- }
-
- /* test reading a non-numeric value - expect failure!*/
- fd = fopen(filename,"w");
- if (fd == NULL) {
- printf("line %d, Error opening %s: %s\n", __LINE__, filename, strerror(errno));
- goto error;
- }
- fprintf(fd,"error\n");
- fclose(fd);
- fd = NULL;
- if (eal_parse_sysfs_value(filename, &retval) == 0) {
- printf("eal_parse_sysfs_value() read invalid value - test failed\n");
- goto error;
- }
-
- close(tmp_file_handle);
- unlink(filename);
- printf("eal_parse_sysfs_value() - OK\n");
- return 0;
-
-error:
- if (fd)
- fclose(fd);
- if (tmp_file_handle > 0)
- close(tmp_file_handle);
- if (filename[0] != '\0')
- unlink(filename);
- return -1;
-}
-
-static int
-test_eal_fs(void)
-{
- if (test_parse_sysfs_value() < 0)
- return -1;
- return 0;
-}
-
-REGISTER_TEST_COMMAND(eal_fs_autotest, test_eal_fs);
diff --git a/app/test/test_errno.c b/app/test/test_errno.c
deleted file mode 100644
index 388decbb..00000000
--- a/app/test/test_errno.c
+++ /dev/null
@@ -1,116 +0,0 @@
-/*-
- * BSD LICENSE
- *
- * Copyright(c) 2010-2014 Intel Corporation. All rights reserved.
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * * Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * * Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in
- * the documentation and/or other materials provided with the
- * distribution.
- * * Neither the name of Intel Corporation nor the names of its
- * contributors may be used to endorse or promote products derived
- * from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
- * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
- * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#include <stdint.h>
-#include <stdio.h>
-#include <stdarg.h>
-#include <errno.h>
-#include <string.h>
-#include <rte_per_lcore.h>
-#include <rte_errno.h>
-#include <rte_string_fns.h>
-
-#include "test.h"
-
-static int
-test_errno(void)
-{
- const char *rte_retval;
- const char *libc_retval;
-#ifdef RTE_EXEC_ENV_BSDAPP
- /* BSD has a colon in the string, unlike linux */
- const char unknown_code_result[] = "Unknown error: %d";
-#else
- const char unknown_code_result[] = "Unknown error %d";
-#endif
- char expected_libc_retval[sizeof(unknown_code_result)+3];
-
- /* use a small selection of standard errors for testing */
- int std_errs[] = {EAGAIN, EBADF, EACCES, EINTR, EINVAL};
- /* test ALL registered RTE error codes for overlap */
- int rte_errs[] = {E_RTE_SECONDARY, E_RTE_NO_CONFIG};
- unsigned i;
-
- rte_errno = 0;
- if (rte_errno != 0)
- return -1;
- /* check for standard errors we return the same as libc */
- for (i = 0; i < sizeof(std_errs)/sizeof(std_errs[0]); i++){
- rte_retval = rte_strerror(std_errs[i]);
- libc_retval = strerror(std_errs[i]);
- printf("rte_strerror: '%s', strerror: '%s'\n",
- rte_retval, libc_retval);
- if (strcmp(rte_retval, libc_retval) != 0)
- return -1;
- }
- /* for rte-specific errors ensure we return a different string
- * and that the string for libc is for an unknown error
- */
- for (i = 0; i < sizeof(rte_errs)/sizeof(rte_errs[0]); i++){
- rte_retval = rte_strerror(rte_errs[i]);
- libc_retval = strerror(rte_errs[i]);
- printf("rte_strerror: '%s', strerror: '%s'\n",
- rte_retval, libc_retval);
- if (strcmp(rte_retval, libc_retval) == 0)
- return -1;
- /* generate appropriate error string for unknown error number
- * and then check that this is what we got back. If not, we have
- * a duplicate error number that conflicts with errno.h */
- snprintf(expected_libc_retval, sizeof(expected_libc_retval),
- unknown_code_result, rte_errs[i]);
- if ((strcmp(expected_libc_retval, libc_retval) != 0) &&
- (strcmp("", libc_retval) != 0)){
- printf("Error, duplicate error code %d\n", rte_errs[i]);
- return -1;
- }
- }
-
- /* ensure that beyond RTE_MAX_ERRNO, we always get an unknown code */
- rte_retval = rte_strerror(RTE_MAX_ERRNO + 1);
- libc_retval = strerror(RTE_MAX_ERRNO + 1);
- snprintf(expected_libc_retval, sizeof(expected_libc_retval),
- unknown_code_result, RTE_MAX_ERRNO + 1);
- printf("rte_strerror: '%s', strerror: '%s'\n",
- rte_retval, libc_retval);
- if ((strcmp(rte_retval, libc_retval) != 0) ||
- (strcmp(expected_libc_retval, libc_retval) != 0)){
- if (strcmp("", libc_retval) != 0){
- printf("Failed test for RTE_MAX_ERRNO + 1 value\n");
- return -1;
- }
- }
-
- return 0;
-}
-
-REGISTER_TEST_COMMAND(errno_autotest, test_errno);
diff --git a/app/test/test_func_reentrancy.c b/app/test/test_func_reentrancy.c
deleted file mode 100644
index baa01ffc..00000000
--- a/app/test/test_func_reentrancy.c
+++ /dev/null
@@ -1,510 +0,0 @@
-/*-
- * BSD LICENSE
- *
- * Copyright(c) 2010-2014 Intel Corporation. All rights reserved.
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * * Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * * Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in
- * the documentation and/or other materials provided with the
- * distribution.
- * * Neither the name of Intel Corporation nor the names of its
- * contributors may be used to endorse or promote products derived
- * from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
- * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
- * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#include <string.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <stdint.h>
-#include <inttypes.h>
-#include <stdarg.h>
-#include <errno.h>
-#include <sys/queue.h>
-
-#include <rte_common.h>
-#include <rte_log.h>
-#include <rte_debug.h>
-#include <rte_memory.h>
-#include <rte_memzone.h>
-#include <rte_launch.h>
-#include <rte_cycles.h>
-#include <rte_eal.h>
-#include <rte_per_lcore.h>
-#include <rte_lcore.h>
-#include <rte_atomic.h>
-#include <rte_branch_prediction.h>
-#include <rte_ring.h>
-#include <rte_mempool.h>
-#include <rte_spinlock.h>
-#include <rte_malloc.h>
-
-#ifdef RTE_LIBRTE_HASH
-#include <rte_hash.h>
-#include <rte_fbk_hash.h>
-#include <rte_jhash.h>
-#endif /* RTE_LIBRTE_HASH */
-
-#ifdef RTE_LIBRTE_LPM
-#include <rte_lpm.h>
-#endif /* RTE_LIBRTE_LPM */
-
-#include <rte_string_fns.h>
-
-#include "test.h"
-
-typedef int (*case_func_t)(void* arg);
-typedef void (*case_clean_t)(unsigned lcore_id);
-
-#define MAX_STRING_SIZE (256)
-#define MAX_ITER_TIMES (16)
-#define MAX_LPM_ITER_TIMES (8)
-
-#define MEMPOOL_ELT_SIZE (sizeof(uint32_t))
-#define MEMPOOL_SIZE (4)
-
-#define MAX_LCORES RTE_MAX_MEMZONE / (MAX_ITER_TIMES * 4U)
-
-static rte_atomic32_t obj_count = RTE_ATOMIC32_INIT(0);
-static rte_atomic32_t synchro = RTE_ATOMIC32_INIT(0);
-
-#define WAIT_SYNCHRO_FOR_SLAVES() do{ \
- if (lcore_self != rte_get_master_lcore()) \
- while (rte_atomic32_read(&synchro) == 0); \
-} while(0)
-
-/*
- * rte_eal_init only init once
- */
-static int
-test_eal_init_once(__attribute__((unused)) void *arg)
-{
- unsigned lcore_self = rte_lcore_id();
-
- WAIT_SYNCHRO_FOR_SLAVES();
-
- rte_atomic32_set(&obj_count, 1); /* silent the check in the caller */
- if (rte_eal_init(0, NULL) != -1)
- return -1;
-
- return 0;
-}
-
-/*
- * ring create/lookup reentrancy test
- */
-static int
-ring_create_lookup(__attribute__((unused)) void *arg)
-{
- unsigned lcore_self = rte_lcore_id();
- struct rte_ring * rp;
- char ring_name[MAX_STRING_SIZE];
- int i;
-
- WAIT_SYNCHRO_FOR_SLAVES();
-
- /* create the same ring simultaneously on all threads */
- for (i = 0; i < MAX_ITER_TIMES; i++) {
- rp = rte_ring_create("fr_test_once", 4096, SOCKET_ID_ANY, 0);
- if (rp != NULL)
- rte_atomic32_inc(&obj_count);
- }
-
- /* create/lookup new ring several times */
- for (i = 0; i < MAX_ITER_TIMES; i++) {
- snprintf(ring_name, sizeof(ring_name), "fr_test_%d_%d", lcore_self, i);
- rp = rte_ring_create(ring_name, 4096, SOCKET_ID_ANY, 0);
- if (NULL == rp)
- return -1;
- if (rte_ring_lookup(ring_name) != rp)
- return -1;
- }
-
- /* verify all ring created sucessful */
- for (i = 0; i < MAX_ITER_TIMES; i++) {
- snprintf(ring_name, sizeof(ring_name), "fr_test_%d_%d", lcore_self, i);
- if (rte_ring_lookup(ring_name) == NULL)
- return -1;
- }
-
- return 0;
-}
-
-static void
-my_obj_init(struct rte_mempool *mp, __attribute__((unused)) void *arg,
- void *obj, unsigned i)
-{
- uint32_t *objnum = obj;
- memset(obj, 0, mp->elt_size);
- *objnum = i;
-}
-
-static int
-mempool_create_lookup(__attribute__((unused)) void *arg)
-{
- unsigned lcore_self = rte_lcore_id();
- struct rte_mempool * mp;
- char mempool_name[MAX_STRING_SIZE];
- int i;
-
- WAIT_SYNCHRO_FOR_SLAVES();
-
- /* create the same mempool simultaneously on all threads */
- for (i = 0; i < MAX_ITER_TIMES; i++) {
- mp = rte_mempool_create("fr_test_once", MEMPOOL_SIZE,
- MEMPOOL_ELT_SIZE, 0, 0,
- NULL, NULL,
- my_obj_init, NULL,
- SOCKET_ID_ANY, 0);
- if (mp != NULL)
- rte_atomic32_inc(&obj_count);
- }
-
- /* create/lookup new ring several times */
- for (i = 0; i < MAX_ITER_TIMES; i++) {
- snprintf(mempool_name, sizeof(mempool_name), "fr_test_%d_%d", lcore_self, i);
- mp = rte_mempool_create(mempool_name, MEMPOOL_SIZE,
- MEMPOOL_ELT_SIZE, 0, 0,
- NULL, NULL,
- my_obj_init, NULL,
- SOCKET_ID_ANY, 0);
- if (NULL == mp)
- return -1;
- if (rte_mempool_lookup(mempool_name) != mp)
- return -1;
- }
-
- /* verify all ring created sucessful */
- for (i = 0; i < MAX_ITER_TIMES; i++) {
- snprintf(mempool_name, sizeof(mempool_name), "fr_test_%d_%d", lcore_self, i);
- if (rte_mempool_lookup(mempool_name) == NULL)
- return -1;
- }
-
- return 0;
-}
-
-#ifdef RTE_LIBRTE_HASH
-static void
-hash_clean(unsigned lcore_id)
-{
- char hash_name[MAX_STRING_SIZE];
- struct rte_hash *handle;
- int i;
-
- for (i = 0; i < MAX_ITER_TIMES; i++) {
- snprintf(hash_name, sizeof(hash_name), "fr_test_%d_%d", lcore_id, i);
-
- if ((handle = rte_hash_find_existing(hash_name)) != NULL)
- rte_hash_free(handle);
- }
-}
-
-static int
-hash_create_free(__attribute__((unused)) void *arg)
-{
- unsigned lcore_self = rte_lcore_id();
- struct rte_hash *handle;
- char hash_name[MAX_STRING_SIZE];
- int i;
- struct rte_hash_parameters hash_params = {
- .name = NULL,
- .entries = 16,
- .key_len = 4,
- .hash_func = (rte_hash_function)rte_jhash_32b,
- .hash_func_init_val = 0,
- .socket_id = 0,
- };
-
- WAIT_SYNCHRO_FOR_SLAVES();
-
- /* create the same hash simultaneously on all threads */
- hash_params.name = "fr_test_once";
- for (i = 0; i < MAX_ITER_TIMES; i++) {
- handle = rte_hash_create(&hash_params);
- if (handle != NULL)
- rte_atomic32_inc(&obj_count);
- }
-
- /* create mutiple times simultaneously */
- for (i = 0; i < MAX_ITER_TIMES; i++) {
- snprintf(hash_name, sizeof(hash_name), "fr_test_%d_%d", lcore_self, i);
- hash_params.name = hash_name;
-
- handle = rte_hash_create(&hash_params);
- if (NULL == handle)
- return -1;
-
- /* verify correct existing and then free all */
- if (handle != rte_hash_find_existing(hash_name))
- return -1;
-
- rte_hash_free(handle);
- }
-
- /* verify free correct */
- for (i = 0; i < MAX_ITER_TIMES; i++) {
- snprintf(hash_name, sizeof(hash_name), "fr_test_%d_%d", lcore_self, i);
-
- if (NULL != rte_hash_find_existing(hash_name))
- return -1;
- }
-
- return 0;
-}
-
-static void
-fbk_clean(unsigned lcore_id)
-{
- char fbk_name[MAX_STRING_SIZE];
- struct rte_fbk_hash_table *handle;
- int i;
-
- for (i = 0; i < MAX_ITER_TIMES; i++) {
- snprintf(fbk_name, sizeof(fbk_name), "fr_test_%d_%d", lcore_id, i);
-
- if ((handle = rte_fbk_hash_find_existing(fbk_name)) != NULL)
- rte_fbk_hash_free(handle);
- }
-}
-
-static int
-fbk_create_free(__attribute__((unused)) void *arg)
-{
- unsigned lcore_self = rte_lcore_id();
- struct rte_fbk_hash_table *handle;
- char fbk_name[MAX_STRING_SIZE];
- int i;
- struct rte_fbk_hash_params fbk_params = {
- .name = NULL,
- .entries = 4,
- .entries_per_bucket = 4,
- .socket_id = 0,
- .hash_func = rte_jhash_1word,
- .init_val = RTE_FBK_HASH_INIT_VAL_DEFAULT,
- };
-
- WAIT_SYNCHRO_FOR_SLAVES();
-
- /* create the same fbk hash table simultaneously on all threads */
- fbk_params.name = "fr_test_once";
- for (i = 0; i < MAX_ITER_TIMES; i++) {
- handle = rte_fbk_hash_create(&fbk_params);
- if (handle != NULL)
- rte_atomic32_inc(&obj_count);
- }
-
- /* create mutiple fbk tables simultaneously */
- for (i = 0; i < MAX_ITER_TIMES; i++) {
- snprintf(fbk_name, sizeof(fbk_name), "fr_test_%d_%d", lcore_self, i);
- fbk_params.name = fbk_name;
-
- handle = rte_fbk_hash_create(&fbk_params);
- if (NULL == handle)
- return -1;
-
- /* verify correct existing and then free all */
- if (handle != rte_fbk_hash_find_existing(fbk_name))
- return -1;
-
- rte_fbk_hash_free(handle);
- }
-
- /* verify free correct */
- for (i = 0; i < MAX_ITER_TIMES; i++) {
- snprintf(fbk_name, sizeof(fbk_name), "fr_test_%d_%d", lcore_self, i);
-
- if (NULL != rte_fbk_hash_find_existing(fbk_name))
- return -1;
- }
-
- return 0;
-}
-#endif /* RTE_LIBRTE_HASH */
-
-#ifdef RTE_LIBRTE_LPM
-static void
-lpm_clean(unsigned lcore_id)
-{
- char lpm_name[MAX_STRING_SIZE];
- struct rte_lpm *lpm;
- int i;
-
- for (i = 0; i < MAX_LPM_ITER_TIMES; i++) {
- snprintf(lpm_name, sizeof(lpm_name), "fr_test_%d_%d", lcore_id, i);
-
- if ((lpm = rte_lpm_find_existing(lpm_name)) != NULL)
- rte_lpm_free(lpm);
- }
-}
-
-static int
-lpm_create_free(__attribute__((unused)) void *arg)
-{
- unsigned lcore_self = rte_lcore_id();
- struct rte_lpm *lpm;
- struct rte_lpm_config config;
-
- config.max_rules = 4;
- config.number_tbl8s = 256;
- config.flags = 0;
- char lpm_name[MAX_STRING_SIZE];
- int i;
-
- WAIT_SYNCHRO_FOR_SLAVES();
-
- /* create the same lpm simultaneously on all threads */
- for (i = 0; i < MAX_ITER_TIMES; i++) {
- lpm = rte_lpm_create("fr_test_once", SOCKET_ID_ANY, &config);
- if (lpm != NULL)
- rte_atomic32_inc(&obj_count);
- }
-
- /* create mutiple fbk tables simultaneously */
- for (i = 0; i < MAX_LPM_ITER_TIMES; i++) {
- snprintf(lpm_name, sizeof(lpm_name), "fr_test_%d_%d", lcore_self, i);
- lpm = rte_lpm_create(lpm_name, SOCKET_ID_ANY, &config);
- if (NULL == lpm)
- return -1;
-
- /* verify correct existing and then free all */
- if (lpm != rte_lpm_find_existing(lpm_name))
- return -1;
-
- rte_lpm_free(lpm);
- }
-
- /* verify free correct */
- for (i = 0; i < MAX_LPM_ITER_TIMES; i++) {
- snprintf(lpm_name, sizeof(lpm_name), "fr_test_%d_%d", lcore_self, i);
- if (NULL != rte_lpm_find_existing(lpm_name))
- return -1;
- }
-
- return 0;
-}
-#endif /* RTE_LIBRTE_LPM */
-
-struct test_case{
- case_func_t func;
- void* arg;
- case_clean_t clean;
- char name[MAX_STRING_SIZE];
-};
-
-/* All test cases in the test suite */
-struct test_case test_cases[] = {
- { test_eal_init_once, NULL, NULL, "eal init once" },
- { ring_create_lookup, NULL, NULL, "ring create/lookup" },
- { mempool_create_lookup, NULL, NULL, "mempool create/lookup" },
-#ifdef RTE_LIBRTE_HASH
- { hash_create_free, NULL, hash_clean, "hash create/free" },
- { fbk_create_free, NULL, fbk_clean, "fbk create/free" },
-#endif /* RTE_LIBRTE_HASH */
-#ifdef RTE_LIBRTE_LPM
- { lpm_create_free, NULL, lpm_clean, "lpm create/free" },
-#endif /* RTE_LIBRTE_LPM */
-};
-
-/**
- * launch test case in two separate thread
- */
-static int
-launch_test(struct test_case *pt_case)
-{
- int ret = 0;
- unsigned lcore_id;
- unsigned cores_save = rte_lcore_count();
- unsigned cores = RTE_MIN(cores_save, MAX_LCORES);
- unsigned count;
-
- if (pt_case->func == NULL)
- return -1;
-
- rte_atomic32_set(&obj_count, 0);
- rte_atomic32_set(&synchro, 0);
-
- RTE_LCORE_FOREACH_SLAVE(lcore_id) {
- if (cores == 1)
- break;
- cores--;
- rte_eal_remote_launch(pt_case->func, pt_case->arg, lcore_id);
- }
-
- rte_atomic32_set(&synchro, 1);
-
- if (pt_case->func(pt_case->arg) < 0)
- ret = -1;
-
- cores = cores_save;
- RTE_LCORE_FOREACH_SLAVE(lcore_id) {
- if (cores == 1)
- break;
- cores--;
- if (rte_eal_wait_lcore(lcore_id) < 0)
- ret = -1;
-
- if (pt_case->clean != NULL)
- pt_case->clean(lcore_id);
- }
-
- count = rte_atomic32_read(&obj_count);
- if (count != 1) {
- printf("%s: common object allocated %d times (should be 1)\n",
- pt_case->name, count);
- ret = -1;
- }
-
- return ret;
-}
-
-/**
- * Main entry of func_reentrancy test
- */
-static int
-test_func_reentrancy(void)
-{
- uint32_t case_id;
- struct test_case *pt_case = NULL;
-
- if (rte_lcore_count() <= 1) {
- printf("Not enough lcore for testing\n");
- return -1;
- }
- else if (rte_lcore_count() > MAX_LCORES)
- printf("Too many lcores, some cores will be disabled\n");
-
- for (case_id = 0; case_id < sizeof(test_cases)/sizeof(struct test_case); case_id ++) {
- pt_case = &test_cases[case_id];
- if (pt_case->func == NULL)
- continue;
-
- if (launch_test(pt_case) < 0) {
- printf("Func-ReEnt CASE %"PRIu32": %s FAIL\n", case_id, pt_case->name);
- return -1;
- }
- printf("Func-ReEnt CASE %"PRIu32": %s PASS\n", case_id, pt_case->name);
- }
-
- return 0;
-}
-
-REGISTER_TEST_COMMAND(func_reentrancy_autotest, test_func_reentrancy);
diff --git a/app/test/test_hash.c b/app/test/test_hash.c
deleted file mode 100644
index 2c87efe6..00000000
--- a/app/test/test_hash.c
+++ /dev/null
@@ -1,1517 +0,0 @@
-/*-
- * BSD LICENSE
- *
- * Copyright(c) 2010-2015 Intel Corporation. All rights reserved.
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * * Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * * Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in
- * the documentation and/or other materials provided with the
- * distribution.
- * * Neither the name of Intel Corporation nor the names of its
- * contributors may be used to endorse or promote products derived
- * from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
- * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
- * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#include <stdio.h>
-#include <stdint.h>
-#include <string.h>
-#include <stdlib.h>
-#include <stdarg.h>
-#include <errno.h>
-#include <sys/queue.h>
-
-#include <rte_common.h>
-#include <rte_malloc.h>
-#include <rte_cycles.h>
-#include <rte_random.h>
-#include <rte_memory.h>
-#include <rte_memzone.h>
-#include <rte_eal.h>
-#include <rte_ip.h>
-#include <rte_string_fns.h>
-
-#include "test.h"
-
-#include <rte_hash.h>
-#include <rte_fbk_hash.h>
-#include <rte_jhash.h>
-#include <rte_hash_crc.h>
-
-/*******************************************************************************
- * Hash function performance test configuration section. Each performance test
- * will be performed HASHTEST_ITERATIONS times.
- *
- * The five arrays below control what tests are performed. Every combination
- * from the array entries is tested.
- */
-static rte_hash_function hashtest_funcs[] = {rte_jhash, rte_hash_crc};
-static uint32_t hashtest_initvals[] = {0};
-static uint32_t hashtest_key_lens[] = {0, 2, 4, 5, 6, 7, 8, 10, 11, 15, 16, 21, 31, 32, 33, 63, 64};
-#define MAX_KEYSIZE 64
-/******************************************************************************/
-#define LOCAL_FBK_HASH_ENTRIES_MAX (1 << 15)
-
-/*
- * Check condition and return an error if true. Assumes that "handle" is the
- * name of the hash structure pointer to be freed.
- */
-#define RETURN_IF_ERROR(cond, str, ...) do { \
- if (cond) { \
- printf("ERROR line %d: " str "\n", __LINE__, ##__VA_ARGS__); \
- if (handle) rte_hash_free(handle); \
- return -1; \
- } \
-} while(0)
-
-#define RETURN_IF_ERROR_FBK(cond, str, ...) do { \
- if (cond) { \
- printf("ERROR line %d: " str "\n", __LINE__, ##__VA_ARGS__); \
- if (handle) rte_fbk_hash_free(handle); \
- return -1; \
- } \
-} while(0)
-
-/* 5-tuple key type */
-struct flow_key {
- uint32_t ip_src;
- uint32_t ip_dst;
- uint16_t port_src;
- uint16_t port_dst;
- uint8_t proto;
-} __attribute__((packed));
-
-/*
- * Hash function that always returns the same value, to easily test what
- * happens when a bucket is full.
- */
-static uint32_t pseudo_hash(__attribute__((unused)) const void *keys,
- __attribute__((unused)) uint32_t key_len,
- __attribute__((unused)) uint32_t init_val)
-{
- return 3;
-}
-
-/*
- * Print out result of unit test hash operation.
- */
-#if defined(UNIT_TEST_HASH_VERBOSE)
-static void print_key_info(const char *msg, const struct flow_key *key,
- int32_t pos)
-{
- uint8_t *p = (uint8_t *)key;
- unsigned i;
-
- printf("%s key:0x", msg);
- for (i = 0; i < sizeof(struct flow_key); i++) {
- printf("%02X", p[i]);
- }
- printf(" @ pos %d\n", pos);
-}
-#else
-static void print_key_info(__attribute__((unused)) const char *msg,
- __attribute__((unused)) const struct flow_key *key,
- __attribute__((unused)) int32_t pos)
-{
-}
-#endif
-
-/* Keys used by unit test functions */
-static struct flow_key keys[5] = { {
- .ip_src = IPv4(0x03, 0x02, 0x01, 0x00),
- .ip_dst = IPv4(0x07, 0x06, 0x05, 0x04),
- .port_src = 0x0908,
- .port_dst = 0x0b0a,
- .proto = 0x0c,
-}, {
- .ip_src = IPv4(0x13, 0x12, 0x11, 0x10),
- .ip_dst = IPv4(0x17, 0x16, 0x15, 0x14),
- .port_src = 0x1918,
- .port_dst = 0x1b1a,
- .proto = 0x1c,
-}, {
- .ip_src = IPv4(0x23, 0x22, 0x21, 0x20),
- .ip_dst = IPv4(0x27, 0x26, 0x25, 0x24),
- .port_src = 0x2928,
- .port_dst = 0x2b2a,
- .proto = 0x2c,
-}, {
- .ip_src = IPv4(0x33, 0x32, 0x31, 0x30),
- .ip_dst = IPv4(0x37, 0x36, 0x35, 0x34),
- .port_src = 0x3938,
- .port_dst = 0x3b3a,
- .proto = 0x3c,
-}, {
- .ip_src = IPv4(0x43, 0x42, 0x41, 0x40),
- .ip_dst = IPv4(0x47, 0x46, 0x45, 0x44),
- .port_src = 0x4948,
- .port_dst = 0x4b4a,
- .proto = 0x4c,
-} };
-
-/* Parameters used for hash table in unit test functions. Name set later. */
-static struct rte_hash_parameters ut_params = {
- .entries = 64,
- .key_len = sizeof(struct flow_key), /* 13 */
- .hash_func = rte_jhash,
- .hash_func_init_val = 0,
- .socket_id = 0,
-};
-
-#define CRC32_ITERATIONS (1U << 10)
-#define CRC32_DWORDS (1U << 6)
-/*
- * Test if all CRC32 implementations yield the same hash value
- */
-static int
-test_crc32_hash_alg_equiv(void)
-{
- uint32_t hash_val;
- uint32_t init_val;
- uint64_t data64[CRC32_DWORDS];
- unsigned i, j;
- size_t data_len;
-
- printf("\n# CRC32 implementations equivalence test\n");
- for (i = 0; i < CRC32_ITERATIONS; i++) {
- /* Randomizing data_len of data set */
- data_len = (size_t) ((rte_rand() % sizeof(data64)) + 1);
- init_val = (uint32_t) rte_rand();
-
- /* Fill the data set */
- for (j = 0; j < CRC32_DWORDS; j++)
- data64[j] = rte_rand();
-
- /* Calculate software CRC32 */
- rte_hash_crc_set_alg(CRC32_SW);
- hash_val = rte_hash_crc(data64, data_len, init_val);
-
- /* Check against 4-byte-operand sse4.2 CRC32 if available */
- rte_hash_crc_set_alg(CRC32_SSE42);
- if (hash_val != rte_hash_crc(data64, data_len, init_val)) {
- printf("Failed checking CRC32_SW against CRC32_SSE42\n");
- break;
- }
-
- /* Check against 8-byte-operand sse4.2 CRC32 if available */
- rte_hash_crc_set_alg(CRC32_SSE42_x64);
- if (hash_val != rte_hash_crc(data64, data_len, init_val)) {
- printf("Failed checking CRC32_SW against CRC32_SSE42_x64\n");
- break;
- }
-
- /* Check against 8-byte-operand ARM64 CRC32 if available */
- rte_hash_crc_set_alg(CRC32_ARM64);
- if (hash_val != rte_hash_crc(data64, data_len, init_val)) {
- printf("Failed checking CRC32_SW against CRC32_ARM64\n");
- break;
- }
- }
-
- /* Resetting to best available algorithm */
- rte_hash_crc_set_alg(CRC32_SSE42_x64);
-
- if (i == CRC32_ITERATIONS)
- return 0;
-
- printf("Failed test data (hex, %zu bytes total):\n", data_len);
- for (j = 0; j < data_len; j++)
- printf("%02X%c", ((uint8_t *)data64)[j],
- ((j+1) % 16 == 0 || j == data_len - 1) ? '\n' : ' ');
-
- return -1;
-}
-
-/*
- * Test a hash function.
- */
-static void run_hash_func_test(rte_hash_function f, uint32_t init_val,
- uint32_t key_len)
-{
- static uint8_t key[MAX_KEYSIZE];
- unsigned i;
-
-
- for (i = 0; i < key_len; i++)
- key[i] = (uint8_t) rte_rand();
-
- /* just to be on the safe side */
- if (!f)
- return;
-
- f(key, key_len, init_val);
-}
-
-/*
- * Test all hash functions.
- */
-static void run_hash_func_tests(void)
-{
- unsigned i, j, k;
-
- for (i = 0;
- i < sizeof(hashtest_funcs) / sizeof(rte_hash_function);
- i++) {
- for (j = 0;
- j < sizeof(hashtest_initvals) / sizeof(uint32_t);
- j++) {
- for (k = 0;
- k < sizeof(hashtest_key_lens) / sizeof(uint32_t);
- k++) {
- run_hash_func_test(hashtest_funcs[i],
- hashtest_initvals[j],
- hashtest_key_lens[k]);
- }
- }
- }
-}
-
-/*
- * Basic sequence of operations for a single key:
- * - add
- * - lookup (hit)
- * - delete
- * - lookup (miss)
- */
-static int test_add_delete(void)
-{
- struct rte_hash *handle;
- /* test with standard add/lookup/delete functions */
- int pos0, expectedPos0;
-
- ut_params.name = "test1";
- handle = rte_hash_create(&ut_params);
- RETURN_IF_ERROR(handle == NULL, "hash creation failed");
-
- pos0 = rte_hash_add_key(handle, &keys[0]);
- print_key_info("Add", &keys[0], pos0);
- RETURN_IF_ERROR(pos0 < 0, "failed to add key (pos0=%d)", pos0);
- expectedPos0 = pos0;
-
- pos0 = rte_hash_lookup(handle, &keys[0]);
- print_key_info("Lkp", &keys[0], pos0);
- RETURN_IF_ERROR(pos0 != expectedPos0,
- "failed to find key (pos0=%d)", pos0);
-
- pos0 = rte_hash_del_key(handle, &keys[0]);
- print_key_info("Del", &keys[0], pos0);
- RETURN_IF_ERROR(pos0 != expectedPos0,
- "failed to delete key (pos0=%d)", pos0);
-
- pos0 = rte_hash_lookup(handle, &keys[0]);
- print_key_info("Lkp", &keys[0], pos0);
- RETURN_IF_ERROR(pos0 != -ENOENT,
- "fail: found key after deleting! (pos0=%d)", pos0);
-
- rte_hash_free(handle);
-
- /* repeat test with precomputed hash functions */
- hash_sig_t hash_value;
- int pos1, expectedPos1;
-
- handle = rte_hash_create(&ut_params);
- RETURN_IF_ERROR(handle == NULL, "hash creation failed");
-
- hash_value = rte_hash_hash(handle, &keys[0]);
- pos1 = rte_hash_add_key_with_hash(handle, &keys[0], hash_value);
- print_key_info("Add", &keys[0], pos1);
- RETURN_IF_ERROR(pos1 < 0, "failed to add key (pos1=%d)", pos1);
- expectedPos1 = pos1;
-
- pos1 = rte_hash_lookup_with_hash(handle, &keys[0], hash_value);
- print_key_info("Lkp", &keys[0], pos1);
- RETURN_IF_ERROR(pos1 != expectedPos1,
- "failed to find key (pos1=%d)", pos1);
-
- pos1 = rte_hash_del_key_with_hash(handle, &keys[0], hash_value);
- print_key_info("Del", &keys[0], pos1);
- RETURN_IF_ERROR(pos1 != expectedPos1,
- "failed to delete key (pos1=%d)", pos1);
-
- pos1 = rte_hash_lookup_with_hash(handle, &keys[0], hash_value);
- print_key_info("Lkp", &keys[0], pos1);
- RETURN_IF_ERROR(pos1 != -ENOENT,
- "fail: found key after deleting! (pos1=%d)", pos1);
-
- rte_hash_free(handle);
-
- return 0;
-}
-
-/*
- * Sequence of operations for a single key:
- * - delete: miss
- * - add
- * - lookup: hit
- * - add: update
- * - lookup: hit (updated data)
- * - delete: hit
- * - delete: miss
- * - lookup: miss
- */
-static int test_add_update_delete(void)
-{
- struct rte_hash *handle;
- int pos0, expectedPos0;
-
- ut_params.name = "test2";
- handle = rte_hash_create(&ut_params);
- RETURN_IF_ERROR(handle == NULL, "hash creation failed");
-
- pos0 = rte_hash_del_key(handle, &keys[0]);
- print_key_info("Del", &keys[0], pos0);
- RETURN_IF_ERROR(pos0 != -ENOENT,
- "fail: found non-existent key (pos0=%d)", pos0);
-
- pos0 = rte_hash_add_key(handle, &keys[0]);
- print_key_info("Add", &keys[0], pos0);
- RETURN_IF_ERROR(pos0 < 0, "failed to add key (pos0=%d)", pos0);
- expectedPos0 = pos0;
-
- pos0 = rte_hash_lookup(handle, &keys[0]);
- print_key_info("Lkp", &keys[0], pos0);
- RETURN_IF_ERROR(pos0 != expectedPos0,
- "failed to find key (pos0=%d)", pos0);
-
- pos0 = rte_hash_add_key(handle, &keys[0]);
- print_key_info("Add", &keys[0], pos0);
- RETURN_IF_ERROR(pos0 != expectedPos0,
- "failed to re-add key (pos0=%d)", pos0);
-
- pos0 = rte_hash_lookup(handle, &keys[0]);
- print_key_info("Lkp", &keys[0], pos0);
- RETURN_IF_ERROR(pos0 != expectedPos0,
- "failed to find key (pos0=%d)", pos0);
-
- pos0 = rte_hash_del_key(handle, &keys[0]);
- print_key_info("Del", &keys[0], pos0);
- RETURN_IF_ERROR(pos0 != expectedPos0,
- "failed to delete key (pos0=%d)", pos0);
-
- pos0 = rte_hash_del_key(handle, &keys[0]);
- print_key_info("Del", &keys[0], pos0);
- RETURN_IF_ERROR(pos0 != -ENOENT,
- "fail: deleted already deleted key (pos0=%d)", pos0);
-
- pos0 = rte_hash_lookup(handle, &keys[0]);
- print_key_info("Lkp", &keys[0], pos0);
- RETURN_IF_ERROR(pos0 != -ENOENT,
- "fail: found key after deleting! (pos0=%d)", pos0);
-
- rte_hash_free(handle);
- return 0;
-}
-
-/*
- * Sequence of operations for retrieving a key with its position
- *
- * - create table
- * - add key
- * - get the key with its position: hit
- * - delete key
- * - try to get the deleted key: miss
- *
- */
-static int test_hash_get_key_with_position(void)
-{
- struct rte_hash *handle = NULL;
- int pos, expectedPos, result;
- void *key;
-
- ut_params.name = "hash_get_key_w_pos";
- handle = rte_hash_create(&ut_params);
- RETURN_IF_ERROR(handle == NULL, "hash creation failed");
-
- pos = rte_hash_add_key(handle, &keys[0]);
- print_key_info("Add", &keys[0], pos);
- RETURN_IF_ERROR(pos < 0, "failed to add key (pos0=%d)", pos);
- expectedPos = pos;
-
- result = rte_hash_get_key_with_position(handle, pos, &key);
- RETURN_IF_ERROR(result != 0, "error retrieving a key");
-
- pos = rte_hash_del_key(handle, &keys[0]);
- print_key_info("Del", &keys[0], pos);
- RETURN_IF_ERROR(pos != expectedPos,
- "failed to delete key (pos0=%d)", pos);
-
- result = rte_hash_get_key_with_position(handle, pos, &key);
- RETURN_IF_ERROR(result != -ENOENT, "non valid key retrieved");
-
- rte_hash_free(handle);
- return 0;
-}
-
-/*
- * Sequence of operations for find existing hash table
- *
- * - create table
- * - find existing table: hit
- * - find non-existing table: miss
- *
- */
-static int test_hash_find_existing(void)
-{
- struct rte_hash *handle = NULL, *result = NULL;
-
- /* Create hash table. */
- ut_params.name = "hash_find_existing";
- handle = rte_hash_create(&ut_params);
- RETURN_IF_ERROR(handle == NULL, "hash creation failed");
-
- /* Try to find existing hash table */
- result = rte_hash_find_existing("hash_find_existing");
- RETURN_IF_ERROR(result != handle, "could not find existing hash table");
-
- /* Try to find non-existing hash table */
- result = rte_hash_find_existing("hash_find_non_existing");
- RETURN_IF_ERROR(!(result == NULL), "found table that shouldn't exist");
-
- /* Cleanup. */
- rte_hash_free(handle);
-
- return 0;
-}
-
-/*
- * Sequence of operations for 5 keys
- * - add keys
- * - lookup keys: hit
- * - add keys (update)
- * - lookup keys: hit (updated data)
- * - delete keys : hit
- * - lookup keys: miss
- */
-static int test_five_keys(void)
-{
- struct rte_hash *handle;
- const void *key_array[5] = {0};
- int pos[5];
- int expected_pos[5];
- unsigned i;
- int ret;
-
- ut_params.name = "test3";
- handle = rte_hash_create(&ut_params);
- RETURN_IF_ERROR(handle == NULL, "hash creation failed");
-
- /* Add */
- for (i = 0; i < 5; i++) {
- pos[i] = rte_hash_add_key(handle, &keys[i]);
- print_key_info("Add", &keys[i], pos[i]);
- RETURN_IF_ERROR(pos[i] < 0,
- "failed to add key (pos[%u]=%d)", i, pos[i]);
- expected_pos[i] = pos[i];
- }
-
- /* Lookup */
- for(i = 0; i < 5; i++)
- key_array[i] = &keys[i];
-
- ret = rte_hash_lookup_bulk(handle, &key_array[0], 5, (int32_t *)pos);
- if(ret == 0)
- for(i = 0; i < 5; i++) {
- print_key_info("Lkp", key_array[i], pos[i]);
- RETURN_IF_ERROR(pos[i] != expected_pos[i],
- "failed to find key (pos[%u]=%d)", i, pos[i]);
- }
-
- /* Add - update */
- for (i = 0; i < 5; i++) {
- pos[i] = rte_hash_add_key(handle, &keys[i]);
- print_key_info("Add", &keys[i], pos[i]);
- RETURN_IF_ERROR(pos[i] != expected_pos[i],
- "failed to add key (pos[%u]=%d)", i, pos[i]);
- }
-
- /* Lookup */
- for (i = 0; i < 5; i++) {
- pos[i] = rte_hash_lookup(handle, &keys[i]);
- print_key_info("Lkp", &keys[i], pos[i]);
- RETURN_IF_ERROR(pos[i] != expected_pos[i],
- "failed to find key (pos[%u]=%d)", i, pos[i]);
- }
-
- /* Delete */
- for (i = 0; i < 5; i++) {
- pos[i] = rte_hash_del_key(handle, &keys[i]);
- print_key_info("Del", &keys[i], pos[i]);
- RETURN_IF_ERROR(pos[i] != expected_pos[i],
- "failed to delete key (pos[%u]=%d)", i, pos[i]);
- }
-
- /* Lookup */
- for (i = 0; i < 5; i++) {
- pos[i] = rte_hash_lookup(handle, &keys[i]);
- print_key_info("Lkp", &keys[i], pos[i]);
- RETURN_IF_ERROR(pos[i] != -ENOENT,
- "found non-existent key (pos[%u]=%d)", i, pos[i]);
- }
-
- /* Lookup multi */
- ret = rte_hash_lookup_bulk(handle, &key_array[0], 5, (int32_t *)pos);
- if (ret == 0)
- for (i = 0; i < 5; i++) {
- print_key_info("Lkp", key_array[i], pos[i]);
- RETURN_IF_ERROR(pos[i] != -ENOENT,
- "found not-existent key (pos[%u]=%d)", i, pos[i]);
- }
-
- rte_hash_free(handle);
-
- return 0;
-}
-
-/*
- * Add keys to the same bucket until bucket full.
- * - add 5 keys to the same bucket (hash created with 4 keys per bucket):
- * first 4 successful, 5th successful, pushing existing item in bucket
- * - lookup the 5 keys: 5 hits
- * - add the 5 keys again: 5 OK
- * - lookup the 5 keys: 5 hits (updated data)
- * - delete the 5 keys: 5 OK
- * - lookup the 5 keys: 5 misses
- */
-static int test_full_bucket(void)
-{
- struct rte_hash_parameters params_pseudo_hash = {
- .name = "test4",
- .entries = 64,
- .key_len = sizeof(struct flow_key), /* 13 */
- .hash_func = pseudo_hash,
- .hash_func_init_val = 0,
- .socket_id = 0,
- };
- struct rte_hash *handle;
- int pos[5];
- int expected_pos[5];
- unsigned i;
-
- handle = rte_hash_create(&params_pseudo_hash);
- RETURN_IF_ERROR(handle == NULL, "hash creation failed");
-
- /* Fill bucket */
- for (i = 0; i < 4; i++) {
- pos[i] = rte_hash_add_key(handle, &keys[i]);
- print_key_info("Add", &keys[i], pos[i]);
- RETURN_IF_ERROR(pos[i] < 0,
- "failed to add key (pos[%u]=%d)", i, pos[i]);
- expected_pos[i] = pos[i];
- }
- /*
- * This should work and will push one of the items
- * in the bucket because it is full
- */
- pos[4] = rte_hash_add_key(handle, &keys[4]);
- print_key_info("Add", &keys[4], pos[4]);
- RETURN_IF_ERROR(pos[4] < 0,
- "failed to add key (pos[4]=%d)", pos[4]);
- expected_pos[4] = pos[4];
-
- /* Lookup */
- for (i = 0; i < 5; i++) {
- pos[i] = rte_hash_lookup(handle, &keys[i]);
- print_key_info("Lkp", &keys[i], pos[i]);
- RETURN_IF_ERROR(pos[i] != expected_pos[i],
- "failed to find key (pos[%u]=%d)", i, pos[i]);
- }
-
- /* Add - update */
- for (i = 0; i < 5; i++) {
- pos[i] = rte_hash_add_key(handle, &keys[i]);
- print_key_info("Add", &keys[i], pos[i]);
- RETURN_IF_ERROR(pos[i] != expected_pos[i],
- "failed to add key (pos[%u]=%d)", i, pos[i]);
- }
-
- /* Lookup */
- for (i = 0; i < 5; i++) {
- pos[i] = rte_hash_lookup(handle, &keys[i]);
- print_key_info("Lkp", &keys[i], pos[i]);
- RETURN_IF_ERROR(pos[i] != expected_pos[i],
- "failed to find key (pos[%u]=%d)", i, pos[i]);
- }
-
- /* Delete 1 key, check other keys are still found */
- pos[1] = rte_hash_del_key(handle, &keys[1]);
- print_key_info("Del", &keys[1], pos[1]);
- RETURN_IF_ERROR(pos[1] != expected_pos[1],
- "failed to delete key (pos[1]=%d)", pos[1]);
- pos[3] = rte_hash_lookup(handle, &keys[3]);
- print_key_info("Lkp", &keys[3], pos[3]);
- RETURN_IF_ERROR(pos[3] != expected_pos[3],
- "failed lookup after deleting key from same bucket "
- "(pos[3]=%d)", pos[3]);
-
- /* Go back to previous state */
- pos[1] = rte_hash_add_key(handle, &keys[1]);
- print_key_info("Add", &keys[1], pos[1]);
- expected_pos[1] = pos[1];
- RETURN_IF_ERROR(pos[1] < 0, "failed to add key (pos[1]=%d)", pos[1]);
-
- /* Delete */
- for (i = 0; i < 5; i++) {
- pos[i] = rte_hash_del_key(handle, &keys[i]);
- print_key_info("Del", &keys[i], pos[i]);
- RETURN_IF_ERROR(pos[i] != expected_pos[i],
- "failed to delete key (pos[%u]=%d)", i, pos[i]);
- }
-
- /* Lookup */
- for (i = 0; i < 5; i++) {
- pos[i] = rte_hash_lookup(handle, &keys[i]);
- print_key_info("Lkp", &keys[i], pos[i]);
- RETURN_IF_ERROR(pos[i] != -ENOENT,
- "fail: found non-existent key (pos[%u]=%d)", i, pos[i]);
- }
-
- rte_hash_free(handle);
-
- /* Cover the NULL case. */
- rte_hash_free(0);
- return 0;
-}
-
-/******************************************************************************/
-static int
-fbk_hash_unit_test(void)
-{
- struct rte_fbk_hash_params params = {
- .name = "fbk_hash_test",
- .entries = LOCAL_FBK_HASH_ENTRIES_MAX,
- .entries_per_bucket = 4,
- .socket_id = 0,
- };
-
- struct rte_fbk_hash_params invalid_params_1 = {
- .name = "invalid_1",
- .entries = LOCAL_FBK_HASH_ENTRIES_MAX + 1, /* Not power of 2 */
- .entries_per_bucket = 4,
- .socket_id = 0,
- };
-
- struct rte_fbk_hash_params invalid_params_2 = {
- .name = "invalid_2",
- .entries = 4,
- .entries_per_bucket = 3, /* Not power of 2 */
- .socket_id = 0,
- };
-
- struct rte_fbk_hash_params invalid_params_3 = {
- .name = "invalid_3",
- .entries = 0, /* Entries is 0 */
- .entries_per_bucket = 4,
- .socket_id = 0,
- };
-
- struct rte_fbk_hash_params invalid_params_4 = {
- .name = "invalid_4",
- .entries = LOCAL_FBK_HASH_ENTRIES_MAX,
- .entries_per_bucket = 0, /* Entries per bucket is 0 */
- .socket_id = 0,
- };
-
- struct rte_fbk_hash_params invalid_params_5 = {
- .name = "invalid_5",
- .entries = 4,
- .entries_per_bucket = 8, /* Entries per bucket > entries */
- .socket_id = 0,
- };
-
- struct rte_fbk_hash_params invalid_params_6 = {
- .name = "invalid_6",
- .entries = RTE_FBK_HASH_ENTRIES_MAX * 2, /* Entries > max allowed */
- .entries_per_bucket = 4,
- .socket_id = 0,
- };
-
- struct rte_fbk_hash_params invalid_params_7 = {
- .name = "invalid_7",
- .entries = RTE_FBK_HASH_ENTRIES_MAX,
- .entries_per_bucket = RTE_FBK_HASH_ENTRIES_PER_BUCKET_MAX * 2, /* Entries > max allowed */
- .socket_id = 0,
- };
-
- struct rte_fbk_hash_params invalid_params_8 = {
- .name = "invalid_7",
- .entries = RTE_FBK_HASH_ENTRIES_MAX,
- .entries_per_bucket = 4,
- .socket_id = RTE_MAX_NUMA_NODES + 1, /* invalid socket */
- };
-
- /* try to create two hashes with identical names
- * in this case, trying to create a second one will not
- * fail but will simply return pointer to the existing
- * hash with that name. sort of like a "find hash by name" :-)
- */
- struct rte_fbk_hash_params invalid_params_same_name_1 = {
- .name = "same_name", /* hash with identical name */
- .entries = 4,
- .entries_per_bucket = 2,
- .socket_id = 0,
- };
-
- /* trying to create this hash should return a pointer to an existing hash */
- struct rte_fbk_hash_params invalid_params_same_name_2 = {
- .name = "same_name", /* hash with identical name */
- .entries = RTE_FBK_HASH_ENTRIES_MAX,
- .entries_per_bucket = 4,
- .socket_id = 0,
- };
-
- /* this is a sanity check for "same name" test
- * creating this hash will check if we are actually able to create
- * multiple hashes with different names (instead of having just one).
- */
- struct rte_fbk_hash_params different_name = {
- .name = "different_name", /* different name */
- .entries = LOCAL_FBK_HASH_ENTRIES_MAX,
- .entries_per_bucket = 4,
- .socket_id = 0,
- };
-
- struct rte_fbk_hash_params params_jhash = {
- .name = "valid",
- .entries = LOCAL_FBK_HASH_ENTRIES_MAX,
- .entries_per_bucket = 4,
- .socket_id = 0,
- .hash_func = rte_jhash_1word, /* Tests for different hash_func */
- .init_val = RTE_FBK_HASH_INIT_VAL_DEFAULT,
- };
-
- struct rte_fbk_hash_params params_nohash = {
- .name = "valid nohash",
- .entries = LOCAL_FBK_HASH_ENTRIES_MAX,
- .entries_per_bucket = 4,
- .socket_id = 0,
- .hash_func = NULL, /* Tests for null hash_func */
- .init_val = RTE_FBK_HASH_INIT_VAL_DEFAULT,
- };
-
- struct rte_fbk_hash_table *handle, *tmp;
- uint32_t keys[5] =
- {0xc6e18639, 0xe67c201c, 0xd4c8cffd, 0x44728691, 0xd5430fa9};
- uint16_t vals[5] = {28108, 5699, 38490, 2166, 61571};
- int status;
- unsigned i;
- double used_entries;
-
- /* Try creating hashes with invalid parameters */
- printf("# Testing hash creation with invalid parameters "
- "- expect error msgs\n");
- handle = rte_fbk_hash_create(&invalid_params_1);
- RETURN_IF_ERROR_FBK(handle != NULL, "fbk hash creation should have failed");
-
- handle = rte_fbk_hash_create(&invalid_params_2);
- RETURN_IF_ERROR_FBK(handle != NULL, "fbk hash creation should have failed");
-
- handle = rte_fbk_hash_create(&invalid_params_3);
- RETURN_IF_ERROR_FBK(handle != NULL, "fbk hash creation should have failed");
-
- handle = rte_fbk_hash_create(&invalid_params_4);
- RETURN_IF_ERROR_FBK(handle != NULL, "fbk hash creation should have failed");
-
- handle = rte_fbk_hash_create(&invalid_params_5);
- RETURN_IF_ERROR_FBK(handle != NULL, "fbk hash creation should have failed");
-
- handle = rte_fbk_hash_create(&invalid_params_6);
- RETURN_IF_ERROR_FBK(handle != NULL, "fbk hash creation should have failed");
-
- handle = rte_fbk_hash_create(&invalid_params_7);
- RETURN_IF_ERROR_FBK(handle != NULL, "fbk hash creation should have failed");
-
- handle = rte_fbk_hash_create(&invalid_params_8);
- RETURN_IF_ERROR_FBK(handle != NULL, "fbk hash creation should have failed");
-
- handle = rte_fbk_hash_create(&invalid_params_same_name_1);
- RETURN_IF_ERROR_FBK(handle == NULL, "fbk hash creation should have succeeded");
-
- tmp = rte_fbk_hash_create(&invalid_params_same_name_2);
- if (tmp != NULL)
- rte_fbk_hash_free(tmp);
- RETURN_IF_ERROR_FBK(tmp != NULL, "fbk hash creation should have failed");
-
- /* we are not freeing handle here because we need a hash list
- * to be not empty for the next test */
-
- /* create a hash in non-empty list - good for coverage */
- tmp = rte_fbk_hash_create(&different_name);
- RETURN_IF_ERROR_FBK(tmp == NULL, "fbk hash creation should have succeeded");
-
- /* free both hashes */
- rte_fbk_hash_free(handle);
- rte_fbk_hash_free(tmp);
-
- /* Create empty jhash hash. */
- handle = rte_fbk_hash_create(&params_jhash);
- RETURN_IF_ERROR_FBK(handle == NULL, "fbk jhash hash creation failed");
-
- /* Cleanup. */
- rte_fbk_hash_free(handle);
-
- /* Create empty jhash hash. */
- handle = rte_fbk_hash_create(&params_nohash);
- RETURN_IF_ERROR_FBK(handle == NULL, "fbk nohash hash creation failed");
-
- /* Cleanup. */
- rte_fbk_hash_free(handle);
-
- /* Create empty hash. */
- handle = rte_fbk_hash_create(&params);
- RETURN_IF_ERROR_FBK(handle == NULL, "fbk hash creation failed");
-
- used_entries = rte_fbk_hash_get_load_factor(handle) * LOCAL_FBK_HASH_ENTRIES_MAX;
- RETURN_IF_ERROR_FBK((unsigned)used_entries != 0, \
- "load factor right after creation is not zero but it should be");
- /* Add keys. */
- for (i = 0; i < 5; i++) {
- status = rte_fbk_hash_add_key(handle, keys[i], vals[i]);
- RETURN_IF_ERROR_FBK(status != 0, "fbk hash add failed");
- }
-
- used_entries = rte_fbk_hash_get_load_factor(handle) * LOCAL_FBK_HASH_ENTRIES_MAX;
- RETURN_IF_ERROR_FBK((unsigned)used_entries != (unsigned)((((double)5)/LOCAL_FBK_HASH_ENTRIES_MAX)*LOCAL_FBK_HASH_ENTRIES_MAX), \
- "load factor now is not as expected");
- /* Find value of added keys. */
- for (i = 0; i < 5; i++) {
- status = rte_fbk_hash_lookup(handle, keys[i]);
- RETURN_IF_ERROR_FBK(status != vals[i],
- "fbk hash lookup failed");
- }
-
- /* Change value of added keys. */
- for (i = 0; i < 5; i++) {
- status = rte_fbk_hash_add_key(handle, keys[i], vals[4 - i]);
- RETURN_IF_ERROR_FBK(status != 0, "fbk hash update failed");
- }
-
- /* Find new values. */
- for (i = 0; i < 5; i++) {
- status = rte_fbk_hash_lookup(handle, keys[i]);
- RETURN_IF_ERROR_FBK(status != vals[4-i],
- "fbk hash lookup failed");
- }
-
- /* Delete keys individually. */
- for (i = 0; i < 5; i++) {
- status = rte_fbk_hash_delete_key(handle, keys[i]);
- RETURN_IF_ERROR_FBK(status != 0, "fbk hash delete failed");
- }
-
- used_entries = rte_fbk_hash_get_load_factor(handle) * LOCAL_FBK_HASH_ENTRIES_MAX;
- RETURN_IF_ERROR_FBK((unsigned)used_entries != 0, \
- "load factor right after deletion is not zero but it should be");
- /* Lookup should now fail. */
- for (i = 0; i < 5; i++) {
- status = rte_fbk_hash_lookup(handle, keys[i]);
- RETURN_IF_ERROR_FBK(status == 0,
- "fbk hash lookup should have failed");
- }
-
- /* Add keys again. */
- for (i = 0; i < 5; i++) {
- status = rte_fbk_hash_add_key(handle, keys[i], vals[i]);
- RETURN_IF_ERROR_FBK(status != 0, "fbk hash add failed");
- }
-
- /* Make sure they were added. */
- for (i = 0; i < 5; i++) {
- status = rte_fbk_hash_lookup(handle, keys[i]);
- RETURN_IF_ERROR_FBK(status != vals[i],
- "fbk hash lookup failed");
- }
-
- /* Clear all entries. */
- rte_fbk_hash_clear_all(handle);
-
- /* Lookup should fail. */
- for (i = 0; i < 5; i++) {
- status = rte_fbk_hash_lookup(handle, keys[i]);
- RETURN_IF_ERROR_FBK(status == 0,
- "fbk hash lookup should have failed");
- }
-
- /* coverage */
-
- /* fill up the hash_table */
- for (i = 0; i < RTE_FBK_HASH_ENTRIES_MAX + 1; i++)
- rte_fbk_hash_add_key(handle, i, (uint16_t) i);
-
- /* Find non-existent key in a full hashtable */
- status = rte_fbk_hash_lookup(handle, RTE_FBK_HASH_ENTRIES_MAX + 1);
- RETURN_IF_ERROR_FBK(status != -ENOENT,
- "fbk hash lookup succeeded");
-
- /* Delete non-existent key in a full hashtable */
- status = rte_fbk_hash_delete_key(handle, RTE_FBK_HASH_ENTRIES_MAX + 1);
- RETURN_IF_ERROR_FBK(status != -ENOENT,
- "fbk hash delete succeeded");
-
- /* Delete one key from a full hashtable */
- status = rte_fbk_hash_delete_key(handle, 1);
- RETURN_IF_ERROR_FBK(status != 0,
- "fbk hash delete failed");
-
- /* Clear all entries. */
- rte_fbk_hash_clear_all(handle);
-
- /* Cleanup. */
- rte_fbk_hash_free(handle);
-
- /* Cover the NULL case. */
- rte_fbk_hash_free(0);
-
- return 0;
-}
-
-/*
- * Sequence of operations for find existing fbk hash table
- *
- * - create table
- * - find existing table: hit
- * - find non-existing table: miss
- *
- */
-static int test_fbk_hash_find_existing(void)
-{
- struct rte_fbk_hash_params params = {
- .name = "fbk_hash_find_existing",
- .entries = LOCAL_FBK_HASH_ENTRIES_MAX,
- .entries_per_bucket = 4,
- .socket_id = 0,
- };
- struct rte_fbk_hash_table *handle = NULL, *result = NULL;
-
- /* Create hash table. */
- handle = rte_fbk_hash_create(&params);
- RETURN_IF_ERROR_FBK(handle == NULL, "fbk hash creation failed");
-
- /* Try to find existing fbk hash table */
- result = rte_fbk_hash_find_existing("fbk_hash_find_existing");
- RETURN_IF_ERROR_FBK(result != handle, "could not find existing fbk hash table");
-
- /* Try to find non-existing fbk hash table */
- result = rte_fbk_hash_find_existing("fbk_hash_find_non_existing");
- RETURN_IF_ERROR_FBK(!(result == NULL), "found fbk table that shouldn't exist");
-
- /* Cleanup. */
- rte_fbk_hash_free(handle);
-
- return 0;
-}
-
-#define BUCKET_ENTRIES 4
-/*
- * Do tests for hash creation with bad parameters.
- */
-static int test_hash_creation_with_bad_parameters(void)
-{
- struct rte_hash *handle, *tmp;
- struct rte_hash_parameters params;
-
- handle = rte_hash_create(NULL);
- if (handle != NULL) {
- rte_hash_free(handle);
- printf("Impossible creating hash sucessfully without any parameter\n");
- return -1;
- }
-
- memcpy(&params, &ut_params, sizeof(params));
- params.name = "creation_with_bad_parameters_0";
- params.entries = RTE_HASH_ENTRIES_MAX + 1;
- handle = rte_hash_create(&params);
- if (handle != NULL) {
- rte_hash_free(handle);
- printf("Impossible creating hash sucessfully with entries in parameter exceeded\n");
- return -1;
- }
-
- memcpy(&params, &ut_params, sizeof(params));
- params.name = "creation_with_bad_parameters_2";
- params.entries = BUCKET_ENTRIES - 1;
- handle = rte_hash_create(&params);
- if (handle != NULL) {
- rte_hash_free(handle);
- printf("Impossible creating hash sucessfully if entries less than bucket_entries in parameter\n");
- return -1;
- }
-
- memcpy(&params, &ut_params, sizeof(params));
- params.name = "creation_with_bad_parameters_3";
- params.key_len = 0;
- handle = rte_hash_create(&params);
- if (handle != NULL) {
- rte_hash_free(handle);
- printf("Impossible creating hash sucessfully if key_len in parameter is zero\n");
- return -1;
- }
-
- memcpy(&params, &ut_params, sizeof(params));
- params.name = "creation_with_bad_parameters_4";
- params.socket_id = RTE_MAX_NUMA_NODES + 1;
- handle = rte_hash_create(&params);
- if (handle != NULL) {
- rte_hash_free(handle);
- printf("Impossible creating hash sucessfully with invalid socket\n");
- return -1;
- }
-
- /* test with same name should fail */
- memcpy(&params, &ut_params, sizeof(params));
- params.name = "same_name";
- handle = rte_hash_create(&params);
- if (handle == NULL) {
- printf("Cannot create first hash table with 'same_name'\n");
- return -1;
- }
- tmp = rte_hash_create(&params);
- if (tmp != NULL) {
- printf("Creation of hash table with same name should fail\n");
- rte_hash_free(handle);
- rte_hash_free(tmp);
- return -1;
- }
- rte_hash_free(handle);
-
- printf("# Test successful. No more errors expected\n");
-
- return 0;
-}
-
-/*
- * Do tests for hash creation with parameters that look incorrect
- * but are actually valid.
- */
-static int
-test_hash_creation_with_good_parameters(void)
-{
- struct rte_hash *handle;
- struct rte_hash_parameters params;
-
- /* create with null hash function - should choose DEFAULT_HASH_FUNC */
- memcpy(&params, &ut_params, sizeof(params));
- params.name = "name";
- params.hash_func = NULL;
- handle = rte_hash_create(&params);
- if (handle == NULL) {
- printf("Creating hash with null hash_func failed\n");
- return -1;
- }
-
- rte_hash_free(handle);
-
- return 0;
-}
-
-#define ITERATIONS 3
-/*
- * Test to see the average table utilization (entries added/max entries)
- * before hitting a random entry that cannot be added
- */
-static int test_average_table_utilization(void)
-{
- struct rte_hash *handle;
- uint8_t simple_key[MAX_KEYSIZE];
- unsigned i, j;
- unsigned added_keys, average_keys_added = 0;
- int ret;
-
- printf("\n# Running test to determine average utilization"
- "\n before adding elements begins to fail\n");
- printf("Measuring performance, please wait");
- fflush(stdout);
- ut_params.entries = 1 << 16;
- ut_params.name = "test_average_utilization";
- ut_params.hash_func = rte_jhash;
- handle = rte_hash_create(&ut_params);
- RETURN_IF_ERROR(handle == NULL, "hash creation failed");
-
- for (j = 0; j < ITERATIONS; j++) {
- ret = 0;
- /* Add random entries until key cannot be added */
- for (added_keys = 0; ret >= 0; added_keys++) {
- for (i = 0; i < ut_params.key_len; i++)
- simple_key[i] = rte_rand() % 255;
- ret = rte_hash_add_key(handle, simple_key);
- }
- if (ret != -ENOSPC) {
- printf("Unexpected error when adding keys\n");
- rte_hash_free(handle);
- return -1;
- }
-
- average_keys_added += added_keys;
-
- /* Reset the table */
- rte_hash_reset(handle);
-
- /* Print a dot to show progress on operations */
- printf(".");
- fflush(stdout);
- }
-
- average_keys_added /= ITERATIONS;
-
- printf("\nAverage table utilization = %.2f%% (%u/%u)\n",
- ((double) average_keys_added / ut_params.entries * 100),
- average_keys_added, ut_params.entries);
- rte_hash_free(handle);
-
- return 0;
-}
-
-#define NUM_ENTRIES 256
-static int test_hash_iteration(void)
-{
- struct rte_hash *handle;
- unsigned i;
- uint8_t keys[NUM_ENTRIES][MAX_KEYSIZE];
- const void *next_key;
- void *next_data;
- void *data[NUM_ENTRIES];
- unsigned added_keys;
- uint32_t iter = 0;
- int ret = 0;
-
- ut_params.entries = NUM_ENTRIES;
- ut_params.name = "test_hash_iteration";
- ut_params.hash_func = rte_jhash;
- ut_params.key_len = 16;
- handle = rte_hash_create(&ut_params);
- RETURN_IF_ERROR(handle == NULL, "hash creation failed");
-
- /* Add random entries until key cannot be added */
- for (added_keys = 0; added_keys < NUM_ENTRIES; added_keys++) {
- data[added_keys] = (void *) ((uintptr_t) rte_rand());
- for (i = 0; i < ut_params.key_len; i++)
- keys[added_keys][i] = rte_rand() % 255;
- ret = rte_hash_add_key_data(handle, keys[added_keys], data[added_keys]);
- if (ret < 0)
- break;
- }
-
- /* Iterate through the hash table */
- while (rte_hash_iterate(handle, &next_key, &next_data, &iter) >= 0) {
- /* Search for the key in the list of keys added */
- for (i = 0; i < NUM_ENTRIES; i++) {
- if (memcmp(next_key, keys[i], ut_params.key_len) == 0) {
- if (next_data != data[i]) {
- printf("Data found in the hash table is"
- "not the data added with the key\n");
- goto err;
- }
- added_keys--;
- break;
- }
- }
- if (i == NUM_ENTRIES) {
- printf("Key found in the hash table was not added\n");
- goto err;
- }
- }
-
- /* Check if all keys have been iterated */
- if (added_keys != 0) {
- printf("There were still %u keys to iterate\n", added_keys);
- goto err;
- }
-
- rte_hash_free(handle);
- return 0;
-
-err:
- rte_hash_free(handle);
- return -1;
-}
-
-static uint8_t key[16] = {0x00, 0x01, 0x02, 0x03,
- 0x04, 0x05, 0x06, 0x07,
- 0x08, 0x09, 0x0a, 0x0b,
- 0x0c, 0x0d, 0x0e, 0x0f};
-static struct rte_hash_parameters hash_params_ex = {
- .name = NULL,
- .entries = 64,
- .key_len = 0,
- .hash_func = NULL,
- .hash_func_init_val = 0,
- .socket_id = 0,
-};
-
-/*
- * add/delete key with jhash2
- */
-static int
-test_hash_add_delete_jhash2(void)
-{
- int ret = -1;
- struct rte_hash *handle;
- int32_t pos1, pos2;
-
- hash_params_ex.name = "hash_test_jhash2";
- hash_params_ex.key_len = 4;
- hash_params_ex.hash_func = (rte_hash_function)rte_jhash_32b;
-
- handle = rte_hash_create(&hash_params_ex);
- if (handle == NULL) {
- printf("test_hash_add_delete_jhash2 fail to create hash\n");
- goto fail_jhash2;
- }
- pos1 = rte_hash_add_key(handle, (void *)&key[0]);
- if (pos1 < 0) {
- printf("test_hash_add_delete_jhash2 fail to add hash key\n");
- goto fail_jhash2;
- }
-
- pos2 = rte_hash_del_key(handle, (void *)&key[0]);
- if (pos2 < 0 || pos1 != pos2) {
- printf("test_hash_add_delete_jhash2 delete different key from being added\n");
- goto fail_jhash2;
- }
- ret = 0;
-
-fail_jhash2:
- if (handle != NULL)
- rte_hash_free(handle);
-
- return ret;
-}
-
-/*
- * add/delete (2) key with jhash2
- */
-static int
-test_hash_add_delete_2_jhash2(void)
-{
- int ret = -1;
- struct rte_hash *handle;
- int32_t pos1, pos2;
-
- hash_params_ex.name = "hash_test_2_jhash2";
- hash_params_ex.key_len = 8;
- hash_params_ex.hash_func = (rte_hash_function)rte_jhash_32b;
-
- handle = rte_hash_create(&hash_params_ex);
- if (handle == NULL)
- goto fail_2_jhash2;
-
- pos1 = rte_hash_add_key(handle, (void *)&key[0]);
- if (pos1 < 0)
- goto fail_2_jhash2;
-
- pos2 = rte_hash_del_key(handle, (void *)&key[0]);
- if (pos2 < 0 || pos1 != pos2)
- goto fail_2_jhash2;
-
- ret = 0;
-
-fail_2_jhash2:
- if (handle != NULL)
- rte_hash_free(handle);
-
- return ret;
-}
-
-static uint32_t
-test_hash_jhash_1word(const void *key, uint32_t length, uint32_t initval)
-{
- const uint32_t *k = key;
-
- RTE_SET_USED(length);
-
- return rte_jhash_1word(k[0], initval);
-}
-
-static uint32_t
-test_hash_jhash_2word(const void *key, uint32_t length, uint32_t initval)
-{
- const uint32_t *k = key;
-
- RTE_SET_USED(length);
-
- return rte_jhash_2words(k[0], k[1], initval);
-}
-
-static uint32_t
-test_hash_jhash_3word(const void *key, uint32_t length, uint32_t initval)
-{
- const uint32_t *k = key;
-
- RTE_SET_USED(length);
-
- return rte_jhash_3words(k[0], k[1], k[2], initval);
-}
-
-/*
- * add/delete key with jhash 1word
- */
-static int
-test_hash_add_delete_jhash_1word(void)
-{
- int ret = -1;
- struct rte_hash *handle;
- int32_t pos1, pos2;
-
- hash_params_ex.name = "hash_test_jhash_1word";
- hash_params_ex.key_len = 4;
- hash_params_ex.hash_func = test_hash_jhash_1word;
-
- handle = rte_hash_create(&hash_params_ex);
- if (handle == NULL)
- goto fail_jhash_1word;
-
- pos1 = rte_hash_add_key(handle, (void *)&key[0]);
- if (pos1 < 0)
- goto fail_jhash_1word;
-
- pos2 = rte_hash_del_key(handle, (void *)&key[0]);
- if (pos2 < 0 || pos1 != pos2)
- goto fail_jhash_1word;
-
- ret = 0;
-
-fail_jhash_1word:
- if (handle != NULL)
- rte_hash_free(handle);
-
- return ret;
-}
-
-/*
- * add/delete key with jhash 2word
- */
-static int
-test_hash_add_delete_jhash_2word(void)
-{
- int ret = -1;
- struct rte_hash *handle;
- int32_t pos1, pos2;
-
- hash_params_ex.name = "hash_test_jhash_2word";
- hash_params_ex.key_len = 8;
- hash_params_ex.hash_func = test_hash_jhash_2word;
-
- handle = rte_hash_create(&hash_params_ex);
- if (handle == NULL)
- goto fail_jhash_2word;
-
- pos1 = rte_hash_add_key(handle, (void *)&key[0]);
- if (pos1 < 0)
- goto fail_jhash_2word;
-
- pos2 = rte_hash_del_key(handle, (void *)&key[0]);
- if (pos2 < 0 || pos1 != pos2)
- goto fail_jhash_2word;
-
- ret = 0;
-
-fail_jhash_2word:
- if (handle != NULL)
- rte_hash_free(handle);
-
- return ret;
-}
-
-/*
- * add/delete key with jhash 3word
- */
-static int
-test_hash_add_delete_jhash_3word(void)
-{
- int ret = -1;
- struct rte_hash *handle;
- int32_t pos1, pos2;
-
- hash_params_ex.name = "hash_test_jhash_3word";
- hash_params_ex.key_len = 12;
- hash_params_ex.hash_func = test_hash_jhash_3word;
-
- handle = rte_hash_create(&hash_params_ex);
- if (handle == NULL)
- goto fail_jhash_3word;
-
- pos1 = rte_hash_add_key(handle, (void *)&key[0]);
- if (pos1 < 0)
- goto fail_jhash_3word;
-
- pos2 = rte_hash_del_key(handle, (void *)&key[0]);
- if (pos2 < 0 || pos1 != pos2)
- goto fail_jhash_3word;
-
- ret = 0;
-
-fail_jhash_3word:
- if (handle != NULL)
- rte_hash_free(handle);
-
- return ret;
-}
-
-/*
- * Do all unit and performance tests.
- */
-static int
-test_hash(void)
-{
- if (test_add_delete() < 0)
- return -1;
- if (test_hash_add_delete_jhash2() < 0)
- return -1;
- if (test_hash_add_delete_2_jhash2() < 0)
- return -1;
- if (test_hash_add_delete_jhash_1word() < 0)
- return -1;
- if (test_hash_add_delete_jhash_2word() < 0)
- return -1;
- if (test_hash_add_delete_jhash_3word() < 0)
- return -1;
- if (test_hash_get_key_with_position() < 0)
- return -1;
- if (test_hash_find_existing() < 0)
- return -1;
- if (test_add_update_delete() < 0)
- return -1;
- if (test_five_keys() < 0)
- return -1;
- if (test_full_bucket() < 0)
- return -1;
-
- if (test_fbk_hash_find_existing() < 0)
- return -1;
- if (fbk_hash_unit_test() < 0)
- return -1;
- if (test_hash_creation_with_bad_parameters() < 0)
- return -1;
- if (test_hash_creation_with_good_parameters() < 0)
- return -1;
- if (test_average_table_utilization() < 0)
- return -1;
- if (test_hash_iteration() < 0)
- return -1;
-
- run_hash_func_tests();
-
- if (test_crc32_hash_alg_equiv() < 0)
- return -1;
-
- return 0;
-}
-
-REGISTER_TEST_COMMAND(hash_autotest, test_hash);
diff --git a/app/test/test_hash_functions.c b/app/test/test_hash_functions.c
deleted file mode 100644
index 9652b04d..00000000
--- a/app/test/test_hash_functions.c
+++ /dev/null
@@ -1,322 +0,0 @@
-/*-
- * BSD LICENSE
- *
- * Copyright(c) 2010-2015 Intel Corporation. All rights reserved.
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * * Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * * Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in
- * the documentation and/or other materials provided with the
- * distribution.
- * * Neither the name of Intel Corporation nor the names of its
- * contributors may be used to endorse or promote products derived
- * from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
- * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
- * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#include <stdio.h>
-#include <stdint.h>
-#include <string.h>
-#include <stdlib.h>
-#include <stdarg.h>
-#include <errno.h>
-#include <sys/queue.h>
-
-#include <rte_cycles.h>
-#include <rte_random.h>
-#include <rte_hash.h>
-#include <rte_jhash.h>
-#include <rte_hash_crc.h>
-
-#include "test.h"
-
-/*
- * Hash values calculated for key sizes from array "hashtest_key_lens"
- * and for initial values from array "hashtest_initvals.
- * Each key will be formed by increasing each byte by 1:
- * e.g.: key size = 4, key = 0x03020100
- * key size = 8, key = 0x0706050403020100
- */
-static uint32_t hash_values_jhash[2][12] = {{
- 0x8ba9414b, 0xdf0d39c9,
- 0xe4cf1d42, 0xd4ccb93c, 0x5e84eafc, 0x21362cfe,
- 0x2f4775ab, 0x9ff036cc, 0xeca51474, 0xbc9d6816,
- 0x12926a31, 0x1c9fa888
-},
-{
- 0x5c62c303, 0x1b8cf784,
- 0x8270ac65, 0x05fa6668, 0x762df861, 0xda088f2f,
- 0x59614cd4, 0x7a94f690, 0xdc1e4993, 0x30825494,
- 0x91d0e462, 0x768087fc
-}
-};
-static uint32_t hash_values_crc[2][12] = {{
- 0x00000000, 0xf26b8303,
- 0x91545164, 0x06040eb1, 0x9bb99201, 0xcc4c4fe4,
- 0x14a90993, 0xf8a5dd8c, 0xcaa1ad0b, 0x7ac1e03e,
- 0x43f44466, 0x4a11475e
-},
-{
- 0xbdfd3980, 0x70204542,
- 0x98cd4c70, 0xd52c702f, 0x41fc0e1c, 0x3905f65c,
- 0x94bff47f, 0x1bab102d, 0xf4a2c645, 0xbf441539,
- 0x789c104f, 0x53028d3e
-}
-};
-
-/*******************************************************************************
- * Hash function performance test configuration section. Each performance test
- * will be performed HASHTEST_ITERATIONS times.
- *
- * The three arrays below control what tests are performed. Every combination
- * from the array entries is tested.
- */
-#define HASHTEST_ITERATIONS 1000000
-#define MAX_KEYSIZE 64
-static rte_hash_function hashtest_funcs[] = {rte_jhash, rte_hash_crc};
-static uint32_t hashtest_initvals[] = {0, 0xdeadbeef};
-static uint32_t hashtest_key_lens[] = {
- 1, 2, /* Unusual key sizes */
- 4, 8, 16, 32, 48, 64, /* standard key sizes */
- 9, /* IPv4 SRC + DST + protocol, unpadded */
- 13, /* IPv4 5-tuple, unpadded */
- 37, /* IPv6 5-tuple, unpadded */
- 40 /* IPv6 5-tuple, padded to 8-byte boundary */
-};
-/******************************************************************************/
-
-/*
- * To help print out name of hash functions.
- */
-static const char *
-get_hash_name(rte_hash_function f)
-{
- if (f == rte_jhash)
- return "jhash";
-
- if (f == rte_hash_crc)
- return "rte_hash_crc";
-
- return "UnknownHash";
-}
-
-/*
- * Test a hash function.
- */
-static void
-run_hash_func_perf_test(uint32_t key_len, uint32_t init_val,
- rte_hash_function f)
-{
- static uint8_t key[HASHTEST_ITERATIONS][MAX_KEYSIZE];
- uint64_t ticks, start, end;
- unsigned i, j;
-
- for (i = 0; i < HASHTEST_ITERATIONS; i++) {
- for (j = 0; j < key_len; j++)
- key[i][j] = (uint8_t) rte_rand();
- }
-
- start = rte_rdtsc();
- for (i = 0; i < HASHTEST_ITERATIONS; i++)
- f(key[i], key_len, init_val);
- end = rte_rdtsc();
- ticks = end - start;
-
- printf("%-12s, %-18u, %-13u, %.02f\n", get_hash_name(f), (unsigned) key_len,
- (unsigned) init_val, (double)ticks / HASHTEST_ITERATIONS);
-}
-
-/*
- * Test all hash functions.
- */
-static void
-run_hash_func_perf_tests(void)
-{
- unsigned i, j, k;
-
- printf(" *** Hash function performance test results ***\n");
- printf(" Number of iterations for each test = %d\n",
- HASHTEST_ITERATIONS);
- printf("Hash Func. , Key Length (bytes), Initial value, Ticks/Op.\n");
-
- for (i = 0; i < RTE_DIM(hashtest_initvals); i++) {
- for (j = 0; j < RTE_DIM(hashtest_key_lens); j++) {
- for (k = 0; k < RTE_DIM(hashtest_funcs); k++) {
- run_hash_func_perf_test(hashtest_key_lens[j],
- hashtest_initvals[i],
- hashtest_funcs[k]);
- }
- }
- }
-}
-
-/*
- * Verify that hash functions return what they are expected to return
- * (using precalculated values stored above)
- */
-static int
-verify_precalculated_hash_func_tests(void)
-{
- unsigned i, j;
- uint8_t key[64];
- uint32_t hash;
-
- for (i = 0; i < 64; i++)
- key[i] = (uint8_t) i;
-
- for (i = 0; i < sizeof(hashtest_key_lens) / sizeof(uint32_t); i++) {
- for (j = 0; j < sizeof(hashtest_initvals) / sizeof(uint32_t); j++) {
- hash = rte_jhash(key, hashtest_key_lens[i],
- hashtest_initvals[j]);
- if (hash != hash_values_jhash[j][i]) {
- printf("jhash for %u bytes with initial value 0x%x."
- "Expected 0x%x, but got 0x%x\n",
- hashtest_key_lens[i], hashtest_initvals[j],
- hash_values_jhash[j][i], hash);
- return -1;
- }
-
- hash = rte_hash_crc(key, hashtest_key_lens[i],
- hashtest_initvals[j]);
- if (hash != hash_values_crc[j][i]) {
- printf("CRC for %u bytes with initial value 0x%x."
- "Expected 0x%x, but got 0x%x\n",
- hashtest_key_lens[i], hashtest_initvals[j],
- hash_values_crc[j][i], hash);
- return -1;
- }
- }
- }
-
- return 0;
-}
-
-/*
- * Verify that rte_jhash and rte_jhash_32b return the same
- */
-static int
-verify_jhash_32bits(void)
-{
- unsigned i, j;
- uint8_t key[64];
- uint32_t hash, hash32;
-
- for (i = 0; i < 64; i++)
- key[i] = rand() & 0xff;
-
- for (i = 0; i < sizeof(hashtest_key_lens) / sizeof(uint32_t); i++) {
- for (j = 0; j < sizeof(hashtest_initvals) / sizeof(uint32_t); j++) {
- /* Key size must be multiple of 4 (32 bits) */
- if ((hashtest_key_lens[i] & 0x3) == 0) {
- hash = rte_jhash(key, hashtest_key_lens[i],
- hashtest_initvals[j]);
- /* Divide key length by 4 in rte_jhash for 32 bits */
- hash32 = rte_jhash_32b((const unaligned_uint32_t *)key,
- hashtest_key_lens[i] >> 2,
- hashtest_initvals[j]);
- if (hash != hash32) {
- printf("rte_jhash returns different value (0x%x)"
- "than rte_jhash_32b (0x%x)\n",
- hash, hash32);
- return -1;
- }
- }
- }
- }
-
- return 0;
-}
-
-/*
- * Verify that rte_jhash and rte_jhash_1word, rte_jhash_2words
- * and rte_jhash_3words return the same
- */
-static int
-verify_jhash_words(void)
-{
- unsigned i;
- uint32_t key[3];
- uint32_t hash, hash_words;
-
- for (i = 0; i < 3; i++)
- key[i] = rand();
-
- /* Test rte_jhash_1word */
- hash = rte_jhash(key, 4, 0);
- hash_words = rte_jhash_1word(key[0], 0);
- if (hash != hash_words) {
- printf("rte_jhash returns different value (0x%x)"
- "than rte_jhash_1word (0x%x)\n",
- hash, hash_words);
- return -1;
- }
- /* Test rte_jhash_2words */
- hash = rte_jhash(key, 8, 0);
- hash_words = rte_jhash_2words(key[0], key[1], 0);
- if (hash != hash_words) {
- printf("rte_jhash returns different value (0x%x)"
- "than rte_jhash_2words (0x%x)\n",
- hash, hash_words);
- return -1;
- }
- /* Test rte_jhash_3words */
- hash = rte_jhash(key, 12, 0);
- hash_words = rte_jhash_3words(key[0], key[1], key[2], 0);
- if (hash != hash_words) {
- printf("rte_jhash returns different value (0x%x)"
- "than rte_jhash_3words (0x%x)\n",
- hash, hash_words);
- return -1;
- }
-
- return 0;
-}
-
-/*
- * Run all functional tests for hash functions
- */
-static int
-run_hash_func_tests(void)
-{
- if (verify_precalculated_hash_func_tests() != 0)
- return -1;
-
- if (verify_jhash_32bits() != 0)
- return -1;
-
- if (verify_jhash_words() != 0)
- return -1;
-
- return 0;
-
-}
-
-static int
-test_hash_functions(void)
-{
- if (run_hash_func_tests() != 0)
- return -1;
-
- run_hash_func_perf_tests();
-
- return 0;
-}
-
-REGISTER_TEST_COMMAND(hash_functions_autotest, test_hash_functions);
diff --git a/app/test/test_hash_multiwriter.c b/app/test/test_hash_multiwriter.c
deleted file mode 100644
index 4dcbd9d5..00000000
--- a/app/test/test_hash_multiwriter.c
+++ /dev/null
@@ -1,281 +0,0 @@
-/*-
- * BSD LICENSE
- *
- * Copyright(c) 2016 Intel Corporation. All rights reserved.
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * * Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * * Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in
- * the documentation and/or other materials provided with the
- * distribution.
- * * Neither the name of Intel Corporation nor the names of its
- * contributors may be used to endorse or promote products derived
- * from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
- * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
- * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-#include <inttypes.h>
-#include <locale.h>
-
-#include <rte_cycles.h>
-#include <rte_hash.h>
-#include <rte_hash_crc.h>
-#include <rte_launch.h>
-#include <rte_malloc.h>
-#include <rte_random.h>
-#include <rte_spinlock.h>
-
-#include "test.h"
-
-/*
- * Check condition and return an error if true. Assumes that "handle" is the
- * name of the hash structure pointer to be freed.
- */
-#define RETURN_IF_ERROR(cond, str, ...) do { \
- if (cond) { \
- printf("ERROR line %d: " str "\n", __LINE__, \
- ##__VA_ARGS__); \
- if (handle) \
- rte_hash_free(handle); \
- return -1; \
- } \
-} while (0)
-
-#define RTE_APP_TEST_HASH_MULTIWRITER_FAILED 0
-
-struct {
- uint32_t *keys;
- uint32_t *found;
- uint32_t nb_tsx_insertion;
- struct rte_hash *h;
-} tbl_multiwriter_test_params;
-
-const uint32_t nb_entries = 16*1024*1024;
-const uint32_t nb_total_tsx_insertion = 15*1024*1024;
-uint32_t rounded_nb_total_tsx_insertion;
-
-static rte_atomic64_t gcycles;
-static rte_atomic64_t ginsertions;
-
-static int use_htm;
-
-static int
-test_hash_multiwriter_worker(__attribute__((unused)) void *arg)
-{
- uint64_t i, offset;
- uint32_t lcore_id = rte_lcore_id();
- uint64_t begin, cycles;
-
- offset = (lcore_id - rte_get_master_lcore())
- * tbl_multiwriter_test_params.nb_tsx_insertion;
-
- printf("Core #%d inserting %d: %'"PRId64" - %'"PRId64"\n",
- lcore_id, tbl_multiwriter_test_params.nb_tsx_insertion,
- offset, offset + tbl_multiwriter_test_params.nb_tsx_insertion);
-
- begin = rte_rdtsc_precise();
-
- for (i = offset;
- i < offset + tbl_multiwriter_test_params.nb_tsx_insertion;
- i++) {
- if (rte_hash_add_key(tbl_multiwriter_test_params.h,
- tbl_multiwriter_test_params.keys + i) < 0)
- break;
- }
-
- cycles = rte_rdtsc_precise() - begin;
- rte_atomic64_add(&gcycles, cycles);
- rte_atomic64_add(&ginsertions, i - offset);
-
- for (; i < offset + tbl_multiwriter_test_params.nb_tsx_insertion; i++)
- tbl_multiwriter_test_params.keys[i]
- = RTE_APP_TEST_HASH_MULTIWRITER_FAILED;
-
- return 0;
-}
-
-
-static int
-test_hash_multiwriter(void)
-{
- unsigned int i, rounded_nb_total_tsx_insertion;
- static unsigned calledCount = 1;
-
- uint32_t *keys;
- uint32_t *found;
-
- struct rte_hash_parameters hash_params = {
- .entries = nb_entries,
- .key_len = sizeof(uint32_t),
- .hash_func = rte_hash_crc,
- .hash_func_init_val = 0,
- .socket_id = rte_socket_id(),
- };
- if (use_htm)
- hash_params.extra_flag =
- RTE_HASH_EXTRA_FLAGS_TRANS_MEM_SUPPORT
- | RTE_HASH_EXTRA_FLAGS_MULTI_WRITER_ADD;
- else
- hash_params.extra_flag =
- RTE_HASH_EXTRA_FLAGS_MULTI_WRITER_ADD;
-
- struct rte_hash *handle;
- char name[RTE_HASH_NAMESIZE];
-
- const void *next_key;
- void *next_data;
- uint32_t iter = 0;
-
- uint32_t duplicated_keys = 0;
- uint32_t lost_keys = 0;
-
- snprintf(name, 32, "test%u", calledCount++);
- hash_params.name = name;
-
- handle = rte_hash_create(&hash_params);
- RETURN_IF_ERROR(handle == NULL, "hash creation failed");
-
- tbl_multiwriter_test_params.h = handle;
- tbl_multiwriter_test_params.nb_tsx_insertion =
- nb_total_tsx_insertion / rte_lcore_count();
-
- rounded_nb_total_tsx_insertion = (nb_total_tsx_insertion /
- tbl_multiwriter_test_params.nb_tsx_insertion)
- * tbl_multiwriter_test_params.nb_tsx_insertion;
-
- rte_srand(rte_rdtsc());
-
- keys = rte_malloc(NULL, sizeof(uint32_t) * nb_entries, 0);
-
- if (keys == NULL) {
- printf("RTE_MALLOC failed\n");
- goto err1;
- }
-
- found = rte_zmalloc(NULL, sizeof(uint32_t) * nb_entries, 0);
- if (found == NULL) {
- printf("RTE_ZMALLOC failed\n");
- goto err2;
- }
-
- for (i = 0; i < nb_entries; i++)
- keys[i] = i;
-
- tbl_multiwriter_test_params.keys = keys;
- tbl_multiwriter_test_params.found = found;
-
- rte_atomic64_init(&gcycles);
- rte_atomic64_clear(&gcycles);
-
- rte_atomic64_init(&ginsertions);
- rte_atomic64_clear(&ginsertions);
-
- /* Fire all threads. */
- rte_eal_mp_remote_launch(test_hash_multiwriter_worker,
- NULL, CALL_MASTER);
- rte_eal_mp_wait_lcore();
-
- while (rte_hash_iterate(handle, &next_key, &next_data, &iter) >= 0) {
- /* Search for the key in the list of keys added .*/
- i = *(const uint32_t *)next_key;
- tbl_multiwriter_test_params.found[i]++;
- }
-
- for (i = 0; i < rounded_nb_total_tsx_insertion; i++) {
- if (tbl_multiwriter_test_params.keys[i]
- != RTE_APP_TEST_HASH_MULTIWRITER_FAILED) {
- if (tbl_multiwriter_test_params.found[i] > 1) {
- duplicated_keys++;
- break;
- }
- if (tbl_multiwriter_test_params.found[i] == 0) {
- lost_keys++;
- printf("key %d is lost\n", i);
- break;
- }
- }
- }
-
- if (duplicated_keys > 0) {
- printf("%d key duplicated\n", duplicated_keys);
- goto err3;
- }
-
- if (lost_keys > 0) {
- printf("%d key lost\n", lost_keys);
- goto err3;
- }
-
- printf("No key corrupted during multiwriter insertion.\n");
-
- unsigned long long int cycles_per_insertion =
- rte_atomic64_read(&gcycles)/
- rte_atomic64_read(&ginsertions);
-
- printf(" cycles per insertion: %llu\n", cycles_per_insertion);
-
- rte_free(tbl_multiwriter_test_params.found);
- rte_free(tbl_multiwriter_test_params.keys);
- rte_hash_free(handle);
- return 0;
-
-err3:
- rte_free(tbl_multiwriter_test_params.found);
-err2:
- rte_free(tbl_multiwriter_test_params.keys);
-err1:
- rte_hash_free(handle);
- return -1;
-}
-
-static int
-test_hash_multiwriter_main(void)
-{
- if (rte_lcore_count() == 1) {
- printf("More than one lcore is required to do multiwriter test\n");
- return 0;
- }
-
-
- setlocale(LC_NUMERIC, "");
-
-
- if (!rte_tm_supported()) {
- printf("Hardware transactional memory (lock elision) "
- "is NOT supported\n");
- } else {
- printf("Hardware transactional memory (lock elision) "
- "is supported\n");
-
- printf("Test multi-writer with Hardware transactional memory\n");
-
- use_htm = 1;
- if (test_hash_multiwriter() < 0)
- return -1;
- }
-
- printf("Test multi-writer without Hardware transactional memory\n");
- use_htm = 0;
- if (test_hash_multiwriter() < 0)
- return -1;
-
- return 0;
-}
-
-REGISTER_TEST_COMMAND(hash_multiwriter_autotest, test_hash_multiwriter_main);
diff --git a/app/test/test_hash_perf.c b/app/test/test_hash_perf.c
deleted file mode 100644
index c0051b20..00000000
--- a/app/test/test_hash_perf.c
+++ /dev/null
@@ -1,659 +0,0 @@
-/*-
- * BSD LICENSE
- *
- * Copyright(c) 2010-2015 Intel Corporation. All rights reserved.
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * * Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * * Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in
- * the documentation and/or other materials provided with the
- * distribution.
- * * Neither the name of Intel Corporation nor the names of its
- * contributors may be used to endorse or promote products derived
- * from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
- * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
- * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#include <stdio.h>
-#include <inttypes.h>
-
-#include <rte_lcore.h>
-#include <rte_cycles.h>
-#include <rte_malloc.h>
-#include <rte_hash.h>
-#include <rte_hash_crc.h>
-#include <rte_jhash.h>
-#include <rte_fbk_hash.h>
-#include <rte_random.h>
-#include <rte_string_fns.h>
-
-#include "test.h"
-
-#define MAX_ENTRIES (1 << 19)
-#define KEYS_TO_ADD (MAX_ENTRIES * 3 / 4) /* 75% table utilization */
-#define NUM_LOOKUPS (KEYS_TO_ADD * 5) /* Loop among keys added, several times */
-#define BUCKET_SIZE 4
-#define NUM_BUCKETS (MAX_ENTRIES / BUCKET_SIZE)
-#define MAX_KEYSIZE 64
-#define NUM_KEYSIZES 10
-#define NUM_SHUFFLES 10
-#define BURST_SIZE 16
-
-enum operations {
- ADD = 0,
- LOOKUP,
- LOOKUP_MULTI,
- DELETE,
- NUM_OPERATIONS
-};
-
-static uint32_t hashtest_key_lens[] = {
- /* standard key sizes */
- 4, 8, 16, 32, 48, 64,
- /* IPv4 SRC + DST + protocol, unpadded */
- 9,
- /* IPv4 5-tuple, unpadded */
- 13,
- /* IPv6 5-tuple, unpadded */
- 37,
- /* IPv6 5-tuple, padded to 8-byte boundary */
- 40
-};
-
-struct rte_hash *h[NUM_KEYSIZES];
-
-/* Array that stores if a slot is full */
-uint8_t slot_taken[MAX_ENTRIES];
-
-/* Array to store number of cycles per operation */
-uint64_t cycles[NUM_KEYSIZES][NUM_OPERATIONS][2][2];
-
-/* Array to store all input keys */
-uint8_t keys[KEYS_TO_ADD][MAX_KEYSIZE];
-
-/* Array to store the precomputed hash for 'keys' */
-hash_sig_t signatures[KEYS_TO_ADD];
-
-/* Array to store how many busy entries have each bucket */
-uint8_t buckets[NUM_BUCKETS];
-
-/* Array to store the positions where keys are added */
-int32_t positions[KEYS_TO_ADD];
-
-/* Parameters used for hash table in unit test functions. */
-static struct rte_hash_parameters ut_params = {
- .entries = MAX_ENTRIES,
- .hash_func = rte_jhash,
- .hash_func_init_val = 0,
-};
-
-static int
-create_table(unsigned with_data, unsigned table_index)
-{
- char name[RTE_HASH_NAMESIZE];
-
- if (with_data)
- /* Table will store 8-byte data */
- sprintf(name, "test_hash%d_data", hashtest_key_lens[table_index]);
- else
- sprintf(name, "test_hash%d", hashtest_key_lens[table_index]);
-
- ut_params.name = name;
- ut_params.key_len = hashtest_key_lens[table_index];
- ut_params.socket_id = rte_socket_id();
- h[table_index] = rte_hash_find_existing(name);
- if (h[table_index] != NULL)
- /*
- * If table was already created, free it to create it again,
- * so we force it is empty
- */
- rte_hash_free(h[table_index]);
- h[table_index] = rte_hash_create(&ut_params);
- if (h[table_index] == NULL) {
- printf("Error creating table\n");
- return -1;
- }
- return 0;
-
-}
-
-/* Shuffle the keys that have been added, so lookups will be totally random */
-static void
-shuffle_input_keys(unsigned table_index)
-{
- unsigned i;
- uint32_t swap_idx;
- uint8_t temp_key[MAX_KEYSIZE];
- hash_sig_t temp_signature;
- int32_t temp_position;
-
- for (i = KEYS_TO_ADD - 1; i > 0; i--) {
- swap_idx = rte_rand() % i;
-
- memcpy(temp_key, keys[i], hashtest_key_lens[table_index]);
- temp_signature = signatures[i];
- temp_position = positions[i];
-
- memcpy(keys[i], keys[swap_idx], hashtest_key_lens[table_index]);
- signatures[i] = signatures[swap_idx];
- positions[i] = positions[swap_idx];
-
- memcpy(keys[swap_idx], temp_key, hashtest_key_lens[table_index]);
- signatures[swap_idx] = temp_signature;
- positions[swap_idx] = temp_position;
- }
-}
-
-/*
- * Looks for random keys which
- * ALL can fit in hash table (no errors)
- */
-static int
-get_input_keys(unsigned with_pushes, unsigned table_index)
-{
- unsigned i, j;
- unsigned bucket_idx, incr, success = 1;
- uint8_t k = 0;
- int32_t ret;
- const uint32_t bucket_bitmask = NUM_BUCKETS - 1;
-
- /* Reset all arrays */
- for (i = 0; i < MAX_ENTRIES; i++)
- slot_taken[i] = 0;
-
- for (i = 0; i < NUM_BUCKETS; i++)
- buckets[i] = 0;
-
- for (j = 0; j < hashtest_key_lens[table_index]; j++)
- keys[0][j] = 0;
-
- /*
- * Add only entries that are not duplicated and that fits in the table
- * (cannot store more than BUCKET_SIZE entries in a bucket).
- * Regardless a key has been added correctly or not (success),
- * the next one to try will be increased by 1.
- */
- for (i = 0; i < KEYS_TO_ADD;) {
- incr = 0;
- if (i != 0) {
- keys[i][0] = ++k;
- /* Overflow, need to increment the next byte */
- if (keys[i][0] == 0)
- incr = 1;
- for (j = 1; j < hashtest_key_lens[table_index]; j++) {
- /* Do not increase next byte */
- if (incr == 0)
- if (success == 1)
- keys[i][j] = keys[i - 1][j];
- else
- keys[i][j] = keys[i][j];
- /* Increase next byte by one */
- else {
- if (success == 1)
- keys[i][j] = keys[i-1][j] + 1;
- else
- keys[i][j] = keys[i][j] + 1;
- if (keys[i][j] == 0)
- incr = 1;
- else
- incr = 0;
- }
- }
- }
- success = 0;
- signatures[i] = rte_hash_hash(h[table_index], keys[i]);
- bucket_idx = signatures[i] & bucket_bitmask;
- /*
- * If we are not inserting keys in secondary location,
- * when bucket is full, do not try to insert the key
- */
- if (with_pushes == 0)
- if (buckets[bucket_idx] == BUCKET_SIZE)
- continue;
-
- /* If key can be added, leave in successful key arrays "keys" */
- ret = rte_hash_add_key_with_hash(h[table_index], keys[i],
- signatures[i]);
- if (ret >= 0) {
- /* If key is already added, ignore the entry and do not store */
- if (slot_taken[ret])
- continue;
- else {
- /* Store the returned position and mark slot as taken */
- slot_taken[ret] = 1;
- positions[i] = ret;
- buckets[bucket_idx]++;
- success = 1;
- i++;
- }
- }
- }
-
- /* Reset the table, so we can measure the time to add all the entries */
- rte_hash_free(h[table_index]);
- h[table_index] = rte_hash_create(&ut_params);
-
- return 0;
-}
-
-static int
-timed_adds(unsigned with_hash, unsigned with_data, unsigned table_index)
-{
- unsigned i;
- const uint64_t start_tsc = rte_rdtsc();
- void *data;
- int32_t ret;
-
- for (i = 0; i < KEYS_TO_ADD; i++) {
- data = (void *) ((uintptr_t) signatures[i]);
- if (with_hash && with_data) {
- ret = rte_hash_add_key_with_hash_data(h[table_index],
- (const void *) keys[i],
- signatures[i], data);
- if (ret < 0) {
- printf("Failed to add key number %u\n", ret);
- return -1;
- }
- } else if (with_hash && !with_data) {
- ret = rte_hash_add_key_with_hash(h[table_index],
- (const void *) keys[i],
- signatures[i]);
- if (ret >= 0)
- positions[i] = ret;
- else {
- printf("Failed to add key number %u\n", ret);
- return -1;
- }
- } else if (!with_hash && with_data) {
- ret = rte_hash_add_key_data(h[table_index],
- (const void *) keys[i],
- data);
- if (ret < 0) {
- printf("Failed to add key number %u\n", ret);
- return -1;
- }
- } else {
- ret = rte_hash_add_key(h[table_index], keys[i]);
- if (ret >= 0)
- positions[i] = ret;
- else {
- printf("Failed to add key number %u\n", ret);
- return -1;
- }
- }
- }
-
- const uint64_t end_tsc = rte_rdtsc();
- const uint64_t time_taken = end_tsc - start_tsc;
-
- cycles[table_index][ADD][with_hash][with_data] = time_taken/KEYS_TO_ADD;
-
- return 0;
-}
-
-static int
-timed_lookups(unsigned with_hash, unsigned with_data, unsigned table_index)
-{
- unsigned i, j;
- const uint64_t start_tsc = rte_rdtsc();
- void *ret_data;
- void *expected_data;
- int32_t ret;
-
- for (i = 0; i < NUM_LOOKUPS/KEYS_TO_ADD; i++) {
- for (j = 0; j < KEYS_TO_ADD; j++) {
- if (with_hash && with_data) {
- ret = rte_hash_lookup_with_hash_data(h[table_index],
- (const void *) keys[j],
- signatures[j], &ret_data);
- if (ret < 0) {
- printf("Key number %u was not found\n", j);
- return -1;
- }
- expected_data = (void *) ((uintptr_t) signatures[j]);
- if (ret_data != expected_data) {
- printf("Data returned for key number %u is %p,"
- " but should be %p\n", j, ret_data,
- expected_data);
- return -1;
- }
- } else if (with_hash && !with_data) {
- ret = rte_hash_lookup_with_hash(h[table_index],
- (const void *) keys[j],
- signatures[j]);
- if (ret < 0 || ret != positions[j]) {
- printf("Key looked up in %d, should be in %d\n",
- ret, positions[j]);
- return -1;
- }
- } else if (!with_hash && with_data) {
- ret = rte_hash_lookup_data(h[table_index],
- (const void *) keys[j], &ret_data);
- if (ret < 0) {
- printf("Key number %u was not found\n", j);
- return -1;
- }
- expected_data = (void *) ((uintptr_t) signatures[j]);
- if (ret_data != expected_data) {
- printf("Data returned for key number %u is %p,"
- " but should be %p\n", j, ret_data,
- expected_data);
- return -1;
- }
- } else {
- ret = rte_hash_lookup(h[table_index], keys[j]);
- if (ret < 0 || ret != positions[j]) {
- printf("Key looked up in %d, should be in %d\n",
- ret, positions[j]);
- return -1;
- }
- }
- }
- }
-
- const uint64_t end_tsc = rte_rdtsc();
- const uint64_t time_taken = end_tsc - start_tsc;
-
- cycles[table_index][LOOKUP][with_hash][with_data] = time_taken/NUM_LOOKUPS;
-
- return 0;
-}
-
-static int
-timed_lookups_multi(unsigned with_data, unsigned table_index)
-{
- unsigned i, j, k;
- int32_t positions_burst[BURST_SIZE];
- const void *keys_burst[BURST_SIZE];
- void *expected_data[BURST_SIZE];
- void *ret_data[BURST_SIZE];
- uint64_t hit_mask;
- int ret;
-
- const uint64_t start_tsc = rte_rdtsc();
-
- for (i = 0; i < NUM_LOOKUPS/KEYS_TO_ADD; i++) {
- for (j = 0; j < KEYS_TO_ADD/BURST_SIZE; j++) {
- for (k = 0; k < BURST_SIZE; k++)
- keys_burst[k] = keys[j * BURST_SIZE + k];
- if (with_data) {
- ret = rte_hash_lookup_bulk_data(h[table_index],
- (const void **) keys_burst,
- BURST_SIZE,
- &hit_mask,
- ret_data);
- if (ret != BURST_SIZE) {
- printf("Expect to find %u keys,"
- " but found %d\n", BURST_SIZE, ret);
- return -1;
- }
- for (k = 0; k < BURST_SIZE; k++) {
- if ((hit_mask & (1ULL << k)) == 0) {
- printf("Key number %u not found\n",
- j * BURST_SIZE + k);
- return -1;
- }
- expected_data[k] = (void *) ((uintptr_t) signatures[j * BURST_SIZE + k]);
- if (ret_data[k] != expected_data[k]) {
- printf("Data returned for key number %u is %p,"
- " but should be %p\n", j * BURST_SIZE + k,
- ret_data[k], expected_data[k]);
- return -1;
- }
- }
- } else {
- rte_hash_lookup_bulk(h[table_index],
- (const void **) keys_burst,
- BURST_SIZE,
- positions_burst);
- for (k = 0; k < BURST_SIZE; k++) {
- if (positions_burst[k] != positions[j * BURST_SIZE + k]) {
- printf("Key looked up in %d, should be in %d\n",
- positions_burst[k],
- positions[j * BURST_SIZE + k]);
- return -1;
- }
- }
- }
- }
- }
-
- const uint64_t end_tsc = rte_rdtsc();
- const uint64_t time_taken = end_tsc - start_tsc;
-
- cycles[table_index][LOOKUP_MULTI][0][with_data] = time_taken/NUM_LOOKUPS;
-
- return 0;
-}
-
-static int
-timed_deletes(unsigned with_hash, unsigned with_data, unsigned table_index)
-{
- unsigned i;
- const uint64_t start_tsc = rte_rdtsc();
- int32_t ret;
-
- for (i = 0; i < KEYS_TO_ADD; i++) {
- /* There are no delete functions with data, so just call two functions */
- if (with_hash)
- ret = rte_hash_del_key_with_hash(h[table_index],
- (const void *) keys[i],
- signatures[i]);
- else
- ret = rte_hash_del_key(h[table_index],
- (const void *) keys[i]);
- if (ret >= 0)
- positions[i] = ret;
- else {
- printf("Failed to add key number %u\n", ret);
- return -1;
- }
- }
-
- const uint64_t end_tsc = rte_rdtsc();
- const uint64_t time_taken = end_tsc - start_tsc;
-
- cycles[table_index][DELETE][with_hash][with_data] = time_taken/KEYS_TO_ADD;
-
- return 0;
-}
-
-static void
-free_table(unsigned table_index)
-{
- rte_hash_free(h[table_index]);
-}
-
-static void
-reset_table(unsigned table_index)
-{
- rte_hash_reset(h[table_index]);
-}
-
-static int
-run_all_tbl_perf_tests(unsigned with_pushes)
-{
- unsigned i, j, with_data, with_hash;
-
- printf("Measuring performance, please wait");
- fflush(stdout);
-
- for (with_data = 0; with_data <= 1; with_data++) {
- for (i = 0; i < NUM_KEYSIZES; i++) {
- if (create_table(with_data, i) < 0)
- return -1;
-
- if (get_input_keys(with_pushes, i) < 0)
- return -1;
- for (with_hash = 0; with_hash <= 1; with_hash++) {
- if (timed_adds(with_hash, with_data, i) < 0)
- return -1;
-
- for (j = 0; j < NUM_SHUFFLES; j++)
- shuffle_input_keys(i);
-
- if (timed_lookups(with_hash, with_data, i) < 0)
- return -1;
-
- if (timed_lookups_multi(with_data, i) < 0)
- return -1;
-
- if (timed_deletes(with_hash, with_data, i) < 0)
- return -1;
-
- /* Print a dot to show progress on operations */
- printf(".");
- fflush(stdout);
-
- reset_table(i);
- }
- free_table(i);
- }
- }
-
- printf("\nResults (in CPU cycles/operation)\n");
- printf("-----------------------------------\n");
- for (with_data = 0; with_data <= 1; with_data++) {
- if (with_data)
- printf("\n Operations with 8-byte data\n");
- else
- printf("\n Operations without data\n");
- for (with_hash = 0; with_hash <= 1; with_hash++) {
- if (with_hash)
- printf("\nWith pre-computed hash values\n");
- else
- printf("\nWithout pre-computed hash values\n");
-
- printf("\n%-18s%-18s%-18s%-18s%-18s\n",
- "Keysize", "Add", "Lookup", "Lookup_bulk", "Delete");
- for (i = 0; i < NUM_KEYSIZES; i++) {
- printf("%-18d", hashtest_key_lens[i]);
- for (j = 0; j < NUM_OPERATIONS; j++)
- printf("%-18"PRIu64, cycles[i][j][with_hash][with_data]);
- printf("\n");
- }
- }
- }
- return 0;
-}
-
-/* Control operation of performance testing of fbk hash. */
-#define LOAD_FACTOR 0.667 /* How full to make the hash table. */
-#define TEST_SIZE 1000000 /* How many operations to time. */
-#define TEST_ITERATIONS 30 /* How many measurements to take. */
-#define ENTRIES (1 << 15) /* How many entries. */
-
-static int
-fbk_hash_perf_test(void)
-{
- struct rte_fbk_hash_params params = {
- .name = "fbk_hash_test",
- .entries = ENTRIES,
- .entries_per_bucket = 4,
- .socket_id = rte_socket_id(),
- };
- struct rte_fbk_hash_table *handle = NULL;
- uint32_t *keys = NULL;
- unsigned indexes[TEST_SIZE];
- uint64_t lookup_time = 0;
- unsigned added = 0;
- unsigned value = 0;
- uint32_t key;
- uint16_t val;
- unsigned i, j;
-
- handle = rte_fbk_hash_create(&params);
- if (handle == NULL) {
- printf("Error creating table\n");
- return -1;
- }
-
- keys = rte_zmalloc(NULL, ENTRIES * sizeof(*keys), 0);
- if (keys == NULL) {
- printf("fbk hash: memory allocation for key store failed\n");
- return -1;
- }
-
- /* Generate random keys and values. */
- for (i = 0; i < ENTRIES; i++) {
- key = (uint32_t)rte_rand();
- key = ((uint64_t)key << 32) | (uint64_t)rte_rand();
- val = (uint16_t)rte_rand();
-
- if (rte_fbk_hash_add_key(handle, key, val) == 0) {
- keys[added] = key;
- added++;
- }
- if (added > (LOAD_FACTOR * ENTRIES))
- break;
- }
-
- for (i = 0; i < TEST_ITERATIONS; i++) {
- uint64_t begin;
- uint64_t end;
-
- /* Generate random indexes into keys[] array. */
- for (j = 0; j < TEST_SIZE; j++)
- indexes[j] = rte_rand() % added;
-
- begin = rte_rdtsc();
- /* Do lookups */
- for (j = 0; j < TEST_SIZE; j++)
- value += rte_fbk_hash_lookup(handle, keys[indexes[j]]);
-
- end = rte_rdtsc();
- lookup_time += (double)(end - begin);
- }
-
- printf("\n\n *** FBK Hash function performance test results ***\n");
- /*
- * The use of the 'value' variable ensures that the hash lookup is not
- * being optimised out by the compiler.
- */
- if (value != 0)
- printf("Number of ticks per lookup = %g\n",
- (double)lookup_time /
- ((double)TEST_ITERATIONS * (double)TEST_SIZE));
-
- rte_fbk_hash_free(handle);
-
- return 0;
-}
-
-static int
-test_hash_perf(void)
-{
- unsigned with_pushes;
-
- for (with_pushes = 0; with_pushes <= 1; with_pushes++) {
- if (with_pushes == 0)
- printf("\nALL ELEMENTS IN PRIMARY LOCATION\n");
- else
- printf("\nELEMENTS IN PRIMARY OR SECONDARY LOCATION\n");
- if (run_all_tbl_perf_tests(with_pushes) < 0)
- return -1;
- }
- if (fbk_hash_perf_test() < 0)
- return -1;
-
- return 0;
-}
-
-REGISTER_TEST_COMMAND(hash_perf_autotest, test_hash_perf);
diff --git a/app/test/test_hash_scaling.c b/app/test/test_hash_scaling.c
deleted file mode 100644
index 46c48e54..00000000
--- a/app/test/test_hash_scaling.c
+++ /dev/null
@@ -1,220 +0,0 @@
-/*-
- * BSD LICENSE
- *
- * Copyright(c) 2015 Intel Corporation. All rights reserved.
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * * Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * * Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in
- * the documentation and/or other materials provided with the
- * distribution.
- * * Neither the name of Intel Corporation nor the names of its
- * contributors may be used to endorse or promote products derived
- * from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
- * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
- * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#include <stdio.h>
-
-#include <rte_cycles.h>
-#include <rte_hash.h>
-#include <rte_hash_crc.h>
-#include <rte_spinlock.h>
-#include <rte_launch.h>
-
-#include "test.h"
-
-/*
- * Check condition and return an error if true. Assumes that "handle" is the
- * name of the hash structure pointer to be freed.
- */
-#define RETURN_IF_ERROR(cond, str, ...) do { \
- if (cond) { \
- printf("ERROR line %d: " str "\n", __LINE__, \
- ##__VA_ARGS__); \
- if (handle) \
- rte_hash_free(handle); \
- return -1; \
- } \
-} while (0)
-
-enum locking_mode_t {
- NORMAL_LOCK,
- LOCK_ELISION,
- NULL_LOCK
-};
-
-struct {
- uint32_t num_iterations;
- struct rte_hash *h;
- rte_spinlock_t *lock;
- int locking_mode;
-} tbl_scaling_test_params;
-
-static rte_atomic64_t gcycles;
-
-static int test_hash_scaling_worker(__attribute__((unused)) void *arg)
-{
- uint64_t i, key;
- uint32_t thr_id = rte_sys_gettid();
- uint64_t begin, cycles = 0;
-
- switch (tbl_scaling_test_params.locking_mode) {
-
- case NORMAL_LOCK:
-
- for (i = 0; i < tbl_scaling_test_params.num_iterations; i++) {
- /* different threads get different keys because
- we use the thread-id in the key computation
- */
- key = rte_hash_crc(&i, sizeof(i), thr_id);
- begin = rte_rdtsc_precise();
- rte_spinlock_lock(tbl_scaling_test_params.lock);
- rte_hash_add_key(tbl_scaling_test_params.h, &key);
- rte_spinlock_unlock(tbl_scaling_test_params.lock);
- cycles += rte_rdtsc_precise() - begin;
- }
- break;
-
- case LOCK_ELISION:
-
- for (i = 0; i < tbl_scaling_test_params.num_iterations; i++) {
- key = rte_hash_crc(&i, sizeof(i), thr_id);
- begin = rte_rdtsc_precise();
- rte_spinlock_lock_tm(tbl_scaling_test_params.lock);
- rte_hash_add_key(tbl_scaling_test_params.h, &key);
- rte_spinlock_unlock_tm(tbl_scaling_test_params.lock);
- cycles += rte_rdtsc_precise() - begin;
- }
- break;
-
- default:
-
- for (i = 0; i < tbl_scaling_test_params.num_iterations; i++) {
- key = rte_hash_crc(&i, sizeof(i), thr_id);
- begin = rte_rdtsc_precise();
- rte_hash_add_key(tbl_scaling_test_params.h, &key);
- cycles += rte_rdtsc_precise() - begin;
- }
- }
-
- rte_atomic64_add(&gcycles, cycles);
-
- return 0;
-}
-
-/*
- * Do scalability perf tests.
- */
-static int
-test_hash_scaling(int locking_mode)
-{
- static unsigned calledCount = 1;
- uint32_t num_iterations = 1024*1024;
- uint64_t i, key;
- struct rte_hash_parameters hash_params = {
- .entries = num_iterations*2,
- .key_len = sizeof(key),
- .hash_func = rte_hash_crc,
- .hash_func_init_val = 0,
- .socket_id = rte_socket_id(),
- .extra_flag = RTE_HASH_EXTRA_FLAGS_TRANS_MEM_SUPPORT
- };
- struct rte_hash *handle;
- char name[RTE_HASH_NAMESIZE];
- rte_spinlock_t lock;
-
- rte_spinlock_init(&lock);
-
- snprintf(name, 32, "test%u", calledCount++);
- hash_params.name = name;
-
- handle = rte_hash_create(&hash_params);
- RETURN_IF_ERROR(handle == NULL, "hash creation failed");
-
- tbl_scaling_test_params.num_iterations =
- num_iterations/rte_lcore_count();
- tbl_scaling_test_params.h = handle;
- tbl_scaling_test_params.lock = &lock;
- tbl_scaling_test_params.locking_mode = locking_mode;
-
- rte_atomic64_init(&gcycles);
- rte_atomic64_clear(&gcycles);
-
- /* fill up to initial size */
- for (i = 0; i < num_iterations; i++) {
- key = rte_hash_crc(&i, sizeof(i), 0xabcdabcd);
- rte_hash_add_key(tbl_scaling_test_params.h, &key);
- }
-
- rte_eal_mp_remote_launch(test_hash_scaling_worker, NULL, CALL_MASTER);
- rte_eal_mp_wait_lcore();
-
- unsigned long long int cycles_per_operation =
- rte_atomic64_read(&gcycles)/
- (tbl_scaling_test_params.num_iterations*rte_lcore_count());
- const char *lock_name;
-
- switch (locking_mode) {
- case NORMAL_LOCK:
- lock_name = "normal spinlock";
- break;
- case LOCK_ELISION:
- lock_name = "lock elision";
- break;
- default:
- lock_name = "null lock";
- }
- printf("--------------------------------------------------------\n");
- printf("Cores: %d; %s mode -> cycles per operation: %llu\n",
- rte_lcore_count(), lock_name, cycles_per_operation);
- printf("--------------------------------------------------------\n");
- /* CSV output */
- printf(">>>%d,%s,%llu\n", rte_lcore_count(), lock_name,
- cycles_per_operation);
-
- rte_hash_free(handle);
- return 0;
-}
-
-static int
-test_hash_scaling_main(void)
-{
- int r = 0;
-
- if (rte_lcore_count() == 1)
- r = test_hash_scaling(NULL_LOCK);
-
- if (r == 0)
- r = test_hash_scaling(NORMAL_LOCK);
-
- if (!rte_tm_supported()) {
- printf("Hardware transactional memory (lock elision) is NOT supported\n");
- return r;
- }
- printf("Hardware transactional memory (lock elision) is supported\n");
-
- if (r == 0)
- r = test_hash_scaling(LOCK_ELISION);
-
- return r;
-}
-
-REGISTER_TEST_COMMAND(hash_scaling_autotest, test_hash_scaling_main);
diff --git a/app/test/test_interrupts.c b/app/test/test_interrupts.c
deleted file mode 100644
index 371101f0..00000000
--- a/app/test/test_interrupts.c
+++ /dev/null
@@ -1,551 +0,0 @@
-/*-
- * BSD LICENSE
- *
- * Copyright(c) 2010-2014 Intel Corporation. All rights reserved.
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * * Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * * Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in
- * the documentation and/or other materials provided with the
- * distribution.
- * * Neither the name of Intel Corporation nor the names of its
- * contributors may be used to endorse or promote products derived
- * from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
- * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
- * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#include <stdio.h>
-#include <stdint.h>
-#include <unistd.h>
-
-#include <rte_common.h>
-#include <rte_cycles.h>
-#include <rte_interrupts.h>
-
-#include "test.h"
-
-#define TEST_INTERRUPT_CHECK_INTERVAL 100 /* ms */
-
-/* predefined interrupt handle types */
-enum test_interrupt_handle_type {
- TEST_INTERRUPT_HANDLE_INVALID,
- TEST_INTERRUPT_HANDLE_VALID,
- TEST_INTERRUPT_HANDLE_VALID_UIO,
- TEST_INTERRUPT_HANDLE_VALID_ALARM,
- TEST_INTERRUPT_HANDLE_CASE1,
- TEST_INTERRUPT_HANDLE_MAX
-};
-
-/* flag of if callback is called */
-static volatile int flag;
-static struct rte_intr_handle intr_handles[TEST_INTERRUPT_HANDLE_MAX];
-static enum test_interrupt_handle_type test_intr_type =
- TEST_INTERRUPT_HANDLE_MAX;
-
-#ifdef RTE_EXEC_ENV_LINUXAPP
-union intr_pipefds{
- struct {
- int pipefd[2];
- };
- struct {
- int readfd;
- int writefd;
- };
-};
-
-static union intr_pipefds pfds;
-
-/**
- * Check if the interrupt handle is valid.
- */
-static inline int
-test_interrupt_handle_sanity_check(struct rte_intr_handle *intr_handle)
-{
- if (!intr_handle || intr_handle->fd < 0)
- return -1;
-
- return 0;
-}
-
-/**
- * Initialization for interrupt test.
- */
-static int
-test_interrupt_init(void)
-{
- if (pipe(pfds.pipefd) < 0)
- return -1;
-
- intr_handles[TEST_INTERRUPT_HANDLE_INVALID].fd = -1;
- intr_handles[TEST_INTERRUPT_HANDLE_INVALID].type =
- RTE_INTR_HANDLE_UNKNOWN;
-
- intr_handles[TEST_INTERRUPT_HANDLE_VALID].fd = pfds.readfd;
- intr_handles[TEST_INTERRUPT_HANDLE_VALID].type =
- RTE_INTR_HANDLE_UNKNOWN;
-
- intr_handles[TEST_INTERRUPT_HANDLE_VALID_UIO].fd = pfds.readfd;
- intr_handles[TEST_INTERRUPT_HANDLE_VALID_UIO].type =
- RTE_INTR_HANDLE_UIO;
-
- intr_handles[TEST_INTERRUPT_HANDLE_VALID_ALARM].fd = pfds.readfd;
- intr_handles[TEST_INTERRUPT_HANDLE_VALID_ALARM].type =
- RTE_INTR_HANDLE_ALARM;
-
- intr_handles[TEST_INTERRUPT_HANDLE_CASE1].fd = pfds.writefd;
- intr_handles[TEST_INTERRUPT_HANDLE_CASE1].type = RTE_INTR_HANDLE_UIO;
-
- return 0;
-}
-
-/**
- * Deinitialization for interrupt test.
- */
-static int
-test_interrupt_deinit(void)
-{
- close(pfds.pipefd[0]);
- close(pfds.pipefd[1]);
-
- return 0;
-}
-
-/**
- * Write the pipe to simulate an interrupt.
- */
-static int
-test_interrupt_trigger_interrupt(void)
-{
- if (write(pfds.writefd, "1", 1) < 0)
- return -1;
-
- return 0;
-}
-
-/**
- * Check if two interrupt handles are the same.
- */
-static int
-test_interrupt_handle_compare(struct rte_intr_handle *intr_handle_l,
- struct rte_intr_handle *intr_handle_r)
-{
- if (!intr_handle_l || !intr_handle_r)
- return -1;
-
- if (intr_handle_l->fd != intr_handle_r->fd ||
- intr_handle_l->type != intr_handle_r->type)
- return -1;
-
- return 0;
-}
-
-#else
-/* to be implemented for bsd later */
-static inline int
-test_interrupt_handle_sanity_check(struct rte_intr_handle *intr_handle)
-{
- RTE_SET_USED(intr_handle);
-
- return 0;
-}
-
-static int
-test_interrupt_init(void)
-{
- return 0;
-}
-
-static int
-test_interrupt_deinit(void)
-{
- return 0;
-}
-
-static int
-test_interrupt_trigger_interrupt(void)
-{
- return 0;
-}
-
-static int
-test_interrupt_handle_compare(struct rte_intr_handle *intr_handle_l,
- struct rte_intr_handle *intr_handle_r)
-{
- (void)intr_handle_l;
- (void)intr_handle_r;
-
- return 0;
-}
-#endif /* RTE_EXEC_ENV_LINUXAPP */
-
-/**
- * Callback for the test interrupt.
- */
-static void
-test_interrupt_callback(struct rte_intr_handle *intr_handle, void *arg)
-{
- if (test_intr_type >= TEST_INTERRUPT_HANDLE_MAX) {
- printf("invalid interrupt type\n");
- flag = -1;
- return;
- }
-
- if (test_interrupt_handle_sanity_check(intr_handle) < 0) {
- printf("null or invalid intr_handle for %s\n", __func__);
- flag = -1;
- return;
- }
-
- if (rte_intr_callback_unregister(intr_handle,
- test_interrupt_callback, arg) >= 0) {
- printf("%s: unexpectedly able to unregister itself\n",
- __func__);
- flag = -1;
- return;
- }
-
- if (test_interrupt_handle_compare(intr_handle,
- &(intr_handles[test_intr_type])) == 0)
- flag = 1;
-}
-
-/**
- * Callback for the test interrupt.
- */
-static void
-test_interrupt_callback_1(struct rte_intr_handle *intr_handle,
- __attribute__((unused)) void *arg)
-{
- if (test_interrupt_handle_sanity_check(intr_handle) < 0) {
- printf("null or invalid intr_handle for %s\n", __func__);
- flag = -1;
- return;
- }
-}
-
-/**
- * Tests for rte_intr_enable().
- */
-static int
-test_interrupt_enable(void)
-{
- struct rte_intr_handle test_intr_handle;
-
- /* check with null intr_handle */
- if (rte_intr_enable(NULL) == 0) {
- printf("unexpectedly enable null intr_handle successfully\n");
- return -1;
- }
-
- /* check with invalid intr_handle */
- test_intr_handle = intr_handles[TEST_INTERRUPT_HANDLE_INVALID];
- if (rte_intr_enable(&test_intr_handle) == 0) {
- printf("unexpectedly enable invalid intr_handle "
- "successfully\n");
- return -1;
- }
-
- /* check with valid intr_handle */
- test_intr_handle = intr_handles[TEST_INTERRUPT_HANDLE_VALID];
- if (rte_intr_enable(&test_intr_handle) == 0) {
- printf("unexpectedly enable a specific intr_handle "
- "successfully\n");
- return -1;
- }
-
- /* check with specific valid intr_handle */
- test_intr_handle = intr_handles[TEST_INTERRUPT_HANDLE_VALID_ALARM];
- if (rte_intr_enable(&test_intr_handle) == 0) {
- printf("unexpectedly enable a specific intr_handle "
- "successfully\n");
- return -1;
- }
-
- /* check with valid handler and its type */
- test_intr_handle = intr_handles[TEST_INTERRUPT_HANDLE_CASE1];
- if (rte_intr_enable(&test_intr_handle) < 0) {
- printf("fail to enable interrupt on a simulated handler\n");
- return -1;
- }
-
- test_intr_handle = intr_handles[TEST_INTERRUPT_HANDLE_VALID_UIO];
- if (rte_intr_enable(&test_intr_handle) == 0) {
- printf("unexpectedly enable a specific intr_handle "
- "successfully\n");
- return -1;
- }
-
- return 0;
-}
-
-/**
- * Tests for rte_intr_disable().
- */
-static int
-test_interrupt_disable(void)
-{
- struct rte_intr_handle test_intr_handle;
-
- /* check with null intr_handle */
- if (rte_intr_disable(NULL) == 0) {
- printf("unexpectedly disable null intr_handle "
- "successfully\n");
- return -1;
- }
-
- /* check with invalid intr_handle */
- test_intr_handle = intr_handles[TEST_INTERRUPT_HANDLE_INVALID];
- if (rte_intr_disable(&test_intr_handle) == 0) {
- printf("unexpectedly disable invalid intr_handle "
- "successfully\n");
- return -1;
- }
-
- /* check with valid intr_handle */
- test_intr_handle = intr_handles[TEST_INTERRUPT_HANDLE_VALID];
- if (rte_intr_disable(&test_intr_handle) == 0) {
- printf("unexpectedly disable a specific intr_handle "
- "successfully\n");
- return -1;
- }
-
- /* check with specific valid intr_handle */
- test_intr_handle = intr_handles[TEST_INTERRUPT_HANDLE_VALID_ALARM];
- if (rte_intr_disable(&test_intr_handle) == 0) {
- printf("unexpectedly disable a specific intr_handle "
- "successfully\n");
- return -1;
- }
-
- /* check with valid handler and its type */
- test_intr_handle = intr_handles[TEST_INTERRUPT_HANDLE_CASE1];
- if (rte_intr_disable(&test_intr_handle) < 0) {
- printf("fail to disable interrupt on a simulated handler\n");
- return -1;
- }
-
- test_intr_handle = intr_handles[TEST_INTERRUPT_HANDLE_VALID_UIO];
- if (rte_intr_disable(&test_intr_handle) == 0) {
- printf("unexpectedly disable a specific intr_handle "
- "successfully\n");
- return -1;
- }
-
- return 0;
-}
-
-/**
- * Check the full path of a specified type of interrupt simulated.
- */
-static int
-test_interrupt_full_path_check(enum test_interrupt_handle_type intr_type)
-{
- int count;
- struct rte_intr_handle test_intr_handle;
-
- flag = 0;
- test_intr_handle = intr_handles[intr_type];
- test_intr_type = intr_type;
- if (rte_intr_callback_register(&test_intr_handle,
- test_interrupt_callback, NULL) < 0) {
- printf("fail to register callback\n");
- return -1;
- }
-
- if (test_interrupt_trigger_interrupt() < 0)
- return -1;
-
- /* check flag */
- for (count = 0; flag == 0 && count < 3; count++)
- rte_delay_ms(TEST_INTERRUPT_CHECK_INTERVAL);
-
- rte_delay_ms(TEST_INTERRUPT_CHECK_INTERVAL);
- if (rte_intr_callback_unregister(&test_intr_handle,
- test_interrupt_callback, NULL) < 0)
- return -1;
-
- if (flag == 0) {
- printf("callback has not been called\n");
- return -1;
- } else if (flag < 0) {
- printf("it has internal error in callback\n");
- return -1;
- }
-
- return 0;
-}
-
-/**
- * Main function of testing interrupt.
- */
-static int
-test_interrupt(void)
-{
- int ret = -1;
- struct rte_intr_handle test_intr_handle;
-
- if (test_interrupt_init() < 0) {
- printf("fail to initialize for testing interrupt\n");
- return -1;
- }
-
- printf("Check unknown valid interrupt full path\n");
- if (test_interrupt_full_path_check(TEST_INTERRUPT_HANDLE_VALID) < 0) {
- printf("failure occured during checking unknown valid "
- "interrupt full path\n");
- goto out;
- }
-
- printf("Check valid UIO interrupt full path\n");
- if (test_interrupt_full_path_check(TEST_INTERRUPT_HANDLE_VALID_UIO)
- < 0) {
- printf("failure occured during checking valid UIO interrupt "
- "full path\n");
- goto out;
- }
-
- printf("Check valid alarm interrupt full path\n");
- if (test_interrupt_full_path_check(TEST_INTERRUPT_HANDLE_VALID_ALARM)
- < 0) {
- printf("failure occured during checking valid alarm "
- "interrupt full path\n");
- goto out;
- }
-
- printf("start register/unregister test\n");
- /* check if it will fail to register cb with intr_handle = NULL */
- if (rte_intr_callback_register(NULL, test_interrupt_callback,
- NULL) == 0) {
- printf("unexpectedly register successfully with null "
- "intr_handle\n");
- goto out;
- }
-
- /* check if it will fail to register cb with invalid intr_handle */
- test_intr_handle = intr_handles[TEST_INTERRUPT_HANDLE_INVALID];
- if (rte_intr_callback_register(&test_intr_handle,
- test_interrupt_callback, NULL) == 0) {
- printf("unexpectedly register successfully with invalid "
- "intr_handle\n");
- goto out;
- }
-
- /* check if it will fail to register without callback */
- test_intr_handle = intr_handles[TEST_INTERRUPT_HANDLE_VALID];
- if (rte_intr_callback_register(&test_intr_handle, NULL, NULL) == 0) {
- printf("unexpectedly register successfully with "
- "null callback\n");
- goto out;
- }
-
- /* check if it will fail to unregister cb with intr_handle = NULL */
- if (rte_intr_callback_unregister(NULL,
- test_interrupt_callback, NULL) > 0) {
- printf("unexpectedly unregister successfully with "
- "null intr_handle\n");
- goto out;
- }
-
- /* check if it will fail to unregister cb with invalid intr_handle */
- test_intr_handle = intr_handles[TEST_INTERRUPT_HANDLE_INVALID];
- if (rte_intr_callback_unregister(&test_intr_handle,
- test_interrupt_callback, NULL) > 0) {
- printf("unexpectedly unregister successfully with "
- "invalid intr_handle\n");
- goto out;
- }
-
- /* check if it is ok to register the same intr_handle twice */
- test_intr_handle = intr_handles[TEST_INTERRUPT_HANDLE_VALID];
- if (rte_intr_callback_register(&test_intr_handle,
- test_interrupt_callback, NULL) < 0) {
- printf("it fails to register test_interrupt_callback\n");
- goto out;
- }
- if (rte_intr_callback_register(&test_intr_handle,
- test_interrupt_callback_1, NULL) < 0) {
- printf("it fails to register test_interrupt_callback_1\n");
- goto out;
- }
- /* check if it will fail to unregister with invalid parameter */
- if (rte_intr_callback_unregister(&test_intr_handle,
- test_interrupt_callback, (void *)0xff) != 0) {
- printf("unexpectedly unregisters successfully with "
- "invalid arg\n");
- goto out;
- }
- if (rte_intr_callback_unregister(&test_intr_handle,
- test_interrupt_callback, NULL) <= 0) {
- printf("it fails to unregister test_interrupt_callback\n");
- goto out;
- }
- if (rte_intr_callback_unregister(&test_intr_handle,
- test_interrupt_callback_1, (void *)-1) <= 0) {
- printf("it fails to unregister test_interrupt_callback_1 "
- "for all\n");
- goto out;
- }
- rte_delay_ms(TEST_INTERRUPT_CHECK_INTERVAL);
-
- printf("start interrupt enable/disable test\n");
- /* check interrupt enable/disable functions */
- if (test_interrupt_enable() < 0) {
- printf("fail to check interrupt enabling\n");
- goto out;
- }
- rte_delay_ms(TEST_INTERRUPT_CHECK_INTERVAL);
-
- if (test_interrupt_disable() < 0) {
- printf("fail to check interrupt disabling\n");
- goto out;
- }
- rte_delay_ms(TEST_INTERRUPT_CHECK_INTERVAL);
-
- ret = 0;
-
-out:
- printf("Clearing for interrupt tests\n");
- /* clear registered callbacks */
- test_intr_handle = intr_handles[TEST_INTERRUPT_HANDLE_VALID];
- rte_intr_callback_unregister(&test_intr_handle,
- test_interrupt_callback, (void *)-1);
- rte_intr_callback_unregister(&test_intr_handle,
- test_interrupt_callback_1, (void *)-1);
-
- test_intr_handle = intr_handles[TEST_INTERRUPT_HANDLE_VALID_UIO];
- rte_intr_callback_unregister(&test_intr_handle,
- test_interrupt_callback, (void *)-1);
- rte_intr_callback_unregister(&test_intr_handle,
- test_interrupt_callback_1, (void *)-1);
-
- test_intr_handle = intr_handles[TEST_INTERRUPT_HANDLE_VALID_ALARM];
- rte_intr_callback_unregister(&test_intr_handle,
- test_interrupt_callback, (void *)-1);
- rte_intr_callback_unregister(&test_intr_handle,
- test_interrupt_callback_1, (void *)-1);
-
- rte_delay_ms(2 * TEST_INTERRUPT_CHECK_INTERVAL);
- /* deinit */
- test_interrupt_deinit();
-
- return ret;
-}
-
-REGISTER_TEST_COMMAND(interrupt_autotest, test_interrupt);
diff --git a/app/test/test_kni.c b/app/test/test_kni.c
deleted file mode 100644
index 309741cb..00000000
--- a/app/test/test_kni.c
+++ /dev/null
@@ -1,636 +0,0 @@
-/*-
- * BSD LICENSE
- *
- * Copyright(c) 2010-2014 Intel Corporation. All rights reserved.
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * * Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * * Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in
- * the documentation and/or other materials provided with the
- * distribution.
- * * Neither the name of Intel Corporation nor the names of its
- * contributors may be used to endorse or promote products derived
- * from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
- * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
- * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#include <stdio.h>
-#include <stdint.h>
-#include <unistd.h>
-#include <string.h>
-#include <sys/wait.h>
-
-#include "test.h"
-
-#include <rte_string_fns.h>
-#include <rte_mempool.h>
-#include <rte_ethdev.h>
-#include <rte_cycles.h>
-#include <rte_kni.h>
-
-#define NB_MBUF 8192
-#define MAX_PACKET_SZ 2048
-#define MBUF_DATA_SZ (MAX_PACKET_SZ + RTE_PKTMBUF_HEADROOM)
-#define PKT_BURST_SZ 32
-#define MEMPOOL_CACHE_SZ PKT_BURST_SZ
-#define SOCKET 0
-#define NB_RXD 128
-#define NB_TXD 512
-#define KNI_TIMEOUT_MS 5000 /* ms */
-
-#define IFCONFIG "/sbin/ifconfig "
-#define TEST_KNI_PORT "test_kni_port"
-#define KNI_TEST_MAX_PORTS 4
-/* The threshold number of mbufs to be transmitted or received. */
-#define KNI_NUM_MBUF_THRESHOLD 100
-static int kni_pkt_mtu = 0;
-
-struct test_kni_stats {
- volatile uint64_t ingress;
- volatile uint64_t egress;
-};
-
-static const struct rte_eth_rxconf rx_conf = {
- .rx_thresh = {
- .pthresh = 8,
- .hthresh = 8,
- .wthresh = 4,
- },
- .rx_free_thresh = 0,
-};
-
-static const struct rte_eth_txconf tx_conf = {
- .tx_thresh = {
- .pthresh = 36,
- .hthresh = 0,
- .wthresh = 0,
- },
- .tx_free_thresh = 0,
- .tx_rs_thresh = 0,
-};
-
-static const struct rte_eth_conf port_conf = {
- .rxmode = {
- .header_split = 0,
- .hw_ip_checksum = 0,
- .hw_vlan_filter = 0,
- .jumbo_frame = 0,
- .hw_strip_crc = 0,
- },
- .txmode = {
- .mq_mode = ETH_DCB_NONE,
- },
-};
-
-static struct rte_kni_ops kni_ops = {
- .change_mtu = NULL,
- .config_network_if = NULL,
-};
-
-static unsigned lcore_master, lcore_ingress, lcore_egress;
-static struct rte_kni *test_kni_ctx;
-static struct test_kni_stats stats;
-
-static volatile uint32_t test_kni_processing_flag;
-
-static struct rte_mempool *
-test_kni_create_mempool(void)
-{
- struct rte_mempool * mp;
-
- mp = rte_mempool_lookup("kni_mempool");
- if (!mp)
- mp = rte_pktmbuf_pool_create("kni_mempool",
- NB_MBUF,
- MEMPOOL_CACHE_SZ, 0, MBUF_DATA_SZ,
- SOCKET);
-
- return mp;
-}
-
-static struct rte_mempool *
-test_kni_lookup_mempool(void)
-{
- return rte_mempool_lookup("kni_mempool");
-}
-/* Callback for request of changing MTU */
-static int
-kni_change_mtu(uint8_t port_id, unsigned new_mtu)
-{
- printf("Change MTU of port %d to %u\n", port_id, new_mtu);
- kni_pkt_mtu = new_mtu;
- printf("Change MTU of port %d to %i successfully.\n",
- port_id, kni_pkt_mtu);
- return 0;
-}
-/**
- * This loop fully tests the basic functions of KNI. e.g. transmitting,
- * receiving to, from kernel space, and kernel requests.
- *
- * This is the loop to transmit/receive mbufs to/from kernel interface with
- * supported by KNI kernel module. The ingress lcore will allocate mbufs and
- * transmit them to kernel space; while the egress lcore will receive the mbufs
- * from kernel space and free them.
- * On the master lcore, several commands will be run to check handling the
- * kernel requests. And it will finally set the flag to exit the KNI
- * transmitting/receiving to/from the kernel space.
- *
- * Note: To support this testing, the KNI kernel module needs to be insmodded
- * in one of its loopback modes.
- */
-static int
-test_kni_loop(__rte_unused void *arg)
-{
- int ret = 0;
- unsigned nb_rx, nb_tx, num, i;
- const unsigned lcore_id = rte_lcore_id();
- struct rte_mbuf *pkts_burst[PKT_BURST_SZ];
-
- if (lcore_id == lcore_master) {
- rte_delay_ms(KNI_TIMEOUT_MS);
- /* tests of handling kernel request */
- if (system(IFCONFIG TEST_KNI_PORT" up") == -1)
- ret = -1;
- if (system(IFCONFIG TEST_KNI_PORT" mtu 1400") == -1)
- ret = -1;
- if (system(IFCONFIG TEST_KNI_PORT" down") == -1)
- ret = -1;
- rte_delay_ms(KNI_TIMEOUT_MS);
- test_kni_processing_flag = 1;
- } else if (lcore_id == lcore_ingress) {
- struct rte_mempool *mp = test_kni_lookup_mempool();
-
- if (mp == NULL)
- return -1;
-
- while (1) {
- if (test_kni_processing_flag)
- break;
-
- for (nb_rx = 0; nb_rx < PKT_BURST_SZ; nb_rx++) {
- pkts_burst[nb_rx] = rte_pktmbuf_alloc(mp);
- if (!pkts_burst[nb_rx])
- break;
- }
-
- num = rte_kni_tx_burst(test_kni_ctx, pkts_burst,
- nb_rx);
- stats.ingress += num;
- rte_kni_handle_request(test_kni_ctx);
- if (num < nb_rx) {
- for (i = num; i < nb_rx; i++) {
- rte_pktmbuf_free(pkts_burst[i]);
- }
- }
- rte_delay_ms(10);
- }
- } else if (lcore_id == lcore_egress) {
- while (1) {
- if (test_kni_processing_flag)
- break;
- num = rte_kni_rx_burst(test_kni_ctx, pkts_burst,
- PKT_BURST_SZ);
- stats.egress += num;
- for (nb_tx = 0; nb_tx < num; nb_tx++)
- rte_pktmbuf_free(pkts_burst[nb_tx]);
- rte_delay_ms(10);
- }
- }
-
- return ret;
-}
-
-static int
-test_kni_allocate_lcores(void)
-{
- unsigned i, count = 0;
-
- lcore_master = rte_get_master_lcore();
- printf("master lcore: %u\n", lcore_master);
- for (i = 0; i < RTE_MAX_LCORE; i++) {
- if (count >=2 )
- break;
- if (rte_lcore_is_enabled(i) && i != lcore_master) {
- count ++;
- if (count == 1)
- lcore_ingress = i;
- else if (count == 2)
- lcore_egress = i;
- }
- }
- printf("count: %u\n", count);
-
- return count == 2 ? 0 : -1;
-}
-
-static int
-test_kni_register_handler_mp(void)
-{
-#define TEST_KNI_HANDLE_REQ_COUNT 10 /* 5s */
-#define TEST_KNI_HANDLE_REQ_INTERVAL 500 /* ms */
-#define TEST_KNI_MTU 1450
-#define TEST_KNI_MTU_STR " 1450"
- int pid;
-
- pid = fork();
- if (pid < 0) {
- printf("Failed to fork a process\n");
- return -1;
- } else if (pid == 0) {
- int i;
- struct rte_kni *kni = rte_kni_get(TEST_KNI_PORT);
- struct rte_kni_ops ops = {
- .change_mtu = kni_change_mtu,
- .config_network_if = NULL,
- };
-
- if (!kni) {
- printf("Failed to get KNI named %s\n", TEST_KNI_PORT);
- exit(-1);
- }
-
- kni_pkt_mtu = 0;
-
- /* Check with the invalid parameters */
- if (rte_kni_register_handlers(kni, NULL) == 0) {
- printf("Unexpectedly register successuflly "
- "with NULL ops pointer\n");
- exit(-1);
- }
- if (rte_kni_register_handlers(NULL, &ops) == 0) {
- printf("Unexpectedly register successfully "
- "to NULL KNI device pointer\n");
- exit(-1);
- }
-
- if (rte_kni_register_handlers(kni, &ops)) {
- printf("Fail to register ops\n");
- exit(-1);
- }
-
- /* Check registering again after it has been registered */
- if (rte_kni_register_handlers(kni, &ops) == 0) {
- printf("Unexpectedly register successfully after "
- "it has already been registered\n");
- exit(-1);
- }
-
- /**
- * Handle the request of setting MTU,
- * with registered handlers.
- */
- for (i = 0; i < TEST_KNI_HANDLE_REQ_COUNT; i++) {
- rte_kni_handle_request(kni);
- if (kni_pkt_mtu == TEST_KNI_MTU)
- break;
- rte_delay_ms(TEST_KNI_HANDLE_REQ_INTERVAL);
- }
- if (i >= TEST_KNI_HANDLE_REQ_COUNT) {
- printf("MTU has not been set\n");
- exit(-1);
- }
-
- kni_pkt_mtu = 0;
- if (rte_kni_unregister_handlers(kni) < 0) {
- printf("Fail to unregister ops\n");
- exit(-1);
- }
-
- /* Check with invalid parameter */
- if (rte_kni_unregister_handlers(NULL) == 0) {
- exit(-1);
- }
-
- /**
- * Handle the request of setting MTU,
- * without registered handlers.
- */
- for (i = 0; i < TEST_KNI_HANDLE_REQ_COUNT; i++) {
- rte_kni_handle_request(kni);
- if (kni_pkt_mtu != 0)
- break;
- rte_delay_ms(TEST_KNI_HANDLE_REQ_INTERVAL);
- }
- if (kni_pkt_mtu != 0) {
- printf("MTU shouldn't be set\n");
- exit(-1);
- }
-
- exit(0);
- } else {
- int p_ret, status;
-
- rte_delay_ms(1000);
- if (system(IFCONFIG TEST_KNI_PORT " mtu" TEST_KNI_MTU_STR)
- == -1)
- return -1;
-
- rte_delay_ms(1000);
- if (system(IFCONFIG TEST_KNI_PORT " mtu" TEST_KNI_MTU_STR)
- == -1)
- return -1;
-
- p_ret = wait(&status);
- if (!WIFEXITED(status)) {
- printf("Child process (%d) exit abnormally\n", p_ret);
- return -1;
- }
- if (WEXITSTATUS(status) != 0) {
- printf("Child process exit with failure\n");
- return -1;
- }
- }
-
- return 0;
-}
-
-static int
-test_kni_processing(uint8_t port_id, struct rte_mempool *mp)
-{
- int ret = 0;
- unsigned i;
- struct rte_kni *kni;
- struct rte_kni_conf conf;
- struct rte_eth_dev_info info;
- struct rte_kni_ops ops;
-
- if (!mp)
- return -1;
-
- memset(&conf, 0, sizeof(conf));
- memset(&info, 0, sizeof(info));
- memset(&ops, 0, sizeof(ops));
-
- rte_eth_dev_info_get(port_id, &info);
- conf.addr = info.pci_dev->addr;
- conf.id = info.pci_dev->id;
- snprintf(conf.name, sizeof(conf.name), TEST_KNI_PORT);
-
- /* core id 1 configured for kernel thread */
- conf.core_id = 1;
- conf.force_bind = 1;
- conf.mbuf_size = MAX_PACKET_SZ;
- conf.group_id = (uint16_t)port_id;
-
- ops = kni_ops;
- ops.port_id = port_id;
-
- /* basic test of kni processing */
- kni = rte_kni_alloc(mp, &conf, &ops);
- if (!kni) {
- printf("fail to create kni\n");
- return -1;
- }
-
- test_kni_ctx = kni;
- test_kni_processing_flag = 0;
- stats.ingress = 0;
- stats.egress = 0;
-
- /**
- * Check multiple processes support on
- * registerring/unregisterring handlers.
- */
- if (test_kni_register_handler_mp() < 0) {
- printf("fail to check multiple process support\n");
- ret = -1;
- goto fail_kni;
- }
-
- rte_eal_mp_remote_launch(test_kni_loop, NULL, CALL_MASTER);
- RTE_LCORE_FOREACH_SLAVE(i) {
- if (rte_eal_wait_lcore(i) < 0) {
- ret = -1;
- goto fail_kni;
- }
- }
- /**
- * Check if the number of mbufs received from kernel space is equal
- * to that of transmitted to kernel space
- */
- if (stats.ingress < KNI_NUM_MBUF_THRESHOLD ||
- stats.egress < KNI_NUM_MBUF_THRESHOLD) {
- printf("The ingress/egress number should not be "
- "less than %u\n", (unsigned)KNI_NUM_MBUF_THRESHOLD);
- ret = -1;
- goto fail_kni;
- }
-
- if (rte_kni_release(kni) < 0) {
- printf("fail to release kni\n");
- return -1;
- }
- test_kni_ctx = NULL;
-
- /* test of releasing a released kni device */
- if (rte_kni_release(kni) == 0) {
- printf("should not release a released kni device\n");
- return -1;
- }
-
- /* test of reusing memzone */
- kni = rte_kni_alloc(mp, &conf, &ops);
- if (!kni) {
- printf("fail to create kni\n");
- return -1;
- }
-
- /* Release the kni for following testing */
- if (rte_kni_release(kni) < 0) {
- printf("fail to release kni\n");
- return -1;
- }
-
- return ret;
-fail_kni:
- if (rte_kni_release(kni) < 0) {
- printf("fail to release kni\n");
- ret = -1;
- }
-
- return ret;
-}
-
-static int
-test_kni(void)
-{
- int ret = -1;
- uint8_t nb_ports, port_id;
- struct rte_kni *kni;
- struct rte_mempool *mp;
- struct rte_kni_conf conf;
- struct rte_eth_dev_info info;
- struct rte_kni_ops ops;
-
- /* Initialize KNI subsytem */
- rte_kni_init(KNI_TEST_MAX_PORTS);
-
- if (test_kni_allocate_lcores() < 0) {
- printf("No enough lcores for kni processing\n");
- return -1;
- }
-
- mp = test_kni_create_mempool();
- if (!mp) {
- printf("fail to create mempool for kni\n");
- return -1;
- }
-
- nb_ports = rte_eth_dev_count();
- if (nb_ports == 0) {
- printf("no supported nic port found\n");
- return -1;
- }
-
- /* configuring port 0 for the test is enough */
- port_id = 0;
- ret = rte_eth_dev_configure(port_id, 1, 1, &port_conf);
- if (ret < 0) {
- printf("fail to configure port %d\n", port_id);
- return -1;
- }
-
- ret = rte_eth_rx_queue_setup(port_id, 0, NB_RXD, SOCKET, &rx_conf, mp);
- if (ret < 0) {
- printf("fail to setup rx queue for port %d\n", port_id);
- return -1;
- }
-
- ret = rte_eth_tx_queue_setup(port_id, 0, NB_TXD, SOCKET, &tx_conf);
- if (ret < 0) {
- printf("fail to setup tx queue for port %d\n", port_id);
- return -1;
- }
-
- ret = rte_eth_dev_start(port_id);
- if (ret < 0) {
- printf("fail to start port %d\n", port_id);
- return -1;
- }
- rte_eth_promiscuous_enable(port_id);
-
- /* basic test of kni processing */
- ret = test_kni_processing(port_id, mp);
- if (ret < 0)
- goto fail;
-
- /* test of allocating KNI with NULL mempool pointer */
- memset(&info, 0, sizeof(info));
- memset(&conf, 0, sizeof(conf));
- memset(&ops, 0, sizeof(ops));
- rte_eth_dev_info_get(port_id, &info);
- conf.addr = info.pci_dev->addr;
- conf.id = info.pci_dev->id;
- conf.group_id = (uint16_t)port_id;
- conf.mbuf_size = MAX_PACKET_SZ;
-
- ops = kni_ops;
- ops.port_id = port_id;
- kni = rte_kni_alloc(NULL, &conf, &ops);
- if (kni) {
- ret = -1;
- printf("unexpectedly creates kni successfully with NULL "
- "mempool pointer\n");
- goto fail;
- }
-
- /* test of allocating KNI without configurations */
- kni = rte_kni_alloc(mp, NULL, NULL);
- if (kni) {
- ret = -1;
- printf("Unexpectedly allocate KNI device successfully "
- "without configurations\n");
- goto fail;
- }
-
- /* test of allocating KNI without a name */
- memset(&conf, 0, sizeof(conf));
- memset(&info, 0, sizeof(info));
- memset(&ops, 0, sizeof(ops));
- rte_eth_dev_info_get(port_id, &info);
- conf.addr = info.pci_dev->addr;
- conf.id = info.pci_dev->id;
- conf.group_id = (uint16_t)port_id;
- conf.mbuf_size = MAX_PACKET_SZ;
-
- ops = kni_ops;
- ops.port_id = port_id;
- kni = rte_kni_alloc(mp, &conf, &ops);
- if (kni) {
- ret = -1;
- printf("Unexpectedly allocate a KNI device successfully "
- "without a name\n");
- goto fail;
- }
-
- /* test of releasing NULL kni context */
- ret = rte_kni_release(NULL);
- if (ret == 0) {
- ret = -1;
- printf("unexpectedly release kni successfully\n");
- goto fail;
- }
-
- /* test of handling request on NULL device pointer */
- ret = rte_kni_handle_request(NULL);
- if (ret == 0) {
- ret = -1;
- printf("Unexpectedly handle request on NULL device pointer\n");
- goto fail;
- }
-
- /* test of getting KNI device with pointer to NULL */
- kni = rte_kni_get(NULL);
- if (kni) {
- ret = -1;
- printf("Unexpectedly get a KNI device with "
- "NULL name pointer\n");
- goto fail;
- }
-
- /* test of getting KNI device with an zero length name string */
- memset(&conf, 0, sizeof(conf));
- kni = rte_kni_get(conf.name);
- if (kni) {
- ret = -1;
- printf("Unexpectedly get a KNI device with "
- "zero length name string\n");
- goto fail;
- }
-
- /* test of getting KNI device with an invalid string name */
- memset(&conf, 0, sizeof(conf));
- snprintf(conf.name, sizeof(conf.name), "testing");
- kni = rte_kni_get(conf.name);
- if (kni) {
- ret = -1;
- printf("Unexpectedly get a KNI device with "
- "a never used name string\n");
- goto fail;
- }
- ret = 0;
-
-fail:
- rte_eth_dev_stop(port_id);
-
- return ret;
-}
-
-REGISTER_TEST_COMMAND(kni_autotest, test_kni);
diff --git a/app/test/test_kvargs.c b/app/test/test_kvargs.c
deleted file mode 100644
index 4d9e805b..00000000
--- a/app/test/test_kvargs.c
+++ /dev/null
@@ -1,235 +0,0 @@
-/*
- * Copyright 2014 6WIND S.A.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * - Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- *
- * - Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in
- * the documentation and/or other materials provided with the
- * distribution.
- *
- * - Neither the name of 6WIND S.A. nor the names of its
- * contributors may be used to endorse or promote products derived
- * from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
- * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
- * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
- * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
- * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
- * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
- * OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#include <stdlib.h>
-#include <stdio.h>
-#include <string.h>
-
-#include <rte_common.h>
-#include <rte_kvargs.h>
-
-#include "test.h"
-
-/* incrementd in handler, to check it is properly called once per
- * key/value association */
-static unsigned count;
-
-/* this handler increment the "count" variable at each call and check
- * that the key is "check" and the value is "value%d" */
-static int check_handler(const char *key, const char *value,
- __rte_unused void *opaque)
-{
- char buf[16];
-
- /* we check that the value is "check" */
- if (strcmp(key, "check"))
- return -1;
-
- /* we check that the value is "value$(count)" */
- snprintf(buf, sizeof(buf), "value%d", count);
- if (strncmp(buf, value, sizeof(buf)))
- return -1;
-
- count ++;
- return 0;
-}
-
-/* test a valid case */
-static int test_valid_kvargs(void)
-{
- struct rte_kvargs *kvlist;
- const char *args;
- const char *valid_keys_list[] = { "foo", "check", NULL };
- const char **valid_keys;
-
- /* empty args is valid */
- args = "";
- valid_keys = NULL;
- kvlist = rte_kvargs_parse(args, valid_keys);
- if (kvlist == NULL) {
- printf("rte_kvargs_parse() error");
- goto fail;
- }
- rte_kvargs_free(kvlist);
-
- /* first test without valid_keys */
- args = "foo=1234,check=value0,check=value1";
- valid_keys = NULL;
- kvlist = rte_kvargs_parse(args, valid_keys);
- if (kvlist == NULL) {
- printf("rte_kvargs_parse() error");
- goto fail;
- }
- /* call check_handler() for all entries with key="check" */
- count = 0;
- if (rte_kvargs_process(kvlist, "check", check_handler, NULL) < 0) {
- printf("rte_kvargs_process() error\n");
- rte_kvargs_free(kvlist);
- goto fail;
- }
- if (count != 2) {
- printf("invalid count value %d after rte_kvargs_process(check)\n",
- count);
- rte_kvargs_free(kvlist);
- goto fail;
- }
- count = 0;
- /* call check_handler() for all entries with key="unexistant_key" */
- if (rte_kvargs_process(kvlist, "unexistant_key", check_handler, NULL) < 0) {
- printf("rte_kvargs_process() error\n");
- rte_kvargs_free(kvlist);
- goto fail;
- }
- if (count != 0) {
- printf("invalid count value %d after rte_kvargs_process(unexistant_key)\n",
- count);
- rte_kvargs_free(kvlist);
- goto fail;
- }
- /* count all entries with key="foo" */
- count = rte_kvargs_count(kvlist, "foo");
- if (count != 1) {
- printf("invalid count value %d after rte_kvargs_count(foo)\n",
- count);
- rte_kvargs_free(kvlist);
- goto fail;
- }
- /* count all entries */
- count = rte_kvargs_count(kvlist, NULL);
- if (count != 3) {
- printf("invalid count value %d after rte_kvargs_count(NULL)\n",
- count);
- rte_kvargs_free(kvlist);
- goto fail;
- }
- /* count all entries with key="unexistant_key" */
- count = rte_kvargs_count(kvlist, "unexistant_key");
- if (count != 0) {
- printf("invalid count value %d after rte_kvargs_count(unexistant_key)\n",
- count);
- rte_kvargs_free(kvlist);
- goto fail;
- }
- rte_kvargs_free(kvlist);
-
- /* second test using valid_keys */
- args = "foo=droids,check=value0,check=value1,check=wrong_value";
- valid_keys = valid_keys_list;
- kvlist = rte_kvargs_parse(args, valid_keys);
- if (kvlist == NULL) {
- printf("rte_kvargs_parse() error");
- goto fail;
- }
- /* call check_handler() on all entries with key="check", it
- * should fail as the value is not recognized by the handler */
- if (rte_kvargs_process(kvlist, "check", check_handler, NULL) == 0) {
- printf("rte_kvargs_process() is success bu should not\n");
- rte_kvargs_free(kvlist);
- goto fail;
- }
- count = rte_kvargs_count(kvlist, "check");
- if (count != 3) {
- printf("invalid count value %d after rte_kvargs_count(check)\n",
- count);
- rte_kvargs_free(kvlist);
- goto fail;
- }
- rte_kvargs_free(kvlist);
-
- return 0;
-
- fail:
- printf("while processing <%s>", args);
- if (valid_keys != NULL && *valid_keys != NULL) {
- printf(" using valid_keys=<%s", *valid_keys);
- while (*(++valid_keys) != NULL)
- printf(",%s", *valid_keys);
- printf(">");
- }
- printf("\n");
- return -1;
-}
-
-/* test several error cases */
-static int test_invalid_kvargs(void)
-{
- struct rte_kvargs *kvlist;
- /* list of argument that should fail */
- const char *args_list[] = {
- "wrong-key=x", /* key not in valid_keys_list */
- "foo=1,foo=", /* empty value */
- "foo=1,,foo=2", /* empty key/value */
- "foo=1,foo", /* no value */
- "foo=1,=2", /* no key */
- ",=", /* also test with a smiley */
- NULL };
- const char **args;
- const char *valid_keys_list[] = { "foo", "check", NULL };
- const char **valid_keys = valid_keys_list;
-
- for (args = args_list; *args != NULL; args++) {
-
- kvlist = rte_kvargs_parse(*args, valid_keys);
- if (kvlist != NULL) {
- printf("rte_kvargs_parse() returned 0 (but should not)\n");
- rte_kvargs_free(kvlist);
- goto fail;
- }
- return 0;
- }
-
- fail:
- printf("while processing <%s>", *args);
- if (valid_keys != NULL && *valid_keys != NULL) {
- printf(" using valid_keys=<%s", *valid_keys);
- while (*(++valid_keys) != NULL)
- printf(",%s", *valid_keys);
- printf(">");
- }
- printf("\n");
- return -1;
-}
-
-static int
-test_kvargs(void)
-{
- printf("== test valid case ==\n");
- if (test_valid_kvargs() < 0)
- return -1;
- printf("== test invalid case ==\n");
- if (test_invalid_kvargs() < 0)
- return -1;
- return 0;
-}
-
-REGISTER_TEST_COMMAND(kvargs_autotest, test_kvargs);
diff --git a/app/test/test_link_bonding.c b/app/test/test_link_bonding.c
deleted file mode 100644
index 32296604..00000000
--- a/app/test/test_link_bonding.c
+++ /dev/null
@@ -1,5005 +0,0 @@
-/*-
- * BSD LICENSE
- *
- * Copyright(c) 2010-2014 Intel Corporation. All rights reserved.
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * * Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * * Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in
- * the documentation and/or other materials provided with the
- * distribution.
- * * Neither the name of Intel Corporation nor the names of its
- * contributors may be used to endorse or promote products derived
- * from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
- * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
- * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#include "unistd.h"
-#include <string.h>
-#include <stdarg.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <stdint.h>
-#include <inttypes.h>
-#include <errno.h>
-#include <sys/queue.h>
-#include <sys/time.h>
-#include <rte_cycles.h>
-#include <rte_byteorder.h>
-#include <rte_common.h>
-#include <rte_debug.h>
-#include <rte_ethdev.h>
-#include <rte_log.h>
-#include <rte_lcore.h>
-#include <rte_memory.h>
-#include <rte_string_fns.h>
-#include <rte_eth_bond.h>
-
-#include "virtual_pmd.h"
-#include "packet_burst_generator.h"
-
-#include "test.h"
-
-#define TEST_MAX_NUMBER_OF_PORTS (6)
-
-#define RX_RING_SIZE 128
-#define RX_FREE_THRESH 32
-#define RX_PTHRESH 8
-#define RX_HTHRESH 8
-#define RX_WTHRESH 0
-
-#define TX_RING_SIZE 512
-#define TX_FREE_THRESH 32
-#define TX_PTHRESH 32
-#define TX_HTHRESH 0
-#define TX_WTHRESH 0
-#define TX_RSBIT_THRESH 32
-#define TX_Q_FLAGS (ETH_TXQ_FLAGS_NOMULTSEGS | ETH_TXQ_FLAGS_NOVLANOFFL |\
- ETH_TXQ_FLAGS_NOXSUMSCTP | ETH_TXQ_FLAGS_NOXSUMUDP | \
- ETH_TXQ_FLAGS_NOXSUMTCP)
-
-#define MBUF_CACHE_SIZE (250)
-#define BURST_SIZE (32)
-
-#define RTE_TEST_RX_DESC_MAX (2048)
-#define RTE_TEST_TX_DESC_MAX (2048)
-#define MAX_PKT_BURST (512)
-#define DEF_PKT_BURST (16)
-
-#define BONDED_DEV_NAME ("unit_test_bond_dev")
-
-#define INVALID_SOCKET_ID (-1)
-#define INVALID_PORT_ID (-1)
-#define INVALID_BONDING_MODE (-1)
-
-
-uint8_t slave_mac[] = {0x00, 0xFF, 0x00, 0xFF, 0x00, 0x00 };
-uint8_t bonded_mac[] = {0xAA, 0xFF, 0xAA, 0xFF, 0xAA, 0xFF };
-
-struct link_bonding_unittest_params {
- int8_t bonded_port_id;
- int8_t slave_port_ids[TEST_MAX_NUMBER_OF_PORTS];
- uint8_t bonded_slave_count;
- uint8_t bonding_mode;
-
- uint16_t nb_rx_q;
- uint16_t nb_tx_q;
-
- struct rte_mempool *mbuf_pool;
-
- struct ether_addr *default_slave_mac;
- struct ether_addr *default_bonded_mac;
-
- /* Packet Headers */
- struct ether_hdr *pkt_eth_hdr;
- struct ipv4_hdr *pkt_ipv4_hdr;
- struct ipv6_hdr *pkt_ipv6_hdr;
- struct udp_hdr *pkt_udp_hdr;
-
-};
-
-static struct ipv4_hdr pkt_ipv4_hdr;
-static struct ipv6_hdr pkt_ipv6_hdr;
-static struct udp_hdr pkt_udp_hdr;
-
-static struct link_bonding_unittest_params default_params = {
- .bonded_port_id = -1,
- .slave_port_ids = { -1 },
- .bonded_slave_count = 0,
- .bonding_mode = BONDING_MODE_ROUND_ROBIN,
-
- .nb_rx_q = 1,
- .nb_tx_q = 1,
-
- .mbuf_pool = NULL,
-
- .default_slave_mac = (struct ether_addr *)slave_mac,
- .default_bonded_mac = (struct ether_addr *)bonded_mac,
-
- .pkt_eth_hdr = NULL,
- .pkt_ipv4_hdr = &pkt_ipv4_hdr,
- .pkt_ipv6_hdr = &pkt_ipv6_hdr,
- .pkt_udp_hdr = &pkt_udp_hdr
-
-};
-
-static struct link_bonding_unittest_params *test_params = &default_params;
-
-static uint8_t src_mac[] = { 0xFF, 0xAA, 0xFF, 0xAA, 0xFF, 0xAA };
-static uint8_t dst_mac_0[] = { 0xFF, 0xAA, 0xFF, 0xAA, 0xFF, 0xAA };
-static uint8_t dst_mac_1[] = { 0xFF, 0xAA, 0xFF, 0xAA, 0xFF, 0xAB };
-
-static uint32_t src_addr = IPV4_ADDR(192, 168, 1, 98);
-static uint32_t dst_addr_0 = IPV4_ADDR(192, 168, 1, 98);
-static uint32_t dst_addr_1 = IPV4_ADDR(193, 166, 10, 97);
-
-static uint8_t src_ipv6_addr[] = { 0xFF, 0xAA, 0xFF, 0xAA, 0xFF, 0xAA, 0xFF,
- 0xAA, 0xFF, 0xAA, 0xFF, 0xAA, 0xFF, 0xAA , 0xFF, 0xAA };
-static uint8_t dst_ipv6_addr_0[] = { 0xFF, 0xAA, 0xFF, 0xAA, 0xFF, 0xAA, 0xFF,
- 0xAA, 0xFF, 0xAA, 0xFF, 0xAA , 0xFF, 0xAA, 0xFF, 0xAA };
-static uint8_t dst_ipv6_addr_1[] = { 0xFF, 0xAA, 0xFF, 0xAA, 0xFF, 0xAA, 0xFF,
- 0xAA, 0xFF, 0xAA, 0xFF, 0xAA , 0xFF, 0xAA , 0xFF, 0xAB };
-
-static uint16_t src_port = 1024;
-static uint16_t dst_port_0 = 1024;
-static uint16_t dst_port_1 = 2024;
-
-static uint16_t vlan_id = 0x100;
-
-struct rte_eth_rxmode rx_mode = {
- .max_rx_pkt_len = ETHER_MAX_LEN, /**< Default maximum frame length. */
- .split_hdr_size = 0,
- .header_split = 0, /**< Header Split disabled. */
- .hw_ip_checksum = 0, /**< IP checksum offload disabled. */
- .hw_vlan_filter = 1, /**< VLAN filtering enabled. */
- .hw_vlan_strip = 1, /**< VLAN strip enabled. */
- .hw_vlan_extend = 0, /**< Extended VLAN disabled. */
- .jumbo_frame = 0, /**< Jumbo Frame Support disabled. */
- .hw_strip_crc = 0, /**< CRC stripping by hardware disabled. */
-};
-
-struct rte_fdir_conf fdir_conf = {
- .mode = RTE_FDIR_MODE_NONE,
- .pballoc = RTE_FDIR_PBALLOC_64K,
- .status = RTE_FDIR_REPORT_STATUS,
- .drop_queue = 127,
-};
-
-static struct rte_eth_conf default_pmd_conf = {
- .rxmode = {
- .mq_mode = ETH_MQ_RX_NONE,
- .max_rx_pkt_len = ETHER_MAX_LEN,
- .split_hdr_size = 0,
- .header_split = 0, /**< Header Split disabled */
- .hw_ip_checksum = 0, /**< IP checksum offload enabled */
- .hw_vlan_filter = 0, /**< VLAN filtering disabled */
- .jumbo_frame = 0, /**< Jumbo Frame Support disabled */
- .hw_strip_crc = 0, /**< CRC stripped by hardware */
- },
- .txmode = {
- .mq_mode = ETH_MQ_TX_NONE,
- },
- .lpbk_mode = 0,
-};
-
-static const struct rte_eth_rxconf rx_conf_default = {
- .rx_thresh = {
- .pthresh = RX_PTHRESH,
- .hthresh = RX_HTHRESH,
- .wthresh = RX_WTHRESH,
- },
- .rx_free_thresh = RX_FREE_THRESH,
- .rx_drop_en = 0,
-};
-
-static struct rte_eth_txconf tx_conf_default = {
- .tx_thresh = {
- .pthresh = TX_PTHRESH,
- .hthresh = TX_HTHRESH,
- .wthresh = TX_WTHRESH,
- },
- .tx_free_thresh = TX_FREE_THRESH,
- .tx_rs_thresh = TX_RSBIT_THRESH,
- .txq_flags = TX_Q_FLAGS
-
-};
-
-static int
-configure_ethdev(uint8_t port_id, uint8_t start, uint8_t en_isr)
-{
- int q_id;
-
- if (en_isr)
- default_pmd_conf.intr_conf.lsc = 1;
- else
- default_pmd_conf.intr_conf.lsc = 0;
-
- TEST_ASSERT_SUCCESS(rte_eth_dev_configure(port_id, test_params->nb_rx_q,
- test_params->nb_tx_q, &default_pmd_conf),
- "rte_eth_dev_configure for port %d failed", port_id);
-
- for (q_id = 0; q_id < test_params->nb_rx_q; q_id++)
- TEST_ASSERT_SUCCESS(rte_eth_rx_queue_setup(port_id, q_id, RX_RING_SIZE,
- rte_eth_dev_socket_id(port_id), &rx_conf_default,
- test_params->mbuf_pool) ,
- "rte_eth_rx_queue_setup for port %d failed", port_id);
-
- for (q_id = 0; q_id < test_params->nb_tx_q; q_id++)
- TEST_ASSERT_SUCCESS(rte_eth_tx_queue_setup(port_id, q_id, TX_RING_SIZE,
- rte_eth_dev_socket_id(port_id), &tx_conf_default),
- "rte_eth_tx_queue_setup for port %d failed", port_id);
-
- if (start)
- TEST_ASSERT_SUCCESS(rte_eth_dev_start(port_id),
- "rte_eth_dev_start for port %d failed", port_id);
-
- return 0;
-}
-
-static int slaves_initialized;
-
-static pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER;
-static pthread_cond_t cvar = PTHREAD_COND_INITIALIZER;
-
-
-static int
-test_setup(void)
-{
- int i, nb_mbuf_per_pool;
- struct ether_addr *mac_addr = (struct ether_addr *)slave_mac;
-
- /* Allocate ethernet packet header with space for VLAN header */
- if (test_params->pkt_eth_hdr == NULL) {
- test_params->pkt_eth_hdr = malloc(sizeof(struct ether_hdr) +
- sizeof(struct vlan_hdr));
-
- TEST_ASSERT_NOT_NULL(test_params->pkt_eth_hdr,
- "Ethernet header struct allocation failed!");
- }
-
- nb_mbuf_per_pool = RTE_TEST_RX_DESC_MAX + DEF_PKT_BURST +
- RTE_TEST_TX_DESC_MAX + MAX_PKT_BURST;
- if (test_params->mbuf_pool == NULL) {
- test_params->mbuf_pool = rte_pktmbuf_pool_create("MBUF_POOL",
- nb_mbuf_per_pool, MBUF_CACHE_SIZE, 0,
- RTE_MBUF_DEFAULT_BUF_SIZE, rte_socket_id());
- TEST_ASSERT_NOT_NULL(test_params->mbuf_pool,
- "rte_mempool_create failed");
- }
-
- /* Create / Initialize virtual eth devs */
- if (!slaves_initialized) {
- for (i = 0; i < TEST_MAX_NUMBER_OF_PORTS; i++) {
- char pmd_name[RTE_ETH_NAME_MAX_LEN];
-
- mac_addr->addr_bytes[ETHER_ADDR_LEN-1] = i;
-
- snprintf(pmd_name, RTE_ETH_NAME_MAX_LEN, "eth_virt_%d", i);
-
- test_params->slave_port_ids[i] = virtual_ethdev_create(pmd_name,
- mac_addr, rte_socket_id(), 1);
- TEST_ASSERT(test_params->slave_port_ids[i] >= 0,
- "Failed to create virtual virtual ethdev %s", pmd_name);
-
- TEST_ASSERT_SUCCESS(configure_ethdev(
- test_params->slave_port_ids[i], 1, 0),
- "Failed to configure virtual ethdev %s", pmd_name);
- }
- slaves_initialized = 1;
- }
-
- return 0;
-}
-
-static int
-test_create_bonded_device(void)
-{
- int current_slave_count;
-
- uint8_t slaves[RTE_MAX_ETHPORTS];
-
- /* Don't try to recreate bonded device if re-running test suite*/
- if (test_params->bonded_port_id == -1) {
- test_params->bonded_port_id = rte_eth_bond_create(BONDED_DEV_NAME,
- test_params->bonding_mode, rte_socket_id());
-
- TEST_ASSERT(test_params->bonded_port_id >= 0,
- "Failed to create bonded ethdev %s", BONDED_DEV_NAME);
-
- TEST_ASSERT_SUCCESS(configure_ethdev(test_params->bonded_port_id, 0, 0),
- "Failed to configure bonded ethdev %s", BONDED_DEV_NAME);
- }
-
- TEST_ASSERT_SUCCESS(rte_eth_bond_mode_set(test_params->bonded_port_id,
- test_params->bonding_mode), "Failed to set ethdev %d to mode %d",
- test_params->bonded_port_id, test_params->bonding_mode);
-
- current_slave_count = rte_eth_bond_slaves_get(test_params->bonded_port_id,
- slaves, RTE_MAX_ETHPORTS);
-
- TEST_ASSERT_EQUAL(current_slave_count, 0,
- "Number of slaves %d is great than expected %d.",
- current_slave_count, 0);
-
- current_slave_count = rte_eth_bond_active_slaves_get(
- test_params->bonded_port_id, slaves, RTE_MAX_ETHPORTS);
-
- TEST_ASSERT_EQUAL(current_slave_count, 0,
- "Number of active slaves %d is great than expected %d.",
- current_slave_count, 0);
-
- return 0;
-}
-
-
-static int
-test_create_bonded_device_with_invalid_params(void)
-{
- int port_id;
-
- test_params->bonding_mode = BONDING_MODE_ROUND_ROBIN;
-
- /* Invalid name */
- port_id = rte_eth_bond_create(NULL, test_params->bonding_mode,
- rte_socket_id());
- TEST_ASSERT(port_id < 0, "Created bonded device unexpectedly");
-
- test_params->bonding_mode = INVALID_BONDING_MODE;
-
- /* Invalid bonding mode */
- port_id = rte_eth_bond_create(BONDED_DEV_NAME, test_params->bonding_mode,
- rte_socket_id());
- TEST_ASSERT(port_id < 0, "Created bonded device unexpectedly.");
-
- test_params->bonding_mode = BONDING_MODE_ROUND_ROBIN;
-
- /* Invalid socket id */
- port_id = rte_eth_bond_create(BONDED_DEV_NAME, test_params->bonding_mode,
- INVALID_SOCKET_ID);
- TEST_ASSERT(port_id < 0, "Created bonded device unexpectedly.");
-
- return 0;
-}
-
-static int
-test_add_slave_to_bonded_device(void)
-{
- int current_slave_count;
-
- uint8_t slaves[RTE_MAX_ETHPORTS];
-
- TEST_ASSERT_SUCCESS(rte_eth_bond_slave_add(test_params->bonded_port_id,
- test_params->slave_port_ids[test_params->bonded_slave_count]),
- "Failed to add slave (%d) to bonded port (%d).",
- test_params->slave_port_ids[test_params->bonded_slave_count],
- test_params->bonded_port_id);
-
- current_slave_count = rte_eth_bond_slaves_get(test_params->bonded_port_id,
- slaves, RTE_MAX_ETHPORTS);
- TEST_ASSERT_EQUAL(current_slave_count, test_params->bonded_slave_count + 1,
- "Number of slaves (%d) is greater than expected (%d).",
- current_slave_count, test_params->bonded_slave_count + 1);
-
- current_slave_count = rte_eth_bond_active_slaves_get(
- test_params->bonded_port_id, slaves, RTE_MAX_ETHPORTS);
- TEST_ASSERT_EQUAL(current_slave_count, 0,
- "Number of active slaves (%d) is not as expected (%d).\n",
- current_slave_count, 0);
-
- test_params->bonded_slave_count++;
-
- return 0;
-}
-
-static int
-test_add_slave_to_invalid_bonded_device(void)
-{
- /* Invalid port ID */
- TEST_ASSERT_FAIL(rte_eth_bond_slave_add(test_params->bonded_port_id + 5,
- test_params->slave_port_ids[test_params->bonded_slave_count]),
- "Expected call to failed as invalid port specified.");
-
- /* Non bonded device */
- TEST_ASSERT_FAIL(rte_eth_bond_slave_add(test_params->slave_port_ids[0],
- test_params->slave_port_ids[test_params->bonded_slave_count]),
- "Expected call to failed as invalid port specified.");
-
- return 0;
-}
-
-
-static int
-test_remove_slave_from_bonded_device(void)
-{
- int current_slave_count;
- struct ether_addr read_mac_addr, *mac_addr;
- uint8_t slaves[RTE_MAX_ETHPORTS];
-
- TEST_ASSERT_SUCCESS(rte_eth_bond_slave_remove(test_params->bonded_port_id,
- test_params->slave_port_ids[test_params->bonded_slave_count-1]),
- "Failed to remove slave %d from bonded port (%d).",
- test_params->slave_port_ids[test_params->bonded_slave_count-1],
- test_params->bonded_port_id);
-
-
- current_slave_count = rte_eth_bond_slaves_get(test_params->bonded_port_id,
- slaves, RTE_MAX_ETHPORTS);
-
- TEST_ASSERT_EQUAL(current_slave_count, test_params->bonded_slave_count - 1,
- "Number of slaves (%d) is great than expected (%d).\n",
- current_slave_count, test_params->bonded_slave_count - 1);
-
-
- mac_addr = (struct ether_addr *)slave_mac;
- mac_addr->addr_bytes[ETHER_ADDR_LEN-1] =
- test_params->bonded_slave_count-1;
-
- rte_eth_macaddr_get(
- test_params->slave_port_ids[test_params->bonded_slave_count-1],
- &read_mac_addr);
- TEST_ASSERT_SUCCESS(memcmp(mac_addr, &read_mac_addr, sizeof(read_mac_addr)),
- "bonded port mac address not set to that of primary port\n");
-
- rte_eth_stats_reset(
- test_params->slave_port_ids[test_params->bonded_slave_count-1]);
-
- virtual_ethdev_simulate_link_status_interrupt(test_params->bonded_port_id,
- 0);
-
- test_params->bonded_slave_count--;
-
- return 0;
-}
-
-static int
-test_remove_slave_from_invalid_bonded_device(void)
-{
- /* Invalid port ID */
- TEST_ASSERT_FAIL(rte_eth_bond_slave_remove(
- test_params->bonded_port_id + 5,
- test_params->slave_port_ids[test_params->bonded_slave_count - 1]),
- "Expected call to failed as invalid port specified.");
-
- /* Non bonded device */
- TEST_ASSERT_FAIL(rte_eth_bond_slave_remove(
- test_params->slave_port_ids[0],
- test_params->slave_port_ids[test_params->bonded_slave_count - 1]),
- "Expected call to failed as invalid port specified.");
-
- return 0;
-}
-
-static int bonded_id = 2;
-
-static int
-test_add_already_bonded_slave_to_bonded_device(void)
-{
- int port_id, current_slave_count;
- uint8_t slaves[RTE_MAX_ETHPORTS];
- char pmd_name[RTE_ETH_NAME_MAX_LEN];
-
- test_add_slave_to_bonded_device();
-
- current_slave_count = rte_eth_bond_slaves_get(test_params->bonded_port_id,
- slaves, RTE_MAX_ETHPORTS);
- TEST_ASSERT_EQUAL(current_slave_count, 1,
- "Number of slaves (%d) is not that expected (%d).",
- current_slave_count, 1);
-
- snprintf(pmd_name, RTE_ETH_NAME_MAX_LEN, "%s_%d", BONDED_DEV_NAME, ++bonded_id);
-
- port_id = rte_eth_bond_create(pmd_name, test_params->bonding_mode,
- rte_socket_id());
- TEST_ASSERT(port_id >= 0, "Failed to create bonded device.");
-
- TEST_ASSERT(rte_eth_bond_slave_add(port_id,
- test_params->slave_port_ids[test_params->bonded_slave_count - 1])
- < 0,
- "Added slave (%d) to bonded port (%d) unexpectedly.",
- test_params->slave_port_ids[test_params->bonded_slave_count-1],
- port_id);
-
- return test_remove_slave_from_bonded_device();
-}
-
-
-static int
-test_get_slaves_from_bonded_device(void)
-{
- int current_slave_count;
- uint8_t slaves[RTE_MAX_ETHPORTS];
-
- TEST_ASSERT_SUCCESS(test_add_slave_to_bonded_device(),
- "Failed to add slave to bonded device");
-
- /* Invalid port id */
- current_slave_count = rte_eth_bond_slaves_get(INVALID_PORT_ID, slaves,
- RTE_MAX_ETHPORTS);
- TEST_ASSERT(current_slave_count < 0,
- "Invalid port id unexpectedly succeeded");
-
- current_slave_count = rte_eth_bond_active_slaves_get(INVALID_PORT_ID,
- slaves, RTE_MAX_ETHPORTS);
- TEST_ASSERT(current_slave_count < 0,
- "Invalid port id unexpectedly succeeded");
-
- /* Invalid slaves pointer */
- current_slave_count = rte_eth_bond_slaves_get(test_params->bonded_port_id,
- NULL, RTE_MAX_ETHPORTS);
- TEST_ASSERT(current_slave_count < 0,
- "Invalid slave array unexpectedly succeeded");
-
- current_slave_count = rte_eth_bond_active_slaves_get(
- test_params->bonded_port_id, NULL, RTE_MAX_ETHPORTS);
- TEST_ASSERT(current_slave_count < 0,
- "Invalid slave array unexpectedly succeeded");
-
- /* non bonded device*/
- current_slave_count = rte_eth_bond_slaves_get(
- test_params->slave_port_ids[0], NULL, RTE_MAX_ETHPORTS);
- TEST_ASSERT(current_slave_count < 0,
- "Invalid port id unexpectedly succeeded");
-
- current_slave_count = rte_eth_bond_active_slaves_get(
- test_params->slave_port_ids[0], NULL, RTE_MAX_ETHPORTS);
- TEST_ASSERT(current_slave_count < 0,
- "Invalid port id unexpectedly succeeded");
-
- TEST_ASSERT_SUCCESS(test_remove_slave_from_bonded_device(),
- "Failed to remove slaves from bonded device");
-
- return 0;
-}
-
-
-static int
-test_add_remove_multiple_slaves_to_from_bonded_device(void)
-{
- int i;
-
- for (i = 0; i < TEST_MAX_NUMBER_OF_PORTS; i++)
- TEST_ASSERT_SUCCESS(test_add_slave_to_bonded_device(),
- "Failed to add slave to bonded device");
-
- for (i = 0; i < TEST_MAX_NUMBER_OF_PORTS; i++)
- TEST_ASSERT_SUCCESS(test_remove_slave_from_bonded_device(),
- "Failed to remove slaves from bonded device");
-
- return 0;
-}
-
-static void
-enable_bonded_slaves(void)
-{
- int i;
-
- for (i = 0; i < test_params->bonded_slave_count; i++) {
- virtual_ethdev_tx_burst_fn_set_success(test_params->slave_port_ids[i],
- 1);
-
- virtual_ethdev_simulate_link_status_interrupt(
- test_params->slave_port_ids[i], 1);
- }
-}
-
-static int
-test_start_bonded_device(void)
-{
- struct rte_eth_link link_status;
-
- int current_slave_count, current_bonding_mode, primary_port;
- uint8_t slaves[RTE_MAX_ETHPORTS];
-
- /* Add slave to bonded device*/
- TEST_ASSERT_SUCCESS(test_add_slave_to_bonded_device(),
- "Failed to add slave to bonded device");
-
- TEST_ASSERT_SUCCESS(rte_eth_dev_start(test_params->bonded_port_id),
- "Failed to start bonded pmd eth device %d.",
- test_params->bonded_port_id);
-
- /* Change link status of virtual pmd so it will be added to the active
- * slave list of the bonded device*/
- virtual_ethdev_simulate_link_status_interrupt(
- test_params->slave_port_ids[test_params->bonded_slave_count-1], 1);
-
- current_slave_count = rte_eth_bond_slaves_get(test_params->bonded_port_id,
- slaves, RTE_MAX_ETHPORTS);
- TEST_ASSERT_EQUAL(current_slave_count, test_params->bonded_slave_count,
- "Number of slaves (%d) is not expected value (%d).",
- current_slave_count, test_params->bonded_slave_count);
-
- current_slave_count = rte_eth_bond_active_slaves_get(
- test_params->bonded_port_id, slaves, RTE_MAX_ETHPORTS);
- TEST_ASSERT_EQUAL(current_slave_count, test_params->bonded_slave_count,
- "Number of active slaves (%d) is not expected value (%d).",
- current_slave_count, test_params->bonded_slave_count);
-
- current_bonding_mode = rte_eth_bond_mode_get(test_params->bonded_port_id);
- TEST_ASSERT_EQUAL(current_bonding_mode, test_params->bonding_mode,
- "Bonded device mode (%d) is not expected value (%d).\n",
- current_bonding_mode, test_params->bonding_mode);
-
- primary_port = rte_eth_bond_primary_get(test_params->bonded_port_id);
- TEST_ASSERT_EQUAL(primary_port, test_params->slave_port_ids[0],
- "Primary port (%d) is not expected value (%d).",
- primary_port, test_params->slave_port_ids[0]);
-
- rte_eth_link_get(test_params->bonded_port_id, &link_status);
- TEST_ASSERT_EQUAL(link_status.link_status, 1,
- "Bonded port (%d) status (%d) is not expected value (%d).\n",
- test_params->bonded_port_id, link_status.link_status, 1);
-
- return 0;
-}
-
-static int
-test_stop_bonded_device(void)
-{
- int current_slave_count;
- uint8_t slaves[RTE_MAX_ETHPORTS];
-
- struct rte_eth_link link_status;
-
- rte_eth_dev_stop(test_params->bonded_port_id);
-
- rte_eth_link_get(test_params->bonded_port_id, &link_status);
- TEST_ASSERT_EQUAL(link_status.link_status, 0,
- "Bonded port (%d) status (%d) is not expected value (%d).",
- test_params->bonded_port_id, link_status.link_status, 0);
-
- current_slave_count = rte_eth_bond_slaves_get(test_params->bonded_port_id,
- slaves, RTE_MAX_ETHPORTS);
- TEST_ASSERT_EQUAL(current_slave_count, test_params->bonded_slave_count,
- "Number of slaves (%d) is not expected value (%d).",
- current_slave_count, test_params->bonded_slave_count);
-
- current_slave_count = rte_eth_bond_active_slaves_get(
- test_params->bonded_port_id, slaves, RTE_MAX_ETHPORTS);
- TEST_ASSERT_EQUAL(current_slave_count, 0,
- "Number of active slaves (%d) is not expected value (%d).",
- current_slave_count, 0);
-
- return 0;
-}
-
-static int
-remove_slaves_and_stop_bonded_device(void)
-{
- /* Clean up and remove slaves from bonded device */
- while (test_params->bonded_slave_count > 0)
- TEST_ASSERT_SUCCESS(test_remove_slave_from_bonded_device(),
- "test_remove_slave_from_bonded_device failed");
-
- rte_eth_dev_stop(test_params->bonded_port_id);
- rte_eth_stats_reset(test_params->bonded_port_id);
- rte_eth_bond_mac_address_reset(test_params->bonded_port_id);
-
- return 0;
-}
-
-static int
-test_set_bonding_mode(void)
-{
- int i, bonding_mode;
-
- int bonding_modes[] = { BONDING_MODE_ROUND_ROBIN,
- BONDING_MODE_ACTIVE_BACKUP,
- BONDING_MODE_BALANCE,
- BONDING_MODE_BROADCAST
- };
-
- /* Test supported link bonding modes */
- for (i = 0; i < (int)RTE_DIM(bonding_modes); i++) {
- /* Invalid port ID */
- TEST_ASSERT_FAIL(rte_eth_bond_mode_set(INVALID_PORT_ID,
- bonding_modes[i]),
- "Expected call to failed as invalid port (%d) specified.",
- INVALID_PORT_ID);
-
- /* Non bonded device */
- TEST_ASSERT_FAIL(rte_eth_bond_mode_set(test_params->slave_port_ids[0],
- bonding_modes[i]),
- "Expected call to failed as invalid port (%d) specified.",
- test_params->slave_port_ids[0]);
-
- TEST_ASSERT_SUCCESS(rte_eth_bond_mode_set(test_params->bonded_port_id,
- bonding_modes[i]),
- "Failed to set link bonding mode on port (%d) to (%d).",
- test_params->bonded_port_id, bonding_modes[i]);
-
- bonding_mode = rte_eth_bond_mode_get(test_params->bonded_port_id);
- TEST_ASSERT_EQUAL(bonding_mode, bonding_modes[i],
- "Link bonding mode (%d) of port (%d) is not expected value (%d).",
- bonding_mode, test_params->bonded_port_id,
- bonding_modes[i]);
-
- /* Invalid port ID */
- bonding_mode = rte_eth_bond_mode_get(INVALID_PORT_ID);
- TEST_ASSERT(bonding_mode < 0,
- "Expected call to failed as invalid port (%d) specified.",
- INVALID_PORT_ID);
-
- /* Non bonded device */
- bonding_mode = rte_eth_bond_mode_get(test_params->slave_port_ids[0]);
- TEST_ASSERT(bonding_mode < 0,
- "Expected call to failed as invalid port (%d) specified.",
- test_params->slave_port_ids[0]);
- }
-
- return remove_slaves_and_stop_bonded_device();
-}
-
-static int
-test_set_primary_slave(void)
-{
- int i, j, retval;
- struct ether_addr read_mac_addr;
- struct ether_addr *expected_mac_addr;
-
- /* Add 4 slaves to bonded device */
- for (i = test_params->bonded_slave_count; i < 4; i++)
- TEST_ASSERT_SUCCESS(test_add_slave_to_bonded_device(),
- "Failed to add slave to bonded device.");
-
- TEST_ASSERT_SUCCESS(rte_eth_bond_mode_set(test_params->bonded_port_id,
- BONDING_MODE_ROUND_ROBIN),
- "Failed to set link bonding mode on port (%d) to (%d).",
- test_params->bonded_port_id, BONDING_MODE_ROUND_ROBIN);
-
- /* Invalid port ID */
- TEST_ASSERT_FAIL(rte_eth_bond_primary_set(INVALID_PORT_ID,
- test_params->slave_port_ids[i]),
- "Expected call to failed as invalid port specified.");
-
- /* Non bonded device */
- TEST_ASSERT_FAIL(rte_eth_bond_primary_set(test_params->slave_port_ids[i],
- test_params->slave_port_ids[i]),
- "Expected call to failed as invalid port specified.");
-
- /* Set slave as primary
- * Verify slave it is now primary slave
- * Verify that MAC address of bonded device is that of primary slave
- * Verify that MAC address of all bonded slaves are that of primary slave
- */
- for (i = 0; i < 4; i++) {
- TEST_ASSERT_SUCCESS(rte_eth_bond_primary_set(test_params->bonded_port_id,
- test_params->slave_port_ids[i]),
- "Failed to set bonded port (%d) primary port to (%d)",
- test_params->bonded_port_id, test_params->slave_port_ids[i]);
-
- retval = rte_eth_bond_primary_get(test_params->bonded_port_id);
- TEST_ASSERT(retval >= 0,
- "Failed to read primary port from bonded port (%d)\n",
- test_params->bonded_port_id);
-
- TEST_ASSERT_EQUAL(retval, test_params->slave_port_ids[i],
- "Bonded port (%d) primary port (%d) not expected value (%d)\n",
- test_params->bonded_port_id, retval,
- test_params->slave_port_ids[i]);
-
- /* stop/start bonded eth dev to apply new MAC */
- rte_eth_dev_stop(test_params->bonded_port_id);
-
- TEST_ASSERT_SUCCESS(rte_eth_dev_start(test_params->bonded_port_id),
- "Failed to start bonded port %d",
- test_params->bonded_port_id);
-
- expected_mac_addr = (struct ether_addr *)&slave_mac;
- expected_mac_addr->addr_bytes[ETHER_ADDR_LEN-1] = i;
-
- /* Check primary slave MAC */
- rte_eth_macaddr_get(test_params->slave_port_ids[i], &read_mac_addr);
- TEST_ASSERT_SUCCESS(memcmp(expected_mac_addr, &read_mac_addr,
- sizeof(read_mac_addr)),
- "bonded port mac address not set to that of primary port\n");
-
- /* Check bonded MAC */
- rte_eth_macaddr_get(test_params->bonded_port_id, &read_mac_addr);
- TEST_ASSERT_SUCCESS(memcmp(&read_mac_addr, &read_mac_addr,
- sizeof(read_mac_addr)),
- "bonded port mac address not set to that of primary port\n");
-
- /* Check other slaves MACs */
- for (j = 0; j < 4; j++) {
- if (j != i) {
- rte_eth_macaddr_get(test_params->slave_port_ids[j],
- &read_mac_addr);
- TEST_ASSERT_SUCCESS(memcmp(expected_mac_addr, &read_mac_addr,
- sizeof(read_mac_addr)),
- "slave port mac address not set to that of primary "
- "port");
- }
- }
- }
-
-
- /* Test with none existent port */
- TEST_ASSERT_FAIL(rte_eth_bond_primary_get(test_params->bonded_port_id + 10),
- "read primary port from expectedly");
-
- /* Test with slave port */
- TEST_ASSERT_FAIL(rte_eth_bond_primary_get(test_params->slave_port_ids[0]),
- "read primary port from expectedly\n");
-
- TEST_ASSERT_SUCCESS(remove_slaves_and_stop_bonded_device(),
- "Failed to stop and remove slaves from bonded device");
-
- /* No slaves */
- TEST_ASSERT(rte_eth_bond_primary_get(test_params->bonded_port_id) < 0,
- "read primary port from expectedly\n");
-
- return 0;
-}
-
-static int
-test_set_explicit_bonded_mac(void)
-{
- int i;
- struct ether_addr read_mac_addr;
- struct ether_addr *mac_addr;
-
- uint8_t explicit_bonded_mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0x00, 0x01 };
-
- mac_addr = (struct ether_addr *)explicit_bonded_mac;
-
- /* Invalid port ID */
- TEST_ASSERT_FAIL(rte_eth_bond_mac_address_set(INVALID_PORT_ID, mac_addr),
- "Expected call to failed as invalid port specified.");
-
- /* Non bonded device */
- TEST_ASSERT_FAIL(rte_eth_bond_mac_address_set(
- test_params->slave_port_ids[0], mac_addr),
- "Expected call to failed as invalid port specified.");
-
- /* NULL MAC address */
- TEST_ASSERT_FAIL(rte_eth_bond_mac_address_set(
- test_params->bonded_port_id, NULL),
- "Expected call to failed as NULL MAC specified");
-
- TEST_ASSERT_SUCCESS(rte_eth_bond_mac_address_set(
- test_params->bonded_port_id, mac_addr),
- "Failed to set MAC address on bonded port (%d)",
- test_params->bonded_port_id);
-
- /* Add 4 slaves to bonded device */
- for (i = test_params->bonded_slave_count; i < 4; i++) {
- TEST_ASSERT_SUCCESS(test_add_slave_to_bonded_device(),
- "Failed to add slave to bonded device.\n");
- }
-
- /* Check bonded MAC */
- rte_eth_macaddr_get(test_params->bonded_port_id, &read_mac_addr);
- TEST_ASSERT_SUCCESS(memcmp(mac_addr, &read_mac_addr, sizeof(read_mac_addr)),
- "bonded port mac address not set to that of primary port");
-
- /* Check other slaves MACs */
- for (i = 0; i < 4; i++) {
- rte_eth_macaddr_get(test_params->slave_port_ids[i], &read_mac_addr);
- TEST_ASSERT_SUCCESS(memcmp(mac_addr, &read_mac_addr,
- sizeof(read_mac_addr)),
- "slave port mac address not set to that of primary port");
- }
-
- /* test resetting mac address on bonded device */
- TEST_ASSERT_SUCCESS(
- rte_eth_bond_mac_address_reset(test_params->bonded_port_id),
- "Failed to reset MAC address on bonded port (%d)",
- test_params->bonded_port_id);
-
- TEST_ASSERT_FAIL(
- rte_eth_bond_mac_address_reset(test_params->slave_port_ids[0]),
- "Reset MAC address on bonded port (%d) unexpectedly",
- test_params->slave_port_ids[1]);
-
- /* test resetting mac address on bonded device with no slaves */
- TEST_ASSERT_SUCCESS(remove_slaves_and_stop_bonded_device(),
- "Failed to remove slaves and stop bonded device");
-
- TEST_ASSERT_SUCCESS(rte_eth_bond_mac_address_reset(test_params->bonded_port_id),
- "Failed to reset MAC address on bonded port (%d)",
- test_params->bonded_port_id);
-
- return 0;
-}
-
-#define BONDED_INIT_MAC_ASSIGNMENT_SLAVE_COUNT (3)
-
-static int
-test_set_bonded_port_initialization_mac_assignment(void)
-{
- int i, slave_count, bonded_port_id;
-
- uint8_t slaves[RTE_MAX_ETHPORTS];
- int slave_port_ids[BONDED_INIT_MAC_ASSIGNMENT_SLAVE_COUNT];
-
- struct ether_addr slave_mac_addr, bonded_mac_addr, read_mac_addr;
-
- /* Initialize default values for MAC addresses */
- memcpy(&slave_mac_addr, slave_mac, sizeof(struct ether_addr));
- memcpy(&bonded_mac_addr, slave_mac, sizeof(struct ether_addr));
-
- /*
- * 1. a - Create / configure bonded / slave ethdevs
- */
- bonded_port_id = rte_eth_bond_create("ethdev_bond_mac_ass_test",
- BONDING_MODE_ACTIVE_BACKUP, rte_socket_id());
- TEST_ASSERT(bonded_port_id > 0, "failed to create bonded device");
-
- TEST_ASSERT_SUCCESS(configure_ethdev(bonded_port_id, 0, 0),
- "Failed to configure bonded ethdev");
-
- for (i = 0; i < BONDED_INIT_MAC_ASSIGNMENT_SLAVE_COUNT; i++) {
- char pmd_name[RTE_ETH_NAME_MAX_LEN];
-
- slave_mac_addr.addr_bytes[ETHER_ADDR_LEN-1] = i + 100;
-
- snprintf(pmd_name, RTE_ETH_NAME_MAX_LEN, "eth_slave_%d", i);
-
- slave_port_ids[i] = virtual_ethdev_create(pmd_name,
- &slave_mac_addr, rte_socket_id(), 1);
-
- TEST_ASSERT(slave_port_ids[i] >= 0,
- "Failed to create slave ethdev %s", pmd_name);
-
- TEST_ASSERT_SUCCESS(configure_ethdev(slave_port_ids[i], 1, 0),
- "Failed to configure virtual ethdev %s",
- pmd_name);
- }
-
-
- /*
- * 2. Add slave ethdevs to bonded device
- */
- for (i = 0; i < BONDED_INIT_MAC_ASSIGNMENT_SLAVE_COUNT; i++) {
- TEST_ASSERT_SUCCESS(rte_eth_bond_slave_add(bonded_port_id,
- slave_port_ids[i]),
- "Failed to add slave (%d) to bonded port (%d).",
- slave_port_ids[i], bonded_port_id);
- }
-
- slave_count = rte_eth_bond_slaves_get(bonded_port_id, slaves,
- RTE_MAX_ETHPORTS);
- TEST_ASSERT_EQUAL(BONDED_INIT_MAC_ASSIGNMENT_SLAVE_COUNT, slave_count,
- "Number of slaves (%d) is not as expected (%d)",
- slave_count, BONDED_INIT_MAC_ASSIGNMENT_SLAVE_COUNT);
-
-
- /*
- * 3. Set explicit MAC address on bonded ethdev
- */
- bonded_mac_addr.addr_bytes[ETHER_ADDR_LEN-2] = 0xFF;
- bonded_mac_addr.addr_bytes[ETHER_ADDR_LEN-1] = 0xAA;
-
- TEST_ASSERT_SUCCESS(rte_eth_bond_mac_address_set(
- bonded_port_id, &bonded_mac_addr),
- "Failed to set MAC address on bonded port (%d)",
- bonded_port_id);
-
-
- /* 4. a - Start bonded ethdev
- * b - Enable slave devices
- * c - Verify bonded/slaves ethdev MAC addresses
- */
- TEST_ASSERT_SUCCESS(rte_eth_dev_start(bonded_port_id),
- "Failed to start bonded pmd eth device %d.",
- bonded_port_id);
-
- for (i = 0; i < BONDED_INIT_MAC_ASSIGNMENT_SLAVE_COUNT; i++) {
- virtual_ethdev_simulate_link_status_interrupt(
- slave_port_ids[i], 1);
- }
-
- rte_eth_macaddr_get(bonded_port_id, &read_mac_addr);
- TEST_ASSERT_SUCCESS(memcmp(&bonded_mac_addr, &read_mac_addr,
- sizeof(read_mac_addr)),
- "bonded port mac address not as expected");
-
- rte_eth_macaddr_get(slave_port_ids[0], &read_mac_addr);
- TEST_ASSERT_SUCCESS(memcmp(&bonded_mac_addr, &read_mac_addr,
- sizeof(read_mac_addr)),
- "slave port 0 mac address not as expected");
-
- slave_mac_addr.addr_bytes[ETHER_ADDR_LEN-1] = 1 + 100;
- rte_eth_macaddr_get(slave_port_ids[1], &read_mac_addr);
- TEST_ASSERT_SUCCESS(memcmp(&slave_mac_addr, &read_mac_addr,
- sizeof(read_mac_addr)),
- "slave port 1 mac address not as expected");
-
- slave_mac_addr.addr_bytes[ETHER_ADDR_LEN-1] = 2 + 100;
- rte_eth_macaddr_get(slave_port_ids[2], &read_mac_addr);
- TEST_ASSERT_SUCCESS(memcmp(&slave_mac_addr, &read_mac_addr,
- sizeof(read_mac_addr)),
- "slave port 2 mac address not as expected");
-
-
- /* 7. a - Change primary port
- * b - Stop / Start bonded port
- * d - Verify slave ethdev MAC addresses
- */
- TEST_ASSERT_SUCCESS(rte_eth_bond_primary_set(bonded_port_id,
- slave_port_ids[2]),
- "failed to set primary port on bonded device.");
-
- rte_eth_dev_stop(bonded_port_id);
- TEST_ASSERT_SUCCESS(rte_eth_dev_start(bonded_port_id),
- "Failed to start bonded pmd eth device %d.",
- bonded_port_id);
-
- rte_eth_macaddr_get(bonded_port_id, &read_mac_addr);
- TEST_ASSERT_SUCCESS(memcmp(&bonded_mac_addr, &read_mac_addr,
- sizeof(read_mac_addr)),
- "bonded port mac address not as expected");
-
- slave_mac_addr.addr_bytes[ETHER_ADDR_LEN-1] = 0 + 100;
- rte_eth_macaddr_get(slave_port_ids[0], &read_mac_addr);
- TEST_ASSERT_SUCCESS(memcmp(&slave_mac_addr, &read_mac_addr,
- sizeof(read_mac_addr)),
- "slave port 0 mac address not as expected");
-
- slave_mac_addr.addr_bytes[ETHER_ADDR_LEN-1] = 1 + 100;
- rte_eth_macaddr_get(slave_port_ids[1], &read_mac_addr);
- TEST_ASSERT_SUCCESS(memcmp(&slave_mac_addr, &read_mac_addr,
- sizeof(read_mac_addr)),
- "slave port 1 mac address not as expected");
-
- rte_eth_macaddr_get(slave_port_ids[2], &read_mac_addr);
- TEST_ASSERT_SUCCESS(memcmp(&bonded_mac_addr, &read_mac_addr,
- sizeof(read_mac_addr)),
- "slave port 2 mac address not as expected");
-
- /* 6. a - Stop bonded ethdev
- * b - remove slave ethdevs
- * c - Verify slave ethdevs MACs are restored
- */
- rte_eth_dev_stop(bonded_port_id);
-
- for (i = 0; i < BONDED_INIT_MAC_ASSIGNMENT_SLAVE_COUNT; i++) {
- TEST_ASSERT_SUCCESS(rte_eth_bond_slave_remove(bonded_port_id,
- slave_port_ids[i]),
- "Failed to remove slave %d from bonded port (%d).",
- slave_port_ids[i], bonded_port_id);
- }
-
- slave_count = rte_eth_bond_slaves_get(bonded_port_id, slaves,
- RTE_MAX_ETHPORTS);
-
- TEST_ASSERT_EQUAL(slave_count, 0,
- "Number of slaves (%d) is great than expected (%d).",
- slave_count, 0);
-
- slave_mac_addr.addr_bytes[ETHER_ADDR_LEN-1] = 0 + 100;
- rte_eth_macaddr_get(slave_port_ids[0], &read_mac_addr);
- TEST_ASSERT_SUCCESS(memcmp(&slave_mac_addr, &read_mac_addr,
- sizeof(read_mac_addr)),
- "slave port 0 mac address not as expected");
-
- slave_mac_addr.addr_bytes[ETHER_ADDR_LEN-1] = 1 + 100;
- rte_eth_macaddr_get(slave_port_ids[1], &read_mac_addr);
- TEST_ASSERT_SUCCESS(memcmp(&slave_mac_addr, &read_mac_addr,
- sizeof(read_mac_addr)),
- "slave port 1 mac address not as expected");
-
- slave_mac_addr.addr_bytes[ETHER_ADDR_LEN-1] = 2 + 100;
- rte_eth_macaddr_get(slave_port_ids[2], &read_mac_addr);
- TEST_ASSERT_SUCCESS(memcmp(&slave_mac_addr, &read_mac_addr,
- sizeof(read_mac_addr)),
- "slave port 2 mac address not as expected");
-
- return 0;
-}
-
-
-static int
-initialize_bonded_device_with_slaves(uint8_t bonding_mode, uint8_t bond_en_isr,
- uint8_t number_of_slaves, uint8_t enable_slave)
-{
- /* Configure bonded device */
- TEST_ASSERT_SUCCESS(configure_ethdev(test_params->bonded_port_id, 0,
- bond_en_isr), "Failed to configure bonding port (%d) in mode %d "
- "with (%d) slaves.", test_params->bonded_port_id, bonding_mode,
- number_of_slaves);
-
- /* Add slaves to bonded device */
- while (number_of_slaves > test_params->bonded_slave_count)
- TEST_ASSERT_SUCCESS(test_add_slave_to_bonded_device(),
- "Failed to add slave (%d to bonding port (%d).",
- test_params->bonded_slave_count - 1,
- test_params->bonded_port_id);
-
- /* Set link bonding mode */
- TEST_ASSERT_SUCCESS(rte_eth_bond_mode_set(test_params->bonded_port_id,
- bonding_mode),
- "Failed to set link bonding mode on port (%d) to (%d).",
- test_params->bonded_port_id, bonding_mode);
-
- TEST_ASSERT_SUCCESS(rte_eth_dev_start(test_params->bonded_port_id),
- "Failed to start bonded pmd eth device %d.",
- test_params->bonded_port_id);
-
- if (enable_slave)
- enable_bonded_slaves();
-
- return 0;
-}
-
-static int
-test_adding_slave_after_bonded_device_started(void)
-{
- int i;
-
- TEST_ASSERT_SUCCESS(initialize_bonded_device_with_slaves(
- BONDING_MODE_ROUND_ROBIN, 0, 4, 0),
- "Failed to add slaves to bonded device");
-
- /* Enabled slave devices */
- for (i = 0; i < test_params->bonded_slave_count + 1; i++) {
- virtual_ethdev_simulate_link_status_interrupt(
- test_params->slave_port_ids[i], 1);
- }
-
- TEST_ASSERT_SUCCESS(rte_eth_bond_slave_add(test_params->bonded_port_id,
- test_params->slave_port_ids[test_params->bonded_slave_count]),
- "Failed to add slave to bonded port.\n");
-
- rte_eth_stats_reset(
- test_params->slave_port_ids[test_params->bonded_slave_count]);
-
- test_params->bonded_slave_count++;
-
- return remove_slaves_and_stop_bonded_device();
-}
-
-#define TEST_STATUS_INTERRUPT_SLAVE_COUNT 4
-#define TEST_LSC_WAIT_TIMEOUT_MS 500
-
-int test_lsc_interrupt_count;
-
-
-static void
-test_bonding_lsc_event_callback(uint8_t port_id __rte_unused,
- enum rte_eth_event_type type __rte_unused, void *param __rte_unused)
-{
- pthread_mutex_lock(&mutex);
- test_lsc_interrupt_count++;
-
- pthread_cond_signal(&cvar);
- pthread_mutex_unlock(&mutex);
-}
-
-static inline int
-lsc_timeout(int wait_us)
-{
- int retval = 0;
-
- struct timespec ts;
- struct timeval tp;
-
- gettimeofday(&tp, NULL);
-
- /* Convert from timeval to timespec */
- ts.tv_sec = tp.tv_sec;
- ts.tv_nsec = tp.tv_usec * 1000;
- ts.tv_nsec += wait_us * 1000;
-
- pthread_mutex_lock(&mutex);
- if (test_lsc_interrupt_count < 1)
- retval = pthread_cond_timedwait(&cvar, &mutex, &ts);
-
- pthread_mutex_unlock(&mutex);
-
- if (retval == 0 && test_lsc_interrupt_count < 1)
- return -1;
-
- return retval;
-}
-
-static int
-test_status_interrupt(void)
-{
- int slave_count;
- uint8_t slaves[RTE_MAX_ETHPORTS];
-
- /* initialized bonding device with T slaves */
- TEST_ASSERT_SUCCESS(initialize_bonded_device_with_slaves(
- BONDING_MODE_ROUND_ROBIN, 1,
- TEST_STATUS_INTERRUPT_SLAVE_COUNT, 1),
- "Failed to initialise bonded device");
-
- test_lsc_interrupt_count = 0;
-
- /* register link status change interrupt callback */
- rte_eth_dev_callback_register(test_params->bonded_port_id,
- RTE_ETH_EVENT_INTR_LSC, test_bonding_lsc_event_callback,
- &test_params->bonded_port_id);
-
- slave_count = rte_eth_bond_active_slaves_get(test_params->bonded_port_id,
- slaves, RTE_MAX_ETHPORTS);
-
- TEST_ASSERT_EQUAL(slave_count, TEST_STATUS_INTERRUPT_SLAVE_COUNT,
- "Number of active slaves (%d) is not as expected (%d)",
- slave_count, TEST_STATUS_INTERRUPT_SLAVE_COUNT);
-
- /* Bring all 4 slaves link status to down and test that we have received a
- * lsc interrupts */
- virtual_ethdev_simulate_link_status_interrupt(
- test_params->slave_port_ids[0], 0);
- virtual_ethdev_simulate_link_status_interrupt(
- test_params->slave_port_ids[1], 0);
- virtual_ethdev_simulate_link_status_interrupt(
- test_params->slave_port_ids[2], 0);
-
- TEST_ASSERT_EQUAL(test_lsc_interrupt_count, 0,
- "Received a link status change interrupt unexpectedly");
-
- virtual_ethdev_simulate_link_status_interrupt(
- test_params->slave_port_ids[3], 0);
-
- TEST_ASSERT(lsc_timeout(TEST_LSC_WAIT_TIMEOUT_MS) == 0,
- "timed out waiting for interrupt");
-
- TEST_ASSERT(test_lsc_interrupt_count > 0,
- "Did not receive link status change interrupt");
-
- slave_count = rte_eth_bond_active_slaves_get(test_params->bonded_port_id,
- slaves, RTE_MAX_ETHPORTS);
-
- TEST_ASSERT_EQUAL(slave_count, 0,
- "Number of active slaves (%d) is not as expected (%d)",
- slave_count, 0);
-
- /* bring one slave port up so link status will change */
- test_lsc_interrupt_count = 0;
-
- virtual_ethdev_simulate_link_status_interrupt(
- test_params->slave_port_ids[0], 1);
-
- TEST_ASSERT(lsc_timeout(TEST_LSC_WAIT_TIMEOUT_MS) == 0,
- "timed out waiting for interrupt");
-
- /* test that we have received another lsc interrupt */
- TEST_ASSERT(test_lsc_interrupt_count > 0,
- "Did not receive link status change interrupt");
-
- /* Verify that calling the same slave lsc interrupt doesn't cause another
- * lsc interrupt from bonded device */
- test_lsc_interrupt_count = 0;
-
- virtual_ethdev_simulate_link_status_interrupt(
- test_params->slave_port_ids[0], 1);
-
- TEST_ASSERT(lsc_timeout(TEST_LSC_WAIT_TIMEOUT_MS) != 0,
- "received unexpected interrupt");
-
- TEST_ASSERT_EQUAL(test_lsc_interrupt_count, 0,
- "Did not receive link status change interrupt");
-
-
- /* unregister lsc callback before exiting */
- rte_eth_dev_callback_unregister(test_params->bonded_port_id,
- RTE_ETH_EVENT_INTR_LSC, test_bonding_lsc_event_callback,
- &test_params->bonded_port_id);
-
- /* Clean up and remove slaves from bonded device */
- return remove_slaves_and_stop_bonded_device();
-}
-
-static int
-generate_test_burst(struct rte_mbuf **pkts_burst, uint16_t burst_size,
- uint8_t vlan, uint8_t ipv4, uint8_t toggle_dst_mac,
- uint8_t toggle_ip_addr, uint8_t toggle_udp_port)
-{
- uint16_t pktlen, generated_burst_size, ether_type;
- void *ip_hdr;
-
- if (ipv4)
- ether_type = ETHER_TYPE_IPv4;
- else
- ether_type = ETHER_TYPE_IPv6;
-
- if (toggle_dst_mac)
- initialize_eth_header(test_params->pkt_eth_hdr,
- (struct ether_addr *)src_mac, (struct ether_addr *)dst_mac_1,
- ether_type, vlan, vlan_id);
- else
- initialize_eth_header(test_params->pkt_eth_hdr,
- (struct ether_addr *)src_mac, (struct ether_addr *)dst_mac_0,
- ether_type, vlan, vlan_id);
-
-
- if (toggle_udp_port)
- pktlen = initialize_udp_header(test_params->pkt_udp_hdr, src_port,
- dst_port_1, 64);
- else
- pktlen = initialize_udp_header(test_params->pkt_udp_hdr, src_port,
- dst_port_0, 64);
-
- if (ipv4) {
- if (toggle_ip_addr)
- pktlen = initialize_ipv4_header(test_params->pkt_ipv4_hdr, src_addr,
- dst_addr_1, pktlen);
- else
- pktlen = initialize_ipv4_header(test_params->pkt_ipv4_hdr, src_addr,
- dst_addr_0, pktlen);
-
- ip_hdr = test_params->pkt_ipv4_hdr;
- } else {
- if (toggle_ip_addr)
- pktlen = initialize_ipv6_header(test_params->pkt_ipv6_hdr,
- (uint8_t *)src_ipv6_addr, (uint8_t *)dst_ipv6_addr_1,
- pktlen);
- else
- pktlen = initialize_ipv6_header(test_params->pkt_ipv6_hdr,
- (uint8_t *)src_ipv6_addr, (uint8_t *)dst_ipv6_addr_0,
- pktlen);
-
- ip_hdr = test_params->pkt_ipv6_hdr;
- }
-
- /* Generate burst of packets to transmit */
- generated_burst_size = generate_packet_burst(test_params->mbuf_pool,
- pkts_burst, test_params->pkt_eth_hdr, vlan, ip_hdr, ipv4,
- test_params->pkt_udp_hdr, burst_size, PACKET_BURST_GEN_PKT_LEN_128,
- 1);
- TEST_ASSERT_EQUAL(generated_burst_size, burst_size,
- "Failed to generate packet burst");
-
- return generated_burst_size;
-}
-
-/** Round Robin Mode Tests */
-
-static int
-test_roundrobin_tx_burst(void)
-{
- int i, burst_size;
- struct rte_mbuf *pkt_burst[MAX_PKT_BURST];
- struct rte_eth_stats port_stats;
-
- TEST_ASSERT_SUCCESS(initialize_bonded_device_with_slaves(
- BONDING_MODE_ROUND_ROBIN, 0, 2, 1),
- "Failed to intialise bonded device");
-
- burst_size = 20 * test_params->bonded_slave_count;
-
- TEST_ASSERT(burst_size <= MAX_PKT_BURST,
- "Burst size specified is greater than supported.");
-
- /* Generate test bursts of packets to transmit */
- TEST_ASSERT_EQUAL(generate_test_burst(pkt_burst, burst_size, 0, 1, 0, 0, 0),
- burst_size, "failed to generate test burst");
-
- /* Send burst on bonded port */
- TEST_ASSERT_EQUAL(rte_eth_tx_burst(
- test_params->bonded_port_id, 0, pkt_burst, burst_size), burst_size,
- "tx burst failed");
-
- /* Verify bonded port tx stats */
- rte_eth_stats_get(test_params->bonded_port_id, &port_stats);
- TEST_ASSERT_EQUAL(port_stats.opackets, (uint64_t)burst_size,
- "Bonded Port (%d) opackets value (%u) not as expected (%d)\n",
- test_params->bonded_port_id, (unsigned int)port_stats.opackets,
- burst_size);
-
- /* Verify slave ports tx stats */
- for (i = 0; i < test_params->bonded_slave_count; i++) {
- rte_eth_stats_get(test_params->slave_port_ids[i], &port_stats);
- TEST_ASSERT_EQUAL(port_stats.opackets,
- (uint64_t)burst_size / test_params->bonded_slave_count,
- "Slave Port (%d) opackets value (%u) not as expected (%d)\n",
- test_params->bonded_port_id, (unsigned int)port_stats.opackets,
- burst_size / test_params->bonded_slave_count);
- }
-
- /* Put all slaves down and try and transmit */
- for (i = 0; i < test_params->bonded_slave_count; i++) {
- virtual_ethdev_simulate_link_status_interrupt(
- test_params->slave_port_ids[i], 0);
- }
-
- /* Send burst on bonded port */
- TEST_ASSERT_EQUAL(rte_eth_tx_burst(test_params->bonded_port_id, 0,
- pkt_burst, burst_size), 0,
- "tx burst return unexpected value");
-
- /* Clean up and remove slaves from bonded device */
- return remove_slaves_and_stop_bonded_device();
-}
-
-static int
-verify_mbufs_ref_count(struct rte_mbuf **mbufs, int nb_mbufs, int val)
-{
- int i, refcnt;
-
- for (i = 0; i < nb_mbufs; i++) {
- refcnt = rte_mbuf_refcnt_read(mbufs[i]);
- TEST_ASSERT_EQUAL(refcnt, val,
- "mbuf ref count (%d)is not the expected value (%d)",
- refcnt, val);
- }
- return 0;
-}
-
-static void
-free_mbufs(struct rte_mbuf **mbufs, int nb_mbufs)
-{
- int i;
-
- for (i = 0; i < nb_mbufs; i++)
- rte_pktmbuf_free(mbufs[i]);
-}
-
-#define TEST_RR_SLAVE_TX_FAIL_SLAVE_COUNT (2)
-#define TEST_RR_SLAVE_TX_FAIL_BURST_SIZE (64)
-#define TEST_RR_SLAVE_TX_FAIL_PACKETS_COUNT (22)
-#define TEST_RR_SLAVE_TX_FAIL_FAILING_SLAVE_IDX (1)
-
-static int
-test_roundrobin_tx_burst_slave_tx_fail(void)
-{
- struct rte_mbuf *pkt_burst[MAX_PKT_BURST];
- struct rte_mbuf *expected_tx_fail_pkts[MAX_PKT_BURST];
-
- struct rte_eth_stats port_stats;
-
- int i, first_fail_idx, tx_count;
-
- TEST_ASSERT_SUCCESS(initialize_bonded_device_with_slaves(
- BONDING_MODE_ROUND_ROBIN, 0,
- TEST_RR_SLAVE_TX_FAIL_SLAVE_COUNT, 1),
- "Failed to intialise bonded device");
-
- /* Generate test bursts of packets to transmit */
- TEST_ASSERT_EQUAL(generate_test_burst(pkt_burst,
- TEST_RR_SLAVE_TX_FAIL_BURST_SIZE, 0, 1, 0, 0, 0),
- TEST_RR_SLAVE_TX_FAIL_BURST_SIZE,
- "Failed to generate test packet burst");
-
- /* Copy references to packets which we expect not to be transmitted */
- first_fail_idx = (TEST_RR_SLAVE_TX_FAIL_BURST_SIZE -
- (TEST_RR_SLAVE_TX_FAIL_PACKETS_COUNT *
- TEST_RR_SLAVE_TX_FAIL_SLAVE_COUNT)) +
- TEST_RR_SLAVE_TX_FAIL_FAILING_SLAVE_IDX;
-
- for (i = 0; i < TEST_RR_SLAVE_TX_FAIL_PACKETS_COUNT; i++) {
- expected_tx_fail_pkts[i] = pkt_burst[first_fail_idx +
- (i * TEST_RR_SLAVE_TX_FAIL_SLAVE_COUNT)];
- }
-
- /* Set virtual slave to only fail transmission of
- * TEST_RR_SLAVE_TX_FAIL_PACKETS_COUNT packets in burst */
- virtual_ethdev_tx_burst_fn_set_success(
- test_params->slave_port_ids[TEST_RR_SLAVE_TX_FAIL_FAILING_SLAVE_IDX],
- 0);
-
- virtual_ethdev_tx_burst_fn_set_tx_pkt_fail_count(
- test_params->slave_port_ids[TEST_RR_SLAVE_TX_FAIL_FAILING_SLAVE_IDX],
- TEST_RR_SLAVE_TX_FAIL_PACKETS_COUNT);
-
- tx_count = rte_eth_tx_burst(test_params->bonded_port_id, 0, pkt_burst,
- TEST_RR_SLAVE_TX_FAIL_BURST_SIZE);
-
- TEST_ASSERT_EQUAL(tx_count, TEST_RR_SLAVE_TX_FAIL_BURST_SIZE -
- TEST_RR_SLAVE_TX_FAIL_PACKETS_COUNT,
- "Transmitted (%d) an unexpected (%d) number of packets", tx_count,
- TEST_RR_SLAVE_TX_FAIL_BURST_SIZE -
- TEST_RR_SLAVE_TX_FAIL_PACKETS_COUNT);
-
- /* Verify that failed packet are expected failed packets */
- for (i = 0; i < TEST_RR_SLAVE_TX_FAIL_PACKETS_COUNT; i++) {
- TEST_ASSERT_EQUAL(expected_tx_fail_pkts[i], pkt_burst[i + tx_count],
- "expected mbuf (%d) pointer %p not expected pointer %p",
- i, expected_tx_fail_pkts[i], pkt_burst[i + tx_count]);
- }
-
- /* Verify bonded port tx stats */
- rte_eth_stats_get(test_params->bonded_port_id, &port_stats);
-
- TEST_ASSERT_EQUAL(port_stats.opackets,
- (uint64_t)TEST_RR_SLAVE_TX_FAIL_BURST_SIZE -
- TEST_RR_SLAVE_TX_FAIL_PACKETS_COUNT,
- "Bonded Port (%d) opackets value (%u) not as expected (%d)",
- test_params->bonded_port_id, (unsigned int)port_stats.opackets,
- TEST_RR_SLAVE_TX_FAIL_BURST_SIZE -
- TEST_RR_SLAVE_TX_FAIL_PACKETS_COUNT);
-
- /* Verify slave ports tx stats */
- for (i = 0; i < test_params->bonded_slave_count; i++) {
- int slave_expected_tx_count;
-
- rte_eth_stats_get(test_params->slave_port_ids[i], &port_stats);
-
- slave_expected_tx_count = TEST_RR_SLAVE_TX_FAIL_BURST_SIZE /
- test_params->bonded_slave_count;
-
- if (i == TEST_RR_SLAVE_TX_FAIL_FAILING_SLAVE_IDX)
- slave_expected_tx_count = slave_expected_tx_count -
- TEST_RR_SLAVE_TX_FAIL_PACKETS_COUNT;
-
- TEST_ASSERT_EQUAL(port_stats.opackets,
- (uint64_t)slave_expected_tx_count,
- "Slave Port (%d) opackets value (%u) not as expected (%d)",
- test_params->slave_port_ids[i],
- (unsigned int)port_stats.opackets, slave_expected_tx_count);
- }
-
- /* Verify that all mbufs have a ref value of zero */
- TEST_ASSERT_SUCCESS(verify_mbufs_ref_count(&pkt_burst[tx_count],
- TEST_RR_SLAVE_TX_FAIL_PACKETS_COUNT, 1),
- "mbufs refcnts not as expected");
- free_mbufs(&pkt_burst[tx_count], TEST_RR_SLAVE_TX_FAIL_PACKETS_COUNT);
-
- /* Clean up and remove slaves from bonded device */
- return remove_slaves_and_stop_bonded_device();
-}
-
-static int
-test_roundrobin_rx_burst_on_single_slave(void)
-{
- struct rte_mbuf *gen_pkt_burst[MAX_PKT_BURST] = { NULL };
- struct rte_mbuf *rx_pkt_burst[MAX_PKT_BURST] = { NULL };
-
- struct rte_eth_stats port_stats;
-
- int i, j, burst_size = 25;
-
- /* Initialize bonded device with 4 slaves in round robin mode */
- TEST_ASSERT_SUCCESS(initialize_bonded_device_with_slaves(
- BONDING_MODE_ROUND_ROBIN, 0, 4, 1),
- "Failed to initialize bonded device with slaves");
-
- /* Generate test bursts of packets to transmit */
- TEST_ASSERT_EQUAL(generate_test_burst(
- gen_pkt_burst, burst_size, 0, 1, 0, 0, 0), burst_size,
- "burst generation failed");
-
- for (i = 0; i < test_params->bonded_slave_count; i++) {
- /* Add rx data to slave */
- virtual_ethdev_add_mbufs_to_rx_queue(test_params->slave_port_ids[i],
- &gen_pkt_burst[0], burst_size);
-
- /* Call rx burst on bonded device */
- /* Send burst on bonded port */
- TEST_ASSERT_EQUAL(rte_eth_rx_burst(
- test_params->bonded_port_id, 0, rx_pkt_burst,
- MAX_PKT_BURST), burst_size,
- "round-robin rx burst failed");
-
- /* Verify bonded device rx count */
- rte_eth_stats_get(test_params->bonded_port_id, &port_stats);
- TEST_ASSERT_EQUAL(port_stats.ipackets, (uint64_t)burst_size,
- "Bonded Port (%d) ipackets value (%u) not as expected (%d)",
- test_params->bonded_port_id,
- (unsigned int)port_stats.ipackets, burst_size);
-
-
-
- /* Verify bonded slave devices rx count */
- /* Verify slave ports tx stats */
- for (j = 0; j < test_params->bonded_slave_count; j++) {
- rte_eth_stats_get(test_params->slave_port_ids[j], &port_stats);
-
- if (i == j) {
- TEST_ASSERT_EQUAL(port_stats.ipackets, (uint64_t)burst_size,
- "Slave Port (%d) ipackets value (%u) not as expected"
- " (%d)", test_params->slave_port_ids[i],
- (unsigned int)port_stats.ipackets, burst_size);
- } else {
- TEST_ASSERT_EQUAL(port_stats.ipackets, 0,
- "Slave Port (%d) ipackets value (%u) not as expected"
- " (%d)", test_params->slave_port_ids[i],
- (unsigned int)port_stats.ipackets, 0);
- }
-
- /* Reset bonded slaves stats */
- rte_eth_stats_reset(test_params->slave_port_ids[j]);
- }
- /* reset bonded device stats */
- rte_eth_stats_reset(test_params->bonded_port_id);
- }
-
- /* free mbufs */
- for (i = 0; i < MAX_PKT_BURST; i++) {
- if (gen_pkt_burst[i] != NULL)
- rte_pktmbuf_free(gen_pkt_burst[i]);
-
- if (rx_pkt_burst[i] != NULL)
- rte_pktmbuf_free(rx_pkt_burst[i]);
- }
-
-
- /* Clean up and remove slaves from bonded device */
- return remove_slaves_and_stop_bonded_device();
-}
-
-#define TEST_ROUNDROBIN_TX_BURST_SLAVE_COUNT (3)
-
-static int
-test_roundrobin_rx_burst_on_multiple_slaves(void)
-{
- struct rte_mbuf *gen_pkt_burst[TEST_ROUNDROBIN_TX_BURST_SLAVE_COUNT][MAX_PKT_BURST];
-
- struct rte_mbuf *rx_pkt_burst[MAX_PKT_BURST] = { NULL };
- struct rte_eth_stats port_stats;
-
- int burst_size[TEST_ROUNDROBIN_TX_BURST_SLAVE_COUNT] = { 15, 13, 36 };
- int i, nb_rx;
-
- /* Initialize bonded device with 4 slaves in round robin mode */
- TEST_ASSERT_SUCCESS(initialize_bonded_device_with_slaves(
- BONDING_MODE_ROUND_ROBIN, 0, 4, 1),
- "Failed to initialize bonded device with slaves");
-
- /* Generate test bursts of packets to transmit */
- for (i = 0; i < TEST_ROUNDROBIN_TX_BURST_SLAVE_COUNT; i++) {
- TEST_ASSERT_EQUAL(generate_test_burst(
- &gen_pkt_burst[i][0], burst_size[i], 0, 1, 0, 0, 0),
- burst_size[i], "burst generation failed");
- }
-
- /* Add rx data to slaves */
- for (i = 0; i < TEST_ROUNDROBIN_TX_BURST_SLAVE_COUNT; i++) {
- virtual_ethdev_add_mbufs_to_rx_queue(test_params->slave_port_ids[i],
- &gen_pkt_burst[i][0], burst_size[i]);
- }
-
- /* Call rx burst on bonded device */
- /* Send burst on bonded port */
- nb_rx = rte_eth_rx_burst(test_params->bonded_port_id, 0, rx_pkt_burst,
- MAX_PKT_BURST);
- TEST_ASSERT_EQUAL(nb_rx , burst_size[0] + burst_size[1] + burst_size[2],
- "round-robin rx burst failed (%d != %d)\n", nb_rx,
- burst_size[0] + burst_size[1] + burst_size[2]);
-
- /* Verify bonded device rx count */
- rte_eth_stats_get(test_params->bonded_port_id, &port_stats);
- TEST_ASSERT_EQUAL(port_stats.ipackets,
- (uint64_t)(burst_size[0] + burst_size[1] + burst_size[2]),
- "Bonded Port (%d) ipackets value (%u) not as expected (%d)",
- test_params->bonded_port_id, (unsigned int)port_stats.ipackets,
- burst_size[0] + burst_size[1] + burst_size[2]);
-
- /* Verify bonded slave devices rx counts */
- rte_eth_stats_get(test_params->slave_port_ids[0], &port_stats);
- TEST_ASSERT_EQUAL(port_stats.ipackets, (uint64_t)burst_size[0],
- "Slave Port (%d) ipackets value (%u) not as expected (%d)",
- test_params->slave_port_ids[0],
- (unsigned int)port_stats.ipackets, burst_size[0]);
-
- rte_eth_stats_get(test_params->slave_port_ids[1], &port_stats);
- TEST_ASSERT_EQUAL(port_stats.ipackets, (uint64_t)burst_size[1],
- "Slave Port (%d) ipackets value (%u) not as expected (%d)",
- test_params->slave_port_ids[1], (unsigned int)port_stats.ipackets,
- burst_size[1]);
-
- rte_eth_stats_get(test_params->slave_port_ids[2], &port_stats);
- TEST_ASSERT_EQUAL(port_stats.ipackets, (uint64_t)burst_size[2],
- "Slave Port (%d) ipackets value (%u) not as expected (%d)",
- test_params->slave_port_ids[2],
- (unsigned int)port_stats.ipackets, burst_size[2]);
-
- rte_eth_stats_get(test_params->slave_port_ids[3], &port_stats);
- TEST_ASSERT_EQUAL(port_stats.ipackets, 0,
- "Slave Port (%d) ipackets value (%u) not as expected (%d)",
- test_params->slave_port_ids[3],
- (unsigned int)port_stats.ipackets, 0);
-
- /* free mbufs */
- for (i = 0; i < MAX_PKT_BURST; i++) {
- if (rx_pkt_burst[i] != NULL)
- rte_pktmbuf_free(rx_pkt_burst[i]);
- }
-
- /* Clean up and remove slaves from bonded device */
- return remove_slaves_and_stop_bonded_device();
-}
-
-static int
-test_roundrobin_verify_mac_assignment(void)
-{
- struct ether_addr read_mac_addr, expected_mac_addr_0, expected_mac_addr_2;
-
- int i;
-
- rte_eth_macaddr_get(test_params->slave_port_ids[0], &expected_mac_addr_0);
- rte_eth_macaddr_get(test_params->slave_port_ids[2], &expected_mac_addr_2);
-
- /* Initialize bonded device with 4 slaves in round robin mode */
- TEST_ASSERT_SUCCESS(initialize_bonded_device_with_slaves(
- BONDING_MODE_ROUND_ROBIN, 0, 4, 1),
- "Failed to initialize bonded device with slaves");
-
- /* Verify that all MACs are the same as first slave added to bonded dev */
- for (i = 0; i < test_params->bonded_slave_count; i++) {
- rte_eth_macaddr_get(test_params->slave_port_ids[i], &read_mac_addr);
- TEST_ASSERT_SUCCESS(memcmp(&expected_mac_addr_0, &read_mac_addr,
- sizeof(read_mac_addr)),
- "slave port (%d) mac address not set to that of primary port",
- test_params->slave_port_ids[i]);
- }
-
- /* change primary and verify that MAC addresses haven't changed */
- TEST_ASSERT_SUCCESS(rte_eth_bond_primary_set(test_params->bonded_port_id,
- test_params->slave_port_ids[2]),
- "Failed to set bonded port (%d) primary port to (%d)",
- test_params->bonded_port_id, test_params->slave_port_ids[i]);
-
- for (i = 0; i < test_params->bonded_slave_count; i++) {
- rte_eth_macaddr_get(test_params->slave_port_ids[i], &read_mac_addr);
- TEST_ASSERT_SUCCESS(memcmp(&expected_mac_addr_0, &read_mac_addr,
- sizeof(read_mac_addr)),
- "slave port (%d) mac address has changed to that of primary"
- " port without stop/start toggle of bonded device",
- test_params->slave_port_ids[i]);
- }
-
- /* stop / start bonded device and verify that primary MAC address is
- * propagate to bonded device and slaves */
- rte_eth_dev_stop(test_params->bonded_port_id);
-
- TEST_ASSERT_SUCCESS(rte_eth_dev_start(test_params->bonded_port_id),
- "Failed to start bonded device");
-
- rte_eth_macaddr_get(test_params->bonded_port_id, &read_mac_addr);
- TEST_ASSERT_SUCCESS(
- memcmp(&expected_mac_addr_2, &read_mac_addr, sizeof(read_mac_addr)),
- "bonded port (%d) mac address not set to that of new primary port",
- test_params->slave_port_ids[i]);
-
- for (i = 0; i < test_params->bonded_slave_count; i++) {
- rte_eth_macaddr_get(test_params->slave_port_ids[i], &read_mac_addr);
- TEST_ASSERT_SUCCESS(memcmp(&expected_mac_addr_2, &read_mac_addr,
- sizeof(read_mac_addr)),
- "slave port (%d) mac address not set to that of new primary"
- " port", test_params->slave_port_ids[i]);
- }
-
- /* Set explicit MAC address */
- TEST_ASSERT_SUCCESS(rte_eth_bond_mac_address_set(
- test_params->bonded_port_id, (struct ether_addr *)bonded_mac),
- "Failed to set MAC");
-
- rte_eth_macaddr_get(test_params->bonded_port_id, &read_mac_addr);
- TEST_ASSERT_SUCCESS(memcmp(bonded_mac, &read_mac_addr,
- sizeof(read_mac_addr)),
- "bonded port (%d) mac address not set to that of new primary port",
- test_params->slave_port_ids[i]);
-
- for (i = 0; i < test_params->bonded_slave_count; i++) {
- rte_eth_macaddr_get(test_params->slave_port_ids[i], &read_mac_addr);
- TEST_ASSERT_SUCCESS(memcmp(bonded_mac, &read_mac_addr,
- sizeof(read_mac_addr)), "slave port (%d) mac address not set to"
- " that of new primary port\n", test_params->slave_port_ids[i]);
- }
-
- /* Clean up and remove slaves from bonded device */
- return remove_slaves_and_stop_bonded_device();
-}
-
-static int
-test_roundrobin_verify_promiscuous_enable_disable(void)
-{
- int i, promiscuous_en;
-
- /* Initialize bonded device with 4 slaves in round robin mode */
- TEST_ASSERT_SUCCESS(initialize_bonded_device_with_slaves(
- BONDING_MODE_ROUND_ROBIN, 0, 4, 1),
- "Failed to initialize bonded device with slaves");
-
- rte_eth_promiscuous_enable(test_params->bonded_port_id);
-
- promiscuous_en = rte_eth_promiscuous_get(test_params->bonded_port_id);
- TEST_ASSERT_EQUAL(promiscuous_en, 1,
- "Port (%d) promiscuous mode not enabled",
- test_params->bonded_port_id);
-
- for (i = 0; i < test_params->bonded_slave_count; i++) {
- promiscuous_en = rte_eth_promiscuous_get(
- test_params->slave_port_ids[i]);
- TEST_ASSERT_EQUAL(promiscuous_en, 1,
- "slave port (%d) promiscuous mode not enabled",
- test_params->slave_port_ids[i]);
- }
-
- rte_eth_promiscuous_disable(test_params->bonded_port_id);
-
- promiscuous_en = rte_eth_promiscuous_get(test_params->bonded_port_id);
- TEST_ASSERT_EQUAL(promiscuous_en, 0,
- "Port (%d) promiscuous mode not disabled\n",
- test_params->bonded_port_id);
-
- for (i = 0; i < test_params->bonded_slave_count; i++) {
- promiscuous_en = rte_eth_promiscuous_get(
- test_params->slave_port_ids[i]);
- TEST_ASSERT_EQUAL(promiscuous_en, 0,
- "Port (%d) promiscuous mode not disabled\n",
- test_params->slave_port_ids[i]);
- }
-
- /* Clean up and remove slaves from bonded device */
- return remove_slaves_and_stop_bonded_device();
-}
-
-#define TEST_RR_LINK_STATUS_SLAVE_COUNT (4)
-#define TEST_RR_LINK_STATUS_EXPECTED_ACTIVE_SLAVE_COUNT (2)
-
-static int
-test_roundrobin_verify_slave_link_status_change_behaviour(void)
-{
- struct rte_mbuf *tx_pkt_burst[MAX_PKT_BURST] = { NULL };
- struct rte_mbuf *gen_pkt_burst[TEST_RR_LINK_STATUS_SLAVE_COUNT][MAX_PKT_BURST];
- struct rte_mbuf *rx_pkt_burst[MAX_PKT_BURST] = { NULL };
-
- struct rte_eth_stats port_stats;
- uint8_t slaves[RTE_MAX_ETHPORTS];
-
- int i, burst_size, slave_count;
-
- /* NULL all pointers in array to simplify cleanup */
- memset(gen_pkt_burst, 0, sizeof(gen_pkt_burst));
-
- /* Initialize bonded device with TEST_RR_LINK_STATUS_SLAVE_COUNT slaves
- * in round robin mode */
- TEST_ASSERT_SUCCESS(initialize_bonded_device_with_slaves(
- BONDING_MODE_ROUND_ROBIN, 0, TEST_RR_LINK_STATUS_SLAVE_COUNT, 1),
- "Failed to initialize bonded device with slaves");
-
- /* Verify Current Slaves Count /Active Slave Count is */
- slave_count = rte_eth_bond_slaves_get(test_params->bonded_port_id, slaves,
- RTE_MAX_ETHPORTS);
- TEST_ASSERT_EQUAL(slave_count, TEST_RR_LINK_STATUS_SLAVE_COUNT,
- "Number of slaves (%d) is not as expected (%d).",
- slave_count, TEST_RR_LINK_STATUS_SLAVE_COUNT);
-
- slave_count = rte_eth_bond_active_slaves_get(test_params->bonded_port_id,
- slaves, RTE_MAX_ETHPORTS);
- TEST_ASSERT_EQUAL(slave_count, TEST_RR_LINK_STATUS_SLAVE_COUNT,
- "Number of active slaves (%d) is not as expected (%d).",
- slave_count, TEST_RR_LINK_STATUS_SLAVE_COUNT);
-
- /* Set 2 slaves eth_devs link status to down */
- virtual_ethdev_simulate_link_status_interrupt(
- test_params->slave_port_ids[1], 0);
- virtual_ethdev_simulate_link_status_interrupt(
- test_params->slave_port_ids[3], 0);
-
- slave_count = rte_eth_bond_active_slaves_get(test_params->bonded_port_id,
- slaves, RTE_MAX_ETHPORTS);
- TEST_ASSERT_EQUAL(slave_count,
- TEST_RR_LINK_STATUS_EXPECTED_ACTIVE_SLAVE_COUNT,
- "Number of active slaves (%d) is not as expected (%d).\n",
- slave_count, TEST_RR_LINK_STATUS_EXPECTED_ACTIVE_SLAVE_COUNT);
-
- burst_size = 20;
-
- /* Verify that pkts are not sent on slaves with link status down:
- *
- * 1. Generate test burst of traffic
- * 2. Transmit burst on bonded eth_dev
- * 3. Verify stats for bonded eth_dev (opackets = burst_size)
- * 4. Verify stats for slave eth_devs (s0 = 10, s1 = 0, s2 = 10, s3 = 0)
- */
- TEST_ASSERT_EQUAL(
- generate_test_burst(tx_pkt_burst, burst_size, 0, 1, 0, 0, 0),
- burst_size, "generate_test_burst failed");
-
- rte_eth_stats_reset(test_params->bonded_port_id);
-
-
- TEST_ASSERT_EQUAL(
- rte_eth_tx_burst(test_params->bonded_port_id, 0, tx_pkt_burst,
- burst_size), burst_size, "rte_eth_tx_burst failed");
-
- rte_eth_stats_get(test_params->bonded_port_id, &port_stats);
- TEST_ASSERT_EQUAL(port_stats.opackets, (uint64_t)burst_size,
- "Port (%d) opackets stats (%d) not expected (%d) value",
- test_params->bonded_port_id, (int)port_stats.opackets,
- burst_size);
-
- rte_eth_stats_get(test_params->slave_port_ids[0], &port_stats);
- TEST_ASSERT_EQUAL(port_stats.opackets, (uint64_t)10,
- "Port (%d) opackets stats (%d) not expected (%d) value",
- test_params->slave_port_ids[0], (int)port_stats.opackets, 10);
-
- rte_eth_stats_get(test_params->slave_port_ids[1], &port_stats);
- TEST_ASSERT_EQUAL(port_stats.opackets, (uint64_t)0,
- "Port (%d) opackets stats (%d) not expected (%d) value",
- test_params->slave_port_ids[1], (int)port_stats.opackets, 0);
-
- rte_eth_stats_get(test_params->slave_port_ids[2], &port_stats);
- TEST_ASSERT_EQUAL(port_stats.opackets, (uint64_t)10,
- "Port (%d) opackets stats (%d) not expected (%d) value",
- test_params->slave_port_ids[2], (int)port_stats.opackets, 10);
-
- rte_eth_stats_get(test_params->slave_port_ids[3], &port_stats);
- TEST_ASSERT_EQUAL(port_stats.opackets, (uint64_t)0,
- "Port (%d) opackets stats (%d) not expected (%d) value",
- test_params->slave_port_ids[3], (int)port_stats.opackets, 0);
-
- /* Verify that pkts are not sent on slaves with link status down:
- *
- * 1. Generate test bursts of traffic
- * 2. Add bursts on to virtual eth_devs
- * 3. Rx burst on bonded eth_dev, expected (burst_ size *
- * TEST_RR_LINK_STATUS_EXPECTED_ACTIVE_SLAVE_COUNT) received
- * 4. Verify stats for bonded eth_dev
- * 6. Verify stats for slave eth_devs (s0 = 10, s1 = 0, s2 = 10, s3 = 0)
- */
- for (i = 0; i < TEST_RR_LINK_STATUS_SLAVE_COUNT; i++) {
- TEST_ASSERT_EQUAL(generate_test_burst(
- &gen_pkt_burst[i][0], burst_size, 0, 1, 0, 0, 0),
- burst_size, "failed to generate packet burst");
-
- virtual_ethdev_add_mbufs_to_rx_queue(test_params->slave_port_ids[i],
- &gen_pkt_burst[i][0], burst_size);
- }
-
- TEST_ASSERT_EQUAL(rte_eth_rx_burst(
- test_params->bonded_port_id, 0, rx_pkt_burst, MAX_PKT_BURST),
- burst_size + burst_size,
- "rte_eth_rx_burst failed");
-
- /* Verify bonded device rx count */
- rte_eth_stats_get(test_params->bonded_port_id, &port_stats);
- TEST_ASSERT_EQUAL(port_stats.ipackets , (uint64_t)(burst_size + burst_size),
- "(%d) port_stats.ipackets not as expected\n",
- test_params->bonded_port_id);
-
- /* free mbufs */
- for (i = 0; i < MAX_PKT_BURST; i++) {
- if (rx_pkt_burst[i] != NULL)
- rte_pktmbuf_free(rx_pkt_burst[i]);
-
- if (gen_pkt_burst[1][i] != NULL)
- rte_pktmbuf_free(gen_pkt_burst[1][i]);
-
- if (gen_pkt_burst[3][i] != NULL)
- rte_pktmbuf_free(gen_pkt_burst[1][i]);
- }
-
- /* Clean up and remove slaves from bonded device */
- return remove_slaves_and_stop_bonded_device();
-}
-
-#define TEST_RR_POLLING_LINK_STATUS_SLAVE_COUNT (2)
-
-uint8_t polling_slave_mac[] = {0xDE, 0xAD, 0xBE, 0xEF, 0x00, 0x00 };
-
-
-int polling_test_slaves[TEST_RR_POLLING_LINK_STATUS_SLAVE_COUNT] = { -1, -1 };
-
-static int
-test_roundrobin_verfiy_polling_slave_link_status_change(void)
-{
- struct ether_addr *mac_addr = (struct ether_addr *)polling_slave_mac;
- char slave_name[RTE_ETH_NAME_MAX_LEN];
-
- int i;
-
- for (i = 0; i < TEST_RR_POLLING_LINK_STATUS_SLAVE_COUNT; i++) {
- /* Generate slave name / MAC address */
- snprintf(slave_name, RTE_ETH_NAME_MAX_LEN, "eth_virt_poll_%d", i);
- mac_addr->addr_bytes[ETHER_ADDR_LEN-1] = i;
-
- /* Create slave devices with no ISR Support */
- if (polling_test_slaves[i] == -1) {
- polling_test_slaves[i] = virtual_ethdev_create(slave_name, mac_addr,
- rte_socket_id(), 0);
- TEST_ASSERT(polling_test_slaves[i] >= 0,
- "Failed to create virtual virtual ethdev %s\n", slave_name);
-
- /* Configure slave */
- TEST_ASSERT_SUCCESS(configure_ethdev(polling_test_slaves[i], 0, 0),
- "Failed to configure virtual ethdev %s(%d)", slave_name,
- polling_test_slaves[i]);
- }
-
- /* Add slave to bonded device */
- TEST_ASSERT_SUCCESS(rte_eth_bond_slave_add(test_params->bonded_port_id,
- polling_test_slaves[i]),
- "Failed to add slave %s(%d) to bonded device %d",
- slave_name, polling_test_slaves[i],
- test_params->bonded_port_id);
- }
-
- /* Initialize bonded device */
- TEST_ASSERT_SUCCESS(configure_ethdev(test_params->bonded_port_id, 1, 1),
- "Failed to configure bonded device %d",
- test_params->bonded_port_id);
-
-
- /* Register link status change interrupt callback */
- rte_eth_dev_callback_register(test_params->bonded_port_id,
- RTE_ETH_EVENT_INTR_LSC, test_bonding_lsc_event_callback,
- &test_params->bonded_port_id);
-
- /* link status change callback for first slave link up */
- test_lsc_interrupt_count = 0;
-
- virtual_ethdev_set_link_status(polling_test_slaves[0], 1);
-
- TEST_ASSERT_SUCCESS(lsc_timeout(15000), "timed out waiting for interrupt");
-
-
- /* no link status change callback for second slave link up */
- test_lsc_interrupt_count = 0;
-
- virtual_ethdev_set_link_status(polling_test_slaves[1], 1);
-
- TEST_ASSERT_FAIL(lsc_timeout(15000), "unexpectedly succeeded");
-
- /* link status change callback for both slave links down */
- test_lsc_interrupt_count = 0;
-
- virtual_ethdev_set_link_status(polling_test_slaves[0], 0);
- virtual_ethdev_set_link_status(polling_test_slaves[1], 0);
-
- TEST_ASSERT_SUCCESS(lsc_timeout(20000), "timed out waiting for interrupt");
-
- /* Un-Register link status change interrupt callback */
- rte_eth_dev_callback_unregister(test_params->bonded_port_id,
- RTE_ETH_EVENT_INTR_LSC, test_bonding_lsc_event_callback,
- &test_params->bonded_port_id);
-
-
- /* Clean up and remove slaves from bonded device */
- for (i = 0; i < TEST_RR_POLLING_LINK_STATUS_SLAVE_COUNT; i++) {
-
- TEST_ASSERT_SUCCESS(
- rte_eth_bond_slave_remove(test_params->bonded_port_id,
- polling_test_slaves[i]),
- "Failed to remove slave %d from bonded port (%d)",
- polling_test_slaves[i], test_params->bonded_port_id);
- }
-
- return remove_slaves_and_stop_bonded_device();
-}
-
-
-/** Active Backup Mode Tests */
-
-static int
-test_activebackup_tx_burst(void)
-{
- int i, pktlen, primary_port, burst_size;
- struct rte_mbuf *pkts_burst[MAX_PKT_BURST];
- struct rte_eth_stats port_stats;
-
- TEST_ASSERT_SUCCESS(initialize_bonded_device_with_slaves(
- BONDING_MODE_ACTIVE_BACKUP, 0, 1, 1),
- "Failed to initialize bonded device with slaves");
-
- initialize_eth_header(test_params->pkt_eth_hdr,
- (struct ether_addr *)src_mac, (struct ether_addr *)dst_mac_0,
- ETHER_TYPE_IPv4, 0, 0);
- pktlen = initialize_udp_header(test_params->pkt_udp_hdr, src_port,
- dst_port_0, 16);
- pktlen = initialize_ipv4_header(test_params->pkt_ipv4_hdr, src_addr,
- dst_addr_0, pktlen);
-
- burst_size = 20 * test_params->bonded_slave_count;
-
- TEST_ASSERT(burst_size < MAX_PKT_BURST,
- "Burst size specified is greater than supported.");
-
- /* Generate a burst of packets to transmit */
- TEST_ASSERT_EQUAL(generate_packet_burst(test_params->mbuf_pool, pkts_burst,
- test_params->pkt_eth_hdr, 0, test_params->pkt_ipv4_hdr, 1,
- test_params->pkt_udp_hdr, burst_size, PACKET_BURST_GEN_PKT_LEN, 1),
- burst_size, "failed to generate burst correctly");
-
- /* Send burst on bonded port */
- TEST_ASSERT_EQUAL(rte_eth_tx_burst(test_params->bonded_port_id, 0, pkts_burst,
- burst_size), burst_size, "tx burst failed");
-
- /* Verify bonded port tx stats */
- rte_eth_stats_get(test_params->bonded_port_id, &port_stats);
- TEST_ASSERT_EQUAL(port_stats.opackets, (uint64_t)burst_size,
- "Bonded Port (%d) opackets value (%u) not as expected (%d)",
- test_params->bonded_port_id, (unsigned int)port_stats.opackets,
- burst_size);
-
- primary_port = rte_eth_bond_primary_get(test_params->bonded_port_id);
-
- /* Verify slave ports tx stats */
- for (i = 0; i < test_params->bonded_slave_count; i++) {
- rte_eth_stats_get(test_params->slave_port_ids[i], &port_stats);
- if (test_params->slave_port_ids[i] == primary_port) {
- TEST_ASSERT_EQUAL(port_stats.opackets, (uint64_t)burst_size,
- "Slave Port (%d) opackets value (%u) not as expected (%d)",
- test_params->bonded_port_id,
- (unsigned int)port_stats.opackets,
- burst_size / test_params->bonded_slave_count);
- } else {
- TEST_ASSERT_EQUAL(port_stats.opackets, 0,
- "Slave Port (%d) opackets value (%u) not as expected (%d)",
- test_params->bonded_port_id,
- (unsigned int)port_stats.opackets, 0);
- }
- }
-
- /* Put all slaves down and try and transmit */
- for (i = 0; i < test_params->bonded_slave_count; i++) {
- virtual_ethdev_simulate_link_status_interrupt(
- test_params->slave_port_ids[i], 0);
- }
-
- /* Send burst on bonded port */
- TEST_ASSERT_EQUAL(rte_eth_tx_burst(test_params->bonded_port_id, 0,
- pkts_burst, burst_size), 0, "Sending empty burst failed");
-
- /* Clean up and remove slaves from bonded device */
- return remove_slaves_and_stop_bonded_device();
-}
-
-#define TEST_ACTIVE_BACKUP_RX_BURST_SLAVE_COUNT (4)
-
-static int
-test_activebackup_rx_burst(void)
-{
- struct rte_mbuf *gen_pkt_burst[MAX_PKT_BURST] = { NULL };
- struct rte_mbuf *rx_pkt_burst[MAX_PKT_BURST] = { NULL };
-
- struct rte_eth_stats port_stats;
-
- int primary_port;
-
- int i, j, burst_size = 17;
-
- TEST_ASSERT_SUCCESS(initialize_bonded_device_with_slaves(
- BONDING_MODE_ACTIVE_BACKUP, 0,
- TEST_ACTIVE_BACKUP_RX_BURST_SLAVE_COUNT, 1),
- "Failed to initialize bonded device with slaves");
-
- primary_port = rte_eth_bond_primary_get(test_params->bonded_port_id);
- TEST_ASSERT(primary_port >= 0,
- "failed to get primary slave for bonded port (%d)",
- test_params->bonded_port_id);
-
- for (i = 0; i < test_params->bonded_slave_count; i++) {
- /* Generate test bursts of packets to transmit */
- TEST_ASSERT_EQUAL(generate_test_burst(
- &gen_pkt_burst[0], burst_size, 0, 1, 0, 0, 0),
- burst_size, "burst generation failed");
-
- /* Add rx data to slave */
- virtual_ethdev_add_mbufs_to_rx_queue(test_params->slave_port_ids[i],
- &gen_pkt_burst[0], burst_size);
-
- /* Call rx burst on bonded device */
- TEST_ASSERT_EQUAL(rte_eth_rx_burst(test_params->bonded_port_id, 0,
- &rx_pkt_burst[0], MAX_PKT_BURST), burst_size,
- "rte_eth_rx_burst failed");
-
- if (test_params->slave_port_ids[i] == primary_port) {
- /* Verify bonded device rx count */
- rte_eth_stats_get(test_params->bonded_port_id, &port_stats);
- TEST_ASSERT_EQUAL(port_stats.ipackets, (uint64_t)burst_size,
- "Bonded Port (%d) ipackets value (%u) not as expected (%d)",
- test_params->bonded_port_id,
- (unsigned int)port_stats.ipackets, burst_size);
-
- /* Verify bonded slave devices rx count */
- for (j = 0; j < test_params->bonded_slave_count; j++) {
- rte_eth_stats_get(test_params->slave_port_ids[j], &port_stats);
- if (i == j) {
- TEST_ASSERT_EQUAL(port_stats.ipackets, (uint64_t)burst_size,
- "Slave Port (%d) ipackets value (%u) not as "
- "expected (%d)", test_params->slave_port_ids[i],
- (unsigned int)port_stats.ipackets, burst_size);
- } else {
- TEST_ASSERT_EQUAL(port_stats.ipackets, 0,
- "Slave Port (%d) ipackets value (%u) not as "
- "expected (%d)\n", test_params->slave_port_ids[i],
- (unsigned int)port_stats.ipackets, 0);
- }
- }
- } else {
- for (j = 0; j < test_params->bonded_slave_count; j++) {
- rte_eth_stats_get(test_params->slave_port_ids[j], &port_stats);
- TEST_ASSERT_EQUAL(port_stats.ipackets, 0,
- "Slave Port (%d) ipackets value (%u) not as expected "
- "(%d)", test_params->slave_port_ids[i],
- (unsigned int)port_stats.ipackets, 0);
- }
- }
-
- /* free mbufs */
- for (i = 0; i < MAX_PKT_BURST; i++) {
- if (rx_pkt_burst[i] != NULL) {
- rte_pktmbuf_free(rx_pkt_burst[i]);
- rx_pkt_burst[i] = NULL;
- }
- }
-
- /* reset bonded device stats */
- rte_eth_stats_reset(test_params->bonded_port_id);
- }
-
- /* Clean up and remove slaves from bonded device */
- return remove_slaves_and_stop_bonded_device();
-}
-
-static int
-test_activebackup_verify_promiscuous_enable_disable(void)
-{
- int i, primary_port, promiscuous_en;
-
- /* Initialize bonded device with 4 slaves in round robin mode */
- TEST_ASSERT_SUCCESS(initialize_bonded_device_with_slaves(
- BONDING_MODE_ACTIVE_BACKUP, 0, 4, 1),
- "Failed to initialize bonded device with slaves");
-
- primary_port = rte_eth_bond_primary_get(test_params->bonded_port_id);
- TEST_ASSERT(primary_port >= 0,
- "failed to get primary slave for bonded port (%d)",
- test_params->bonded_port_id);
-
- rte_eth_promiscuous_enable(test_params->bonded_port_id);
-
- TEST_ASSERT_EQUAL(rte_eth_promiscuous_get(test_params->bonded_port_id), 1,
- "Port (%d) promiscuous mode not enabled",
- test_params->bonded_port_id);
-
- for (i = 0; i < test_params->bonded_slave_count; i++) {
- promiscuous_en = rte_eth_promiscuous_get(
- test_params->slave_port_ids[i]);
- if (primary_port == test_params->slave_port_ids[i]) {
- TEST_ASSERT_EQUAL(promiscuous_en, 1,
- "slave port (%d) promiscuous mode not enabled",
- test_params->slave_port_ids[i]);
- } else {
- TEST_ASSERT_EQUAL(promiscuous_en, 0,
- "slave port (%d) promiscuous mode enabled",
- test_params->slave_port_ids[i]);
- }
-
- }
-
- rte_eth_promiscuous_disable(test_params->bonded_port_id);
-
- TEST_ASSERT_EQUAL(rte_eth_promiscuous_get(test_params->bonded_port_id), 0,
- "Port (%d) promiscuous mode not disabled\n",
- test_params->bonded_port_id);
-
- for (i = 0; i < test_params->bonded_slave_count; i++) {
- promiscuous_en = rte_eth_promiscuous_get(
- test_params->slave_port_ids[i]);
- TEST_ASSERT_EQUAL(promiscuous_en, 0,
- "slave port (%d) promiscuous mode not disabled\n",
- test_params->slave_port_ids[i]);
- }
-
- /* Clean up and remove slaves from bonded device */
- return remove_slaves_and_stop_bonded_device();
-}
-
-static int
-test_activebackup_verify_mac_assignment(void)
-{
- struct ether_addr read_mac_addr, expected_mac_addr_0, expected_mac_addr_1;
-
- rte_eth_macaddr_get(test_params->slave_port_ids[0], &expected_mac_addr_0);
- rte_eth_macaddr_get(test_params->slave_port_ids[1], &expected_mac_addr_1);
-
- /* Initialize bonded device with 2 slaves in active backup mode */
- TEST_ASSERT_SUCCESS(initialize_bonded_device_with_slaves(
- BONDING_MODE_ACTIVE_BACKUP, 0, 2, 1),
- "Failed to initialize bonded device with slaves");
-
- /* Verify that bonded MACs is that of first slave and that the other slave
- * MAC hasn't been changed */
- rte_eth_macaddr_get(test_params->bonded_port_id, &read_mac_addr);
- TEST_ASSERT_SUCCESS(memcmp(&expected_mac_addr_0, &read_mac_addr,
- sizeof(read_mac_addr)),
- "bonded port (%d) mac address not set to that of primary port",
- test_params->bonded_port_id);
-
- rte_eth_macaddr_get(test_params->slave_port_ids[0], &read_mac_addr);
- TEST_ASSERT_SUCCESS(memcmp(&expected_mac_addr_0, &read_mac_addr,
- sizeof(read_mac_addr)),
- "slave port (%d) mac address not set to that of primary port",
- test_params->slave_port_ids[0]);
-
- rte_eth_macaddr_get(test_params->slave_port_ids[1], &read_mac_addr);
- TEST_ASSERT_SUCCESS(memcmp(&expected_mac_addr_1, &read_mac_addr,
- sizeof(read_mac_addr)),
- "slave port (%d) mac address not as expected",
- test_params->slave_port_ids[1]);
-
- /* change primary and verify that MAC addresses haven't changed */
- TEST_ASSERT_EQUAL(rte_eth_bond_primary_set(test_params->bonded_port_id,
- test_params->slave_port_ids[1]), 0,
- "Failed to set bonded port (%d) primary port to (%d)",
- test_params->bonded_port_id, test_params->slave_port_ids[1]);
-
- rte_eth_macaddr_get(test_params->bonded_port_id, &read_mac_addr);
- TEST_ASSERT_SUCCESS(memcmp(&expected_mac_addr_0, &read_mac_addr,
- sizeof(read_mac_addr)),
- "bonded port (%d) mac address not set to that of primary port",
- test_params->bonded_port_id);
-
- rte_eth_macaddr_get(test_params->slave_port_ids[0], &read_mac_addr);
- TEST_ASSERT_SUCCESS(memcmp(&expected_mac_addr_0, &read_mac_addr,
- sizeof(read_mac_addr)),
- "slave port (%d) mac address not set to that of primary port",
- test_params->slave_port_ids[0]);
-
- rte_eth_macaddr_get(test_params->slave_port_ids[1], &read_mac_addr);
- TEST_ASSERT_SUCCESS(memcmp(&expected_mac_addr_1, &read_mac_addr,
- sizeof(read_mac_addr)),
- "slave port (%d) mac address not as expected",
- test_params->slave_port_ids[1]);
-
- /* stop / start bonded device and verify that primary MAC address is
- * propagated to bonded device and slaves */
-
- rte_eth_dev_stop(test_params->bonded_port_id);
-
- TEST_ASSERT_SUCCESS(rte_eth_dev_start(test_params->bonded_port_id),
- "Failed to start device");
-
- rte_eth_macaddr_get(test_params->bonded_port_id, &read_mac_addr);
- TEST_ASSERT_SUCCESS(memcmp(&expected_mac_addr_1, &read_mac_addr,
- sizeof(read_mac_addr)),
- "bonded port (%d) mac address not set to that of primary port",
- test_params->bonded_port_id);
-
- rte_eth_macaddr_get(test_params->slave_port_ids[0], &read_mac_addr);
- TEST_ASSERT_SUCCESS(memcmp(&expected_mac_addr_0, &read_mac_addr,
- sizeof(read_mac_addr)),
- "slave port (%d) mac address not as expected",
- test_params->slave_port_ids[0]);
-
- rte_eth_macaddr_get(test_params->slave_port_ids[1], &read_mac_addr);
- TEST_ASSERT_SUCCESS(memcmp(&expected_mac_addr_1, &read_mac_addr,
- sizeof(read_mac_addr)),
- "slave port (%d) mac address not set to that of primary port",
- test_params->slave_port_ids[1]);
-
- /* Set explicit MAC address */
- TEST_ASSERT_SUCCESS(rte_eth_bond_mac_address_set(
- test_params->bonded_port_id, (struct ether_addr *)bonded_mac),
- "failed to set MAC address");
-
- rte_eth_macaddr_get(test_params->bonded_port_id, &read_mac_addr);
- TEST_ASSERT_SUCCESS(memcmp(&bonded_mac, &read_mac_addr,
- sizeof(read_mac_addr)),
- "bonded port (%d) mac address not set to that of bonded port",
- test_params->bonded_port_id);
-
- rte_eth_macaddr_get(test_params->slave_port_ids[0], &read_mac_addr);
- TEST_ASSERT_SUCCESS(memcmp(&expected_mac_addr_0, &read_mac_addr,
- sizeof(read_mac_addr)),
- "slave port (%d) mac address not as expected",
- test_params->slave_port_ids[0]);
-
- rte_eth_macaddr_get(test_params->slave_port_ids[1], &read_mac_addr);
- TEST_ASSERT_SUCCESS(memcmp(&bonded_mac, &read_mac_addr,
- sizeof(read_mac_addr)),
- "slave port (%d) mac address not set to that of bonded port",
- test_params->slave_port_ids[1]);
-
- /* Clean up and remove slaves from bonded device */
- return remove_slaves_and_stop_bonded_device();
-}
-
-static int
-test_activebackup_verify_slave_link_status_change_failover(void)
-{
- struct rte_mbuf *pkt_burst[TEST_ACTIVE_BACKUP_RX_BURST_SLAVE_COUNT][MAX_PKT_BURST];
- struct rte_mbuf *rx_pkt_burst[MAX_PKT_BURST] = { NULL };
- struct rte_eth_stats port_stats;
-
- uint8_t slaves[RTE_MAX_ETHPORTS];
-
- int i, j, burst_size, slave_count, primary_port;
-
- burst_size = 21;
-
- memset(pkt_burst, 0, sizeof(pkt_burst));
-
- /* Generate packet burst for testing */
- TEST_ASSERT_EQUAL(generate_test_burst(
- &pkt_burst[0][0], burst_size, 0, 1, 0, 0, 0), burst_size,
- "generate_test_burst failed");
-
- /* Initialize bonded device with 4 slaves in round robin mode */
- TEST_ASSERT_SUCCESS(initialize_bonded_device_with_slaves(
- BONDING_MODE_ACTIVE_BACKUP, 0,
- TEST_ACTIVE_BACKUP_RX_BURST_SLAVE_COUNT, 1),
- "Failed to initialize bonded device with slaves");
-
- /* Verify Current Slaves Count /Active Slave Count is */
- slave_count = rte_eth_bond_slaves_get(test_params->bonded_port_id, slaves,
- RTE_MAX_ETHPORTS);
- TEST_ASSERT_EQUAL(slave_count, 4,
- "Number of slaves (%d) is not as expected (%d).",
- slave_count, 4);
-
- slave_count = rte_eth_bond_active_slaves_get(test_params->bonded_port_id,
- slaves, RTE_MAX_ETHPORTS);
- TEST_ASSERT_EQUAL(slave_count, 4,
- "Number of active slaves (%d) is not as expected (%d).",
- slave_count, 4);
-
- primary_port = rte_eth_bond_primary_get(test_params->bonded_port_id);
- TEST_ASSERT_EQUAL(primary_port, test_params->slave_port_ids[0],
- "Primary port not as expected");
-
- /* Bring 2 slaves down and verify active slave count */
- virtual_ethdev_simulate_link_status_interrupt(
- test_params->slave_port_ids[1], 0);
- virtual_ethdev_simulate_link_status_interrupt(
- test_params->slave_port_ids[3], 0);
-
- TEST_ASSERT_EQUAL(rte_eth_bond_active_slaves_get(
- test_params->bonded_port_id, slaves, RTE_MAX_ETHPORTS), 2,
- "Number of active slaves (%d) is not as expected (%d).",
- slave_count, 2);
-
- virtual_ethdev_simulate_link_status_interrupt(
- test_params->slave_port_ids[1], 1);
- virtual_ethdev_simulate_link_status_interrupt(
- test_params->slave_port_ids[3], 1);
-
-
- /* Bring primary port down, verify that active slave count is 3 and primary
- * has changed */
- virtual_ethdev_simulate_link_status_interrupt(
- test_params->slave_port_ids[0], 0);
-
- TEST_ASSERT_EQUAL(rte_eth_bond_active_slaves_get(
- test_params->bonded_port_id, slaves, RTE_MAX_ETHPORTS),
- 3,
- "Number of active slaves (%d) is not as expected (%d).",
- slave_count, 3);
-
- primary_port = rte_eth_bond_primary_get(test_params->bonded_port_id);
- TEST_ASSERT_EQUAL(primary_port, test_params->slave_port_ids[2],
- "Primary port not as expected");
-
- /* Verify that pkts are sent on new primary slave */
-
- TEST_ASSERT_EQUAL(rte_eth_tx_burst(
- test_params->bonded_port_id, 0, &pkt_burst[0][0],
- burst_size), burst_size, "rte_eth_tx_burst failed");
-
- rte_eth_stats_get(test_params->slave_port_ids[2], &port_stats);
- TEST_ASSERT_EQUAL(port_stats.opackets, (uint64_t)burst_size,
- "(%d) port_stats.opackets not as expected",
- test_params->slave_port_ids[2]);
-
- rte_eth_stats_get(test_params->slave_port_ids[0], &port_stats);
- TEST_ASSERT_EQUAL(port_stats.opackets, 0,
- "(%d) port_stats.opackets not as expected\n",
- test_params->slave_port_ids[0]);
-
- rte_eth_stats_get(test_params->slave_port_ids[1], &port_stats);
- TEST_ASSERT_EQUAL(port_stats.opackets, 0,
- "(%d) port_stats.opackets not as expected\n",
- test_params->slave_port_ids[1]);
-
- rte_eth_stats_get(test_params->slave_port_ids[3], &port_stats);
- TEST_ASSERT_EQUAL(port_stats.opackets, 0,
- "(%d) port_stats.opackets not as expected\n",
- test_params->slave_port_ids[3]);
-
- /* Generate packet burst for testing */
-
- for (i = 0; i < TEST_ACTIVE_BACKUP_RX_BURST_SLAVE_COUNT; i++) {
- TEST_ASSERT_EQUAL(generate_test_burst(
- &pkt_burst[i][0], burst_size, 0, 1, 0, 0, 0), burst_size,
- "generate_test_burst failed");
-
- virtual_ethdev_add_mbufs_to_rx_queue(
- test_params->slave_port_ids[i], &pkt_burst[i][0], burst_size);
- }
-
- TEST_ASSERT_EQUAL(rte_eth_rx_burst(
- test_params->bonded_port_id, 0, rx_pkt_burst, MAX_PKT_BURST),
- burst_size, "rte_eth_rx_burst\n");
-
- /* Verify bonded device rx count */
- rte_eth_stats_get(test_params->bonded_port_id, &port_stats);
- TEST_ASSERT_EQUAL(port_stats.ipackets, (uint64_t)burst_size,
- "(%d) port_stats.ipackets not as expected",
- test_params->bonded_port_id);
-
- rte_eth_stats_get(test_params->slave_port_ids[2], &port_stats);
- TEST_ASSERT_EQUAL(port_stats.opackets, (uint64_t)burst_size,
- "(%d) port_stats.opackets not as expected",
- test_params->slave_port_ids[2]);
-
- rte_eth_stats_get(test_params->slave_port_ids[0], &port_stats);
- TEST_ASSERT_EQUAL(port_stats.opackets, 0,
- "(%d) port_stats.opackets not as expected",
- test_params->slave_port_ids[0]);
-
- rte_eth_stats_get(test_params->slave_port_ids[1], &port_stats);
- TEST_ASSERT_EQUAL(port_stats.opackets, 0,
- "(%d) port_stats.opackets not as expected",
- test_params->slave_port_ids[1]);
-
- rte_eth_stats_get(test_params->slave_port_ids[3], &port_stats);
- TEST_ASSERT_EQUAL(port_stats.opackets, 0,
- "(%d) port_stats.opackets not as expected",
- test_params->slave_port_ids[3]);
-
- /* free mbufs */
- for (i = 0; i < TEST_ACTIVE_BACKUP_RX_BURST_SLAVE_COUNT; i++) {
- for (j = 0; j < MAX_PKT_BURST; j++) {
- if (pkt_burst[i][j] != NULL) {
- rte_pktmbuf_free(pkt_burst[i][j]);
- pkt_burst[i][j] = NULL;
- }
- }
- }
-
- /* Clean up and remove slaves from bonded device */
- return remove_slaves_and_stop_bonded_device();
-}
-
-/** Balance Mode Tests */
-
-static int
-test_balance_xmit_policy_configuration(void)
-{
- TEST_ASSERT_SUCCESS(initialize_bonded_device_with_slaves(
- BONDING_MODE_ACTIVE_BACKUP, 0, 2, 1),
- "Failed to initialize_bonded_device_with_slaves.");
-
- /* Invalid port id */
- TEST_ASSERT_FAIL(rte_eth_bond_xmit_policy_set(
- INVALID_PORT_ID, BALANCE_XMIT_POLICY_LAYER2),
- "Expected call to failed as invalid port specified.");
-
- /* Set xmit policy on non bonded device */
- TEST_ASSERT_FAIL(rte_eth_bond_xmit_policy_set(
- test_params->slave_port_ids[0], BALANCE_XMIT_POLICY_LAYER2),
- "Expected call to failed as invalid port specified.");
-
-
- TEST_ASSERT_SUCCESS(rte_eth_bond_xmit_policy_set(
- test_params->bonded_port_id, BALANCE_XMIT_POLICY_LAYER2),
- "Failed to set balance xmit policy.");
-
- TEST_ASSERT_EQUAL(rte_eth_bond_xmit_policy_get(test_params->bonded_port_id),
- BALANCE_XMIT_POLICY_LAYER2, "balance xmit policy not as expected.");
-
-
- TEST_ASSERT_SUCCESS(rte_eth_bond_xmit_policy_set(
- test_params->bonded_port_id, BALANCE_XMIT_POLICY_LAYER23),
- "Failed to set balance xmit policy.");
-
- TEST_ASSERT_EQUAL(rte_eth_bond_xmit_policy_get(test_params->bonded_port_id),
- BALANCE_XMIT_POLICY_LAYER23,
- "balance xmit policy not as expected.");
-
-
- TEST_ASSERT_SUCCESS(rte_eth_bond_xmit_policy_set(
- test_params->bonded_port_id, BALANCE_XMIT_POLICY_LAYER34),
- "Failed to set balance xmit policy.");
-
- TEST_ASSERT_EQUAL(rte_eth_bond_xmit_policy_get(test_params->bonded_port_id),
- BALANCE_XMIT_POLICY_LAYER34,
- "balance xmit policy not as expected.");
-
- /* Invalid port id */
- TEST_ASSERT_FAIL(rte_eth_bond_xmit_policy_get(INVALID_PORT_ID),
- "Expected call to failed as invalid port specified.");
-
- /* Clean up and remove slaves from bonded device */
- return remove_slaves_and_stop_bonded_device();
-}
-
-#define TEST_BALANCE_L2_TX_BURST_SLAVE_COUNT (2)
-
-static int
-test_balance_l2_tx_burst(void)
-{
- struct rte_mbuf *pkts_burst[TEST_BALANCE_L2_TX_BURST_SLAVE_COUNT][MAX_PKT_BURST];
- int burst_size[TEST_BALANCE_L2_TX_BURST_SLAVE_COUNT] = { 10, 15 };
-
- uint16_t pktlen;
- int i;
- struct rte_eth_stats port_stats;
-
- TEST_ASSERT_SUCCESS(initialize_bonded_device_with_slaves(
- BONDING_MODE_BALANCE, 0, TEST_BALANCE_L2_TX_BURST_SLAVE_COUNT, 1),
- "Failed to initialize_bonded_device_with_slaves.");
-
- TEST_ASSERT_SUCCESS(rte_eth_bond_xmit_policy_set(
- test_params->bonded_port_id, BALANCE_XMIT_POLICY_LAYER2),
- "Failed to set balance xmit policy.");
-
- initialize_eth_header(test_params->pkt_eth_hdr,
- (struct ether_addr *)src_mac, (struct ether_addr *)dst_mac_0,
- ETHER_TYPE_IPv4, 0, 0);
- pktlen = initialize_udp_header(test_params->pkt_udp_hdr, src_port,
- dst_port_0, 16);
- pktlen = initialize_ipv4_header(test_params->pkt_ipv4_hdr, src_addr,
- dst_addr_0, pktlen);
-
- /* Generate a burst 1 of packets to transmit */
- TEST_ASSERT_EQUAL(generate_packet_burst(test_params->mbuf_pool, &pkts_burst[0][0],
- test_params->pkt_eth_hdr, 0, test_params->pkt_ipv4_hdr, 1,
- test_params->pkt_udp_hdr, burst_size[0],
- PACKET_BURST_GEN_PKT_LEN, 1), burst_size[0],
- "failed to generate packet burst");
-
- initialize_eth_header(test_params->pkt_eth_hdr,
- (struct ether_addr *)src_mac, (struct ether_addr *)dst_mac_1,
- ETHER_TYPE_IPv4, 0, 0);
-
- /* Generate a burst 2 of packets to transmit */
- TEST_ASSERT_EQUAL(generate_packet_burst(test_params->mbuf_pool, &pkts_burst[1][0],
- test_params->pkt_eth_hdr, 0, test_params->pkt_ipv4_hdr, 1,
- test_params->pkt_udp_hdr, burst_size[1],
- PACKET_BURST_GEN_PKT_LEN, 1), burst_size[1],
- "failed to generate packet burst");
-
- /* Send burst 1 on bonded port */
- for (i = 0; i < TEST_BALANCE_L2_TX_BURST_SLAVE_COUNT; i++) {
- TEST_ASSERT_EQUAL(rte_eth_tx_burst(test_params->bonded_port_id, 0,
- &pkts_burst[i][0], burst_size[i]),
- burst_size[i], "Failed to transmit packet burst");
- }
-
- /* Verify bonded port tx stats */
- rte_eth_stats_get(test_params->bonded_port_id, &port_stats);
- TEST_ASSERT_EQUAL(port_stats.opackets,
- (uint64_t)(burst_size[0] + burst_size[1]),
- "Bonded Port (%d) opackets value (%u) not as expected (%d)",
- test_params->bonded_port_id, (unsigned int)port_stats.opackets,
- burst_size[0] + burst_size[1]);
-
-
- /* Verify slave ports tx stats */
- rte_eth_stats_get(test_params->slave_port_ids[0], &port_stats);
- TEST_ASSERT_EQUAL(port_stats.opackets, (uint64_t)burst_size[0],
- "Slave Port (%d) opackets value (%u) not as expected (%d)",
- test_params->slave_port_ids[0], (unsigned int)port_stats.opackets,
- burst_size[0]);
-
- rte_eth_stats_get(test_params->slave_port_ids[1], &port_stats);
- TEST_ASSERT_EQUAL(port_stats.opackets, (uint64_t)burst_size[1],
- "Slave Port (%d) opackets value (%u) not as expected (%d)\n",
- test_params->slave_port_ids[1], (unsigned int)port_stats.opackets,
- burst_size[1]);
-
- /* Put all slaves down and try and transmit */
- for (i = 0; i < test_params->bonded_slave_count; i++) {
-
- virtual_ethdev_simulate_link_status_interrupt(
- test_params->slave_port_ids[i], 0);
- }
-
- /* Send burst on bonded port */
- TEST_ASSERT_EQUAL(rte_eth_tx_burst(
- test_params->bonded_port_id, 0, &pkts_burst[0][0], burst_size[0]),
- 0, "Expected zero packet");
-
- /* Clean up and remove slaves from bonded device */
- return remove_slaves_and_stop_bonded_device();
-}
-
-static int
-balance_l23_tx_burst(uint8_t vlan_enabled, uint8_t ipv4,
- uint8_t toggle_mac_addr, uint8_t toggle_ip_addr)
-{
- int i, burst_size_1, burst_size_2, nb_tx_1, nb_tx_2;
-
- struct rte_mbuf *pkts_burst_1[MAX_PKT_BURST];
- struct rte_mbuf *pkts_burst_2[MAX_PKT_BURST];
-
- struct rte_eth_stats port_stats;
-
- TEST_ASSERT_SUCCESS(initialize_bonded_device_with_slaves(
- BONDING_MODE_BALANCE, 0, 2, 1),
- "Failed to initialize_bonded_device_with_slaves.");
-
- TEST_ASSERT_SUCCESS(rte_eth_bond_xmit_policy_set(
- test_params->bonded_port_id, BALANCE_XMIT_POLICY_LAYER23),
- "Failed to set balance xmit policy.");
-
- burst_size_1 = 20;
- burst_size_2 = 10;
-
- TEST_ASSERT(burst_size_1 < MAX_PKT_BURST || burst_size_2 < MAX_PKT_BURST,
- "Burst size specified is greater than supported.");
-
- /* Generate test bursts of packets to transmit */
- TEST_ASSERT_EQUAL(generate_test_burst(
- pkts_burst_1, burst_size_1, vlan_enabled, ipv4, 0, 0, 0),
- burst_size_1, "failed to generate packet burst");
-
- TEST_ASSERT_EQUAL(generate_test_burst(pkts_burst_2, burst_size_2, vlan_enabled, ipv4,
- toggle_mac_addr, toggle_ip_addr, 0), burst_size_2,
- "failed to generate packet burst");
-
- /* Send burst 1 on bonded port */
- nb_tx_1 = rte_eth_tx_burst(test_params->bonded_port_id, 0, pkts_burst_1,
- burst_size_1);
- TEST_ASSERT_EQUAL(nb_tx_1, burst_size_1, "tx burst failed");
-
- /* Send burst 2 on bonded port */
- nb_tx_2 = rte_eth_tx_burst(test_params->bonded_port_id, 0, pkts_burst_2,
- burst_size_2);
- TEST_ASSERT_EQUAL(nb_tx_2, burst_size_2, "tx burst failed");
-
- /* Verify bonded port tx stats */
- rte_eth_stats_get(test_params->bonded_port_id, &port_stats);
- TEST_ASSERT_EQUAL(port_stats.opackets, (uint64_t)(nb_tx_1 + nb_tx_2),
- "Bonded Port (%d) opackets value (%u) not as expected (%d)",
- test_params->bonded_port_id, (unsigned int)port_stats.opackets,
- nb_tx_1 + nb_tx_2);
-
- /* Verify slave ports tx stats */
- rte_eth_stats_get(test_params->slave_port_ids[0], &port_stats);
- TEST_ASSERT_EQUAL(port_stats.opackets, (uint64_t)nb_tx_1,
- "Slave Port (%d) opackets value (%u) not as expected (%d)",
- test_params->slave_port_ids[0], (unsigned int)port_stats.opackets,
- nb_tx_1);
-
- rte_eth_stats_get(test_params->slave_port_ids[1], &port_stats);
- TEST_ASSERT_EQUAL(port_stats.opackets, (uint64_t)nb_tx_2,
- "Slave Port (%d) opackets value (%u) not as expected (%d)",
- test_params->slave_port_ids[1], (unsigned int)port_stats.opackets,
- nb_tx_2);
-
- /* Put all slaves down and try and transmit */
- for (i = 0; i < test_params->bonded_slave_count; i++) {
-
- virtual_ethdev_simulate_link_status_interrupt(
- test_params->slave_port_ids[i], 0);
- }
-
- /* Send burst on bonded port */
- TEST_ASSERT_EQUAL(rte_eth_tx_burst(
- test_params->bonded_port_id, 0, pkts_burst_1,
- burst_size_1), 0, "Expected zero packet");
-
-
- /* Clean up and remove slaves from bonded device */
- return remove_slaves_and_stop_bonded_device();
-}
-
-static int
-test_balance_l23_tx_burst_ipv4_toggle_ip_addr(void)
-{
- return balance_l23_tx_burst(0, 1, 1, 0);
-}
-
-static int
-test_balance_l23_tx_burst_vlan_ipv4_toggle_ip_addr(void)
-{
- return balance_l23_tx_burst(1, 1, 0, 1);
-}
-
-static int
-test_balance_l23_tx_burst_ipv6_toggle_ip_addr(void)
-{
- return balance_l23_tx_burst(0, 0, 0, 1);
-}
-
-static int
-test_balance_l23_tx_burst_vlan_ipv6_toggle_ip_addr(void)
-{
- return balance_l23_tx_burst(1, 0, 0, 1);
-}
-
-static int
-test_balance_l23_tx_burst_toggle_mac_addr(void)
-{
- return balance_l23_tx_burst(0, 0, 1, 0);
-}
-
-static int
-balance_l34_tx_burst(uint8_t vlan_enabled, uint8_t ipv4,
- uint8_t toggle_mac_addr, uint8_t toggle_ip_addr,
- uint8_t toggle_udp_port)
-{
- int i, burst_size_1, burst_size_2, nb_tx_1, nb_tx_2;
-
- struct rte_mbuf *pkts_burst_1[MAX_PKT_BURST];
- struct rte_mbuf *pkts_burst_2[MAX_PKT_BURST];
-
- struct rte_eth_stats port_stats;
-
- TEST_ASSERT_SUCCESS(initialize_bonded_device_with_slaves(
- BONDING_MODE_BALANCE, 0, 2, 1),
- "Failed to initialize_bonded_device_with_slaves.");
-
- TEST_ASSERT_SUCCESS(rte_eth_bond_xmit_policy_set(
- test_params->bonded_port_id, BALANCE_XMIT_POLICY_LAYER34),
- "Failed to set balance xmit policy.");
-
- burst_size_1 = 20;
- burst_size_2 = 10;
-
- TEST_ASSERT(burst_size_1 < MAX_PKT_BURST || burst_size_2 < MAX_PKT_BURST,
- "Burst size specified is greater than supported.");
-
- /* Generate test bursts of packets to transmit */
- TEST_ASSERT_EQUAL(generate_test_burst(
- pkts_burst_1, burst_size_1, vlan_enabled, ipv4, 0, 0, 0),
- burst_size_1, "failed to generate burst");
-
- TEST_ASSERT_EQUAL(generate_test_burst(pkts_burst_2, burst_size_2,
- vlan_enabled, ipv4, toggle_mac_addr, toggle_ip_addr,
- toggle_udp_port), burst_size_2, "failed to generate burst");
-
- /* Send burst 1 on bonded port */
- nb_tx_1 = rte_eth_tx_burst(test_params->bonded_port_id, 0, pkts_burst_1,
- burst_size_1);
- TEST_ASSERT_EQUAL(nb_tx_1, burst_size_1, "tx burst failed");
-
- /* Send burst 2 on bonded port */
- nb_tx_2 = rte_eth_tx_burst(test_params->bonded_port_id, 0, pkts_burst_2,
- burst_size_2);
- TEST_ASSERT_EQUAL(nb_tx_2, burst_size_2, "tx burst failed");
-
-
- /* Verify bonded port tx stats */
- rte_eth_stats_get(test_params->bonded_port_id, &port_stats);
- TEST_ASSERT_EQUAL(port_stats.opackets, (uint64_t)(nb_tx_1 + nb_tx_2),
- "Bonded Port (%d) opackets value (%u) not as expected (%d)",
- test_params->bonded_port_id, (unsigned int)port_stats.opackets,
- nb_tx_1 + nb_tx_2);
-
- /* Verify slave ports tx stats */
- rte_eth_stats_get(test_params->slave_port_ids[0], &port_stats);
- TEST_ASSERT_EQUAL(port_stats.opackets, (uint64_t)nb_tx_1,
- "Slave Port (%d) opackets value (%u) not as expected (%d)",
- test_params->slave_port_ids[0], (unsigned int)port_stats.opackets,
- nb_tx_1);
-
- rte_eth_stats_get(test_params->slave_port_ids[1], &port_stats);
- TEST_ASSERT_EQUAL(port_stats.opackets, (uint64_t)nb_tx_2,
- "Slave Port (%d) opackets value (%u) not as expected (%d)",
- test_params->slave_port_ids[1], (unsigned int)port_stats.opackets,
- nb_tx_2);
-
- /* Put all slaves down and try and transmit */
- for (i = 0; i < test_params->bonded_slave_count; i++) {
-
- virtual_ethdev_simulate_link_status_interrupt(
- test_params->slave_port_ids[i], 0);
- }
-
- /* Send burst on bonded port */
- TEST_ASSERT_EQUAL(rte_eth_tx_burst(
- test_params->bonded_port_id, 0, pkts_burst_1,
- burst_size_1), 0, "Expected zero packet");
-
- /* Clean up and remove slaves from bonded device */
- return remove_slaves_and_stop_bonded_device();
-}
-
-static int
-test_balance_l34_tx_burst_ipv4_toggle_ip_addr(void)
-{
- return balance_l34_tx_burst(0, 1, 0, 1, 0);
-}
-
-static int
-test_balance_l34_tx_burst_ipv4_toggle_udp_port(void)
-{
- return balance_l34_tx_burst(0, 1, 0, 0, 1);
-}
-
-static int
-test_balance_l34_tx_burst_vlan_ipv4_toggle_ip_addr(void)
-{
- return balance_l34_tx_burst(1, 1, 0, 1, 0);
-}
-
-static int
-test_balance_l34_tx_burst_ipv6_toggle_ip_addr(void)
-{
- return balance_l34_tx_burst(0, 0, 0, 1, 0);
-}
-
-static int
-test_balance_l34_tx_burst_vlan_ipv6_toggle_ip_addr(void)
-{
- return balance_l34_tx_burst(1, 0, 0, 1, 0);
-}
-
-static int
-test_balance_l34_tx_burst_ipv6_toggle_udp_port(void)
-{
- return balance_l34_tx_burst(0, 0, 0, 0, 1);
-}
-
-#define TEST_BAL_SLAVE_TX_FAIL_SLAVE_COUNT (2)
-#define TEST_BAL_SLAVE_TX_FAIL_BURST_SIZE_1 (40)
-#define TEST_BAL_SLAVE_TX_FAIL_BURST_SIZE_2 (20)
-#define TEST_BAL_SLAVE_TX_FAIL_PACKETS_COUNT (25)
-#define TEST_BAL_SLAVE_TX_FAIL_FAILING_SLAVE_IDX (0)
-
-static int
-test_balance_tx_burst_slave_tx_fail(void)
-{
- struct rte_mbuf *pkts_burst_1[TEST_BAL_SLAVE_TX_FAIL_BURST_SIZE_1];
- struct rte_mbuf *pkts_burst_2[TEST_BAL_SLAVE_TX_FAIL_BURST_SIZE_2];
-
- struct rte_mbuf *expected_fail_pkts[TEST_BAL_SLAVE_TX_FAIL_PACKETS_COUNT];
-
- struct rte_eth_stats port_stats;
-
- int i, first_tx_fail_idx, tx_count_1, tx_count_2;
-
- TEST_ASSERT_SUCCESS(initialize_bonded_device_with_slaves(
- BONDING_MODE_BALANCE, 0,
- TEST_BAL_SLAVE_TX_FAIL_SLAVE_COUNT, 1),
- "Failed to intialise bonded device");
-
- TEST_ASSERT_SUCCESS(rte_eth_bond_xmit_policy_set(
- test_params->bonded_port_id, BALANCE_XMIT_POLICY_LAYER2),
- "Failed to set balance xmit policy.");
-
-
- /* Generate test bursts for transmission */
- TEST_ASSERT_EQUAL(generate_test_burst(pkts_burst_1,
- TEST_BAL_SLAVE_TX_FAIL_BURST_SIZE_1, 0, 0, 0, 0, 0),
- TEST_BAL_SLAVE_TX_FAIL_BURST_SIZE_1,
- "Failed to generate test packet burst 1");
-
- first_tx_fail_idx = TEST_BAL_SLAVE_TX_FAIL_BURST_SIZE_1 -
- TEST_BAL_SLAVE_TX_FAIL_PACKETS_COUNT;
-
- /* copy mbuf referneces for expected transmission failures */
- for (i = 0; i < TEST_BAL_SLAVE_TX_FAIL_PACKETS_COUNT; i++)
- expected_fail_pkts[i] = pkts_burst_1[i + first_tx_fail_idx];
-
- TEST_ASSERT_EQUAL(generate_test_burst(pkts_burst_2,
- TEST_BAL_SLAVE_TX_FAIL_BURST_SIZE_2, 0, 0, 1, 0, 0),
- TEST_BAL_SLAVE_TX_FAIL_BURST_SIZE_2,
- "Failed to generate test packet burst 2");
-
-
- /* Set virtual slave TEST_BAL_SLAVE_TX_FAIL_FAILING_SLAVE_IDX to only fail
- * transmission of TEST_BAL_SLAVE_TX_FAIL_PACKETS_COUNT packets of burst */
- virtual_ethdev_tx_burst_fn_set_success(
- test_params->slave_port_ids[TEST_BAL_SLAVE_TX_FAIL_FAILING_SLAVE_IDX],
- 0);
-
- virtual_ethdev_tx_burst_fn_set_tx_pkt_fail_count(
- test_params->slave_port_ids[TEST_BAL_SLAVE_TX_FAIL_FAILING_SLAVE_IDX],
- TEST_BAL_SLAVE_TX_FAIL_PACKETS_COUNT);
-
-
- /* Transmit burst 1 */
- tx_count_1 = rte_eth_tx_burst(test_params->bonded_port_id, 0, pkts_burst_1,
- TEST_BAL_SLAVE_TX_FAIL_BURST_SIZE_1);
-
- TEST_ASSERT_EQUAL(tx_count_1, TEST_BAL_SLAVE_TX_FAIL_BURST_SIZE_1 -
- TEST_BAL_SLAVE_TX_FAIL_PACKETS_COUNT,
- "Transmitted (%d) packets, expected to transmit (%d) packets",
- tx_count_1, TEST_BAL_SLAVE_TX_FAIL_BURST_SIZE_1 -
- TEST_BAL_SLAVE_TX_FAIL_PACKETS_COUNT);
-
- /* Verify that failed packet are expected failed packets */
- for (i = 0; i < TEST_RR_SLAVE_TX_FAIL_PACKETS_COUNT; i++) {
- TEST_ASSERT_EQUAL(expected_fail_pkts[i], pkts_burst_1[i + tx_count_1],
- "expected mbuf (%d) pointer %p not expected pointer %p",
- i, expected_fail_pkts[i], pkts_burst_1[i + tx_count_1]);
- }
-
- /* Transmit burst 2 */
- tx_count_2 = rte_eth_tx_burst(test_params->bonded_port_id, 0, pkts_burst_2,
- TEST_BAL_SLAVE_TX_FAIL_BURST_SIZE_2);
-
- TEST_ASSERT_EQUAL(tx_count_2, TEST_BAL_SLAVE_TX_FAIL_BURST_SIZE_2,
- "Transmitted (%d) packets, expected to transmit (%d) packets",
- tx_count_2, TEST_BAL_SLAVE_TX_FAIL_BURST_SIZE_2);
-
-
- /* Verify bonded port tx stats */
- rte_eth_stats_get(test_params->bonded_port_id, &port_stats);
-
- TEST_ASSERT_EQUAL(port_stats.opackets,
- (uint64_t)((TEST_BAL_SLAVE_TX_FAIL_BURST_SIZE_1 -
- TEST_BAL_SLAVE_TX_FAIL_PACKETS_COUNT) +
- TEST_BAL_SLAVE_TX_FAIL_BURST_SIZE_2),
- "Bonded Port (%d) opackets value (%u) not as expected (%d)",
- test_params->bonded_port_id, (unsigned int)port_stats.opackets,
- (TEST_BAL_SLAVE_TX_FAIL_BURST_SIZE_1 -
- TEST_BAL_SLAVE_TX_FAIL_PACKETS_COUNT) +
- TEST_BAL_SLAVE_TX_FAIL_BURST_SIZE_2);
-
- /* Verify slave ports tx stats */
-
- rte_eth_stats_get(test_params->slave_port_ids[0], &port_stats);
-
- TEST_ASSERT_EQUAL(port_stats.opackets, (uint64_t)
- TEST_BAL_SLAVE_TX_FAIL_BURST_SIZE_1 -
- TEST_BAL_SLAVE_TX_FAIL_PACKETS_COUNT,
- "Slave Port (%d) opackets value (%u) not as expected (%d)",
- test_params->slave_port_ids[0],
- (unsigned int)port_stats.opackets,
- TEST_BAL_SLAVE_TX_FAIL_BURST_SIZE_1 -
- TEST_BAL_SLAVE_TX_FAIL_PACKETS_COUNT);
-
-
-
-
- rte_eth_stats_get(test_params->slave_port_ids[1], &port_stats);
-
- TEST_ASSERT_EQUAL(port_stats.opackets,
- (uint64_t)TEST_BAL_SLAVE_TX_FAIL_BURST_SIZE_2,
- "Slave Port (%d) opackets value (%u) not as expected (%d)",
- test_params->slave_port_ids[1],
- (unsigned int)port_stats.opackets,
- TEST_BAL_SLAVE_TX_FAIL_BURST_SIZE_2);
-
- /* Verify that all mbufs have a ref value of zero */
- TEST_ASSERT_SUCCESS(verify_mbufs_ref_count(&pkts_burst_1[tx_count_1],
- TEST_BAL_SLAVE_TX_FAIL_PACKETS_COUNT, 1),
- "mbufs refcnts not as expected");
-
- free_mbufs(&pkts_burst_1[tx_count_1],
- TEST_BAL_SLAVE_TX_FAIL_PACKETS_COUNT);
-
- /* Clean up and remove slaves from bonded device */
- return remove_slaves_and_stop_bonded_device();
-}
-
-#define TEST_BALANCE_RX_BURST_SLAVE_COUNT (3)
-
-static int
-test_balance_rx_burst(void)
-{
- struct rte_mbuf *gen_pkt_burst[TEST_BALANCE_RX_BURST_SLAVE_COUNT][MAX_PKT_BURST];
-
- struct rte_mbuf *rx_pkt_burst[MAX_PKT_BURST] = { NULL };
- struct rte_eth_stats port_stats;
-
- int burst_size[TEST_BALANCE_RX_BURST_SLAVE_COUNT] = { 10, 5, 30 };
- int i, j;
-
- memset(gen_pkt_burst, 0, sizeof(gen_pkt_burst));
-
- /* Initialize bonded device with 4 slaves in round robin mode */
- TEST_ASSERT_SUCCESS(initialize_bonded_device_with_slaves(
- BONDING_MODE_BALANCE, 0, 3, 1),
- "Failed to intialise bonded device");
-
- /* Generate test bursts of packets to transmit */
- for (i = 0; i < TEST_BALANCE_RX_BURST_SLAVE_COUNT; i++) {
- TEST_ASSERT_EQUAL(generate_test_burst(
- &gen_pkt_burst[i][0], burst_size[i], 0, 0, 1,
- 0, 0), burst_size[i],
- "failed to generate packet burst");
- }
-
- /* Add rx data to slaves */
- for (i = 0; i < TEST_BALANCE_RX_BURST_SLAVE_COUNT; i++) {
- virtual_ethdev_add_mbufs_to_rx_queue(test_params->slave_port_ids[i],
- &gen_pkt_burst[i][0], burst_size[i]);
- }
-
- /* Call rx burst on bonded device */
- /* Send burst on bonded port */
- TEST_ASSERT_EQUAL(rte_eth_rx_burst(test_params->bonded_port_id, 0,
- rx_pkt_burst, MAX_PKT_BURST),
- burst_size[0] + burst_size[1] + burst_size[2],
- "balance rx burst failed\n");
-
- /* Verify bonded device rx count */
- rte_eth_stats_get(test_params->bonded_port_id, &port_stats);
- TEST_ASSERT_EQUAL(port_stats.ipackets,
- (uint64_t)(burst_size[0] + burst_size[1] + burst_size[2]),
- "Bonded Port (%d) ipackets value (%u) not as expected (%d)",
- test_params->bonded_port_id, (unsigned int)port_stats.ipackets,
- burst_size[0] + burst_size[1] + burst_size[2]);
-
-
- /* Verify bonded slave devices rx counts */
- rte_eth_stats_get(test_params->slave_port_ids[0], &port_stats);
- TEST_ASSERT_EQUAL(port_stats.ipackets, (uint64_t)burst_size[0],
- "Slave Port (%d) ipackets value (%u) not as expected (%d)",
- test_params->slave_port_ids[0],
- (unsigned int)port_stats.ipackets, burst_size[0]);
-
- rte_eth_stats_get(test_params->slave_port_ids[1], &port_stats);
- TEST_ASSERT_EQUAL(port_stats.ipackets, (uint64_t)burst_size[1],
- "Slave Port (%d) ipackets value (%u) not as expected (%d)",
- test_params->slave_port_ids[1], (unsigned int)port_stats.ipackets,
- burst_size[1]);
-
- rte_eth_stats_get(test_params->slave_port_ids[2], &port_stats);
- TEST_ASSERT_EQUAL(port_stats.ipackets, (uint64_t)burst_size[2],
- "Slave Port (%d) ipackets value (%u) not as expected (%d)",
- test_params->slave_port_ids[2], (unsigned int)port_stats.ipackets,
- burst_size[2]);
-
- rte_eth_stats_get(test_params->slave_port_ids[3], &port_stats);
- TEST_ASSERT_EQUAL(port_stats.ipackets, 0,
- "Slave Port (%d) ipackets value (%u) not as expected (%d)",
- test_params->slave_port_ids[3], (unsigned int)port_stats.ipackets,
- 0);
-
- /* free mbufs */
- for (i = 0; i < TEST_BALANCE_RX_BURST_SLAVE_COUNT; i++) {
- for (j = 0; j < MAX_PKT_BURST; j++) {
- if (gen_pkt_burst[i][j] != NULL) {
- rte_pktmbuf_free(gen_pkt_burst[i][j]);
- gen_pkt_burst[i][j] = NULL;
- }
- }
- }
-
- /* Clean up and remove slaves from bonded device */
- return remove_slaves_and_stop_bonded_device();
-}
-
-static int
-test_balance_verify_promiscuous_enable_disable(void)
-{
- int i;
-
- /* Initialize bonded device with 4 slaves in round robin mode */
- TEST_ASSERT_SUCCESS(initialize_bonded_device_with_slaves(
- BONDING_MODE_BALANCE, 0, 4, 1),
- "Failed to intialise bonded device");
-
- rte_eth_promiscuous_enable(test_params->bonded_port_id);
-
- TEST_ASSERT_EQUAL(rte_eth_promiscuous_get(test_params->bonded_port_id), 1,
- "Port (%d) promiscuous mode not enabled",
- test_params->bonded_port_id);
-
- for (i = 0; i < test_params->bonded_slave_count; i++) {
- TEST_ASSERT_EQUAL(rte_eth_promiscuous_get(
- test_params->slave_port_ids[i]), 1,
- "Port (%d) promiscuous mode not enabled",
- test_params->slave_port_ids[i]);
- }
-
- rte_eth_promiscuous_disable(test_params->bonded_port_id);
-
- TEST_ASSERT_EQUAL(rte_eth_promiscuous_get(test_params->bonded_port_id), 0,
- "Port (%d) promiscuous mode not disabled",
- test_params->bonded_port_id);
-
- for (i = 0; i < test_params->bonded_slave_count; i++) {
- TEST_ASSERT_EQUAL(rte_eth_promiscuous_get(
- test_params->slave_port_ids[i]), 0,
- "Port (%d) promiscuous mode not disabled",
- test_params->slave_port_ids[i]);
- }
-
- /* Clean up and remove slaves from bonded device */
- return remove_slaves_and_stop_bonded_device();
-}
-
-static int
-test_balance_verify_mac_assignment(void)
-{
- struct ether_addr read_mac_addr, expected_mac_addr_0, expected_mac_addr_1;
-
- rte_eth_macaddr_get(test_params->slave_port_ids[0], &expected_mac_addr_0);
- rte_eth_macaddr_get(test_params->slave_port_ids[1], &expected_mac_addr_1);
-
- /* Initialize bonded device with 2 slaves in active backup mode */
- TEST_ASSERT_SUCCESS(initialize_bonded_device_with_slaves(
- BONDING_MODE_BALANCE, 0, 2, 1),
- "Failed to intialise bonded device");
-
- /* Verify that bonded MACs is that of first slave and that the other slave
- * MAC hasn't been changed */
- rte_eth_macaddr_get(test_params->bonded_port_id, &read_mac_addr);
- TEST_ASSERT_SUCCESS(memcmp(&expected_mac_addr_0, &read_mac_addr,
- sizeof(read_mac_addr)),
- "bonded port (%d) mac address not set to that of primary port",
- test_params->bonded_port_id);
-
- rte_eth_macaddr_get(test_params->slave_port_ids[0], &read_mac_addr);
- TEST_ASSERT_SUCCESS(memcmp(&expected_mac_addr_0, &read_mac_addr,
- sizeof(read_mac_addr)),
- "slave port (%d) mac address not set to that of primary port",
- test_params->slave_port_ids[0]);
-
- rte_eth_macaddr_get(test_params->slave_port_ids[1], &read_mac_addr);
- TEST_ASSERT_SUCCESS(memcmp(&expected_mac_addr_0, &read_mac_addr,
- sizeof(read_mac_addr)),
- "slave port (%d) mac address not set to that of primary port",
- test_params->slave_port_ids[1]);
-
- /* change primary and verify that MAC addresses haven't changed */
- TEST_ASSERT_SUCCESS(rte_eth_bond_primary_set(test_params->bonded_port_id,
- test_params->slave_port_ids[1]),
- "Failed to set bonded port (%d) primary port to (%d)\n",
- test_params->bonded_port_id, test_params->slave_port_ids[1]);
-
- rte_eth_macaddr_get(test_params->bonded_port_id, &read_mac_addr);
- TEST_ASSERT_SUCCESS(memcmp(&expected_mac_addr_0, &read_mac_addr,
- sizeof(read_mac_addr)),
- "bonded port (%d) mac address not set to that of primary port",
- test_params->bonded_port_id);
-
- rte_eth_macaddr_get(test_params->slave_port_ids[0], &read_mac_addr);
- TEST_ASSERT_SUCCESS(memcmp(&expected_mac_addr_0, &read_mac_addr,
- sizeof(read_mac_addr)),
- "slave port (%d) mac address not set to that of primary port",
- test_params->slave_port_ids[0]);
-
- rte_eth_macaddr_get(test_params->slave_port_ids[1], &read_mac_addr);
- TEST_ASSERT_SUCCESS(memcmp(&expected_mac_addr_0, &read_mac_addr,
- sizeof(read_mac_addr)),
- "slave port (%d) mac address not set to that of primary port",
- test_params->slave_port_ids[1]);
-
- /* stop / start bonded device and verify that primary MAC address is
- * propagated to bonded device and slaves */
-
- rte_eth_dev_stop(test_params->bonded_port_id);
-
- TEST_ASSERT_SUCCESS(rte_eth_dev_start(test_params->bonded_port_id),
- "Failed to start bonded device");
-
- rte_eth_macaddr_get(test_params->bonded_port_id, &read_mac_addr);
- TEST_ASSERT_SUCCESS(memcmp(&expected_mac_addr_1, &read_mac_addr,
- sizeof(read_mac_addr)),
- "bonded port (%d) mac address not set to that of primary port",
- test_params->bonded_port_id);
-
- rte_eth_macaddr_get(test_params->slave_port_ids[0], &read_mac_addr);
- TEST_ASSERT_SUCCESS(memcmp(&expected_mac_addr_1, &read_mac_addr,
- sizeof(read_mac_addr)),
- "slave port (%d) mac address not set to that of primary port",
- test_params->slave_port_ids[0]);
-
- rte_eth_macaddr_get(test_params->slave_port_ids[1], &read_mac_addr);
- TEST_ASSERT_SUCCESS(memcmp(&expected_mac_addr_1, &read_mac_addr,
- sizeof(read_mac_addr)),
- "slave port (%d) mac address not set to that of primary port",
- test_params->slave_port_ids[1]);
-
- /* Set explicit MAC address */
- TEST_ASSERT_SUCCESS(rte_eth_bond_mac_address_set(
- test_params->bonded_port_id, (struct ether_addr *)bonded_mac),
- "failed to set MAC");
-
- rte_eth_macaddr_get(test_params->bonded_port_id, &read_mac_addr);
- TEST_ASSERT_SUCCESS(memcmp(&bonded_mac, &read_mac_addr,
- sizeof(read_mac_addr)),
- "bonded port (%d) mac address not set to that of bonded port",
- test_params->bonded_port_id);
-
- rte_eth_macaddr_get(test_params->slave_port_ids[0], &read_mac_addr);
- TEST_ASSERT_SUCCESS(memcmp(&bonded_mac, &read_mac_addr,
- sizeof(read_mac_addr)),
- "slave port (%d) mac address not as expected\n",
- test_params->slave_port_ids[0]);
-
- rte_eth_macaddr_get(test_params->slave_port_ids[1], &read_mac_addr);
- TEST_ASSERT_SUCCESS(memcmp(&bonded_mac, &read_mac_addr,
- sizeof(read_mac_addr)),
- "slave port (%d) mac address not set to that of bonded port",
- test_params->slave_port_ids[1]);
-
- /* Clean up and remove slaves from bonded device */
- return remove_slaves_and_stop_bonded_device();
-}
-
-#define TEST_BALANCE_LINK_STATUS_SLAVE_COUNT (4)
-
-static int
-test_balance_verify_slave_link_status_change_behaviour(void)
-{
- struct rte_mbuf *pkt_burst[TEST_BALANCE_LINK_STATUS_SLAVE_COUNT][MAX_PKT_BURST];
- struct rte_mbuf *rx_pkt_burst[MAX_PKT_BURST] = { NULL };
- struct rte_eth_stats port_stats;
-
- uint8_t slaves[RTE_MAX_ETHPORTS];
-
- int i, j, burst_size, slave_count;
-
- memset(pkt_burst, 0, sizeof(pkt_burst));
-
- /* Initialize bonded device with 4 slaves in round robin mode */
- TEST_ASSERT_SUCCESS(initialize_bonded_device_with_slaves(
- BONDING_MODE_BALANCE, 0, TEST_BALANCE_LINK_STATUS_SLAVE_COUNT, 1),
- "Failed to intialise bonded device");
-
- TEST_ASSERT_SUCCESS(rte_eth_bond_xmit_policy_set(
- test_params->bonded_port_id, BALANCE_XMIT_POLICY_LAYER2),
- "Failed to set balance xmit policy.");
-
-
- /* Verify Current Slaves Count /Active Slave Count is */
- slave_count = rte_eth_bond_slaves_get(test_params->bonded_port_id, slaves,
- RTE_MAX_ETHPORTS);
- TEST_ASSERT_EQUAL(slave_count, TEST_BALANCE_LINK_STATUS_SLAVE_COUNT,
- "Number of slaves (%d) is not as expected (%d).",
- slave_count, TEST_BALANCE_LINK_STATUS_SLAVE_COUNT);
-
- slave_count = rte_eth_bond_active_slaves_get(test_params->bonded_port_id,
- slaves, RTE_MAX_ETHPORTS);
- TEST_ASSERT_EQUAL(slave_count, TEST_BALANCE_LINK_STATUS_SLAVE_COUNT,
- "Number of active slaves (%d) is not as expected (%d).",
- slave_count, TEST_BALANCE_LINK_STATUS_SLAVE_COUNT);
-
- /* Set 2 slaves link status to down */
- virtual_ethdev_simulate_link_status_interrupt(
- test_params->slave_port_ids[1], 0);
- virtual_ethdev_simulate_link_status_interrupt(
- test_params->slave_port_ids[3], 0);
-
- TEST_ASSERT_EQUAL(rte_eth_bond_active_slaves_get(
- test_params->bonded_port_id, slaves, RTE_MAX_ETHPORTS), 2,
- "Number of active slaves (%d) is not as expected (%d).",
- slave_count, 2);
-
- /* Send to sets of packet burst and verify that they are balanced across
- * slaves */
- burst_size = 21;
-
- TEST_ASSERT_EQUAL(generate_test_burst(
- &pkt_burst[0][0], burst_size, 0, 1, 0, 0, 0), burst_size,
- "generate_test_burst failed");
-
- TEST_ASSERT_EQUAL(generate_test_burst(
- &pkt_burst[1][0], burst_size, 0, 1, 1, 0, 0), burst_size,
- "generate_test_burst failed");
-
- TEST_ASSERT_EQUAL(rte_eth_tx_burst(
- test_params->bonded_port_id, 0, &pkt_burst[0][0], burst_size),
- burst_size, "rte_eth_tx_burst failed");
-
- TEST_ASSERT_EQUAL(rte_eth_tx_burst(
- test_params->bonded_port_id, 0, &pkt_burst[1][0], burst_size),
- burst_size, "rte_eth_tx_burst failed");
-
-
- rte_eth_stats_get(test_params->bonded_port_id, &port_stats);
- TEST_ASSERT_EQUAL(port_stats.opackets, (uint64_t)(burst_size + burst_size),
- "(%d) port_stats.opackets (%d) not as expected (%d).",
- test_params->bonded_port_id, (int)port_stats.opackets,
- burst_size + burst_size);
-
- rte_eth_stats_get(test_params->slave_port_ids[0], &port_stats);
- TEST_ASSERT_EQUAL(port_stats.opackets, (uint64_t)burst_size,
- "(%d) port_stats.opackets (%d) not as expected (%d).",
- test_params->slave_port_ids[0], (int)port_stats.opackets,
- burst_size);
-
- rte_eth_stats_get(test_params->slave_port_ids[2], &port_stats);
- TEST_ASSERT_EQUAL(port_stats.opackets, (uint64_t)burst_size,
- "(%d) port_stats.opackets (%d) not as expected (%d).",
- test_params->slave_port_ids[2], (int)port_stats.opackets,
- burst_size);
-
- /* verify that all packets get send on primary slave when no other slaves
- * are available */
- virtual_ethdev_simulate_link_status_interrupt(
- test_params->slave_port_ids[2], 0);
-
- TEST_ASSERT_EQUAL(rte_eth_bond_active_slaves_get(
- test_params->bonded_port_id, slaves, RTE_MAX_ETHPORTS), 1,
- "Number of active slaves (%d) is not as expected (%d).",
- slave_count, 1);
-
- TEST_ASSERT_EQUAL(generate_test_burst(
- &pkt_burst[1][0], burst_size, 0, 1, 1, 0, 0), burst_size,
- "generate_test_burst failed");
-
- TEST_ASSERT_EQUAL(rte_eth_tx_burst(
- test_params->bonded_port_id, 0, &pkt_burst[1][0], burst_size),
- burst_size, "rte_eth_tx_burst failed");
-
- rte_eth_stats_get(test_params->bonded_port_id, &port_stats);
- TEST_ASSERT_EQUAL(port_stats.opackets,
- (uint64_t)(burst_size + burst_size + burst_size),
- "(%d) port_stats.opackets (%d) not as expected (%d).\n",
- test_params->bonded_port_id, (int)port_stats.opackets,
- burst_size + burst_size + burst_size);
-
- rte_eth_stats_get(test_params->slave_port_ids[0], &port_stats);
- TEST_ASSERT_EQUAL(port_stats.opackets, (uint64_t)(burst_size + burst_size),
- "(%d) port_stats.opackets (%d) not as expected (%d).",
- test_params->slave_port_ids[0], (int)port_stats.opackets,
- burst_size + burst_size);
-
- virtual_ethdev_simulate_link_status_interrupt(
- test_params->slave_port_ids[0], 0);
- virtual_ethdev_simulate_link_status_interrupt(
- test_params->slave_port_ids[1], 1);
- virtual_ethdev_simulate_link_status_interrupt(
- test_params->slave_port_ids[2], 1);
- virtual_ethdev_simulate_link_status_interrupt(
- test_params->slave_port_ids[3], 1);
-
- for (i = 0; i < TEST_BALANCE_LINK_STATUS_SLAVE_COUNT; i++) {
- TEST_ASSERT_EQUAL(generate_test_burst(
- &pkt_burst[i][0], burst_size, 0, 1, 0, 0, 0), burst_size,
- "Failed to generate packet burst");
-
- virtual_ethdev_add_mbufs_to_rx_queue(test_params->slave_port_ids[i],
- &pkt_burst[i][0], burst_size);
- }
-
- /* Verify that pkts are not received on slaves with link status down */
-
- rte_eth_rx_burst(test_params->bonded_port_id, 0, rx_pkt_burst,
- MAX_PKT_BURST);
-
- /* Verify bonded device rx count */
- rte_eth_stats_get(test_params->bonded_port_id, &port_stats);
- TEST_ASSERT_EQUAL(port_stats.ipackets, (uint64_t)(burst_size * 3),
- "(%d) port_stats.ipackets (%d) not as expected (%d)\n",
- test_params->bonded_port_id, (int)port_stats.ipackets,
- burst_size * 3);
-
- /* free mbufs allocate for rx testing */
- for (i = 0; i < TEST_BALANCE_RX_BURST_SLAVE_COUNT; i++) {
- for (j = 0; j < MAX_PKT_BURST; j++) {
- if (pkt_burst[i][j] != NULL) {
- rte_pktmbuf_free(pkt_burst[i][j]);
- pkt_burst[i][j] = NULL;
- }
- }
- }
-
- /* Clean up and remove slaves from bonded device */
- return remove_slaves_and_stop_bonded_device();
-}
-
-static int
-test_broadcast_tx_burst(void)
-{
- int i, pktlen, burst_size;
- struct rte_mbuf *pkts_burst[MAX_PKT_BURST];
-
- struct rte_eth_stats port_stats;
-
- TEST_ASSERT_SUCCESS(initialize_bonded_device_with_slaves(
- BONDING_MODE_BROADCAST, 0, 2, 1),
- "Failed to intialise bonded device");
-
- initialize_eth_header(test_params->pkt_eth_hdr,
- (struct ether_addr *)src_mac, (struct ether_addr *)dst_mac_0,
- ETHER_TYPE_IPv4, 0, 0);
-
- pktlen = initialize_udp_header(test_params->pkt_udp_hdr, src_port,
- dst_port_0, 16);
- pktlen = initialize_ipv4_header(test_params->pkt_ipv4_hdr, src_addr,
- dst_addr_0, pktlen);
-
- burst_size = 20 * test_params->bonded_slave_count;
-
- TEST_ASSERT(burst_size < MAX_PKT_BURST,
- "Burst size specified is greater than supported.");
-
- /* Generate a burst of packets to transmit */
- TEST_ASSERT_EQUAL(generate_packet_burst(test_params->mbuf_pool,
- pkts_burst, test_params->pkt_eth_hdr, 0, test_params->pkt_ipv4_hdr,
- 1, test_params->pkt_udp_hdr, burst_size, PACKET_BURST_GEN_PKT_LEN,
- 1), burst_size, "Failed to generate packet burst");
-
- /* Send burst on bonded port */
- TEST_ASSERT_EQUAL(rte_eth_tx_burst(test_params->bonded_port_id, 0,
- pkts_burst, burst_size), burst_size,
- "Bonded Port (%d) rx burst failed, packets transmitted value "
- "not as expected (%d)",
- test_params->bonded_port_id, burst_size);
-
- /* Verify bonded port tx stats */
- rte_eth_stats_get(test_params->bonded_port_id, &port_stats);
- TEST_ASSERT_EQUAL(port_stats.opackets,
- (uint64_t)burst_size * test_params->bonded_slave_count,
- "Bonded Port (%d) opackets value (%u) not as expected (%d)",
- test_params->bonded_port_id, (unsigned int)port_stats.opackets,
- burst_size);
-
- /* Verify slave ports tx stats */
- for (i = 0; i < test_params->bonded_slave_count; i++) {
- rte_eth_stats_get(test_params->slave_port_ids[i], &port_stats);
- TEST_ASSERT_EQUAL(port_stats.opackets, (uint64_t)burst_size,
- "Slave Port (%d) opackets value (%u) not as expected (%d)\n",
- test_params->bonded_port_id,
- (unsigned int)port_stats.opackets, burst_size);
- }
-
- /* Put all slaves down and try and transmit */
- for (i = 0; i < test_params->bonded_slave_count; i++) {
-
- virtual_ethdev_simulate_link_status_interrupt(
- test_params->slave_port_ids[i], 0);
- }
-
- /* Send burst on bonded port */
- TEST_ASSERT_EQUAL(rte_eth_tx_burst(
- test_params->bonded_port_id, 0, pkts_burst, burst_size), 0,
- "transmitted an unexpected number of packets");
-
- /* Clean up and remove slaves from bonded device */
- return remove_slaves_and_stop_bonded_device();
-}
-
-
-#define TEST_BCAST_SLAVE_TX_FAIL_SLAVE_COUNT (3)
-#define TEST_BCAST_SLAVE_TX_FAIL_BURST_SIZE (40)
-#define TEST_BCAST_SLAVE_TX_FAIL_MAX_PACKETS_COUNT (15)
-#define TEST_BCAST_SLAVE_TX_FAIL_MIN_PACKETS_COUNT (10)
-
-static int
-test_broadcast_tx_burst_slave_tx_fail(void)
-{
- struct rte_mbuf *pkts_burst[TEST_BCAST_SLAVE_TX_FAIL_BURST_SIZE];
- struct rte_mbuf *expected_fail_pkts[TEST_BCAST_SLAVE_TX_FAIL_MIN_PACKETS_COUNT];
-
- struct rte_eth_stats port_stats;
-
- int i, tx_count;
-
- TEST_ASSERT_SUCCESS(initialize_bonded_device_with_slaves(
- BONDING_MODE_BROADCAST, 0,
- TEST_BCAST_SLAVE_TX_FAIL_SLAVE_COUNT, 1),
- "Failed to intialise bonded device");
-
- /* Generate test bursts for transmission */
- TEST_ASSERT_EQUAL(generate_test_burst(pkts_burst,
- TEST_BCAST_SLAVE_TX_FAIL_BURST_SIZE, 0, 0, 0, 0, 0),
- TEST_BCAST_SLAVE_TX_FAIL_BURST_SIZE,
- "Failed to generate test packet burst");
-
- for (i = 0; i < TEST_BCAST_SLAVE_TX_FAIL_MIN_PACKETS_COUNT; i++) {
- expected_fail_pkts[i] = pkts_burst[TEST_BCAST_SLAVE_TX_FAIL_BURST_SIZE -
- TEST_BCAST_SLAVE_TX_FAIL_MIN_PACKETS_COUNT + i];
- }
-
- /* Set virtual slave TEST_BAL_SLAVE_TX_FAIL_FAILING_SLAVE_IDX to only fail
- * transmission of TEST_BAL_SLAVE_TX_FAIL_PACKETS_COUNT packets of burst */
- virtual_ethdev_tx_burst_fn_set_success(
- test_params->slave_port_ids[0],
- 0);
- virtual_ethdev_tx_burst_fn_set_success(
- test_params->slave_port_ids[1],
- 0);
- virtual_ethdev_tx_burst_fn_set_success(
- test_params->slave_port_ids[2],
- 0);
-
- virtual_ethdev_tx_burst_fn_set_tx_pkt_fail_count(
- test_params->slave_port_ids[0],
- TEST_BCAST_SLAVE_TX_FAIL_MAX_PACKETS_COUNT);
-
- virtual_ethdev_tx_burst_fn_set_tx_pkt_fail_count(
- test_params->slave_port_ids[1],
- TEST_BCAST_SLAVE_TX_FAIL_MIN_PACKETS_COUNT);
-
- virtual_ethdev_tx_burst_fn_set_tx_pkt_fail_count(
- test_params->slave_port_ids[2],
- TEST_BCAST_SLAVE_TX_FAIL_MAX_PACKETS_COUNT);
-
- /* Transmit burst */
- tx_count = rte_eth_tx_burst(test_params->bonded_port_id, 0, pkts_burst,
- TEST_BCAST_SLAVE_TX_FAIL_BURST_SIZE);
-
- TEST_ASSERT_EQUAL(tx_count, TEST_BCAST_SLAVE_TX_FAIL_BURST_SIZE -
- TEST_BCAST_SLAVE_TX_FAIL_MIN_PACKETS_COUNT,
- "Transmitted (%d) packets, expected to transmit (%d) packets",
- tx_count, TEST_BCAST_SLAVE_TX_FAIL_BURST_SIZE -
- TEST_BCAST_SLAVE_TX_FAIL_MIN_PACKETS_COUNT);
-
- /* Verify that failed packet are expected failed packets */
- for (i = 0; i < TEST_BCAST_SLAVE_TX_FAIL_MIN_PACKETS_COUNT; i++) {
- TEST_ASSERT_EQUAL(expected_fail_pkts[i], pkts_burst[i + tx_count],
- "expected mbuf (%d) pointer %p not expected pointer %p",
- i, expected_fail_pkts[i], pkts_burst[i + tx_count]);
- }
-
- /* Verify slave ports tx stats */
-
- rte_eth_stats_get(test_params->slave_port_ids[0], &port_stats);
-
- TEST_ASSERT_EQUAL(port_stats.opackets,
- (uint64_t)TEST_BCAST_SLAVE_TX_FAIL_BURST_SIZE -
- TEST_BCAST_SLAVE_TX_FAIL_MAX_PACKETS_COUNT,
- "Port (%d) opackets value (%u) not as expected (%d)",
- test_params->bonded_port_id, (unsigned int)port_stats.opackets,
- TEST_BCAST_SLAVE_TX_FAIL_BURST_SIZE -
- TEST_BCAST_SLAVE_TX_FAIL_MAX_PACKETS_COUNT);
-
-
- rte_eth_stats_get(test_params->slave_port_ids[1], &port_stats);
-
- TEST_ASSERT_EQUAL(port_stats.opackets,
- (uint64_t)TEST_BCAST_SLAVE_TX_FAIL_BURST_SIZE -
- TEST_BCAST_SLAVE_TX_FAIL_MIN_PACKETS_COUNT,
- "Port (%d) opackets value (%u) not as expected (%d)",
- test_params->bonded_port_id, (unsigned int)port_stats.opackets,
- TEST_BCAST_SLAVE_TX_FAIL_BURST_SIZE -
- TEST_BCAST_SLAVE_TX_FAIL_MIN_PACKETS_COUNT);
-
- rte_eth_stats_get(test_params->slave_port_ids[2], &port_stats);
-
- TEST_ASSERT_EQUAL(port_stats.opackets,
- (uint64_t)TEST_BCAST_SLAVE_TX_FAIL_BURST_SIZE -
- TEST_BCAST_SLAVE_TX_FAIL_MAX_PACKETS_COUNT,
- "Port (%d) opackets value (%u) not as expected (%d)",
- test_params->bonded_port_id, (unsigned int)port_stats.opackets,
- TEST_BCAST_SLAVE_TX_FAIL_BURST_SIZE -
- TEST_BCAST_SLAVE_TX_FAIL_MAX_PACKETS_COUNT);
-
-
- /* Verify that all mbufs who transmission failed have a ref value of one */
- TEST_ASSERT_SUCCESS(verify_mbufs_ref_count(&pkts_burst[tx_count],
- TEST_BCAST_SLAVE_TX_FAIL_MIN_PACKETS_COUNT, 1),
- "mbufs refcnts not as expected");
-
- free_mbufs(&pkts_burst[tx_count],
- TEST_BCAST_SLAVE_TX_FAIL_MIN_PACKETS_COUNT);
-
- /* Clean up and remove slaves from bonded device */
- return remove_slaves_and_stop_bonded_device();
-}
-
-#define BROADCAST_RX_BURST_NUM_OF_SLAVES (3)
-
-static int
-test_broadcast_rx_burst(void)
-{
- struct rte_mbuf *gen_pkt_burst[BROADCAST_RX_BURST_NUM_OF_SLAVES][MAX_PKT_BURST];
-
- struct rte_mbuf *rx_pkt_burst[MAX_PKT_BURST] = { NULL };
- struct rte_eth_stats port_stats;
-
- int burst_size[BROADCAST_RX_BURST_NUM_OF_SLAVES] = { 10, 5, 30 };
- int i, j;
-
- memset(gen_pkt_burst, 0, sizeof(gen_pkt_burst));
-
- /* Initialize bonded device with 4 slaves in round robin mode */
- TEST_ASSERT_SUCCESS(initialize_bonded_device_with_slaves(
- BONDING_MODE_BROADCAST, 0, 3, 1),
- "Failed to intialise bonded device");
-
- /* Generate test bursts of packets to transmit */
- for (i = 0; i < BROADCAST_RX_BURST_NUM_OF_SLAVES; i++) {
- TEST_ASSERT_EQUAL(generate_test_burst(
- &gen_pkt_burst[i][0], burst_size[i], 0, 0, 1, 0, 0),
- burst_size[i], "failed to generate packet burst");
- }
-
- /* Add rx data to slave 0 */
- for (i = 0; i < BROADCAST_RX_BURST_NUM_OF_SLAVES; i++) {
- virtual_ethdev_add_mbufs_to_rx_queue(test_params->slave_port_ids[i],
- &gen_pkt_burst[i][0], burst_size[i]);
- }
-
-
- /* Call rx burst on bonded device */
- /* Send burst on bonded port */
- TEST_ASSERT_EQUAL(rte_eth_rx_burst(
- test_params->bonded_port_id, 0, rx_pkt_burst, MAX_PKT_BURST),
- burst_size[0] + burst_size[1] + burst_size[2],
- "rx burst failed");
-
- /* Verify bonded device rx count */
- rte_eth_stats_get(test_params->bonded_port_id, &port_stats);
- TEST_ASSERT_EQUAL(port_stats.ipackets,
- (uint64_t)(burst_size[0] + burst_size[1] + burst_size[2]),
- "Bonded Port (%d) ipackets value (%u) not as expected (%d)",
- test_params->bonded_port_id, (unsigned int)port_stats.ipackets,
- burst_size[0] + burst_size[1] + burst_size[2]);
-
-
- /* Verify bonded slave devices rx counts */
- rte_eth_stats_get(test_params->slave_port_ids[0], &port_stats);
- TEST_ASSERT_EQUAL(port_stats.ipackets, (uint64_t)burst_size[0],
- "Slave Port (%d) ipackets value (%u) not as expected (%d)",
- test_params->slave_port_ids[0], (unsigned int)port_stats.ipackets,
- burst_size[0]);
-
- rte_eth_stats_get(test_params->slave_port_ids[1], &port_stats);
- TEST_ASSERT_EQUAL(port_stats.ipackets, (uint64_t)burst_size[1],
- "Slave Port (%d) ipackets value (%u) not as expected (%d)",
- test_params->slave_port_ids[0], (unsigned int)port_stats.ipackets,
- burst_size[1]);
-
- rte_eth_stats_get(test_params->slave_port_ids[2], &port_stats);
- TEST_ASSERT_EQUAL(port_stats.ipackets, (uint64_t)burst_size[2],
- "Slave Port (%d) ipackets value (%u) not as expected (%d)",
- test_params->slave_port_ids[2], (unsigned int)port_stats.ipackets,
- burst_size[2]);
-
- rte_eth_stats_get(test_params->slave_port_ids[3], &port_stats);
- TEST_ASSERT_EQUAL(port_stats.ipackets, 0,
- "Slave Port (%d) ipackets value (%u) not as expected (%d)",
- test_params->slave_port_ids[3], (unsigned int)port_stats.ipackets,
- 0);
-
- /* free mbufs allocate for rx testing */
- for (i = 0; i < BROADCAST_RX_BURST_NUM_OF_SLAVES; i++) {
- for (j = 0; j < MAX_PKT_BURST; j++) {
- if (gen_pkt_burst[i][j] != NULL) {
- rte_pktmbuf_free(gen_pkt_burst[i][j]);
- gen_pkt_burst[i][j] = NULL;
- }
- }
- }
-
- /* Clean up and remove slaves from bonded device */
- return remove_slaves_and_stop_bonded_device();
-}
-
-static int
-test_broadcast_verify_promiscuous_enable_disable(void)
-{
- int i;
-
- /* Initialize bonded device with 4 slaves in round robin mode */
- TEST_ASSERT_SUCCESS(initialize_bonded_device_with_slaves(
- BONDING_MODE_BROADCAST, 0, 4, 1),
- "Failed to intialise bonded device");
-
- rte_eth_promiscuous_enable(test_params->bonded_port_id);
-
-
- TEST_ASSERT_EQUAL(rte_eth_promiscuous_get(test_params->bonded_port_id), 1,
- "Port (%d) promiscuous mode not enabled",
- test_params->bonded_port_id);
-
- for (i = 0; i < test_params->bonded_slave_count; i++) {
- TEST_ASSERT_EQUAL(rte_eth_promiscuous_get(
- test_params->slave_port_ids[i]), 1,
- "Port (%d) promiscuous mode not enabled",
- test_params->slave_port_ids[i]);
- }
-
- rte_eth_promiscuous_disable(test_params->bonded_port_id);
-
- TEST_ASSERT_EQUAL(rte_eth_promiscuous_get(test_params->bonded_port_id), 0,
- "Port (%d) promiscuous mode not disabled",
- test_params->bonded_port_id);
-
- for (i = 0; i < test_params->bonded_slave_count; i++) {
- TEST_ASSERT_EQUAL(rte_eth_promiscuous_get(
- test_params->slave_port_ids[i]), 0,
- "Port (%d) promiscuous mode not disabled",
- test_params->slave_port_ids[i]);
- }
-
- /* Clean up and remove slaves from bonded device */
- return remove_slaves_and_stop_bonded_device();
-}
-
-static int
-test_broadcast_verify_mac_assignment(void)
-{
- struct ether_addr read_mac_addr, expected_mac_addr_0, expected_mac_addr_1;
-
- int i;
-
- rte_eth_macaddr_get(test_params->slave_port_ids[0], &expected_mac_addr_0);
- rte_eth_macaddr_get(test_params->slave_port_ids[2], &expected_mac_addr_1);
-
- /* Initialize bonded device with 4 slaves in round robin mode */
- TEST_ASSERT_SUCCESS(initialize_bonded_device_with_slaves(
- BONDING_MODE_BROADCAST, 0, 4, 1),
- "Failed to intialise bonded device");
-
- /* Verify that all MACs are the same as first slave added to bonded
- * device */
- for (i = 0; i < test_params->bonded_slave_count; i++) {
- rte_eth_macaddr_get(test_params->slave_port_ids[i], &read_mac_addr);
- TEST_ASSERT_SUCCESS(memcmp(&expected_mac_addr_0, &read_mac_addr,
- sizeof(read_mac_addr)),
- "slave port (%d) mac address not set to that of primary port",
- test_params->slave_port_ids[i]);
- }
-
- /* change primary and verify that MAC addresses haven't changed */
- TEST_ASSERT_SUCCESS(rte_eth_bond_primary_set(test_params->bonded_port_id,
- test_params->slave_port_ids[2]),
- "Failed to set bonded port (%d) primary port to (%d)",
- test_params->bonded_port_id, test_params->slave_port_ids[i]);
-
- for (i = 0; i < test_params->bonded_slave_count; i++) {
- rte_eth_macaddr_get(test_params->slave_port_ids[i], &read_mac_addr);
- TEST_ASSERT_SUCCESS(memcmp(&expected_mac_addr_0, &read_mac_addr,
- sizeof(read_mac_addr)),
- "slave port (%d) mac address has changed to that of primary "
- "port without stop/start toggle of bonded device",
- test_params->slave_port_ids[i]);
- }
-
- /* stop / start bonded device and verify that primary MAC address is
- * propagated to bonded device and slaves */
-
- rte_eth_dev_stop(test_params->bonded_port_id);
-
- TEST_ASSERT_SUCCESS(rte_eth_dev_start(test_params->bonded_port_id),
- "Failed to start bonded device");
-
- rte_eth_macaddr_get(test_params->bonded_port_id, &read_mac_addr);
- TEST_ASSERT_SUCCESS(memcmp(&expected_mac_addr_1, &read_mac_addr,
- sizeof(read_mac_addr)),
- "bonded port (%d) mac address not set to that of new primary port",
- test_params->slave_port_ids[i]);
-
- for (i = 0; i < test_params->bonded_slave_count; i++) {
- rte_eth_macaddr_get(test_params->slave_port_ids[i], &read_mac_addr);
- TEST_ASSERT_SUCCESS(memcmp(&expected_mac_addr_1, &read_mac_addr,
- sizeof(read_mac_addr)),
- "slave port (%d) mac address not set to that of new primary "
- "port", test_params->slave_port_ids[i]);
- }
-
- /* Set explicit MAC address */
- TEST_ASSERT_SUCCESS(rte_eth_bond_mac_address_set(
- test_params->bonded_port_id, (struct ether_addr *)bonded_mac),
- "Failed to set MAC address");
-
- rte_eth_macaddr_get(test_params->bonded_port_id, &read_mac_addr);
- TEST_ASSERT_SUCCESS(memcmp(bonded_mac, &read_mac_addr,
- sizeof(read_mac_addr)),
- "bonded port (%d) mac address not set to that of new primary port",
- test_params->slave_port_ids[i]);
-
-
- for (i = 0; i < test_params->bonded_slave_count; i++) {
- rte_eth_macaddr_get(test_params->slave_port_ids[i], &read_mac_addr);
- TEST_ASSERT_SUCCESS(memcmp(bonded_mac, &read_mac_addr,
- sizeof(read_mac_addr)),
- "slave port (%d) mac address not set to that of new primary "
- "port", test_params->slave_port_ids[i]);
- }
-
- /* Clean up and remove slaves from bonded device */
- return remove_slaves_and_stop_bonded_device();
-}
-
-#define BROADCAST_LINK_STATUS_NUM_OF_SLAVES (4)
-static int
-test_broadcast_verify_slave_link_status_change_behaviour(void)
-{
- struct rte_mbuf *pkt_burst[BROADCAST_LINK_STATUS_NUM_OF_SLAVES][MAX_PKT_BURST];
- struct rte_mbuf *rx_pkt_burst[MAX_PKT_BURST] = { NULL };
- struct rte_eth_stats port_stats;
-
- uint8_t slaves[RTE_MAX_ETHPORTS];
-
- int i, j, burst_size, slave_count;
-
- memset(pkt_burst, 0, sizeof(pkt_burst));
-
- /* Initialize bonded device with 4 slaves in round robin mode */
- TEST_ASSERT_SUCCESS(initialize_bonded_device_with_slaves(
- BONDING_MODE_BROADCAST, 0, BROADCAST_LINK_STATUS_NUM_OF_SLAVES,
- 1), "Failed to intialise bonded device");
-
- /* Verify Current Slaves Count /Active Slave Count is */
- slave_count = rte_eth_bond_slaves_get(test_params->bonded_port_id, slaves,
- RTE_MAX_ETHPORTS);
- TEST_ASSERT_EQUAL(slave_count, 4,
- "Number of slaves (%d) is not as expected (%d).",
- slave_count, 4);
-
- slave_count = rte_eth_bond_active_slaves_get(test_params->bonded_port_id,
- slaves, RTE_MAX_ETHPORTS);
- TEST_ASSERT_EQUAL(slave_count, 4,
- "Number of active slaves (%d) is not as expected (%d).",
- slave_count, 4);
-
- /* Set 2 slaves link status to down */
- virtual_ethdev_simulate_link_status_interrupt(
- test_params->slave_port_ids[1], 0);
- virtual_ethdev_simulate_link_status_interrupt(
- test_params->slave_port_ids[3], 0);
-
- slave_count = rte_eth_bond_active_slaves_get(test_params->bonded_port_id,
- slaves, RTE_MAX_ETHPORTS);
- TEST_ASSERT_EQUAL(slave_count, 2,
- "Number of active slaves (%d) is not as expected (%d).",
- slave_count, 2);
-
- for (i = 0; i < test_params->bonded_slave_count; i++)
- rte_eth_stats_reset(test_params->slave_port_ids[i]);
-
- /* Verify that pkts are not sent on slaves with link status down */
- burst_size = 21;
-
- TEST_ASSERT_EQUAL(generate_test_burst(
- &pkt_burst[0][0], burst_size, 0, 0, 1, 0, 0), burst_size,
- "generate_test_burst failed");
-
- TEST_ASSERT_EQUAL(rte_eth_tx_burst(test_params->bonded_port_id, 0,
- &pkt_burst[0][0], burst_size), burst_size,
- "rte_eth_tx_burst failed\n");
-
- rte_eth_stats_get(test_params->bonded_port_id, &port_stats);
- TEST_ASSERT_EQUAL(port_stats.opackets, (uint64_t)(burst_size * slave_count),
- "(%d) port_stats.opackets (%d) not as expected (%d)\n",
- test_params->bonded_port_id, (int)port_stats.opackets,
- burst_size * slave_count);
-
- rte_eth_stats_get(test_params->slave_port_ids[0], &port_stats);
- TEST_ASSERT_EQUAL(port_stats.opackets, (uint64_t)burst_size,
- "(%d) port_stats.opackets not as expected",
- test_params->slave_port_ids[0]);
-
- rte_eth_stats_get(test_params->slave_port_ids[1], &port_stats);
- TEST_ASSERT_EQUAL(port_stats.opackets, 0,
- "(%d) port_stats.opackets not as expected",
- test_params->slave_port_ids[1]);
-
- rte_eth_stats_get(test_params->slave_port_ids[2], &port_stats);
- TEST_ASSERT_EQUAL(port_stats.opackets, (uint64_t)burst_size,
- "(%d) port_stats.opackets not as expected",
- test_params->slave_port_ids[2]);
-
-
- rte_eth_stats_get(test_params->slave_port_ids[3], &port_stats);
- TEST_ASSERT_EQUAL(port_stats.opackets, 0,
- "(%d) port_stats.opackets not as expected",
- test_params->slave_port_ids[3]);
-
-
- for (i = 0; i < BROADCAST_LINK_STATUS_NUM_OF_SLAVES; i++) {
- TEST_ASSERT_EQUAL(generate_test_burst(
- &pkt_burst[i][0], burst_size, 0, 0, 1, 0, 0),
- burst_size, "failed to generate packet burst");
-
- virtual_ethdev_add_mbufs_to_rx_queue(test_params->slave_port_ids[i],
- &pkt_burst[i][0], burst_size);
- }
-
- /* Verify that pkts are not received on slaves with link status down */
- TEST_ASSERT_EQUAL(rte_eth_rx_burst(
- test_params->bonded_port_id, 0, rx_pkt_burst, MAX_PKT_BURST),
- burst_size + burst_size, "rte_eth_rx_burst failed");
-
-
- /* Verify bonded device rx count */
- rte_eth_stats_get(test_params->bonded_port_id, &port_stats);
- TEST_ASSERT_EQUAL(port_stats.ipackets, (uint64_t)(burst_size + burst_size),
- "(%d) port_stats.ipackets not as expected\n",
- test_params->bonded_port_id);
-
- /* free mbufs allocate for rx testing */
- for (i = 0; i < BROADCAST_LINK_STATUS_NUM_OF_SLAVES; i++) {
- for (j = 0; j < MAX_PKT_BURST; j++) {
- if (pkt_burst[i][j] != NULL) {
- rte_pktmbuf_free(pkt_burst[i][j]);
- pkt_burst[i][j] = NULL;
- }
- }
- }
-
- /* Clean up and remove slaves from bonded device */
- return remove_slaves_and_stop_bonded_device();
-}
-
-static int
-test_reconfigure_bonded_device(void)
-{
- test_params->nb_rx_q = 4;
- test_params->nb_tx_q = 4;
-
- TEST_ASSERT_SUCCESS(configure_ethdev(test_params->bonded_port_id, 0, 0),
- "failed to reconfigure bonded device");
-
- test_params->nb_rx_q = 2;
- test_params->nb_tx_q = 2;
-
- TEST_ASSERT_SUCCESS(configure_ethdev(test_params->bonded_port_id, 0, 0),
- "failed to reconfigure bonded device with less rx/tx queues");
-
- return 0;
-}
-
-
-static int
-test_close_bonded_device(void)
-{
- rte_eth_dev_close(test_params->bonded_port_id);
- return 0;
-}
-
-static void
-testsuite_teardown(void)
-{
- free(test_params->pkt_eth_hdr);
- test_params->pkt_eth_hdr = NULL;
-
- /* Clean up and remove slaves from bonded device */
- remove_slaves_and_stop_bonded_device();
-}
-
-static void
-free_virtualpmd_tx_queue(void)
-{
- int i, slave_port, to_free_cnt;
- struct rte_mbuf *pkts_to_free[MAX_PKT_BURST];
-
- /* Free tx queue of virtual pmd */
- for (slave_port = 0; slave_port < test_params->bonded_slave_count;
- slave_port++) {
- to_free_cnt = virtual_ethdev_get_mbufs_from_tx_queue(
- test_params->slave_port_ids[slave_port],
- pkts_to_free, MAX_PKT_BURST);
- for (i = 0; i < to_free_cnt; i++)
- rte_pktmbuf_free(pkts_to_free[i]);
- }
-}
-
-static int
-test_tlb_tx_burst(void)
-{
- int i, burst_size, nb_tx;
- uint64_t nb_tx2 = 0;
- struct rte_mbuf *pkt_burst[MAX_PKT_BURST];
- struct rte_eth_stats port_stats[32];
- uint64_t sum_ports_opackets = 0, all_bond_opackets = 0, all_bond_obytes = 0;
- uint16_t pktlen;
-
- TEST_ASSERT_SUCCESS(initialize_bonded_device_with_slaves
- (BONDING_MODE_TLB, 1, 3, 1),
- "Failed to initialise bonded device");
-
- burst_size = 20 * test_params->bonded_slave_count;
-
- TEST_ASSERT(burst_size < MAX_PKT_BURST,
- "Burst size specified is greater than supported.\n");
-
-
- /* Generate bursts of packets */
- for (i = 0; i < 400000; i++) {
- /*test two types of mac src own(bonding) and others */
- if (i % 2 == 0) {
- initialize_eth_header(test_params->pkt_eth_hdr,
- (struct ether_addr *)src_mac,
- (struct ether_addr *)dst_mac_0, ETHER_TYPE_IPv4, 0, 0);
- } else {
- initialize_eth_header(test_params->pkt_eth_hdr,
- (struct ether_addr *)test_params->default_slave_mac,
- (struct ether_addr *)dst_mac_0, ETHER_TYPE_IPv4, 0, 0);
- }
- pktlen = initialize_udp_header(test_params->pkt_udp_hdr, src_port,
- dst_port_0, 16);
- pktlen = initialize_ipv4_header(test_params->pkt_ipv4_hdr, src_addr,
- dst_addr_0, pktlen);
- generate_packet_burst(test_params->mbuf_pool, pkt_burst,
- test_params->pkt_eth_hdr, 0, test_params->pkt_ipv4_hdr,
- 1, test_params->pkt_udp_hdr, burst_size, 60, 1);
- /* Send burst on bonded port */
- nb_tx = rte_eth_tx_burst(test_params->bonded_port_id, 0, pkt_burst,
- burst_size);
- nb_tx2 += nb_tx;
-
- free_virtualpmd_tx_queue();
-
- TEST_ASSERT_EQUAL(nb_tx, burst_size,
- "number of packet not equal burst size");
-
- rte_delay_us(5);
- }
-
-
- /* Verify bonded port tx stats */
- rte_eth_stats_get(test_params->bonded_port_id, &port_stats[0]);
-
- all_bond_opackets = port_stats[0].opackets;
- all_bond_obytes = port_stats[0].obytes;
-
- TEST_ASSERT_EQUAL(port_stats[0].opackets, (uint64_t)nb_tx2,
- "Bonded Port (%d) opackets value (%u) not as expected (%d)\n",
- test_params->bonded_port_id, (unsigned int)port_stats[0].opackets,
- burst_size);
-
-
- /* Verify slave ports tx stats */
- for (i = 0; i < test_params->bonded_slave_count; i++) {
- rte_eth_stats_get(test_params->slave_port_ids[i], &port_stats[i]);
- sum_ports_opackets += port_stats[i].opackets;
- }
-
- TEST_ASSERT_EQUAL(sum_ports_opackets, (uint64_t)all_bond_opackets,
- "Total packets sent by slaves is not equal to packets sent by bond interface");
-
- /* checking if distribution of packets is balanced over slaves */
- for (i = 0; i < test_params->bonded_slave_count; i++) {
- TEST_ASSERT(port_stats[i].obytes > 0 &&
- port_stats[i].obytes < all_bond_obytes,
- "Packets are not balanced over slaves");
- }
-
- /* Put all slaves down and try and transmit */
- for (i = 0; i < test_params->bonded_slave_count; i++) {
- virtual_ethdev_simulate_link_status_interrupt(
- test_params->slave_port_ids[i], 0);
- }
-
- /* Send burst on bonded port */
- nb_tx = rte_eth_tx_burst(test_params->bonded_port_id, 0, pkt_burst,
- burst_size);
- TEST_ASSERT_EQUAL(nb_tx, 0, " bad number of packet in burst");
-
- /* Clean ugit checkout masterp and remove slaves from bonded device */
- return remove_slaves_and_stop_bonded_device();
-}
-
-#define TEST_ADAPTIVE_TRANSMIT_LOAD_BALANCING_RX_BURST_SLAVE_COUNT (4)
-
-static int
-test_tlb_rx_burst(void)
-{
- struct rte_mbuf *gen_pkt_burst[MAX_PKT_BURST] = { NULL };
- struct rte_mbuf *rx_pkt_burst[MAX_PKT_BURST] = { NULL };
-
- struct rte_eth_stats port_stats;
-
- int primary_port;
-
- uint16_t i, j, nb_rx, burst_size = 17;
-
- /* Initialize bonded device with 4 slaves in transmit load balancing mode */
- TEST_ASSERT_SUCCESS(initialize_bonded_device_with_slaves(
- BONDING_MODE_TLB,
- TEST_ADAPTIVE_TRANSMIT_LOAD_BALANCING_RX_BURST_SLAVE_COUNT, 1, 1),
- "Failed to initialize bonded device");
-
-
- primary_port = rte_eth_bond_primary_get(test_params->bonded_port_id);
- TEST_ASSERT(primary_port >= 0,
- "failed to get primary slave for bonded port (%d)",
- test_params->bonded_port_id);
-
- for (i = 0; i < test_params->bonded_slave_count; i++) {
- /* Generate test bursts of packets to transmit */
- TEST_ASSERT_EQUAL(generate_test_burst(
- &gen_pkt_burst[0], burst_size, 0, 1, 0, 0, 0), burst_size,
- "burst generation failed");
-
- /* Add rx data to slave */
- virtual_ethdev_add_mbufs_to_rx_queue(test_params->slave_port_ids[i],
- &gen_pkt_burst[0], burst_size);
-
- /* Call rx burst on bonded device */
- nb_rx = rte_eth_rx_burst(test_params->bonded_port_id, 0,
- &rx_pkt_burst[0], MAX_PKT_BURST);
-
- TEST_ASSERT_EQUAL(nb_rx, burst_size, "rte_eth_rx_burst failed\n");
-
- if (test_params->slave_port_ids[i] == primary_port) {
- /* Verify bonded device rx count */
- rte_eth_stats_get(test_params->bonded_port_id, &port_stats);
- TEST_ASSERT_EQUAL(port_stats.ipackets, (uint64_t)burst_size,
- "Bonded Port (%d) ipackets value (%u) not as expected (%d)\n",
- test_params->bonded_port_id,
- (unsigned int)port_stats.ipackets, burst_size);
-
- /* Verify bonded slave devices rx count */
- for (j = 0; j < test_params->bonded_slave_count; j++) {
- rte_eth_stats_get(test_params->slave_port_ids[j], &port_stats);
- if (i == j) {
- TEST_ASSERT_EQUAL(port_stats.ipackets, (uint64_t)burst_size,
- "Slave Port (%d) ipackets value (%u) not as expected (%d)\n",
- test_params->slave_port_ids[i],
- (unsigned int)port_stats.ipackets, burst_size);
- } else {
- TEST_ASSERT_EQUAL(port_stats.ipackets, (uint64_t)0,
- "Slave Port (%d) ipackets value (%u) not as expected (%d)\n",
- test_params->slave_port_ids[i],
- (unsigned int)port_stats.ipackets, 0);
- }
- }
- } else {
- for (j = 0; j < test_params->bonded_slave_count; j++) {
- rte_eth_stats_get(test_params->slave_port_ids[j], &port_stats);
- TEST_ASSERT_EQUAL(port_stats.ipackets, (uint64_t)0,
- "Slave Port (%d) ipackets value (%u) not as expected (%d)\n",
- test_params->slave_port_ids[i],
- (unsigned int)port_stats.ipackets, 0);
- }
- }
-
- /* free mbufs */
- for (i = 0; i < burst_size; i++)
- rte_pktmbuf_free(rx_pkt_burst[i]);
-
- /* reset bonded device stats */
- rte_eth_stats_reset(test_params->bonded_port_id);
- }
-
- /* Clean up and remove slaves from bonded device */
- return remove_slaves_and_stop_bonded_device();
-}
-
-static int
-test_tlb_verify_promiscuous_enable_disable(void)
-{
- int i, primary_port, promiscuous_en;
-
- /* Initialize bonded device with 4 slaves in transmit load balancing mode */
- TEST_ASSERT_SUCCESS( initialize_bonded_device_with_slaves(
- BONDING_MODE_TLB, 0, 4, 1),
- "Failed to initialize bonded device");
-
- primary_port = rte_eth_bond_primary_get(test_params->bonded_port_id);
- TEST_ASSERT(primary_port >= 0,
- "failed to get primary slave for bonded port (%d)",
- test_params->bonded_port_id);
-
- rte_eth_promiscuous_enable(test_params->bonded_port_id);
-
- promiscuous_en = rte_eth_promiscuous_get(test_params->bonded_port_id);
- TEST_ASSERT_EQUAL(promiscuous_en, (int)1,
- "Port (%d) promiscuous mode not enabled\n",
- test_params->bonded_port_id);
- for (i = 0; i < test_params->bonded_slave_count; i++) {
- promiscuous_en = rte_eth_promiscuous_get(
- test_params->slave_port_ids[i]);
- if (primary_port == test_params->slave_port_ids[i]) {
- TEST_ASSERT_EQUAL(promiscuous_en, (int)1,
- "Port (%d) promiscuous mode not enabled\n",
- test_params->bonded_port_id);
- } else {
- TEST_ASSERT_EQUAL(promiscuous_en, (int)0,
- "Port (%d) promiscuous mode enabled\n",
- test_params->bonded_port_id);
- }
-
- }
-
- rte_eth_promiscuous_disable(test_params->bonded_port_id);
-
- promiscuous_en = rte_eth_promiscuous_get(test_params->bonded_port_id);
- TEST_ASSERT_EQUAL(promiscuous_en, (int)0,
- "Port (%d) promiscuous mode not disabled\n",
- test_params->bonded_port_id);
-
- for (i = 0; i < test_params->bonded_slave_count; i++) {
- promiscuous_en = rte_eth_promiscuous_get(
- test_params->slave_port_ids[i]);
- TEST_ASSERT_EQUAL(promiscuous_en, (int)0,
- "slave port (%d) promiscuous mode not disabled\n",
- test_params->slave_port_ids[i]);
- }
-
- /* Clean up and remove slaves from bonded device */
- return remove_slaves_and_stop_bonded_device();
-}
-
-static int
-test_tlb_verify_mac_assignment(void)
-{
- struct ether_addr read_mac_addr, expected_mac_addr_0, expected_mac_addr_1;
-
- rte_eth_macaddr_get(test_params->slave_port_ids[0], &expected_mac_addr_0);
- rte_eth_macaddr_get(test_params->slave_port_ids[1], &expected_mac_addr_1);
-
- /* Initialize bonded device with 2 slaves in active backup mode */
- TEST_ASSERT_SUCCESS(initialize_bonded_device_with_slaves(
- BONDING_MODE_TLB, 0, 2, 1),
- "Failed to initialize bonded device");
-
- /* Verify that bonded MACs is that of first slave and that the other slave
- * MAC hasn't been changed */
- rte_eth_macaddr_get(test_params->bonded_port_id, &read_mac_addr);
- TEST_ASSERT_SUCCESS(memcmp(&expected_mac_addr_0, &read_mac_addr,
- sizeof(read_mac_addr)),
- "bonded port (%d) mac address not set to that of primary port",
- test_params->bonded_port_id);
-
- rte_eth_macaddr_get(test_params->slave_port_ids[0], &read_mac_addr);
- TEST_ASSERT_SUCCESS(memcmp(&expected_mac_addr_0, &read_mac_addr,
- sizeof(read_mac_addr)),
- "slave port (%d) mac address not set to that of primary port",
- test_params->slave_port_ids[0]);
-
- rte_eth_macaddr_get(test_params->slave_port_ids[1], &read_mac_addr);
- TEST_ASSERT_SUCCESS(memcmp(&expected_mac_addr_1, &read_mac_addr,
- sizeof(read_mac_addr)),
- "slave port (%d) mac address not as expected",
- test_params->slave_port_ids[1]);
-
- /* change primary and verify that MAC addresses haven't changed */
- TEST_ASSERT_EQUAL(rte_eth_bond_primary_set(test_params->bonded_port_id,
- test_params->slave_port_ids[1]), 0,
- "Failed to set bonded port (%d) primary port to (%d)",
- test_params->bonded_port_id, test_params->slave_port_ids[1]);
-
- rte_eth_macaddr_get(test_params->bonded_port_id, &read_mac_addr);
- TEST_ASSERT_SUCCESS(memcmp(&expected_mac_addr_0, &read_mac_addr,
- sizeof(read_mac_addr)),
- "bonded port (%d) mac address not set to that of primary port",
- test_params->bonded_port_id);
-
- rte_eth_macaddr_get(test_params->slave_port_ids[0], &read_mac_addr);
- TEST_ASSERT_SUCCESS(memcmp(&expected_mac_addr_0, &read_mac_addr,
- sizeof(read_mac_addr)),
- "slave port (%d) mac address not set to that of primary port",
- test_params->slave_port_ids[0]);
-
- rte_eth_macaddr_get(test_params->slave_port_ids[1], &read_mac_addr);
- TEST_ASSERT_SUCCESS(memcmp(&expected_mac_addr_1, &read_mac_addr,
- sizeof(read_mac_addr)),
- "slave port (%d) mac address not as expected",
- test_params->slave_port_ids[1]);
-
- /* stop / start bonded device and verify that primary MAC address is
- * propagated to bonded device and slaves */
-
- rte_eth_dev_stop(test_params->bonded_port_id);
-
- TEST_ASSERT_SUCCESS(rte_eth_dev_start(test_params->bonded_port_id),
- "Failed to start device");
-
- rte_eth_macaddr_get(test_params->bonded_port_id, &read_mac_addr);
- TEST_ASSERT_SUCCESS(memcmp(&expected_mac_addr_1, &read_mac_addr,
- sizeof(read_mac_addr)),
- "bonded port (%d) mac address not set to that of primary port",
- test_params->bonded_port_id);
-
- rte_eth_macaddr_get(test_params->slave_port_ids[0], &read_mac_addr);
- TEST_ASSERT_SUCCESS(memcmp(&expected_mac_addr_0, &read_mac_addr,
- sizeof(read_mac_addr)),
- "slave port (%d) mac address not as expected",
- test_params->slave_port_ids[0]);
-
- rte_eth_macaddr_get(test_params->slave_port_ids[1], &read_mac_addr);
- TEST_ASSERT_SUCCESS(memcmp(&expected_mac_addr_1, &read_mac_addr,
- sizeof(read_mac_addr)),
- "slave port (%d) mac address not set to that of primary port",
- test_params->slave_port_ids[1]);
-
-
- /* Set explicit MAC address */
- TEST_ASSERT_SUCCESS(rte_eth_bond_mac_address_set(
- test_params->bonded_port_id, (struct ether_addr *)bonded_mac),
- "failed to set MAC addres");
-
- rte_eth_macaddr_get(test_params->bonded_port_id, &read_mac_addr);
- TEST_ASSERT_SUCCESS(memcmp(&bonded_mac, &read_mac_addr,
- sizeof(read_mac_addr)),
- "bonded port (%d) mac address not set to that of bonded port",
- test_params->bonded_port_id);
-
- rte_eth_macaddr_get(test_params->slave_port_ids[0], &read_mac_addr);
- TEST_ASSERT_SUCCESS(memcmp(&expected_mac_addr_0, &read_mac_addr,
- sizeof(read_mac_addr)),
- "slave port (%d) mac address not as expected",
- test_params->slave_port_ids[0]);
-
- rte_eth_macaddr_get(test_params->slave_port_ids[1], &read_mac_addr);
- TEST_ASSERT_SUCCESS(memcmp(&bonded_mac, &read_mac_addr,
- sizeof(read_mac_addr)),
- "slave port (%d) mac address not set to that of bonded port",
- test_params->slave_port_ids[1]);
-
- /* Clean up and remove slaves from bonded device */
- return remove_slaves_and_stop_bonded_device();
-}
-
-static int
-test_tlb_verify_slave_link_status_change_failover(void)
-{
- struct rte_mbuf *pkt_burst[TEST_ADAPTIVE_TRANSMIT_LOAD_BALANCING_RX_BURST_SLAVE_COUNT][MAX_PKT_BURST];
- struct rte_mbuf *rx_pkt_burst[MAX_PKT_BURST] = { NULL };
- struct rte_eth_stats port_stats;
-
- uint8_t slaves[RTE_MAX_ETHPORTS];
-
- int i, j, burst_size, slave_count, primary_port;
-
- burst_size = 21;
-
- memset(pkt_burst, 0, sizeof(pkt_burst));
-
-
-
- /* Initialize bonded device with 4 slaves in round robin mode */
- TEST_ASSERT_SUCCESS(initialize_bonded_device_with_slaves(
- BONDING_MODE_TLB, 0,
- TEST_ADAPTIVE_TRANSMIT_LOAD_BALANCING_RX_BURST_SLAVE_COUNT, 1),
- "Failed to initialize bonded device with slaves");
-
- /* Verify Current Slaves Count /Active Slave Count is */
- slave_count = rte_eth_bond_slaves_get(test_params->bonded_port_id, slaves,
- RTE_MAX_ETHPORTS);
- TEST_ASSERT_EQUAL(slave_count, 4,
- "Number of slaves (%d) is not as expected (%d).\n",
- slave_count, 4);
-
- slave_count = rte_eth_bond_active_slaves_get(test_params->bonded_port_id,
- slaves, RTE_MAX_ETHPORTS);
- TEST_ASSERT_EQUAL(slave_count, (int)4,
- "Number of slaves (%d) is not as expected (%d).\n",
- slave_count, 4);
-
- primary_port = rte_eth_bond_primary_get(test_params->bonded_port_id);
- TEST_ASSERT_EQUAL(primary_port, test_params->slave_port_ids[0],
- "Primary port not as expected");
-
- /* Bring 2 slaves down and verify active slave count */
- virtual_ethdev_simulate_link_status_interrupt(
- test_params->slave_port_ids[1], 0);
- virtual_ethdev_simulate_link_status_interrupt(
- test_params->slave_port_ids[3], 0);
-
- TEST_ASSERT_EQUAL(rte_eth_bond_active_slaves_get(
- test_params->bonded_port_id, slaves, RTE_MAX_ETHPORTS), 2,
- "Number of active slaves (%d) is not as expected (%d).",
- slave_count, 2);
-
- virtual_ethdev_simulate_link_status_interrupt(
- test_params->slave_port_ids[1], 1);
- virtual_ethdev_simulate_link_status_interrupt(
- test_params->slave_port_ids[3], 1);
-
-
- /* Bring primary port down, verify that active slave count is 3 and primary
- * has changed */
- virtual_ethdev_simulate_link_status_interrupt(
- test_params->slave_port_ids[0], 0);
-
- TEST_ASSERT_EQUAL(rte_eth_bond_active_slaves_get(
- test_params->bonded_port_id, slaves, RTE_MAX_ETHPORTS), 3,
- "Number of active slaves (%d) is not as expected (%d).",
- slave_count, 3);
-
- primary_port = rte_eth_bond_primary_get(test_params->bonded_port_id);
- TEST_ASSERT_EQUAL(primary_port, test_params->slave_port_ids[2],
- "Primary port not as expected");
- rte_delay_us(500000);
- /* Verify that pkts are sent on new primary slave */
- for (i = 0; i < 4; i++) {
- TEST_ASSERT_EQUAL(generate_test_burst(
- &pkt_burst[0][0], burst_size, 0, 1, 0, 0, 0), burst_size,
- "generate_test_burst failed\n");
- TEST_ASSERT_EQUAL(rte_eth_tx_burst(
- test_params->bonded_port_id, 0, &pkt_burst[0][0], burst_size), burst_size,
- "rte_eth_tx_burst failed\n");
- rte_delay_us(11000);
- }
-
- rte_eth_stats_get(test_params->slave_port_ids[0], &port_stats);
- TEST_ASSERT_EQUAL(port_stats.opackets, (int8_t)0,
- "(%d) port_stats.opackets not as expected\n",
- test_params->slave_port_ids[0]);
-
- rte_eth_stats_get(test_params->slave_port_ids[1], &port_stats);
- TEST_ASSERT_NOT_EQUAL(port_stats.opackets, (int8_t)0,
- "(%d) port_stats.opackets not as expected\n",
- test_params->slave_port_ids[1]);
-
- rte_eth_stats_get(test_params->slave_port_ids[2], &port_stats);
- TEST_ASSERT_NOT_EQUAL(port_stats.opackets, (int8_t)0,
- "(%d) port_stats.opackets not as expected\n",
- test_params->slave_port_ids[2]);
-
- rte_eth_stats_get(test_params->slave_port_ids[3], &port_stats);
- TEST_ASSERT_NOT_EQUAL(port_stats.opackets, (int8_t)0,
- "(%d) port_stats.opackets not as expected\n",
- test_params->slave_port_ids[3]);
-
-
- /* Generate packet burst for testing */
-
- for (i = 0; i < TEST_ADAPTIVE_TRANSMIT_LOAD_BALANCING_RX_BURST_SLAVE_COUNT; i++) {
- if (generate_test_burst(&pkt_burst[i][0], burst_size, 0, 1, 0, 0, 0) !=
- burst_size)
- return -1;
-
- virtual_ethdev_add_mbufs_to_rx_queue(
- test_params->slave_port_ids[i], &pkt_burst[i][0], burst_size);
- }
-
- if (rte_eth_rx_burst(test_params->bonded_port_id, 0, rx_pkt_burst,
- MAX_PKT_BURST) != burst_size) {
- printf("rte_eth_rx_burst\n");
- return -1;
-
- }
-
- /* Verify bonded device rx count */
- rte_eth_stats_get(test_params->bonded_port_id, &port_stats);
- TEST_ASSERT_EQUAL(port_stats.ipackets, (uint64_t)burst_size,
- "(%d) port_stats.ipackets not as expected\n",
- test_params->bonded_port_id);
-
- /* free mbufs */
-
- for (i = 0; i < TEST_ADAPTIVE_TRANSMIT_LOAD_BALANCING_RX_BURST_SLAVE_COUNT; i++) {
- for (j = 0; j < MAX_PKT_BURST; j++) {
- if (pkt_burst[i][j] != NULL) {
- rte_pktmbuf_free(pkt_burst[i][j]);
- pkt_burst[i][j] = NULL;
- }
- }
- }
-
-
- /* Clean up and remove slaves from bonded device */
- return remove_slaves_and_stop_bonded_device();
-}
-
-#define TEST_ALB_SLAVE_COUNT 2
-
-static uint8_t mac_client1[] = {0x00, 0xAA, 0x55, 0xFF, 0xCC, 1};
-static uint8_t mac_client2[] = {0x00, 0xAA, 0x55, 0xFF, 0xCC, 2};
-static uint8_t mac_client3[] = {0x00, 0xAA, 0x55, 0xFF, 0xCC, 3};
-static uint8_t mac_client4[] = {0x00, 0xAA, 0x55, 0xFF, 0xCC, 4};
-
-static uint32_t ip_host = IPV4_ADDR(192, 168, 0, 0);
-static uint32_t ip_client1 = IPV4_ADDR(192, 168, 0, 1);
-static uint32_t ip_client2 = IPV4_ADDR(192, 168, 0, 2);
-static uint32_t ip_client3 = IPV4_ADDR(192, 168, 0, 3);
-static uint32_t ip_client4 = IPV4_ADDR(192, 168, 0, 4);
-
-static int
-test_alb_change_mac_in_reply_sent(void)
-{
- struct rte_mbuf *pkt;
- struct rte_mbuf *pkts_sent[MAX_PKT_BURST];
-
- struct ether_hdr *eth_pkt;
- struct arp_hdr *arp_pkt;
-
- int slave_idx, nb_pkts, pkt_idx;
- int retval = 0;
-
- struct ether_addr bond_mac, client_mac;
- struct ether_addr *slave_mac1, *slave_mac2;
-
- TEST_ASSERT_SUCCESS(
- initialize_bonded_device_with_slaves(BONDING_MODE_ALB,
- 0, TEST_ALB_SLAVE_COUNT, 1),
- "Failed to initialize_bonded_device_with_slaves.");
-
- /* Flush tx queue */
- rte_eth_tx_burst(test_params->bonded_port_id, 0, NULL, 0);
- for (slave_idx = 0; slave_idx < test_params->bonded_slave_count;
- slave_idx++) {
- nb_pkts = virtual_ethdev_get_mbufs_from_tx_queue(
- test_params->slave_port_ids[slave_idx], pkts_sent,
- MAX_PKT_BURST);
- }
-
- ether_addr_copy(
- rte_eth_devices[test_params->bonded_port_id].data->mac_addrs,
- &bond_mac);
-
- /*
- * Generating four packets with different mac and ip addresses and sending
- * them through the bonding port.
- */
- pkt = rte_pktmbuf_alloc(test_params->mbuf_pool);
- memcpy(client_mac.addr_bytes, mac_client1, ETHER_ADDR_LEN);
- eth_pkt = rte_pktmbuf_mtod(pkt, struct ether_hdr *);
- initialize_eth_header(eth_pkt, &bond_mac, &client_mac, ETHER_TYPE_ARP, 0,
- 0);
- arp_pkt = (struct arp_hdr *)((char *)eth_pkt + sizeof(struct ether_hdr));
- initialize_arp_header(arp_pkt, &bond_mac, &client_mac, ip_host, ip_client1,
- ARP_OP_REPLY);
- rte_eth_tx_burst(test_params->bonded_port_id, 0, &pkt, 1);
-
- pkt = rte_pktmbuf_alloc(test_params->mbuf_pool);
- memcpy(client_mac.addr_bytes, mac_client2, ETHER_ADDR_LEN);
- eth_pkt = rte_pktmbuf_mtod(pkt, struct ether_hdr *);
- initialize_eth_header(eth_pkt, &bond_mac, &client_mac, ETHER_TYPE_ARP, 0,
- 0);
- arp_pkt = (struct arp_hdr *)((char *)eth_pkt + sizeof(struct ether_hdr));
- initialize_arp_header(arp_pkt, &bond_mac, &client_mac, ip_host, ip_client2,
- ARP_OP_REPLY);
- rte_eth_tx_burst(test_params->bonded_port_id, 0, &pkt, 1);
-
- pkt = rte_pktmbuf_alloc(test_params->mbuf_pool);
- memcpy(client_mac.addr_bytes, mac_client3, ETHER_ADDR_LEN);
- eth_pkt = rte_pktmbuf_mtod(pkt, struct ether_hdr *);
- initialize_eth_header(eth_pkt, &bond_mac, &client_mac, ETHER_TYPE_ARP, 0,
- 0);
- arp_pkt = (struct arp_hdr *)((char *)eth_pkt + sizeof(struct ether_hdr));
- initialize_arp_header(arp_pkt, &bond_mac, &client_mac, ip_host, ip_client3,
- ARP_OP_REPLY);
- rte_eth_tx_burst(test_params->bonded_port_id, 0, &pkt, 1);
-
- pkt = rte_pktmbuf_alloc(test_params->mbuf_pool);
- memcpy(client_mac.addr_bytes, mac_client4, ETHER_ADDR_LEN);
- eth_pkt = rte_pktmbuf_mtod(pkt, struct ether_hdr *);
- initialize_eth_header(eth_pkt, &bond_mac, &client_mac, ETHER_TYPE_ARP, 0,
- 0);
- arp_pkt = (struct arp_hdr *)((char *)eth_pkt + sizeof(struct ether_hdr));
- initialize_arp_header(arp_pkt, &bond_mac, &client_mac, ip_host, ip_client4,
- ARP_OP_REPLY);
- rte_eth_tx_burst(test_params->bonded_port_id, 0, &pkt, 1);
-
- slave_mac1 =
- rte_eth_devices[test_params->slave_port_ids[0]].data->mac_addrs;
- slave_mac2 =
- rte_eth_devices[test_params->slave_port_ids[1]].data->mac_addrs;
-
- /*
- * Checking if packets are properly distributed on bonding ports. Packets
- * 0 and 2 should be sent on port 0 and packets 1 and 3 on port 1.
- */
- for (slave_idx = 0; slave_idx < test_params->bonded_slave_count; slave_idx++) {
- nb_pkts = virtual_ethdev_get_mbufs_from_tx_queue(
- test_params->slave_port_ids[slave_idx], pkts_sent,
- MAX_PKT_BURST);
-
- for (pkt_idx = 0; pkt_idx < nb_pkts; pkt_idx++) {
- eth_pkt = rte_pktmbuf_mtod(pkts_sent[pkt_idx], struct ether_hdr *);
- arp_pkt = (struct arp_hdr *)((char *)eth_pkt + sizeof(struct ether_hdr));
-
- if (slave_idx%2 == 0) {
- if (!is_same_ether_addr(slave_mac1, &arp_pkt->arp_data.arp_sha)) {
- retval = -1;
- goto test_end;
- }
- } else {
- if (!is_same_ether_addr(slave_mac2, &arp_pkt->arp_data.arp_sha)) {
- retval = -1;
- goto test_end;
- }
- }
- }
- }
-
-test_end:
- retval += remove_slaves_and_stop_bonded_device();
- return retval;
-}
-
-static int
-test_alb_reply_from_client(void)
-{
- struct ether_hdr *eth_pkt;
- struct arp_hdr *arp_pkt;
-
- struct rte_mbuf *pkt;
- struct rte_mbuf *pkts_sent[MAX_PKT_BURST];
-
- int slave_idx, nb_pkts, pkt_idx, nb_pkts_sum = 0;
- int retval = 0;
-
- struct ether_addr bond_mac, client_mac;
- struct ether_addr *slave_mac1, *slave_mac2;
-
- TEST_ASSERT_SUCCESS(
- initialize_bonded_device_with_slaves(BONDING_MODE_ALB,
- 0, TEST_ALB_SLAVE_COUNT, 1),
- "Failed to initialize_bonded_device_with_slaves.");
-
- /* Flush tx queue */
- rte_eth_tx_burst(test_params->bonded_port_id, 0, NULL, 0);
- for (slave_idx = 0; slave_idx < test_params->bonded_slave_count; slave_idx++) {
- nb_pkts = virtual_ethdev_get_mbufs_from_tx_queue(
- test_params->slave_port_ids[slave_idx], pkts_sent,
- MAX_PKT_BURST);
- }
-
- ether_addr_copy(
- rte_eth_devices[test_params->bonded_port_id].data->mac_addrs,
- &bond_mac);
-
- /*
- * Generating four packets with different mac and ip addresses and placing
- * them in the rx queue to be received by the bonding driver on rx_burst.
- */
- pkt = rte_pktmbuf_alloc(test_params->mbuf_pool);
- memcpy(client_mac.addr_bytes, mac_client1, ETHER_ADDR_LEN);
- eth_pkt = rte_pktmbuf_mtod(pkt, struct ether_hdr *);
- initialize_eth_header(eth_pkt, &bond_mac, &client_mac, ETHER_TYPE_ARP, 0,
- 0);
- arp_pkt = (struct arp_hdr *)((char *)eth_pkt + sizeof(struct ether_hdr));
- initialize_arp_header(arp_pkt, &client_mac, &bond_mac, ip_client1, ip_host,
- ARP_OP_REPLY);
- virtual_ethdev_add_mbufs_to_rx_queue(test_params->slave_port_ids[0], &pkt,
- 1);
-
- pkt = rte_pktmbuf_alloc(test_params->mbuf_pool);
- memcpy(client_mac.addr_bytes, mac_client2, ETHER_ADDR_LEN);
- eth_pkt = rte_pktmbuf_mtod(pkt, struct ether_hdr *);
- initialize_eth_header(eth_pkt, &bond_mac, &client_mac, ETHER_TYPE_ARP, 0,
- 0);
- arp_pkt = (struct arp_hdr *)((char *)eth_pkt + sizeof(struct ether_hdr));
- initialize_arp_header(arp_pkt, &client_mac, &bond_mac, ip_client2, ip_host,
- ARP_OP_REPLY);
- virtual_ethdev_add_mbufs_to_rx_queue(test_params->slave_port_ids[0], &pkt,
- 1);
-
- pkt = rte_pktmbuf_alloc(test_params->mbuf_pool);
- memcpy(client_mac.addr_bytes, mac_client3, ETHER_ADDR_LEN);
- eth_pkt = rte_pktmbuf_mtod(pkt, struct ether_hdr *);
- initialize_eth_header(eth_pkt, &bond_mac, &client_mac, ETHER_TYPE_ARP, 0,
- 0);
- arp_pkt = (struct arp_hdr *)((char *)eth_pkt + sizeof(struct ether_hdr));
- initialize_arp_header(arp_pkt, &client_mac, &bond_mac, ip_client3, ip_host,
- ARP_OP_REPLY);
- virtual_ethdev_add_mbufs_to_rx_queue(test_params->slave_port_ids[0], &pkt,
- 1);
-
- pkt = rte_pktmbuf_alloc(test_params->mbuf_pool);
- memcpy(client_mac.addr_bytes, mac_client4, ETHER_ADDR_LEN);
- eth_pkt = rte_pktmbuf_mtod(pkt, struct ether_hdr *);
- initialize_eth_header(eth_pkt, &bond_mac, &client_mac, ETHER_TYPE_ARP, 0,
- 0);
- arp_pkt = (struct arp_hdr *)((char *)eth_pkt + sizeof(struct ether_hdr));
- initialize_arp_header(arp_pkt, &client_mac, &bond_mac, ip_client4, ip_host,
- ARP_OP_REPLY);
- virtual_ethdev_add_mbufs_to_rx_queue(test_params->slave_port_ids[0], &pkt,
- 1);
-
- /*
- * Issue rx_burst and tx_burst to force bonding driver to send update ARP
- * packets to every client in alb table.
- */
- rte_eth_rx_burst(test_params->bonded_port_id, 0, pkts_sent, MAX_PKT_BURST);
- rte_eth_tx_burst(test_params->bonded_port_id, 0, NULL, 0);
-
- slave_mac1 = rte_eth_devices[test_params->slave_port_ids[0]].data->mac_addrs;
- slave_mac2 = rte_eth_devices[test_params->slave_port_ids[1]].data->mac_addrs;
-
- /*
- * Checking if update ARP packets were properly send on slave ports.
- */
- for (slave_idx = 0; slave_idx < test_params->bonded_slave_count; slave_idx++) {
- nb_pkts = virtual_ethdev_get_mbufs_from_tx_queue(
- test_params->slave_port_ids[slave_idx], pkts_sent, MAX_PKT_BURST);
- nb_pkts_sum += nb_pkts;
-
- for (pkt_idx = 0; pkt_idx < nb_pkts; pkt_idx++) {
- eth_pkt = rte_pktmbuf_mtod(pkts_sent[pkt_idx], struct ether_hdr *);
- arp_pkt = (struct arp_hdr *)((char *)eth_pkt + sizeof(struct ether_hdr));
-
- if (slave_idx%2 == 0) {
- if (!is_same_ether_addr(slave_mac1, &arp_pkt->arp_data.arp_sha)) {
- retval = -1;
- goto test_end;
- }
- } else {
- if (!is_same_ether_addr(slave_mac2, &arp_pkt->arp_data.arp_sha)) {
- retval = -1;
- goto test_end;
- }
- }
- }
- }
-
- /* Check if proper number of packets was send */
- if (nb_pkts_sum < 4) {
- retval = -1;
- goto test_end;
- }
-
-test_end:
- retval += remove_slaves_and_stop_bonded_device();
- return retval;
-}
-
-static int
-test_alb_receive_vlan_reply(void)
-{
- struct ether_hdr *eth_pkt;
- struct vlan_hdr *vlan_pkt;
- struct arp_hdr *arp_pkt;
-
- struct rte_mbuf *pkt;
- struct rte_mbuf *pkts_sent[MAX_PKT_BURST];
-
- int slave_idx, nb_pkts, pkt_idx;
- int retval = 0;
-
- struct ether_addr bond_mac, client_mac;
-
- TEST_ASSERT_SUCCESS(
- initialize_bonded_device_with_slaves(BONDING_MODE_ALB,
- 0, TEST_ALB_SLAVE_COUNT, 1),
- "Failed to initialize_bonded_device_with_slaves.");
-
- /* Flush tx queue */
- rte_eth_tx_burst(test_params->bonded_port_id, 0, NULL, 0);
- for (slave_idx = 0; slave_idx < test_params->bonded_slave_count; slave_idx++) {
- nb_pkts = virtual_ethdev_get_mbufs_from_tx_queue(
- test_params->slave_port_ids[slave_idx], pkts_sent,
- MAX_PKT_BURST);
- }
-
- ether_addr_copy(
- rte_eth_devices[test_params->bonded_port_id].data->mac_addrs,
- &bond_mac);
-
- /*
- * Generating packet with double VLAN header and placing it in the rx queue.
- */
- pkt = rte_pktmbuf_alloc(test_params->mbuf_pool);
- memcpy(client_mac.addr_bytes, mac_client1, ETHER_ADDR_LEN);
- eth_pkt = rte_pktmbuf_mtod(pkt, struct ether_hdr *);
- initialize_eth_header(eth_pkt, &bond_mac, &client_mac, ETHER_TYPE_VLAN, 0,
- 0);
- vlan_pkt = (struct vlan_hdr *)((char *)(eth_pkt + 1));
- vlan_pkt->vlan_tci = rte_cpu_to_be_16(1);
- vlan_pkt->eth_proto = rte_cpu_to_be_16(ETHER_TYPE_VLAN);
- vlan_pkt = vlan_pkt+1;
- vlan_pkt->vlan_tci = rte_cpu_to_be_16(2);
- vlan_pkt->eth_proto = rte_cpu_to_be_16(ETHER_TYPE_ARP);
- arp_pkt = (struct arp_hdr *)((char *)(vlan_pkt + 1));
- initialize_arp_header(arp_pkt, &client_mac, &bond_mac, ip_client1, ip_host,
- ARP_OP_REPLY);
- virtual_ethdev_add_mbufs_to_rx_queue(test_params->slave_port_ids[0], &pkt,
- 1);
-
- rte_eth_rx_burst(test_params->bonded_port_id, 0, pkts_sent, MAX_PKT_BURST);
- rte_eth_tx_burst(test_params->bonded_port_id, 0, NULL, 0);
-
- /*
- * Checking if VLAN headers in generated ARP Update packet are correct.
- */
- for (slave_idx = 0; slave_idx < test_params->bonded_slave_count; slave_idx++) {
- nb_pkts = virtual_ethdev_get_mbufs_from_tx_queue(
- test_params->slave_port_ids[slave_idx], pkts_sent,
- MAX_PKT_BURST);
-
- for (pkt_idx = 0; pkt_idx < nb_pkts; pkt_idx++) {
- eth_pkt = rte_pktmbuf_mtod(pkts_sent[pkt_idx], struct ether_hdr *);
- vlan_pkt = (struct vlan_hdr *)((char *)(eth_pkt + 1));
- if (vlan_pkt->vlan_tci != rte_cpu_to_be_16(1)) {
- retval = -1;
- goto test_end;
- }
- if (vlan_pkt->eth_proto != rte_cpu_to_be_16(ETHER_TYPE_VLAN)) {
- retval = -1;
- goto test_end;
- }
- vlan_pkt = vlan_pkt+1;
- if (vlan_pkt->vlan_tci != rte_cpu_to_be_16(2)) {
- retval = -1;
- goto test_end;
- }
- if (vlan_pkt->eth_proto != rte_cpu_to_be_16(ETHER_TYPE_ARP)) {
- retval = -1;
- goto test_end;
- }
- }
- }
-
-test_end:
- retval += remove_slaves_and_stop_bonded_device();
- return retval;
-}
-
-static int
-test_alb_ipv4_tx(void)
-{
- int burst_size, retval, pkts_send;
- struct rte_mbuf *pkt_burst[MAX_PKT_BURST];
-
- retval = 0;
-
- TEST_ASSERT_SUCCESS(
- initialize_bonded_device_with_slaves(BONDING_MODE_ALB,
- 0, TEST_ALB_SLAVE_COUNT, 1),
- "Failed to initialize_bonded_device_with_slaves.");
-
- burst_size = 32;
-
- /* Generate test bursts of packets to transmit */
- if (generate_test_burst(pkt_burst, burst_size, 0, 1, 0, 0, 0) != burst_size) {
- retval = -1;
- goto test_end;
- }
-
- /*
- * Checking if ipv4 traffic is transmitted via TLB policy.
- */
- pkts_send = rte_eth_tx_burst(
- test_params->bonded_port_id, 0, pkt_burst, burst_size);
- if (pkts_send != burst_size) {
- retval = -1;
- goto test_end;
- }
-
-test_end:
- retval += remove_slaves_and_stop_bonded_device();
- return retval;
-}
-
-static struct unit_test_suite link_bonding_test_suite = {
- .suite_name = "Link Bonding Unit Test Suite",
- .setup = test_setup,
- .teardown = testsuite_teardown,
- .unit_test_cases = {
- TEST_CASE(test_create_bonded_device),
- TEST_CASE(test_create_bonded_device_with_invalid_params),
- TEST_CASE(test_add_slave_to_bonded_device),
- TEST_CASE(test_add_slave_to_invalid_bonded_device),
- TEST_CASE(test_remove_slave_from_bonded_device),
- TEST_CASE(test_remove_slave_from_invalid_bonded_device),
- TEST_CASE(test_get_slaves_from_bonded_device),
- TEST_CASE(test_add_already_bonded_slave_to_bonded_device),
- TEST_CASE(test_add_remove_multiple_slaves_to_from_bonded_device),
- TEST_CASE(test_start_bonded_device),
- TEST_CASE(test_stop_bonded_device),
- TEST_CASE(test_set_bonding_mode),
- TEST_CASE(test_set_primary_slave),
- TEST_CASE(test_set_explicit_bonded_mac),
- TEST_CASE(test_set_bonded_port_initialization_mac_assignment),
- TEST_CASE(test_status_interrupt),
- TEST_CASE(test_adding_slave_after_bonded_device_started),
- TEST_CASE(test_roundrobin_tx_burst),
- TEST_CASE(test_roundrobin_tx_burst_slave_tx_fail),
- TEST_CASE(test_roundrobin_rx_burst_on_single_slave),
- TEST_CASE(test_roundrobin_rx_burst_on_multiple_slaves),
- TEST_CASE(test_roundrobin_verify_promiscuous_enable_disable),
- TEST_CASE(test_roundrobin_verify_mac_assignment),
- TEST_CASE(test_roundrobin_verify_slave_link_status_change_behaviour),
- TEST_CASE(test_roundrobin_verfiy_polling_slave_link_status_change),
- TEST_CASE(test_activebackup_tx_burst),
- TEST_CASE(test_activebackup_rx_burst),
- TEST_CASE(test_activebackup_verify_promiscuous_enable_disable),
- TEST_CASE(test_activebackup_verify_mac_assignment),
- TEST_CASE(test_activebackup_verify_slave_link_status_change_failover),
- TEST_CASE(test_balance_xmit_policy_configuration),
- TEST_CASE(test_balance_l2_tx_burst),
- TEST_CASE(test_balance_l23_tx_burst_ipv4_toggle_ip_addr),
- TEST_CASE(test_balance_l23_tx_burst_vlan_ipv4_toggle_ip_addr),
- TEST_CASE(test_balance_l23_tx_burst_ipv6_toggle_ip_addr),
- TEST_CASE(test_balance_l23_tx_burst_vlan_ipv6_toggle_ip_addr),
- TEST_CASE(test_balance_l23_tx_burst_toggle_mac_addr),
- TEST_CASE(test_balance_l34_tx_burst_ipv4_toggle_ip_addr),
- TEST_CASE(test_balance_l34_tx_burst_ipv4_toggle_udp_port),
- TEST_CASE(test_balance_l34_tx_burst_vlan_ipv4_toggle_ip_addr),
- TEST_CASE(test_balance_l34_tx_burst_ipv6_toggle_ip_addr),
- TEST_CASE(test_balance_l34_tx_burst_vlan_ipv6_toggle_ip_addr),
- TEST_CASE(test_balance_l34_tx_burst_ipv6_toggle_udp_port),
- TEST_CASE(test_balance_tx_burst_slave_tx_fail),
- TEST_CASE(test_balance_rx_burst),
- TEST_CASE(test_balance_verify_promiscuous_enable_disable),
- TEST_CASE(test_balance_verify_mac_assignment),
- TEST_CASE(test_balance_verify_slave_link_status_change_behaviour),
- TEST_CASE(test_tlb_tx_burst),
- TEST_CASE(test_tlb_rx_burst),
- TEST_CASE(test_tlb_verify_mac_assignment),
- TEST_CASE(test_tlb_verify_promiscuous_enable_disable),
- TEST_CASE(test_tlb_verify_slave_link_status_change_failover),
- TEST_CASE(test_alb_change_mac_in_reply_sent),
- TEST_CASE(test_alb_reply_from_client),
- TEST_CASE(test_alb_receive_vlan_reply),
- TEST_CASE(test_alb_ipv4_tx),
- TEST_CASE(test_broadcast_tx_burst),
- TEST_CASE(test_broadcast_tx_burst_slave_tx_fail),
- TEST_CASE(test_broadcast_rx_burst),
- TEST_CASE(test_broadcast_verify_promiscuous_enable_disable),
- TEST_CASE(test_broadcast_verify_mac_assignment),
- TEST_CASE(test_broadcast_verify_slave_link_status_change_behaviour),
- TEST_CASE(test_reconfigure_bonded_device),
- TEST_CASE(test_close_bonded_device),
-
- TEST_CASES_END() /**< NULL terminate unit test array */
- }
-};
-
-
-static int
-test_link_bonding(void)
-{
- return unit_test_suite_runner(&link_bonding_test_suite);
-}
-
-REGISTER_TEST_COMMAND(link_bonding_autotest, test_link_bonding);
diff --git a/app/test/test_link_bonding_mode4.c b/app/test/test_link_bonding_mode4.c
deleted file mode 100644
index 53caa3e9..00000000
--- a/app/test/test_link_bonding_mode4.c
+++ /dev/null
@@ -1,1602 +0,0 @@
-/*-
- * BSD LICENSE
- *
- * Copyright(c) 2010-2014 Intel Corporation. All rights reserved.
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * * Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * * Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in
- * the documentation and/or other materials provided with the
- * distribution.
- * * Neither the name of Intel Corporation nor the names of its
- * contributors may be used to endorse or promote products derived
- * from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
- * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
- * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#include <string.h>
-#include <stdarg.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <stdint.h>
-#include <inttypes.h>
-#include <errno.h>
-#include <rte_cycles.h>
-#include <sys/queue.h>
-
-#include <rte_byteorder.h>
-#include <rte_common.h>
-#include <rte_debug.h>
-#include <rte_ethdev.h>
-#include <rte_log.h>
-#include <rte_lcore.h>
-#include <rte_memory.h>
-
-#include <rte_string_fns.h>
-
-#include <rte_eth_ring.h>
-#include <rte_errno.h>
-#include <rte_eth_bond.h>
-#include <rte_eth_bond_8023ad.h>
-
-#include "packet_burst_generator.h"
-
-#include "test.h"
-
-#define SLAVE_COUNT (4)
-
-#define RX_RING_SIZE 128
-#define TX_RING_SIZE 512
-
-#define MBUF_CACHE_SIZE (250)
-#define BURST_SIZE (32)
-
-#define TEST_RX_DESC_MAX (2048)
-#define TEST_TX_DESC_MAX (2048)
-#define MAX_PKT_BURST (32)
-#define DEF_PKT_BURST (16)
-
-#define BONDED_DEV_NAME ("unit_test_mode4_bond_dev")
-
-#define SLAVE_DEV_NAME_FMT ("unit_test_mode4_slave_%d")
-#define SLAVE_RX_QUEUE_FMT ("unit_test_mode4_slave_%d_rx")
-#define SLAVE_TX_QUEUE_FMT ("unit_test_mode4_slave_%d_tx")
-
-#define INVALID_SOCKET_ID (-1)
-#define INVALID_PORT_ID (0xFF)
-#define INVALID_BONDING_MODE (-1)
-
-static const struct ether_addr slave_mac_default = {
- { 0x00, 0xFF, 0x00, 0xFF, 0x00, 0x00 }
-};
-
-static const struct ether_addr parnter_mac_default = {
- { 0x22, 0xBB, 0xFF, 0xBB, 0x00, 0x00 }
-};
-
-static const struct ether_addr parnter_system = {
- { 0x33, 0xFF, 0xBB, 0xFF, 0x00, 0x00 }
-};
-
-static const struct ether_addr slow_protocol_mac_addr = {
- { 0x01, 0x80, 0xC2, 0x00, 0x00, 0x02 }
-};
-
-struct slave_conf {
- struct rte_ring *rx_queue;
- struct rte_ring *tx_queue;
- uint8_t port_id;
- uint8_t bonded : 1;
-
- uint8_t lacp_parnter_state;
-};
-
-struct ether_vlan_hdr {
- struct ether_hdr pkt_eth_hdr;
- struct vlan_hdr vlan_hdr;
-};
-
-struct link_bonding_unittest_params {
- uint8_t bonded_port_id;
- struct slave_conf slave_ports[SLAVE_COUNT];
-
- struct rte_mempool *mbuf_pool;
-};
-
-#define TEST_DEFAULT_SLAVE_COUNT RTE_DIM(test_params.slave_ports)
-#define TEST_RX_SLAVE_COUT TEST_DEFAULT_SLAVE_COUNT
-#define TEST_TX_SLAVE_COUNT TEST_DEFAULT_SLAVE_COUNT
-#define TEST_MARKER_SLAVE_COUT TEST_DEFAULT_SLAVE_COUNT
-#define TEST_EXPIRED_SLAVE_COUNT TEST_DEFAULT_SLAVE_COUNT
-#define TEST_PROMISC_SLAVE_COUNT TEST_DEFAULT_SLAVE_COUNT
-
-static struct link_bonding_unittest_params test_params = {
- .bonded_port_id = INVALID_PORT_ID,
- .slave_ports = { [0 ... SLAVE_COUNT - 1] = { .port_id = INVALID_PORT_ID} },
-
- .mbuf_pool = NULL,
-};
-
-static struct rte_eth_conf default_pmd_conf = {
- .rxmode = {
- .mq_mode = ETH_MQ_RX_NONE,
- .max_rx_pkt_len = ETHER_MAX_LEN,
- .split_hdr_size = 0,
- .header_split = 0, /**< Header Split disabled */
- .hw_ip_checksum = 0, /**< IP checksum offload enabled */
- .hw_vlan_filter = 0, /**< VLAN filtering disabled */
- .jumbo_frame = 0, /**< Jumbo Frame Support disabled */
- .hw_strip_crc = 0, /**< CRC stripped by hardware */
- },
- .txmode = {
- .mq_mode = ETH_MQ_TX_NONE,
- },
- .lpbk_mode = 0,
-};
-
-static uint8_t lacpdu_rx_count[RTE_MAX_ETHPORTS] = {0, };
-
-#define FOR_EACH(_i, _item, _array, _size) \
- for (_i = 0, _item = &_array[0]; _i < _size && (_item = &_array[_i]); _i++)
-
-/* Macro for iterating over every port that can be used as a slave
- * in this test.
- * _i variable used as an index in test_params->slave_ports
- * _slave pointer to &test_params->slave_ports[_idx]
- */
-#define FOR_EACH_PORT(_i, _port) \
- FOR_EACH(_i, _port, test_params.slave_ports, \
- RTE_DIM(test_params.slave_ports))
-
-/* Macro for iterating over every port that can be used as a slave
- * in this test and satisfy given condition.
- *
- * _i variable used as an index in test_params->slave_ports
- * _slave pointer to &test_params->slave_ports[_idx]
- * _condition condition that need to be checked
- */
-#define FOR_EACH_PORT_IF(_i, _port, _condition) FOR_EACH_PORT((_i), (_port)) \
- if (!!(_condition))
-
-/* Macro for iterating over every port that is currently a slave of a bonded
- * device.
- * _i variable used as an index in test_params->slave_ports
- * _slave pointer to &test_params->slave_ports[_idx]
- * */
-#define FOR_EACH_SLAVE(_i, _slave) \
- FOR_EACH_PORT_IF(_i, _slave, (_slave)->bonded != 0)
-
-/*
- * Returns packets from slaves TX queue.
- * slave slave port
- * buffer for packets
- * size size of buffer
- * return number of packets or negative error number
- */
-static int
-slave_get_pkts(struct slave_conf *slave, struct rte_mbuf **buf, uint16_t size)
-{
- return rte_ring_dequeue_burst(slave->tx_queue, (void **)buf, size);
-}
-
-/*
- * Injects given packets into slaves RX queue.
- * slave slave port
- * buffer for packets
- * size number of packets to be injected
- * return number of queued packets or negative error number
- */
-static int
-slave_put_pkts(struct slave_conf *slave, struct rte_mbuf **buf, uint16_t size)
-{
- return rte_ring_enqueue_burst(slave->rx_queue, (void **)buf, size);
-}
-
-static uint16_t
-bond_rx(struct rte_mbuf **buf, uint16_t size)
-{
- return rte_eth_rx_burst(test_params.bonded_port_id, 0, buf, size);
-}
-
-static uint16_t
-bond_tx(struct rte_mbuf **buf, uint16_t size)
-{
- return rte_eth_tx_burst(test_params.bonded_port_id, 0, buf, size);
-}
-
-static void
-free_pkts(struct rte_mbuf **pkts, uint16_t count)
-{
- uint16_t i;
-
- for (i = 0; i < count; i++) {
- if (pkts[i] != NULL)
- rte_pktmbuf_free(pkts[i]);
- }
-}
-
-static int
-configure_ethdev(uint8_t port_id, uint8_t start)
-{
- TEST_ASSERT(rte_eth_dev_configure(port_id, 1, 1, &default_pmd_conf) == 0,
- "Failed to configure device %u", port_id);
-
- TEST_ASSERT(rte_eth_rx_queue_setup(port_id, 0, RX_RING_SIZE,
- rte_eth_dev_socket_id(port_id), NULL, test_params.mbuf_pool) == 0,
- "Failed to setup rx queue.");
-
- TEST_ASSERT(rte_eth_tx_queue_setup(port_id, 0, TX_RING_SIZE,
- rte_eth_dev_socket_id(port_id), NULL) == 0,
- "Failed to setup tx queue.");
-
- if (start) {
- TEST_ASSERT(rte_eth_dev_start(port_id) == 0,
- "Failed to start device (%d).", port_id);
- }
- return 0;
-}
-
-static int
-add_slave(struct slave_conf *slave, uint8_t start)
-{
- struct ether_addr addr, addr_check;
-
- /* Some sanity check */
- RTE_VERIFY(test_params.slave_ports <= slave &&
- slave - test_params.slave_ports < (int)RTE_DIM(test_params.slave_ports));
- RTE_VERIFY(slave->bonded == 0);
- RTE_VERIFY(slave->port_id != INVALID_PORT_ID);
-
- ether_addr_copy(&slave_mac_default, &addr);
- addr.addr_bytes[ETHER_ADDR_LEN - 1] = slave->port_id;
-
- rte_eth_dev_mac_addr_remove(slave->port_id, &addr);
-
- TEST_ASSERT_SUCCESS(rte_eth_dev_mac_addr_add(slave->port_id, &addr, 0),
- "Failed to set slave MAC address");
-
- TEST_ASSERT_SUCCESS(rte_eth_bond_slave_add(test_params.bonded_port_id,
- slave->port_id),
- "Failed to add slave (idx=%u, id=%u) to bonding (id=%u)",
- (uint8_t)(slave - test_params.slave_ports), slave->port_id,
- test_params.bonded_port_id);
-
- slave->bonded = 1;
- if (start) {
- TEST_ASSERT_SUCCESS(rte_eth_dev_start(slave->port_id),
- "Failed to start slave %u", slave->port_id);
- }
-
- rte_eth_macaddr_get(slave->port_id, &addr_check);
- TEST_ASSERT_EQUAL(is_same_ether_addr(&addr, &addr_check), 1,
- "Slave MAC address is not as expected");
-
- RTE_VERIFY(slave->lacp_parnter_state == 0);
- return 0;
-}
-
-static int
-remove_slave(struct slave_conf *slave)
-{
- ptrdiff_t slave_idx = slave - test_params.slave_ports;
-
- RTE_VERIFY(test_params.slave_ports <= slave &&
- slave_idx < (ptrdiff_t)RTE_DIM(test_params.slave_ports));
-
- RTE_VERIFY(slave->bonded == 1);
- RTE_VERIFY(slave->port_id != INVALID_PORT_ID);
-
- TEST_ASSERT_EQUAL(rte_ring_count(slave->rx_queue), 0,
- "Slave %u tx queue not empty while removing from bonding.",
- slave->port_id);
-
- TEST_ASSERT_EQUAL(rte_ring_count(slave->rx_queue), 0,
- "Slave %u tx queue not empty while removing from bonding.",
- slave->port_id);
-
- TEST_ASSERT_EQUAL(rte_eth_bond_slave_remove(test_params.bonded_port_id,
- slave->port_id), 0,
- "Failed to remove slave (idx=%u, id=%u) from bonding (id=%u)",
- (uint8_t)slave_idx, slave->port_id,
- test_params.bonded_port_id);
-
- slave->bonded = 0;
- slave->lacp_parnter_state = 0;
- return 0;
-}
-
-static void
-lacp_recv_cb(uint8_t slave_id, struct rte_mbuf *lacp_pkt)
-{
- struct ether_hdr *hdr;
- struct slow_protocol_frame *slow_hdr;
-
- RTE_VERIFY(lacp_pkt != NULL);
-
- hdr = rte_pktmbuf_mtod(lacp_pkt, struct ether_hdr *);
- RTE_VERIFY(hdr->ether_type == rte_cpu_to_be_16(ETHER_TYPE_SLOW));
-
- slow_hdr = rte_pktmbuf_mtod(lacp_pkt, struct slow_protocol_frame *);
- RTE_VERIFY(slow_hdr->slow_protocol.subtype == SLOW_SUBTYPE_LACP);
-
- lacpdu_rx_count[slave_id]++;
- rte_pktmbuf_free(lacp_pkt);
-}
-
-static int
-initialize_bonded_device_with_slaves(uint8_t slave_count, uint8_t external_sm)
-{
- uint8_t i;
-
- RTE_VERIFY(test_params.bonded_port_id != INVALID_PORT_ID);
-
- for (i = 0; i < slave_count; i++) {
- TEST_ASSERT_SUCCESS(add_slave(&test_params.slave_ports[i], 1),
- "Failed to add port %u to bonded device.\n",
- test_params.slave_ports[i].port_id);
- }
-
- /* Reset mode 4 configuration */
- rte_eth_bond_8023ad_setup(test_params.bonded_port_id, NULL);
- rte_eth_promiscuous_disable(test_params.bonded_port_id);
-
- if (external_sm) {
- struct rte_eth_bond_8023ad_conf conf;
-
- rte_eth_bond_8023ad_conf_get(test_params.bonded_port_id, &conf);
- conf.slowrx_cb = lacp_recv_cb;
- rte_eth_bond_8023ad_setup(test_params.bonded_port_id, &conf);
-
- }
-
- TEST_ASSERT_SUCCESS(rte_eth_dev_start(test_params.bonded_port_id),
- "Failed to start bonded device");
-
- return TEST_SUCCESS;
-}
-
-static int
-remove_slaves_and_stop_bonded_device(void)
-{
- struct slave_conf *slave;
- int retval;
- uint8_t slaves[RTE_MAX_ETHPORTS];
- uint8_t i;
-
- rte_eth_dev_stop(test_params.bonded_port_id);
-
- FOR_EACH_SLAVE(i, slave)
- remove_slave(slave);
-
- retval = rte_eth_bond_slaves_get(test_params.bonded_port_id, slaves,
- RTE_DIM(slaves));
-
- TEST_ASSERT_EQUAL(retval, 0,
- "Expected bonded device %u have 0 slaves but returned %d.",
- test_params.bonded_port_id, retval);
-
- FOR_EACH_PORT(i, slave) {
- rte_eth_dev_stop(slave->port_id);
-
- TEST_ASSERT(slave->bonded == 0,
- "Port id=%u is still marked as enslaved.", slave->port_id);
- }
-
- return TEST_SUCCESS;
-}
-
-static int
-test_setup(void)
-{
- int retval, nb_mbuf_per_pool;
- char name[RTE_ETH_NAME_MAX_LEN];
- struct slave_conf *port;
- const uint8_t socket_id = rte_socket_id();
- uint8_t i;
-
- if (test_params.mbuf_pool == NULL) {
- nb_mbuf_per_pool = TEST_RX_DESC_MAX + DEF_PKT_BURST +
- TEST_TX_DESC_MAX + MAX_PKT_BURST;
- test_params.mbuf_pool = rte_pktmbuf_pool_create("TEST_MODE4",
- nb_mbuf_per_pool, MBUF_CACHE_SIZE, 0,
- RTE_MBUF_DEFAULT_BUF_SIZE, socket_id);
-
- TEST_ASSERT(test_params.mbuf_pool != NULL,
- "rte_mempool_create failed\n");
- }
-
- /* Create / initialize ring eth devs. */
- FOR_EACH_PORT(i, port) {
- port = &test_params.slave_ports[i];
-
- if (port->rx_queue == NULL) {
- retval = snprintf(name, RTE_DIM(name), SLAVE_RX_QUEUE_FMT, i);
- TEST_ASSERT(retval <= (int)RTE_DIM(name) - 1, "Name too long");
- port->rx_queue = rte_ring_create(name, RX_RING_SIZE, socket_id, 0);
- TEST_ASSERT(port->rx_queue != NULL,
- "Failed to allocate rx ring '%s': %s", name,
- rte_strerror(rte_errno));
- }
-
- if (port->tx_queue == NULL) {
- retval = snprintf(name, RTE_DIM(name), SLAVE_TX_QUEUE_FMT, i);
- TEST_ASSERT(retval <= (int)RTE_DIM(name) - 1, "Name too long");
- port->tx_queue = rte_ring_create(name, TX_RING_SIZE, socket_id, 0);
- TEST_ASSERT_NOT_NULL(port->tx_queue,
- "Failed to allocate tx ring '%s': %s", name,
- rte_strerror(rte_errno));
- }
-
- if (port->port_id == INVALID_PORT_ID) {
- retval = snprintf(name, RTE_DIM(name), SLAVE_DEV_NAME_FMT, i);
- TEST_ASSERT(retval < (int)RTE_DIM(name) - 1, "Name too long");
- retval = rte_eth_from_rings(name, &port->rx_queue, 1,
- &port->tx_queue, 1, socket_id);
- TEST_ASSERT(retval >= 0,
- "Failed to create ring ethdev '%s'\n", name);
-
- port->port_id = rte_eth_dev_count() - 1;
- }
-
- retval = configure_ethdev(port->port_id, 1);
- TEST_ASSERT_SUCCESS(retval, "Failed to configure virtual ethdev %s\n",
- name);
- }
-
- if (test_params.bonded_port_id == INVALID_PORT_ID) {
- retval = rte_eth_bond_create(BONDED_DEV_NAME, BONDING_MODE_8023AD,
- socket_id);
-
- TEST_ASSERT(retval >= 0, "Failed to create bonded ethdev %s",
- BONDED_DEV_NAME);
-
- test_params.bonded_port_id = retval;
- TEST_ASSERT_SUCCESS(configure_ethdev(test_params.bonded_port_id, 0),
- "Failed to configure bonded ethdev %s", BONDED_DEV_NAME);
- } else if (rte_eth_bond_mode_get(test_params.bonded_port_id) !=
- BONDING_MODE_8023AD) {
- TEST_ASSERT(rte_eth_bond_mode_set(test_params.bonded_port_id,
- BONDING_MODE_8023AD) == 0,
- "Failed to set ethdev %d to mode %d",
- test_params.bonded_port_id, BONDING_MODE_8023AD);
- }
-
- return 0;
-}
-
-static void
-testsuite_teardown(void)
-{
- struct slave_conf *port;
- uint8_t i;
-
- /* Only stop ports.
- * Any cleanup/reset state is done when particular test is
- * started. */
-
- rte_eth_dev_stop(test_params.bonded_port_id);
-
- FOR_EACH_PORT(i, port)
- rte_eth_dev_stop(port->port_id);
-}
-
-/*
- * Check if given LACP packet. If it is, make make replay packet to force
- * COLLECTING state.
- * return 0 when pkt is LACP frame, 1 if it is not slow frame, 2 if it is slow
- * frame but not LACP
- */
-static int
-make_lacp_reply(struct slave_conf *slave, struct rte_mbuf *pkt)
-{
- struct ether_hdr *hdr;
- struct slow_protocol_frame *slow_hdr;
- struct lacpdu *lacp;
-
- /* look for LACP */
- hdr = rte_pktmbuf_mtod(pkt, struct ether_hdr *);
- if (hdr->ether_type != rte_cpu_to_be_16(ETHER_TYPE_SLOW))
- return 1;
-
- slow_hdr = rte_pktmbuf_mtod(pkt, struct slow_protocol_frame *);
- /* ignore packets of other types */
- if (slow_hdr->slow_protocol.subtype != SLOW_SUBTYPE_LACP)
- return 2;
-
- slow_hdr = rte_pktmbuf_mtod(pkt, struct slow_protocol_frame *);
-
- /* Change source address to partner address */
- ether_addr_copy(&parnter_mac_default, &slow_hdr->eth_hdr.s_addr);
- slow_hdr->eth_hdr.s_addr.addr_bytes[ETHER_ADDR_LEN - 1] = slave->port_id;
-
- lacp = (struct lacpdu *) &slow_hdr->slow_protocol;
- /* Save last received state */
- slave->lacp_parnter_state = lacp->actor.state;
- /* Change it into LACP replay by matching parameters. */
- memcpy(&lacp->partner.port_params, &lacp->actor.port_params,
- sizeof(struct port_params));
-
- lacp->partner.state = lacp->actor.state;
-
- ether_addr_copy(&parnter_system, &lacp->actor.port_params.system);
- lacp->actor.state = STATE_LACP_ACTIVE |
- STATE_SYNCHRONIZATION |
- STATE_AGGREGATION |
- STATE_COLLECTING |
- STATE_DISTRIBUTING;
-
- return 0;
-}
-
-/*
- * Reads packets from given slave, search for LACP packet and reply them.
- *
- * Receives burst of packets from slave. Looks for LACP packet. Drops
- * all other packets. Prepares response LACP and sends it back.
- *
- * return number of LACP received and replied, -1 on error.
- */
-static int
-bond_handshake_reply(struct slave_conf *slave)
-{
- int retval;
- struct rte_mbuf *rx_buf[MAX_PKT_BURST];
- struct rte_mbuf *lacp_tx_buf[MAX_PKT_BURST];
- uint16_t lacp_tx_buf_cnt = 0, i;
-
- retval = slave_get_pkts(slave, rx_buf, RTE_DIM(rx_buf));
- TEST_ASSERT(retval >= 0, "Getting slave %u packets failed.",
- slave->port_id);
-
- for (i = 0; i < (uint16_t)retval; i++) {
- if (make_lacp_reply(slave, rx_buf[i]) == 0) {
- /* reply with actor's LACP */
- lacp_tx_buf[lacp_tx_buf_cnt++] = rx_buf[i];
- } else
- rte_pktmbuf_free(rx_buf[i]);
- }
-
- if (lacp_tx_buf_cnt == 0)
- return 0;
-
- retval = slave_put_pkts(slave, lacp_tx_buf, lacp_tx_buf_cnt);
- if (retval <= lacp_tx_buf_cnt) {
- /* retval might be negative */
- for (i = RTE_MAX(0, retval); retval < lacp_tx_buf_cnt; retval++)
- rte_pktmbuf_free(lacp_tx_buf[i]);
- }
-
- TEST_ASSERT_EQUAL(retval, lacp_tx_buf_cnt,
- "Failed to equeue lacp packets into slave %u tx queue.",
- slave->port_id);
-
- return lacp_tx_buf_cnt;
-}
-
-/*
- * Function check if given slave tx queue contains packets that make mode 4
- * handshake complete. It will drain slave queue.
- * return 0 if handshake not completed, 1 if handshake was complete,
- */
-static int
-bond_handshake_done(struct slave_conf *slave)
-{
- const uint8_t expected_state = STATE_LACP_ACTIVE | STATE_SYNCHRONIZATION |
- STATE_AGGREGATION | STATE_COLLECTING | STATE_DISTRIBUTING;
-
- return slave->lacp_parnter_state == expected_state;
-}
-
-static unsigned
-bond_get_update_timeout_ms(void)
-{
- struct rte_eth_bond_8023ad_conf conf;
-
- rte_eth_bond_8023ad_conf_get(test_params.bonded_port_id, &conf);
- return conf.update_timeout_ms;
-}
-
-/*
- * Exchanges LACP packets with partner to achieve dynamic port configuration.
- * return TEST_SUCCESS if initial handshake succeed, TEST_FAILED otherwise.
- */
-static int
-bond_handshake(void)
-{
- struct slave_conf *slave;
- struct rte_mbuf *buf[MAX_PKT_BURST];
- uint16_t nb_pkts;
- uint8_t all_slaves_done, i, j;
- uint8_t status[RTE_DIM(test_params.slave_ports)] = { 0 };
- const unsigned delay = bond_get_update_timeout_ms();
-
- /* Exchange LACP frames */
- all_slaves_done = 0;
- for (i = 0; i < 30 && all_slaves_done == 0; ++i) {
- rte_delay_ms(delay);
-
- all_slaves_done = 1;
- FOR_EACH_SLAVE(j, slave) {
- /* If response already send, skip slave */
- if (status[j] != 0)
- continue;
-
- if (bond_handshake_reply(slave) < 0) {
- all_slaves_done = 0;
- break;
- }
-
- status[j] = bond_handshake_done(slave);
- if (status[j] == 0)
- all_slaves_done = 0;
- }
-
- nb_pkts = bond_tx(NULL, 0);
- TEST_ASSERT_EQUAL(nb_pkts, 0, "Packets transmitted unexpectedly");
-
- nb_pkts = bond_rx(buf, RTE_DIM(buf));
- free_pkts(buf, nb_pkts);
- TEST_ASSERT_EQUAL(nb_pkts, 0, "Packets received unexpectedly");
- }
- /* If response didn't send - report failure */
- TEST_ASSERT_EQUAL(all_slaves_done, 1, "Bond handshake failed\n");
-
- /* If flags doesn't match - report failure */
- return all_slaves_done = 1 ? TEST_SUCCESS : TEST_FAILED;
-}
-
-#define TEST_LACP_SLAVE_COUT RTE_DIM(test_params.slave_ports)
-static int
-test_mode4_lacp(void)
-{
- int retval;
-
- retval = initialize_bonded_device_with_slaves(TEST_LACP_SLAVE_COUT, 0);
- TEST_ASSERT_SUCCESS(retval, "Failed to initialize bonded device");
-
- /* Test LACP handshake function */
- retval = bond_handshake();
- TEST_ASSERT_SUCCESS(retval, "Initial handshake failed");
-
- retval = remove_slaves_and_stop_bonded_device();
- TEST_ASSERT_SUCCESS(retval, "Test cleanup failed.");
-
- return TEST_SUCCESS;
-}
-
-static int
-generate_packets(struct ether_addr *src_mac,
- struct ether_addr *dst_mac, uint16_t count, struct rte_mbuf **buf)
-{
- uint16_t pktlen = PACKET_BURST_GEN_PKT_LEN;
- uint8_t vlan_enable = 0;
- uint16_t vlan_id = 0;
- uint8_t ip4_type = 1; /* 0 - ipv6 */
-
- uint16_t src_port = 10, dst_port = 20;
-
- uint32_t ip_src[4] = { [0 ... 2] = 0xDEADBEEF, [3] = IPv4(192, 168, 0, 1) };
- uint32_t ip_dst[4] = { [0 ... 2] = 0xFEEDFACE, [3] = IPv4(192, 168, 0, 2) };
-
- struct ether_hdr pkt_eth_hdr;
- struct udp_hdr pkt_udp_hdr;
- union {
- struct ipv4_hdr v4;
- struct ipv6_hdr v6;
- } pkt_ip_hdr;
-
- int retval;
-
- initialize_eth_header(&pkt_eth_hdr, src_mac, dst_mac, ip4_type,
- vlan_enable, vlan_id);
-
- if (ip4_type)
- initialize_ipv4_header(&pkt_ip_hdr.v4, ip_src[3], ip_dst[3], pktlen);
- else
- initialize_ipv6_header(&pkt_ip_hdr.v6, (uint8_t *)ip_src,
- (uint8_t *)&ip_dst, pktlen);
-
- initialize_udp_header(&pkt_udp_hdr, src_port, dst_port, 16);
-
- retval = generate_packet_burst(test_params.mbuf_pool, buf,
- &pkt_eth_hdr, vlan_enable, &pkt_ip_hdr, 1, &pkt_udp_hdr,
- count, pktlen, 1);
-
- if (retval > 0 && retval != count)
- free_pkts(&buf[count - retval], retval);
-
- TEST_ASSERT_EQUAL(retval, count, "Failed to generate %u packets",
- count);
-
- return count;
-}
-
-static int
-generate_and_put_packets(struct slave_conf *slave, struct ether_addr *src_mac,
- struct ether_addr *dst_mac, uint16_t count)
-{
- struct rte_mbuf *pkts[MAX_PKT_BURST];
- int retval;
-
- retval = generate_packets(src_mac, dst_mac, count, pkts);
- if (retval != (int)count)
- return retval;
-
- retval = slave_put_pkts(slave, pkts, count);
- if (retval > 0 && retval != count)
- free_pkts(&pkts[retval], count - retval);
-
- TEST_ASSERT_EQUAL(retval, count,
- "Failed to enqueue packets into slave %u RX queue", slave->port_id);
-
- return TEST_SUCCESS;
-}
-
-static int
-test_mode4_rx(void)
-{
- struct slave_conf *slave;
- uint16_t i, j;
-
- uint16_t expected_pkts_cnt;
- struct rte_mbuf *pkts[MAX_PKT_BURST];
- int retval;
- unsigned delay;
-
- struct ether_hdr *hdr;
-
- struct ether_addr src_mac = { { 0x00, 0xFF, 0x00, 0xFF, 0x00, 0x00 } };
- struct ether_addr dst_mac;
- struct ether_addr bonded_mac;
-
- retval = initialize_bonded_device_with_slaves(TEST_PROMISC_SLAVE_COUNT,
- 0);
- TEST_ASSERT_SUCCESS(retval, "Failed to initialize bonded device");
-
- retval = bond_handshake();
- TEST_ASSERT_SUCCESS(retval, "Initial handshake failed");
-
- rte_eth_macaddr_get(test_params.bonded_port_id, &bonded_mac);
- ether_addr_copy(&bonded_mac, &dst_mac);
-
- /* Assert that dst address is not bonding address. Do not set the
- * least significant bit of the zero byte as this would create a
- * multicast address.
- */
- dst_mac.addr_bytes[0] += 2;
-
- /* First try with promiscuous mode enabled.
- * Add 2 packets to each slave. First with bonding MAC address, second with
- * different. Check if we received all of them. */
- rte_eth_promiscuous_enable(test_params.bonded_port_id);
-
- expected_pkts_cnt = 0;
- FOR_EACH_SLAVE(i, slave) {
- retval = generate_and_put_packets(slave, &src_mac, &bonded_mac, 1);
- TEST_ASSERT_SUCCESS(retval, "Failed to enqueue packets to slave %u",
- slave->port_id);
-
- retval = generate_and_put_packets(slave, &src_mac, &dst_mac, 1);
- TEST_ASSERT_SUCCESS(retval, "Failed to enqueue packets to slave %u",
- slave->port_id);
-
- /* Expect 2 packets per slave */
- expected_pkts_cnt += 2;
- }
-
- retval = rte_eth_rx_burst(test_params.bonded_port_id, 0, pkts,
- RTE_DIM(pkts));
-
- if (retval == expected_pkts_cnt) {
- int cnt[2] = { 0, 0 };
-
- for (i = 0; i < expected_pkts_cnt; i++) {
- hdr = rte_pktmbuf_mtod(pkts[i], struct ether_hdr *);
- cnt[is_same_ether_addr(&hdr->d_addr, &bonded_mac)]++;
- }
-
- free_pkts(pkts, expected_pkts_cnt);
-
- /* For division by 2 expected_pkts_cnt must be even */
- RTE_VERIFY((expected_pkts_cnt & 1) == 0);
- TEST_ASSERT(cnt[0] == expected_pkts_cnt / 2 &&
- cnt[1] == expected_pkts_cnt / 2,
- "Expected %u packets with the same MAC and %u with different but "
- "got %u with the same and %u with diffrent MAC",
- expected_pkts_cnt / 2, expected_pkts_cnt / 2, cnt[1], cnt[0]);
- } else if (retval > 0)
- free_pkts(pkts, retval);
-
- TEST_ASSERT_EQUAL(retval, expected_pkts_cnt,
- "Expected %u packets but received only %d", expected_pkts_cnt, retval);
-
- /* Now, disable promiscuous mode. When promiscuous mode is disabled we
- * expect to receive only packets that are directed to bonding port. */
- rte_eth_promiscuous_disable(test_params.bonded_port_id);
-
- expected_pkts_cnt = 0;
- FOR_EACH_SLAVE(i, slave) {
- retval = generate_and_put_packets(slave, &src_mac, &bonded_mac, 1);
- TEST_ASSERT_SUCCESS(retval, "Failed to enqueue packets to slave %u",
- slave->port_id);
-
- retval = generate_and_put_packets(slave, &src_mac, &dst_mac, 1);
- TEST_ASSERT_SUCCESS(retval, "Failed to enqueue packets to slave %u",
- slave->port_id);
-
- /* Expect only one packet per slave */
- expected_pkts_cnt += 1;
- }
-
- retval = rte_eth_rx_burst(test_params.bonded_port_id, 0, pkts,
- RTE_DIM(pkts));
-
- if (retval == expected_pkts_cnt) {
- int eq_cnt = 0;
-
- for (i = 0; i < expected_pkts_cnt; i++) {
- hdr = rte_pktmbuf_mtod(pkts[i], struct ether_hdr *);
- eq_cnt += is_same_ether_addr(&hdr->d_addr, &bonded_mac);
- }
-
- free_pkts(pkts, expected_pkts_cnt);
- TEST_ASSERT_EQUAL(eq_cnt, expected_pkts_cnt, "Packet address mismatch");
- } else if (retval > 0)
- free_pkts(pkts, retval);
-
- TEST_ASSERT_EQUAL(retval, expected_pkts_cnt,
- "Expected %u packets but received only %d", expected_pkts_cnt, retval);
-
- /* Link down test: simulate link down for first slave. */
- delay = bond_get_update_timeout_ms();
-
- uint8_t slave_down_id = INVALID_PORT_ID;
-
- /* Find first slave and make link down on it*/
- FOR_EACH_SLAVE(i, slave) {
- rte_eth_dev_set_link_down(slave->port_id);
- slave_down_id = slave->port_id;
- break;
- }
-
- RTE_VERIFY(slave_down_id != INVALID_PORT_ID);
-
- /* Give some time to rearrange bonding */
- for (i = 0; i < 3; i++) {
- rte_delay_ms(delay);
- bond_handshake();
- }
-
- TEST_ASSERT_SUCCESS(bond_handshake(), "Handshake after link down failed");
-
- /* Put packet to each slave */
- FOR_EACH_SLAVE(i, slave) {
- void *pkt = NULL;
-
- dst_mac.addr_bytes[ETHER_ADDR_LEN - 1] = slave->port_id;
- retval = generate_and_put_packets(slave, &src_mac, &dst_mac, 1);
- TEST_ASSERT_SUCCESS(retval, "Failed to generate test packet burst.");
-
- src_mac.addr_bytes[ETHER_ADDR_LEN - 1] = slave->port_id;
- retval = generate_and_put_packets(slave, &src_mac, &bonded_mac, 1);
- TEST_ASSERT_SUCCESS(retval, "Failed to generate test packet burst.");
-
- retval = bond_rx(pkts, RTE_DIM(pkts));
-
- /* Clean anything */
- if (retval > 0)
- free_pkts(pkts, retval);
-
- while (rte_ring_dequeue(slave->rx_queue, (void **)&pkt) == 0)
- rte_pktmbuf_free(pkt);
-
- if (slave_down_id == slave->port_id)
- TEST_ASSERT_EQUAL(retval, 0, "Packets received unexpectedly.");
- else
- TEST_ASSERT_NOT_EQUAL(retval, 0,
- "Expected to receive some packets on slave %u.",
- slave->port_id);
- rte_eth_dev_start(slave->port_id);
-
- for (j = 0; j < 5; j++) {
- TEST_ASSERT(bond_handshake_reply(slave) >= 0,
- "Handshake after link up");
-
- if (bond_handshake_done(slave) == 1)
- break;
- }
-
- TEST_ASSERT(j < 5, "Failed to agregate slave after link up");
- }
-
- remove_slaves_and_stop_bonded_device();
- return TEST_SUCCESS;
-}
-
-static int
-test_mode4_tx_burst(void)
-{
- struct slave_conf *slave;
- uint16_t i, j;
-
- uint16_t exp_pkts_cnt, pkts_cnt = 0;
- struct rte_mbuf *pkts[MAX_PKT_BURST];
- int retval;
- unsigned delay;
-
- struct ether_addr dst_mac = { { 0x00, 0xFF, 0x00, 0xFF, 0x00, 0x00 } };
- struct ether_addr bonded_mac;
-
- retval = initialize_bonded_device_with_slaves(TEST_TX_SLAVE_COUNT, 0);
- TEST_ASSERT_SUCCESS(retval, "Failed to initialize bonded device");
-
- retval = bond_handshake();
- TEST_ASSERT_SUCCESS(retval, "Initial handshake failed");
-
- rte_eth_macaddr_get(test_params.bonded_port_id, &bonded_mac);
-
- /* Prepare burst */
- for (pkts_cnt = 0; pkts_cnt < RTE_DIM(pkts); pkts_cnt++) {
- dst_mac.addr_bytes[ETHER_ADDR_LEN - 1] = pkts_cnt;
- retval = generate_packets(&bonded_mac, &dst_mac, 1, &pkts[pkts_cnt]);
-
- if (retval != 1)
- free_pkts(pkts, pkts_cnt);
-
- TEST_ASSERT_EQUAL(retval, 1, "Failed to generate packet %u", pkts_cnt);
- }
- exp_pkts_cnt = pkts_cnt;
-
- /* Transmit packets on bonded device */
- retval = bond_tx(pkts, pkts_cnt);
- if (retval > 0 && retval < pkts_cnt)
- free_pkts(&pkts[retval], pkts_cnt - retval);
-
- TEST_ASSERT_EQUAL(retval, pkts_cnt, "TX on bonded device failed");
-
- /* Check if packets were transmitted properly. Every slave should have
- * at least one packet, and sum must match. Under normal operation
- * there should be no LACP nor MARKER frames. */
- pkts_cnt = 0;
- FOR_EACH_SLAVE(i, slave) {
- uint16_t normal_cnt, slow_cnt;
-
- retval = slave_get_pkts(slave, pkts, RTE_DIM(pkts));
- normal_cnt = 0;
- slow_cnt = 0;
-
- for (j = 0; j < retval; j++) {
- if (make_lacp_reply(slave, pkts[j]) == 1)
- normal_cnt++;
- else
- slow_cnt++;
- }
-
- free_pkts(pkts, normal_cnt + slow_cnt);
- TEST_ASSERT_EQUAL(slow_cnt, 0,
- "slave %u unexpectedly transmitted %d SLOW packets", slave->port_id,
- slow_cnt);
-
- TEST_ASSERT_NOT_EQUAL(normal_cnt, 0,
- "slave %u did not transmitted any packets", slave->port_id);
-
- pkts_cnt += normal_cnt;
- }
-
- TEST_ASSERT_EQUAL(exp_pkts_cnt, pkts_cnt,
- "Expected %u packets but transmitted only %d", exp_pkts_cnt, pkts_cnt);
-
- /* Link down test:
- * simulate link down for first slave. */
- delay = bond_get_update_timeout_ms();
-
- uint8_t slave_down_id = INVALID_PORT_ID;
-
- FOR_EACH_SLAVE(i, slave) {
- rte_eth_dev_set_link_down(slave->port_id);
- slave_down_id = slave->port_id;
- break;
- }
-
- RTE_VERIFY(slave_down_id != INVALID_PORT_ID);
-
- /* Give some time to rearrange bonding. */
- for (i = 0; i < 3; i++) {
- bond_handshake();
- rte_delay_ms(delay);
- }
-
- TEST_ASSERT_SUCCESS(bond_handshake(), "Handshake after link down failed");
-
- /* Prepare burst. */
- for (pkts_cnt = 0; pkts_cnt < RTE_DIM(pkts); pkts_cnt++) {
- dst_mac.addr_bytes[ETHER_ADDR_LEN - 1] = pkts_cnt;
- retval = generate_packets(&bonded_mac, &dst_mac, 1, &pkts[pkts_cnt]);
-
- if (retval != 1)
- free_pkts(pkts, pkts_cnt);
-
- TEST_ASSERT_EQUAL(retval, 1, "Failed to generate test packet %u",
- pkts_cnt);
- }
- exp_pkts_cnt = pkts_cnt;
-
- /* Transmit packets on bonded device. */
- retval = bond_tx(pkts, pkts_cnt);
- if (retval > 0 && retval < pkts_cnt)
- free_pkts(&pkts[retval], pkts_cnt - retval);
-
- TEST_ASSERT_EQUAL(retval, pkts_cnt, "TX on bonded device failed");
-
- /* Check if packets was transmitted properly. Every slave should have
- * at least one packet, and sum must match. Under normal operation
- * there should be no LACP nor MARKER frames. */
- pkts_cnt = 0;
- FOR_EACH_SLAVE(i, slave) {
- uint16_t normal_cnt, slow_cnt;
-
- retval = slave_get_pkts(slave, pkts, RTE_DIM(pkts));
- normal_cnt = 0;
- slow_cnt = 0;
-
- for (j = 0; j < retval; j++) {
- if (make_lacp_reply(slave, pkts[j]) == 1)
- normal_cnt++;
- else
- slow_cnt++;
- }
-
- free_pkts(pkts, normal_cnt + slow_cnt);
-
- if (slave_down_id == slave->port_id) {
- TEST_ASSERT_EQUAL(normal_cnt + slow_cnt, 0,
- "slave %u enexpectedly transmitted %u packets",
- normal_cnt + slow_cnt, slave->port_id);
- } else {
- TEST_ASSERT_EQUAL(slow_cnt, 0,
- "slave %u unexpectedly transmitted %d SLOW packets",
- slave->port_id, slow_cnt);
-
- TEST_ASSERT_NOT_EQUAL(normal_cnt, 0,
- "slave %u did not transmitted any packets", slave->port_id);
- }
-
- pkts_cnt += normal_cnt;
- }
-
- TEST_ASSERT_EQUAL(exp_pkts_cnt, pkts_cnt,
- "Expected %u packets but transmitted only %d", exp_pkts_cnt, pkts_cnt);
-
- return remove_slaves_and_stop_bonded_device();
-}
-
-static void
-init_marker(struct rte_mbuf *pkt, struct slave_conf *slave)
-{
- struct marker_header *marker_hdr = rte_pktmbuf_mtod(pkt,
- struct marker_header *);
-
- /* Copy multicast destination address */
- ether_addr_copy(&slow_protocol_mac_addr, &marker_hdr->eth_hdr.d_addr);
-
- /* Init source address */
- ether_addr_copy(&parnter_mac_default, &marker_hdr->eth_hdr.s_addr);
- marker_hdr->eth_hdr.s_addr.addr_bytes[ETHER_ADDR_LEN-1] = slave->port_id;
-
- marker_hdr->eth_hdr.ether_type = rte_cpu_to_be_16(ETHER_TYPE_SLOW);
-
- marker_hdr->marker.subtype = SLOW_SUBTYPE_MARKER;
- marker_hdr->marker.version_number = 1;
- marker_hdr->marker.tlv_type_marker = MARKER_TLV_TYPE_INFO;
- marker_hdr->marker.info_length =
- offsetof(struct marker, reserved_90) -
- offsetof(struct marker, requester_port);
- RTE_VERIFY(marker_hdr->marker.info_length == 16);
- marker_hdr->marker.requester_port = slave->port_id + 1;
- marker_hdr->marker.tlv_type_terminator = TLV_TYPE_TERMINATOR_INFORMATION;
- marker_hdr->marker.terminator_length = 0;
-}
-
-static int
-test_mode4_marker(void)
-{
- struct slave_conf *slave;
- struct rte_mbuf *pkts[MAX_PKT_BURST];
- struct rte_mbuf *marker_pkt;
- struct marker_header *marker_hdr;
-
- unsigned delay;
- int retval;
- uint16_t nb_pkts;
- uint8_t i, j;
- const uint16_t ethtype_slow_be = rte_be_to_cpu_16(ETHER_TYPE_SLOW);
-
- retval = initialize_bonded_device_with_slaves(TEST_MARKER_SLAVE_COUT,
- 0);
- TEST_ASSERT_SUCCESS(retval, "Failed to initialize bonded device");
-
- /* Test LACP handshake function */
- retval = bond_handshake();
- TEST_ASSERT_SUCCESS(retval, "Initial handshake failed");
-
- delay = bond_get_update_timeout_ms();
- FOR_EACH_SLAVE(i, slave) {
- marker_pkt = rte_pktmbuf_alloc(test_params.mbuf_pool);
- TEST_ASSERT_NOT_NULL(marker_pkt, "Failed to allocate marker packet");
- init_marker(marker_pkt, slave);
-
- retval = slave_put_pkts(slave, &marker_pkt, 1);
- if (retval != 1)
- rte_pktmbuf_free(marker_pkt);
-
- TEST_ASSERT_EQUAL(retval, 1,
- "Failed to send marker packet to slave %u", slave->port_id);
-
- for (j = 0; j < 20; ++j) {
- rte_delay_ms(delay);
- retval = rte_eth_rx_burst(test_params.bonded_port_id, 0, pkts,
- RTE_DIM(pkts));
-
- if (retval > 0)
- free_pkts(pkts, retval);
-
- TEST_ASSERT_EQUAL(retval, 0, "Received packets unexpectedly");
-
- retval = rte_eth_tx_burst(test_params.bonded_port_id, 0, NULL, 0);
- TEST_ASSERT_EQUAL(retval, 0,
- "Requested TX of 0 packets but %d transmitted", retval);
-
- /* Check if LACP packet was send by state machines
- First and only packet must be a maker response */
- retval = slave_get_pkts(slave, pkts, MAX_PKT_BURST);
- if (retval == 0)
- continue;
- if (retval > 1)
- free_pkts(pkts, retval);
-
- TEST_ASSERT_EQUAL(retval, 1, "failed to get slave packets");
- nb_pkts = retval;
-
- marker_hdr = rte_pktmbuf_mtod(pkts[0], struct marker_header *);
- /* Check if it's slow packet*/
- if (marker_hdr->eth_hdr.ether_type != ethtype_slow_be)
- retval = -1;
- /* Check if it's marker packet */
- else if (marker_hdr->marker.subtype != SLOW_SUBTYPE_MARKER)
- retval = -2;
- else if (marker_hdr->marker.tlv_type_marker != MARKER_TLV_TYPE_RESP)
- retval = -3;
-
- free_pkts(pkts, nb_pkts);
-
- TEST_ASSERT_NOT_EQUAL(retval, -1, "Unexpected protocol type");
- TEST_ASSERT_NOT_EQUAL(retval, -2, "Unexpected sub protocol type");
- TEST_ASSERT_NOT_EQUAL(retval, -3, "Unexpected marker type");
- break;
- }
-
- TEST_ASSERT(j < 20, "Marker response not found");
- }
-
- retval = remove_slaves_and_stop_bonded_device();
- TEST_ASSERT_SUCCESS(retval, "Test cleanup failed.");
-
- return TEST_SUCCESS;
-}
-
-static int
-test_mode4_expired(void)
-{
- struct slave_conf *slave, *exp_slave = NULL;
- struct rte_mbuf *pkts[MAX_PKT_BURST];
- int retval;
- uint32_t old_delay;
-
- uint8_t i;
- uint16_t j;
-
- struct rte_eth_bond_8023ad_conf conf;
-
- retval = initialize_bonded_device_with_slaves(TEST_EXPIRED_SLAVE_COUNT,
- 0);
- /* Set custom timeouts to make test last shorter. */
- rte_eth_bond_8023ad_conf_get(test_params.bonded_port_id, &conf);
- conf.fast_periodic_ms = 100;
- conf.slow_periodic_ms = 600;
- conf.short_timeout_ms = 300;
- conf.long_timeout_ms = 900;
- conf.aggregate_wait_timeout_ms = 200;
- conf.tx_period_ms = 100;
- old_delay = conf.update_timeout_ms;
- conf.update_timeout_ms = 10;
- rte_eth_bond_8023ad_setup(test_params.bonded_port_id, &conf);
-
- /* Wait for new settings to be applied. */
- for (i = 0; i < old_delay/conf.update_timeout_ms * 2; i++) {
- FOR_EACH_SLAVE(j, slave)
- bond_handshake_reply(slave);
-
- rte_delay_ms(conf.update_timeout_ms);
- }
-
- retval = bond_handshake();
- TEST_ASSERT_SUCCESS(retval, "Initial handshake failed");
-
- /* Find first slave */
- FOR_EACH_SLAVE(i, slave) {
- exp_slave = slave;
- break;
- }
-
- RTE_VERIFY(exp_slave != NULL);
-
- /* When one of partners do not send or respond to LACP frame in
- * conf.long_timeout_ms time, internal state machines should detect this
- * and transit to expired state. */
- for (j = 0; j < conf.long_timeout_ms/conf.update_timeout_ms + 2; j++) {
- rte_delay_ms(conf.update_timeout_ms);
-
- retval = bond_tx(NULL, 0);
- TEST_ASSERT_EQUAL(retval, 0, "Unexpectedly received %d packets",
- retval);
-
- FOR_EACH_SLAVE(i, slave) {
- retval = bond_handshake_reply(slave);
- TEST_ASSERT(retval >= 0, "Handshake failed");
-
- /* Remove replay for slave that supose to be expired. */
- if (slave == exp_slave) {
- while (rte_ring_count(slave->rx_queue) > 0) {
- void *pkt = NULL;
-
- rte_ring_dequeue(slave->rx_queue, &pkt);
- rte_pktmbuf_free(pkt);
- }
- }
- }
-
- retval = bond_rx(pkts, RTE_DIM(pkts));
- if (retval > 0)
- free_pkts(pkts, retval);
-
- TEST_ASSERT_EQUAL(retval, 0, "Unexpectedly received %d packets",
- retval);
- }
-
- /* After test only expected slave should be in EXPIRED state */
- FOR_EACH_SLAVE(i, slave) {
- if (slave == exp_slave)
- TEST_ASSERT(slave->lacp_parnter_state & STATE_EXPIRED,
- "Slave %u should be in expired.", slave->port_id);
- else
- TEST_ASSERT_EQUAL(bond_handshake_done(slave), 1,
- "Slave %u should be operational.", slave->port_id);
- }
-
- retval = remove_slaves_and_stop_bonded_device();
- TEST_ASSERT_SUCCESS(retval, "Test cleanup failed.");
-
- return TEST_SUCCESS;
-}
-
-static int
-test_mode4_ext_ctrl(void)
-{
- /*
- * configure bonded interface without the external sm enabled
- * . try to transmit lacpdu (should fail)
- * . try to set collecting and distributing flags (should fail)
- * reconfigure w/external sm
- * . transmit one lacpdu on each slave using new api
- * . make sure each slave receives one lacpdu using the callback api
- * . transmit one data pdu on each slave (should fail)
- * . enable distribution and collection, send one data pdu each again
- */
-
- int retval;
- struct slave_conf *slave = NULL;
- uint8_t i;
-
- struct rte_mbuf *lacp_tx_buf[SLAVE_COUNT];
- struct ether_addr src_mac, dst_mac;
- struct lacpdu_header lacpdu = {
- .lacpdu = {
- .subtype = SLOW_SUBTYPE_LACP,
- },
- };
-
- ether_addr_copy(&parnter_system, &src_mac);
- ether_addr_copy(&slow_protocol_mac_addr, &dst_mac);
-
- initialize_eth_header(&lacpdu.eth_hdr, &src_mac, &dst_mac,
- ETHER_TYPE_SLOW, 0, 0);
-
- for (i = 0; i < SLAVE_COUNT; i++) {
- lacp_tx_buf[i] = rte_pktmbuf_alloc(test_params.mbuf_pool);
- rte_memcpy(rte_pktmbuf_mtod(lacp_tx_buf[i], char *),
- &lacpdu, sizeof(lacpdu));
- rte_pktmbuf_pkt_len(lacp_tx_buf[i]) = sizeof(lacpdu);
- }
-
- retval = initialize_bonded_device_with_slaves(TEST_TX_SLAVE_COUNT, 0);
- TEST_ASSERT_SUCCESS(retval, "Failed to initialize bonded device");
-
- FOR_EACH_SLAVE(i, slave) {
- TEST_ASSERT_FAIL(rte_eth_bond_8023ad_ext_slowtx(
- test_params.bonded_port_id,
- slave->port_id, lacp_tx_buf[i]),
- "Slave should not allow manual LACP xmit");
- TEST_ASSERT_FAIL(rte_eth_bond_8023ad_ext_collect(
- test_params.bonded_port_id,
- slave->port_id, 1),
- "Slave should not allow external state controls");
- }
-
- free_pkts(lacp_tx_buf, RTE_DIM(lacp_tx_buf));
-
- retval = remove_slaves_and_stop_bonded_device();
- TEST_ASSERT_SUCCESS(retval, "Bonded device cleanup failed.");
-
- return TEST_SUCCESS;
-}
-
-
-static int
-test_mode4_ext_lacp(void)
-{
- int retval;
- struct slave_conf *slave = NULL;
- uint8_t all_slaves_done = 0, i;
- uint16_t nb_pkts;
- const unsigned int delay = bond_get_update_timeout_ms();
-
- struct rte_mbuf *lacp_tx_buf[SLAVE_COUNT];
- struct rte_mbuf *buf[SLAVE_COUNT];
- struct ether_addr src_mac, dst_mac;
- struct lacpdu_header lacpdu = {
- .lacpdu = {
- .subtype = SLOW_SUBTYPE_LACP,
- },
- };
-
- ether_addr_copy(&parnter_system, &src_mac);
- ether_addr_copy(&slow_protocol_mac_addr, &dst_mac);
-
- initialize_eth_header(&lacpdu.eth_hdr, &src_mac, &dst_mac,
- ETHER_TYPE_SLOW, 0, 0);
-
- for (i = 0; i < SLAVE_COUNT; i++) {
- lacp_tx_buf[i] = rte_pktmbuf_alloc(test_params.mbuf_pool);
- rte_memcpy(rte_pktmbuf_mtod(lacp_tx_buf[i], char *),
- &lacpdu, sizeof(lacpdu));
- rte_pktmbuf_pkt_len(lacp_tx_buf[i]) = sizeof(lacpdu);
- }
-
- retval = initialize_bonded_device_with_slaves(TEST_TX_SLAVE_COUNT, 1);
- TEST_ASSERT_SUCCESS(retval, "Failed to initialize bonded device");
-
- memset(lacpdu_rx_count, 0, sizeof(lacpdu_rx_count));
-
- /* Wait for new settings to be applied. */
- for (i = 0; i < 30; ++i)
- rte_delay_ms(delay);
-
- FOR_EACH_SLAVE(i, slave) {
- retval = rte_eth_bond_8023ad_ext_slowtx(
- test_params.bonded_port_id,
- slave->port_id, lacp_tx_buf[i]);
- TEST_ASSERT_SUCCESS(retval,
- "Slave should allow manual LACP xmit");
- }
-
- nb_pkts = bond_tx(NULL, 0);
- TEST_ASSERT_EQUAL(nb_pkts, 0, "Packets transmitted unexpectedly");
-
- FOR_EACH_SLAVE(i, slave) {
- nb_pkts = slave_get_pkts(slave, buf, RTE_DIM(buf));
- TEST_ASSERT_EQUAL(nb_pkts, 1, "found %u packets on slave %d\n",
- nb_pkts, i);
- slave_put_pkts(slave, buf, nb_pkts);
- }
-
- nb_pkts = bond_rx(buf, RTE_DIM(buf));
- free_pkts(buf, nb_pkts);
- TEST_ASSERT_EQUAL(nb_pkts, 0, "Packets received unexpectedly");
-
- /* wait for the periodic callback to run */
- for (i = 0; i < 30 && all_slaves_done == 0; ++i) {
- uint8_t s, total = 0;
-
- rte_delay_ms(delay);
- FOR_EACH_SLAVE(s, slave) {
- total += lacpdu_rx_count[slave->port_id];
- }
-
- if (total >= SLAVE_COUNT)
- all_slaves_done = 1;
- }
-
- FOR_EACH_SLAVE(i, slave) {
- TEST_ASSERT_EQUAL(lacpdu_rx_count[slave->port_id], 1,
- "Slave port %u should have received 1 lacpdu (count=%u)",
- slave->port_id,
- lacpdu_rx_count[slave->port_id]);
- }
-
- retval = remove_slaves_and_stop_bonded_device();
- TEST_ASSERT_SUCCESS(retval, "Test cleanup failed.");
-
- return TEST_SUCCESS;
-}
-
-static int
-check_environment(void)
-{
- struct slave_conf *port;
- uint8_t i, env_state;
- uint8_t slaves[RTE_DIM(test_params.slave_ports)];
- int slaves_count;
-
- env_state = 0;
- FOR_EACH_PORT(i, port) {
- if (rte_ring_count(port->rx_queue) != 0)
- env_state |= 0x01;
-
- if (rte_ring_count(port->tx_queue) != 0)
- env_state |= 0x02;
-
- if (port->bonded != 0)
- env_state |= 0x04;
-
- if (port->lacp_parnter_state != 0)
- env_state |= 0x08;
-
- if (env_state != 0)
- break;
- }
-
- slaves_count = rte_eth_bond_slaves_get(test_params.bonded_port_id,
- slaves, RTE_DIM(slaves));
-
- if (slaves_count != 0)
- env_state |= 0x10;
-
- TEST_ASSERT_EQUAL(env_state, 0,
- "Environment not clean (port %u):%s%s%s%s%s",
- port->port_id,
- env_state & 0x01 ? " slave rx queue not clean" : "",
- env_state & 0x02 ? " slave tx queue not clean" : "",
- env_state & 0x04 ? " port marked as enslaved" : "",
- env_state & 0x80 ? " slave state is not reset" : "",
- env_state & 0x10 ? " slave count not equal 0" : ".");
-
-
- return TEST_SUCCESS;
-}
-
-static int
-test_mode4_executor(int (*test_func)(void))
-{
- struct slave_conf *port;
- int test_result;
- uint8_t i;
- void *pkt;
-
- /* Check if environment is clean. Fail to launch a test if there was
- * a critical error before that prevented to reset environment. */
- TEST_ASSERT_SUCCESS(check_environment(),
- "Refusing to launch test in dirty environment.");
-
- RTE_VERIFY(test_func != NULL);
- test_result = (*test_func)();
-
- /* If test succeed check if environment wast left in good condition. */
- if (test_result == TEST_SUCCESS)
- test_result = check_environment();
-
- /* Reset environment in case test failed to do that. */
- if (test_result != TEST_SUCCESS) {
- TEST_ASSERT_SUCCESS(remove_slaves_and_stop_bonded_device(),
- "Failed to stop bonded device");
-
- FOR_EACH_PORT(i, port) {
- while (rte_ring_count(port->rx_queue) != 0) {
- if (rte_ring_dequeue(port->rx_queue, &pkt) == 0)
- rte_pktmbuf_free(pkt);
- }
-
- while (rte_ring_count(port->tx_queue) != 0) {
- if (rte_ring_dequeue(port->tx_queue, &pkt) == 0)
- rte_pktmbuf_free(pkt);
- }
- }
- }
-
- return test_result;
-}
-
-static int
-test_mode4_lacp_wrapper(void)
-{
- return test_mode4_executor(&test_mode4_lacp);
-}
-
-static int
-test_mode4_marker_wrapper(void)
-{
- return test_mode4_executor(&test_mode4_marker);
-}
-
-static int
-test_mode4_rx_wrapper(void)
-{
- return test_mode4_executor(&test_mode4_rx);
-}
-
-static int
-test_mode4_tx_burst_wrapper(void)
-{
- return test_mode4_executor(&test_mode4_tx_burst);
-}
-
-static int
-test_mode4_expired_wrapper(void)
-{
- return test_mode4_executor(&test_mode4_expired);
-}
-
-static int
-test_mode4_ext_ctrl_wrapper(void)
-{
- return test_mode4_executor(&test_mode4_ext_ctrl);
-}
-
-static int
-test_mode4_ext_lacp_wrapper(void)
-{
- return test_mode4_executor(&test_mode4_ext_lacp);
-}
-
-static struct unit_test_suite link_bonding_mode4_test_suite = {
- .suite_name = "Link Bonding mode 4 Unit Test Suite",
- .setup = test_setup,
- .teardown = testsuite_teardown,
- .unit_test_cases = {
- TEST_CASE_NAMED("test_mode4_lacp", test_mode4_lacp_wrapper),
- TEST_CASE_NAMED("test_mode4_rx", test_mode4_rx_wrapper),
- TEST_CASE_NAMED("test_mode4_tx_burst", test_mode4_tx_burst_wrapper),
- TEST_CASE_NAMED("test_mode4_marker", test_mode4_marker_wrapper),
- TEST_CASE_NAMED("test_mode4_expired", test_mode4_expired_wrapper),
- TEST_CASE_NAMED("test_mode4_ext_ctrl",
- test_mode4_ext_ctrl_wrapper),
- TEST_CASE_NAMED("test_mode4_ext_lacp",
- test_mode4_ext_lacp_wrapper),
-
- TEST_CASES_END() /**< NULL terminate unit test array */
- }
-};
-
-static int
-test_link_bonding_mode4(void)
-{
- return unit_test_suite_runner(&link_bonding_mode4_test_suite);
-}
-
-REGISTER_TEST_COMMAND(link_bonding_mode4_autotest, test_link_bonding_mode4);
diff --git a/app/test/test_link_bonding_rssconf.c b/app/test/test_link_bonding_rssconf.c
deleted file mode 100644
index 34f1c166..00000000
--- a/app/test/test_link_bonding_rssconf.c
+++ /dev/null
@@ -1,673 +0,0 @@
-/*-
- * BSD LICENSE
- *
- * Copyright(c) 2015 Intel Corporation. All rights reserved.
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * * Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * * Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in
- * the documentation and/or other materials provided with the
- * distribution.
- * * Neither the name of Intel Corporation nor the names of its
- * contributors may be used to endorse or promote products derived
- * from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
- * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
- * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#include <string.h>
-#include <stdarg.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <stdint.h>
-#include <inttypes.h>
-#include <errno.h>
-#include <rte_cycles.h>
-#include <sys/queue.h>
-
-#include <rte_byteorder.h>
-#include <rte_common.h>
-#include <rte_debug.h>
-#include <rte_ethdev.h>
-#include <rte_log.h>
-#include <rte_lcore.h>
-#include <rte_memory.h>
-
-#include <rte_string_fns.h>
-#include <rte_errno.h>
-#include <rte_eth_bond.h>
-#include <rte_eth_null.h>
-
-#include "test.h"
-
-#define SLAVE_COUNT (4)
-
-#define RXTX_RING_SIZE 1024
-#define RXTX_QUEUE_COUNT 4
-
-#define BONDED_DEV_NAME ("rssconf_bond_dev")
-
-#define SLAVE_DEV_NAME_FMT ("rssconf_slave%d")
-#define SLAVE_RXTX_QUEUE_FMT ("rssconf_slave%d_q%d")
-
-#define NUM_MBUFS 8191
-#define MBUF_SIZE (1600 + sizeof(struct rte_mbuf) + RTE_PKTMBUF_HEADROOM)
-#define MBUF_CACHE_SIZE 250
-#define BURST_SIZE 32
-
-#define INVALID_SOCKET_ID (-1)
-#define INVALID_PORT_ID (0xFF)
-#define INVALID_BONDING_MODE (-1)
-
-struct slave_conf {
- uint8_t port_id;
- struct rte_eth_dev_info dev_info;
-
- struct rte_eth_rss_conf rss_conf;
- uint8_t rss_key[40];
- struct rte_eth_rss_reta_entry64 reta_conf[512 / RTE_RETA_GROUP_SIZE];
-
- uint8_t is_slave;
- struct rte_ring *rxtx_queue[RXTX_QUEUE_COUNT];
-};
-
-struct link_bonding_rssconf_unittest_params {
- uint8_t bond_port_id;
- struct rte_eth_dev_info bond_dev_info;
- struct rte_eth_rss_reta_entry64 bond_reta_conf[512 / RTE_RETA_GROUP_SIZE];
- struct slave_conf slave_ports[SLAVE_COUNT];
-
- struct rte_mempool *mbuf_pool;
-};
-
-static struct link_bonding_rssconf_unittest_params test_params = {
- .bond_port_id = INVALID_PORT_ID,
- .slave_ports = {
- [0 ... SLAVE_COUNT - 1] = { .port_id = INVALID_PORT_ID, .is_slave = 0}
- },
- .mbuf_pool = NULL,
-};
-
-/**
- * Default port configuration with RSS turned off
- */
-static struct rte_eth_conf default_pmd_conf = {
- .rxmode = {
- .mq_mode = ETH_MQ_RX_NONE,
- .max_rx_pkt_len = ETHER_MAX_LEN,
- .split_hdr_size = 0,
- .header_split = 0, /**< Header Split disabled */
- .hw_ip_checksum = 0, /**< IP checksum offload enabled */
- .hw_vlan_filter = 0, /**< VLAN filtering disabled */
- .jumbo_frame = 0, /**< Jumbo Frame Support disabled */
- .hw_strip_crc = 0, /**< CRC stripped by hardware */
- },
- .txmode = {
- .mq_mode = ETH_MQ_TX_NONE,
- },
- .lpbk_mode = 0,
-};
-
-static struct rte_eth_conf rss_pmd_conf = {
- .rxmode = {
- .mq_mode = ETH_MQ_RX_RSS,
- .max_rx_pkt_len = ETHER_MAX_LEN,
- .split_hdr_size = 0,
- .header_split = 0, /**< Header Split disabled */
- .hw_ip_checksum = 0, /**< IP checksum offload enabled */
- .hw_vlan_filter = 0, /**< VLAN filtering disabled */
- .jumbo_frame = 0, /**< Jumbo Frame Support disabled */
- .hw_strip_crc = 0, /**< CRC stripped by hardware */
- },
- .txmode = {
- .mq_mode = ETH_MQ_TX_NONE,
- },
- .rx_adv_conf = {
- .rss_conf = {
- .rss_key = NULL,
- .rss_hf = ETH_RSS_IPV6,
- },
- },
- .lpbk_mode = 0,
-};
-
-#define FOR_EACH(_i, _item, _array, _size) \
- for (_i = 0, _item = &_array[0]; _i < _size && (_item = &_array[_i]); _i++)
-
-/* Macro for iterating over every port that can be used as a slave
- * in this test.
- * _i variable used as an index in test_params->slave_ports
- * _slave pointer to &test_params->slave_ports[_idx]
- */
-#define FOR_EACH_PORT(_i, _port) \
- FOR_EACH(_i, _port, test_params.slave_ports, \
- RTE_DIM(test_params.slave_ports))
-
-static int
-configure_ethdev(uint8_t port_id, struct rte_eth_conf *eth_conf, uint8_t start)
-{
- int rxq, txq;
-
- TEST_ASSERT(rte_eth_dev_configure(port_id, RXTX_QUEUE_COUNT,
- RXTX_QUEUE_COUNT, eth_conf) == 0, "Failed to configure device %u",
- port_id);
-
- for (rxq = 0; rxq < RXTX_QUEUE_COUNT; rxq++) {
- TEST_ASSERT(rte_eth_rx_queue_setup(port_id, rxq, RXTX_RING_SIZE,
- rte_eth_dev_socket_id(port_id), NULL,
- test_params.mbuf_pool) == 0, "Failed to setup rx queue.");
- }
-
- for (txq = 0; txq < RXTX_QUEUE_COUNT; txq++) {
- TEST_ASSERT(rte_eth_tx_queue_setup(port_id, txq, RXTX_RING_SIZE,
- rte_eth_dev_socket_id(port_id), NULL) == 0,
- "Failed to setup tx queue.");
- }
-
- if (start) {
- TEST_ASSERT(rte_eth_dev_start(port_id) == 0,
- "Failed to start device (%d).", port_id);
- }
-
- return 0;
-}
-
-/**
- * Remove all slaves from bonding
- */
-static int
-remove_slaves(void)
-{
- unsigned n;
- struct slave_conf *port;
-
- FOR_EACH_PORT(n, port) {
- port = &test_params.slave_ports[n];
- if (port->is_slave) {
- TEST_ASSERT_SUCCESS(rte_eth_bond_slave_remove(
- test_params.bond_port_id, port->port_id),
- "Cannot remove slave %d from bonding", port->port_id);
- port->is_slave = 0;
- }
- }
-
- return 0;
-}
-
-static int
-remove_slaves_and_stop_bonded_device(void)
-{
- TEST_ASSERT_SUCCESS(remove_slaves(), "Removing slaves");
- rte_eth_dev_stop(test_params.bond_port_id);
- return TEST_SUCCESS;
-}
-
-/**
- * Add all slaves to bonding
- */
-static int
-bond_slaves(void)
-{
- unsigned n;
- struct slave_conf *port;
-
- FOR_EACH_PORT(n, port) {
- port = &test_params.slave_ports[n];
- if (!port->is_slave) {
- TEST_ASSERT_SUCCESS(rte_eth_bond_slave_add(test_params.bond_port_id,
- port->port_id), "Cannot attach slave %d to the bonding",
- port->port_id);
- port->is_slave = 1;
- }
- }
-
- return 0;
-}
-
-/**
- * Set all RETA values in port_id to value
- */
-static int
-reta_set(uint8_t port_id, uint8_t value, int reta_size)
-{
- struct rte_eth_rss_reta_entry64 reta_conf[512/RTE_RETA_GROUP_SIZE];
- int i, j;
-
- for (i = 0; i < reta_size / RTE_RETA_GROUP_SIZE; i++) {
- /* select all fields to set */
- reta_conf[i].mask = ~0LL;
- for (j = 0; j < RTE_RETA_GROUP_SIZE; j++)
- reta_conf[i].reta[j] = value;
- }
-
- return rte_eth_dev_rss_reta_update(port_id, reta_conf, reta_size);
-}
-
-/**
- * Check if slaves RETA is synchronized with bonding port. Returns 1 if slave
- * port is synced with bonding port.
- */
-static int
-reta_check_synced(struct slave_conf *port)
-{
- unsigned i;
-
- for (i = 0; i < test_params.bond_dev_info.reta_size;
- i++) {
-
- int index = i / RTE_RETA_GROUP_SIZE;
- int shift = i % RTE_RETA_GROUP_SIZE;
-
- if (port->reta_conf[index].reta[shift] !=
- test_params.bond_reta_conf[index].reta[shift])
- return 0;
-
- }
-
- return 1;
-}
-
-/**
- * Fetch bonding ports RETA
- */
-static int
-bond_reta_fetch(void) {
- unsigned j;
-
- for (j = 0; j < test_params.bond_dev_info.reta_size / RTE_RETA_GROUP_SIZE;
- j++)
- test_params.bond_reta_conf[j].mask = ~0LL;
-
- TEST_ASSERT_SUCCESS(rte_eth_dev_rss_reta_query(test_params.bond_port_id,
- test_params.bond_reta_conf, test_params.bond_dev_info.reta_size),
- "Cannot take bonding ports RSS configuration");
- return 0;
-}
-
-/**
- * Fetch slaves RETA
- */
-static int
-slave_reta_fetch(struct slave_conf *port) {
- unsigned j;
-
- for (j = 0; j < port->dev_info.reta_size / RTE_RETA_GROUP_SIZE; j++)
- port->reta_conf[j].mask = ~0LL;
-
- TEST_ASSERT_SUCCESS(rte_eth_dev_rss_reta_query(port->port_id,
- port->reta_conf, port->dev_info.reta_size),
- "Cannot take bonding ports RSS configuration");
- return 0;
-}
-
-/**
- * Remove and add slave to check if slaves configuration is synced with
- * the bonding ports values after adding new slave.
- */
-static int
-slave_remove_and_add(void)
-{
- struct slave_conf *port = &(test_params.slave_ports[0]);
-
- /* 1. Remove first slave from bonding */
- TEST_ASSERT_SUCCESS(rte_eth_bond_slave_remove(test_params.bond_port_id,
- port->port_id), "Cannot remove slave #d from bonding");
-
- /* 2. Change removed (ex-)slave and bonding configuration to different
- * values
- */
- reta_set(test_params.bond_port_id, 1, test_params.bond_dev_info.reta_size);
- bond_reta_fetch();
-
- reta_set(port->port_id, 2, port->dev_info.reta_size);
- slave_reta_fetch(port);
-
- TEST_ASSERT(reta_check_synced(port) == 0,
- "Removed slave didn't should be synchronized with bonding port");
-
- /* 3. Add (ex-)slave and check if configuration changed*/
- TEST_ASSERT_SUCCESS(rte_eth_bond_slave_add(test_params.bond_port_id,
- port->port_id), "Cannot add slave");
-
- bond_reta_fetch();
- slave_reta_fetch(port);
-
- return reta_check_synced(port);
-}
-
-/**
- * Test configuration propagation over slaves.
- */
-static int
-test_propagate(void)
-{
- unsigned i;
- uint8_t n;
- struct slave_conf *port;
- uint8_t bond_rss_key[40];
- struct rte_eth_rss_conf bond_rss_conf;
-
- int retval = 0;
- uint64_t rss_hf = 0;
- uint64_t default_rss_hf = 0;
-
- rte_eth_dev_info_get(test_params.bond_port_id, &test_params.bond_dev_info);
-
- /*
- * Test hash function propagation
- */
- for (i = 0; i < sizeof(test_params.bond_dev_info.flow_type_rss_offloads)*8;
- i++) {
-
- rss_hf = test_params.bond_dev_info.flow_type_rss_offloads & (1<<i);
- if (rss_hf) {
- bond_rss_conf.rss_key = NULL;
- bond_rss_conf.rss_hf = rss_hf;
-
- retval = rte_eth_dev_rss_hash_update(test_params.bond_port_id,
- &bond_rss_conf);
- TEST_ASSERT_SUCCESS(retval, "Cannot set slaves hash function");
-
- FOR_EACH_PORT(n, port) {
- port = &test_params.slave_ports[n];
-
- retval = rte_eth_dev_rss_hash_conf_get(port->port_id,
- &port->rss_conf);
- TEST_ASSERT_SUCCESS(retval,
- "Cannot take slaves RSS configuration");
-
- TEST_ASSERT(port->rss_conf.rss_hf == rss_hf,
- "Hash function not propagated for slave %d",
- port->port_id);
- }
-
- default_rss_hf = rss_hf;
- }
-
- }
-
- /*
- * Test key propagation
- */
- for (i = 1; i < 10; i++) {
-
- /* Set all keys to zero */
- FOR_EACH_PORT(n, port) {
- port = &test_params.slave_ports[n];
- memset(port->rss_conf.rss_key, 0, 40);
- retval = rte_eth_dev_rss_hash_update(port->port_id,
- &port->rss_conf);
- TEST_ASSERT_SUCCESS(retval, "Cannot set slaves RSS keys");
- }
-
- memset(bond_rss_key, i, sizeof(bond_rss_key));
- bond_rss_conf.rss_hf = default_rss_hf,
- bond_rss_conf.rss_key = bond_rss_key;
- bond_rss_conf.rss_key_len = 40;
-
- retval = rte_eth_dev_rss_hash_update(test_params.bond_port_id,
- &bond_rss_conf);
- TEST_ASSERT_SUCCESS(retval, "Cannot set bonded port RSS keys");
-
- FOR_EACH_PORT(n, port) {
- port = &test_params.slave_ports[n];
-
- retval = rte_eth_dev_rss_hash_conf_get(port->port_id,
- &(port->rss_conf));
-
- TEST_ASSERT_SUCCESS(retval,
- "Cannot take slaves RSS configuration");
-
- /* compare keys */
- retval = memcmp(port->rss_conf.rss_key, bond_rss_key,
- sizeof(bond_rss_key));
- TEST_ASSERT(retval == 0, "Key value not propagated for slave %d",
- port->port_id);
- }
- }
-
- /*
- * Test RETA propagation
- */
- for (i = 0; i < RXTX_QUEUE_COUNT; i++) {
-
- /* Set all keys to zero */
- FOR_EACH_PORT(n, port) {
- port = &test_params.slave_ports[n];
- retval = reta_set(port->port_id, (i + 1) % RXTX_QUEUE_COUNT,
- port->dev_info.reta_size);
- TEST_ASSERT_SUCCESS(retval, "Cannot set slaves RETA");
- }
-
- TEST_ASSERT_SUCCESS(reta_set(test_params.bond_port_id,
- i % RXTX_QUEUE_COUNT, test_params.bond_dev_info.reta_size),
- "Cannot set bonded port RETA");
-
- bond_reta_fetch();
-
- FOR_EACH_PORT(n, port) {
- port = &test_params.slave_ports[n];
-
- slave_reta_fetch(port);
- TEST_ASSERT(reta_check_synced(port) == 1, "RETAs inconsistent");
- }
- }
-
- return TEST_SUCCESS;
-}
-
-/**
- * Test propagation logic, when RX_RSS mq_mode is turned on for bonding port
- */
-static int
-test_rss(void)
-{
- /**
- * Configure bonding port in RSS mq mode
- */
- TEST_ASSERT_SUCCESS(configure_ethdev(test_params.bond_port_id,
- &rss_pmd_conf, 0), "Failed to configure bonding device\n");
-
- rte_eth_dev_info_get(test_params.bond_port_id, &test_params.bond_dev_info);
-
- TEST_ASSERT_SUCCESS(bond_slaves(), "Bonding slaves failed");
-
- TEST_ASSERT_SUCCESS(rte_eth_dev_start(test_params.bond_port_id),
- "Failed to start bonding port (%d).", test_params.bond_port_id);
-
- TEST_ASSERT_SUCCESS(test_propagate(), "Propagation test failed");
-
- TEST_ASSERT(slave_remove_and_add() == 1, "New slave should be synced");
-
- remove_slaves_and_stop_bonded_device();
-
- return TEST_SUCCESS;
-}
-
-/**
- * Test propagation logic, when RX_RSS mq_mode is turned off for bonding port
- */
-static int
-test_rss_lazy(void)
-{
- TEST_ASSERT_SUCCESS(configure_ethdev(test_params.bond_port_id,
- &default_pmd_conf, 0), "Failed to configure bonding device\n");
-
- rte_eth_dev_info_get(test_params.bond_port_id, &test_params.bond_dev_info);
-
- TEST_ASSERT_SUCCESS(bond_slaves(), "Bonding slaves failed");
-
- TEST_ASSERT_SUCCESS(rte_eth_dev_start(test_params.bond_port_id),
- "Failed to start bonding port (%d).", test_params.bond_port_id);
-
- TEST_ASSERT_SUCCESS(test_propagate(), "Propagation test failed");
-
- TEST_ASSERT(slave_remove_and_add() == 0, "New slave shouldn't be synced");
-
- remove_slaves_and_stop_bonded_device();
-
- return TEST_SUCCESS;
-}
-
-static int
-test_setup(void)
-{
- unsigned n;
- int retval;
- int port_id;
- char name[256];
- struct slave_conf *port;
-
- if (test_params.mbuf_pool == NULL) {
-
- test_params.mbuf_pool = rte_mempool_create("RSS_MBUF_POOL", NUM_MBUFS *
- SLAVE_COUNT, MBUF_SIZE, MBUF_CACHE_SIZE,
- sizeof(struct rte_pktmbuf_pool_private), rte_pktmbuf_pool_init,
- NULL, rte_pktmbuf_init, NULL, rte_socket_id(), 0);
-
- TEST_ASSERT(test_params.mbuf_pool != NULL,
- "rte_mempool_create failed\n");
- }
-
- /* Create / initialize ring eth devs. */
- FOR_EACH_PORT(n, port) {
- port = &test_params.slave_ports[n];
-
- port_id = rte_eth_dev_count();
- snprintf(name, sizeof(name), SLAVE_DEV_NAME_FMT, port_id);
-
- retval = eth_dev_null_create(name, 0, 64, 0);
- TEST_ASSERT_SUCCESS(retval, "Failed to create null device '%s'\n",
- name);
-
- port->port_id = port_id;
-
- port->rss_conf.rss_key = port->rss_key;
- port->rss_conf.rss_key_len = 40;
-
- retval = configure_ethdev(port->port_id, &default_pmd_conf, 0);
- TEST_ASSERT_SUCCESS(retval, "Failed to configure virtual ethdev %s\n",
- name);
-
- rte_eth_dev_info_get(port->port_id, &port->dev_info);
- }
-
- if (test_params.bond_port_id == INVALID_PORT_ID) {
- retval = rte_eth_bond_create(BONDED_DEV_NAME, 0, rte_socket_id());
-
- TEST_ASSERT(retval >= 0, "Failed to create bonded ethdev %s",
- BONDED_DEV_NAME);
-
- test_params.bond_port_id = retval;
-
- TEST_ASSERT_SUCCESS(configure_ethdev(test_params.bond_port_id,
- &default_pmd_conf, 0), "Failed to configure bonding device\n");
-
- rte_eth_dev_info_get(test_params.bond_port_id,
- &test_params.bond_dev_info);
- }
-
- return TEST_SUCCESS;
-}
-
-static void
-testsuite_teardown(void)
-{
- struct slave_conf *port;
- uint8_t i;
-
- /* Only stop ports.
- * Any cleanup/reset state is done when particular test is
- * started. */
-
- rte_eth_dev_stop(test_params.bond_port_id);
-
- FOR_EACH_PORT(i, port)
- rte_eth_dev_stop(port->port_id);
-}
-
-static int
-check_environment(void)
-{
- return TEST_SUCCESS;
-}
-
-static int
-test_rssconf_executor(int (*test_func)(void))
-{
- int test_result;
-
- /* Check if environment is clean. Fail to launch a test if there was
- * a critical error before that prevented to reset environment. */
- TEST_ASSERT_SUCCESS(check_environment(),
- "Refusing to launch test in dirty environment.");
-
- RTE_VERIFY(test_func != NULL);
- test_result = (*test_func)();
-
- /* If test succeed check if environment wast left in good condition. */
- if (test_result == TEST_SUCCESS)
- test_result = check_environment();
-
- /* Reset environment in case test failed to do that. */
- if (test_result != TEST_SUCCESS) {
- TEST_ASSERT_SUCCESS(remove_slaves_and_stop_bonded_device(),
- "Failed to stop bonded device");
- }
-
- return test_result;
-}
-
-static int
-test_setup_wrapper(void)
-{
- return test_rssconf_executor(&test_setup);
-}
-
-static int
-test_rss_wrapper(void)
-{
- return test_rssconf_executor(&test_rss);
-}
-
-static int
-test_rss_lazy_wrapper(void)
-{
- return test_rssconf_executor(&test_rss_lazy);
-}
-
-static struct unit_test_suite link_bonding_rssconf_test_suite = {
- .suite_name = "RSS Dynamic Configuration for Bonding Unit Test Suite",
- .teardown = testsuite_teardown,
- .unit_test_cases = {
- TEST_CASE_NAMED("test_setup", test_setup_wrapper),
- TEST_CASE_NAMED("test_rss", test_rss_wrapper),
- TEST_CASE_NAMED("test_rss_lazy", test_rss_lazy_wrapper),
-
- TEST_CASES_END()
- }
-};
-
-static int
-test_link_bonding_rssconf(void)
-{
- return unit_test_suite_runner(&link_bonding_rssconf_test_suite);
-}
-
-REGISTER_TEST_COMMAND(link_bonding_rssconf_autotest, test_link_bonding_rssconf);
diff --git a/app/test/test_logs.c b/app/test/test_logs.c
deleted file mode 100644
index 6985ddde..00000000
--- a/app/test/test_logs.c
+++ /dev/null
@@ -1,89 +0,0 @@
-/*-
- * BSD LICENSE
- *
- * Copyright(c) 2010-2014 Intel Corporation. All rights reserved.
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * * Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * * Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in
- * the documentation and/or other materials provided with the
- * distribution.
- * * Neither the name of Intel Corporation nor the names of its
- * contributors may be used to endorse or promote products derived
- * from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
- * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
- * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#include <stdio.h>
-#include <stdint.h>
-#include <stdarg.h>
-#include <sys/queue.h>
-
-#include <rte_log.h>
-#include <rte_memory.h>
-#include <rte_memzone.h>
-#include <rte_launch.h>
-#include <rte_eal.h>
-#include <rte_per_lcore.h>
-#include <rte_lcore.h>
-
-#include "test.h"
-
-#define RTE_LOGTYPE_TESTAPP1 RTE_LOGTYPE_USER1
-#define RTE_LOGTYPE_TESTAPP2 RTE_LOGTYPE_USER2
-
-/*
- * Logs
- * ====
- *
- * - Enable log types.
- * - Set log level.
- * - Send logs with different types and levels, some should not be displayed.
- */
-
-static int
-test_logs(void)
-{
- /* enable these logs type */
- rte_set_log_type(RTE_LOGTYPE_TESTAPP1, 1);
- rte_set_log_type(RTE_LOGTYPE_TESTAPP2, 1);
-
- /* log in error level */
- rte_set_log_level(RTE_LOG_ERR);
- RTE_LOG(ERR, TESTAPP1, "error message\n");
- RTE_LOG(CRIT, TESTAPP1, "critical message\n");
-
- /* log in critical level */
- rte_set_log_level(RTE_LOG_CRIT);
- RTE_LOG(ERR, TESTAPP2, "error message (not displayed)\n");
- RTE_LOG(CRIT, TESTAPP2, "critical message\n");
-
- /* disable one log type */
- rte_set_log_type(RTE_LOGTYPE_TESTAPP2, 0);
-
- /* log in error level */
- rte_set_log_level(RTE_LOG_ERR);
- RTE_LOG(ERR, TESTAPP1, "error message\n");
- RTE_LOG(ERR, TESTAPP2, "error message (not displayed)\n");
-
- return 0;
-}
-
-REGISTER_TEST_COMMAND(logs_autotest, test_logs);
diff --git a/app/test/test_lpm.c b/app/test/test_lpm.c
deleted file mode 100644
index 41ae80fe..00000000
--- a/app/test/test_lpm.c
+++ /dev/null
@@ -1,1319 +0,0 @@
-/*-
- * BSD LICENSE
- *
- * Copyright(c) 2010-2014 Intel Corporation. All rights reserved.
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * * Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * * Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in
- * the documentation and/or other materials provided with the
- * distribution.
- * * Neither the name of Intel Corporation nor the names of its
- * contributors may be used to endorse or promote products derived
- * from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
- * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
- * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#include <stdio.h>
-#include <stdint.h>
-#include <stdlib.h>
-
-#include <rte_ip.h>
-#include <rte_lpm.h>
-
-#include "test.h"
-#include "test_xmmt_ops.h"
-
-#define TEST_LPM_ASSERT(cond) do { \
- if (!(cond)) { \
- printf("Error at line %d: \n", __LINE__); \
- return -1; \
- } \
-} while(0)
-
-typedef int32_t (*rte_lpm_test)(void);
-
-static int32_t test0(void);
-static int32_t test1(void);
-static int32_t test2(void);
-static int32_t test3(void);
-static int32_t test4(void);
-static int32_t test5(void);
-static int32_t test6(void);
-static int32_t test7(void);
-static int32_t test8(void);
-static int32_t test9(void);
-static int32_t test10(void);
-static int32_t test11(void);
-static int32_t test12(void);
-static int32_t test13(void);
-static int32_t test14(void);
-static int32_t test15(void);
-static int32_t test16(void);
-static int32_t test17(void);
-static int32_t test18(void);
-
-rte_lpm_test tests[] = {
-/* Test Cases */
- test0,
- test1,
- test2,
- test3,
- test4,
- test5,
- test6,
- test7,
- test8,
- test9,
- test10,
- test11,
- test12,
- test13,
- test14,
- test15,
- test16,
- test17,
- test18
-};
-
-#define NUM_LPM_TESTS (sizeof(tests)/sizeof(tests[0]))
-#define MAX_DEPTH 32
-#define MAX_RULES 256
-#define NUMBER_TBL8S 256
-#define PASS 0
-
-/*
- * Check that rte_lpm_create fails gracefully for incorrect user input
- * arguments
- */
-int32_t
-test0(void)
-{
- struct rte_lpm *lpm = NULL;
- struct rte_lpm_config config;
-
- config.max_rules = MAX_RULES;
- config.number_tbl8s = NUMBER_TBL8S;
- config.flags = 0;
-
- /* rte_lpm_create: lpm name == NULL */
- lpm = rte_lpm_create(NULL, SOCKET_ID_ANY, &config);
- TEST_LPM_ASSERT(lpm == NULL);
-
- /* rte_lpm_create: max_rules = 0 */
- /* Note: __func__ inserts the function name, in this case "test0". */
- config.max_rules = 0;
- lpm = rte_lpm_create(__func__, SOCKET_ID_ANY, &config);
- TEST_LPM_ASSERT(lpm == NULL);
-
- /* socket_id < -1 is invalid */
- config.max_rules = MAX_RULES;
- lpm = rte_lpm_create(__func__, -2, &config);
- TEST_LPM_ASSERT(lpm == NULL);
-
- return PASS;
-}
-
-/*
- * Create lpm table then delete lpm table 100 times
- * Use a slightly different rules size each time
- * */
-int32_t
-test1(void)
-{
- struct rte_lpm *lpm = NULL;
- struct rte_lpm_config config;
-
- config.number_tbl8s = NUMBER_TBL8S;
- config.flags = 0;
- int32_t i;
-
- /* rte_lpm_free: Free NULL */
- for (i = 0; i < 100; i++) {
- config.max_rules = MAX_RULES - i;
- lpm = rte_lpm_create(__func__, SOCKET_ID_ANY, &config);
- TEST_LPM_ASSERT(lpm != NULL);
-
- rte_lpm_free(lpm);
- }
-
- /* Can not test free so return success */
- return PASS;
-}
-
-/*
- * Call rte_lpm_free for NULL pointer user input. Note: free has no return and
- * therefore it is impossible to check for failure but this test is added to
- * increase function coverage metrics and to validate that freeing null does
- * not crash.
- */
-int32_t
-test2(void)
-{
- struct rte_lpm *lpm = NULL;
- struct rte_lpm_config config;
-
- config.max_rules = MAX_RULES;
- config.number_tbl8s = NUMBER_TBL8S;
- config.flags = 0;
-
- lpm = rte_lpm_create(__func__, SOCKET_ID_ANY, &config);
- TEST_LPM_ASSERT(lpm != NULL);
-
- rte_lpm_free(lpm);
- rte_lpm_free(NULL);
- return PASS;
-}
-
-/*
- * Check that rte_lpm_add fails gracefully for incorrect user input arguments
- */
-int32_t
-test3(void)
-{
- struct rte_lpm *lpm = NULL;
- struct rte_lpm_config config;
-
- config.max_rules = MAX_RULES;
- config.number_tbl8s = NUMBER_TBL8S;
- config.flags = 0;
- uint32_t ip = IPv4(0, 0, 0, 0), next_hop = 100;
- uint8_t depth = 24;
- int32_t status = 0;
-
- /* rte_lpm_add: lpm == NULL */
- status = rte_lpm_add(NULL, ip, depth, next_hop);
- TEST_LPM_ASSERT(status < 0);
-
- /*Create vaild lpm to use in rest of test. */
- lpm = rte_lpm_create(__func__, SOCKET_ID_ANY, &config);
- TEST_LPM_ASSERT(lpm != NULL);
-
- /* rte_lpm_add: depth < 1 */
- status = rte_lpm_add(lpm, ip, 0, next_hop);
- TEST_LPM_ASSERT(status < 0);
-
- /* rte_lpm_add: depth > MAX_DEPTH */
- status = rte_lpm_add(lpm, ip, (MAX_DEPTH + 1), next_hop);
- TEST_LPM_ASSERT(status < 0);
-
- rte_lpm_free(lpm);
-
- return PASS;
-}
-
-/*
- * Check that rte_lpm_delete fails gracefully for incorrect user input
- * arguments
- */
-int32_t
-test4(void)
-{
- struct rte_lpm *lpm = NULL;
- struct rte_lpm_config config;
-
- config.max_rules = MAX_RULES;
- config.number_tbl8s = NUMBER_TBL8S;
- config.flags = 0;
- uint32_t ip = IPv4(0, 0, 0, 0);
- uint8_t depth = 24;
- int32_t status = 0;
-
- /* rte_lpm_delete: lpm == NULL */
- status = rte_lpm_delete(NULL, ip, depth);
- TEST_LPM_ASSERT(status < 0);
-
- /*Create vaild lpm to use in rest of test. */
- lpm = rte_lpm_create(__func__, SOCKET_ID_ANY, &config);
- TEST_LPM_ASSERT(lpm != NULL);
-
- /* rte_lpm_delete: depth < 1 */
- status = rte_lpm_delete(lpm, ip, 0);
- TEST_LPM_ASSERT(status < 0);
-
- /* rte_lpm_delete: depth > MAX_DEPTH */
- status = rte_lpm_delete(lpm, ip, (MAX_DEPTH + 1));
- TEST_LPM_ASSERT(status < 0);
-
- rte_lpm_free(lpm);
-
- return PASS;
-}
-
-/*
- * Check that rte_lpm_lookup fails gracefully for incorrect user input
- * arguments
- */
-int32_t
-test5(void)
-{
-#if defined(RTE_LIBRTE_LPM_DEBUG)
- struct rte_lpm *lpm = NULL;
- struct rte_lpm_config config;
-
- config.max_rules = MAX_RULES;
- config.number_tbl8s = NUMBER_TBL8S;
- config.flags = 0;
- uint32_t ip = IPv4(0, 0, 0, 0), next_hop_return = 0;
- int32_t status = 0;
-
- /* rte_lpm_lookup: lpm == NULL */
- status = rte_lpm_lookup(NULL, ip, &next_hop_return);
- TEST_LPM_ASSERT(status < 0);
-
- /*Create vaild lpm to use in rest of test. */
- lpm = rte_lpm_create(__func__, SOCKET_ID_ANY, &config);
- TEST_LPM_ASSERT(lpm != NULL);
-
- /* rte_lpm_lookup: depth < 1 */
- status = rte_lpm_lookup(lpm, ip, NULL);
- TEST_LPM_ASSERT(status < 0);
-
- rte_lpm_free(lpm);
-#endif
- return PASS;
-}
-
-
-
-/*
- * Call add, lookup and delete for a single rule with depth <= 24
- */
-int32_t
-test6(void)
-{
- struct rte_lpm *lpm = NULL;
- struct rte_lpm_config config;
-
- config.max_rules = MAX_RULES;
- config.number_tbl8s = NUMBER_TBL8S;
- config.flags = 0;
- uint32_t ip = IPv4(0, 0, 0, 0), next_hop_add = 100, next_hop_return = 0;
- uint8_t depth = 24;
- int32_t status = 0;
-
- lpm = rte_lpm_create(__func__, SOCKET_ID_ANY, &config);
- TEST_LPM_ASSERT(lpm != NULL);
-
- status = rte_lpm_add(lpm, ip, depth, next_hop_add);
- TEST_LPM_ASSERT(status == 0);
-
- status = rte_lpm_lookup(lpm, ip, &next_hop_return);
- TEST_LPM_ASSERT((status == 0) && (next_hop_return == next_hop_add));
-
- status = rte_lpm_delete(lpm, ip, depth);
- TEST_LPM_ASSERT(status == 0);
-
- status = rte_lpm_lookup(lpm, ip, &next_hop_return);
- TEST_LPM_ASSERT(status == -ENOENT);
-
- rte_lpm_free(lpm);
-
- return PASS;
-}
-
-/*
- * Call add, lookup and delete for a single rule with depth > 24
- */
-
-int32_t
-test7(void)
-{
- xmm_t ipx4;
- uint32_t hop[4];
- struct rte_lpm *lpm = NULL;
- struct rte_lpm_config config;
-
- config.max_rules = MAX_RULES;
- config.number_tbl8s = NUMBER_TBL8S;
- config.flags = 0;
- uint32_t ip = IPv4(0, 0, 0, 0), next_hop_add = 100, next_hop_return = 0;
- uint8_t depth = 32;
- int32_t status = 0;
-
- lpm = rte_lpm_create(__func__, SOCKET_ID_ANY, &config);
- TEST_LPM_ASSERT(lpm != NULL);
-
- status = rte_lpm_add(lpm, ip, depth, next_hop_add);
- TEST_LPM_ASSERT(status == 0);
-
- status = rte_lpm_lookup(lpm, ip, &next_hop_return);
- TEST_LPM_ASSERT((status == 0) && (next_hop_return == next_hop_add));
-
- ipx4 = vect_set_epi32(ip, ip + 0x100, ip - 0x100, ip);
- rte_lpm_lookupx4(lpm, ipx4, hop, UINT32_MAX);
- TEST_LPM_ASSERT(hop[0] == next_hop_add);
- TEST_LPM_ASSERT(hop[1] == UINT32_MAX);
- TEST_LPM_ASSERT(hop[2] == UINT32_MAX);
- TEST_LPM_ASSERT(hop[3] == next_hop_add);
-
- status = rte_lpm_delete(lpm, ip, depth);
- TEST_LPM_ASSERT(status == 0);
-
- status = rte_lpm_lookup(lpm, ip, &next_hop_return);
- TEST_LPM_ASSERT(status == -ENOENT);
-
- rte_lpm_free(lpm);
-
- return PASS;
-}
-
-/*
- * Use rte_lpm_add to add rules which effect only the second half of the lpm
- * table. Use all possible depths ranging from 1..32. Set the next hop = to the
- * depth. Check lookup hit for on every add and check for lookup miss on the
- * first half of the lpm table after each add. Finally delete all rules going
- * backwards (i.e. from depth = 32 ..1) and carry out a lookup after each
- * delete. The lookup should return the next_hop_add value related to the
- * previous depth value (i.e. depth -1).
- */
-int32_t
-test8(void)
-{
- xmm_t ipx4;
- uint32_t hop[4];
- struct rte_lpm *lpm = NULL;
- struct rte_lpm_config config;
-
- config.max_rules = MAX_RULES;
- config.number_tbl8s = NUMBER_TBL8S;
- config.flags = 0;
- uint32_t ip1 = IPv4(127, 255, 255, 255), ip2 = IPv4(128, 0, 0, 0);
- uint32_t next_hop_add, next_hop_return;
- uint8_t depth;
- int32_t status = 0;
-
- lpm = rte_lpm_create(__func__, SOCKET_ID_ANY, &config);
- TEST_LPM_ASSERT(lpm != NULL);
-
- /* Loop with rte_lpm_add. */
- for (depth = 1; depth <= 32; depth++) {
- /* Let the next_hop_add value = depth. Just for change. */
- next_hop_add = depth;
-
- status = rte_lpm_add(lpm, ip2, depth, next_hop_add);
- TEST_LPM_ASSERT(status == 0);
-
- /* Check IP in first half of tbl24 which should be empty. */
- status = rte_lpm_lookup(lpm, ip1, &next_hop_return);
- TEST_LPM_ASSERT(status == -ENOENT);
-
- status = rte_lpm_lookup(lpm, ip2, &next_hop_return);
- TEST_LPM_ASSERT((status == 0) &&
- (next_hop_return == next_hop_add));
-
- ipx4 = vect_set_epi32(ip2, ip1, ip2, ip1);
- rte_lpm_lookupx4(lpm, ipx4, hop, UINT32_MAX);
- TEST_LPM_ASSERT(hop[0] == UINT32_MAX);
- TEST_LPM_ASSERT(hop[1] == next_hop_add);
- TEST_LPM_ASSERT(hop[2] == UINT32_MAX);
- TEST_LPM_ASSERT(hop[3] == next_hop_add);
- }
-
- /* Loop with rte_lpm_delete. */
- for (depth = 32; depth >= 1; depth--) {
- next_hop_add = (uint8_t) (depth - 1);
-
- status = rte_lpm_delete(lpm, ip2, depth);
- TEST_LPM_ASSERT(status == 0);
-
- status = rte_lpm_lookup(lpm, ip2, &next_hop_return);
-
- if (depth != 1) {
- TEST_LPM_ASSERT((status == 0) &&
- (next_hop_return == next_hop_add));
- } else {
- TEST_LPM_ASSERT(status == -ENOENT);
- }
-
- status = rte_lpm_lookup(lpm, ip1, &next_hop_return);
- TEST_LPM_ASSERT(status == -ENOENT);
-
- ipx4 = vect_set_epi32(ip1, ip1, ip2, ip2);
- rte_lpm_lookupx4(lpm, ipx4, hop, UINT32_MAX);
- if (depth != 1) {
- TEST_LPM_ASSERT(hop[0] == next_hop_add);
- TEST_LPM_ASSERT(hop[1] == next_hop_add);
- } else {
- TEST_LPM_ASSERT(hop[0] == UINT32_MAX);
- TEST_LPM_ASSERT(hop[1] == UINT32_MAX);
- }
- TEST_LPM_ASSERT(hop[2] == UINT32_MAX);
- TEST_LPM_ASSERT(hop[3] == UINT32_MAX);
- }
-
- rte_lpm_free(lpm);
-
- return PASS;
-}
-
-/*
- * - Add & lookup to hit invalid TBL24 entry
- * - Add & lookup to hit valid TBL24 entry not extended
- * - Add & lookup to hit valid extended TBL24 entry with invalid TBL8 entry
- * - Add & lookup to hit valid extended TBL24 entry with valid TBL8 entry
- *
- */
-int32_t
-test9(void)
-{
- struct rte_lpm *lpm = NULL;
- struct rte_lpm_config config;
-
- config.max_rules = MAX_RULES;
- config.number_tbl8s = NUMBER_TBL8S;
- config.flags = 0;
- uint32_t ip, ip_1, ip_2;
- uint8_t depth, depth_1, depth_2;
- uint32_t next_hop_add, next_hop_add_1, next_hop_add_2, next_hop_return;
- int32_t status = 0;
-
- /* Add & lookup to hit invalid TBL24 entry */
- ip = IPv4(128, 0, 0, 0);
- depth = 24;
- next_hop_add = 100;
-
- lpm = rte_lpm_create(__func__, SOCKET_ID_ANY, &config);
- TEST_LPM_ASSERT(lpm != NULL);
-
- status = rte_lpm_add(lpm, ip, depth, next_hop_add);
- TEST_LPM_ASSERT(status == 0);
-
- status = rte_lpm_lookup(lpm, ip, &next_hop_return);
- TEST_LPM_ASSERT((status == 0) && (next_hop_return == next_hop_add));
-
- status = rte_lpm_delete(lpm, ip, depth);
- TEST_LPM_ASSERT(status == 0);
-
- status = rte_lpm_lookup(lpm, ip, &next_hop_return);
- TEST_LPM_ASSERT(status == -ENOENT);
-
- rte_lpm_delete_all(lpm);
-
- /* Add & lookup to hit valid TBL24 entry not extended */
- ip = IPv4(128, 0, 0, 0);
- depth = 23;
- next_hop_add = 100;
-
- status = rte_lpm_add(lpm, ip, depth, next_hop_add);
- TEST_LPM_ASSERT(status == 0);
-
- status = rte_lpm_lookup(lpm, ip, &next_hop_return);
- TEST_LPM_ASSERT((status == 0) && (next_hop_return == next_hop_add));
-
- depth = 24;
- next_hop_add = 101;
-
- status = rte_lpm_add(lpm, ip, depth, next_hop_add);
- TEST_LPM_ASSERT(status == 0);
-
- status = rte_lpm_lookup(lpm, ip, &next_hop_return);
- TEST_LPM_ASSERT((status == 0) && (next_hop_return == next_hop_add));
-
- depth = 24;
-
- status = rte_lpm_delete(lpm, ip, depth);
- TEST_LPM_ASSERT(status == 0);
-
- depth = 23;
-
- status = rte_lpm_delete(lpm, ip, depth);
- TEST_LPM_ASSERT(status == 0);
-
- status = rte_lpm_lookup(lpm, ip, &next_hop_return);
- TEST_LPM_ASSERT(status == -ENOENT);
-
- rte_lpm_delete_all(lpm);
-
- /* Add & lookup to hit valid extended TBL24 entry with invalid TBL8
- * entry */
- ip = IPv4(128, 0, 0, 0);
- depth = 32;
- next_hop_add = 100;
-
- status = rte_lpm_add(lpm, ip, depth, next_hop_add);
- TEST_LPM_ASSERT(status == 0);
-
- status = rte_lpm_lookup(lpm, ip, &next_hop_return);
- TEST_LPM_ASSERT((status == 0) && (next_hop_return == next_hop_add));
-
- ip = IPv4(128, 0, 0, 5);
- depth = 32;
- next_hop_add = 101;
-
- status = rte_lpm_add(lpm, ip, depth, next_hop_add);
- TEST_LPM_ASSERT(status == 0);
-
- status = rte_lpm_lookup(lpm, ip, &next_hop_return);
- TEST_LPM_ASSERT((status == 0) && (next_hop_return == next_hop_add));
-
- status = rte_lpm_delete(lpm, ip, depth);
- TEST_LPM_ASSERT(status == 0);
-
- status = rte_lpm_lookup(lpm, ip, &next_hop_return);
- TEST_LPM_ASSERT(status == -ENOENT);
-
- ip = IPv4(128, 0, 0, 0);
- depth = 32;
- next_hop_add = 100;
-
- status = rte_lpm_lookup(lpm, ip, &next_hop_return);
- TEST_LPM_ASSERT((status == 0) && (next_hop_return == next_hop_add));
-
- status = rte_lpm_delete(lpm, ip, depth);
- TEST_LPM_ASSERT(status == 0);
-
- status = rte_lpm_lookup(lpm, ip, &next_hop_return);
- TEST_LPM_ASSERT(status == -ENOENT);
-
- rte_lpm_delete_all(lpm);
-
- /* Add & lookup to hit valid extended TBL24 entry with valid TBL8
- * entry */
- ip_1 = IPv4(128, 0, 0, 0);
- depth_1 = 25;
- next_hop_add_1 = 101;
-
- ip_2 = IPv4(128, 0, 0, 5);
- depth_2 = 32;
- next_hop_add_2 = 102;
-
- next_hop_return = 0;
-
- status = rte_lpm_add(lpm, ip_1, depth_1, next_hop_add_1);
- TEST_LPM_ASSERT(status == 0);
-
- status = rte_lpm_lookup(lpm, ip_1, &next_hop_return);
- TEST_LPM_ASSERT((status == 0) && (next_hop_return == next_hop_add_1));
-
- status = rte_lpm_add(lpm, ip_2, depth_2, next_hop_add_2);
- TEST_LPM_ASSERT(status == 0);
-
- status = rte_lpm_lookup(lpm, ip_2, &next_hop_return);
- TEST_LPM_ASSERT((status == 0) && (next_hop_return == next_hop_add_2));
-
- status = rte_lpm_delete(lpm, ip_2, depth_2);
- TEST_LPM_ASSERT(status == 0);
-
- status = rte_lpm_lookup(lpm, ip_2, &next_hop_return);
- TEST_LPM_ASSERT((status == 0) && (next_hop_return == next_hop_add_1));
-
- status = rte_lpm_delete(lpm, ip_1, depth_1);
- TEST_LPM_ASSERT(status == 0);
-
- status = rte_lpm_lookup(lpm, ip_1, &next_hop_return);
- TEST_LPM_ASSERT(status == -ENOENT);
-
- rte_lpm_free(lpm);
-
- return PASS;
-}
-
-
-/*
- * - Add rule that covers a TBL24 range previously invalid & lookup (& delete &
- * lookup)
- * - Add rule that extends a TBL24 invalid entry & lookup (& delete & lookup)
- * - Add rule that extends a TBL24 valid entry & lookup for both rules (&
- * delete & lookup)
- * - Add rule that updates the next hop in TBL24 & lookup (& delete & lookup)
- * - Add rule that updates the next hop in TBL8 & lookup (& delete & lookup)
- * - Delete a rule that is not present in the TBL24 & lookup
- * - Delete a rule that is not present in the TBL8 & lookup
- *
- */
-int32_t
-test10(void)
-{
-
- struct rte_lpm *lpm = NULL;
- struct rte_lpm_config config;
-
- config.max_rules = MAX_RULES;
- config.number_tbl8s = NUMBER_TBL8S;
- config.flags = 0;
- uint32_t ip, next_hop_add, next_hop_return;
- uint8_t depth;
- int32_t status = 0;
-
- /* Add rule that covers a TBL24 range previously invalid & lookup
- * (& delete & lookup) */
- lpm = rte_lpm_create(__func__, SOCKET_ID_ANY, &config);
- TEST_LPM_ASSERT(lpm != NULL);
-
- ip = IPv4(128, 0, 0, 0);
- depth = 16;
- next_hop_add = 100;
-
- status = rte_lpm_add(lpm, ip, depth, next_hop_add);
- TEST_LPM_ASSERT(status == 0);
-
- status = rte_lpm_lookup(lpm, ip, &next_hop_return);
- TEST_LPM_ASSERT((status == 0) && (next_hop_return == next_hop_add));
-
- status = rte_lpm_delete(lpm, ip, depth);
- TEST_LPM_ASSERT(status == 0);
-
- status = rte_lpm_lookup(lpm, ip, &next_hop_return);
- TEST_LPM_ASSERT(status == -ENOENT);
-
- rte_lpm_delete_all(lpm);
-
- ip = IPv4(128, 0, 0, 0);
- depth = 25;
- next_hop_add = 100;
-
- status = rte_lpm_add(lpm, ip, depth, next_hop_add);
- TEST_LPM_ASSERT(status == 0);
-
- status = rte_lpm_lookup(lpm, ip, &next_hop_return);
- TEST_LPM_ASSERT((status == 0) && (next_hop_return == next_hop_add));
-
- status = rte_lpm_delete(lpm, ip, depth);
- TEST_LPM_ASSERT(status == 0);
-
- rte_lpm_delete_all(lpm);
-
- /* Add rule that extends a TBL24 valid entry & lookup for both rules
- * (& delete & lookup) */
-
- ip = IPv4(128, 0, 0, 0);
- depth = 24;
- next_hop_add = 100;
-
- status = rte_lpm_add(lpm, ip, depth, next_hop_add);
- TEST_LPM_ASSERT(status == 0);
-
- ip = IPv4(128, 0, 0, 10);
- depth = 32;
- next_hop_add = 101;
-
- status = rte_lpm_add(lpm, ip, depth, next_hop_add);
- TEST_LPM_ASSERT(status == 0);
-
- status = rte_lpm_lookup(lpm, ip, &next_hop_return);
- TEST_LPM_ASSERT((status == 0) && (next_hop_return == next_hop_add));
-
- ip = IPv4(128, 0, 0, 0);
- next_hop_add = 100;
-
- status = rte_lpm_lookup(lpm, ip, &next_hop_return);
- TEST_LPM_ASSERT((status == 0) && (next_hop_return == next_hop_add));
-
- ip = IPv4(128, 0, 0, 0);
- depth = 24;
-
- status = rte_lpm_delete(lpm, ip, depth);
- TEST_LPM_ASSERT(status == 0);
-
- status = rte_lpm_lookup(lpm, ip, &next_hop_return);
- TEST_LPM_ASSERT(status == -ENOENT);
-
- ip = IPv4(128, 0, 0, 10);
- depth = 32;
-
- status = rte_lpm_delete(lpm, ip, depth);
- TEST_LPM_ASSERT(status == 0);
-
- status = rte_lpm_lookup(lpm, ip, &next_hop_return);
- TEST_LPM_ASSERT(status == -ENOENT);
-
- rte_lpm_delete_all(lpm);
-
- /* Add rule that updates the next hop in TBL24 & lookup
- * (& delete & lookup) */
-
- ip = IPv4(128, 0, 0, 0);
- depth = 24;
- next_hop_add = 100;
-
- status = rte_lpm_add(lpm, ip, depth, next_hop_add);
- TEST_LPM_ASSERT(status == 0);
-
- status = rte_lpm_lookup(lpm, ip, &next_hop_return);
- TEST_LPM_ASSERT((status == 0) && (next_hop_return == next_hop_add));
-
- next_hop_add = 101;
-
- status = rte_lpm_add(lpm, ip, depth, next_hop_add);
- TEST_LPM_ASSERT(status == 0);
-
- status = rte_lpm_lookup(lpm, ip, &next_hop_return);
- TEST_LPM_ASSERT((status == 0) && (next_hop_return == next_hop_add));
-
- status = rte_lpm_delete(lpm, ip, depth);
- TEST_LPM_ASSERT(status == 0);
-
- status = rte_lpm_lookup(lpm, ip, &next_hop_return);
- TEST_LPM_ASSERT(status == -ENOENT);
-
- rte_lpm_delete_all(lpm);
-
- /* Add rule that updates the next hop in TBL8 & lookup
- * (& delete & lookup) */
-
- ip = IPv4(128, 0, 0, 0);
- depth = 32;
- next_hop_add = 100;
-
- status = rte_lpm_add(lpm, ip, depth, next_hop_add);
- TEST_LPM_ASSERT(status == 0);
-
- status = rte_lpm_lookup(lpm, ip, &next_hop_return);
- TEST_LPM_ASSERT((status == 0) && (next_hop_return == next_hop_add));
-
- next_hop_add = 101;
-
- status = rte_lpm_add(lpm, ip, depth, next_hop_add);
- TEST_LPM_ASSERT(status == 0);
-
- status = rte_lpm_lookup(lpm, ip, &next_hop_return);
- TEST_LPM_ASSERT((status == 0) && (next_hop_return == next_hop_add));
-
- status = rte_lpm_delete(lpm, ip, depth);
- TEST_LPM_ASSERT(status == 0);
-
- status = rte_lpm_lookup(lpm, ip, &next_hop_return);
- TEST_LPM_ASSERT(status == -ENOENT);
-
- rte_lpm_delete_all(lpm);
-
- /* Delete a rule that is not present in the TBL24 & lookup */
-
- ip = IPv4(128, 0, 0, 0);
- depth = 24;
-
- status = rte_lpm_delete(lpm, ip, depth);
- TEST_LPM_ASSERT(status < 0);
-
- status = rte_lpm_lookup(lpm, ip, &next_hop_return);
- TEST_LPM_ASSERT(status == -ENOENT);
-
- rte_lpm_delete_all(lpm);
-
- /* Delete a rule that is not present in the TBL8 & lookup */
-
- ip = IPv4(128, 0, 0, 0);
- depth = 32;
-
- status = rte_lpm_delete(lpm, ip, depth);
- TEST_LPM_ASSERT(status < 0);
-
- status = rte_lpm_lookup(lpm, ip, &next_hop_return);
- TEST_LPM_ASSERT(status == -ENOENT);
-
- rte_lpm_free(lpm);
-
- return PASS;
-}
-
-/*
- * Add two rules, lookup to hit the more specific one, lookup to hit the less
- * specific one delete the less specific rule and lookup previous values again;
- * add a more specific rule than the existing rule, lookup again
- *
- * */
-int32_t
-test11(void)
-{
-
- struct rte_lpm *lpm = NULL;
- struct rte_lpm_config config;
-
- config.max_rules = MAX_RULES;
- config.number_tbl8s = NUMBER_TBL8S;
- config.flags = 0;
- uint32_t ip, next_hop_add, next_hop_return;
- uint8_t depth;
- int32_t status = 0;
-
- lpm = rte_lpm_create(__func__, SOCKET_ID_ANY, &config);
- TEST_LPM_ASSERT(lpm != NULL);
-
- ip = IPv4(128, 0, 0, 0);
- depth = 24;
- next_hop_add = 100;
-
- status = rte_lpm_add(lpm, ip, depth, next_hop_add);
- TEST_LPM_ASSERT(status == 0);
-
- ip = IPv4(128, 0, 0, 10);
- depth = 32;
- next_hop_add = 101;
-
- status = rte_lpm_add(lpm, ip, depth, next_hop_add);
- TEST_LPM_ASSERT(status == 0);
-
- status = rte_lpm_lookup(lpm, ip, &next_hop_return);
- TEST_LPM_ASSERT((status == 0) && (next_hop_return == next_hop_add));
-
- ip = IPv4(128, 0, 0, 0);
- next_hop_add = 100;
-
- status = rte_lpm_lookup(lpm, ip, &next_hop_return);
- TEST_LPM_ASSERT((status == 0) && (next_hop_return == next_hop_add));
-
- ip = IPv4(128, 0, 0, 0);
- depth = 24;
-
- status = rte_lpm_delete(lpm, ip, depth);
- TEST_LPM_ASSERT(status == 0);
-
- status = rte_lpm_lookup(lpm, ip, &next_hop_return);
- TEST_LPM_ASSERT(status == -ENOENT);
-
- ip = IPv4(128, 0, 0, 10);
- depth = 32;
-
- status = rte_lpm_delete(lpm, ip, depth);
- TEST_LPM_ASSERT(status == 0);
-
- status = rte_lpm_lookup(lpm, ip, &next_hop_return);
- TEST_LPM_ASSERT(status == -ENOENT);
-
- rte_lpm_free(lpm);
-
- return PASS;
-}
-
-/*
- * Add an extended rule (i.e. depth greater than 24, lookup (hit), delete,
- * lookup (miss) in a for loop of 1000 times. This will check tbl8 extension
- * and contraction.
- *
- * */
-
-int32_t
-test12(void)
-{
- xmm_t ipx4;
- uint32_t hop[4];
- struct rte_lpm *lpm = NULL;
- struct rte_lpm_config config;
-
- config.max_rules = MAX_RULES;
- config.number_tbl8s = NUMBER_TBL8S;
- config.flags = 0;
- uint32_t ip, i, next_hop_add, next_hop_return;
- uint8_t depth;
- int32_t status = 0;
-
- lpm = rte_lpm_create(__func__, SOCKET_ID_ANY, &config);
- TEST_LPM_ASSERT(lpm != NULL);
-
- ip = IPv4(128, 0, 0, 0);
- depth = 32;
- next_hop_add = 100;
-
- for (i = 0; i < 1000; i++) {
- status = rte_lpm_add(lpm, ip, depth, next_hop_add);
- TEST_LPM_ASSERT(status == 0);
-
- status = rte_lpm_lookup(lpm, ip, &next_hop_return);
- TEST_LPM_ASSERT((status == 0) &&
- (next_hop_return == next_hop_add));
-
- ipx4 = vect_set_epi32(ip, ip + 1, ip, ip - 1);
- rte_lpm_lookupx4(lpm, ipx4, hop, UINT32_MAX);
- TEST_LPM_ASSERT(hop[0] == UINT32_MAX);
- TEST_LPM_ASSERT(hop[1] == next_hop_add);
- TEST_LPM_ASSERT(hop[2] == UINT32_MAX);
- TEST_LPM_ASSERT(hop[3] == next_hop_add);
-
- status = rte_lpm_delete(lpm, ip, depth);
- TEST_LPM_ASSERT(status == 0);
-
- status = rte_lpm_lookup(lpm, ip, &next_hop_return);
- TEST_LPM_ASSERT(status == -ENOENT);
- }
-
- rte_lpm_free(lpm);
-
- return PASS;
-}
-
-/*
- * Add a rule to tbl24, lookup (hit), then add a rule that will extend this
- * tbl24 entry, lookup (hit). delete the rule that caused the tbl24 extension,
- * lookup (miss) and repeat for loop of 1000 times. This will check tbl8
- * extension and contraction.
- *
- * */
-
-int32_t
-test13(void)
-{
- struct rte_lpm *lpm = NULL;
- struct rte_lpm_config config;
-
- config.max_rules = MAX_RULES;
- config.number_tbl8s = NUMBER_TBL8S;
- config.flags = 0;
- uint32_t ip, i, next_hop_add_1, next_hop_add_2, next_hop_return;
- uint8_t depth;
- int32_t status = 0;
-
- lpm = rte_lpm_create(__func__, SOCKET_ID_ANY, &config);
- TEST_LPM_ASSERT(lpm != NULL);
-
- ip = IPv4(128, 0, 0, 0);
- depth = 24;
- next_hop_add_1 = 100;
-
- status = rte_lpm_add(lpm, ip, depth, next_hop_add_1);
- TEST_LPM_ASSERT(status == 0);
-
- status = rte_lpm_lookup(lpm, ip, &next_hop_return);
- TEST_LPM_ASSERT((status == 0) && (next_hop_return == next_hop_add_1));
-
- depth = 32;
- next_hop_add_2 = 101;
-
- for (i = 0; i < 1000; i++) {
- status = rte_lpm_add(lpm, ip, depth, next_hop_add_2);
- TEST_LPM_ASSERT(status == 0);
-
- status = rte_lpm_lookup(lpm, ip, &next_hop_return);
- TEST_LPM_ASSERT((status == 0) &&
- (next_hop_return == next_hop_add_2));
-
- status = rte_lpm_delete(lpm, ip, depth);
- TEST_LPM_ASSERT(status == 0);
-
- status = rte_lpm_lookup(lpm, ip, &next_hop_return);
- TEST_LPM_ASSERT((status == 0) &&
- (next_hop_return == next_hop_add_1));
- }
-
- depth = 24;
-
- status = rte_lpm_delete(lpm, ip, depth);
- TEST_LPM_ASSERT(status == 0);
-
- status = rte_lpm_lookup(lpm, ip, &next_hop_return);
- TEST_LPM_ASSERT(status == -ENOENT);
-
- rte_lpm_free(lpm);
-
- return PASS;
-}
-
-/*
- * Fore TBL8 extension exhaustion. Add 256 rules that require a tbl8 extension.
- * No more tbl8 extensions will be allowed. Now add one more rule that required
- * a tbl8 extension and get fail.
- * */
-int32_t
-test14(void)
-{
-
- /* We only use depth = 32 in the loop below so we must make sure
- * that we have enough storage for all rules at that depth*/
-
- struct rte_lpm *lpm = NULL;
- struct rte_lpm_config config;
-
- config.max_rules = 256 * 32;
- config.number_tbl8s = NUMBER_TBL8S;
- config.flags = 0;
- uint32_t ip, next_hop_add, next_hop_return;
- uint8_t depth;
- int32_t status = 0;
-
- /* Add enough space for 256 rules for every depth */
- lpm = rte_lpm_create(__func__, SOCKET_ID_ANY, &config);
- TEST_LPM_ASSERT(lpm != NULL);
-
- depth = 32;
- next_hop_add = 100;
- ip = IPv4(0, 0, 0, 0);
-
- /* Add 256 rules that require a tbl8 extension */
- for (; ip <= IPv4(0, 0, 255, 0); ip += 256) {
- status = rte_lpm_add(lpm, ip, depth, next_hop_add);
- TEST_LPM_ASSERT(status == 0);
-
- status = rte_lpm_lookup(lpm, ip, &next_hop_return);
- TEST_LPM_ASSERT((status == 0) &&
- (next_hop_return == next_hop_add));
- }
-
- /* All tbl8 extensions have been used above. Try to add one more and
- * we get a fail */
- ip = IPv4(1, 0, 0, 0);
- depth = 32;
-
- status = rte_lpm_add(lpm, ip, depth, next_hop_add);
- TEST_LPM_ASSERT(status < 0);
-
- rte_lpm_free(lpm);
-
- return PASS;
-}
-
-/*
- * Sequence of operations for find existing lpm table
- *
- * - create table
- * - find existing table: hit
- * - find non-existing table: miss
- *
- */
-int32_t
-test15(void)
-{
- struct rte_lpm *lpm = NULL, *result = NULL;
- struct rte_lpm_config config;
-
- config.max_rules = 256 * 32;
- config.number_tbl8s = NUMBER_TBL8S;
- config.flags = 0;
-
- /* Create lpm */
- lpm = rte_lpm_create("lpm_find_existing", SOCKET_ID_ANY, &config);
- TEST_LPM_ASSERT(lpm != NULL);
-
- /* Try to find existing lpm */
- result = rte_lpm_find_existing("lpm_find_existing");
- TEST_LPM_ASSERT(result == lpm);
-
- /* Try to find non-existing lpm */
- result = rte_lpm_find_existing("lpm_find_non_existing");
- TEST_LPM_ASSERT(result == NULL);
-
- /* Cleanup. */
- rte_lpm_delete_all(lpm);
- rte_lpm_free(lpm);
-
- return PASS;
-}
-
-/*
- * test failure condition of overloading the tbl8 so no more will fit
- * Check we get an error return value in that case
- */
-int32_t
-test16(void)
-{
- uint32_t ip;
- struct rte_lpm_config config;
-
- config.max_rules = 256 * 32;
- config.number_tbl8s = NUMBER_TBL8S;
- config.flags = 0;
- struct rte_lpm *lpm = rte_lpm_create(__func__, SOCKET_ID_ANY, &config);
-
- /* ip loops through all possibilities for top 24 bits of address */
- for (ip = 0; ip < 0xFFFFFF; ip++) {
- /* add an entry within a different tbl8 each time, since
- * depth >24 and the top 24 bits are different */
- if (rte_lpm_add(lpm, (ip << 8) + 0xF0, 30, 0) < 0)
- break;
- }
-
- if (ip != NUMBER_TBL8S) {
- printf("Error, unexpected failure with filling tbl8 groups\n");
- printf("Failed after %u additions, expected after %u\n",
- (unsigned)ip, (unsigned)NUMBER_TBL8S);
- }
-
- rte_lpm_free(lpm);
- return 0;
-}
-
-/*
- * Test for overwriting of tbl8:
- * - add rule /32 and lookup
- * - add new rule /24 and lookup
- * - add third rule /25 and lookup
- * - lookup /32 and /24 rule to ensure the table has not been overwritten.
- */
-int32_t
-test17(void)
-{
- struct rte_lpm *lpm = NULL;
- struct rte_lpm_config config;
-
- config.max_rules = MAX_RULES;
- config.number_tbl8s = NUMBER_TBL8S;
- config.flags = 0;
- const uint32_t ip_10_32 = IPv4(10, 10, 10, 2);
- const uint32_t ip_10_24 = IPv4(10, 10, 10, 0);
- const uint32_t ip_20_25 = IPv4(10, 10, 20, 2);
- const uint8_t d_ip_10_32 = 32,
- d_ip_10_24 = 24,
- d_ip_20_25 = 25;
- const uint32_t next_hop_ip_10_32 = 100,
- next_hop_ip_10_24 = 105,
- next_hop_ip_20_25 = 111;
- uint32_t next_hop_return = 0;
- int32_t status = 0;
-
- lpm = rte_lpm_create(__func__, SOCKET_ID_ANY, &config);
- TEST_LPM_ASSERT(lpm != NULL);
-
- if ((status = rte_lpm_add(lpm, ip_10_32, d_ip_10_32,
- next_hop_ip_10_32)) < 0)
- return -1;
-
- status = rte_lpm_lookup(lpm, ip_10_32, &next_hop_return);
- uint32_t test_hop_10_32 = next_hop_return;
- TEST_LPM_ASSERT(status == 0);
- TEST_LPM_ASSERT(next_hop_return == next_hop_ip_10_32);
-
- if ((status = rte_lpm_add(lpm, ip_10_24, d_ip_10_24,
- next_hop_ip_10_24)) < 0)
- return -1;
-
- status = rte_lpm_lookup(lpm, ip_10_24, &next_hop_return);
- uint32_t test_hop_10_24 = next_hop_return;
- TEST_LPM_ASSERT(status == 0);
- TEST_LPM_ASSERT(next_hop_return == next_hop_ip_10_24);
-
- if ((status = rte_lpm_add(lpm, ip_20_25, d_ip_20_25,
- next_hop_ip_20_25)) < 0)
- return -1;
-
- status = rte_lpm_lookup(lpm, ip_20_25, &next_hop_return);
- uint32_t test_hop_20_25 = next_hop_return;
- TEST_LPM_ASSERT(status == 0);
- TEST_LPM_ASSERT(next_hop_return == next_hop_ip_20_25);
-
- if (test_hop_10_32 == test_hop_10_24) {
- printf("Next hop return equal\n");
- return -1;
- }
-
- if (test_hop_10_24 == test_hop_20_25) {
- printf("Next hop return equal\n");
- return -1;
- }
-
- status = rte_lpm_lookup(lpm, ip_10_32, &next_hop_return);
- TEST_LPM_ASSERT(status == 0);
- TEST_LPM_ASSERT(next_hop_return == next_hop_ip_10_32);
-
- status = rte_lpm_lookup(lpm, ip_10_24, &next_hop_return);
- TEST_LPM_ASSERT(status == 0);
- TEST_LPM_ASSERT(next_hop_return == next_hop_ip_10_24);
-
- rte_lpm_free(lpm);
-
- return PASS;
-}
-
-/*
- * Test for recycle of tbl8
- * - step 1: add a rule with depth=28 (> 24)
- * - step 2: add a rule with same 24-bit prefix and depth=23 (< 24)
- * - step 3: delete the first rule
- * - step 4: check tbl8 is freed
- * - step 5: add a rule same as the first one (depth=28)
- * - step 6: check same tbl8 is allocated
- * - step 7: add a rule with same 24-bit prefix and depth=24
- * - step 8: delete the rule (depth=28) added in step 5
- * - step 9: check tbl8 is freed
- * - step 10: add a rule with same 24-bit prefix and depth = 28
- * - setp 11: check same tbl8 is allocated again
- */
-int32_t
-test18(void)
-{
-#define group_idx next_hop
- struct rte_lpm *lpm = NULL;
- struct rte_lpm_config config;
- uint32_t ip, next_hop;
- uint8_t depth;
- uint32_t tbl8_group_index;
-
- config.max_rules = MAX_RULES;
- config.number_tbl8s = NUMBER_TBL8S;
- config.flags = 0;
-
- lpm = rte_lpm_create(__func__, SOCKET_ID_ANY, &config);
- TEST_LPM_ASSERT(lpm != NULL);
-
- ip = IPv4(192, 168, 100, 100);
- depth = 28;
- next_hop = 1;
- rte_lpm_add(lpm, ip, depth, next_hop);
-
- TEST_LPM_ASSERT(lpm->tbl24[ip>>8].valid_group);
- tbl8_group_index = lpm->tbl24[ip>>8].group_idx;
-
- depth = 23;
- next_hop = 2;
- rte_lpm_add(lpm, ip, depth, next_hop);
- TEST_LPM_ASSERT(lpm->tbl24[ip>>8].valid_group);
-
- depth = 28;
- rte_lpm_delete(lpm, ip, depth);
-
- TEST_LPM_ASSERT(!lpm->tbl24[ip>>8].valid_group);
-
- next_hop = 3;
- rte_lpm_add(lpm, ip, depth, next_hop);
-
- TEST_LPM_ASSERT(lpm->tbl24[ip>>8].valid_group);
- TEST_LPM_ASSERT(tbl8_group_index == lpm->tbl24[ip>>8].group_idx);
-
- depth = 24;
- next_hop = 4;
- rte_lpm_add(lpm, ip, depth, next_hop);
- TEST_LPM_ASSERT(lpm->tbl24[ip>>8].valid_group);
-
- depth = 28;
- rte_lpm_delete(lpm, ip, depth);
-
- TEST_LPM_ASSERT(!lpm->tbl24[ip>>8].valid_group);
-
- next_hop = 5;
- rte_lpm_add(lpm, ip, depth, next_hop);
-
- TEST_LPM_ASSERT(lpm->tbl24[ip>>8].valid_group);
- TEST_LPM_ASSERT(tbl8_group_index == lpm->tbl24[ip>>8].group_idx);
-
- rte_lpm_free(lpm);
-#undef group_idx
- return PASS;
-}
-
-/*
- * Do all unit tests.
- */
-
-static int
-test_lpm(void)
-{
- unsigned i;
- int status, global_status = 0;
-
- for (i = 0; i < NUM_LPM_TESTS; i++) {
- status = tests[i]();
- if (status < 0) {
- printf("ERROR: LPM Test %u: FAIL\n", i);
- global_status = status;
- }
- }
-
- return global_status;
-}
-
-REGISTER_TEST_COMMAND(lpm_autotest, test_lpm);
diff --git a/app/test/test_lpm6.c b/app/test/test_lpm6.c
deleted file mode 100644
index 61134f70..00000000
--- a/app/test/test_lpm6.c
+++ /dev/null
@@ -1,1770 +0,0 @@
-/*-
- * BSD LICENSE
- *
- * Copyright(c) 2010-2014 Intel Corporation. All rights reserved.
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * * Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * * Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in
- * the documentation and/or other materials provided with the
- * distribution.
- * * Neither the name of Intel Corporation nor the names of its
- * contributors may be used to endorse or promote products derived
- * from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
- * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
- * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#include <stdio.h>
-#include <stdint.h>
-#include <stdlib.h>
-#include <string.h>
-
-#include <rte_memory.h>
-#include <rte_lpm6.h>
-
-#include "test.h"
-#include "test_lpm6_data.h"
-
-#define TEST_LPM_ASSERT(cond) do { \
- if (!(cond)) { \
- printf("Error at line %d: \n", __LINE__); \
- return -1; \
- } \
-} while(0)
-
-typedef int32_t (* rte_lpm6_test)(void);
-
-static int32_t test0(void);
-static int32_t test1(void);
-static int32_t test2(void);
-static int32_t test3(void);
-static int32_t test4(void);
-static int32_t test5(void);
-static int32_t test6(void);
-static int32_t test7(void);
-static int32_t test8(void);
-static int32_t test9(void);
-static int32_t test10(void);
-static int32_t test11(void);
-static int32_t test12(void);
-static int32_t test13(void);
-static int32_t test14(void);
-static int32_t test15(void);
-static int32_t test16(void);
-static int32_t test17(void);
-static int32_t test18(void);
-static int32_t test19(void);
-static int32_t test20(void);
-static int32_t test21(void);
-static int32_t test22(void);
-static int32_t test23(void);
-static int32_t test24(void);
-static int32_t test25(void);
-static int32_t test26(void);
-static int32_t test27(void);
-
-rte_lpm6_test tests6[] = {
-/* Test Cases */
- test0,
- test1,
- test2,
- test3,
- test4,
- test5,
- test6,
- test7,
- test8,
- test9,
- test10,
- test11,
- test12,
- test13,
- test14,
- test15,
- test16,
- test17,
- test18,
- test19,
- test20,
- test21,
- test22,
- test23,
- test24,
- test25,
- test26,
- test27,
-};
-
-#define NUM_LPM6_TESTS (sizeof(tests6)/sizeof(tests6[0]))
-#define MAX_DEPTH 128
-#define MAX_RULES 1000000
-#define NUMBER_TBL8S (1 << 16)
-#define MAX_NUM_TBL8S (1 << 21)
-#define PASS 0
-
-static void
-IPv6(uint8_t *ip, uint8_t b1, uint8_t b2, uint8_t b3, uint8_t b4, uint8_t b5,
- uint8_t b6, uint8_t b7, uint8_t b8, uint8_t b9, uint8_t b10,
- uint8_t b11, uint8_t b12, uint8_t b13, uint8_t b14, uint8_t b15,
- uint8_t b16)
-{
- ip[0] = b1;
- ip[1] = b2;
- ip[2] = b3;
- ip[3] = b4;
- ip[4] = b5;
- ip[5] = b6;
- ip[6] = b7;
- ip[7] = b8;
- ip[8] = b9;
- ip[9] = b10;
- ip[10] = b11;
- ip[11] = b12;
- ip[12] = b13;
- ip[13] = b14;
- ip[14] = b15;
- ip[15] = b16;
-}
-
-/*
- * Check that rte_lpm6_create fails gracefully for incorrect user input
- * arguments
- */
-int32_t
-test0(void)
-{
- struct rte_lpm6 *lpm = NULL;
- struct rte_lpm6_config config;
-
- config.max_rules = MAX_RULES;
- config.number_tbl8s = NUMBER_TBL8S;
- config.flags = 0;
-
- /* rte_lpm6_create: lpm name == NULL */
- lpm = rte_lpm6_create(NULL, SOCKET_ID_ANY, &config);
- TEST_LPM_ASSERT(lpm == NULL);
-
- /* rte_lpm6_create: max_rules = 0 */
- /* Note: __func__ inserts the function name, in this case "test0". */
- config.max_rules = 0;
- lpm = rte_lpm6_create(__func__, SOCKET_ID_ANY, &config);
- TEST_LPM_ASSERT(lpm == NULL);
-
- /* socket_id < -1 is invalid */
- config.max_rules = MAX_RULES;
- lpm = rte_lpm6_create(__func__, -2, &config);
- TEST_LPM_ASSERT(lpm == NULL);
-
- /* rte_lpm6_create: number_tbl8s is bigger than the maximum */
- config.number_tbl8s = MAX_NUM_TBL8S + 1;
- lpm = rte_lpm6_create(__func__, SOCKET_ID_ANY, &config);
- TEST_LPM_ASSERT(lpm == NULL);
-
- /* rte_lpm6_create: config = NULL */
- lpm = rte_lpm6_create(__func__, SOCKET_ID_ANY, NULL);
- TEST_LPM_ASSERT(lpm == NULL);
-
- return PASS;
-}
-
-/*
- * Creates two different LPM tables. Tries to create a third one with the same
- * name as the first one and expects the create function to return the same
- * pointer.
- */
-int32_t
-test1(void)
-{
- struct rte_lpm6 *lpm1 = NULL, *lpm2 = NULL, *lpm3 = NULL;
- struct rte_lpm6_config config;
-
- config.max_rules = MAX_RULES;
- config.number_tbl8s = NUMBER_TBL8S;
- config.flags = 0;
-
- /* rte_lpm6_create: lpm name == LPM1 */
- lpm1 = rte_lpm6_create("LPM1", SOCKET_ID_ANY, &config);
- TEST_LPM_ASSERT(lpm1 != NULL);
-
- /* rte_lpm6_create: lpm name == LPM2 */
- lpm2 = rte_lpm6_create("LPM2", SOCKET_ID_ANY, &config);
- TEST_LPM_ASSERT(lpm2 != NULL);
-
- /* rte_lpm6_create: lpm name == LPM2 */
- lpm3 = rte_lpm6_create("LPM1", SOCKET_ID_ANY, &config);
- TEST_LPM_ASSERT(lpm3 == NULL);
-
- rte_lpm6_free(lpm1);
- rte_lpm6_free(lpm2);
-
- return PASS;
-}
-
-/*
- * Create lpm table then delete lpm table 20 times
- * Use a slightly different rules size each time
- */
-int32_t
-test2(void)
-{
- struct rte_lpm6 *lpm = NULL;
- struct rte_lpm6_config config;
- int32_t i;
-
- config.number_tbl8s = NUMBER_TBL8S;
- config.flags = 0;
-
- /* rte_lpm6_free: Free NULL */
- for (i = 0; i < 20; i++) {
- config.max_rules = MAX_RULES - i;
- lpm = rte_lpm6_create(__func__, SOCKET_ID_ANY, &config);
- TEST_LPM_ASSERT(lpm != NULL);
-
- rte_lpm6_free(lpm);
- }
-
- /* Can not test free so return success */
- return PASS;
-}
-
-/*
- * Call rte_lpm6_free for NULL pointer user input. Note: free has no return and
- * therefore it is impossible to check for failure but this test is added to
- * increase function coverage metrics and to validate that freeing null does
- * not crash.
- */
-int32_t
-test3(void)
-{
- struct rte_lpm6 *lpm = NULL;
- struct rte_lpm6_config config;
-
- config.max_rules = MAX_RULES;
- config.number_tbl8s = NUMBER_TBL8S;
- config.flags = 0;
-
- lpm = rte_lpm6_create(__func__, SOCKET_ID_ANY, &config);
- TEST_LPM_ASSERT(lpm != NULL);
-
- rte_lpm6_free(lpm);
- rte_lpm6_free(NULL);
- return PASS;
-}
-
-/*
- * Check that rte_lpm6_add fails gracefully for incorrect user input arguments
- */
-int32_t
-test4(void)
-{
- struct rte_lpm6 *lpm = NULL;
- struct rte_lpm6_config config;
-
- uint8_t ip[] = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};
- uint8_t depth = 24, next_hop = 100;
- int32_t status = 0;
-
- config.max_rules = MAX_RULES;
- config.number_tbl8s = NUMBER_TBL8S;
- config.flags = 0;
-
- /* rte_lpm6_add: lpm == NULL */
- status = rte_lpm6_add(NULL, ip, depth, next_hop);
- TEST_LPM_ASSERT(status < 0);
-
- /*Create vaild lpm to use in rest of test. */
- lpm = rte_lpm6_create(__func__, SOCKET_ID_ANY, &config);
- TEST_LPM_ASSERT(lpm != NULL);
-
- /* rte_lpm6_add: depth < 1 */
- status = rte_lpm6_add(lpm, ip, 0, next_hop);
- TEST_LPM_ASSERT(status < 0);
-
- /* rte_lpm6_add: depth > MAX_DEPTH */
- status = rte_lpm6_add(lpm, ip, (MAX_DEPTH + 1), next_hop);
- TEST_LPM_ASSERT(status < 0);
-
- rte_lpm6_free(lpm);
-
- return PASS;
-}
-
-/*
- * Check that rte_lpm6_delete fails gracefully for incorrect user input
- * arguments
- */
-int32_t
-test5(void)
-{
- struct rte_lpm6 *lpm = NULL;
- struct rte_lpm6_config config;
- uint8_t ip[] = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};
- uint8_t depth = 24;
- int32_t status = 0;
-
- config.max_rules = MAX_RULES;
- config.number_tbl8s = NUMBER_TBL8S;
- config.flags = 0;
-
- /* rte_lpm_delete: lpm == NULL */
- status = rte_lpm6_delete(NULL, ip, depth);
- TEST_LPM_ASSERT(status < 0);
-
- /*Create vaild lpm to use in rest of test. */
- lpm = rte_lpm6_create(__func__, SOCKET_ID_ANY, &config);
- TEST_LPM_ASSERT(lpm != NULL);
-
- /* rte_lpm_delete: depth < 1 */
- status = rte_lpm6_delete(lpm, ip, 0);
- TEST_LPM_ASSERT(status < 0);
-
- /* rte_lpm_delete: depth > MAX_DEPTH */
- status = rte_lpm6_delete(lpm, ip, (MAX_DEPTH + 1));
- TEST_LPM_ASSERT(status < 0);
-
- rte_lpm6_free(lpm);
-
- return PASS;
-}
-
-/*
- * Check that rte_lpm6_lookup fails gracefully for incorrect user input
- * arguments
- */
-int32_t
-test6(void)
-{
- struct rte_lpm6 *lpm = NULL;
- struct rte_lpm6_config config;
- uint8_t ip[] = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};
- uint8_t next_hop_return = 0;
- int32_t status = 0;
-
- config.max_rules = MAX_RULES;
- config.number_tbl8s = NUMBER_TBL8S;
- config.flags = 0;
-
- /* rte_lpm6_lookup: lpm == NULL */
- status = rte_lpm6_lookup(NULL, ip, &next_hop_return);
- TEST_LPM_ASSERT(status < 0);
-
- /*Create vaild lpm to use in rest of test. */
- lpm = rte_lpm6_create(__func__, SOCKET_ID_ANY, &config);
- TEST_LPM_ASSERT(lpm != NULL);
-
- /* rte_lpm6_lookup: ip = NULL */
- status = rte_lpm6_lookup(lpm, NULL, &next_hop_return);
- TEST_LPM_ASSERT(status < 0);
-
- /* rte_lpm6_lookup: next_hop = NULL */
- status = rte_lpm6_lookup(lpm, ip, NULL);
- TEST_LPM_ASSERT(status < 0);
-
- rte_lpm6_free(lpm);
-
- return PASS;
-}
-
-/*
- * Checks that rte_lpm6_lookup_bulk_func fails gracefully for incorrect user
- * input arguments
- */
-int32_t
-test7(void)
-{
- struct rte_lpm6 *lpm = NULL;
- struct rte_lpm6_config config;
- uint8_t ip[10][16];
- int16_t next_hop_return[10];
- int32_t status = 0;
-
- config.max_rules = MAX_RULES;
- config.number_tbl8s = NUMBER_TBL8S;
- config.flags = 0;
-
- /* rte_lpm6_lookup: lpm == NULL */
- status = rte_lpm6_lookup_bulk_func(NULL, ip, next_hop_return, 10);
- TEST_LPM_ASSERT(status < 0);
-
- /*Create vaild lpm to use in rest of test. */
- lpm = rte_lpm6_create(__func__, SOCKET_ID_ANY, &config);
- TEST_LPM_ASSERT(lpm != NULL);
-
- /* rte_lpm6_lookup: ip = NULL */
- status = rte_lpm6_lookup_bulk_func(lpm, NULL, next_hop_return, 10);
- TEST_LPM_ASSERT(status < 0);
-
- /* rte_lpm6_lookup: next_hop = NULL */
- status = rte_lpm6_lookup_bulk_func(lpm, ip, NULL, 10);
- TEST_LPM_ASSERT(status < 0);
-
- rte_lpm6_free(lpm);
-
- return PASS;
-}
-
-/*
- * Checks that rte_lpm6_delete_bulk_func fails gracefully for incorrect user
- * input arguments
- */
-int32_t
-test8(void)
-{
- struct rte_lpm6 *lpm = NULL;
- struct rte_lpm6_config config;
- uint8_t ip[10][16];
- uint8_t depth[10];
- int32_t status = 0;
-
- config.max_rules = MAX_RULES;
- config.number_tbl8s = NUMBER_TBL8S;
- config.flags = 0;
-
- /* rte_lpm6_delete: lpm == NULL */
- status = rte_lpm6_delete_bulk_func(NULL, ip, depth, 10);
- TEST_LPM_ASSERT(status < 0);
-
- /*Create vaild lpm to use in rest of test. */
- lpm = rte_lpm6_create(__func__, SOCKET_ID_ANY, &config);
- TEST_LPM_ASSERT(lpm != NULL);
-
- /* rte_lpm6_delete: ip = NULL */
- status = rte_lpm6_delete_bulk_func(lpm, NULL, depth, 10);
- TEST_LPM_ASSERT(status < 0);
-
- /* rte_lpm6_delete: next_hop = NULL */
- status = rte_lpm6_delete_bulk_func(lpm, ip, NULL, 10);
- TEST_LPM_ASSERT(status < 0);
-
- rte_lpm6_free(lpm);
-
- return PASS;
-}
-
-/*
- * Call add, lookup and delete for a single rule with depth < 24.
- * Check all the combinations for the first three bytes that result in a hit.
- * Delete the rule and check that the same test returs a miss.
- */
-int32_t
-test9(void)
-{
- struct rte_lpm6 *lpm = NULL;
- struct rte_lpm6_config config;
- uint8_t ip[] = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};
- uint8_t depth = 16, next_hop_add = 100, next_hop_return = 0;
- int32_t status = 0;
- uint8_t i;
-
- config.max_rules = MAX_RULES;
- config.number_tbl8s = NUMBER_TBL8S;
- config.flags = 0;
-
- lpm = rte_lpm6_create(__func__, SOCKET_ID_ANY, &config);
- TEST_LPM_ASSERT(lpm != NULL);
-
- status = rte_lpm6_add(lpm, ip, depth, next_hop_add);
- TEST_LPM_ASSERT(status == 0);
-
- for (i = 0; i < UINT8_MAX; i++) {
- ip[2] = i;
- status = rte_lpm6_lookup(lpm, ip, &next_hop_return);
- TEST_LPM_ASSERT((status == 0) && (next_hop_return == next_hop_add));
- }
-
- status = rte_lpm6_delete(lpm, ip, depth);
- TEST_LPM_ASSERT(status == 0);
-
- for (i = 0; i < UINT8_MAX; i++) {
- ip[2] = i;
- status = rte_lpm6_lookup(lpm, ip, &next_hop_return);
- TEST_LPM_ASSERT(status == -ENOENT);
- }
-
- rte_lpm6_free(lpm);
-
- return PASS;
-}
-
-/*
- * Adds max_rules + 1 and expects a failure. Deletes a rule, then adds
- * another one and expects success.
- */
-int32_t
-test10(void)
-{
- struct rte_lpm6 *lpm = NULL;
- struct rte_lpm6_config config;
- uint8_t ip[] = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};
- uint8_t depth, next_hop_add = 100;
- int32_t status = 0;
- int i;
-
- config.max_rules = 127;
- config.number_tbl8s = NUMBER_TBL8S;
- config.flags = 0;
-
- lpm = rte_lpm6_create(__func__, SOCKET_ID_ANY, &config);
- TEST_LPM_ASSERT(lpm != NULL);
-
- for (i = 1; i < 128; i++) {
- depth = (uint8_t)i;
- status = rte_lpm6_add(lpm, ip, depth, next_hop_add);
- TEST_LPM_ASSERT(status == 0);
- }
-
- depth = 128;
- status = rte_lpm6_add(lpm, ip, depth, next_hop_add);
- TEST_LPM_ASSERT(status == -ENOSPC);
-
- depth = 127;
- status = rte_lpm6_delete(lpm, ip, depth);
- TEST_LPM_ASSERT(status == 0);
-
- depth = 128;
- status = rte_lpm6_add(lpm, ip, depth, next_hop_add);
- TEST_LPM_ASSERT(status == 0);
-
- rte_lpm6_free(lpm);
-
- return PASS;
-}
-
-/*
- * Creates an LPM table with a small number of tbl8s and exhaust them in the
- * middle of the process of creating a rule.
- */
-int32_t
-test11(void)
-{
- struct rte_lpm6 *lpm = NULL;
- struct rte_lpm6_config config;
- uint8_t ip[] = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};
- uint8_t depth, next_hop_add = 100;
- int32_t status = 0;
-
- config.max_rules = MAX_RULES;
- config.number_tbl8s = 16;
- config.flags = 0;
-
- lpm = rte_lpm6_create(__func__, SOCKET_ID_ANY, &config);
- TEST_LPM_ASSERT(lpm != NULL);
-
- depth = 128;
- status = rte_lpm6_add(lpm, ip, depth, next_hop_add);
- TEST_LPM_ASSERT(status == 0);
-
- ip[0] = 1;
- depth = 25;
- status = rte_lpm6_add(lpm, ip, depth, next_hop_add);
- TEST_LPM_ASSERT(status == 0);
-
- status = rte_lpm6_delete(lpm, ip, depth);
- TEST_LPM_ASSERT(status == 0);
-
- depth = 33;
- status = rte_lpm6_add(lpm, ip, depth, next_hop_add);
- TEST_LPM_ASSERT(status == 0);
-
- status = rte_lpm6_delete(lpm, ip, depth);
- TEST_LPM_ASSERT(status == 0);
-
- depth = 41;
- status = rte_lpm6_add(lpm, ip, depth, next_hop_add);
- TEST_LPM_ASSERT(status == 0);
-
- status = rte_lpm6_delete(lpm, ip, depth);
- TEST_LPM_ASSERT(status == 0);
-
- depth = 49;
- status = rte_lpm6_add(lpm, ip, depth, next_hop_add);
- TEST_LPM_ASSERT(status == -ENOSPC);
-
- depth = 41;
- status = rte_lpm6_add(lpm, ip, depth, next_hop_add);
- TEST_LPM_ASSERT(status == 0);
-
- rte_lpm6_free(lpm);
-
- return PASS;
-}
-
-/*
- * Creates an LPM table with a small number of tbl8s and exhaust them in the
- * middle of the process of adding a rule when there is already an existing rule
- * in that position and needs to be extended.
- */
-int32_t
-test12(void)
-{
- struct rte_lpm6 *lpm = NULL;
- struct rte_lpm6_config config;
- uint8_t ip[] = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};
- uint8_t depth, next_hop_add = 100;
- int32_t status = 0;
-
- config.max_rules = MAX_RULES;
- config.number_tbl8s = 16;
- config.flags = 0;
-
- lpm = rte_lpm6_create(__func__, SOCKET_ID_ANY, &config);
- TEST_LPM_ASSERT(lpm != NULL);
-
- depth = 128;
- status = rte_lpm6_add(lpm, ip, depth, next_hop_add);
- TEST_LPM_ASSERT(status == 0);
-
- ip[0] = 1;
- depth = 41;
- status = rte_lpm6_add(lpm, ip, depth, next_hop_add);
- TEST_LPM_ASSERT(status == 0);
-
- depth = 49;
- status = rte_lpm6_add(lpm, ip, depth, next_hop_add);
- TEST_LPM_ASSERT(status == -ENOSPC);
-
- rte_lpm6_free(lpm);
-
- return PASS;
-}
-
-/*
- * Creates an LPM table with max_rules = 2 and tries to add 3 rules.
- * Delete one of the rules and tries to add the third one again.
- */
-int32_t
-test13(void)
-{
- struct rte_lpm6 *lpm = NULL;
- struct rte_lpm6_config config;
- uint8_t ip[] = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};
- uint8_t depth, next_hop_add = 100;
- int32_t status = 0;
-
- config.max_rules = 2;
- config.number_tbl8s = NUMBER_TBL8S;
- config.flags = 0;
-
- lpm = rte_lpm6_create(__func__, SOCKET_ID_ANY, &config);
- TEST_LPM_ASSERT(lpm != NULL);
-
- depth = 1;
- status = rte_lpm6_add(lpm, ip, depth, next_hop_add);
- TEST_LPM_ASSERT(status == 0);
-
- depth = 2;
- status = rte_lpm6_add(lpm, ip, depth, next_hop_add);
- TEST_LPM_ASSERT(status == 0);
-
- depth = 3;
- status = rte_lpm6_add(lpm, ip, depth, next_hop_add);
- TEST_LPM_ASSERT(status == -ENOSPC);
-
- depth = 2;
- status = rte_lpm6_delete(lpm, ip, depth);
- TEST_LPM_ASSERT(status == 0);
-
- depth = 3;
- status = rte_lpm6_add(lpm, ip, depth, next_hop_add);
- TEST_LPM_ASSERT(status == 0);
-
- rte_lpm6_free(lpm);
-
- return PASS;
-}
-
-/*
- * Add 2^12 routes with different first 12 bits and depth 25.
- * Add one more route with the same depth and check that results in a failure.
- * After that delete the last rule and create the one that was attempted to be
- * created. This checks tbl8 exhaustion.
- */
-int32_t
-test14(void)
-{
- struct rte_lpm6 *lpm = NULL;
- struct rte_lpm6_config config;
- uint8_t ip[] = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};
- uint8_t depth = 25, next_hop_add = 100;
- int32_t status = 0;
- int i;
-
- config.max_rules = MAX_RULES;
- config.number_tbl8s = 256;
- config.flags = 0;
-
- lpm = rte_lpm6_create(__func__, SOCKET_ID_ANY, &config);
- TEST_LPM_ASSERT(lpm != NULL);
-
- for (i = 0; i < 256; i++) {
- ip[0] = (uint8_t)i;
- status = rte_lpm6_add(lpm, ip, depth, next_hop_add);
- TEST_LPM_ASSERT(status == 0);
- }
-
- ip[0] = 255;
- ip[1] = 1;
- status = rte_lpm6_add(lpm, ip, depth, next_hop_add);
- TEST_LPM_ASSERT(status == -ENOSPC);
-
- ip[0] = 255;
- ip[1] = 0;
- status = rte_lpm6_delete(lpm, ip, depth);
- TEST_LPM_ASSERT(status == 0);
-
- ip[0] = 255;
- ip[1] = 1;
- status = rte_lpm6_add(lpm, ip, depth, next_hop_add);
- TEST_LPM_ASSERT(status == 0);
-
- rte_lpm6_free(lpm);
-
- return PASS;
-}
-
-/*
- * Call add, lookup and delete for a single rule with depth = 24
- */
-int32_t
-test15(void)
-{
- struct rte_lpm6 *lpm = NULL;
- struct rte_lpm6_config config;
- uint8_t ip[] = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};
- uint8_t depth = 24, next_hop_add = 100, next_hop_return = 0;
- int32_t status = 0;
-
- config.max_rules = MAX_RULES;
- config.number_tbl8s = NUMBER_TBL8S;
- config.flags = 0;
-
- lpm = rte_lpm6_create(__func__, SOCKET_ID_ANY, &config);
- TEST_LPM_ASSERT(lpm != NULL);
-
- status = rte_lpm6_add(lpm, ip, depth, next_hop_add);
- TEST_LPM_ASSERT(status == 0);
-
- status = rte_lpm6_lookup(lpm, ip, &next_hop_return);
- TEST_LPM_ASSERT((status == 0) && (next_hop_return == next_hop_add));
-
- status = rte_lpm6_delete(lpm, ip, depth);
- TEST_LPM_ASSERT(status == 0);
-
- status = rte_lpm6_lookup(lpm, ip, &next_hop_return);
- TEST_LPM_ASSERT(status == -ENOENT);
-
- rte_lpm6_free(lpm);
-
- return PASS;
-}
-
-/*
- * Call add, lookup and delete for a single rule with depth > 24
- */
-int32_t
-test16(void)
-{
- struct rte_lpm6 *lpm = NULL;
- struct rte_lpm6_config config;
- uint8_t ip[] = {12,12,1,0,0,0,0,0,0,0,0,0,0,0,0,0};
- uint8_t depth = 128, next_hop_add = 100, next_hop_return = 0;
- int32_t status = 0;
-
- config.max_rules = MAX_RULES;
- config.number_tbl8s = NUMBER_TBL8S;
- config.flags = 0;
-
- lpm = rte_lpm6_create(__func__, SOCKET_ID_ANY, &config);
- TEST_LPM_ASSERT(lpm != NULL);
-
- status = rte_lpm6_add(lpm, ip, depth, next_hop_add);
- TEST_LPM_ASSERT(status == 0);
-
- status = rte_lpm6_lookup(lpm, ip, &next_hop_return);
- TEST_LPM_ASSERT((status == 0) && (next_hop_return == next_hop_add));
-
- status = rte_lpm6_delete(lpm, ip, depth);
- TEST_LPM_ASSERT(status == 0);
-
- status = rte_lpm6_lookup(lpm, ip, &next_hop_return);
- TEST_LPM_ASSERT(status == -ENOENT);
-
- rte_lpm6_free(lpm);
-
- return PASS;
-}
-
-/*
- * Use rte_lpm6_add to add rules which effect only the second half of the lpm
- * table. Use all possible depths ranging from 1..32. Set the next hop = to the
- * depth. Check lookup hit for on every add and check for lookup miss on the
- * first half of the lpm table after each add. Finally delete all rules going
- * backwards (i.e. from depth = 32 ..1) and carry out a lookup after each
- * delete. The lookup should return the next_hop_add value related to the
- * previous depth value (i.e. depth -1).
- */
-int32_t
-test17(void)
-{
- struct rte_lpm6 *lpm = NULL;
- struct rte_lpm6_config config;
- uint8_t ip1[] = {127,255,255,255,255,255,255,255,255,
- 255,255,255,255,255,255,255};
- uint8_t ip2[] = {128,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};
- uint8_t depth, next_hop_add, next_hop_return;
- int32_t status = 0;
-
- config.max_rules = MAX_RULES;
- config.number_tbl8s = NUMBER_TBL8S;
- config.flags = 0;
-
- lpm = rte_lpm6_create(__func__, SOCKET_ID_ANY, &config);
- TEST_LPM_ASSERT(lpm != NULL);
-
- /* Loop with rte_lpm6_add. */
- for (depth = 1; depth <= 16; depth++) {
- /* Let the next_hop_add value = depth. Just for change. */
- next_hop_add = depth;
-
- status = rte_lpm6_add(lpm, ip2, depth, next_hop_add);
- TEST_LPM_ASSERT(status == 0);
-
- /* Check IP in first half of tbl24 which should be empty. */
- status = rte_lpm6_lookup(lpm, ip1, &next_hop_return);
- TEST_LPM_ASSERT(status == -ENOENT);
-
- status = rte_lpm6_lookup(lpm, ip2, &next_hop_return);
- TEST_LPM_ASSERT((status == 0) &&
- (next_hop_return == next_hop_add));
- }
-
- /* Loop with rte_lpm6_delete. */
- for (depth = 16; depth >= 1; depth--) {
- next_hop_add = (uint8_t) (depth - 1);
-
- status = rte_lpm6_delete(lpm, ip2, depth);
- TEST_LPM_ASSERT(status == 0);
-
- status = rte_lpm6_lookup(lpm, ip2, &next_hop_return);
-
- if (depth != 1) {
- TEST_LPM_ASSERT((status == 0) &&
- (next_hop_return == next_hop_add));
- }
- else {
- TEST_LPM_ASSERT(status == -ENOENT);
- }
-
- status = rte_lpm6_lookup(lpm, ip1, &next_hop_return);
- TEST_LPM_ASSERT(status == -ENOENT);
- }
-
- rte_lpm6_free(lpm);
-
- return PASS;
-}
-
-/*
- * - Add & lookup to hit invalid TBL24 entry
- * - Add & lookup to hit valid TBL24 entry not extended
- * - Add & lookup to hit valid extended TBL24 entry with invalid TBL8 entry
- * - Add & lookup to hit valid extended TBL24 entry with valid TBL8 entry
- */
-int32_t
-test18(void)
-{
- struct rte_lpm6 *lpm = NULL;
- struct rte_lpm6_config config;
- uint8_t ip[16], ip_1[16], ip_2[16];
- uint8_t depth, depth_1, depth_2, next_hop_add, next_hop_add_1,
- next_hop_add_2, next_hop_return;
- int32_t status = 0;
-
- config.max_rules = MAX_RULES;
- config.number_tbl8s = NUMBER_TBL8S;
- config.flags = 0;
-
- /* Add & lookup to hit invalid TBL24 entry */
- IPv6(ip, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0);
- depth = 24;
- next_hop_add = 100;
-
- lpm = rte_lpm6_create(__func__, SOCKET_ID_ANY, &config);
- TEST_LPM_ASSERT(lpm != NULL);
-
- status = rte_lpm6_add(lpm, ip, depth, next_hop_add);
- TEST_LPM_ASSERT(status == 0);
-
- status = rte_lpm6_lookup(lpm, ip, &next_hop_return);
- TEST_LPM_ASSERT((status == 0) && (next_hop_return == next_hop_add));
-
- status = rte_lpm6_delete(lpm, ip, depth);
- TEST_LPM_ASSERT(status == 0);
-
- status = rte_lpm6_lookup(lpm, ip, &next_hop_return);
- TEST_LPM_ASSERT(status == -ENOENT);
-
- rte_lpm6_delete_all(lpm);
-
- /* Add & lookup to hit valid TBL24 entry not extended */
- IPv6(ip, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0);
- depth = 23;
- next_hop_add = 100;
-
- status = rte_lpm6_add(lpm, ip, depth, next_hop_add);
- TEST_LPM_ASSERT(status == 0);
-
- status = rte_lpm6_lookup(lpm, ip, &next_hop_return);
- TEST_LPM_ASSERT((status == 0) && (next_hop_return == next_hop_add));
-
- depth = 24;
- next_hop_add = 101;
-
- status = rte_lpm6_add(lpm, ip, depth, next_hop_add);
- TEST_LPM_ASSERT(status == 0);
-
- status = rte_lpm6_lookup(lpm, ip, &next_hop_return);
- TEST_LPM_ASSERT((status == 0) && (next_hop_return == next_hop_add));
-
- depth = 24;
-
- status = rte_lpm6_delete(lpm, ip, depth);
- TEST_LPM_ASSERT(status == 0);
-
- depth = 23;
-
- status = rte_lpm6_delete(lpm, ip, depth);
- TEST_LPM_ASSERT(status == 0);
-
- status = rte_lpm6_lookup(lpm, ip, &next_hop_return);
- TEST_LPM_ASSERT(status == -ENOENT);
-
- rte_lpm6_delete_all(lpm);
-
- /* Add & lookup to hit valid extended TBL24 entry with invalid TBL8
- * entry.
- */
- IPv6(ip, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0);
- depth = 32;
- next_hop_add = 100;
-
- status = rte_lpm6_add(lpm, ip, depth, next_hop_add);
- TEST_LPM_ASSERT(status == 0);
-
- status = rte_lpm6_lookup(lpm, ip, &next_hop_return);
- TEST_LPM_ASSERT((status == 0) && (next_hop_return == next_hop_add));
-
- IPv6(ip, 128, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0);
- depth = 32;
- next_hop_add = 101;
-
- status = rte_lpm6_add(lpm, ip, depth, next_hop_add);
- TEST_LPM_ASSERT(status == 0);
-
- status = rte_lpm6_lookup(lpm, ip, &next_hop_return);
- TEST_LPM_ASSERT((status == 0) && (next_hop_return == next_hop_add));
-
- IPv6(ip, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0);
- depth = 32;
- next_hop_add = 100;
-
- status = rte_lpm6_lookup(lpm, ip, &next_hop_return);
- TEST_LPM_ASSERT((status == 0) && (next_hop_return == next_hop_add));
-
- status = rte_lpm6_delete(lpm, ip, depth);
- TEST_LPM_ASSERT(status == 0);
-
- status = rte_lpm6_lookup(lpm, ip, &next_hop_return);
- TEST_LPM_ASSERT(status == -ENOENT);
-
- rte_lpm6_delete_all(lpm);
-
- /* Add & lookup to hit valid extended TBL24 entry with valid TBL8
- * entry
- */
- IPv6(ip_1, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0);
- depth_1 = 25;
- next_hop_add_1 = 101;
-
- IPv6(ip_2, 128, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0);
- depth_2 = 32;
- next_hop_add_2 = 102;
-
- next_hop_return = 0;
-
- status = rte_lpm6_add(lpm, ip_1, depth_1, next_hop_add_1);
- TEST_LPM_ASSERT(status == 0);
-
- status = rte_lpm6_lookup(lpm, ip_1, &next_hop_return);
- TEST_LPM_ASSERT((status == 0) && (next_hop_return == next_hop_add_1));
-
- status = rte_lpm6_add(lpm, ip_2, depth_2, next_hop_add_2);
- TEST_LPM_ASSERT(status == 0);
-
- status = rte_lpm6_lookup(lpm, ip_2, &next_hop_return);
- TEST_LPM_ASSERT((status == 0) && (next_hop_return == next_hop_add_2));
-
- status = rte_lpm6_delete(lpm, ip_2, depth_2);
- TEST_LPM_ASSERT(status == 0);
-
- status = rte_lpm6_lookup(lpm, ip_2, &next_hop_return);
- TEST_LPM_ASSERT((status == 0) && (next_hop_return == next_hop_add_1));
-
- status = rte_lpm6_delete(lpm, ip_1, depth_1);
- TEST_LPM_ASSERT(status == 0);
-
- status = rte_lpm6_lookup(lpm, ip_1, &next_hop_return);
- TEST_LPM_ASSERT(status == -ENOENT);
-
- rte_lpm6_free(lpm);
-
- return PASS;
-}
-
-/*
- * - Add rule that covers a TBL24 range previously invalid & lookup (& delete &
- * lookup)
- * - Add rule that extends a TBL24 invalid entry & lookup (& delete & lookup)
- * - Add rule that extends a TBL24 valid entry & lookup for both rules (&
- * delete & lookup)
- * - Add rule that updates the next hop in TBL24 & lookup (& delete & lookup)
- * - Add rule that updates the next hop in TBL8 & lookup (& delete & lookup)
- * - Delete a rule that is not present in the TBL24 & lookup
- * - Delete a rule that is not present in the TBL8 & lookup
- */
-int32_t
-test19(void)
-{
- struct rte_lpm6 *lpm = NULL;
- struct rte_lpm6_config config;
- uint8_t ip[16];
- uint8_t depth, next_hop_add, next_hop_return;
- int32_t status = 0;
-
- config.max_rules = MAX_RULES;
- config.number_tbl8s = NUMBER_TBL8S;
- config.flags = 0;
-
- /* Add rule that covers a TBL24 range previously invalid & lookup
- * (& delete & lookup)
- */
- lpm = rte_lpm6_create(__func__, SOCKET_ID_ANY, &config);
- TEST_LPM_ASSERT(lpm != NULL);
-
- IPv6(ip, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0);
- depth = 16;
- next_hop_add = 100;
-
- status = rte_lpm6_add(lpm, ip, depth, next_hop_add);
- TEST_LPM_ASSERT(status == 0);
-
- status = rte_lpm6_lookup(lpm, ip, &next_hop_return);
- TEST_LPM_ASSERT((status == 0) && (next_hop_return == next_hop_add));
-
- status = rte_lpm6_delete(lpm, ip, depth);
- TEST_LPM_ASSERT(status == 0);
-
- status = rte_lpm6_lookup(lpm, ip, &next_hop_return);
- TEST_LPM_ASSERT(status == -ENOENT);
-
- rte_lpm6_delete_all(lpm);
-
- IPv6(ip, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0);
- depth = 25;
- next_hop_add = 100;
-
- status = rte_lpm6_add(lpm, ip, depth, next_hop_add);
- TEST_LPM_ASSERT(status == 0);
-
- status = rte_lpm6_lookup(lpm, ip, &next_hop_return);
- TEST_LPM_ASSERT((status == 0) && (next_hop_return == next_hop_add));
-
- status = rte_lpm6_delete(lpm, ip, depth);
- TEST_LPM_ASSERT(status == 0);
-
- rte_lpm6_delete_all(lpm);
-
- /*
- * Add rule that extends a TBL24 valid entry & lookup for both rules
- * (& delete & lookup)
- */
-
- IPv6(ip, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0);
- depth = 24;
- next_hop_add = 100;
-
- status = rte_lpm6_add(lpm, ip, depth, next_hop_add);
- TEST_LPM_ASSERT(status == 0);
-
- IPv6(ip, 128, 0, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0);
- depth = 32;
- next_hop_add = 101;
-
- status = rte_lpm6_add(lpm, ip, depth, next_hop_add);
- TEST_LPM_ASSERT(status == 0);
-
- status = rte_lpm6_lookup(lpm, ip, &next_hop_return);
- TEST_LPM_ASSERT((status == 0) && (next_hop_return == next_hop_add));
-
- IPv6(ip, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0);
- next_hop_add = 100;
-
- status = rte_lpm6_lookup(lpm, ip, &next_hop_return);
- TEST_LPM_ASSERT((status == 0) && (next_hop_return == next_hop_add));
-
- IPv6(ip, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0);
- depth = 24;
-
- status = rte_lpm6_delete(lpm, ip, depth);
- TEST_LPM_ASSERT(status == 0);
-
- status = rte_lpm6_lookup(lpm, ip, &next_hop_return);
- TEST_LPM_ASSERT(status == -ENOENT);
-
- IPv6(ip, 128, 0, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0);
- depth = 32;
-
- status = rte_lpm6_delete(lpm, ip, depth);
- TEST_LPM_ASSERT(status == 0);
-
- status = rte_lpm6_lookup(lpm, ip, &next_hop_return);
- TEST_LPM_ASSERT(status == -ENOENT);
-
- rte_lpm6_delete_all(lpm);
-
- /*
- * Add rule that updates the next hop in TBL24 & lookup
- * (& delete & lookup)
- */
-
- IPv6(ip, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0);
- depth = 24;
- next_hop_add = 100;
-
- status = rte_lpm6_add(lpm, ip, depth, next_hop_add);
- TEST_LPM_ASSERT(status == 0);
-
- status = rte_lpm6_lookup(lpm, ip, &next_hop_return);
- TEST_LPM_ASSERT((status == 0) && (next_hop_return == next_hop_add));
-
- next_hop_add = 101;
-
- status = rte_lpm6_add(lpm, ip, depth, next_hop_add);
- TEST_LPM_ASSERT(status == 0);
-
- status = rte_lpm6_lookup(lpm, ip, &next_hop_return);
- TEST_LPM_ASSERT((status == 0) && (next_hop_return == next_hop_add));
-
- status = rte_lpm6_delete(lpm, ip, depth);
- TEST_LPM_ASSERT(status == 0);
-
- status = rte_lpm6_lookup(lpm, ip, &next_hop_return);
- TEST_LPM_ASSERT(status == -ENOENT);
-
- rte_lpm6_delete_all(lpm);
-
- /*
- * Add rule that updates the next hop in TBL8 & lookup
- * (& delete & lookup)
- */
-
- IPv6(ip, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0);
- depth = 32;
- next_hop_add = 100;
-
- status = rte_lpm6_add(lpm, ip, depth, next_hop_add);
- TEST_LPM_ASSERT(status == 0);
-
- status = rte_lpm6_lookup(lpm, ip, &next_hop_return);
- TEST_LPM_ASSERT((status == 0) && (next_hop_return == next_hop_add));
-
- next_hop_add = 101;
-
- status = rte_lpm6_add(lpm, ip, depth, next_hop_add);
- TEST_LPM_ASSERT(status == 0);
-
- status = rte_lpm6_lookup(lpm, ip, &next_hop_return);
- TEST_LPM_ASSERT((status == 0) && (next_hop_return == next_hop_add));
-
- status = rte_lpm6_delete(lpm, ip, depth);
- TEST_LPM_ASSERT(status == 0);
-
- status = rte_lpm6_lookup(lpm, ip, &next_hop_return);
- TEST_LPM_ASSERT(status == -ENOENT);
-
- rte_lpm6_delete_all(lpm);
-
- /* Delete a rule that is not present in the TBL24 & lookup */
-
- IPv6(ip, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0);
- depth = 24;
- next_hop_add = 100;
-
- status = rte_lpm6_delete(lpm, ip, depth);
- TEST_LPM_ASSERT(status < 0);
-
- status = rte_lpm6_lookup(lpm, ip, &next_hop_return);
- TEST_LPM_ASSERT(status == -ENOENT);
-
- rte_lpm6_delete_all(lpm);
-
- /* Delete a rule that is not present in the TBL8 & lookup */
-
- IPv6(ip, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0);
- depth = 32;
- next_hop_add = 100;
-
- status = rte_lpm6_delete(lpm, ip, depth);
- TEST_LPM_ASSERT(status < 0);
-
- status = rte_lpm6_lookup(lpm, ip, &next_hop_return);
- TEST_LPM_ASSERT(status == -ENOENT);
-
- rte_lpm6_free(lpm);
-
- return PASS;
-}
-
-/*
- * Add two rules, lookup to hit the more specific one, lookup to hit the less
- * specific one delete the less specific rule and lookup previous values again;
- * add a more specific rule than the existing rule, lookup again
- */
-int32_t
-test20(void)
-{
- struct rte_lpm6 *lpm = NULL;
- struct rte_lpm6_config config;
- uint8_t ip[16];
- uint8_t depth, next_hop_add, next_hop_return;
- int32_t status = 0;
-
- config.max_rules = MAX_RULES;
- config.number_tbl8s = NUMBER_TBL8S;
- config.flags = 0;
-
- lpm = rte_lpm6_create(__func__, SOCKET_ID_ANY, &config);
- TEST_LPM_ASSERT(lpm != NULL);
-
- IPv6(ip, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0);
- depth = 24;
- next_hop_add = 100;
-
- status = rte_lpm6_add(lpm, ip, depth, next_hop_add);
- TEST_LPM_ASSERT(status == 0);
-
- IPv6(ip, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10);
- depth = 128;
- next_hop_add = 101;
-
- status = rte_lpm6_add(lpm, ip, depth, next_hop_add);
- TEST_LPM_ASSERT(status == 0);
-
- status = rte_lpm6_lookup(lpm, ip, &next_hop_return);
- TEST_LPM_ASSERT((status == 0) && (next_hop_return == next_hop_add));
-
- IPv6(ip, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0);
- next_hop_add = 100;
-
- status = rte_lpm6_lookup(lpm, ip, &next_hop_return);
- TEST_LPM_ASSERT((status == 0) && (next_hop_return == next_hop_add));
-
- IPv6(ip, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0);
- depth = 24;
-
- status = rte_lpm6_delete(lpm, ip, depth);
- TEST_LPM_ASSERT(status == 0);
-
- status = rte_lpm6_lookup(lpm, ip, &next_hop_return);
- TEST_LPM_ASSERT(status == -ENOENT);
-
- IPv6(ip, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10);
- depth = 128;
-
- status = rte_lpm6_delete(lpm, ip, depth);
- TEST_LPM_ASSERT(status == 0);
-
- status = rte_lpm6_lookup(lpm, ip, &next_hop_return);
- TEST_LPM_ASSERT(status == -ENOENT);
-
- rte_lpm6_free(lpm);
-
- return PASS;
-}
-
-/*
- * Adds 3 rules and look them up through the lookup_bulk function.
- * Includes in the lookup a fourth IP address that won't match
- * and checks that the result is as expected.
- */
-int32_t
-test21(void)
-{
- struct rte_lpm6 *lpm = NULL;
- struct rte_lpm6_config config;
- uint8_t ip_batch[4][16];
- uint8_t depth, next_hop_add;
- int16_t next_hop_return[4];
- int32_t status = 0;
-
- config.max_rules = MAX_RULES;
- config.number_tbl8s = NUMBER_TBL8S;
- config.flags = 0;
-
- lpm = rte_lpm6_create(__func__, SOCKET_ID_ANY, &config);
- TEST_LPM_ASSERT(lpm != NULL);
-
- IPv6(ip_batch[0], 128, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0);
- depth = 48;
- next_hop_add = 100;
-
- status = rte_lpm6_add(lpm, ip_batch[0], depth, next_hop_add);
- TEST_LPM_ASSERT(status == 0);
-
- IPv6(ip_batch[1], 128, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0);
- depth = 48;
- next_hop_add = 101;
-
- status = rte_lpm6_add(lpm, ip_batch[1], depth, next_hop_add);
- TEST_LPM_ASSERT(status == 0);
-
- IPv6(ip_batch[2], 128, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0);
- depth = 48;
- next_hop_add = 102;
-
- status = rte_lpm6_add(lpm, ip_batch[2], depth, next_hop_add);
- TEST_LPM_ASSERT(status == 0);
-
- IPv6(ip_batch[3], 128, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0);
-
- status = rte_lpm6_lookup_bulk_func(lpm, ip_batch,
- next_hop_return, 4);
- TEST_LPM_ASSERT(status == 0 && next_hop_return[0] == 100
- && next_hop_return[1] == 101 && next_hop_return[2] == 102
- && next_hop_return[3] == -1);
-
- rte_lpm6_free(lpm);
-
- return PASS;
-}
-
-/*
- * Adds 5 rules and look them up.
- * Use the delete_bulk function to delete two of them. Lookup again.
- * Use the delete_bulk function to delete one more. Lookup again.
- * Use the delete_bulk function to delete two more, one invalid. Lookup again.
- * Use the delete_bulk function to delete the remaining one. Lookup again.
- */
-int32_t
-test22(void)
-{
- struct rte_lpm6 *lpm = NULL;
- struct rte_lpm6_config config;
- uint8_t ip_batch[5][16];
- uint8_t depth[5], next_hop_add;
- int16_t next_hop_return[5];
- int32_t status = 0;
-
- config.max_rules = MAX_RULES;
- config.number_tbl8s = NUMBER_TBL8S;
- config.flags = 0;
-
- lpm = rte_lpm6_create(__func__, SOCKET_ID_ANY, &config);
- TEST_LPM_ASSERT(lpm != NULL);
-
- /* Adds 5 rules and look them up */
-
- IPv6(ip_batch[0], 128, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0);
- depth[0] = 48;
- next_hop_add = 101;
-
- status = rte_lpm6_add(lpm, ip_batch[0], depth[0], next_hop_add);
- TEST_LPM_ASSERT(status == 0);
-
- IPv6(ip_batch[1], 128, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0);
- depth[1] = 48;
- next_hop_add = 102;
-
- status = rte_lpm6_add(lpm, ip_batch[1], depth[1], next_hop_add);
- TEST_LPM_ASSERT(status == 0);
-
- IPv6(ip_batch[2], 128, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0);
- depth[2] = 48;
- next_hop_add = 103;
-
- status = rte_lpm6_add(lpm, ip_batch[2], depth[2], next_hop_add);
- TEST_LPM_ASSERT(status == 0);
-
- IPv6(ip_batch[3], 128, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0);
- depth[3] = 48;
- next_hop_add = 104;
-
- status = rte_lpm6_add(lpm, ip_batch[3], depth[3], next_hop_add);
- TEST_LPM_ASSERT(status == 0);
-
- IPv6(ip_batch[4], 128, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0);
- depth[4] = 48;
- next_hop_add = 105;
-
- status = rte_lpm6_add(lpm, ip_batch[4], depth[4], next_hop_add);
- TEST_LPM_ASSERT(status == 0);
-
- status = rte_lpm6_lookup_bulk_func(lpm, ip_batch,
- next_hop_return, 5);
- TEST_LPM_ASSERT(status == 0 && next_hop_return[0] == 101
- && next_hop_return[1] == 102 && next_hop_return[2] == 103
- && next_hop_return[3] == 104 && next_hop_return[4] == 105);
-
- /* Use the delete_bulk function to delete two of them. Lookup again */
-
- status = rte_lpm6_delete_bulk_func(lpm, &ip_batch[0], depth, 2);
- TEST_LPM_ASSERT(status == 0);
-
- status = rte_lpm6_lookup_bulk_func(lpm, ip_batch,
- next_hop_return, 5);
- TEST_LPM_ASSERT(status == 0 && next_hop_return[0] == -1
- && next_hop_return[1] == -1 && next_hop_return[2] == 103
- && next_hop_return[3] == 104 && next_hop_return[4] == 105);
-
- /* Use the delete_bulk function to delete one more. Lookup again */
-
- status = rte_lpm6_delete_bulk_func(lpm, &ip_batch[2], depth, 1);
- TEST_LPM_ASSERT(status == 0);
-
- status = rte_lpm6_lookup_bulk_func(lpm, ip_batch,
- next_hop_return, 5);
- TEST_LPM_ASSERT(status == 0 && next_hop_return[0] == -1
- && next_hop_return[1] == -1 && next_hop_return[2] == -1
- && next_hop_return[3] == 104 && next_hop_return[4] == 105);
-
- /* Use the delete_bulk function to delete two, one invalid. Lookup again */
-
- IPv6(ip_batch[4], 128, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0);
- status = rte_lpm6_delete_bulk_func(lpm, &ip_batch[3], depth, 2);
- TEST_LPM_ASSERT(status == 0);
-
- IPv6(ip_batch[4], 128, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0);
- status = rte_lpm6_lookup_bulk_func(lpm, ip_batch,
- next_hop_return, 5);
- TEST_LPM_ASSERT(status == 0 && next_hop_return[0] == -1
- && next_hop_return[1] == -1 && next_hop_return[2] == -1
- && next_hop_return[3] == -1 && next_hop_return[4] == 105);
-
- /* Use the delete_bulk function to delete the remaining one. Lookup again */
-
- status = rte_lpm6_delete_bulk_func(lpm, &ip_batch[4], depth, 1);
- TEST_LPM_ASSERT(status == 0);
-
- status = rte_lpm6_lookup_bulk_func(lpm, ip_batch,
- next_hop_return, 5);
- TEST_LPM_ASSERT(status == 0 && next_hop_return[0] == -1
- && next_hop_return[1] == -1 && next_hop_return[2] == -1
- && next_hop_return[3] == -1 && next_hop_return[4] == -1);
-
- rte_lpm6_free(lpm);
-
- return PASS;
-}
-
-/*
- * Add an extended rule (i.e. depth greater than 24, lookup (hit), delete,
- * lookup (miss) in a for loop of 30 times. This will check tbl8 extension
- * and contraction.
- */
-int32_t
-test23(void)
-{
- struct rte_lpm6 *lpm = NULL;
- struct rte_lpm6_config config;
- uint32_t i;
- uint8_t ip[16];
- uint8_t depth, next_hop_add, next_hop_return;
- int32_t status = 0;
-
- config.max_rules = MAX_RULES;
- config.number_tbl8s = NUMBER_TBL8S;
- config.flags = 0;
-
- lpm = rte_lpm6_create(__func__, SOCKET_ID_ANY, &config);
- TEST_LPM_ASSERT(lpm != NULL);
-
- IPv6(ip, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0);
- depth = 128;
- next_hop_add = 100;
-
- for (i = 0; i < 30; i++) {
- status = rte_lpm6_add(lpm, ip, depth, next_hop_add);
- TEST_LPM_ASSERT(status == 0);
-
- status = rte_lpm6_lookup(lpm, ip, &next_hop_return);
- TEST_LPM_ASSERT((status == 0) &&
- (next_hop_return == next_hop_add));
-
- status = rte_lpm6_delete(lpm, ip, depth);
- TEST_LPM_ASSERT(status == 0);
-
- status = rte_lpm6_lookup(lpm, ip, &next_hop_return);
- TEST_LPM_ASSERT(status == -ENOENT);
- }
-
- rte_lpm6_free(lpm);
-
- return PASS;
-}
-
-/*
- * Sequence of operations for find existing lpm table
- *
- * - create table
- * - find existing table: hit
- * - find non-existing table: miss
- */
-int32_t
-test24(void)
-{
- struct rte_lpm6 *lpm = NULL, *result = NULL;
- struct rte_lpm6_config config;
-
- config.max_rules = 256 * 32;
- config.number_tbl8s = NUMBER_TBL8S;
- config.flags = 0;
-
- /* Create lpm */
- lpm = rte_lpm6_create("lpm_find_existing", SOCKET_ID_ANY, &config);
- TEST_LPM_ASSERT(lpm != NULL);
-
- /* Try to find existing lpm */
- result = rte_lpm6_find_existing("lpm_find_existing");
- TEST_LPM_ASSERT(result == lpm);
-
- /* Try to find non-existing lpm */
- result = rte_lpm6_find_existing("lpm_find_non_existing");
- TEST_LPM_ASSERT(result == NULL);
-
- /* Cleanup. */
- rte_lpm6_delete_all(lpm);
- rte_lpm6_free(lpm);
-
- return PASS;
-}
-
-/*
- * Add a set of random routes with random depths.
- * Lookup different IP addresses that match the routes previously added.
- * Checks that the next hop is the expected one.
- * The routes, IP addresses and expected result for every case have been
- * precalculated by using a python script and stored in a .h file.
- */
-int32_t
-test25(void)
-{
- struct rte_lpm6 *lpm = NULL;
- struct rte_lpm6_config config;
- uint8_t ip[16];
- uint32_t i;
- uint8_t depth, next_hop_add, next_hop_return, next_hop_expected;
- int32_t status = 0;
-
- config.max_rules = MAX_RULES;
- config.number_tbl8s = NUMBER_TBL8S;
- config.flags = 0;
-
- lpm = rte_lpm6_create(__func__, SOCKET_ID_ANY, &config);
- TEST_LPM_ASSERT(lpm != NULL);
-
- for (i = 0; i < 1000; i++) {
- memcpy(ip, large_route_table[i].ip, 16);
- depth = large_route_table[i].depth;
- next_hop_add = large_route_table[i].next_hop;
- status = rte_lpm6_add(lpm, ip, depth, next_hop_add);
- TEST_LPM_ASSERT(status == 0);
- }
-
- /* generate large IPS table and expected next_hops */
- generate_large_ips_table(1);
-
- for (i = 0; i < 100000; i++) {
- memcpy(ip, large_ips_table[i].ip, 16);
- next_hop_expected = large_ips_table[i].next_hop;
-
- status = rte_lpm6_lookup(lpm, ip, &next_hop_return);
- TEST_LPM_ASSERT((status == 0) &&
- (next_hop_return == next_hop_expected));
- }
-
- rte_lpm6_free(lpm);
-
- return PASS;
-}
-
-/*
- * Test for overwriting of tbl8:
- * - add rule /32 and lookup
- * - add new rule /24 and lookup
- * - add third rule /25 and lookup
- * - lookup /32 and /24 rule to ensure the table has not been overwritten.
- */
-int32_t
-test26(void)
-{
- struct rte_lpm6 *lpm = NULL;
- struct rte_lpm6_config config;
- uint8_t ip_10_32[] = {10, 10, 10, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
- uint8_t ip_10_24[] = {10, 10, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
- uint8_t ip_20_25[] = {10, 10, 20, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
- uint8_t d_ip_10_32 = 32;
- uint8_t d_ip_10_24 = 24;
- uint8_t d_ip_20_25 = 25;
- uint8_t next_hop_ip_10_32 = 100;
- uint8_t next_hop_ip_10_24 = 105;
- uint8_t next_hop_ip_20_25 = 111;
- uint8_t next_hop_return = 0;
- int32_t status = 0;
-
- config.max_rules = MAX_RULES;
- config.number_tbl8s = NUMBER_TBL8S;
- config.flags = 0;
-
- lpm = rte_lpm6_create(__func__, SOCKET_ID_ANY, &config);
- TEST_LPM_ASSERT(lpm != NULL);
-
- if ((status = rte_lpm6_add(lpm, ip_10_32, d_ip_10_32,
- next_hop_ip_10_32)) < 0)
- return -1;
-
- status = rte_lpm6_lookup(lpm, ip_10_32, &next_hop_return);
- uint8_t test_hop_10_32 = next_hop_return;
- TEST_LPM_ASSERT(status == 0);
- TEST_LPM_ASSERT(next_hop_return == next_hop_ip_10_32);
-
- if ((status = rte_lpm6_add(lpm, ip_10_24, d_ip_10_24,
- next_hop_ip_10_24)) < 0)
- return -1;
-
- status = rte_lpm6_lookup(lpm, ip_10_24, &next_hop_return);
- uint8_t test_hop_10_24 = next_hop_return;
- TEST_LPM_ASSERT(status == 0);
- TEST_LPM_ASSERT(next_hop_return == next_hop_ip_10_24);
-
- if ((status = rte_lpm6_add(lpm, ip_20_25, d_ip_20_25,
- next_hop_ip_20_25)) < 0)
- return -1;
-
- status = rte_lpm6_lookup(lpm, ip_20_25, &next_hop_return);
- uint8_t test_hop_20_25 = next_hop_return;
- TEST_LPM_ASSERT(status == 0);
- TEST_LPM_ASSERT(next_hop_return == next_hop_ip_20_25);
-
- if (test_hop_10_32 == test_hop_10_24) {
- printf("Next hop return equal\n");
- return -1;
- }
-
- if (test_hop_10_24 == test_hop_20_25){
- printf("Next hop return equal\n");
- return -1;
- }
-
- status = rte_lpm6_lookup(lpm, ip_10_32, &next_hop_return);
- TEST_LPM_ASSERT(status == 0);
- TEST_LPM_ASSERT(next_hop_return == next_hop_ip_10_32);
-
- status = rte_lpm6_lookup(lpm, ip_10_24, &next_hop_return);
- TEST_LPM_ASSERT(status == 0);
- TEST_LPM_ASSERT(next_hop_return == next_hop_ip_10_24);
-
- rte_lpm6_free(lpm);
-
- return PASS;
-}
-
-/*
- * Add a rule that reaches the end of the tree.
- * Add a rule that is more generic than the first one.
- * Check every possible combination that produces a match for the second rule.
- * This tests tbl expansion.
- */
-int32_t
-test27(void)
-{
- struct rte_lpm6 *lpm = NULL;
- struct rte_lpm6_config config;
- uint8_t ip[] = {128,128,128,128,128,128,128,128,128,128,128,128,128,128,0,0};
- uint8_t depth = 128, next_hop_add = 100, next_hop_return;
- int32_t status = 0;
- int i, j;
-
- config.max_rules = MAX_RULES;
- config.number_tbl8s = NUMBER_TBL8S;
- config.flags = 0;
-
- lpm = rte_lpm6_create(__func__, SOCKET_ID_ANY, &config);
- TEST_LPM_ASSERT(lpm != NULL);
-
- depth = 128;
- next_hop_add = 128;
- status = rte_lpm6_add(lpm, ip, depth, next_hop_add);
- TEST_LPM_ASSERT(status == 0);
-
- depth = 112;
- next_hop_add = 112;
- status = rte_lpm6_add(lpm, ip, depth, next_hop_add);
- TEST_LPM_ASSERT(status == 0);
-
- for (i = 0; i < 256; i++) {
- ip[14] = (uint8_t)i;
- for (j = 0; j < 256; j++) {
- ip[15] = (uint8_t)j;
- status = rte_lpm6_lookup(lpm, ip, &next_hop_return);
- if (i == 0 && j == 0)
- TEST_LPM_ASSERT(status == 0 && next_hop_return == 128);
- else
- TEST_LPM_ASSERT(status == 0 && next_hop_return == 112);
- }
- }
-
- rte_lpm6_free(lpm);
-
- return PASS;
-}
-
-/*
- * Do all unit tests.
- */
-static int
-test_lpm6(void)
-{
- unsigned i;
- int status = -1, global_status = 0;
-
- for (i = 0; i < NUM_LPM6_TESTS; i++) {
- printf("# test %02d\n", i);
- status = tests6[i]();
-
- if (status < 0) {
- printf("ERROR: LPM Test %s: FAIL\n", RTE_STR(tests6[i]));
- global_status = status;
- }
- }
-
- return global_status;
-}
-
-REGISTER_TEST_COMMAND(lpm6_autotest, test_lpm6);
diff --git a/app/test/test_lpm6_data.h b/app/test/test_lpm6_data.h
deleted file mode 100644
index c3573b2b..00000000
--- a/app/test/test_lpm6_data.h
+++ /dev/null
@@ -1,1188 +0,0 @@
-/*-
- * BSD LICENSE
- *
- * Copyright(c) 2010-2016 Intel Corporation. All rights reserved.
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * * Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * * Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in
- * the documentation and/or other materials provided with the
- * distribution.
- * * Neither the name of Intel Corporation nor the names of its
- * contributors may be used to endorse or promote products derived
- * from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
- * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
- * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-#ifndef _TEST_LPM_ROUTES_H_
-#define _TEST_LPM_ROUTES_H_
-
-#include <stdint.h>
-#include <stdlib.h>
-
-struct rules_tbl_entry {
- uint8_t ip[16];
- uint8_t depth;
- uint8_t next_hop;
-};
-
-struct ips_tbl_entry {
- uint8_t ip[16];
- uint8_t next_hop;
-};
-
-/* this large_route_table[ ] is the same as the one with same name
- * in previous test_lpm6_routes.h . Because this table has only 1000
- * lines, keeping it doesn't make LPM6 test case so large and also
- * make the algorithm to generate rule table unnecessary and the
- * algorithm to genertate test input IPv6 and associated expected
- * next_hop much simple.
- */
-
-static struct rules_tbl_entry large_route_table[] = {
- {{66, 70, 154, 143, 197, 233, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 50, 146},
- {{107, 79, 18, 235, 142, 84, 80, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 54, 141},
- {{247, 132, 113, 1, 215, 247, 183, 239, 128, 0, 0, 0, 0, 0, 0, 0}, 67, 23},
- {{48, 19, 41, 12, 76, 101, 114, 160, 45, 103, 134, 146, 128, 0, 0, 0}, 97, 252},
- {{5, 70, 208, 170, 19, 0, 116, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 54, 6},
- {{1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 9, 137},
- {{12, 188, 26, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 31, 9},
- {{1, 235, 101, 202, 26, 92, 23, 22, 179, 223, 128, 0, 0, 0, 0, 0}, 82, 9},
- {{215, 19, 224, 102, 45, 133, 102, 249, 56, 20, 214, 219, 93, 125, 52, 0}, 120, 163},
- {{178, 183, 109, 64, 136, 84, 11, 53, 217, 102, 0, 0, 0, 0, 0, 0}, 79, 197},
- {{212, 39, 158, 71, 253, 98, 248, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 54, 249},
- {{92, 58, 159, 130, 105, 56, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 47, 88},
- {{118, 140, 65, 198, 212, 93, 144, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 52, 104},
- {{86, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 10, 36},
- {{79, 135, 242, 193, 197, 11, 200, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 54, 239},
- {{163, 228, 239, 80, 41, 66, 176, 176, 0, 0, 0, 0, 0, 0, 0, 0}, 67, 201},
- {{31, 9, 231, 42, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 33, 94},
- {{108, 144, 205, 39, 215, 26, 96, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 51, 241},
- {{247, 217, 172, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 24, 239},
- {{24, 186, 73, 182, 240, 251, 125, 165, 0, 0, 0, 0, 0, 0, 0, 0}, 66, 151},
- {{245, 112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 12, 137},
- {{44, 94, 138, 224, 168, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 41, 231},
- {{184, 221, 109, 135, 225, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 44, 11},
- {{51, 179, 136, 184, 30, 118, 24, 16, 26, 161, 206, 101, 0, 0, 0, 0}, 96, 20},
- {{48, 46, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 15, 68},
- {{143, 235, 237, 220, 89, 119, 187, 143, 209, 94, 46, 58, 120, 0, 0, 0}, 101, 64},
- {{121, 190, 90, 177, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 33, 152},
- {{128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 6, 217},
- {{128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 2, 101},
- {{111, 214, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 15, 58},
- {{162, 23, 52, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 27, 254},
- {{76, 103, 44, 79, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 32, 148},
- {{80, 85, 219, 214, 12, 4, 65, 129, 162, 148, 208, 78, 39, 69, 94, 184}, 126, 126},
- {{80, 54, 251, 28, 152, 23, 244, 192, 151, 83, 6, 144, 223, 213, 224, 128}, 123, 76},
- {{39, 232, 237, 103, 191, 188, 36, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 54, 240},
- {{20, 231, 89, 210, 167, 173, 80, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 54, 33},
- {{125, 67, 198, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 25, 47},
- {{26, 239, 153, 5, 213, 121, 31, 114, 161, 46, 84, 15, 148, 160, 0, 0}, 109, 41},
- {{102, 212, 159, 118, 223, 115, 134, 172, 0, 0, 0, 0, 0, 0, 0, 0}, 62, 72},
- {{85, 181, 241, 127, 3, 44, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 46, 43},
- {{61, 199, 131, 226, 3, 230, 94, 119, 240, 0, 0, 0, 0, 0, 0, 0}, 68, 26},
- {{0, 143, 160, 184, 162, 192, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 42, 139},
- {{170, 24, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 13, 219},
- {{61, 122, 24, 251, 124, 122, 202, 192, 0, 0, 0, 0, 0, 0, 0, 0}, 58, 105},
- {{33, 219, 226, 3, 180, 190, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 47, 210},
- {{51, 251, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 17, 151},
- {{106, 185, 11, 122, 197, 192, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 42, 28},
- {{192, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 9, 64},
- {{239, 195, 77, 239, 131, 156, 2, 246, 191, 178, 204, 160, 21, 213, 30, 128}, 121, 9},
- {{141, 207, 181, 99, 55, 245, 151, 228, 65, 50, 85, 16, 0, 0, 0, 0}, 92, 250},
- {{110, 159, 230, 251, 224, 210, 58, 49, 0, 0, 0, 0, 0, 0, 0, 0}, 66, 200},
- {{134, 26, 104, 32, 129, 41, 201, 50, 164, 69, 178, 156, 156, 133, 8, 218}, 127, 132},
- {{253, 207, 116, 105, 210, 166, 186, 99, 182, 0, 0, 0, 0, 0, 0, 0}, 71, 182},
- {{211, 73, 38, 80, 183, 168, 52, 138, 25, 214, 112, 8, 252, 0, 0, 0}, 102, 7},
- {{200, 244, 108, 238, 164, 141, 215, 39, 233, 249, 120, 80, 112, 0, 0, 0}, 100, 146},
- {{107, 44, 250, 202, 64, 37, 107, 105, 140, 0, 0, 0, 0, 0, 0, 0}, 70, 98},
- {{93, 86, 56, 27, 159, 195, 126, 39, 240, 201, 48, 0, 0, 0, 0, 0}, 86, 179},
- {{32, 202, 214, 242, 39, 141, 61, 146, 138, 96, 0, 0, 0, 0, 0, 0}, 77, 245},
- {{167, 77, 249, 28, 210, 196, 227, 241, 0, 0, 0, 0, 0, 0, 0, 0}, 64, 2},
- {{241, 59, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 17, 5},
- {{143, 68, 146, 210, 173, 155, 251, 173, 0, 0, 0, 0, 0, 0, 0, 0}, 66, 169},
- {{167, 180, 226, 144, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 33, 52},
- {{241, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 9, 177},
- {{238, 9, 168, 96, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 27, 74},
- {{203, 148, 16, 96, 125, 18, 86, 1, 91, 244, 251, 20, 31, 14, 75, 128}, 122, 212},
- {{111, 227, 137, 94, 65, 21, 77, 137, 119, 130, 159, 19, 159, 45, 18, 192}, 122, 238},
- {{59, 144, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 19, 18},
- {{110, 192, 255, 120, 84, 215, 3, 130, 38, 224, 0, 0, 0, 0, 0, 0}, 75, 155},
- {{152, 79, 219, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 24, 97},
- {{118, 186, 157, 248, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 32, 8},
- {{70, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 9, 123},
- {{253, 119, 114, 227, 18, 243, 81, 61, 238, 107, 190, 144, 0, 0, 0, 0}, 92, 11},
- {{166, 112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 13, 211},
- {{43, 95, 224, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 20, 116},
- {{94, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 11, 57},
- {{182, 251, 195, 132, 66, 7, 208, 146, 223, 231, 211, 181, 25, 176, 0, 0}, 108, 178},
- {{152, 166, 111, 233, 194, 17, 230, 41, 221, 253, 69, 123, 108, 0, 0, 0}, 102, 93},
- {{106, 141, 235, 190, 82, 241, 152, 186, 195, 81, 86, 144, 0, 0, 0, 0}, 92, 3},
- {{32, 81, 210, 153, 151, 29, 11, 62, 127, 177, 194, 254, 103, 83, 58, 128}, 121, 162},
- {{79, 112, 224, 26, 174, 39, 98, 181, 115, 57, 209, 189, 136, 48, 0, 0}, 109, 125},
- {{106, 197, 83, 151, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 34, 33},
- {{190, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 9, 254},
- {{156, 73, 249, 148, 55, 192, 20, 42, 142, 128, 0, 0, 0, 0, 0, 0}, 74, 66},
- {{64, 107, 36, 120, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 30, 4},
- {{115, 148, 71, 250, 158, 174, 168, 249, 106, 110, 196, 0, 0, 0, 0, 0}, 86, 122},
- {{18, 139, 152, 44, 38, 88, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 46, 59},
- {{55, 229, 117, 106, 146, 95, 74, 220, 122, 0, 84, 202, 183, 138, 120, 0}, 117, 99},
- {{153, 211, 3, 96, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 27, 41},
- {{1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 8, 112},
- {{49, 192, 102, 142, 216, 3, 114, 64, 165, 128, 168, 0, 0, 0, 0, 0}, 85, 255},
- {{201, 143, 240, 240, 209, 224, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 44, 106},
- {{158, 19, 164, 196, 87, 162, 33, 120, 0, 0, 0, 0, 0, 0, 0, 0}, 62, 170},
- {{5, 114, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 16, 86},
- {{34, 170, 246, 62, 198, 85, 193, 227, 252, 68, 0, 0, 0, 0, 0, 0}, 79, 155},
- {{21, 52, 9, 86, 224, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 35, 65},
- {{203, 81, 49, 171, 224, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 36, 39},
- {{211, 218, 87, 244, 93, 181, 118, 41, 156, 143, 254, 0, 0, 0, 0, 0}, 90, 162},
- {{77, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 10, 69},
- {{158, 219, 219, 39, 4, 219, 100, 63, 0, 0, 0, 0, 0, 0, 0, 0}, 64, 163},
- {{61, 50, 232, 1, 185, 252, 243, 54, 189, 240, 170, 192, 0, 0, 0, 0}, 90, 116},
- {{241, 143, 33, 19, 247, 55, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 53, 19},
- {{61, 28, 61, 252, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 36, 48},
- {{102, 112, 194, 108, 90, 253, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 49, 230},
- {{74, 88, 58, 66, 172, 41, 144, 204, 195, 240, 0, 0, 0, 0, 0, 0}, 78, 155},
- {{44, 148, 187, 58, 190, 59, 190, 187, 124, 138, 222, 131, 0, 0, 0, 0}, 96, 158},
- {{67, 7, 216, 139, 93, 224, 20, 135, 186, 86, 209, 111, 60, 80, 0, 0}, 113, 252},
- {{209, 26, 12, 174, 5, 101, 164, 181, 237, 63, 192, 57, 54, 120, 0, 0}, 110, 176},
- {{4, 66, 232, 52, 239, 56, 48, 58, 192, 0, 0, 0, 0, 0, 0, 0}, 66, 211},
- {{158, 165, 2, 144, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 28, 15},
- {{85, 204, 245, 198, 68, 44, 39, 71, 32, 0, 0, 0, 0, 0, 0, 0}, 68, 95},
- {{181, 134, 25, 87, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 34, 169},
- {{26, 230, 61, 36, 79, 192, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 44, 249},
- {{5, 170, 198, 139, 65, 186, 188, 45, 42, 253, 165, 89, 206, 0, 0, 0}, 105, 61},
- {{211, 245, 62, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 23, 63},
- {{117, 68, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 14, 43},
- {{103, 17, 123, 102, 70, 206, 90, 92, 124, 198, 0, 0, 0, 0, 0, 0}, 81, 228},
- {{192, 237, 88, 244, 53, 30, 61, 160, 143, 64, 0, 0, 0, 0, 0, 0}, 78, 165},
- {{199, 82, 217, 183, 2, 179, 195, 6, 0, 0, 0, 0, 0, 0, 0, 0}, 64, 3},
- {{157, 230, 79, 162, 57, 125, 152, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 57, 211},
- {{27, 67, 64, 235, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 33, 210},
- {{72, 158, 163, 106, 193, 137, 190, 7, 250, 165, 249, 73, 64, 0, 0, 0}, 99, 61},
- {{34, 192, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 10, 120},
- {{215, 141, 95, 192, 189, 62, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 47, 94},
- {{31, 181, 56, 141, 120, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 41, 153},
- {{153, 73, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 18, 221},
- {{162, 107, 41, 189, 165, 155, 22, 139, 165, 72, 96, 0, 0, 0, 0, 0}, 87, 163},
- {{218, 17, 204, 165, 217, 251, 107, 45, 29, 15, 192, 167, 75, 0, 0, 0}, 106, 188},
- {{200, 124, 238, 213, 35, 228, 94, 141, 86, 187, 101, 60, 115, 52, 131, 16}, 124, 15},
- {{74, 237, 160, 56, 141, 217, 191, 16, 0, 0, 0, 0, 0, 0, 0, 0}, 63, 28},
- {{163, 47, 242, 103, 173, 217, 88, 154, 38, 200, 32, 0, 0, 0, 0, 0}, 84, 240},
- {{20, 227, 128, 28, 144, 147, 22, 13, 94, 129, 107, 88, 0, 0, 0, 0}, 93, 59},
- {{95, 144, 229, 107, 218, 125, 204, 233, 161, 42, 180, 64, 0, 0, 0, 0}, 90, 195},
- {{155, 220, 83, 208, 108, 16, 134, 156, 128, 0, 0, 0, 0, 0, 0, 0}, 66, 10},
- {{179, 138, 55, 80, 190, 153, 12, 237, 22, 120, 69, 0, 0, 0, 0, 0}, 88, 206},
- {{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 2, 137},
- {{3, 119, 148, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 22, 225},
- {{13, 192, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 10, 223},
- {{117, 28, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 15, 29},
- {{164, 19, 195, 47, 136, 190, 156, 255, 30, 74, 143, 134, 162, 0, 0, 0}, 103, 166},
- {{40, 235, 94, 135, 135, 230, 71, 33, 64, 233, 0, 0, 0, 0, 0, 0}, 80, 178},
- {{222, 151, 166, 97, 129, 250, 140, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 55, 38},
- {{174, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 9, 141},
- {{6, 189, 100, 150, 250, 13, 46, 98, 228, 139, 50, 52, 52, 196, 128, 0}, 116, 230},
- {{75, 252, 89, 205, 37, 52, 106, 79, 188, 120, 54, 119, 160, 0, 0, 0}, 99, 124},
- {{38, 18, 146, 6, 63, 64, 231, 10, 152, 199, 5, 143, 147, 4, 252, 0}, 118, 54},
- {{111, 119, 169, 51, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 32, 162},
- {{105, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 13, 32},
- {{143, 57, 57, 101, 98, 182, 74, 227, 205, 143, 253, 237, 8, 0, 0, 0}, 102, 237},
- {{30, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 7, 215},
- {{14, 232, 48, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 22, 138},
- {{14, 53, 67, 216, 229, 155, 149, 139, 31, 253, 184, 126, 133, 108, 40, 0}, 118, 73},
- {{22, 58, 40, 143, 188, 132, 239, 14, 181, 252, 81, 192, 0, 0, 0, 0}, 90, 43},
- {{11, 222, 185, 243, 248, 150, 79, 230, 214, 213, 3, 23, 193, 196, 0, 0}, 112, 88},
- {{14, 226, 198, 117, 84, 93, 22, 96, 77, 241, 173, 68, 68, 204, 72, 0}, 119, 91},
- {{15, 103, 247, 219, 150, 142, 92, 50, 144, 0, 0, 0, 0, 0, 0, 0}, 69, 140},
- {{0, 213, 77, 244, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 37, 65},
- {{178, 174, 174, 239, 72, 181, 36, 217, 40, 169, 12, 104, 149, 157, 125, 128}, 122, 201},
- {{118, 53, 55, 17, 97, 227, 243, 176, 2, 0, 0, 0, 0, 0, 0, 0}, 72, 69},
- {{21, 253, 4, 47, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 35, 170},
- {{5, 249, 186, 133, 68, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 40, 192},
- {{47, 79, 35, 66, 11, 178, 161, 28, 87, 180, 45, 128, 0, 0, 0, 0}, 89, 21},
- {{242, 227, 20, 73, 150, 196, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 46, 35},
- {{121, 169, 102, 118, 157, 192, 154, 186, 126, 0, 0, 0, 0, 0, 0, 0}, 71, 235},
- {{9, 138, 192, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 21, 240},
- {{45, 173, 14, 72, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 30, 136},
- {{127, 47, 51, 201, 236, 45, 142, 80, 0, 0, 0, 0, 0, 0, 0, 0}, 60, 186},
- {{247, 233, 34, 38, 181, 207, 127, 20, 224, 118, 59, 148, 0, 0, 0, 0}, 95, 174},
- {{126, 187, 198, 104, 245, 223, 219, 18, 31, 124, 0, 0, 0, 0, 0, 0}, 79, 153},
- {{3, 163, 107, 228, 192, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 35, 118},
- {{167, 109, 2, 95, 11, 62, 45, 128, 0, 0, 0, 0, 0, 0, 0, 0}, 60, 113},
- {{76, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 6, 58},
- {{58, 190, 204, 151, 222, 147, 47, 78, 38, 203, 9, 17, 64, 0, 0, 0}, 101, 206},
- {{254, 220, 254, 220, 204, 79, 35, 127, 242, 63, 106, 232, 127, 180, 0, 0}, 111, 42},
- {{77, 156, 8, 209, 181, 37, 70, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 55, 230},
- {{65, 89, 137, 76, 208, 199, 166, 90, 128, 0, 0, 0, 0, 0, 0, 0}, 67, 6},
- {{47, 232, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 13, 254},
- {{172, 154, 12, 108, 77, 37, 106, 8, 234, 7, 248, 212, 112, 160, 0, 0}, 108, 214},
- {{254, 117, 239, 244, 154, 89, 166, 241, 12, 108, 127, 153, 206, 160, 0, 0}, 107, 43},
- {{113, 160, 206, 52, 143, 12, 9, 148, 224, 0, 0, 0, 0, 0, 0, 0}, 67, 178},
- {{178, 130, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 16, 179},
- {{229, 177, 28, 106, 59, 75, 182, 241, 36, 79, 224, 0, 0, 0, 0, 0}, 87, 236},
- {{156, 72, 93, 193, 50, 235, 75, 228, 88, 115, 89, 119, 128, 0, 0, 0}, 98, 184},
- {{28, 232, 28, 249, 83, 105, 211, 7, 136, 147, 231, 64, 0, 0, 0, 0}, 91, 95},
- {{217, 33, 23, 107, 74, 42, 135, 197, 144, 34, 40, 243, 13, 126, 36, 136}, 127, 152},
- {{64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 2, 113},
- {{85, 172, 121, 126, 213, 57, 225, 54, 197, 73, 85, 251, 9, 64, 0, 0}, 108, 137},
- {{104, 46, 25, 71, 86, 220, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 46, 224},
- {{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 6, 61},
- {{241, 113, 254, 106, 53, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 41, 205},
- {{29, 36, 12, 244, 197, 127, 240, 8, 167, 134, 154, 248, 199, 123, 143, 240}, 124, 170},
- {{58, 29, 129, 94, 43, 139, 224, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 53, 117},
- {{213, 124, 147, 196, 7, 82, 67, 70, 228, 0, 0, 0, 0, 0, 0, 0}, 70, 225},
- {{164, 168, 161, 140, 87, 85, 250, 41, 34, 0, 0, 0, 0, 0, 0, 0}, 72, 34},
- {{186, 142, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 17, 5},
- {{237, 249, 9, 70, 247, 97, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 50, 92},
- {{155, 92, 145, 218, 125, 226, 226, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 55, 230},
- {{35, 169, 62, 156, 86, 4, 125, 219, 119, 113, 191, 75, 198, 113, 0, 0}, 112, 61},
- {{207, 63, 96, 186, 26, 68, 115, 161, 163, 59, 190, 166, 18, 78, 232, 0}, 117, 221},
- {{86, 40, 200, 199, 247, 86, 159, 179, 191, 184, 117, 173, 211, 158, 0, 128}, 121, 105},
- {{104, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 11, 181},
- {{205, 35, 123, 178, 36, 64, 62, 153, 195, 250, 0, 0, 0, 0, 0, 0}, 79, 110},
- {{117, 40, 57, 157, 138, 160, 223, 59, 155, 145, 64, 0, 0, 0, 0, 0}, 86, 103},
- {{74, 166, 140, 146, 74, 72, 229, 99, 167, 124, 107, 117, 217, 14, 246, 64}, 123, 218},
- {{12, 222, 244, 183, 83, 146, 42, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 56, 146},
- {{11, 98, 146, 110, 95, 96, 80, 142, 224, 0, 0, 0, 0, 0, 0, 0}, 67, 90},
- {{235, 5, 187, 199, 30, 170, 82, 187, 228, 159, 22, 25, 204, 112, 0, 0}, 108, 197},
- {{35, 96, 146, 145, 155, 116, 252, 181, 29, 205, 230, 246, 30, 0, 0, 0}, 103, 158},
- {{174, 38, 56, 244, 227, 102, 252, 237, 128, 86, 0, 0, 0, 0, 0, 0}, 81, 118},
- {{65, 134, 37, 58, 90, 125, 60, 84, 0, 0, 0, 0, 0, 0, 0, 0}, 62, 95},
- {{253, 117, 135, 98, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 33, 152},
- {{111, 115, 188, 184, 130, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 45, 239},
- {{202, 24, 89, 9, 149, 45, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 50, 48},
- {{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 5, 228},
- {{244, 98, 52, 140, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 30, 247},
- {{151, 167, 43, 178, 116, 194, 173, 126, 236, 98, 40, 0, 0, 0, 0, 0}, 85, 12},
- {{60, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 10, 129},
- {{208, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 4, 50},
- {{126, 11, 216, 242, 7, 45, 121, 208, 110, 135, 210, 75, 59, 182, 228, 42}, 128, 250},
- {{217, 26, 184, 146, 3, 18, 240, 15, 135, 8, 0, 0, 0, 0, 0, 0}, 77, 249},
- {{128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 1, 230},
- {{145, 28, 29, 184, 2, 85, 234, 135, 98, 111, 136, 32, 0, 0, 0, 0}, 92, 228},
- {{108, 104, 255, 254, 34, 95, 72, 157, 0, 0, 0, 0, 0, 0, 0, 0}, 64, 181},
- {{153, 61, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 16, 206},
- {{22, 250, 130, 201, 132, 248, 189, 108, 0, 0, 0, 0, 0, 0, 0, 0}, 63, 122},
- {{158, 165, 234, 18, 44, 61, 82, 61, 235, 0, 0, 0, 0, 0, 0, 0}, 72, 81},
- {{236, 57, 124, 110, 124, 218, 82, 70, 142, 78, 18, 128, 0, 0, 0, 0}, 95, 175},
- {{94, 209, 200, 201, 149, 162, 248, 134, 239, 226, 1, 237, 16, 134, 56, 0}, 118, 170},
- {{187, 42, 31, 144, 236, 70, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 47, 174},
- {{90, 214, 185, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 29, 104},
- {{194, 220, 211, 212, 211, 32, 196, 98, 71, 62, 153, 103, 80, 35, 128, 0}, 114, 113},
- {{24, 255, 158, 64, 180, 148, 10, 81, 243, 247, 0, 0, 0, 0, 0, 0}, 80, 89},
- {{231, 155, 100, 242, 112, 160, 160, 95, 98, 253, 219, 21, 239, 90, 0, 0}, 113, 151},
- {{225, 96, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 11, 108},
- {{136, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 7, 224},
- {{250, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 9, 95},
- {{72, 168, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 14, 173},
- {{185, 51, 51, 167, 18, 44, 36, 59, 35, 135, 20, 104, 0, 0, 0, 0}, 93, 176},
- {{57, 146, 252, 60, 197, 68, 39, 162, 80, 198, 137, 50, 97, 92, 124, 0}, 119, 84},
- {{254, 46, 242, 105, 86, 94, 96, 14, 130, 176, 0, 0, 0, 0, 0, 0}, 78, 104},
- {{247, 202, 176, 76, 69, 40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 49, 236},
- {{50, 233, 203, 77, 42, 21, 115, 163, 166, 138, 192, 52, 178, 37, 112, 0}, 116, 153},
- {{62, 192, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 11, 190},
- {{53, 96, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 13, 202},
- {{198, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 8, 54},
- {{189, 234, 106, 247, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 34, 156},
- {{110, 24, 228, 65, 216, 147, 9, 48, 60, 179, 172, 91, 115, 185, 227, 96}, 126, 245},
- {{128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 6, 218},
- {{74, 177, 89, 218, 248, 18, 176, 39, 118, 173, 201, 152, 0, 0, 0, 0}, 93, 72},
- {{31, 13, 153, 92, 27, 122, 150, 232, 88, 95, 202, 171, 208, 158, 0, 0}, 112, 183},
- {{128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 2, 183},
- {{63, 37, 46, 158, 139, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 42, 241},
- {{53, 209, 59, 13, 202, 70, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 47, 106},
- {{184, 44, 149, 221, 180, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 40, 180},
- {{222, 134, 37, 62, 223, 193, 39, 246, 15, 151, 200, 146, 0, 0, 0, 0}, 96, 142},
- {{199, 176, 189, 37, 233, 177, 252, 216, 94, 175, 253, 119, 96, 0, 0, 0}, 100, 6},
- {{44, 195, 201, 106, 209, 120, 122, 38, 43, 30, 142, 22, 196, 175, 100, 0}, 118, 33},
- {{33, 166, 10, 174, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 34, 224},
- {{54, 1, 189, 195, 133, 49, 36, 80, 138, 200, 0, 0, 0, 0, 0, 0}, 78, 14},
- {{241, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 10, 149},
- {{221, 131, 4, 247, 112, 89, 187, 119, 219, 80, 122, 156, 216, 160, 0, 0}, 108, 131},
- {{102, 20, 46, 129, 202, 247, 129, 1, 237, 71, 103, 58, 217, 44, 4, 0}, 121, 133},
- {{107, 156, 151, 44, 215, 98, 171, 126, 85, 32, 42, 128, 0, 0, 0, 0}, 89, 33},
- {{54, 25, 70, 80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 28, 204},
- {{149, 211, 242, 14, 112, 219, 176, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 52, 43},
- {{95, 26, 143, 193, 8, 76, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 51, 168},
- {{63, 102, 244, 176, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 28, 180},
- {{64, 85, 124, 226, 59, 239, 64, 130, 68, 122, 93, 74, 32, 37, 0, 0}, 112, 208},
- {{113, 90, 253, 149, 3, 218, 34, 215, 3, 143, 192, 64, 0, 0, 0, 0}, 90, 25},
- {{75, 231, 33, 5, 11, 94, 117, 104, 150, 60, 72, 161, 96, 38, 0, 0}, 111, 50},
- {{52, 13, 248, 1, 251, 14, 50, 29, 212, 123, 130, 177, 101, 96, 0, 0}, 109, 110},
- {{248, 221, 150, 132, 252, 82, 96, 2, 80, 232, 97, 239, 253, 64, 0, 0}, 109, 21},
- {{136, 77, 164, 161, 192, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 36, 147},
- {{1, 33, 66, 254, 144, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 43, 56},
- {{181, 25, 186, 225, 109, 190, 76, 158, 118, 122, 20, 64, 125, 55, 8, 0}, 117, 144},
- {{191, 187, 160, 140, 17, 6, 80, 120, 236, 212, 104, 144, 128, 0, 0, 0}, 100, 198},
- {{201, 61, 150, 254, 70, 77, 214, 211, 171, 163, 245, 64, 0, 0, 0, 0}, 90, 235},
- {{143, 226, 190, 50, 252, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 38, 105},
- {{65, 168, 226, 36, 201, 80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 45, 138},
- {{136, 40, 65, 90, 47, 16, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 49, 122},
- {{94, 189, 224, 200, 170, 11, 79, 172, 0, 0, 0, 0, 0, 0, 0, 0}, 65, 193},
- {{236, 41, 169, 234, 14, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 43, 231},
- {{1, 40, 140, 95, 81, 173, 250, 248, 0, 0, 0, 0, 0, 0, 0, 0}, 64, 250},
- {{83, 176, 146, 112, 89, 156, 57, 220, 125, 48, 44, 0, 0, 0, 0, 0}, 86, 24},
- {{76, 125, 228, 249, 243, 160, 106, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 55, 191},
- {{10, 203, 204, 49, 212, 115, 125, 4, 239, 122, 81, 34, 1, 198, 216, 0}, 117, 111},
- {{74, 214, 23, 44, 211, 40, 161, 61, 237, 190, 155, 59, 173, 42, 0, 0}, 111, 205},
- {{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 1, 133},
- {{127, 0, 130, 61, 209, 5, 232, 35, 35, 42, 114, 52, 169, 234, 191, 0}, 122, 122},
- {{201, 107, 210, 13, 187, 62, 145, 28, 31, 189, 56, 0, 0, 0, 0, 0}, 87, 227},
- {{147, 171, 63, 145, 47, 160, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 46, 53},
- {{93, 232, 10, 97, 21, 243, 213, 135, 200, 0, 0, 0, 0, 0, 0, 0}, 72, 224},
- {{144, 121, 41, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 26, 199},
- {{116, 105, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 17, 79},
- {{142, 149, 24, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 21, 19},
- {{97, 0, 228, 158, 50, 233, 251, 249, 0, 66, 197, 226, 0, 0, 0, 0}, 96, 211},
- {{114, 228, 199, 155, 175, 104, 26, 213, 66, 249, 120, 218, 164, 252, 212, 0}, 120, 6},
- {{224, 166, 76, 200, 121, 60, 110, 65, 60, 95, 137, 190, 92, 218, 218, 0}, 121, 143},
- {{139, 219, 92, 224, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 31, 135},
- {{203, 237, 64, 189, 28, 13, 75, 197, 219, 243, 172, 3, 142, 32, 0, 0}, 109, 21},
- {{237, 186, 88, 254, 124, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 38, 220},
- {{182, 230, 93, 162, 129, 25, 56, 196, 112, 0, 0, 0, 0, 0, 0, 0}, 68, 151},
- {{245, 45, 69, 226, 90, 212, 254, 16, 0, 0, 0, 0, 0, 0, 0, 0}, 60, 111},
- {{107, 229, 240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 20, 63},
- {{119, 208, 177, 235, 222, 252, 219, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 57, 112},
- {{178, 151, 220, 162, 120, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 41, 48},
- {{109, 26, 95, 170, 166, 151, 137, 83, 226, 82, 5, 114, 253, 210, 18, 12}, 126, 100},
- {{126, 27, 252, 19, 219, 129, 121, 48, 0, 0, 0, 0, 0, 0, 0, 0}, 60, 156},
- {{211, 195, 152, 145, 154, 93, 228, 215, 135, 101, 28, 82, 0, 0, 0, 0}, 95, 120},
- {{252, 107, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 16, 5},
- {{192, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 4, 103},
- {{64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 4, 84},
- {{225, 179, 43, 43, 222, 145, 205, 238, 164, 158, 147, 229, 56, 0, 0, 0}, 101, 24},
- {{208, 127, 151, 24, 64, 113, 47, 85, 209, 79, 144, 0, 0, 0, 0, 0}, 86, 81},
- {{178, 144, 203, 104, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 29, 96},
- {{56, 227, 139, 4, 86, 87, 180, 1, 215, 167, 237, 156, 111, 64, 47, 0}, 121, 6},
- {{80, 76, 204, 119, 172, 169, 254, 81, 104, 166, 219, 44, 173, 161, 212, 0}, 119, 40},
- {{129, 141, 139, 34, 241, 101, 223, 144, 0, 0, 0, 0, 0, 0, 0, 0}, 62, 143},
- {{85, 102, 137, 98, 65, 103, 54, 142, 144, 0, 0, 0, 0, 0, 0, 0}, 68, 69},
- {{56, 31, 159, 13, 201, 139, 161, 31, 89, 137, 4, 0, 0, 0, 0, 0}, 92, 48},
- {{229, 221, 54, 216, 223, 27, 196, 1, 0, 0, 0, 0, 0, 0, 0, 0}, 64, 115},
- {{5, 144, 176, 43, 180, 187, 20, 49, 59, 73, 108, 34, 83, 32, 192, 0}, 115, 130},
- {{24, 217, 205, 193, 74, 123, 160, 106, 103, 74, 200, 0, 0, 0, 0, 0}, 86, 57},
- {{247, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 8, 97},
- {{12, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 9, 146},
- {{160, 28, 201, 119, 148, 93, 251, 118, 28, 179, 123, 52, 71, 232, 48, 0}, 117, 194},
- {{152, 126, 17, 54, 101, 56, 130, 1, 205, 41, 207, 90, 151, 123, 128, 0}, 114, 129},
- {{77, 165, 29, 239, 95, 242, 34, 1, 11, 204, 135, 239, 128, 0, 0, 0}, 97, 159},
- {{183, 108, 146, 118, 74, 190, 7, 141, 9, 92, 2, 2, 8, 218, 120, 0}, 117, 242},
- {{37, 152, 29, 239, 242, 53, 56, 143, 219, 22, 14, 158, 49, 0, 0, 0}, 104, 162},
- {{198, 53, 241, 102, 240, 244, 97, 203, 62, 128, 213, 214, 220, 0, 0, 0}, 102, 140},
- {{144, 89, 48, 42, 249, 231, 189, 178, 232, 199, 30, 58, 63, 57, 0, 0}, 113, 77},
- {{68, 212, 177, 123, 44, 224, 19, 172, 89, 87, 192, 0, 0, 0, 0, 0}, 82, 121},
- {{252, 29, 179, 224, 4, 121, 205, 67, 152, 0, 0, 0, 0, 0, 0, 0}, 69, 102},
- {{28, 110, 164, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 23, 28},
- {{24, 88, 231, 1, 4, 71, 71, 241, 252, 14, 197, 0, 0, 0, 0, 0}, 89, 154},
- {{63, 131, 43, 76, 58, 140, 163, 74, 158, 80, 0, 0, 0, 0, 0, 0}, 76, 39},
- {{56, 28, 147, 149, 98, 93, 216, 216, 203, 156, 0, 0, 0, 0, 0, 0}, 78, 163},
- {{134, 169, 6, 103, 161, 244, 134, 117, 16, 0, 0, 0, 0, 0, 0, 0}, 68, 42},
- {{143, 247, 125, 190, 106, 50, 204, 98, 250, 151, 161, 96, 0, 0, 0, 0}, 92, 207},
- {{235, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 8, 25},
- {{46, 72, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 18, 150},
- {{171, 35, 128, 117, 74, 29, 199, 67, 109, 176, 0, 0, 0, 0, 0, 0}, 76, 103},
- {{220, 233, 236, 112, 135, 136, 215, 43, 42, 0, 0, 0, 0, 0, 0, 0}, 71, 155},
- {{228, 11, 144, 117, 206, 192, 118, 25, 141, 78, 4, 105, 0, 0, 0, 0}, 96, 142},
- {{195, 67, 194, 229, 14, 53, 129, 7, 30, 208, 38, 100, 182, 59, 0, 0}, 112, 2},
- {{25, 76, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 19, 59},
- {{160, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 4, 112},
- {{26, 203, 217, 152, 16, 187, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 48, 166},
- {{250, 213, 14, 235, 110, 171, 174, 23, 102, 128, 0, 0, 0, 0, 0, 0}, 73, 62},
- {{175, 230, 160, 13, 187, 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 50, 176},
- {{92, 155, 156, 93, 191, 73, 28, 82, 187, 129, 57, 5, 16, 0, 0, 0}, 100, 6},
- {{45, 203, 3, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 29, 26},
- {{120, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 5, 6},
- {{216, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 5, 13},
- {{135, 215, 0, 71, 24, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 37, 41},
- {{221, 149, 1, 40, 112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 36, 135},
- {{95, 143, 255, 194, 2, 157, 191, 113, 10, 229, 204, 56, 0, 0, 0, 0}, 93, 171},
- {{202, 212, 96, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 19, 20},
- {{147, 203, 238, 120, 194, 23, 25, 58, 208, 177, 169, 0, 0, 0, 0, 0}, 89, 119},
- {{137, 170, 113, 252, 215, 194, 224, 146, 233, 87, 86, 192, 26, 46, 0, 0}, 112, 49},
- {{224, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 4, 141},
- {{250, 90, 241, 174, 163, 72, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 47, 132},
- {{66, 190, 202, 144, 122, 86, 22, 103, 107, 164, 57, 54, 228, 128, 0, 0}, 105, 176},
- {{76, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 12, 186},
- {{120, 246, 1, 52, 187, 163, 78, 105, 224, 0, 0, 0, 0, 0, 0, 0}, 67, 93},
- {{137, 242, 136, 71, 98, 10, 53, 97, 160, 85, 132, 127, 185, 222, 0, 0}, 111, 242},
- {{255, 133, 181, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 24, 163},
- {{128, 177, 92, 155, 91, 192, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 42, 184},
- {{45, 120, 186, 192, 240, 199, 178, 95, 32, 0, 0, 0, 0, 0, 0, 0}, 68, 188},
- {{151, 98, 103, 254, 90, 6, 10, 109, 14, 158, 69, 29, 140, 237, 40, 232}, 126, 193},
- {{148, 164, 81, 85, 76, 14, 84, 64, 89, 176, 0, 0, 0, 0, 0, 0}, 78, 63},
- {{145, 187, 165, 136, 88, 30, 107, 191, 205, 120, 119, 216, 158, 123, 64, 0}, 115, 160},
- {{78, 120, 28, 243, 216, 180, 87, 19, 253, 16, 110, 33, 228, 24, 232, 0}, 117, 251},
- {{74, 6, 166, 166, 183, 157, 96, 84, 151, 0, 0, 0, 0, 0, 0, 0}, 72, 228},
- {{89, 96, 4, 221, 214, 253, 58, 49, 9, 0, 0, 0, 0, 0, 0, 0}, 72, 168},
- {{97, 9, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 18, 194},
- {{213, 215, 45, 200, 170, 120, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 47, 166},
- {{5, 14, 92, 0, 28, 245, 130, 202, 32, 40, 207, 77, 166, 170, 246, 64}, 122, 210},
- {{77, 45, 43, 71, 202, 0, 157, 146, 59, 91, 225, 0, 0, 0, 0, 0}, 89, 254},
- {{101, 174, 94, 168, 162, 171, 71, 12, 16, 224, 0, 0, 0, 0, 0, 0}, 75, 49},
- {{58, 17, 187, 194, 87, 73, 215, 103, 180, 12, 40, 66, 0, 0, 0, 0}, 96, 95},
- {{160, 91, 68, 81, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 33, 193},
- {{94, 112, 249, 13, 167, 245, 101, 64, 0, 0, 0, 0, 0, 0, 0, 0}, 58, 155},
- {{236, 194, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 15, 133},
- {{168, 243, 103, 221, 120, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 38, 10},
- {{86, 194, 218, 188, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 33, 31},
- {{232, 3, 134, 67, 63, 196, 86, 14, 170, 243, 77, 134, 187, 140, 72, 18}, 127, 98},
- {{55, 253, 19, 201, 199, 71, 229, 218, 54, 64, 12, 162, 0, 0, 0, 0}, 96, 22},
- {{142, 34, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 20, 214},
- {{213, 16, 208, 50, 100, 33, 192, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 50, 217},
- {{117, 237, 132, 185, 184, 246, 79, 42, 103, 98, 162, 243, 128, 0, 0, 0}, 98, 102},
- {{120, 25, 214, 222, 61, 157, 203, 102, 3, 146, 192, 0, 0, 0, 0, 0}, 83, 169},
- {{222, 46, 254, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 27, 152},
- {{254, 70, 158, 171, 11, 245, 223, 97, 70, 17, 27, 192, 186, 0, 0, 0}, 103, 214},
- {{192, 128, 228, 17, 68, 20, 44, 31, 52, 34, 212, 1, 224, 0, 0, 0}, 99, 178},
- {{237, 229, 203, 8, 121, 176, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 45, 164},
- {{6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 7, 15},
- {{71, 197, 251, 122, 138, 232, 12, 241, 116, 240, 0, 0, 0, 0, 0, 0}, 76, 94},
- {{18, 241, 135, 210, 233, 54, 121, 185, 4, 0, 0, 0, 0, 0, 0, 0}, 70, 239},
- {{32, 50, 213, 63, 73, 217, 180, 21, 187, 128, 0, 0, 0, 0, 0, 0}, 73, 82},
- {{203, 166, 233, 73, 92, 182, 212, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 55, 54},
- {{56, 162, 126, 4, 18, 195, 192, 64, 164, 156, 119, 196, 64, 0, 0, 0}, 98, 47},
- {{120, 87, 81, 136, 180, 179, 68, 148, 243, 38, 80, 0, 0, 0, 0, 0}, 84, 214},
- {{64, 244, 193, 50, 48, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 37, 215},
- {{91, 168, 253, 158, 131, 83, 159, 163, 113, 169, 112, 0, 0, 0, 0, 0}, 84, 153},
- {{159, 103, 102, 132, 111, 46, 18, 77, 36, 15, 137, 33, 177, 31, 243, 192}, 122, 245},
- {{123, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 8, 118},
- {{67, 81, 226, 190, 7, 79, 71, 250, 155, 245, 44, 81, 215, 213, 171, 224}, 123, 128},
- {{103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 8, 7},
- {{246, 44, 168, 200, 198, 238, 52, 196, 125, 115, 0, 0, 0, 0, 0, 0}, 80, 152},
- {{205, 14, 186, 252, 239, 213, 59, 119, 105, 37, 140, 209, 4, 231, 0, 0}, 114, 248},
- {{70, 91, 254, 106, 94, 71, 170, 19, 158, 242, 192, 0, 0, 0, 0, 0}, 85, 143},
- {{250, 86, 233, 184, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 30, 159},
- {{122, 222, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 24, 11},
- {{27, 224, 235, 70, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 31, 110},
- {{239, 100, 224, 3, 46, 127, 150, 251, 204, 120, 228, 64, 0, 0, 0, 0}, 97, 181},
- {{144, 115, 182, 206, 146, 13, 21, 111, 37, 70, 179, 129, 173, 82, 93, 128}, 121, 4},
- {{73, 190, 57, 243, 49, 51, 15, 209, 0, 0, 0, 0, 0, 0, 0, 0}, 67, 101},
- {{18, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 11, 38},
- {{23, 37, 236, 177, 186, 7, 209, 135, 114, 44, 0, 0, 0, 0, 0, 0}, 78, 57},
- {{200, 48, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 17, 142},
- {{181, 255, 153, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 24, 184},
- {{135, 168, 6, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 27, 91},
- {{200, 224, 33, 245, 120, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 41, 224},
- {{70, 111, 10, 62, 200, 224, 38, 204, 14, 164, 0, 0, 0, 0, 0, 0}, 78, 114},
- {{158, 133, 252, 18, 242, 12, 16, 60, 5, 52, 251, 179, 38, 235, 12, 0}, 118, 184},
- {{2, 23, 116, 48, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 28, 215},
- {{33, 25, 170, 74, 215, 134, 151, 181, 175, 232, 20, 155, 189, 242, 13, 0}, 120, 167},
- {{160, 186, 218, 183, 167, 84, 59, 152, 13, 137, 80, 128, 0, 0, 0, 0}, 89, 233},
- {{32, 141, 196, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 29, 101},
- {{207, 24, 202, 226, 191, 136, 78, 124, 160, 0, 0, 0, 0, 0, 0, 0}, 67, 139},
- {{210, 173, 172, 27, 197, 57, 114, 146, 169, 32, 0, 0, 0, 0, 0, 0}, 79, 32},
- {{95, 113, 12, 123, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 32, 57},
- {{129, 108, 186, 28, 19, 229, 96, 134, 199, 254, 199, 64, 0, 0, 0, 0}, 91, 151},
- {{103, 226, 38, 123, 35, 199, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 49, 0},
- {{41, 117, 43, 35, 208, 115, 73, 64, 0, 0, 0, 0, 0, 0, 0, 0}, 63, 227},
- {{42, 220, 61, 34, 199, 183, 42, 16, 223, 135, 0, 135, 213, 150, 100, 0}, 118, 124},
- {{165, 227, 96, 243, 112, 171, 117, 106, 50, 37, 82, 60, 80, 0, 0, 0}, 104, 228},
- {{158, 60, 111, 96, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 27, 64},
- {{124, 108, 88, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 25, 179},
- {{232, 68, 132, 159, 156, 103, 95, 190, 76, 0, 0, 0, 0, 0, 0, 0}, 70, 107},
- {{70, 77, 240, 209, 72, 63, 63, 45, 125, 79, 77, 41, 13, 0, 0, 0}, 104, 206},
- {{146, 254, 7, 5, 68, 240, 67, 237, 112, 0, 0, 0, 0, 0, 0, 0}, 68, 95},
- {{162, 223, 117, 27, 2, 156, 94, 170, 157, 114, 162, 50, 0, 0, 0, 0}, 96, 219},
- {{161, 62, 191, 68, 239, 73, 100, 37, 168, 254, 139, 202, 252, 65, 74, 0}, 119, 138},
- {{248, 122, 115, 81, 15, 158, 136, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 53, 84},
- {{8, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 11, 161},
- {{142, 96, 105, 133, 251, 57, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 52, 25},
- {{138, 196, 139, 131, 233, 93, 65, 242, 86, 169, 7, 72, 82, 128, 0, 0}, 107, 113},
- {{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 2, 46},
- {{175, 151, 75, 238, 26, 12, 100, 186, 0, 0, 0, 0, 0, 0, 0, 0}, 63, 72},
- {{82, 205, 211, 176, 170, 79, 57, 153, 161, 218, 32, 48, 0, 0, 0, 0}, 93, 230},
- {{227, 123, 232, 74, 236, 202, 211, 121, 200, 8, 59, 189, 81, 219, 144, 0}, 117, 142},
- {{205, 196, 89, 90, 103, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 41, 134},
- {{63, 145, 23, 127, 102, 216, 49, 36, 168, 164, 59, 133, 18, 146, 0, 0}, 112, 100},
- {{213, 72, 154, 16, 230, 236, 218, 203, 223, 51, 31, 251, 103, 64, 0, 0}, 109, 45},
- {{126, 148, 232, 152, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 30, 219},
- {{160, 72, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 16, 52},
- {{137, 38, 146, 20, 99, 188, 83, 123, 159, 159, 64, 0, 0, 0, 0, 0}, 83, 240},
- {{123, 228, 36, 44, 242, 29, 51, 228, 140, 60, 237, 0, 0, 0, 0, 0}, 90, 13},
- {{163, 169, 25, 89, 190, 114, 165, 158, 140, 210, 192, 0, 0, 0, 0, 0}, 84, 191},
- {{225, 38, 70, 89, 218, 236, 60, 5, 69, 163, 248, 50, 163, 64, 0, 0}, 106, 95},
- {{91, 94, 36, 48, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 28, 65},
- {{209, 238, 110, 0, 2, 152, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 45, 195},
- {{57, 17, 224, 164, 69, 95, 138, 172, 111, 55, 239, 167, 160, 0, 0, 0}, 103, 21},
- {{112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 4, 114},
- {{102, 96, 223, 28, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 31, 92},
- {{137, 204, 150, 75, 193, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 42, 237},
- {{136, 56, 252, 240, 85, 48, 248, 231, 17, 49, 47, 238, 15, 233, 159, 184}, 125, 172},
- {{57, 31, 132, 123, 234, 255, 37, 82, 167, 204, 37, 158, 128, 0, 0, 0}, 98, 116},
- {{55, 198, 139, 219, 161, 156, 140, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 55, 54},
- {{44, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 8, 203},
- {{53, 38, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 16, 74},
- {{227, 62, 107, 236, 118, 156, 60, 34, 31, 179, 76, 221, 0, 0, 0, 0}, 96, 220},
- {{105, 40, 240, 216, 91, 61, 19, 128, 224, 0, 0, 0, 0, 0, 0, 0}, 67, 219},
- {{96, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 3, 179},
- {{118, 142, 251, 249, 128, 105, 113, 16, 0, 0, 0, 0, 0, 0, 0, 0}, 61, 194},
- {{101, 70, 196, 238, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 32, 187},
- {{245, 173, 165, 177, 200, 161, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 50, 79},
- {{0, 198, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 19, 87},
- {{92, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 8, 126},
- {{125, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 11, 106},
- {{56, 59, 35, 82, 101, 72, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 50, 96},
- {{184, 72, 77, 251, 8, 166, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 47, 45},
- {{143, 74, 132, 205, 218, 247, 30, 160, 145, 199, 138, 12, 89, 220, 0, 0}, 110, 8},
- {{30, 178, 111, 225, 73, 79, 173, 52, 0, 0, 0, 0, 0, 0, 0, 0}, 62, 226},
- {{224, 48, 154, 231, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 36, 222},
- {{123, 144, 170, 143, 85, 169, 130, 245, 214, 0, 0, 0, 0, 0, 0, 0}, 71, 218},
- {{166, 224, 212, 100, 149, 55, 35, 210, 246, 108, 41, 245, 127, 174, 128, 0}, 116, 59},
- {{75, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 8, 80},
- {{197, 128, 190, 87, 47, 53, 92, 64, 0, 0, 0, 0, 0, 0, 0, 0}, 58, 177},
- {{249, 10, 76, 217, 225, 20, 124, 205, 44, 159, 190, 8, 0, 0, 0, 0}, 98, 44},
- {{180, 226, 0, 167, 137, 232, 174, 120, 113, 95, 22, 184, 0, 0, 0, 0}, 93, 206},
- {{123, 153, 102, 192, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 27, 64},
- {{5, 144, 206, 158, 239, 189, 171, 120, 69, 46, 128, 237, 0, 0, 0, 0}, 96, 236},
- {{159, 235, 60, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 22, 101},
- {{42, 194, 150, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 26, 49},
- {{205, 96, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 11, 179},
- {{19, 65, 141, 20, 127, 77, 70, 205, 151, 115, 157, 23, 118, 128, 0, 0}, 109, 112},
- {{96, 11, 214, 40, 245, 251, 61, 64, 128, 241, 183, 183, 0, 0, 0, 0}, 96, 31},
- {{120, 4, 235, 112, 34, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 41, 111},
- {{110, 127, 207, 76, 100, 148, 130, 206, 249, 2, 104, 0, 0, 0, 0, 0}, 86, 65},
- {{226, 190, 191, 249, 173, 96, 127, 200, 62, 20, 0, 0, 0, 0, 0, 0}, 78, 222},
- {{89, 88, 182, 14, 78, 122, 213, 192, 0, 0, 0, 0, 0, 0, 0, 0}, 58, 4},
- {{167, 94, 163, 227, 28, 111, 117, 103, 224, 0, 0, 0, 0, 0, 0, 0}, 67, 67},
- {{57, 220, 53, 116, 243, 184, 242, 134, 16, 70, 83, 61, 161, 128, 0, 0}, 109, 197},
- {{63, 235, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 22, 121},
- {{128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 1, 167},
- {{15, 159, 42, 167, 76, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 38, 140},
- {{216, 252, 113, 40, 239, 46, 172, 48, 103, 250, 82, 179, 136, 64, 0, 0}, 106, 193},
- {{158, 147, 16, 44, 124, 56, 44, 48, 138, 64, 169, 0, 0, 0, 0, 0}, 90, 47},
- {{238, 238, 96, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 21, 187},
- {{63, 159, 177, 162, 106, 212, 172, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 56, 102},
- {{59, 40, 252, 185, 187, 216, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 46, 237},
- {{2, 218, 11, 68, 173, 196, 16, 223, 2, 18, 122, 215, 154, 0, 0, 0}, 103, 237},
- {{3, 9, 206, 73, 108, 196, 183, 119, 141, 162, 10, 180, 115, 32, 0, 0}, 107, 115},
- {{17, 227, 208, 146, 63, 201, 73, 239, 29, 79, 80, 0, 0, 0, 0, 0}, 84, 217},
- {{115, 180, 176, 241, 52, 209, 6, 64, 189, 76, 0, 0, 0, 0, 0, 0}, 79, 21},
- {{191, 88, 98, 245, 91, 46, 137, 254, 170, 80, 11, 55, 212, 28, 128, 0}, 113, 3},
- {{97, 141, 171, 175, 22, 233, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 48, 62},
- {{32, 204, 102, 191, 164, 242, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 47, 80},
- {{29, 133, 210, 252, 124, 66, 160, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 51, 184},
- {{207, 179, 54, 144, 116, 67, 29, 64, 13, 199, 0, 0, 0, 0, 0, 0}, 80, 197},
- {{129, 216, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 13, 63},
- {{50, 152, 249, 143, 174, 234, 240, 48, 158, 255, 80, 105, 0, 0, 0, 0}, 99, 62},
- {{105, 208, 95, 218, 44, 11, 87, 134, 109, 18, 138, 66, 17, 69, 128, 0}, 114, 231},
- {{151, 79, 158, 220, 122, 101, 210, 164, 64, 0, 0, 0, 0, 0, 0, 0}, 67, 158},
- {{236, 97, 87, 155, 254, 137, 122, 208, 168, 201, 194, 118, 224, 0, 0, 0}, 101, 118},
- {{14, 229, 193, 248, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 30, 237},
- {{46, 154, 50, 80, 92, 147, 158, 86, 1, 112, 0, 0, 0, 0, 0, 0}, 79, 15},
- {{88, 131, 21, 84, 62, 86, 7, 110, 142, 251, 242, 110, 194, 175, 247, 0}, 122, 84},
- {{229, 216, 111, 92, 173, 32, 63, 70, 36, 84, 6, 74, 136, 166, 38, 0}, 119, 205},
- {{121, 147, 216, 245, 37, 189, 146, 63, 145, 74, 128, 0, 0, 0, 0, 0}, 82, 220},
- {{44, 26, 254, 11, 181, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 40, 42},
- {{209, 114, 97, 249, 227, 159, 224, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 51, 144},
- {{184, 244, 43, 117, 56, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 37, 74},
- {{60, 81, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 19, 89},
- {{18, 40, 21, 113, 226, 91, 195, 88, 161, 19, 142, 0, 0, 0, 0, 0}, 88, 77},
- {{57, 0, 212, 158, 56, 51, 108, 198, 59, 5, 137, 196, 0, 0, 0, 0}, 94, 2},
- {{168, 252, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 14, 75},
- {{64, 181, 254, 103, 1, 230, 117, 199, 128, 0, 0, 0, 0, 0, 0, 0}, 65, 18},
- {{212, 48, 214, 127, 78, 176, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 46, 246},
- {{155, 185, 236, 163, 204, 49, 129, 120, 183, 47, 10, 243, 65, 92, 192, 0}, 114, 10},
- {{94, 200, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 14, 207},
- {{19, 210, 136, 113, 73, 79, 132, 196, 224, 0, 0, 0, 0, 0, 0, 0}, 68, 41},
- {{24, 203, 246, 242, 241, 223, 150, 237, 213, 202, 11, 128, 0, 0, 0, 0}, 89, 102},
- {{115, 59, 171, 221, 172, 181, 170, 67, 115, 205, 44, 107, 162, 67, 56, 0}, 118, 118},
- {{250, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 10, 146},
- {{203, 240, 28, 158, 182, 12, 86, 182, 142, 47, 143, 57, 239, 0, 0, 0}, 104, 122},
- {{196, 218, 109, 52, 2, 0, 64, 153, 34, 250, 240, 185, 117, 0, 0, 0}, 107, 6},
- {{137, 131, 191, 40, 72, 209, 74, 64, 0, 0, 0, 0, 0, 0, 0, 0}, 58, 18},
- {{236, 126, 167, 37, 185, 20, 34, 207, 76, 0, 0, 0, 0, 0, 0, 0}, 70, 83},
- {{129, 192, 245, 137, 251, 52, 75, 68, 81, 112, 146, 133, 64, 0, 0, 0}, 99, 90},
- {{7, 31, 148, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 32, 140},
- {{112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 4, 242},
- {{167, 50, 202, 179, 74, 146, 192, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 50, 31},
- {{44, 188, 186, 250, 229, 71, 28, 118, 35, 253, 245, 191, 199, 18, 0, 0}, 111, 9},
- {{128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 1, 230},
- {{156, 163, 215, 175, 71, 80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 47, 50},
- {{67, 24, 151, 198, 242, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 41, 34},
- {{134, 107, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 17, 11},
- {{35, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 8, 71},
- {{46, 196, 84, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 22, 146},
- {{82, 172, 8, 26, 154, 34, 125, 188, 5, 149, 159, 44, 78, 222, 236, 176}, 124, 249},
- {{78, 157, 79, 70, 252, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 39, 143},
- {{231, 5, 210, 247, 198, 5, 157, 191, 206, 225, 149, 142, 207, 40, 0, 0}, 110, 17},
- {{38, 254, 235, 199, 191, 60, 43, 159, 190, 243, 203, 185, 184, 218, 132, 0}, 119, 60},
- {{128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 1, 162},
- {{95, 240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 12, 5},
- {{17, 128, 244, 178, 160, 78, 83, 92, 0, 0, 0, 0, 0, 0, 0, 0}, 62, 139},
- {{18, 102, 62, 251, 44, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 39, 8},
- {{30, 75, 108, 40, 231, 166, 233, 220, 163, 176, 252, 210, 60, 30, 128, 0}, 114, 246},
- {{18, 3, 207, 64, 25, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 42, 171},
- {{52, 83, 235, 61, 164, 236, 83, 173, 143, 105, 14, 0, 0, 0, 0, 0}, 88, 206},
- {{166, 175, 186, 208, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 28, 163},
- {{221, 154, 82, 98, 41, 126, 85, 52, 0, 0, 0, 0, 0, 0, 0, 0}, 62, 166},
- {{94, 84, 182, 120, 204, 232, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 51, 128},
- {{27, 174, 227, 228, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 31, 59},
- {{218, 12, 4, 156, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 32, 179},
- {{9, 5, 190, 195, 60, 216, 80, 150, 128, 117, 86, 128, 128, 112, 98, 208}, 124, 87},
- {{7, 226, 104, 112, 212, 9, 172, 124, 209, 121, 170, 229, 44, 178, 128, 0}, 114, 29},
- {{47, 71, 174, 76, 52, 83, 23, 18, 106, 48, 56, 32, 0, 0, 0, 0}, 91, 184},
- {{51, 168, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 14, 45},
- {{28, 182, 167, 124, 28, 22, 80, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 55, 144},
- {{34, 61, 14, 51, 253, 17, 19, 170, 49, 206, 188, 207, 247, 167, 192, 0}, 114, 119},
- {{2, 235, 18, 14, 195, 66, 237, 30, 0, 0, 0, 0, 0, 0, 0, 0}, 64, 113},
- {{51, 182, 142, 133, 127, 96, 159, 132, 99, 161, 64, 0, 0, 0, 0, 0}, 82, 50},
- {{170, 145, 230, 123, 215, 189, 73, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 56, 207},
- {{151, 166, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 21, 3},
- {{16, 141, 196, 129, 132, 207, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 58, 13},
- {{205, 25, 184, 191, 201, 206, 109, 224, 0, 0, 0, 0, 0, 0, 0, 0}, 59, 42},
- {{48, 114, 33, 103, 247, 255, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 50, 31},
- {{179, 156, 119, 146, 125, 21, 42, 146, 237, 213, 191, 132, 0, 0, 0, 0}, 94, 30},
- {{179, 129, 186, 144, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 29, 94},
- {{17, 179, 217, 188, 128, 212, 4, 4, 152, 0, 0, 0, 0, 0, 0, 0}, 71, 190},
- {{132, 63, 74, 89, 209, 64, 63, 192, 0, 0, 0, 0, 0, 0, 0, 0}, 59, 238},
- {{16, 50, 248, 88, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 30, 20},
- {{189, 96, 58, 53, 191, 235, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 51, 84},
- {{111, 98, 6, 65, 35, 192, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 42, 108},
- {{118, 223, 83, 220, 110, 122, 23, 112, 185, 155, 73, 0, 0, 0, 0, 0}, 89, 136},
- {{173, 191, 150, 197, 204, 35, 169, 79, 31, 214, 251, 240, 0, 0, 0, 0}, 93, 196},
- {{26, 76, 129, 48, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 28, 67},
- {{231, 96, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 12, 104},
- {{93, 172, 223, 252, 203, 0, 206, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 55, 15},
- {{53, 142, 203, 124, 104, 51, 241, 12, 161, 17, 101, 245, 120, 110, 192, 199}, 128, 237},
- {{9, 77, 120, 197, 193, 10, 237, 174, 233, 2, 165, 11, 229, 47, 144, 0}, 116, 224},
- {{99, 161, 189, 88, 48, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 36, 179},
- {{18, 8, 76, 66, 2, 185, 206, 132, 224, 0, 0, 0, 0, 0, 0, 0}, 67, 84},
- {{169, 53, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 22, 65},
- {{136, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 5, 178},
- {{131, 162, 144, 124, 12, 98, 242, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 55, 154},
- {{75, 50, 129, 192, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 27, 106},
- {{212, 183, 40, 225, 152, 136, 174, 91, 0, 0, 0, 0, 0, 0, 0, 0}, 67, 125},
- {{158, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 9, 118},
- {{7, 48, 132, 149, 169, 212, 198, 137, 202, 0, 0, 0, 0, 0, 0, 0}, 73, 52},
- {{173, 195, 129, 163, 141, 249, 40, 64, 0, 0, 0, 0, 0, 0, 0, 0}, 58, 173},
- {{109, 79, 75, 219, 205, 182, 22, 245, 223, 17, 146, 78, 109, 119, 128, 0}, 113, 8},
- {{174, 195, 24, 182, 215, 198, 214, 86, 34, 128, 0, 0, 0, 0, 0, 0}, 74, 211},
- {{22, 40, 51, 109, 70, 91, 152, 56, 0, 0, 0, 0, 0, 0, 0, 0}, 61, 253},
- {{169, 115, 246, 126, 65, 118, 219, 192, 0, 0, 0, 0, 0, 0, 0, 0}, 59, 47},
- {{154, 37, 70, 124, 107, 123, 232, 241, 164, 142, 71, 226, 182, 126, 0, 0}, 112, 73},
- {{6, 108, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 19, 192},
- {{216, 167, 158, 158, 222, 19, 96, 28, 40, 6, 70, 12, 147, 27, 85, 240}, 128, 55},
- {{72, 222, 52, 69, 69, 206, 163, 106, 235, 206, 80, 128, 0, 0, 0, 0}, 94, 147},
- {{150, 112, 106, 56, 15, 243, 154, 97, 134, 110, 160, 20, 183, 144, 234, 8}, 125, 86},
- {{58, 186, 106, 58, 124, 171, 53, 85, 33, 100, 64, 0, 0, 0, 0, 0}, 82, 16},
- {{7, 195, 22, 31, 62, 217, 209, 46, 90, 49, 189, 50, 168, 126, 0, 0}, 111, 167},
- {{92, 44, 159, 198, 185, 94, 231, 177, 64, 0, 0, 0, 0, 0, 0, 0}, 67, 148},
- {{169, 108, 190, 162, 23, 39, 140, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 54, 66},
- {{161, 5, 3, 11, 158, 157, 166, 212, 246, 22, 140, 101, 92, 0, 0, 0}, 104, 70},
- {{71, 191, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 16, 166},
- {{48, 136, 194, 145, 57, 96, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 44, 109},
- {{144, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 5, 226},
- {{223, 209, 10, 57, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 32, 8},
- {{154, 79, 170, 9, 43, 139, 249, 176, 186, 72, 216, 0, 0, 0, 0, 0}, 85, 218},
- {{1, 8, 123, 205, 167, 134, 128, 102, 10, 72, 0, 0, 0, 0, 0, 0}, 78, 54},
- {{31, 105, 48, 77, 103, 187, 99, 67, 96, 0, 0, 0, 0, 0, 0, 0}, 67, 48},
- {{14, 73, 54, 76, 232, 35, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 51, 244},
- {{14, 109, 251, 190, 36, 253, 99, 120, 94, 64, 0, 0, 0, 0, 0, 0}, 74, 50},
- {{122, 170, 9, 134, 124, 91, 24, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 54, 173},
- {{246, 10, 85, 88, 82, 217, 95, 56, 216, 203, 160, 0, 0, 0, 0, 0}, 84, 245},
- {{77, 100, 114, 207, 150, 177, 69, 134, 74, 131, 147, 117, 177, 64, 210, 128}, 121, 54},
- {{171, 123, 22, 138, 132, 229, 250, 81, 186, 227, 146, 27, 170, 205, 128, 0}, 113, 86},
- {{128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 2, 115},
- {{12, 35, 50, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 24, 144},
- {{255, 124, 179, 165, 169, 250, 66, 171, 223, 125, 247, 0, 0, 0, 0, 0}, 89, 171},
- {{244, 235, 211, 10, 251, 255, 206, 6, 198, 12, 50, 136, 0, 0, 0, 0}, 93, 231},
- {{221, 77, 237, 41, 50, 33, 103, 24, 25, 127, 208, 0, 0, 0, 0, 0}, 88, 34},
- {{216, 69, 47, 53, 117, 24, 56, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 53, 225},
- {{180, 87, 25, 236, 56, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 38, 174},
- {{110, 32, 24, 34, 116, 133, 245, 128, 123, 95, 125, 122, 100, 129, 128, 0}, 113, 37},
- {{27, 117, 179, 112, 133, 137, 110, 193, 246, 201, 219, 65, 56, 234, 106, 128}, 121, 39},
- {{186, 117, 252, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 23, 59},
- {{243, 119, 54, 16, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 34, 96},
- {{160, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 3, 147},
- {{78, 48, 117, 200, 245, 118, 115, 240, 170, 125, 84, 103, 33, 168, 0, 0}, 110, 56},
- {{201, 253, 184, 254, 143, 81, 95, 42, 243, 147, 96, 145, 23, 26, 0, 0}, 111, 234},
- {{41, 215, 84, 136, 234, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 46, 199},
- {{91, 244, 137, 184, 231, 95, 135, 10, 184, 0, 0, 0, 0, 0, 0, 0}, 69, 191},
- {{113, 31, 181, 245, 21, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 40, 235},
- {{181, 216, 192, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 20, 45},
- {{87, 26, 119, 229, 97, 255, 9, 43, 32, 0, 0, 0, 0, 0, 0, 0}, 67, 164},
- {{205, 112, 67, 163, 196, 148, 5, 105, 8, 138, 144, 3, 171, 213, 159, 128}, 121, 130},
- {{136, 27, 192, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 18, 166},
- {{2, 175, 111, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 24, 140},
- {{222, 131, 85, 218, 16, 229, 44, 230, 243, 76, 250, 139, 1, 203, 108, 0}, 118, 47},
- {{101, 180, 77, 142, 194, 73, 196, 246, 107, 100, 194, 72, 204, 124, 0, 0}, 111, 148},
- {{96, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 3, 103},
- {{46, 62, 191, 130, 110, 128, 235, 62, 68, 39, 58, 152, 207, 204, 96, 0}, 116, 94},
- {{111, 11, 96, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 19, 85},
- {{58, 43, 14, 93, 102, 210, 117, 208, 222, 171, 130, 41, 16, 16, 0, 0}, 109, 250},
- {{141, 52, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 16, 153},
- {{170, 153, 160, 170, 144, 235, 122, 8, 106, 34, 24, 32, 102, 57, 12, 168}, 125, 182},
- {{34, 113, 163, 107, 61, 177, 39, 172, 242, 2, 130, 0, 0, 0, 0, 0}, 94, 23},
- {{222, 191, 239, 110, 162, 191, 195, 181, 80, 50, 85, 240, 88, 32, 0, 0}, 108, 38},
- {{179, 82, 253, 151, 212, 0, 72, 253, 175, 22, 34, 78, 53, 32, 0, 0}, 110, 121},
- {{10, 162, 20, 46, 164, 64, 88, 1, 202, 204, 124, 0, 0, 0, 0, 0}, 87, 146},
- {{210, 99, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 16, 138},
- {{183, 200, 1, 2, 51, 6, 66, 142, 20, 77, 48, 244, 0, 0, 0, 0}, 94, 149},
- {{29, 20, 224, 57, 204, 161, 131, 254, 53, 133, 163, 0, 0, 0, 0, 0}, 88, 232},
- {{75, 58, 170, 52, 146, 80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 45, 255},
- {{92, 21, 1, 113, 185, 88, 160, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 51, 148},
- {{103, 180, 222, 187, 129, 117, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 48, 117},
- {{32, 76, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 14, 237},
- {{7, 60, 96, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 19, 113},
- {{167, 122, 205, 185, 21, 199, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 57, 162},
- {{21, 78, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 21, 225},
- {{92, 159, 167, 169, 136, 176, 95, 255, 87, 137, 112, 16, 0, 0, 0, 0}, 92, 210},
- {{84, 120, 160, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 22, 34},
- {{126, 5, 126, 176, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 29, 224},
- {{4, 58, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 16, 143},
- {{239, 154, 181, 182, 189, 211, 244, 53, 144, 0, 0, 0, 0, 0, 0, 0}, 68, 216},
- {{254, 188, 139, 167, 135, 47, 147, 239, 187, 106, 228, 156, 234, 234, 102, 0}, 120, 239},
- {{225, 168, 138, 92, 193, 255, 47, 233, 11, 154, 205, 86, 209, 88, 0, 0}, 111, 54},
- {{223, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 9, 35},
- {{235, 252, 115, 10, 151, 104, 193, 207, 38, 228, 229, 245, 42, 13, 108, 0}, 119, 230},
- {{1, 137, 53, 36, 210, 184, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 45, 234},
- {{149, 182, 72, 197, 92, 229, 9, 10, 220, 128, 72, 19, 4, 58, 192, 0}, 115, 70},
- {{105, 73, 57, 108, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 32, 246},
- {{189, 61, 230, 24, 235, 82, 58, 102, 97, 111, 121, 252, 156, 94, 191, 166}, 127, 217},
- {{193, 108, 231, 86, 140, 14, 192, 4, 135, 80, 129, 166, 158, 61, 230, 20}, 128, 201},
- {{110, 77, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 17, 49},
- {{3, 102, 36, 231, 15, 242, 143, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 57, 2},
- {{81, 189, 220, 168, 192, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 38, 64},
- {{168, 75, 133, 180, 91, 165, 77, 232, 0, 0, 0, 0, 0, 0, 0, 0}, 62, 239},
- {{106, 179, 186, 109, 81, 234, 233, 167, 101, 160, 90, 102, 174, 234, 208, 0}, 116, 47},
- {{46, 105, 234, 21, 23, 247, 169, 33, 47, 5, 0, 0, 0, 0, 0, 0}, 80, 43},
- {{152, 144, 100, 142, 129, 23, 227, 50, 67, 81, 249, 116, 0, 0, 0, 0}, 94, 17},
- {{109, 74, 145, 192, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 26, 5},
- {{100, 243, 22, 230, 38, 44, 128, 86, 132, 57, 0, 0, 0, 0, 0, 0}, 81, 240},
- {{153, 251, 115, 65, 104, 179, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 50, 197},
- {{43, 113, 60, 224, 36, 20, 42, 161, 24, 223, 192, 0, 0, 0, 0, 0}, 84, 192},
- {{61, 77, 121, 176, 138, 152, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 47, 160},
- {{119, 194, 146, 49, 59, 242, 25, 220, 122, 104, 80, 0, 0, 0, 0, 0}, 84, 199},
- {{254, 162, 155, 47, 187, 3, 1, 114, 142, 191, 152, 44, 144, 26, 202, 0}, 127, 217},
- {{176, 1, 114, 42, 191, 145, 43, 1, 141, 18, 64, 0, 0, 0, 0, 0}, 83, 75},
- {{170, 244, 67, 132, 145, 163, 76, 213, 85, 237, 248, 22, 207, 64, 0, 0}, 106, 222},
- {{102, 190, 58, 32, 75, 15, 89, 163, 64, 7, 168, 0, 0, 0, 0, 0}, 85, 39},
- {{124, 170, 35, 47, 152, 224, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 45, 9},
- {{192, 221, 20, 228, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 33, 217},
- {{208, 178, 136, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 25, 142},
- {{188, 68, 77, 30, 68, 153, 102, 180, 0, 0, 0, 0, 0, 0, 0, 0}, 62, 18},
- {{114, 178, 121, 188, 205, 233, 35, 77, 34, 197, 158, 174, 101, 0, 0, 0}, 104, 180},
- {{195, 98, 67, 12, 13, 43, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 56, 205},
- {{146, 190, 42, 222, 14, 54, 28, 128, 0, 0, 0, 0, 0, 0, 0, 0}, 57, 251},
- {{185, 202, 148, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 22, 178},
- {{138, 30, 129, 95, 224, 161, 120, 128, 0, 0, 0, 0, 0, 0, 0, 0}, 59, 198},
- {{69, 181, 5, 227, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 34, 84},
- {{90, 180, 0, 164, 227, 75, 174, 119, 128, 0, 0, 0, 0, 0, 0, 0}, 66, 128},
- {{20, 60, 58, 119, 245, 177, 162, 186, 13, 112, 211, 239, 128, 0, 0, 0}, 97, 75},
- {{158, 124, 157, 25, 230, 139, 51, 212, 76, 109, 236, 210, 48, 0, 0, 0}, 101, 192},
- {{125, 108, 242, 36, 94, 13, 36, 106, 90, 51, 83, 217, 131, 151, 0, 0}, 114, 60},
- {{222, 218, 162, 158, 15, 53, 191, 178, 0, 0, 0, 0, 0, 0, 0, 0}, 63, 169},
- {{104, 202, 127, 109, 73, 16, 17, 12, 0, 0, 0, 0, 0, 0, 0, 0}, 62, 10},
- {{172, 171, 246, 26, 176, 34, 22, 152, 246, 56, 173, 120, 105, 60, 92, 0}, 118, 64},
- {{190, 22, 171, 206, 109, 186, 179, 128, 253, 182, 108, 212, 220, 167, 171, 180}, 127, 182},
- {{119, 208, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 13, 29},
- {{160, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 3, 39},
- {{170, 144, 64, 2, 107, 166, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 51, 93},
- {{234, 9, 96, 20, 156, 157, 1, 34, 88, 0, 0, 0, 0, 0, 0, 0}, 75, 228},
- {{147, 237, 16, 120, 192, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 34, 236},
- {{182, 189, 162, 158, 223, 90, 173, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 56, 190},
- {{116, 148, 142, 240, 10, 253, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 49, 217},
- {{211, 73, 140, 69, 252, 27, 75, 46, 37, 6, 147, 32, 0, 0, 0, 0}, 93, 74},
- {{148, 61, 120, 49, 220, 65, 150, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 61, 180},
- {{172, 35, 202, 180, 129, 75, 240, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 55, 91},
- {{215, 109, 147, 157, 32, 28, 52, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 54, 230},
- {{151, 26, 182, 112, 205, 220, 160, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 52, 175},
- {{73, 91, 93, 61, 196, 3, 66, 26, 149, 96, 0, 0, 0, 0, 0, 0}, 75, 171},
- {{203, 163, 52, 247, 28, 119, 56, 223, 138, 70, 174, 97, 77, 59, 46, 0}, 120, 202},
- {{251, 50, 228, 178, 202, 195, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 49, 113},
- {{217, 159, 164, 199, 14, 237, 170, 184, 100, 231, 92, 222, 0, 0, 0, 0}, 96, 187},
- {{16, 161, 85, 193, 202, 21, 3, 155, 63, 116, 124, 203, 34, 13, 215, 0}, 120, 38},
- {{111, 52, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 26, 35},
- {{69, 12, 116, 151, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 38, 115},
- {{187, 60, 97, 40, 112, 101, 96, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 51, 18},
- {{230, 194, 136, 255, 206, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 39, 34},
- {{179, 239, 170, 107, 3, 13, 212, 67, 177, 69, 8, 0, 0, 0, 0, 0}, 87, 75},
- {{11, 58, 130, 89, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 33, 232},
- {{217, 178, 43, 203, 234, 20, 234, 186, 157, 88, 146, 192, 0, 0, 0, 0}, 91, 154},
- {{6, 180, 224, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 19, 195},
- {{157, 154, 218, 158, 39, 224, 103, 230, 164, 0, 0, 0, 0, 0, 0, 0}, 70, 122},
- {{225, 10, 131, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 24, 97},
- {{16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 5, 220},
- {{166, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 7, 80},
- {{29, 190, 131, 215, 232, 246, 41, 226, 52, 192, 0, 0, 0, 0, 0, 0}, 77, 133},
- {{138, 74, 163, 93, 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 38, 93},
- {{229, 64, 97, 41, 28, 243, 249, 185, 97, 35, 49, 27, 175, 24, 0, 0}, 110, 176},
- {{6, 73, 94, 160, 186, 216, 84, 117, 233, 169, 146, 234, 0, 0, 0, 0}, 95, 68},
- {{163, 40, 242, 81, 224, 35, 72, 194, 176, 78, 224, 174, 12, 0, 0, 0}, 103, 247},
- {{2, 205, 40, 24, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 29, 240},
- {{174, 225, 240, 160, 212, 8, 246, 67, 36, 0, 0, 0, 0, 0, 0, 0}, 74, 83},
- {{5, 117, 182, 141, 166, 249, 196, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 55, 132},
- {{46, 152, 169, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 24, 217},
- {{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 3, 214},
- {{233, 202, 159, 219, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 34, 193},
- {{172, 54, 159, 5, 14, 245, 106, 182, 2, 0, 0, 0, 0, 0, 0, 0}, 71, 61},
- {{241, 222, 251, 114, 200, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 39, 65},
- {{31, 243, 190, 4, 207, 198, 249, 59, 167, 127, 93, 64, 0, 0, 0, 0}, 91, 108},
- {{201, 35, 222, 208, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 28, 244},
- {{187, 105, 13, 114, 238, 197, 145, 23, 169, 116, 91, 28, 0, 0, 0, 0}, 95, 194},
- {{251, 251, 121, 168, 152, 178, 147, 188, 229, 123, 154, 242, 190, 165, 173, 48}, 124, 82},
- {{66, 187, 191, 164, 31, 196, 40, 186, 148, 115, 134, 57, 222, 254, 48, 0}, 116, 45},
- {{209, 17, 111, 41, 154, 94, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 48, 224},
- {{40, 245, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 22, 17},
- {{72, 121, 151, 83, 170, 80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 44, 133},
- {{171, 172, 101, 238, 201, 148, 23, 81, 4, 11, 64, 0, 0, 0, 0, 0}, 85, 125},
- {{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 3, 42},
- {{20, 46, 27, 93, 195, 184, 6, 162, 109, 225, 22, 152, 0, 0, 0, 0}, 96, 140},
- {{243, 122, 30, 80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 28, 91},
- {{89, 250, 80, 72, 148, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 48, 92},
- {{187, 152, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 13, 125},
- {{172, 160, 143, 114, 128, 239, 174, 133, 176, 154, 159, 134, 10, 0, 0, 0}, 106, 249},
- {{254, 202, 113, 112, 173, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 40, 202},
- {{80, 152, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 13, 107},
- {{222, 216, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 13, 124},
- {{219, 138, 253, 12, 188, 197, 48, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 53, 57},
- {{124, 41, 173, 8, 202, 192, 61, 254, 174, 48, 239, 112, 0, 0, 0, 0}, 92, 181},
- {{195, 236, 245, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 24, 107},
- {{83, 82, 42, 244, 136, 191, 197, 81, 91, 154, 216, 85, 29, 150, 198, 22}, 128, 101},
- {{112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 4, 102},
- {{44, 30, 219, 248, 214, 88, 225, 132, 0, 0, 0, 0, 0, 0, 0, 0}, 62, 136},
- {{41, 171, 206, 178, 195, 80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 45, 114},
- {{159, 15, 180, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 22, 215},
- {{42, 188, 37, 174, 86, 40, 4, 84, 174, 216, 0, 0, 0, 0, 0, 0}, 79, 249},
- {{185, 227, 85, 177, 219, 95, 250, 227, 69, 154, 118, 0, 0, 0, 0, 0}, 88, 29},
- {{22, 185, 238, 100, 25, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 44, 71},
- {{122, 149, 117, 77, 88, 250, 187, 203, 136, 22, 85, 42, 105, 234, 79, 8}, 127, 112},
- {{93, 152, 229, 140, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 31, 72},
- {{129, 37, 165, 167, 241, 24, 37, 40, 2, 128, 0, 0, 0, 0, 0, 0}, 73, 155},
- {{30, 202, 177, 3, 253, 202, 164, 248, 0, 0, 0, 0, 0, 0, 0, 0}, 61, 66},
- {{176, 25, 220, 120, 194, 228, 10, 45, 225, 142, 192, 96, 0, 0, 0, 0}, 91, 77},
- {{96, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 3, 109},
- {{82, 56, 12, 204, 61, 45, 147, 240, 221, 0, 0, 0, 0, 0, 0, 0}, 72, 37},
- {{242, 38, 240, 41, 140, 75, 250, 37, 175, 115, 97, 224, 0, 0, 0, 0}, 91, 56},
- {{251, 192, 23, 90, 135, 56, 252, 56, 79, 219, 80, 167, 22, 0, 0, 0}, 103, 5},
- {{62, 128, 139, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 25, 15},
- {{214, 1, 84, 232, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 29, 183},
- {{207, 90, 237, 137, 171, 140, 227, 88, 250, 26, 197, 162, 163, 0, 0, 0}, 105, 171},
- {{196, 151, 235, 232, 114, 248, 1, 207, 193, 184, 186, 71, 157, 0, 0, 0}, 112, 202},
- {{152, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 5, 136},
- {{9, 174, 211, 200, 120, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 37, 107},
- {{89, 150, 95, 28, 209, 13, 125, 159, 254, 244, 110, 0, 0, 0, 0, 0}, 87, 193},
- {{23, 28, 202, 10, 90, 158, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 52, 4},
- {{48, 25, 180, 9, 84, 236, 6, 144, 30, 198, 41, 56, 0, 0, 0, 0}, 96, 68},
- {{252, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 7, 40},
- {{20, 165, 57, 130, 164, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 39, 255},
- {{167, 56, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 18, 108},
- {{91, 204, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 14, 219},
- {{24, 46, 9, 4, 170, 150, 56, 130, 127, 120, 118, 104, 168, 48, 0, 0}, 108, 12},
- {{156, 60, 245, 247, 189, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 40, 84},
- {{148, 104, 187, 174, 129, 28, 127, 162, 92, 222, 52, 18, 0, 0, 0, 0}, 96, 33},
- {{38, 253, 182, 153, 233, 194, 159, 41, 94, 193, 254, 160, 0, 0, 0, 0}, 91, 199},
- {{156, 77, 105, 235, 145, 216, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 46, 52},
- {{100, 211, 238, 147, 65, 222, 99, 73, 252, 113, 46, 113, 52, 136, 0, 0}, 113, 184},
- {{13, 30, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 18, 124},
- {{29, 240, 141, 230, 78, 237, 25, 135, 131, 6, 65, 77, 77, 248, 0, 0}, 109, 128},
- {{15, 192, 109, 31, 149, 221, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 49, 255},
- {{80, 185, 170, 71, 41, 58, 158, 106, 253, 7, 2, 184, 173, 0, 0, 0}, 105, 146},
- {{16, 229, 224, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 24, 172},
- {{169, 2, 153, 9, 169, 203, 245, 154, 184, 0, 0, 0, 0, 0, 0, 0}, 70, 116},
- {{144, 135, 239, 164, 142, 187, 64, 109, 0, 0, 0, 0, 0, 0, 0, 0}, 66, 189},
- {{170, 78, 252, 227, 242, 199, 130, 251, 200, 0, 0, 0, 0, 0, 0, 0}, 70, 10},
- {{232, 18, 15, 126, 166, 126, 58, 25, 209, 62, 76, 79, 0, 0, 0, 0}, 98, 184},
- {{170, 82, 72, 53, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 33, 98},
- {{152, 100, 37, 122, 242, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 42, 37},
- {{174, 231, 230, 33, 71, 224, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 46, 174},
- {{74, 225, 252, 153, 202, 8, 162, 39, 64, 0, 0, 0, 0, 0, 0, 0}, 67, 251},
- {{167, 186, 101, 187, 122, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 42, 115},
- {{83, 7, 21, 122, 243, 67, 171, 146, 145, 160, 168, 103, 223, 64, 0, 0}, 107, 252},
- {{83, 132, 219, 86, 86, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 40, 176},
- {{22, 113, 72, 102, 73, 16, 236, 57, 197, 122, 31, 0, 0, 0, 0, 0}, 91, 155},
- {{250, 59, 64, 35, 72, 112, 159, 85, 200, 5, 193, 39, 152, 185, 148, 16}, 124, 36},
- {{220, 21, 48, 164, 224, 121, 17, 69, 10, 118, 106, 0, 0, 0, 0, 0}, 88, 202},
- {{160, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 5, 208},
- {{247, 64, 83, 125, 195, 225, 50, 76, 18, 104, 0, 0, 0, 0, 0, 0}, 77, 158},
- {{78, 91, 31, 202, 189, 25, 13, 133, 220, 0, 0, 0, 0, 0, 0, 0}, 72, 136},
- {{105, 197, 26, 80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 28, 191},
- {{14, 31, 154, 242, 241, 231, 55, 151, 223, 56, 134, 255, 113, 206, 69, 0}, 120, 126},
- {{247, 193, 58, 176, 16, 71, 31, 120, 213, 104, 231, 83, 26, 118, 91, 135}, 128, 139},
- {{136, 32, 240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 25, 216},
- {{100, 238, 112, 40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 29, 93},
- {{80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 4, 196},
- {{233, 224, 254, 57, 33, 205, 140, 217, 181, 72, 0, 0, 0, 0, 0, 0}, 81, 119},
- {{107, 75, 65, 158, 128, 142, 191, 188, 188, 240, 148, 243, 116, 0, 0, 0}, 104, 93},
- {{39, 70, 120, 114, 69, 237, 95, 48, 233, 176, 91, 154, 0, 0, 0, 0}, 96, 183},
- {{10, 61, 43, 101, 64, 102, 208, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 52, 207},
- {{151, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 9, 102},
- {{210, 241, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 19, 36},
- {{52, 222, 249, 31, 108, 137, 199, 1, 242, 173, 184, 144, 0, 0, 0, 0}, 93, 41},
- {{123, 111, 88, 192, 69, 70, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 47, 70},
- {{180, 82, 188, 125, 140, 8, 196, 74, 0, 0, 0, 0, 0, 0, 0, 0}, 63, 218},
- {{77, 158, 34, 101, 196, 102, 56, 220, 42, 143, 181, 187, 240, 64, 161, 0}, 120, 226},
- {{88, 220, 222, 38, 23, 108, 5, 148, 185, 110, 20, 14, 67, 61, 0, 0}, 114, 25},
- {{90, 65, 220, 165, 197, 133, 110, 92, 228, 19, 2, 17, 0, 0, 0, 0}, 98, 6},
- {{35, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 11, 26},
- {{103, 123, 49, 209, 228, 229, 144, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 52, 149},
- {{50, 244, 58, 191, 95, 156, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 46, 127},
- {{140, 169, 75, 77, 78, 86, 40, 16, 0, 0, 0, 0, 0, 0, 0, 0}, 62, 144},
- {{99, 176, 175, 83, 114, 50, 214, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 56, 213},
- {{19, 208, 211, 76, 85, 176, 247, 64, 0, 0, 0, 0, 0, 0, 0, 0}, 58, 115},
- {{153, 28, 188, 113, 211, 116, 7, 178, 136, 205, 96, 0, 0, 0, 0, 0}, 83, 146},
- {{160, 180, 220, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 26, 58},
- {{234, 6, 112, 19, 61, 74, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 47, 222},
- {{97, 110, 34, 117, 149, 148, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 50, 16},
- {{99, 173, 119, 73, 250, 30, 144, 30, 128, 0, 0, 0, 0, 0, 0, 0}, 65, 169},
- {{169, 134, 111, 89, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 40, 175},
- {{134, 80, 227, 43, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 32, 3},
- {{231, 243, 35, 80, 75, 207, 128, 137, 54, 170, 71, 238, 0, 0, 0, 0}, 96, 2},
- {{189, 190, 121, 135, 160, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 36, 193},
- {{143, 155, 216, 193, 239, 205, 204, 153, 143, 236, 69, 23, 200, 211, 0, 0}, 118, 151},
- {{32, 1, 115, 244, 33, 219, 96, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 51, 182},
- {{220, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 10, 148},
- {{206, 87, 135, 235, 116, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 42, 53},
- {{152, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 11, 87},
- {{58, 146, 188, 233, 230, 236, 192, 214, 168, 128, 0, 0, 0, 0, 0, 0}, 73, 235},
- {{84, 220, 82, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 23, 51},
- {{106, 145, 142, 42, 186, 186, 58, 1, 48, 98, 165, 131, 48, 156, 192, 0}, 116, 11},
- {{53, 219, 120, 242, 166, 214, 81, 130, 64, 0, 0, 0, 0, 0, 0, 0}, 68, 28},
- {{240, 120, 76, 163, 32, 197, 181, 251, 98, 220, 29, 226, 0, 0, 0, 0}, 96, 73},
- {{234, 197, 12, 160, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 28, 216},
- {{191, 94, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 16, 99},
- {{200, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 18, 35},
- {{29, 129, 47, 83, 19, 75, 158, 1, 28, 24, 26, 147, 82, 119, 140, 100}, 127, 195},
- {{241, 174, 26, 53, 152, 112, 200, 134, 84, 187, 177, 176, 42, 64, 0, 0}, 108, 176},
- {{77, 171, 145, 48, 195, 84, 190, 36, 122, 199, 18, 0, 0, 0, 0, 0}, 87, 217},
- {{105, 104, 135, 53, 226, 118, 238, 169, 9, 253, 132, 162, 217, 123, 191, 96}, 126, 244},
- {{160, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 3, 125},
- {{41, 85, 143, 128, 91, 137, 192, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 50, 219},
- {{116, 110, 192, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 18, 165},
- {{75, 213, 44, 16, 43, 157, 34, 171, 98, 117, 109, 151, 5, 60, 224, 0}, 117, 6},
- {{229, 23, 116, 61, 80, 139, 200, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 53, 47},
- {{83, 123, 74, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 23, 73},
- {{151, 243, 45, 217, 216, 158, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 47, 98},
- {{171, 184, 110, 211, 237, 114, 144, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 52, 21},
- {{7, 246, 199, 119, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 32, 142},
- {{103, 47, 70, 17, 31, 232, 44, 75, 145, 155, 100, 216, 0, 0, 0, 0}, 93, 34},
- {{65, 170, 169, 100, 167, 147, 142, 251, 20, 64, 0, 0, 0, 0, 0, 0}, 74, 41},
- {{235, 6, 229, 248, 151, 137, 36, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 55, 80},
- {{156, 39, 96, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 22, 11},
- {{92, 188, 82, 192, 142, 249, 190, 128, 0, 0, 0, 0, 0, 0, 0, 0}, 58, 254},
- {{253, 218, 181, 46, 134, 144, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 45, 95},
- {{189, 19, 31, 244, 80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 40, 8},
- {{30, 116, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 14, 212},
- {{81, 226, 13, 173, 79, 123, 223, 124, 108, 80, 83, 238, 0, 0, 0, 0}, 95, 217},
- {{126, 211, 206, 82, 147, 215, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 57, 15},
- {{42, 229, 135, 197, 196, 243, 94, 181, 133, 34, 16, 0, 0, 0, 0, 0}, 84, 66},
- {{68, 210, 158, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 28, 122},
- {{183, 63, 223, 94, 81, 41, 203, 20, 236, 212, 220, 199, 0, 0, 0, 0}, 97, 12},
- {{131, 146, 2, 125, 174, 43, 231, 20, 194, 0, 0, 0, 0, 0, 0, 0}, 71, 171},
- {{31, 180, 246, 158, 28, 192, 236, 39, 237, 55, 74, 195, 171, 192, 0, 0}, 106, 42},
- {{179, 10, 70, 80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 28, 194},
- {{147, 51, 85, 185, 234, 209, 236, 87, 147, 17, 7, 68, 148, 32, 0, 0}, 107, 237},
- {{177, 178, 6, 40, 46, 166, 87, 198, 214, 234, 23, 224, 0, 0, 0, 0}, 93, 151},
- {{201, 53, 40, 20, 49, 4, 38, 139, 133, 217, 214, 134, 89, 200, 0, 0}, 109, 238},
- {{4, 26, 181, 37, 206, 129, 233, 32, 0, 0, 0, 0, 0, 0, 0, 0}, 59, 128},
- {{81, 58, 248, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 26, 227},
- {{18, 238, 250, 161, 57, 246, 208, 118, 14, 76, 73, 25, 65, 22, 152, 120}, 127, 138},
- {{31, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 10, 60},
- {{115, 195, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 18, 148},
- {{116, 22, 75, 33, 16, 129, 35, 124, 10, 112, 31, 213, 181, 108, 177, 46}, 128, 129},
- {{117, 214, 20, 80, 83, 51, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 49, 202},
- {{120, 75, 124, 149, 120, 123, 242, 151, 181, 164, 128, 0, 0, 0, 0, 0}, 81, 88},
- {{87, 238, 168, 62, 88, 166, 52, 104, 219, 169, 93, 128, 0, 0, 0, 0}, 90, 3},
- {{237, 44, 224, 146, 52, 85, 245, 192, 65, 137, 37, 95, 156, 176, 0, 0}, 108, 243},
- {{214, 241, 51, 63, 73, 61, 193, 165, 23, 108, 0, 0, 0, 0, 0, 0}, 80, 95},
- {{87, 242, 21, 157, 45, 188, 36, 62, 66, 243, 64, 0, 0, 0, 0, 0}, 87, 255},
- {{0, 97, 220, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 26, 48},
- {{227, 206, 189, 31, 222, 8, 192, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 50, 38},
- {{174, 27, 0, 16, 13, 150, 33, 122, 154, 59, 236, 35, 248, 178, 64, 0}, 115, 20},
- {{39, 20, 125, 69, 252, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 43, 41},
- {{141, 232, 1, 12, 125, 229, 168, 14, 125, 116, 180, 0, 0, 0, 0, 0}, 92, 133},
- {{93, 238, 40, 228, 254, 203, 251, 6, 60, 82, 243, 242, 0, 0, 0, 0}, 95, 189},
- {{44, 115, 200, 17, 146, 223, 115, 253, 126, 206, 152, 90, 0, 0, 0, 0}, 95, 151},
- {{213, 58, 235, 255, 6, 163, 61, 10, 224, 0, 0, 0, 0, 0, 0, 0}, 68, 100},
- {{25, 86, 139, 116, 190, 88, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 49, 118},
- {{113, 40, 65, 141, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 34, 164},
- {{149, 205, 200, 186, 19, 126, 215, 199, 94, 37, 100, 32, 128, 0, 0, 0}, 98, 71},
- {{39, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 9, 251},
- {{81, 87, 80, 173, 163, 166, 104, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 57, 51},
- {{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 3, 185},
- {{140, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 10, 144},
- {{6, 42, 1, 178, 250, 53, 186, 178, 114, 121, 192, 0, 0, 0, 0, 0}, 84, 51},
- {{2, 17, 234, 51, 169, 5, 219, 149, 245, 237, 4, 0, 0, 0, 0, 0}, 87, 32},
- {{112, 187, 173, 17, 229, 171, 225, 170, 8, 0, 0, 0, 0, 0, 0, 0}, 70, 137},
- {{203, 71, 140, 237, 113, 96, 123, 16, 0, 0, 0, 0, 0, 0, 0, 0}, 60, 2},
- {{99, 138, 207, 2, 244, 25, 211, 98, 0, 0, 0, 0, 0, 0, 0, 0}, 63, 163},
- {{114, 42, 98, 246, 252, 48, 233, 118, 63, 226, 157, 226, 192, 0, 0, 0}, 100, 162},
- {{161, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 10, 192},
- {{233, 70, 240, 45, 240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 36, 185},
- {{28, 123, 31, 176, 235, 229, 169, 192, 0, 0, 0, 0, 0, 0, 0, 0}, 59, 51},
- {{146, 197, 243, 235, 243, 56, 140, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 54, 93},
- {{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 2, 159},
- {{141, 92, 13, 27, 87, 241, 171, 143, 220, 0, 0, 0, 0, 0, 0, 0}, 72, 189},
- {{164, 151, 192, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 21, 248},
- {{35, 188, 248, 79, 39, 151, 232, 215, 248, 245, 185, 144, 78, 102, 173, 128}, 123, 38},
- {{193, 232, 166, 60, 62, 80, 230, 225, 165, 240, 0, 0, 0, 0, 0, 0}, 76, 167},
- {{109, 229, 118, 155, 43, 154, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 51, 28},
- {{160, 62, 63, 212, 218, 138, 154, 108, 163, 127, 197, 237, 183, 44, 140, 192}, 125, 37},
- {{196, 37, 51, 146, 26, 85, 53, 31, 216, 141, 52, 218, 153, 32, 0, 0}, 107, 234},
- {{228, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 9, 70},
- {{154, 248, 20, 242, 154, 244, 63, 17, 121, 52, 70, 84, 118, 208, 0, 0}, 108, 50},
- {{41, 100, 27, 84, 106, 112, 96, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 51, 171},
- {{81, 99, 197, 139, 30, 150, 230, 216, 81, 190, 84, 165, 29, 64, 128, 0}, 113, 236},
- {{112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 4, 3},
- {{164, 119, 253, 126, 160, 249, 183, 191, 119, 111, 224, 0, 0, 0, 0, 0}, 86, 64},
- {{138, 58, 198, 254, 0, 197, 60, 91, 132, 199, 181, 251, 78, 160, 0, 0}, 108, 213},
- {{209, 89, 168, 236, 146, 169, 100, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 54, 15},
- {{131, 210, 208, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 20, 145},
- {{165, 190, 157, 7, 131, 5, 147, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 57, 27},
- {{179, 226, 57, 204, 187, 70, 52, 81, 119, 162, 229, 42, 47, 185, 9, 162}, 127, 75},
- {{98, 235, 155, 51, 107, 167, 127, 137, 254, 246, 162, 171, 180, 13, 233, 0}, 123, 76},
- {{107, 79, 76, 90, 94, 151, 155, 31, 33, 115, 19, 204, 98, 115, 0, 0}, 113, 247},
- {{143, 46, 30, 175, 224, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 43, 121},
- {{155, 85, 217, 180, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 30, 214},
- {{58, 62, 156, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 26, 221},
- {{92, 155, 53, 3, 39, 108, 155, 200, 0, 0, 0, 0, 0, 0, 0, 0}, 63, 102},
- {{64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 2, 191},
- {{63, 134, 251, 59, 192, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 39, 197},
- {{234, 149, 220, 106, 0, 144, 214, 128, 35, 102, 0, 0, 0, 0, 0, 0}, 79, 106},
-};
-
-#define NUM_ROUTE_ENTRIES \
- (sizeof(large_route_table) / sizeof(large_route_table[0]))
-
-#define NUM_IPS_ENTRIES (NUM_ROUTE_ENTRIES * 100)
-
-/* clear the previous large_ips_table and reduce LPM6 test case much smaller,
- * keep same size as previous one to make test case run similar input data.
- */
-static struct ips_tbl_entry large_ips_table[NUM_IPS_ENTRIES];
-
-/* let the most significant depth bits of ip_out[] same as ip_in[]
- * in the same bit position. ip_out[] and ip_in[] are IPv6 address.
- */
-static inline void mask_ip6_prefix(uint8_t *ip_out,
- const uint8_t *ip_in, uint8_t depth)
-{
- int k;
- uint8_t mask_in, mask_out;
-
- for (k = 0; k < 16; k++) {
- if (depth >= 8)
- ip_out[k] = ip_in[k];
- else if (depth > 0) {
- mask_in = (uint8_t)((unsigned int)(-1) << (8 - depth));
- mask_out = ~mask_in;
- ip_out[k] = (ip_in[k] & mask_in)
- | (ip_out[k] & mask_out);
- } else
- return;
-
- depth -= 8;
- }
-}
-
-/* check if IPv6 address ip[] match the rule with IPv6 address ip_rule[]
- * and depth. if matched, return 0, else return -1.
- */
-static inline int check_lpm6_rule(uint8_t *ip,
- const uint8_t *ip_rule, uint8_t depth)
-{
- int k;
- uint8_t mask;
-
- for (k = 0; k < 16; k++) {
- if (depth >= 8) {
- if (ip[k] != ip_rule[k])
- return -1;
- } else if (depth > 0) {
- mask = (uint8_t)((unsigned int)(-1) << (8 - depth));
- if ((ip[k] & mask) == (ip_rule[k] & mask))
- return 0;
- else
- return -1;
- } else
- return 0;
-
- depth -= 8;
- }
-
- return 0;
-}
-
-/* check input IPv6 address ip[] with each one in rule[] and
- * output the *next_hop from the matched item in rule[] with
- * longest depth. The count of items in rule[ ] is rule_num.
- * if found that some item in rule[] is matched return 0,
- * else return -1;
- */
-static int get_next_hop(uint8_t *ip, uint8_t *next_hop,
- const struct rules_tbl_entry *rule, int rule_num)
-{
- int i;
- int result;
- uint8_t max_depth = 0;
-
- for (i = 0; i < rule_num; i++) {
- if (rule[i].depth >= max_depth) {
- result = check_lpm6_rule(ip, rule[i].ip, rule[i].depth);
- if (result == 0) {
- *next_hop = rule[i].next_hop;
- max_depth = rule[i].depth;
- }
- }
- }
-
- if (max_depth > 0)
- return 0;
- else
- return -1;
-}
-
-/* the implementation of algorithm to generate large IPS table
- * at run time. if gen_expected_nex_hop is non-zero, the expected
- * next_hop of the IPv6 address of each item in IPS table is computed.
- */
-static void generate_large_ips_table(int gen_expected_next_hop)
-{
- uint32_t i, j, k;
-
- for (i = 0; i < NUM_IPS_ENTRIES; i++) {
- for (j = 0; j < 16; j++)
- large_ips_table[i].ip[j] = lrand48();
- }
-
- for (k = j = 0, i = 0; i < NUM_IPS_ENTRIES; i++) {
- mask_ip6_prefix(large_ips_table[i].ip,
- large_route_table[j].ip, large_route_table[j].depth);
- k++;
- if (k == (NUM_IPS_ENTRIES / NUM_ROUTE_ENTRIES)) {
- j++;
- k = 0;
- }
- if (j == NUM_ROUTE_ENTRIES)
- j = 0;
- }
-
- if (gen_expected_next_hop == 0)
- return;
-
- for (k = 0; k < NUM_IPS_ENTRIES; k++)
- get_next_hop(large_ips_table[k].ip,
- &(large_ips_table[k].next_hop),
- large_route_table,
- NUM_ROUTE_ENTRIES);
-
-}
-
-#endif /* _TEST_LPM_ROUTES_H_ */
diff --git a/app/test/test_lpm6_perf.c b/app/test/test_lpm6_perf.c
deleted file mode 100644
index 0723081b..00000000
--- a/app/test/test_lpm6_perf.c
+++ /dev/null
@@ -1,192 +0,0 @@
-/*-
- * BSD LICENSE
- *
- * Copyright(c) 2010-2014 Intel Corporation. All rights reserved.
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * * Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * * Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in
- * the documentation and/or other materials provided with the
- * distribution.
- * * Neither the name of Intel Corporation nor the names of its
- * contributors may be used to endorse or promote products derived
- * from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
- * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
- * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#include <stdio.h>
-#include <stdint.h>
-#include <stdlib.h>
-#include <string.h>
-
-#include <rte_cycles.h>
-#include <rte_random.h>
-#include <rte_memory.h>
-#include <rte_lpm6.h>
-
-#include "test.h"
-#include "test_lpm6_data.h"
-
-#define TEST_LPM_ASSERT(cond) do { \
- if (!(cond)) { \
- printf("Error at line %d: \n", __LINE__); \
- return -1; \
- } \
-} while(0)
-
-#define ITERATIONS (1 << 10)
-#define BATCH_SIZE 100000
-#define NUMBER_TBL8S (1 << 16)
-
-static void
-print_route_distribution(const struct rules_tbl_entry *table, uint32_t n)
-{
- unsigned i, j;
-
- printf("Route distribution per prefix width: \n");
- printf("DEPTH QUANTITY (PERCENT)\n");
- printf("--------------------------- \n");
-
- /* Count depths. */
- for(i = 1; i <= 128; i++) {
- unsigned depth_counter = 0;
- double percent_hits;
-
- for (j = 0; j < n; j++)
- if (table[j].depth == (uint8_t) i)
- depth_counter++;
-
- percent_hits = ((double)depth_counter)/((double)n) * 100;
- printf("%.2u%15u (%.2f)\n", i, depth_counter, percent_hits);
- }
- printf("\n");
-}
-
-static int
-test_lpm6_perf(void)
-{
- struct rte_lpm6 *lpm = NULL;
- struct rte_lpm6_config config;
- uint64_t begin, total_time;
- unsigned i, j;
- uint8_t next_hop_add = 0xAA, next_hop_return = 0;
- int status = 0;
- int64_t count = 0;
-
- config.max_rules = 1000000;
- config.number_tbl8s = NUMBER_TBL8S;
- config.flags = 0;
-
- rte_srand(rte_rdtsc());
-
- printf("No. routes = %u\n", (unsigned) NUM_ROUTE_ENTRIES);
-
- print_route_distribution(large_route_table, (uint32_t) NUM_ROUTE_ENTRIES);
-
- /* Only generate IPv6 address of each item in large IPS table,
- * here next_hop is not needed.
- */
- generate_large_ips_table(0);
-
- lpm = rte_lpm6_create(__func__, SOCKET_ID_ANY, &config);
- TEST_LPM_ASSERT(lpm != NULL);
-
- /* Measure add. */
- begin = rte_rdtsc();
-
- for (i = 0; i < NUM_ROUTE_ENTRIES; i++) {
- if (rte_lpm6_add(lpm, large_route_table[i].ip,
- large_route_table[i].depth, next_hop_add) == 0)
- status++;
- }
- /* End Timer. */
- total_time = rte_rdtsc() - begin;
-
- printf("Unique added entries = %d\n", status);
- printf("Average LPM Add: %g cycles\n",
- (double)total_time / NUM_ROUTE_ENTRIES);
-
- /* Measure single Lookup */
- total_time = 0;
- count = 0;
-
- for (i = 0; i < ITERATIONS; i ++) {
- begin = rte_rdtsc();
-
- for (j = 0; j < NUM_IPS_ENTRIES; j ++) {
- if (rte_lpm6_lookup(lpm, large_ips_table[j].ip,
- &next_hop_return) != 0)
- count++;
- }
-
- total_time += rte_rdtsc() - begin;
-
- }
- printf("Average LPM Lookup: %.1f cycles (fails = %.1f%%)\n",
- (double)total_time / ((double)ITERATIONS * BATCH_SIZE),
- (count * 100.0) / (double)(ITERATIONS * BATCH_SIZE));
-
- /* Measure bulk Lookup */
- total_time = 0;
- count = 0;
-
- uint8_t ip_batch[NUM_IPS_ENTRIES][16];
- int16_t next_hops[NUM_IPS_ENTRIES];
-
- for (i = 0; i < NUM_IPS_ENTRIES; i++)
- memcpy(ip_batch[i], large_ips_table[i].ip, 16);
-
- for (i = 0; i < ITERATIONS; i ++) {
-
- /* Lookup per batch */
- begin = rte_rdtsc();
- rte_lpm6_lookup_bulk_func(lpm, ip_batch, next_hops, NUM_IPS_ENTRIES);
- total_time += rte_rdtsc() - begin;
-
- for (j = 0; j < NUM_IPS_ENTRIES; j++)
- if (next_hops[j] < 0)
- count++;
- }
- printf("BULK LPM Lookup: %.1f cycles (fails = %.1f%%)\n",
- (double)total_time / ((double)ITERATIONS * BATCH_SIZE),
- (count * 100.0) / (double)(ITERATIONS * BATCH_SIZE));
-
- /* Delete */
- status = 0;
- begin = rte_rdtsc();
-
- for (i = 0; i < NUM_ROUTE_ENTRIES; i++) {
- /* rte_lpm_delete(lpm, ip, depth) */
- status += rte_lpm6_delete(lpm, large_route_table[i].ip,
- large_route_table[i].depth);
- }
-
- total_time += rte_rdtsc() - begin;
-
- printf("Average LPM Delete: %g cycles\n",
- (double)total_time / NUM_ROUTE_ENTRIES);
-
- rte_lpm6_delete_all(lpm);
- rte_lpm6_free(lpm);
-
- return 0;
-}
-
-REGISTER_TEST_COMMAND(lpm6_perf_autotest, test_lpm6_perf);
diff --git a/app/test/test_lpm_perf.c b/app/test/test_lpm_perf.c
deleted file mode 100644
index e7e1281b..00000000
--- a/app/test/test_lpm_perf.c
+++ /dev/null
@@ -1,513 +0,0 @@
-/*-
- * BSD LICENSE
- *
- * Copyright(c) 2010-2014 Intel Corporation. All rights reserved.
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * * Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * * Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in
- * the documentation and/or other materials provided with the
- * distribution.
- * * Neither the name of Intel Corporation nor the names of its
- * contributors may be used to endorse or promote products derived
- * from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
- * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
- * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#include <stdio.h>
-#include <stdint.h>
-#include <stdlib.h>
-#include <math.h>
-
-#include <rte_cycles.h>
-#include <rte_random.h>
-#include <rte_branch_prediction.h>
-#include <rte_ip.h>
-#include <rte_lpm.h>
-
-#include "test.h"
-#include "test_xmmt_ops.h"
-
-#define TEST_LPM_ASSERT(cond) do { \
- if (!(cond)) { \
- printf("Error at line %d: \n", __LINE__); \
- return -1; \
- } \
-} while(0)
-
-#define ITERATIONS (1 << 10)
-#define BATCH_SIZE (1 << 12)
-#define BULK_SIZE 32
-
-#define MAX_RULE_NUM (1200000)
-
-struct route_rule {
- uint32_t ip;
- uint8_t depth;
-};
-
-struct route_rule large_route_table[MAX_RULE_NUM];
-
-static uint32_t num_route_entries;
-#define NUM_ROUTE_ENTRIES num_route_entries
-
-enum {
- IP_CLASS_A,
- IP_CLASS_B,
- IP_CLASS_C
-};
-
-/* struct route_rule_count defines the total number of rules in following a/b/c
- * each item in a[]/b[]/c[] is the number of common IP address class A/B/C, not
- * including the ones for private local network.
- */
-struct route_rule_count {
- uint32_t a[RTE_LPM_MAX_DEPTH];
- uint32_t b[RTE_LPM_MAX_DEPTH];
- uint32_t c[RTE_LPM_MAX_DEPTH];
-};
-
-/* All following numbers of each depth of each common IP class are just
- * got from previous large constant table in app/test/test_lpm_routes.h .
- * In order to match similar performance, they keep same depth and IP
- * address coverage as previous constant table. These numbers don't
- * include any private local IP address. As previous large const rule
- * table was just dumped from a real router, there are no any IP address
- * in class C or D.
- */
-static struct route_rule_count rule_count = {
- .a = { /* IP class A in which the most significant bit is 0 */
- 0, /* depth = 1 */
- 0, /* depth = 2 */
- 1, /* depth = 3 */
- 0, /* depth = 4 */
- 2, /* depth = 5 */
- 1, /* depth = 6 */
- 3, /* depth = 7 */
- 185, /* depth = 8 */
- 26, /* depth = 9 */
- 16, /* depth = 10 */
- 39, /* depth = 11 */
- 144, /* depth = 12 */
- 233, /* depth = 13 */
- 528, /* depth = 14 */
- 866, /* depth = 15 */
- 3856, /* depth = 16 */
- 3268, /* depth = 17 */
- 5662, /* depth = 18 */
- 17301, /* depth = 19 */
- 22226, /* depth = 20 */
- 11147, /* depth = 21 */
- 16746, /* depth = 22 */
- 17120, /* depth = 23 */
- 77578, /* depth = 24 */
- 401, /* depth = 25 */
- 656, /* depth = 26 */
- 1107, /* depth = 27 */
- 1121, /* depth = 28 */
- 2316, /* depth = 29 */
- 717, /* depth = 30 */
- 10, /* depth = 31 */
- 66 /* depth = 32 */
- },
- .b = { /* IP class A in which the most 2 significant bits are 10 */
- 0, /* depth = 1 */
- 0, /* depth = 2 */
- 0, /* depth = 3 */
- 0, /* depth = 4 */
- 1, /* depth = 5 */
- 1, /* depth = 6 */
- 1, /* depth = 7 */
- 3, /* depth = 8 */
- 3, /* depth = 9 */
- 30, /* depth = 10 */
- 25, /* depth = 11 */
- 168, /* depth = 12 */
- 305, /* depth = 13 */
- 569, /* depth = 14 */
- 1129, /* depth = 15 */
- 50800, /* depth = 16 */
- 1645, /* depth = 17 */
- 1820, /* depth = 18 */
- 3506, /* depth = 19 */
- 3258, /* depth = 20 */
- 3424, /* depth = 21 */
- 4971, /* depth = 22 */
- 6885, /* depth = 23 */
- 39771, /* depth = 24 */
- 424, /* depth = 25 */
- 170, /* depth = 26 */
- 433, /* depth = 27 */
- 92, /* depth = 28 */
- 366, /* depth = 29 */
- 377, /* depth = 30 */
- 2, /* depth = 31 */
- 200 /* depth = 32 */
- },
- .c = { /* IP class A in which the most 3 significant bits are 110 */
- 0, /* depth = 1 */
- 0, /* depth = 2 */
- 0, /* depth = 3 */
- 0, /* depth = 4 */
- 0, /* depth = 5 */
- 0, /* depth = 6 */
- 0, /* depth = 7 */
- 12, /* depth = 8 */
- 8, /* depth = 9 */
- 9, /* depth = 10 */
- 33, /* depth = 11 */
- 69, /* depth = 12 */
- 237, /* depth = 13 */
- 1007, /* depth = 14 */
- 1717, /* depth = 15 */
- 14663, /* depth = 16 */
- 8070, /* depth = 17 */
- 16185, /* depth = 18 */
- 48261, /* depth = 19 */
- 36870, /* depth = 20 */
- 33960, /* depth = 21 */
- 50638, /* depth = 22 */
- 61422, /* depth = 23 */
- 466549, /* depth = 24 */
- 1829, /* depth = 25 */
- 4824, /* depth = 26 */
- 4927, /* depth = 27 */
- 5914, /* depth = 28 */
- 10254, /* depth = 29 */
- 4905, /* depth = 30 */
- 1, /* depth = 31 */
- 716 /* depth = 32 */
- }
-};
-
-static void generate_random_rule_prefix(uint32_t ip_class, uint8_t depth)
-{
-/* IP address class A, the most significant bit is 0 */
-#define IP_HEAD_MASK_A 0x00000000
-#define IP_HEAD_BIT_NUM_A 1
-
-/* IP address class B, the most significant 2 bits are 10 */
-#define IP_HEAD_MASK_B 0x80000000
-#define IP_HEAD_BIT_NUM_B 2
-
-/* IP address class C, the most significant 3 bits are 110 */
-#define IP_HEAD_MASK_C 0xC0000000
-#define IP_HEAD_BIT_NUM_C 3
-
- uint32_t class_depth;
- uint32_t range;
- uint32_t mask;
- uint32_t step;
- uint32_t start;
- uint32_t fixed_bit_num;
- uint32_t ip_head_mask;
- uint32_t rule_num;
- uint32_t k;
- struct route_rule *ptr_rule;
-
- if (ip_class == IP_CLASS_A) { /* IP Address class A */
- fixed_bit_num = IP_HEAD_BIT_NUM_A;
- ip_head_mask = IP_HEAD_MASK_A;
- rule_num = rule_count.a[depth - 1];
- } else if (ip_class == IP_CLASS_B) { /* IP Address class B */
- fixed_bit_num = IP_HEAD_BIT_NUM_B;
- ip_head_mask = IP_HEAD_MASK_B;
- rule_num = rule_count.b[depth - 1];
- } else { /* IP Address class C */
- fixed_bit_num = IP_HEAD_BIT_NUM_C;
- ip_head_mask = IP_HEAD_MASK_C;
- rule_num = rule_count.c[depth - 1];
- }
-
- if (rule_num == 0)
- return;
-
- /* the number of rest bits which don't include the most significant
- * fixed bits for this IP address class
- */
- class_depth = depth - fixed_bit_num;
-
- /* range is the maximum number of rules for this depth and
- * this IP address class
- */
- range = 1 << class_depth;
-
- /* only mask the most depth significant generated bits
- * except fixed bits for IP address class
- */
- mask = range - 1;
-
- /* Widen coverage of IP address in generated rules */
- if (range <= rule_num)
- step = 1;
- else
- step = round((double)range / rule_num);
-
- /* Only generate rest bits except the most significant
- * fixed bits for IP address class
- */
- start = lrand48() & mask;
- ptr_rule = &large_route_table[num_route_entries];
- for (k = 0; k < rule_num; k++) {
- ptr_rule->ip = (start << (RTE_LPM_MAX_DEPTH - depth))
- | ip_head_mask;
- ptr_rule->depth = depth;
- ptr_rule++;
- start = (start + step) & mask;
- }
- num_route_entries += rule_num;
-}
-
-static void insert_rule_in_random_pos(uint32_t ip, uint8_t depth)
-{
- uint32_t pos;
- int try_count = 0;
- struct route_rule tmp;
-
- do {
- pos = lrand48();
- try_count++;
- } while ((try_count < 10) && (pos > num_route_entries));
-
- if ((pos > num_route_entries) || (pos >= MAX_RULE_NUM))
- pos = num_route_entries >> 1;
-
- tmp = large_route_table[pos];
- large_route_table[pos].ip = ip;
- large_route_table[pos].depth = depth;
- if (num_route_entries < MAX_RULE_NUM)
- large_route_table[num_route_entries++] = tmp;
-}
-
-static void generate_large_route_rule_table(void)
-{
- uint32_t ip_class;
- uint8_t depth;
-
- num_route_entries = 0;
- memset(large_route_table, 0, sizeof(large_route_table));
-
- for (ip_class = IP_CLASS_A; ip_class <= IP_CLASS_C; ip_class++) {
- for (depth = 1; depth <= RTE_LPM_MAX_DEPTH; depth++) {
- generate_random_rule_prefix(ip_class, depth);
- }
- }
-
- /* Add following rules to keep same as previous large constant table,
- * they are 4 rules with private local IP address and 1 all-zeros prefix
- * with depth = 8.
- */
- insert_rule_in_random_pos(IPv4(0, 0, 0, 0), 8);
- insert_rule_in_random_pos(IPv4(10, 2, 23, 147), 32);
- insert_rule_in_random_pos(IPv4(192, 168, 100, 10), 24);
- insert_rule_in_random_pos(IPv4(192, 168, 25, 100), 24);
- insert_rule_in_random_pos(IPv4(192, 168, 129, 124), 32);
-}
-
-static void
-print_route_distribution(const struct route_rule *table, uint32_t n)
-{
- unsigned i, j;
-
- printf("Route distribution per prefix width: \n");
- printf("DEPTH QUANTITY (PERCENT)\n");
- printf("--------------------------- \n");
-
- /* Count depths. */
- for (i = 1; i <= 32; i++) {
- unsigned depth_counter = 0;
- double percent_hits;
-
- for (j = 0; j < n; j++)
- if (table[j].depth == (uint8_t) i)
- depth_counter++;
-
- percent_hits = ((double)depth_counter)/((double)n) * 100;
- printf("%.2u%15u (%.2f)\n", i, depth_counter, percent_hits);
- }
- printf("\n");
-}
-
-static int
-test_lpm_perf(void)
-{
- struct rte_lpm *lpm = NULL;
- struct rte_lpm_config config;
-
- config.max_rules = 2000000;
- config.number_tbl8s = 2048;
- config.flags = 0;
- uint64_t begin, total_time, lpm_used_entries = 0;
- unsigned i, j;
- uint32_t next_hop_add = 0xAA, next_hop_return = 0;
- int status = 0;
- uint64_t cache_line_counter = 0;
- int64_t count = 0;
-
- rte_srand(rte_rdtsc());
-
- generate_large_route_rule_table();
-
- printf("No. routes = %u\n", (unsigned) NUM_ROUTE_ENTRIES);
-
- print_route_distribution(large_route_table, (uint32_t) NUM_ROUTE_ENTRIES);
-
- lpm = rte_lpm_create(__func__, SOCKET_ID_ANY, &config);
- TEST_LPM_ASSERT(lpm != NULL);
-
- /* Measue add. */
- begin = rte_rdtsc();
-
- for (i = 0; i < NUM_ROUTE_ENTRIES; i++) {
- if (rte_lpm_add(lpm, large_route_table[i].ip,
- large_route_table[i].depth, next_hop_add) == 0)
- status++;
- }
- /* End Timer. */
- total_time = rte_rdtsc() - begin;
-
- printf("Unique added entries = %d\n", status);
- /* Obtain add statistics. */
- for (i = 0; i < RTE_LPM_TBL24_NUM_ENTRIES; i++) {
- if (lpm->tbl24[i].valid)
- lpm_used_entries++;
-
- if (i % 32 == 0) {
- if ((uint64_t)count < lpm_used_entries) {
- cache_line_counter++;
- count = lpm_used_entries;
- }
- }
- }
-
- printf("Used table 24 entries = %u (%g%%)\n",
- (unsigned) lpm_used_entries,
- (lpm_used_entries * 100.0) / RTE_LPM_TBL24_NUM_ENTRIES);
- printf("64 byte Cache entries used = %u (%u bytes)\n",
- (unsigned) cache_line_counter, (unsigned) cache_line_counter * 64);
-
- printf("Average LPM Add: %g cycles\n",
- (double)total_time / NUM_ROUTE_ENTRIES);
-
- /* Measure single Lookup */
- total_time = 0;
- count = 0;
-
- for (i = 0; i < ITERATIONS; i++) {
- static uint32_t ip_batch[BATCH_SIZE];
-
- for (j = 0; j < BATCH_SIZE; j++)
- ip_batch[j] = rte_rand();
-
- /* Lookup per batch */
- begin = rte_rdtsc();
-
- for (j = 0; j < BATCH_SIZE; j++) {
- if (rte_lpm_lookup(lpm, ip_batch[j], &next_hop_return) != 0)
- count++;
- }
-
- total_time += rte_rdtsc() - begin;
-
- }
- printf("Average LPM Lookup: %.1f cycles (fails = %.1f%%)\n",
- (double)total_time / ((double)ITERATIONS * BATCH_SIZE),
- (count * 100.0) / (double)(ITERATIONS * BATCH_SIZE));
-
- /* Measure bulk Lookup */
- total_time = 0;
- count = 0;
- for (i = 0; i < ITERATIONS; i++) {
- static uint32_t ip_batch[BATCH_SIZE];
- uint32_t next_hops[BULK_SIZE];
-
- /* Create array of random IP addresses */
- for (j = 0; j < BATCH_SIZE; j++)
- ip_batch[j] = rte_rand();
-
- /* Lookup per batch */
- begin = rte_rdtsc();
- for (j = 0; j < BATCH_SIZE; j += BULK_SIZE) {
- unsigned k;
- rte_lpm_lookup_bulk(lpm, &ip_batch[j], next_hops, BULK_SIZE);
- for (k = 0; k < BULK_SIZE; k++)
- if (unlikely(!(next_hops[k] & RTE_LPM_LOOKUP_SUCCESS)))
- count++;
- }
-
- total_time += rte_rdtsc() - begin;
- }
- printf("BULK LPM Lookup: %.1f cycles (fails = %.1f%%)\n",
- (double)total_time / ((double)ITERATIONS * BATCH_SIZE),
- (count * 100.0) / (double)(ITERATIONS * BATCH_SIZE));
-
- /* Measure LookupX4 */
- total_time = 0;
- count = 0;
- for (i = 0; i < ITERATIONS; i++) {
- static uint32_t ip_batch[BATCH_SIZE];
- uint32_t next_hops[4];
-
- /* Create array of random IP addresses */
- for (j = 0; j < BATCH_SIZE; j++)
- ip_batch[j] = rte_rand();
-
- /* Lookup per batch */
- begin = rte_rdtsc();
- for (j = 0; j < BATCH_SIZE; j += RTE_DIM(next_hops)) {
- unsigned k;
- xmm_t ipx4;
-
- ipx4 = vect_loadu_sil128((xmm_t *)(ip_batch + j));
- ipx4 = *(xmm_t *)(ip_batch + j);
- rte_lpm_lookupx4(lpm, ipx4, next_hops, UINT32_MAX);
- for (k = 0; k < RTE_DIM(next_hops); k++)
- if (unlikely(next_hops[k] == UINT32_MAX))
- count++;
- }
-
- total_time += rte_rdtsc() - begin;
- }
- printf("LPM LookupX4: %.1f cycles (fails = %.1f%%)\n",
- (double)total_time / ((double)ITERATIONS * BATCH_SIZE),
- (count * 100.0) / (double)(ITERATIONS * BATCH_SIZE));
-
- /* Delete */
- status = 0;
- begin = rte_rdtsc();
-
- for (i = 0; i < NUM_ROUTE_ENTRIES; i++) {
- /* rte_lpm_delete(lpm, ip, depth) */
- status += rte_lpm_delete(lpm, large_route_table[i].ip,
- large_route_table[i].depth);
- }
-
- total_time += rte_rdtsc() - begin;
-
- printf("Average LPM Delete: %g cycles\n",
- (double)total_time / NUM_ROUTE_ENTRIES);
-
- rte_lpm_delete_all(lpm);
- rte_lpm_free(lpm);
-
- return 0;
-}
-
-REGISTER_TEST_COMMAND(lpm_perf_autotest, test_lpm_perf);
diff --git a/app/test/test_malloc.c b/app/test/test_malloc.c
deleted file mode 100644
index 0673d85b..00000000
--- a/app/test/test_malloc.c
+++ /dev/null
@@ -1,962 +0,0 @@
-/*-
- * BSD LICENSE
- *
- * Copyright(c) 2010-2014 Intel Corporation. All rights reserved.
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * * Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * * Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in
- * the documentation and/or other materials provided with the
- * distribution.
- * * Neither the name of Intel Corporation nor the names of its
- * contributors may be used to endorse or promote products derived
- * from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
- * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
- * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#include <stdio.h>
-#include <stdint.h>
-#include <string.h>
-#include <stdarg.h>
-#include <errno.h>
-#include <stdlib.h>
-#include <sys/queue.h>
-
-#include <rte_common.h>
-#include <rte_memory.h>
-#include <rte_memzone.h>
-#include <rte_per_lcore.h>
-#include <rte_launch.h>
-#include <rte_eal.h>
-#include <rte_per_lcore.h>
-#include <rte_lcore.h>
-#include <rte_malloc.h>
-#include <rte_cycles.h>
-#include <rte_random.h>
-#include <rte_string_fns.h>
-
-#include "test.h"
-
-#define N 10000
-
-/*
- * Malloc
- * ======
- *
- * Allocate some dynamic memory from heap (3 areas). Check that areas
- * don't overlap and that alignment constraints match. This test is
- * done many times on different lcores simultaneously.
- */
-
-/* Test if memory overlaps: return 1 if true, or 0 if false. */
-static int
-is_memory_overlap(void *p1, size_t len1, void *p2, size_t len2)
-{
- unsigned long ptr1 = (unsigned long)p1;
- unsigned long ptr2 = (unsigned long)p2;
-
- if (ptr2 >= ptr1 && (ptr2 - ptr1) < len1)
- return 1;
- else if (ptr2 < ptr1 && (ptr1 - ptr2) < len2)
- return 1;
- return 0;
-}
-
-static int
-is_aligned(void *p, int align)
-{
- unsigned long addr = (unsigned long)p;
- unsigned mask = align - 1;
-
- if (addr & mask)
- return 0;
- return 1;
-}
-
-static int
-test_align_overlap_per_lcore(__attribute__((unused)) void *arg)
-{
- const unsigned align1 = 8,
- align2 = 64,
- align3 = 2048;
- unsigned i,j;
- void *p1 = NULL, *p2 = NULL, *p3 = NULL;
- int ret = 0;
-
- for (i = 0; i < N; i++) {
- p1 = rte_zmalloc("dummy", 1000, align1);
- if (!p1){
- printf("rte_zmalloc returned NULL (i=%u)\n", i);
- ret = -1;
- break;
- }
- for(j = 0; j < 1000 ; j++) {
- if( *(char *)p1 != 0) {
- printf("rte_zmalloc didn't zero"
- "the allocated memory\n");
- ret = -1;
- }
- }
- p2 = rte_malloc("dummy", 1000, align2);
- if (!p2){
- printf("rte_malloc returned NULL (i=%u)\n", i);
- ret = -1;
- rte_free(p1);
- break;
- }
- p3 = rte_malloc("dummy", 1000, align3);
- if (!p3){
- printf("rte_malloc returned NULL (i=%u)\n", i);
- ret = -1;
- rte_free(p1);
- rte_free(p2);
- break;
- }
- if (is_memory_overlap(p1, 1000, p2, 1000)) {
- printf("p1 and p2 overlaps\n");
- ret = -1;
- }
- if (is_memory_overlap(p2, 1000, p3, 1000)) {
- printf("p2 and p3 overlaps\n");
- ret = -1;
- }
- if (is_memory_overlap(p1, 1000, p3, 1000)) {
- printf("p1 and p3 overlaps\n");
- ret = -1;
- }
- if (!is_aligned(p1, align1)) {
- printf("p1 is not aligned\n");
- ret = -1;
- }
- if (!is_aligned(p2, align2)) {
- printf("p2 is not aligned\n");
- ret = -1;
- }
- if (!is_aligned(p3, align3)) {
- printf("p3 is not aligned\n");
- ret = -1;
- }
- rte_free(p1);
- rte_free(p2);
- rte_free(p3);
- }
- rte_malloc_dump_stats(stdout, "dummy");
-
- return ret;
-}
-
-static int
-test_reordered_free_per_lcore(__attribute__((unused)) void *arg)
-{
- const unsigned align1 = 8,
- align2 = 64,
- align3 = 2048;
- unsigned i,j;
- void *p1, *p2, *p3;
- int ret = 0;
-
- for (i = 0; i < 30; i++) {
- p1 = rte_zmalloc("dummy", 1000, align1);
- if (!p1){
- printf("rte_zmalloc returned NULL (i=%u)\n", i);
- ret = -1;
- break;
- }
- for(j = 0; j < 1000 ; j++) {
- if( *(char *)p1 != 0) {
- printf("rte_zmalloc didn't zero"
- "the allocated memory\n");
- ret = -1;
- }
- }
- /* use calloc to allocate 1000 16-byte items this time */
- p2 = rte_calloc("dummy", 1000, 16, align2);
- /* for third request use regular malloc again */
- p3 = rte_malloc("dummy", 1000, align3);
- if (!p2 || !p3){
- printf("rte_malloc returned NULL (i=%u)\n", i);
- ret = -1;
- break;
- }
- if (is_memory_overlap(p1, 1000, p2, 1000)) {
- printf("p1 and p2 overlaps\n");
- ret = -1;
- }
- if (is_memory_overlap(p2, 1000, p3, 1000)) {
- printf("p2 and p3 overlaps\n");
- ret = -1;
- }
- if (is_memory_overlap(p1, 1000, p3, 1000)) {
- printf("p1 and p3 overlaps\n");
- ret = -1;
- }
- if (!is_aligned(p1, align1)) {
- printf("p1 is not aligned\n");
- ret = -1;
- }
- if (!is_aligned(p2, align2)) {
- printf("p2 is not aligned\n");
- ret = -1;
- }
- if (!is_aligned(p3, align3)) {
- printf("p3 is not aligned\n");
- ret = -1;
- }
- /* try freeing in every possible order */
- switch (i%6){
- case 0:
- rte_free(p1);
- rte_free(p2);
- rte_free(p3);
- break;
- case 1:
- rte_free(p1);
- rte_free(p3);
- rte_free(p2);
- break;
- case 2:
- rte_free(p2);
- rte_free(p1);
- rte_free(p3);
- break;
- case 3:
- rte_free(p2);
- rte_free(p3);
- rte_free(p1);
- break;
- case 4:
- rte_free(p3);
- rte_free(p1);
- rte_free(p2);
- break;
- case 5:
- rte_free(p3);
- rte_free(p2);
- rte_free(p1);
- break;
- }
- }
- rte_malloc_dump_stats(stdout, "dummy");
-
- return ret;
-}
-
-/* test function inside the malloc lib*/
-static int
-test_str_to_size(void)
-{
- struct {
- const char *str;
- uint64_t value;
- } test_values[] =
- {{ "5G", (uint64_t)5 * 1024 * 1024 *1024 },
- {"0x20g", (uint64_t)0x20 * 1024 * 1024 *1024},
- {"10M", 10 * 1024 * 1024},
- {"050m", 050 * 1024 * 1024},
- {"8K", 8 * 1024},
- {"15k", 15 * 1024},
- {"0200", 0200},
- {"0x103", 0x103},
- {"432", 432},
- {"-1", 0}, /* negative values return 0 */
- {" -2", 0},
- {" -3MB", 0},
- {"18446744073709551616", 0} /* ULLONG_MAX + 1 == out of range*/
- };
- unsigned i;
- for (i = 0; i < sizeof(test_values)/sizeof(test_values[0]); i++)
- if (rte_str_to_size(test_values[i].str) != test_values[i].value)
- return -1;
- return 0;
-}
-
-static int
-test_multi_alloc_statistics(void)
-{
- int socket = 0;
- struct rte_malloc_socket_stats pre_stats, post_stats ,first_stats, second_stats;
- size_t size = 2048;
- int align = 1024;
-#ifndef RTE_LIBRTE_MALLOC_DEBUG
- int trailer_size = 0;
-#else
- int trailer_size = RTE_CACHE_LINE_SIZE;
-#endif
- int overhead = RTE_CACHE_LINE_SIZE + trailer_size;
-
- rte_malloc_get_socket_stats(socket, &pre_stats);
-
- void *p1 = rte_malloc_socket("stats", size , align, socket);
- if (!p1)
- return -1;
- rte_free(p1);
- rte_malloc_dump_stats(stdout, "stats");
-
- rte_malloc_get_socket_stats(socket,&post_stats);
- /* Check statistics reported are correct */
- /* All post stats should be equal to pre stats after alloc freed */
- if ((post_stats.heap_totalsz_bytes != pre_stats.heap_totalsz_bytes) &&
- (post_stats.heap_freesz_bytes!=pre_stats.heap_freesz_bytes) &&
- (post_stats.heap_allocsz_bytes!=pre_stats.heap_allocsz_bytes)&&
- (post_stats.alloc_count!=pre_stats.alloc_count)&&
- (post_stats.free_count!=pre_stats.free_count)) {
- printf("Malloc statistics are incorrect - freed alloc\n");
- return -1;
- }
- /* Check two consecutive allocations */
- size = 1024;
- align = 0;
- rte_malloc_get_socket_stats(socket,&pre_stats);
- void *p2 = rte_malloc_socket("add", size ,align, socket);
- if (!p2)
- return -1;
- rte_malloc_get_socket_stats(socket,&first_stats);
-
- void *p3 = rte_malloc_socket("add2", size,align, socket);
- if (!p3)
- return -1;
-
- rte_malloc_get_socket_stats(socket,&second_stats);
-
- rte_free(p2);
- rte_free(p3);
-
- /* After freeing both allocations check stats return to original */
- rte_malloc_get_socket_stats(socket, &post_stats);
-
- if(second_stats.heap_totalsz_bytes != first_stats.heap_totalsz_bytes) {
- printf("Incorrect heap statistics: Total size \n");
- return -1;
- }
- /* Check allocated size is equal to two additions plus overhead */
- if(second_stats.heap_allocsz_bytes !=
- size + overhead + first_stats.heap_allocsz_bytes) {
- printf("Incorrect heap statistics: Allocated size \n");
- return -1;
- }
- /* Check that allocation count increments correctly i.e. +1 */
- if (second_stats.alloc_count != first_stats.alloc_count + 1) {
- printf("Incorrect heap statistics: Allocated count \n");
- return -1;
- }
-
- if (second_stats.free_count != first_stats.free_count){
- printf("Incorrect heap statistics: Free count \n");
- return -1;
- }
-
- /* Make sure that we didn't touch our greatest chunk: 2 * 11M) */
- if (post_stats.greatest_free_size != pre_stats.greatest_free_size) {
- printf("Incorrect heap statistics: Greatest free size \n");
- return -1;
- }
- /* Free size must equal the original free size minus the new allocation*/
- if (first_stats.heap_freesz_bytes <= second_stats.heap_freesz_bytes) {
- printf("Incorrect heap statistics: Free size \n");
- return -1;
- }
-
- if ((post_stats.heap_totalsz_bytes != pre_stats.heap_totalsz_bytes) &&
- (post_stats.heap_freesz_bytes!=pre_stats.heap_freesz_bytes) &&
- (post_stats.heap_allocsz_bytes!=pre_stats.heap_allocsz_bytes)&&
- (post_stats.alloc_count!=pre_stats.alloc_count)&&
- (post_stats.free_count!=pre_stats.free_count)) {
- printf("Malloc statistics are incorrect - freed alloc\n");
- return -1;
- }
- return 0;
-}
-
-static int
-test_rte_malloc_type_limits(void)
-{
- /* The type-limits functionality is not yet implemented,
- * so always return 0 no matter what the retval.
- */
- const char *typename = "limit_test";
- rte_malloc_set_limit(typename, 64 * 1024);
- rte_malloc_dump_stats(stdout, typename);
- return 0;
-}
-
-static int
-test_realloc(void)
-{
- const char hello_str[] = "Hello, world!";
- const unsigned size1 = 1024;
- const unsigned size2 = size1 + 1024;
- const unsigned size3 = size2;
- const unsigned size4 = size3 + 1024;
-
- /* test data is the same even if element is moved*/
- char *ptr1 = rte_zmalloc(NULL, size1, RTE_CACHE_LINE_SIZE);
- if (!ptr1){
- printf("NULL pointer returned from rte_zmalloc\n");
- return -1;
- }
- snprintf(ptr1, size1, "%s" ,hello_str);
- char *ptr2 = rte_realloc(ptr1, size2, RTE_CACHE_LINE_SIZE);
- if (!ptr2){
- rte_free(ptr1);
- printf("NULL pointer returned from rte_realloc\n");
- return -1;
- }
- if (ptr1 == ptr2){
- printf("unexpected - ptr1 == ptr2\n");
- }
- if (strcmp(ptr2, hello_str) != 0){
- printf("Error - lost data from pointed area\n");
- rte_free(ptr2);
- return -1;
- }
- unsigned i;
- for (i = strnlen(hello_str, sizeof(hello_str)); i < size1; i++)
- if (ptr2[i] != 0){
- printf("Bad data in realloc\n");
- rte_free(ptr2);
- return -1;
- }
- /* now allocate third element, free the second
- * and resize third. It should not move. (ptr1 is now invalid)
- */
- char *ptr3 = rte_zmalloc(NULL, size3, RTE_CACHE_LINE_SIZE);
- if (!ptr3){
- printf("NULL pointer returned from rte_zmalloc\n");
- rte_free(ptr2);
- return -1;
- }
- for (i = 0; i < size3; i++)
- if (ptr3[i] != 0){
- printf("Bad data in zmalloc\n");
- rte_free(ptr3);
- rte_free(ptr2);
- return -1;
- }
- rte_free(ptr2);
- /* first resize to half the size of the freed block */
- char *ptr4 = rte_realloc(ptr3, size4, RTE_CACHE_LINE_SIZE);
- if (!ptr4){
- printf("NULL pointer returned from rte_realloc\n");
- rte_free(ptr3);
- return -1;
- }
- if (ptr3 != ptr4){
- printf("Unexpected - ptr4 != ptr3\n");
- rte_free(ptr4);
- return -1;
- }
- /* now resize again to the full size of the freed block */
- ptr4 = rte_realloc(ptr3, size3 + size2 + size1, RTE_CACHE_LINE_SIZE);
- if (ptr3 != ptr4){
- printf("Unexpected - ptr4 != ptr3 on second resize\n");
- rte_free(ptr4);
- return -1;
- }
- rte_free(ptr4);
-
- /* now try a resize to a smaller size, see if it works */
- const unsigned size5 = 1024;
- const unsigned size6 = size5 / 2;
- char *ptr5 = rte_malloc(NULL, size5, RTE_CACHE_LINE_SIZE);
- if (!ptr5){
- printf("NULL pointer returned from rte_malloc\n");
- return -1;
- }
- char *ptr6 = rte_realloc(ptr5, size6, RTE_CACHE_LINE_SIZE);
- if (!ptr6){
- printf("NULL pointer returned from rte_realloc\n");
- rte_free(ptr5);
- return -1;
- }
- if (ptr5 != ptr6){
- printf("Error, resizing to a smaller size moved data\n");
- rte_free(ptr6);
- return -1;
- }
- rte_free(ptr6);
-
- /* check for behaviour changing alignment */
- const unsigned size7 = 1024;
- const unsigned orig_align = RTE_CACHE_LINE_SIZE;
- unsigned new_align = RTE_CACHE_LINE_SIZE * 2;
- char *ptr7 = rte_malloc(NULL, size7, orig_align);
- if (!ptr7){
- printf("NULL pointer returned from rte_malloc\n");
- return -1;
- }
- /* calc an alignment we don't already have */
- while(RTE_PTR_ALIGN(ptr7, new_align) == ptr7)
- new_align *= 2;
- char *ptr8 = rte_realloc(ptr7, size7, new_align);
- if (!ptr8){
- printf("NULL pointer returned from rte_realloc\n");
- rte_free(ptr7);
- return -1;
- }
- if (RTE_PTR_ALIGN(ptr8, new_align) != ptr8){
- printf("Failure to re-align data\n");
- rte_free(ptr8);
- return -1;
- }
- rte_free(ptr8);
-
- /* test behaviour when there is a free block after current one,
- * but its not big enough
- */
- unsigned size9 = 1024, size10 = 1024;
- unsigned size11 = size9 + size10 + 256;
- char *ptr9 = rte_malloc(NULL, size9, RTE_CACHE_LINE_SIZE);
- if (!ptr9){
- printf("NULL pointer returned from rte_malloc\n");
- return -1;
- }
- char *ptr10 = rte_malloc(NULL, size10, RTE_CACHE_LINE_SIZE);
- if (!ptr10){
- printf("NULL pointer returned from rte_malloc\n");
- return -1;
- }
- rte_free(ptr9);
- char *ptr11 = rte_realloc(ptr10, size11, RTE_CACHE_LINE_SIZE);
- if (!ptr11){
- printf("NULL pointer returned from rte_realloc\n");
- rte_free(ptr10);
- return -1;
- }
- if (ptr11 == ptr10){
- printf("Error, unexpected that realloc has not created new buffer\n");
- rte_free(ptr11);
- return -1;
- }
- rte_free(ptr11);
-
- /* check we don't crash if we pass null to realloc
- * We should get a malloc of the size requested*/
- const size_t size12 = 1024;
- size_t size12_check;
- char *ptr12 = rte_realloc(NULL, size12, RTE_CACHE_LINE_SIZE);
- if (!ptr12){
- printf("NULL pointer returned from rte_realloc\n");
- return -1;
- }
- if (rte_malloc_validate(ptr12, &size12_check) < 0 ||
- size12_check != size12){
- rte_free(ptr12);
- return -1;
- }
- rte_free(ptr12);
- return 0;
-}
-
-static int
-test_random_alloc_free(void *_ __attribute__((unused)))
-{
- struct mem_list {
- struct mem_list *next;
- char data[0];
- } *list_head = NULL;
- unsigned i;
- unsigned count = 0;
-
- rte_srand((unsigned)rte_rdtsc());
-
- for (i = 0; i < N; i++){
- unsigned free_mem = 0;
- size_t allocated_size;
- while (!free_mem){
- const unsigned mem_size = sizeof(struct mem_list) + \
- rte_rand() % (64 * 1024);
- const unsigned align = 1 << (rte_rand() % 12); /* up to 4k alignment */
- struct mem_list *entry = rte_malloc(NULL,
- mem_size, align);
- if (entry == NULL)
- return -1;
- if (RTE_PTR_ALIGN(entry, align)!= entry)
- return -1;
- if (rte_malloc_validate(entry, &allocated_size) == -1
- || allocated_size < mem_size)
- return -1;
- memset(entry->data, rte_lcore_id(),
- mem_size - sizeof(*entry));
- entry->next = list_head;
- if (rte_malloc_validate(entry, NULL) == -1)
- return -1;
- list_head = entry;
-
- count++;
- /* switch to freeing the memory with a 20% probability */
- free_mem = ((rte_rand() % 10) >= 8);
- }
- while (list_head){
- struct mem_list *entry = list_head;
- list_head = list_head->next;
- rte_free(entry);
- }
- }
- printf("Lcore %u allocated/freed %u blocks\n", rte_lcore_id(), count);
- return 0;
-}
-
-#define err_return() do { \
- printf("%s: %d - Error\n", __func__, __LINE__); \
- goto err_return; \
-} while (0)
-
-static int
-test_rte_malloc_validate(void)
-{
- const size_t request_size = 1024;
- size_t allocated_size;
- char *data_ptr = rte_malloc(NULL, request_size, RTE_CACHE_LINE_SIZE);
-#ifdef RTE_LIBRTE_MALLOC_DEBUG
- int retval;
- char *over_write_vals = NULL;
-#endif
-
- if (data_ptr == NULL) {
- printf("%s: %d - Allocation error\n", __func__, __LINE__);
- return -1;
- }
-
- /* check that a null input returns -1 */
- if (rte_malloc_validate(NULL, NULL) != -1)
- err_return();
-
- /* check that we get ok on a valid pointer */
- if (rte_malloc_validate(data_ptr, &allocated_size) < 0)
- err_return();
-
- /* check that the returned size is ok */
- if (allocated_size < request_size)
- err_return();
-
-#ifdef RTE_LIBRTE_MALLOC_DEBUG
-
- /****** change the header to be bad */
- char save_buf[64];
- over_write_vals = (char *)((uintptr_t)data_ptr - sizeof(save_buf));
- /* first save the data as a backup before overwriting it */
- memcpy(save_buf, over_write_vals, sizeof(save_buf));
- memset(over_write_vals, 1, sizeof(save_buf));
- /* then run validate */
- retval = rte_malloc_validate(data_ptr, NULL);
- /* finally restore the data again */
- memcpy(over_write_vals, save_buf, sizeof(save_buf));
- /* check we previously had an error */
- if (retval != -1)
- err_return();
-
- /* check all ok again */
- if (rte_malloc_validate(data_ptr, &allocated_size) < 0)
- err_return();
-
- /**** change the trailer to be bad */
- over_write_vals = (char *)((uintptr_t)data_ptr + allocated_size);
- /* first save the data as a backup before overwriting it */
- memcpy(save_buf, over_write_vals, sizeof(save_buf));
- memset(over_write_vals, 1, sizeof(save_buf));
- /* then run validate */
- retval = rte_malloc_validate(data_ptr, NULL);
- /* finally restore the data again */
- memcpy(over_write_vals, save_buf, sizeof(save_buf));
- if (retval != -1)
- err_return();
-
- /* check all ok again */
- if (rte_malloc_validate(data_ptr, &allocated_size) < 0)
- err_return();
-#endif
-
- rte_free(data_ptr);
- return 0;
-
-err_return:
- /*clean up */
- rte_free(data_ptr);
- return -1;
-}
-
-static int
-test_zero_aligned_alloc(void)
-{
- char *p1 = rte_malloc(NULL,1024, 0);
- if (!p1)
- goto err_return;
- if (!rte_is_aligned(p1, RTE_CACHE_LINE_SIZE))
- goto err_return;
- rte_free(p1);
- return 0;
-
-err_return:
- /*clean up */
- if (p1) rte_free(p1);
- return -1;
-}
-
-static int
-test_malloc_bad_params(void)
-{
- const char *type = NULL;
- size_t size = 0;
- unsigned align = RTE_CACHE_LINE_SIZE;
-
- /* rte_malloc expected to return null with inappropriate size */
- char *bad_ptr = rte_malloc(type, size, align);
- if (bad_ptr != NULL)
- goto err_return;
-
- /* rte_malloc expected to return null with inappropriate alignment */
- align = 17;
- size = 1024;
-
- bad_ptr = rte_malloc(type, size, align);
- if (bad_ptr != NULL)
- goto err_return;
-
- return 0;
-
-err_return:
- /* clean up pointer */
- if (bad_ptr)
- rte_free(bad_ptr);
- return -1;
-}
-
-/* Check if memory is avilable on a specific socket */
-static int
-is_mem_on_socket(int32_t socket)
-{
- const struct rte_memseg *ms = rte_eal_get_physmem_layout();
- unsigned i;
-
- for (i = 0; i < RTE_MAX_MEMSEG; i++) {
- if (socket == ms[i].socket_id)
- return 1;
- }
- return 0;
-}
-
-/*
- * Find what socket a memory address is on. Only works for addresses within
- * memsegs, not heap or stack...
- */
-static int32_t
-addr_to_socket(void * addr)
-{
- const struct rte_memseg *ms = rte_eal_get_physmem_layout();
- unsigned i;
-
- for (i = 0; i < RTE_MAX_MEMSEG; i++) {
- if ((ms[i].addr <= addr) &&
- ((uintptr_t)addr <
- ((uintptr_t)ms[i].addr + (uintptr_t)ms[i].len)))
- return ms[i].socket_id;
- }
- return -1;
-}
-
-/* Test using rte_[c|m|zm]alloc_socket() on a specific socket */
-static int
-test_alloc_single_socket(int32_t socket)
-{
- const char *type = NULL;
- const size_t size = 10;
- const unsigned align = 0;
- char *mem = NULL;
- int32_t desired_socket = (socket == SOCKET_ID_ANY) ?
- (int32_t)rte_socket_id() : socket;
-
- /* Test rte_calloc_socket() */
- mem = rte_calloc_socket(type, size, sizeof(char), align, socket);
- if (mem == NULL)
- return -1;
- if (addr_to_socket(mem) != desired_socket) {
- rte_free(mem);
- return -1;
- }
- rte_free(mem);
-
- /* Test rte_malloc_socket() */
- mem = rte_malloc_socket(type, size, align, socket);
- if (mem == NULL)
- return -1;
- if (addr_to_socket(mem) != desired_socket) {
- return -1;
- }
- rte_free(mem);
-
- /* Test rte_zmalloc_socket() */
- mem = rte_zmalloc_socket(type, size, align, socket);
- if (mem == NULL)
- return -1;
- if (addr_to_socket(mem) != desired_socket) {
- rte_free(mem);
- return -1;
- }
- rte_free(mem);
-
- return 0;
-}
-
-static int
-test_alloc_socket(void)
-{
- unsigned socket_count = 0;
- unsigned i;
-
- if (test_alloc_single_socket(SOCKET_ID_ANY) < 0)
- return -1;
-
- for (i = 0; i < RTE_MAX_NUMA_NODES; i++) {
- if (is_mem_on_socket(i)) {
- socket_count++;
- if (test_alloc_single_socket(i) < 0) {
- printf("Fail: rte_malloc_socket(..., %u) did not succeed\n",
- i);
- return -1;
- }
- }
- else {
- if (test_alloc_single_socket(i) == 0) {
- printf("Fail: rte_malloc_socket(..., %u) succeeded\n",
- i);
- return -1;
- }
- }
- }
-
- /* Print warnign if only a single socket, but don't fail the test */
- if (socket_count < 2) {
- printf("WARNING: alloc_socket test needs memory on multiple sockets!\n");
- }
-
- return 0;
-}
-
-static int
-test_malloc(void)
-{
- unsigned lcore_id;
- int ret = 0;
-
- if (test_str_to_size() < 0){
- printf("test_str_to_size() failed\n");
- return -1;
- }
- else printf("test_str_to_size() passed\n");
-
- if (test_zero_aligned_alloc() < 0){
- printf("test_zero_aligned_alloc() failed\n");
- return -1;
- }
- else printf("test_zero_aligned_alloc() passed\n");
-
- if (test_malloc_bad_params() < 0){
- printf("test_malloc_bad_params() failed\n");
- return -1;
- }
- else printf("test_malloc_bad_params() passed\n");
-
- if (test_realloc() < 0){
- printf("test_realloc() failed\n");
- return -1;
- }
- else printf("test_realloc() passed\n");
-
- /*----------------------------*/
- RTE_LCORE_FOREACH_SLAVE(lcore_id) {
- rte_eal_remote_launch(test_align_overlap_per_lcore, NULL, lcore_id);
- }
-
- RTE_LCORE_FOREACH_SLAVE(lcore_id) {
- if (rte_eal_wait_lcore(lcore_id) < 0)
- ret = -1;
- }
- if (ret < 0){
- printf("test_align_overlap_per_lcore() failed\n");
- return ret;
- }
- else printf("test_align_overlap_per_lcore() passed\n");
-
- /*----------------------------*/
- RTE_LCORE_FOREACH_SLAVE(lcore_id) {
- rte_eal_remote_launch(test_reordered_free_per_lcore, NULL, lcore_id);
- }
-
- RTE_LCORE_FOREACH_SLAVE(lcore_id) {
- if (rte_eal_wait_lcore(lcore_id) < 0)
- ret = -1;
- }
- if (ret < 0){
- printf("test_reordered_free_per_lcore() failed\n");
- return ret;
- }
- else printf("test_reordered_free_per_lcore() passed\n");
-
- /*----------------------------*/
- RTE_LCORE_FOREACH_SLAVE(lcore_id) {
- rte_eal_remote_launch(test_random_alloc_free, NULL, lcore_id);
- }
-
- RTE_LCORE_FOREACH_SLAVE(lcore_id) {
- if (rte_eal_wait_lcore(lcore_id) < 0)
- ret = -1;
- }
- if (ret < 0){
- printf("test_random_alloc_free() failed\n");
- return ret;
- }
- else printf("test_random_alloc_free() passed\n");
-
- /*----------------------------*/
- ret = test_rte_malloc_type_limits();
- if (ret < 0){
- printf("test_rte_malloc_type_limits() failed\n");
- return ret;
- }
- /* TODO: uncomment following line once type limits are valid */
- /*else printf("test_rte_malloc_type_limits() passed\n");*/
-
- /*----------------------------*/
- ret = test_rte_malloc_validate();
- if (ret < 0){
- printf("test_rte_malloc_validate() failed\n");
- return ret;
- }
- else printf("test_rte_malloc_validate() passed\n");
-
- ret = test_alloc_socket();
- if (ret < 0){
- printf("test_alloc_socket() failed\n");
- return ret;
- }
- else printf("test_alloc_socket() passed\n");
-
- ret = test_multi_alloc_statistics();
- if (ret < 0) {
- printf("test_multi_alloc_statistics() failed\n");
- return ret;
- }
- else
- printf("test_multi_alloc_statistics() passed\n");
-
- return 0;
-}
-
-REGISTER_TEST_COMMAND(malloc_autotest, test_malloc);
diff --git a/app/test/test_mbuf.c b/app/test/test_mbuf.c
deleted file mode 100644
index c0823ea5..00000000
--- a/app/test/test_mbuf.c
+++ /dev/null
@@ -1,1029 +0,0 @@
-/*-
- * BSD LICENSE
- *
- * Copyright(c) 2010-2014 Intel Corporation. All rights reserved.
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * * Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * * Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in
- * the documentation and/or other materials provided with the
- * distribution.
- * * Neither the name of Intel Corporation nor the names of its
- * contributors may be used to endorse or promote products derived
- * from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
- * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
- * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#include <string.h>
-#include <stdarg.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <stdint.h>
-#include <inttypes.h>
-#include <errno.h>
-#include <sys/queue.h>
-
-#include <rte_common.h>
-#include <rte_debug.h>
-#include <rte_log.h>
-#include <rte_common.h>
-#include <rte_memory.h>
-#include <rte_memcpy.h>
-#include <rte_memzone.h>
-#include <rte_launch.h>
-#include <rte_eal.h>
-#include <rte_per_lcore.h>
-#include <rte_lcore.h>
-#include <rte_atomic.h>
-#include <rte_branch_prediction.h>
-#include <rte_ring.h>
-#include <rte_mempool.h>
-#include <rte_mbuf.h>
-#include <rte_random.h>
-#include <rte_cycles.h>
-
-#include "test.h"
-
-#define MBUF_DATA_SIZE 2048
-#define NB_MBUF 128
-#define MBUF_TEST_DATA_LEN 1464
-#define MBUF_TEST_DATA_LEN2 50
-#define MBUF_TEST_HDR1_LEN 20
-#define MBUF_TEST_HDR2_LEN 30
-#define MBUF_TEST_ALL_HDRS_LEN (MBUF_TEST_HDR1_LEN+MBUF_TEST_HDR2_LEN)
-
-/* size of private data for mbuf in pktmbuf_pool2 */
-#define MBUF2_PRIV_SIZE 128
-
-#define REFCNT_MAX_ITER 64
-#define REFCNT_MAX_TIMEOUT 10
-#define REFCNT_MAX_REF (RTE_MAX_LCORE)
-#define REFCNT_MBUF_NUM 64
-#define REFCNT_RING_SIZE (REFCNT_MBUF_NUM * REFCNT_MAX_REF)
-
-#define MAGIC_DATA 0x42424242
-
-#define MAKE_STRING(x) # x
-
-static struct rte_mempool *pktmbuf_pool = NULL;
-static struct rte_mempool *pktmbuf_pool2 = NULL;
-
-#ifdef RTE_MBUF_REFCNT_ATOMIC
-
-static struct rte_mempool *refcnt_pool = NULL;
-static struct rte_ring *refcnt_mbuf_ring = NULL;
-static volatile uint32_t refcnt_stop_slaves;
-static unsigned refcnt_lcore[RTE_MAX_LCORE];
-
-#endif
-
-/*
- * MBUF
- * ====
- *
- * #. Allocate a mbuf pool.
- *
- * - The pool contains NB_MBUF elements, where each mbuf is MBUF_SIZE
- * bytes long.
- *
- * #. Test multiple allocations of mbufs from this pool.
- *
- * - Allocate NB_MBUF and store pointers in a table.
- * - If an allocation fails, return an error.
- * - Free all these mbufs.
- * - Repeat the same test to check that mbufs were freed correctly.
- *
- * #. Test data manipulation in pktmbuf.
- *
- * - Alloc an mbuf.
- * - Append data using rte_pktmbuf_append().
- * - Test for error in rte_pktmbuf_append() when len is too large.
- * - Trim data at the end of mbuf using rte_pktmbuf_trim().
- * - Test for error in rte_pktmbuf_trim() when len is too large.
- * - Prepend a header using rte_pktmbuf_prepend().
- * - Test for error in rte_pktmbuf_prepend() when len is too large.
- * - Remove data at the beginning of mbuf using rte_pktmbuf_adj().
- * - Test for error in rte_pktmbuf_adj() when len is too large.
- * - Check that appended data is not corrupt.
- * - Free the mbuf.
- * - Between all these tests, check data_len and pkt_len, and
- * that the mbuf is contiguous.
- * - Repeat the test to check that allocation operations
- * reinitialize the mbuf correctly.
- *
- * #. Test packet cloning
- * - Clone a mbuf and verify the data
- * - Clone the cloned mbuf and verify the data
- * - Attach a mbuf to another that does not have the same priv_size.
- */
-
-#define GOTO_FAIL(str, ...) do { \
- printf("mbuf test FAILED (l.%d): <" str ">\n", \
- __LINE__, ##__VA_ARGS__); \
- goto fail; \
-} while(0)
-
-/*
- * test data manipulation in mbuf with non-ascii data
- */
-static int
-test_pktmbuf_with_non_ascii_data(void)
-{
- struct rte_mbuf *m = NULL;
- char *data;
-
- m = rte_pktmbuf_alloc(pktmbuf_pool);
- if (m == NULL)
- GOTO_FAIL("Cannot allocate mbuf");
- if (rte_pktmbuf_pkt_len(m) != 0)
- GOTO_FAIL("Bad length");
-
- data = rte_pktmbuf_append(m, MBUF_TEST_DATA_LEN);
- if (data == NULL)
- GOTO_FAIL("Cannot append data");
- if (rte_pktmbuf_pkt_len(m) != MBUF_TEST_DATA_LEN)
- GOTO_FAIL("Bad pkt length");
- if (rte_pktmbuf_data_len(m) != MBUF_TEST_DATA_LEN)
- GOTO_FAIL("Bad data length");
- memset(data, 0xff, rte_pktmbuf_pkt_len(m));
- if (!rte_pktmbuf_is_contiguous(m))
- GOTO_FAIL("Buffer should be continuous");
- rte_pktmbuf_dump(stdout, m, MBUF_TEST_DATA_LEN);
-
- rte_pktmbuf_free(m);
-
- return 0;
-
-fail:
- if(m) {
- rte_pktmbuf_free(m);
- }
- return -1;
-}
-
-/*
- * test data manipulation in mbuf
- */
-static int
-test_one_pktmbuf(void)
-{
- struct rte_mbuf *m = NULL;
- char *data, *data2, *hdr;
- unsigned i;
-
- printf("Test pktmbuf API\n");
-
- /* alloc a mbuf */
-
- m = rte_pktmbuf_alloc(pktmbuf_pool);
- if (m == NULL)
- GOTO_FAIL("Cannot allocate mbuf");
- if (rte_pktmbuf_pkt_len(m) != 0)
- GOTO_FAIL("Bad length");
-
- rte_pktmbuf_dump(stdout, m, 0);
-
- /* append data */
-
- data = rte_pktmbuf_append(m, MBUF_TEST_DATA_LEN);
- if (data == NULL)
- GOTO_FAIL("Cannot append data");
- if (rte_pktmbuf_pkt_len(m) != MBUF_TEST_DATA_LEN)
- GOTO_FAIL("Bad pkt length");
- if (rte_pktmbuf_data_len(m) != MBUF_TEST_DATA_LEN)
- GOTO_FAIL("Bad data length");
- memset(data, 0x66, rte_pktmbuf_pkt_len(m));
- if (!rte_pktmbuf_is_contiguous(m))
- GOTO_FAIL("Buffer should be continuous");
- rte_pktmbuf_dump(stdout, m, MBUF_TEST_DATA_LEN);
- rte_pktmbuf_dump(stdout, m, 2*MBUF_TEST_DATA_LEN);
-
- /* this append should fail */
-
- data2 = rte_pktmbuf_append(m, (uint16_t)(rte_pktmbuf_tailroom(m) + 1));
- if (data2 != NULL)
- GOTO_FAIL("Append should not succeed");
-
- /* append some more data */
-
- data2 = rte_pktmbuf_append(m, MBUF_TEST_DATA_LEN2);
- if (data2 == NULL)
- GOTO_FAIL("Cannot append data");
- if (rte_pktmbuf_pkt_len(m) != MBUF_TEST_DATA_LEN + MBUF_TEST_DATA_LEN2)
- GOTO_FAIL("Bad pkt length");
- if (rte_pktmbuf_data_len(m) != MBUF_TEST_DATA_LEN + MBUF_TEST_DATA_LEN2)
- GOTO_FAIL("Bad data length");
- if (!rte_pktmbuf_is_contiguous(m))
- GOTO_FAIL("Buffer should be continuous");
-
- /* trim data at the end of mbuf */
-
- if (rte_pktmbuf_trim(m, MBUF_TEST_DATA_LEN2) < 0)
- GOTO_FAIL("Cannot trim data");
- if (rte_pktmbuf_pkt_len(m) != MBUF_TEST_DATA_LEN)
- GOTO_FAIL("Bad pkt length");
- if (rte_pktmbuf_data_len(m) != MBUF_TEST_DATA_LEN)
- GOTO_FAIL("Bad data length");
- if (!rte_pktmbuf_is_contiguous(m))
- GOTO_FAIL("Buffer should be continuous");
-
- /* this trim should fail */
-
- if (rte_pktmbuf_trim(m, (uint16_t)(rte_pktmbuf_data_len(m) + 1)) == 0)
- GOTO_FAIL("trim should not succeed");
-
- /* prepend one header */
-
- hdr = rte_pktmbuf_prepend(m, MBUF_TEST_HDR1_LEN);
- if (hdr == NULL)
- GOTO_FAIL("Cannot prepend");
- if (data - hdr != MBUF_TEST_HDR1_LEN)
- GOTO_FAIL("Prepend failed");
- if (rte_pktmbuf_pkt_len(m) != MBUF_TEST_DATA_LEN + MBUF_TEST_HDR1_LEN)
- GOTO_FAIL("Bad pkt length");
- if (rte_pktmbuf_data_len(m) != MBUF_TEST_DATA_LEN + MBUF_TEST_HDR1_LEN)
- GOTO_FAIL("Bad data length");
- if (!rte_pktmbuf_is_contiguous(m))
- GOTO_FAIL("Buffer should be continuous");
- memset(hdr, 0x55, MBUF_TEST_HDR1_LEN);
-
- /* prepend another header */
-
- hdr = rte_pktmbuf_prepend(m, MBUF_TEST_HDR2_LEN);
- if (hdr == NULL)
- GOTO_FAIL("Cannot prepend");
- if (data - hdr != MBUF_TEST_ALL_HDRS_LEN)
- GOTO_FAIL("Prepend failed");
- if (rte_pktmbuf_pkt_len(m) != MBUF_TEST_DATA_LEN + MBUF_TEST_ALL_HDRS_LEN)
- GOTO_FAIL("Bad pkt length");
- if (rte_pktmbuf_data_len(m) != MBUF_TEST_DATA_LEN + MBUF_TEST_ALL_HDRS_LEN)
- GOTO_FAIL("Bad data length");
- if (!rte_pktmbuf_is_contiguous(m))
- GOTO_FAIL("Buffer should be continuous");
- memset(hdr, 0x55, MBUF_TEST_HDR2_LEN);
-
- rte_mbuf_sanity_check(m, 1);
- rte_mbuf_sanity_check(m, 0);
- rte_pktmbuf_dump(stdout, m, 0);
-
- /* this prepend should fail */
-
- hdr = rte_pktmbuf_prepend(m, (uint16_t)(rte_pktmbuf_headroom(m) + 1));
- if (hdr != NULL)
- GOTO_FAIL("prepend should not succeed");
-
- /* remove data at beginning of mbuf (adj) */
-
- if (data != rte_pktmbuf_adj(m, MBUF_TEST_ALL_HDRS_LEN))
- GOTO_FAIL("rte_pktmbuf_adj failed");
- if (rte_pktmbuf_pkt_len(m) != MBUF_TEST_DATA_LEN)
- GOTO_FAIL("Bad pkt length");
- if (rte_pktmbuf_data_len(m) != MBUF_TEST_DATA_LEN)
- GOTO_FAIL("Bad data length");
- if (!rte_pktmbuf_is_contiguous(m))
- GOTO_FAIL("Buffer should be continuous");
-
- /* this adj should fail */
-
- if (rte_pktmbuf_adj(m, (uint16_t)(rte_pktmbuf_data_len(m) + 1)) != NULL)
- GOTO_FAIL("rte_pktmbuf_adj should not succeed");
-
- /* check data */
-
- if (!rte_pktmbuf_is_contiguous(m))
- GOTO_FAIL("Buffer should be continuous");
-
- for (i=0; i<MBUF_TEST_DATA_LEN; i++) {
- if (data[i] != 0x66)
- GOTO_FAIL("Data corrupted at offset %u", i);
- }
-
- /* free mbuf */
-
- rte_pktmbuf_free(m);
- m = NULL;
- return 0;
-
-fail:
- if (m)
- rte_pktmbuf_free(m);
- return -1;
-}
-
-static int
-testclone_testupdate_testdetach(void)
-{
- struct rte_mbuf *m = NULL;
- struct rte_mbuf *clone = NULL;
- struct rte_mbuf *clone2 = NULL;
- unaligned_uint32_t *data;
-
- /* alloc a mbuf */
- m = rte_pktmbuf_alloc(pktmbuf_pool);
- if (m == NULL)
- GOTO_FAIL("ooops not allocating mbuf");
-
- if (rte_pktmbuf_pkt_len(m) != 0)
- GOTO_FAIL("Bad length");
-
- rte_pktmbuf_append(m, sizeof(uint32_t));
- data = rte_pktmbuf_mtod(m, unaligned_uint32_t *);
- *data = MAGIC_DATA;
-
- /* clone the allocated mbuf */
- clone = rte_pktmbuf_clone(m, pktmbuf_pool);
- if (clone == NULL)
- GOTO_FAIL("cannot clone data\n");
-
- data = rte_pktmbuf_mtod(clone, unaligned_uint32_t *);
- if (*data != MAGIC_DATA)
- GOTO_FAIL("invalid data in clone\n");
-
- if (rte_mbuf_refcnt_read(m) != 2)
- GOTO_FAIL("invalid refcnt in m\n");
-
- /* free the clone */
- rte_pktmbuf_free(clone);
- clone = NULL;
-
- /* same test with a chained mbuf */
- m->next = rte_pktmbuf_alloc(pktmbuf_pool);
- if (m->next == NULL)
- GOTO_FAIL("Next Pkt Null\n");
-
- rte_pktmbuf_append(m->next, sizeof(uint32_t));
- data = rte_pktmbuf_mtod(m->next, unaligned_uint32_t *);
- *data = MAGIC_DATA;
-
- clone = rte_pktmbuf_clone(m, pktmbuf_pool);
- if (clone == NULL)
- GOTO_FAIL("cannot clone data\n");
-
- data = rte_pktmbuf_mtod(clone, unaligned_uint32_t *);
- if (*data != MAGIC_DATA)
- GOTO_FAIL("invalid data in clone\n");
-
- data = rte_pktmbuf_mtod(clone->next, unaligned_uint32_t *);
- if (*data != MAGIC_DATA)
- GOTO_FAIL("invalid data in clone->next\n");
-
- if (rte_mbuf_refcnt_read(m) != 2)
- GOTO_FAIL("invalid refcnt in m\n");
-
- if (rte_mbuf_refcnt_read(m->next) != 2)
- GOTO_FAIL("invalid refcnt in m->next\n");
-
- /* try to clone the clone */
-
- clone2 = rte_pktmbuf_clone(clone, pktmbuf_pool);
- if (clone2 == NULL)
- GOTO_FAIL("cannot clone the clone\n");
-
- data = rte_pktmbuf_mtod(clone2, unaligned_uint32_t *);
- if (*data != MAGIC_DATA)
- GOTO_FAIL("invalid data in clone2\n");
-
- data = rte_pktmbuf_mtod(clone2->next, unaligned_uint32_t *);
- if (*data != MAGIC_DATA)
- GOTO_FAIL("invalid data in clone2->next\n");
-
- if (rte_mbuf_refcnt_read(m) != 3)
- GOTO_FAIL("invalid refcnt in m\n");
-
- if (rte_mbuf_refcnt_read(m->next) != 3)
- GOTO_FAIL("invalid refcnt in m->next\n");
-
- /* free mbuf */
- rte_pktmbuf_free(m);
- rte_pktmbuf_free(clone);
- rte_pktmbuf_free(clone2);
-
- m = NULL;
- clone = NULL;
- clone2 = NULL;
- printf("%s ok\n", __func__);
- return 0;
-
-fail:
- if (m)
- rte_pktmbuf_free(m);
- if (clone)
- rte_pktmbuf_free(clone);
- if (clone2)
- rte_pktmbuf_free(clone2);
- return -1;
-}
-
-static int
-test_attach_from_different_pool(void)
-{
- struct rte_mbuf *m = NULL;
- struct rte_mbuf *clone = NULL;
- struct rte_mbuf *clone2 = NULL;
- char *data, *c_data, *c_data2;
-
- /* alloc a mbuf */
- m = rte_pktmbuf_alloc(pktmbuf_pool);
- if (m == NULL)
- GOTO_FAIL("cannot allocate mbuf");
-
- if (rte_pktmbuf_pkt_len(m) != 0)
- GOTO_FAIL("Bad length");
-
- data = rte_pktmbuf_mtod(m, char *);
-
- /* allocate a new mbuf from the second pool, and attach it to the first
- * mbuf */
- clone = rte_pktmbuf_alloc(pktmbuf_pool2);
- if (clone == NULL)
- GOTO_FAIL("cannot allocate mbuf from second pool\n");
-
- /* check data room size and priv size, and erase priv */
- if (rte_pktmbuf_data_room_size(clone->pool) != 0)
- GOTO_FAIL("data room size should be 0\n");
- if (rte_pktmbuf_priv_size(clone->pool) != MBUF2_PRIV_SIZE)
- GOTO_FAIL("data room size should be %d\n", MBUF2_PRIV_SIZE);
- memset(clone + 1, 0, MBUF2_PRIV_SIZE);
-
- /* save data pointer to compare it after detach() */
- c_data = rte_pktmbuf_mtod(clone, char *);
- if (c_data != (char *)clone + sizeof(*clone) + MBUF2_PRIV_SIZE)
- GOTO_FAIL("bad data pointer in clone");
- if (rte_pktmbuf_headroom(clone) != 0)
- GOTO_FAIL("bad headroom in clone");
-
- rte_pktmbuf_attach(clone, m);
-
- if (rte_pktmbuf_mtod(clone, char *) != data)
- GOTO_FAIL("clone was not attached properly\n");
- if (rte_pktmbuf_headroom(clone) != RTE_PKTMBUF_HEADROOM)
- GOTO_FAIL("bad headroom in clone after attach");
- if (rte_mbuf_refcnt_read(m) != 2)
- GOTO_FAIL("invalid refcnt in m\n");
-
- /* allocate a new mbuf from the second pool, and attach it to the first
- * cloned mbuf */
- clone2 = rte_pktmbuf_alloc(pktmbuf_pool2);
- if (clone2 == NULL)
- GOTO_FAIL("cannot allocate clone2 from second pool\n");
-
- /* check data room size and priv size, and erase priv */
- if (rte_pktmbuf_data_room_size(clone2->pool) != 0)
- GOTO_FAIL("data room size should be 0\n");
- if (rte_pktmbuf_priv_size(clone2->pool) != MBUF2_PRIV_SIZE)
- GOTO_FAIL("data room size should be %d\n", MBUF2_PRIV_SIZE);
- memset(clone2 + 1, 0, MBUF2_PRIV_SIZE);
-
- /* save data pointer to compare it after detach() */
- c_data2 = rte_pktmbuf_mtod(clone2, char *);
- if (c_data2 != (char *)clone2 + sizeof(*clone2) + MBUF2_PRIV_SIZE)
- GOTO_FAIL("bad data pointer in clone2");
- if (rte_pktmbuf_headroom(clone2) != 0)
- GOTO_FAIL("bad headroom in clone2");
-
- rte_pktmbuf_attach(clone2, clone);
-
- if (rte_pktmbuf_mtod(clone2, char *) != data)
- GOTO_FAIL("clone2 was not attached properly\n");
- if (rte_pktmbuf_headroom(clone2) != RTE_PKTMBUF_HEADROOM)
- GOTO_FAIL("bad headroom in clone2 after attach");
- if (rte_mbuf_refcnt_read(m) != 3)
- GOTO_FAIL("invalid refcnt in m\n");
-
- /* detach the clones */
- rte_pktmbuf_detach(clone);
- if (c_data != rte_pktmbuf_mtod(clone, char *))
- GOTO_FAIL("clone was not detached properly\n");
- if (rte_mbuf_refcnt_read(m) != 2)
- GOTO_FAIL("invalid refcnt in m\n");
-
- rte_pktmbuf_detach(clone2);
- if (c_data2 != rte_pktmbuf_mtod(clone2, char *))
- GOTO_FAIL("clone2 was not detached properly\n");
- if (rte_mbuf_refcnt_read(m) != 1)
- GOTO_FAIL("invalid refcnt in m\n");
-
- /* free the clones and the initial mbuf */
- rte_pktmbuf_free(clone2);
- rte_pktmbuf_free(clone);
- rte_pktmbuf_free(m);
- printf("%s ok\n", __func__);
- return 0;
-
-fail:
- if (m)
- rte_pktmbuf_free(m);
- if (clone)
- rte_pktmbuf_free(clone);
- if (clone2)
- rte_pktmbuf_free(clone2);
- return -1;
-}
-#undef GOTO_FAIL
-
-/*
- * test allocation and free of mbufs
- */
-static int
-test_pktmbuf_pool(void)
-{
- unsigned i;
- struct rte_mbuf *m[NB_MBUF];
- int ret = 0;
-
- for (i=0; i<NB_MBUF; i++)
- m[i] = NULL;
-
- /* alloc NB_MBUF mbufs */
- for (i=0; i<NB_MBUF; i++) {
- m[i] = rte_pktmbuf_alloc(pktmbuf_pool);
- if (m[i] == NULL) {
- printf("rte_pktmbuf_alloc() failed (%u)\n", i);
- ret = -1;
- }
- }
- struct rte_mbuf *extra = NULL;
- extra = rte_pktmbuf_alloc(pktmbuf_pool);
- if(extra != NULL) {
- printf("Error pool not empty");
- ret = -1;
- }
- extra = rte_pktmbuf_clone(m[0], pktmbuf_pool);
- if(extra != NULL) {
- printf("Error pool not empty");
- ret = -1;
- }
- /* free them */
- for (i=0; i<NB_MBUF; i++) {
- if (m[i] != NULL)
- rte_pktmbuf_free(m[i]);
- }
-
- return ret;
-}
-
-/*
- * test that the pointer to the data on a packet mbuf is set properly
- */
-static int
-test_pktmbuf_pool_ptr(void)
-{
- unsigned i;
- struct rte_mbuf *m[NB_MBUF];
- int ret = 0;
-
- for (i=0; i<NB_MBUF; i++)
- m[i] = NULL;
-
- /* alloc NB_MBUF mbufs */
- for (i=0; i<NB_MBUF; i++) {
- m[i] = rte_pktmbuf_alloc(pktmbuf_pool);
- if (m[i] == NULL) {
- printf("rte_pktmbuf_alloc() failed (%u)\n", i);
- ret = -1;
- break;
- }
- m[i]->data_off += 64;
- }
-
- /* free them */
- for (i=0; i<NB_MBUF; i++) {
- if (m[i] != NULL)
- rte_pktmbuf_free(m[i]);
- }
-
- for (i=0; i<NB_MBUF; i++)
- m[i] = NULL;
-
- /* alloc NB_MBUF mbufs */
- for (i=0; i<NB_MBUF; i++) {
- m[i] = rte_pktmbuf_alloc(pktmbuf_pool);
- if (m[i] == NULL) {
- printf("rte_pktmbuf_alloc() failed (%u)\n", i);
- ret = -1;
- break;
- }
- if (m[i]->data_off != RTE_PKTMBUF_HEADROOM) {
- printf("invalid data_off\n");
- ret = -1;
- }
- }
-
- /* free them */
- for (i=0; i<NB_MBUF; i++) {
- if (m[i] != NULL)
- rte_pktmbuf_free(m[i]);
- }
-
- return ret;
-}
-
-static int
-test_pktmbuf_free_segment(void)
-{
- unsigned i;
- struct rte_mbuf *m[NB_MBUF];
- int ret = 0;
-
- for (i=0; i<NB_MBUF; i++)
- m[i] = NULL;
-
- /* alloc NB_MBUF mbufs */
- for (i=0; i<NB_MBUF; i++) {
- m[i] = rte_pktmbuf_alloc(pktmbuf_pool);
- if (m[i] == NULL) {
- printf("rte_pktmbuf_alloc() failed (%u)\n", i);
- ret = -1;
- }
- }
-
- /* free them */
- for (i=0; i<NB_MBUF; i++) {
- if (m[i] != NULL) {
- struct rte_mbuf *mb, *mt;
-
- mb = m[i];
- while(mb != NULL) {
- mt = mb;
- mb = mb->next;
- rte_pktmbuf_free_seg(mt);
- }
- }
- }
-
- return ret;
-}
-
-/*
- * Stress test for rte_mbuf atomic refcnt.
- * Implies that RTE_MBUF_REFCNT_ATOMIC is defined.
- * For more efficency, recomended to run with RTE_LIBRTE_MBUF_DEBUG defined.
- */
-
-#ifdef RTE_MBUF_REFCNT_ATOMIC
-
-static int
-test_refcnt_slave(__attribute__((unused)) void *arg)
-{
- unsigned lcore, free;
- void *mp = 0;
-
- lcore = rte_lcore_id();
- printf("%s started at lcore %u\n", __func__, lcore);
-
- free = 0;
- while (refcnt_stop_slaves == 0) {
- if (rte_ring_dequeue(refcnt_mbuf_ring, &mp) == 0) {
- free++;
- rte_pktmbuf_free((struct rte_mbuf *)mp);
- }
- }
-
- refcnt_lcore[lcore] += free;
- printf("%s finished at lcore %u, "
- "number of freed mbufs: %u\n",
- __func__, lcore, free);
- return 0;
-}
-
-static void
-test_refcnt_iter(unsigned lcore, unsigned iter)
-{
- uint16_t ref;
- unsigned i, n, tref, wn;
- struct rte_mbuf *m;
-
- tref = 0;
-
- /* For each mbuf in the pool:
- * - allocate mbuf,
- * - increment it's reference up to N+1,
- * - enqueue it N times into the ring for slave cores to free.
- */
- for (i = 0, n = rte_mempool_avail_count(refcnt_pool);
- i != n && (m = rte_pktmbuf_alloc(refcnt_pool)) != NULL;
- i++) {
- ref = RTE_MAX(rte_rand() % REFCNT_MAX_REF, 1UL);
- tref += ref;
- if ((ref & 1) != 0) {
- rte_pktmbuf_refcnt_update(m, ref);
- while (ref-- != 0)
- rte_ring_enqueue(refcnt_mbuf_ring, m);
- } else {
- while (ref-- != 0) {
- rte_pktmbuf_refcnt_update(m, 1);
- rte_ring_enqueue(refcnt_mbuf_ring, m);
- }
- }
- rte_pktmbuf_free(m);
- }
-
- if (i != n)
- rte_panic("(lcore=%u, iter=%u): was able to allocate only "
- "%u from %u mbufs\n", lcore, iter, i, n);
-
- /* wait till slave lcores will consume all mbufs */
- while (!rte_ring_empty(refcnt_mbuf_ring))
- ;
-
- /* check that all mbufs are back into mempool by now */
- for (wn = 0; wn != REFCNT_MAX_TIMEOUT; wn++) {
- if ((i = rte_mempool_avail_count(refcnt_pool)) == n) {
- refcnt_lcore[lcore] += tref;
- printf("%s(lcore=%u, iter=%u) completed, "
- "%u references processed\n",
- __func__, lcore, iter, tref);
- return;
- }
- rte_delay_ms(100);
- }
-
- rte_panic("(lcore=%u, iter=%u): after %us only "
- "%u of %u mbufs left free\n", lcore, iter, wn, i, n);
-}
-
-static int
-test_refcnt_master(void)
-{
- unsigned i, lcore;
-
- lcore = rte_lcore_id();
- printf("%s started at lcore %u\n", __func__, lcore);
-
- for (i = 0; i != REFCNT_MAX_ITER; i++)
- test_refcnt_iter(lcore, i);
-
- refcnt_stop_slaves = 1;
- rte_wmb();
-
- printf("%s finished at lcore %u\n", __func__, lcore);
- return 0;
-}
-
-#endif
-
-static int
-test_refcnt_mbuf(void)
-{
-#ifdef RTE_MBUF_REFCNT_ATOMIC
-
- unsigned lnum, master, slave, tref;
-
-
- if ((lnum = rte_lcore_count()) == 1) {
- printf("skipping %s, number of lcores: %u is not enough\n",
- __func__, lnum);
- return 0;
- }
-
- printf("starting %s, at %u lcores\n", __func__, lnum);
-
- /* create refcnt pool & ring if they don't exist */
-
- if (refcnt_pool == NULL &&
- (refcnt_pool = rte_pktmbuf_pool_create(
- MAKE_STRING(refcnt_pool),
- REFCNT_MBUF_NUM, 0, 0, 0,
- SOCKET_ID_ANY)) == NULL) {
- printf("%s: cannot allocate " MAKE_STRING(refcnt_pool) "\n",
- __func__);
- return -1;
- }
-
- if (refcnt_mbuf_ring == NULL &&
- (refcnt_mbuf_ring = rte_ring_create("refcnt_mbuf_ring",
- rte_align32pow2(REFCNT_RING_SIZE), SOCKET_ID_ANY,
- RING_F_SP_ENQ)) == NULL) {
- printf("%s: cannot allocate " MAKE_STRING(refcnt_mbuf_ring)
- "\n", __func__);
- return -1;
- }
-
- refcnt_stop_slaves = 0;
- memset(refcnt_lcore, 0, sizeof (refcnt_lcore));
-
- rte_eal_mp_remote_launch(test_refcnt_slave, NULL, SKIP_MASTER);
-
- test_refcnt_master();
-
- rte_eal_mp_wait_lcore();
-
- /* check that we porcessed all references */
- tref = 0;
- master = rte_get_master_lcore();
-
- RTE_LCORE_FOREACH_SLAVE(slave)
- tref += refcnt_lcore[slave];
-
- if (tref != refcnt_lcore[master])
- rte_panic("refernced mbufs: %u, freed mbufs: %u\n",
- tref, refcnt_lcore[master]);
-
- rte_mempool_dump(stdout, refcnt_pool);
- rte_ring_dump(stdout, refcnt_mbuf_ring);
-
-#endif
- return 0;
-}
-
-#include <unistd.h>
-#include <sys/wait.h>
-
-/* use fork() to test mbuf errors panic */
-static int
-verify_mbuf_check_panics(struct rte_mbuf *buf)
-{
- int pid;
- int status;
-
- pid = fork();
-
- if (pid == 0) {
- rte_mbuf_sanity_check(buf, 1); /* should panic */
- exit(0); /* return normally if it doesn't panic */
- } else if (pid < 0){
- printf("Fork Failed\n");
- return -1;
- }
- wait(&status);
- if(status == 0)
- return -1;
-
- return 0;
-}
-
-static int
-test_failing_mbuf_sanity_check(void)
-{
- struct rte_mbuf *buf;
- struct rte_mbuf badbuf;
-
- printf("Checking rte_mbuf_sanity_check for failure conditions\n");
-
- /* get a good mbuf to use to make copies */
- buf = rte_pktmbuf_alloc(pktmbuf_pool);
- if (buf == NULL)
- return -1;
- printf("Checking good mbuf initially\n");
- if (verify_mbuf_check_panics(buf) != -1)
- return -1;
-
- printf("Now checking for error conditions\n");
-
- if (verify_mbuf_check_panics(NULL)) {
- printf("Error with NULL mbuf test\n");
- return -1;
- }
-
- badbuf = *buf;
- badbuf.pool = NULL;
- if (verify_mbuf_check_panics(&badbuf)) {
- printf("Error with bad-pool mbuf test\n");
- return -1;
- }
-
- badbuf = *buf;
- badbuf.buf_physaddr = 0;
- if (verify_mbuf_check_panics(&badbuf)) {
- printf("Error with bad-physaddr mbuf test\n");
- return -1;
- }
-
- badbuf = *buf;
- badbuf.buf_addr = NULL;
- if (verify_mbuf_check_panics(&badbuf)) {
- printf("Error with bad-addr mbuf test\n");
- return -1;
- }
-
- badbuf = *buf;
- badbuf.refcnt = 0;
- if (verify_mbuf_check_panics(&badbuf)) {
- printf("Error with bad-refcnt(0) mbuf test\n");
- return -1;
- }
-
- badbuf = *buf;
- badbuf.refcnt = UINT16_MAX;
- if (verify_mbuf_check_panics(&badbuf)) {
- printf("Error with bad-refcnt(MAX) mbuf test\n");
- return -1;
- }
-
- return 0;
-}
-
-
-static int
-test_mbuf(void)
-{
- RTE_BUILD_BUG_ON(sizeof(struct rte_mbuf) != RTE_CACHE_LINE_MIN_SIZE * 2);
-
- /* create pktmbuf pool if it does not exist */
- if (pktmbuf_pool == NULL) {
- pktmbuf_pool = rte_pktmbuf_pool_create("test_pktmbuf_pool",
- NB_MBUF, 32, 0, MBUF_DATA_SIZE, SOCKET_ID_ANY);
- }
-
- if (pktmbuf_pool == NULL) {
- printf("cannot allocate mbuf pool\n");
- return -1;
- }
-
- /* create a specific pktmbuf pool with a priv_size != 0 and no data
- * room size */
- if (pktmbuf_pool2 == NULL) {
- pktmbuf_pool2 = rte_pktmbuf_pool_create("test_pktmbuf_pool2",
- NB_MBUF, 32, MBUF2_PRIV_SIZE, 0, SOCKET_ID_ANY);
- }
-
- if (pktmbuf_pool2 == NULL) {
- printf("cannot allocate mbuf pool\n");
- return -1;
- }
-
- /* test multiple mbuf alloc */
- if (test_pktmbuf_pool() < 0) {
- printf("test_mbuf_pool() failed\n");
- return -1;
- }
-
- /* do it another time to check that all mbufs were freed */
- if (test_pktmbuf_pool() < 0) {
- printf("test_mbuf_pool() failed (2)\n");
- return -1;
- }
-
- /* test that the pointer to the data on a packet mbuf is set properly */
- if (test_pktmbuf_pool_ptr() < 0) {
- printf("test_pktmbuf_pool_ptr() failed\n");
- return -1;
- }
-
- /* test data manipulation in mbuf */
- if (test_one_pktmbuf() < 0) {
- printf("test_one_mbuf() failed\n");
- return -1;
- }
-
-
- /*
- * do it another time, to check that allocation reinitialize
- * the mbuf correctly
- */
- if (test_one_pktmbuf() < 0) {
- printf("test_one_mbuf() failed (2)\n");
- return -1;
- }
-
- if (test_pktmbuf_with_non_ascii_data() < 0) {
- printf("test_pktmbuf_with_non_ascii_data() failed\n");
- return -1;
- }
-
- /* test free pktmbuf segment one by one */
- if (test_pktmbuf_free_segment() < 0) {
- printf("test_pktmbuf_free_segment() failed.\n");
- return -1;
- }
-
- if (testclone_testupdate_testdetach()<0){
- printf("testclone_and_testupdate() failed \n");
- return -1;
- }
-
- if (test_attach_from_different_pool() < 0) {
- printf("test_attach_from_different_pool() failed\n");
- return -1;
- }
-
- if (test_refcnt_mbuf()<0){
- printf("test_refcnt_mbuf() failed \n");
- return -1;
- }
-
- if (test_failing_mbuf_sanity_check() < 0) {
- printf("test_failing_mbuf_sanity_check() failed\n");
- return -1;
- }
- return 0;
-}
-
-REGISTER_TEST_COMMAND(mbuf_autotest, test_mbuf);
diff --git a/app/test/test_memcpy.c b/app/test/test_memcpy.c
deleted file mode 100644
index 1d93dd53..00000000
--- a/app/test/test_memcpy.c
+++ /dev/null
@@ -1,162 +0,0 @@
-/*-
- * BSD LICENSE
- *
- * Copyright(c) 2010-2014 Intel Corporation. All rights reserved.
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * * Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * * Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in
- * the documentation and/or other materials provided with the
- * distribution.
- * * Neither the name of Intel Corporation nor the names of its
- * contributors may be used to endorse or promote products derived
- * from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
- * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
- * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#include <stdint.h>
-#include <stdio.h>
-#include <string.h>
-#include <stdlib.h>
-
-#include <rte_common.h>
-#include <rte_random.h>
-#include <rte_memcpy.h>
-
-#include "test.h"
-
-/*
- * Set this to the maximum buffer size you want to test. If it is 0, then the
- * values in the buf_sizes[] array below will be used.
- */
-#define TEST_VALUE_RANGE 0
-
-/* List of buffer sizes to test */
-#if TEST_VALUE_RANGE == 0
-static size_t buf_sizes[] = {
- 0, 1, 7, 8, 9, 15, 16, 17, 31, 32, 33, 63, 64, 65, 127, 128, 129, 255,
- 256, 257, 320, 384, 511, 512, 513, 1023, 1024, 1025, 1518, 1522, 1600,
- 2048, 3072, 4096, 5120, 6144, 7168, 8192
-};
-/* MUST be as large as largest packet size above */
-#define SMALL_BUFFER_SIZE 8192
-#else /* TEST_VALUE_RANGE != 0 */
-static size_t buf_sizes[TEST_VALUE_RANGE];
-#define SMALL_BUFFER_SIZE TEST_VALUE_RANGE
-#endif /* TEST_VALUE_RANGE == 0 */
-
-/* Data is aligned on this many bytes (power of 2) */
-#define ALIGNMENT_UNIT 32
-
-
-/*
- * Create two buffers, and initialise one with random values. These are copied
- * to the second buffer and then compared to see if the copy was successful.
- * The bytes outside the copied area are also checked to make sure they were not
- * changed.
- */
-static int
-test_single_memcpy(unsigned int off_src, unsigned int off_dst, size_t size)
-{
- unsigned int i;
- uint8_t dest[SMALL_BUFFER_SIZE + ALIGNMENT_UNIT];
- uint8_t src[SMALL_BUFFER_SIZE + ALIGNMENT_UNIT];
- void * ret;
-
- /* Setup buffers */
- for (i = 0; i < SMALL_BUFFER_SIZE + ALIGNMENT_UNIT; i++) {
- dest[i] = 0;
- src[i] = (uint8_t) rte_rand();
- }
-
- /* Do the copy */
- ret = rte_memcpy(dest + off_dst, src + off_src, size);
- if (ret != (dest + off_dst)) {
- printf("rte_memcpy() returned %p, not %p\n",
- ret, dest + off_dst);
- }
-
- /* Check nothing before offset is affected */
- for (i = 0; i < off_dst; i++) {
- if (dest[i] != 0) {
- printf("rte_memcpy() failed for %u bytes (offsets=%u,%u): "
- "[modified before start of dst].\n",
- (unsigned)size, off_src, off_dst);
- return -1;
- }
- }
-
- /* Check everything was copied */
- for (i = 0; i < size; i++) {
- if (dest[i + off_dst] != src[i + off_src]) {
- printf("rte_memcpy() failed for %u bytes (offsets=%u,%u): "
- "[didn't copy byte %u].\n",
- (unsigned)size, off_src, off_dst, i);
- return -1;
- }
- }
-
- /* Check nothing after copy was affected */
- for (i = size; i < SMALL_BUFFER_SIZE; i++) {
- if (dest[i + off_dst] != 0) {
- printf("rte_memcpy() failed for %u bytes (offsets=%u,%u): "
- "[copied too many].\n",
- (unsigned)size, off_src, off_dst);
- return -1;
- }
- }
- return 0;
-}
-
-/*
- * Check functionality for various buffer sizes and data offsets/alignments.
- */
-static int
-func_test(void)
-{
- unsigned int off_src, off_dst, i;
- unsigned int num_buf_sizes = sizeof(buf_sizes) / sizeof(buf_sizes[0]);
- int ret;
-
- for (off_src = 0; off_src < ALIGNMENT_UNIT; off_src++) {
- for (off_dst = 0; off_dst < ALIGNMENT_UNIT; off_dst++) {
- for (i = 0; i < num_buf_sizes; i++) {
- ret = test_single_memcpy(off_src, off_dst,
- buf_sizes[i]);
- if (ret != 0)
- return -1;
- }
- }
- }
- return 0;
-}
-
-static int
-test_memcpy(void)
-{
- int ret;
-
- ret = func_test();
- if (ret != 0)
- return -1;
- return 0;
-}
-
-REGISTER_TEST_COMMAND(memcpy_autotest, test_memcpy);
diff --git a/app/test/test_memcpy_perf.c b/app/test/test_memcpy_perf.c
deleted file mode 100644
index ff3aaaac..00000000
--- a/app/test/test_memcpy_perf.c
+++ /dev/null
@@ -1,354 +0,0 @@
-/*-
- * BSD LICENSE
- *
- * Copyright(c) 2010-2014 Intel Corporation. All rights reserved.
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * * Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * * Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in
- * the documentation and/or other materials provided with the
- * distribution.
- * * Neither the name of Intel Corporation nor the names of its
- * contributors may be used to endorse or promote products derived
- * from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
- * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
- * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#include <stdint.h>
-#include <stdio.h>
-#include <string.h>
-#include <stdlib.h>
-
-#include <rte_common.h>
-#include <rte_cycles.h>
-#include <rte_random.h>
-#include <rte_malloc.h>
-
-#include <rte_memcpy.h>
-
-#include "test.h"
-
-/*
- * Set this to the maximum buffer size you want to test. If it is 0, then the
- * values in the buf_sizes[] array below will be used.
- */
-#define TEST_VALUE_RANGE 0
-
-/* List of buffer sizes to test */
-#if TEST_VALUE_RANGE == 0
-static size_t buf_sizes[] = {
- 1, 2, 3, 4, 5, 6, 7, 8, 9, 12, 15, 16, 17, 31, 32, 33, 63, 64, 65, 127, 128,
- 129, 191, 192, 193, 255, 256, 257, 319, 320, 321, 383, 384, 385, 447, 448,
- 449, 511, 512, 513, 767, 768, 769, 1023, 1024, 1025, 1518, 1522, 1536, 1600,
- 2048, 2560, 3072, 3584, 4096, 4608, 5120, 5632, 6144, 6656, 7168, 7680, 8192
-};
-/* MUST be as large as largest packet size above */
-#define SMALL_BUFFER_SIZE 8192
-#else /* TEST_VALUE_RANGE != 0 */
-static size_t buf_sizes[TEST_VALUE_RANGE];
-#define SMALL_BUFFER_SIZE TEST_VALUE_RANGE
-#endif /* TEST_VALUE_RANGE == 0 */
-
-
-/*
- * Arrays of this size are used for measuring uncached memory accesses by
- * picking a random location within the buffer. Make this smaller if there are
- * memory allocation errors.
- */
-#define LARGE_BUFFER_SIZE (100 * 1024 * 1024)
-
-/* How many times to run timing loop for performance tests */
-#define TEST_ITERATIONS 1000000
-#define TEST_BATCH_SIZE 100
-
-/* Data is aligned on this many bytes (power of 2) */
-#ifdef RTE_MACHINE_CPUFLAG_AVX512F
-#define ALIGNMENT_UNIT 64
-#elif defined RTE_MACHINE_CPUFLAG_AVX2
-#define ALIGNMENT_UNIT 32
-#else /* RTE_MACHINE_CPUFLAG */
-#define ALIGNMENT_UNIT 16
-#endif /* RTE_MACHINE_CPUFLAG */
-
-/*
- * Pointers used in performance tests. The two large buffers are for uncached
- * access where random addresses within the buffer are used for each
- * memcpy. The two small buffers are for cached access.
- */
-static uint8_t *large_buf_read, *large_buf_write;
-static uint8_t *small_buf_read, *small_buf_write;
-
-/* Initialise data buffers. */
-static int
-init_buffers(void)
-{
- unsigned i;
-
- large_buf_read = rte_malloc("memcpy", LARGE_BUFFER_SIZE + ALIGNMENT_UNIT, ALIGNMENT_UNIT);
- if (large_buf_read == NULL)
- goto error_large_buf_read;
-
- large_buf_write = rte_malloc("memcpy", LARGE_BUFFER_SIZE + ALIGNMENT_UNIT, ALIGNMENT_UNIT);
- if (large_buf_write == NULL)
- goto error_large_buf_write;
-
- small_buf_read = rte_malloc("memcpy", SMALL_BUFFER_SIZE + ALIGNMENT_UNIT, ALIGNMENT_UNIT);
- if (small_buf_read == NULL)
- goto error_small_buf_read;
-
- small_buf_write = rte_malloc("memcpy", SMALL_BUFFER_SIZE + ALIGNMENT_UNIT, ALIGNMENT_UNIT);
- if (small_buf_write == NULL)
- goto error_small_buf_write;
-
- for (i = 0; i < LARGE_BUFFER_SIZE; i++)
- large_buf_read[i] = rte_rand();
- for (i = 0; i < SMALL_BUFFER_SIZE; i++)
- small_buf_read[i] = rte_rand();
-
- return 0;
-
-error_small_buf_write:
- rte_free(small_buf_read);
-error_small_buf_read:
- rte_free(large_buf_write);
-error_large_buf_write:
- rte_free(large_buf_read);
-error_large_buf_read:
- printf("ERROR: not enough memory\n");
- return -1;
-}
-
-/* Cleanup data buffers */
-static void
-free_buffers(void)
-{
- rte_free(large_buf_read);
- rte_free(large_buf_write);
- rte_free(small_buf_read);
- rte_free(small_buf_write);
-}
-
-/*
- * Get a random offset into large array, with enough space needed to perform
- * max copy size. Offset is aligned, uoffset is used for unalignment setting.
- */
-static inline size_t
-get_rand_offset(size_t uoffset)
-{
- return ((rte_rand() % (LARGE_BUFFER_SIZE - SMALL_BUFFER_SIZE)) &
- ~(ALIGNMENT_UNIT - 1)) + uoffset;
-}
-
-/* Fill in source and destination addresses. */
-static inline void
-fill_addr_arrays(size_t *dst_addr, int is_dst_cached, size_t dst_uoffset,
- size_t *src_addr, int is_src_cached, size_t src_uoffset)
-{
- unsigned int i;
-
- for (i = 0; i < TEST_BATCH_SIZE; i++) {
- dst_addr[i] = (is_dst_cached) ? dst_uoffset : get_rand_offset(dst_uoffset);
- src_addr[i] = (is_src_cached) ? src_uoffset : get_rand_offset(src_uoffset);
- }
-}
-
-/*
- * WORKAROUND: For some reason the first test doing an uncached write
- * takes a very long time (~25 times longer than is expected). So we do
- * it once without timing.
- */
-static void
-do_uncached_write(uint8_t *dst, int is_dst_cached,
- const uint8_t *src, int is_src_cached, size_t size)
-{
- unsigned i, j;
- size_t dst_addrs[TEST_BATCH_SIZE], src_addrs[TEST_BATCH_SIZE];
-
- for (i = 0; i < (TEST_ITERATIONS / TEST_BATCH_SIZE); i++) {
- fill_addr_arrays(dst_addrs, is_dst_cached, 0,
- src_addrs, is_src_cached, 0);
- for (j = 0; j < TEST_BATCH_SIZE; j++) {
- rte_memcpy(dst+dst_addrs[j], src+src_addrs[j], size);
- }
- }
-}
-
-/*
- * Run a single memcpy performance test. This is a macro to ensure that if
- * the "size" parameter is a constant it won't be converted to a variable.
- */
-#define SINGLE_PERF_TEST(dst, is_dst_cached, dst_uoffset, \
- src, is_src_cached, src_uoffset, size) \
-do { \
- unsigned int iter, t; \
- size_t dst_addrs[TEST_BATCH_SIZE], src_addrs[TEST_BATCH_SIZE]; \
- uint64_t start_time, total_time = 0; \
- uint64_t total_time2 = 0; \
- for (iter = 0; iter < (TEST_ITERATIONS / TEST_BATCH_SIZE); iter++) { \
- fill_addr_arrays(dst_addrs, is_dst_cached, dst_uoffset, \
- src_addrs, is_src_cached, src_uoffset); \
- start_time = rte_rdtsc(); \
- for (t = 0; t < TEST_BATCH_SIZE; t++) \
- rte_memcpy(dst+dst_addrs[t], src+src_addrs[t], size); \
- total_time += rte_rdtsc() - start_time; \
- } \
- for (iter = 0; iter < (TEST_ITERATIONS / TEST_BATCH_SIZE); iter++) { \
- fill_addr_arrays(dst_addrs, is_dst_cached, dst_uoffset, \
- src_addrs, is_src_cached, src_uoffset); \
- start_time = rte_rdtsc(); \
- for (t = 0; t < TEST_BATCH_SIZE; t++) \
- memcpy(dst+dst_addrs[t], src+src_addrs[t], size); \
- total_time2 += rte_rdtsc() - start_time; \
- } \
- printf("%8.0f -", (double)total_time /TEST_ITERATIONS); \
- printf("%5.0f", (double)total_time2 / TEST_ITERATIONS); \
-} while (0)
-
-/* Run aligned memcpy tests for each cached/uncached permutation */
-#define ALL_PERF_TESTS_FOR_SIZE(n) \
-do { \
- if (__builtin_constant_p(n)) \
- printf("\nC%6u", (unsigned)n); \
- else \
- printf("\n%7u", (unsigned)n); \
- SINGLE_PERF_TEST(small_buf_write, 1, 0, small_buf_read, 1, 0, n); \
- SINGLE_PERF_TEST(large_buf_write, 0, 0, small_buf_read, 1, 0, n); \
- SINGLE_PERF_TEST(small_buf_write, 1, 0, large_buf_read, 0, 0, n); \
- SINGLE_PERF_TEST(large_buf_write, 0, 0, large_buf_read, 0, 0, n); \
-} while (0)
-
-/* Run unaligned memcpy tests for each cached/uncached permutation */
-#define ALL_PERF_TESTS_FOR_SIZE_UNALIGNED(n) \
-do { \
- if (__builtin_constant_p(n)) \
- printf("\nC%6u", (unsigned)n); \
- else \
- printf("\n%7u", (unsigned)n); \
- SINGLE_PERF_TEST(small_buf_write, 1, 1, small_buf_read, 1, 5, n); \
- SINGLE_PERF_TEST(large_buf_write, 0, 1, small_buf_read, 1, 5, n); \
- SINGLE_PERF_TEST(small_buf_write, 1, 1, large_buf_read, 0, 5, n); \
- SINGLE_PERF_TEST(large_buf_write, 0, 1, large_buf_read, 0, 5, n); \
-} while (0)
-
-/* Run memcpy tests for constant length */
-#define ALL_PERF_TEST_FOR_CONSTANT \
-do { \
- TEST_CONSTANT(6U); TEST_CONSTANT(64U); TEST_CONSTANT(128U); \
- TEST_CONSTANT(192U); TEST_CONSTANT(256U); TEST_CONSTANT(512U); \
- TEST_CONSTANT(768U); TEST_CONSTANT(1024U); TEST_CONSTANT(1536U); \
-} while (0)
-
-/* Run all memcpy tests for aligned constant cases */
-static inline void
-perf_test_constant_aligned(void)
-{
-#define TEST_CONSTANT ALL_PERF_TESTS_FOR_SIZE
- ALL_PERF_TEST_FOR_CONSTANT;
-#undef TEST_CONSTANT
-}
-
-/* Run all memcpy tests for unaligned constant cases */
-static inline void
-perf_test_constant_unaligned(void)
-{
-#define TEST_CONSTANT ALL_PERF_TESTS_FOR_SIZE_UNALIGNED
- ALL_PERF_TEST_FOR_CONSTANT;
-#undef TEST_CONSTANT
-}
-
-/* Run all memcpy tests for aligned variable cases */
-static inline void
-perf_test_variable_aligned(void)
-{
- unsigned n = sizeof(buf_sizes) / sizeof(buf_sizes[0]);
- unsigned i;
- for (i = 0; i < n; i++) {
- ALL_PERF_TESTS_FOR_SIZE((size_t)buf_sizes[i]);
- }
-}
-
-/* Run all memcpy tests for unaligned variable cases */
-static inline void
-perf_test_variable_unaligned(void)
-{
- unsigned n = sizeof(buf_sizes) / sizeof(buf_sizes[0]);
- unsigned i;
- for (i = 0; i < n; i++) {
- ALL_PERF_TESTS_FOR_SIZE_UNALIGNED((size_t)buf_sizes[i]);
- }
-}
-
-/* Run all memcpy tests */
-static int
-perf_test(void)
-{
- int ret;
-
- ret = init_buffers();
- if (ret != 0)
- return ret;
-
-#if TEST_VALUE_RANGE != 0
- /* Set up buf_sizes array, if required */
- unsigned i;
- for (i = 0; i < TEST_VALUE_RANGE; i++)
- buf_sizes[i] = i;
-#endif
-
- /* See function comment */
- do_uncached_write(large_buf_write, 0, small_buf_read, 1, SMALL_BUFFER_SIZE);
-
- printf("\n** rte_memcpy() - memcpy perf. tests (C = compile-time constant) **\n"
- "======= ============== ============== ============== ==============\n"
- " Size Cache to cache Cache to mem Mem to cache Mem to mem\n"
- "(bytes) (ticks) (ticks) (ticks) (ticks)\n"
- "------- -------------- -------------- -------------- --------------");
-
- printf("\n========================== %2dB aligned ============================", ALIGNMENT_UNIT);
- /* Do aligned tests where size is a variable */
- perf_test_variable_aligned();
- printf("\n------- -------------- -------------- -------------- --------------");
- /* Do aligned tests where size is a compile-time constant */
- perf_test_constant_aligned();
- printf("\n=========================== Unaligned =============================");
- /* Do unaligned tests where size is a variable */
- perf_test_variable_unaligned();
- printf("\n------- -------------- -------------- -------------- --------------");
- /* Do unaligned tests where size is a compile-time constant */
- perf_test_constant_unaligned();
- printf("\n======= ============== ============== ============== ==============\n\n");
-
- free_buffers();
-
- return 0;
-}
-
-static int
-test_memcpy_perf(void)
-{
- int ret;
-
- ret = perf_test();
- if (ret != 0)
- return -1;
- return 0;
-}
-
-REGISTER_TEST_COMMAND(memcpy_perf_autotest, test_memcpy_perf);
diff --git a/app/test/test_memory.c b/app/test/test_memory.c
deleted file mode 100644
index 921bdc88..00000000
--- a/app/test/test_memory.c
+++ /dev/null
@@ -1,89 +0,0 @@
-/*-
- * BSD LICENSE
- *
- * Copyright(c) 2010-2014 Intel Corporation. All rights reserved.
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * * Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * * Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in
- * the documentation and/or other materials provided with the
- * distribution.
- * * Neither the name of Intel Corporation nor the names of its
- * contributors may be used to endorse or promote products derived
- * from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
- * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
- * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#include <stdio.h>
-#include <stdint.h>
-
-#include <rte_memory.h>
-#include <rte_common.h>
-
-#include "test.h"
-
-/*
- * Memory
- * ======
- *
- * - Dump the mapped memory. The python-expect script checks that at
- * least one line is dumped.
- *
- * - Check that memory size is different than 0.
- *
- * - Try to read all memory; it should not segfault.
- */
-
-static int
-test_memory(void)
-{
- uint64_t s;
- unsigned i;
- size_t j;
- const struct rte_memseg *mem;
-
- /*
- * dump the mapped memory: the python-expect script checks
- * that at least one line is dumped
- */
- printf("Dump memory layout\n");
- rte_dump_physmem_layout(stdout);
-
- /* check that memory size is != 0 */
- s = rte_eal_get_physmem_size();
- if (s == 0) {
- printf("No memory detected\n");
- return -1;
- }
-
- /* try to read memory (should not segfault) */
- mem = rte_eal_get_physmem_layout();
- for (i = 0; i < RTE_MAX_MEMSEG && mem[i].addr != NULL ; i++) {
-
- /* check memory */
- for (j = 0; j<mem[i].len; j++) {
- *((volatile uint8_t *) mem[i].addr + j);
- }
- }
-
- return 0;
-}
-
-REGISTER_TEST_COMMAND(memory_autotest, test_memory);
diff --git a/app/test/test_mempool.c b/app/test/test_mempool.c
deleted file mode 100644
index b9880b32..00000000
--- a/app/test/test_mempool.c
+++ /dev/null
@@ -1,619 +0,0 @@
-/*-
- * BSD LICENSE
- *
- * Copyright(c) 2010-2014 Intel Corporation. All rights reserved.
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * * Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * * Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in
- * the documentation and/or other materials provided with the
- * distribution.
- * * Neither the name of Intel Corporation nor the names of its
- * contributors may be used to endorse or promote products derived
- * from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
- * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
- * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#include <string.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <stdint.h>
-#include <inttypes.h>
-#include <stdarg.h>
-#include <errno.h>
-#include <sys/queue.h>
-
-#include <rte_common.h>
-#include <rte_log.h>
-#include <rte_debug.h>
-#include <rte_memory.h>
-#include <rte_memzone.h>
-#include <rte_launch.h>
-#include <rte_cycles.h>
-#include <rte_eal.h>
-#include <rte_per_lcore.h>
-#include <rte_lcore.h>
-#include <rte_atomic.h>
-#include <rte_branch_prediction.h>
-#include <rte_mempool.h>
-#include <rte_spinlock.h>
-#include <rte_malloc.h>
-
-#include "test.h"
-
-/*
- * Mempool
- * =======
- *
- * Basic tests: done on one core with and without cache:
- *
- * - Get one object, put one object
- * - Get two objects, put two objects
- * - Get all objects, test that their content is not modified and
- * put them back in the pool.
- */
-
-#define MEMPOOL_ELT_SIZE 2048
-#define MAX_KEEP 16
-#define MEMPOOL_SIZE ((rte_lcore_count()*(MAX_KEEP+RTE_MEMPOOL_CACHE_MAX_SIZE))-1)
-
-#define LOG_ERR() printf("test failed at %s():%d\n", __func__, __LINE__)
-#define RET_ERR() do { \
- LOG_ERR(); \
- return -1; \
- } while (0)
-#define GOTO_ERR(var, label) do { \
- LOG_ERR(); \
- var = -1; \
- goto label; \
- } while (0)
-
-static rte_atomic32_t synchro;
-
-/*
- * save the object number in the first 4 bytes of object data. All
- * other bytes are set to 0.
- */
-static void
-my_obj_init(struct rte_mempool *mp, __attribute__((unused)) void *arg,
- void *obj, unsigned i)
-{
- uint32_t *objnum = obj;
-
- memset(obj, 0, mp->elt_size);
- *objnum = i;
-}
-
-/* basic tests (done on one core) */
-static int
-test_mempool_basic(struct rte_mempool *mp, int use_external_cache)
-{
- uint32_t *objnum;
- void **objtable;
- void *obj, *obj2;
- char *obj_data;
- int ret = 0;
- unsigned i, j;
- int offset;
- struct rte_mempool_cache *cache;
-
- if (use_external_cache) {
- /* Create a user-owned mempool cache. */
- cache = rte_mempool_cache_create(RTE_MEMPOOL_CACHE_MAX_SIZE,
- SOCKET_ID_ANY);
- if (cache == NULL)
- RET_ERR();
- } else {
- /* May be NULL if cache is disabled. */
- cache = rte_mempool_default_cache(mp, rte_lcore_id());
- }
-
- /* dump the mempool status */
- rte_mempool_dump(stdout, mp);
-
- printf("get an object\n");
- if (rte_mempool_generic_get(mp, &obj, 1, cache, 0) < 0)
- GOTO_ERR(ret, out);
- rte_mempool_dump(stdout, mp);
-
- /* tests that improve coverage */
- printf("get object count\n");
- /* We have to count the extra caches, one in this case. */
- offset = use_external_cache ? 1 * cache->len : 0;
- if (rte_mempool_avail_count(mp) + offset != MEMPOOL_SIZE - 1)
- GOTO_ERR(ret, out);
-
- printf("get private data\n");
- if (rte_mempool_get_priv(mp) != (char *)mp +
- MEMPOOL_HEADER_SIZE(mp, mp->cache_size))
- GOTO_ERR(ret, out);
-
-#ifndef RTE_EXEC_ENV_BSDAPP /* rte_mem_virt2phy() not supported on bsd */
- printf("get physical address of an object\n");
- if (rte_mempool_virt2phy(mp, obj) != rte_mem_virt2phy(obj))
- GOTO_ERR(ret, out);
-#endif
-
- printf("put the object back\n");
- rte_mempool_generic_put(mp, &obj, 1, cache, 0);
- rte_mempool_dump(stdout, mp);
-
- printf("get 2 objects\n");
- if (rte_mempool_generic_get(mp, &obj, 1, cache, 0) < 0)
- GOTO_ERR(ret, out);
- if (rte_mempool_generic_get(mp, &obj2, 1, cache, 0) < 0) {
- rte_mempool_generic_put(mp, &obj, 1, cache, 0);
- GOTO_ERR(ret, out);
- }
- rte_mempool_dump(stdout, mp);
-
- printf("put the objects back\n");
- rte_mempool_generic_put(mp, &obj, 1, cache, 0);
- rte_mempool_generic_put(mp, &obj2, 1, cache, 0);
- rte_mempool_dump(stdout, mp);
-
- /*
- * get many objects: we cannot get them all because the cache
- * on other cores may not be empty.
- */
- objtable = malloc(MEMPOOL_SIZE * sizeof(void *));
- if (objtable == NULL)
- GOTO_ERR(ret, out);
-
- for (i = 0; i < MEMPOOL_SIZE; i++) {
- if (rte_mempool_generic_get(mp, &objtable[i], 1, cache, 0) < 0)
- break;
- }
-
- /*
- * for each object, check that its content was not modified,
- * and put objects back in pool
- */
- while (i--) {
- obj = objtable[i];
- obj_data = obj;
- objnum = obj;
- if (*objnum > MEMPOOL_SIZE) {
- printf("bad object number(%d)\n", *objnum);
- ret = -1;
- break;
- }
- for (j = sizeof(*objnum); j < mp->elt_size; j++) {
- if (obj_data[j] != 0)
- ret = -1;
- }
-
- rte_mempool_generic_put(mp, &objtable[i], 1, cache, 0);
- }
-
- free(objtable);
- if (ret == -1)
- printf("objects were modified!\n");
-
-out:
- if (use_external_cache) {
- rte_mempool_cache_flush(cache, mp);
- rte_mempool_cache_free(cache);
- }
-
- return ret;
-}
-
-static int test_mempool_creation_with_exceeded_cache_size(void)
-{
- struct rte_mempool *mp_cov;
-
- mp_cov = rte_mempool_create("test_mempool_cache_too_big",
- MEMPOOL_SIZE,
- MEMPOOL_ELT_SIZE,
- RTE_MEMPOOL_CACHE_MAX_SIZE + 32, 0,
- NULL, NULL,
- my_obj_init, NULL,
- SOCKET_ID_ANY, 0);
-
- if (mp_cov != NULL) {
- rte_mempool_free(mp_cov);
- RET_ERR();
- }
-
- return 0;
-}
-
-static struct rte_mempool *mp_spsc;
-static rte_spinlock_t scsp_spinlock;
-static void *scsp_obj_table[MAX_KEEP];
-
-/*
- * single producer function
- */
-static int test_mempool_single_producer(void)
-{
- unsigned int i;
- void *obj = NULL;
- uint64_t start_cycles, end_cycles;
- uint64_t duration = rte_get_timer_hz() / 4;
-
- start_cycles = rte_get_timer_cycles();
- while (1) {
- end_cycles = rte_get_timer_cycles();
- /* duration uses up, stop producing */
- if (start_cycles + duration < end_cycles)
- break;
- rte_spinlock_lock(&scsp_spinlock);
- for (i = 0; i < MAX_KEEP; i ++) {
- if (NULL != scsp_obj_table[i]) {
- obj = scsp_obj_table[i];
- break;
- }
- }
- rte_spinlock_unlock(&scsp_spinlock);
- if (i >= MAX_KEEP) {
- continue;
- }
- if (rte_mempool_from_obj(obj) != mp_spsc) {
- printf("obj not owned by this mempool\n");
- RET_ERR();
- }
- rte_mempool_put(mp_spsc, obj);
- rte_spinlock_lock(&scsp_spinlock);
- scsp_obj_table[i] = NULL;
- rte_spinlock_unlock(&scsp_spinlock);
- }
-
- return 0;
-}
-
-/*
- * single consumer function
- */
-static int test_mempool_single_consumer(void)
-{
- unsigned int i;
- void * obj;
- uint64_t start_cycles, end_cycles;
- uint64_t duration = rte_get_timer_hz() / 8;
-
- start_cycles = rte_get_timer_cycles();
- while (1) {
- end_cycles = rte_get_timer_cycles();
- /* duration uses up, stop consuming */
- if (start_cycles + duration < end_cycles)
- break;
- rte_spinlock_lock(&scsp_spinlock);
- for (i = 0; i < MAX_KEEP; i ++) {
- if (NULL == scsp_obj_table[i])
- break;
- }
- rte_spinlock_unlock(&scsp_spinlock);
- if (i >= MAX_KEEP)
- continue;
- if (rte_mempool_get(mp_spsc, &obj) < 0)
- break;
- rte_spinlock_lock(&scsp_spinlock);
- scsp_obj_table[i] = obj;
- rte_spinlock_unlock(&scsp_spinlock);
- }
-
- return 0;
-}
-
-/*
- * test function for mempool test based on singple consumer and single producer,
- * can run on one lcore only
- */
-static int
-test_mempool_launch_single_consumer(__attribute__((unused)) void *arg)
-{
- return test_mempool_single_consumer();
-}
-
-static void
-my_mp_init(struct rte_mempool *mp, __attribute__((unused)) void *arg)
-{
- printf("mempool name is %s\n", mp->name);
- /* nothing to be implemented here*/
- return ;
-}
-
-/*
- * it tests the mempool operations based on singple producer and single consumer
- */
-static int
-test_mempool_sp_sc(void)
-{
- int ret = 0;
- unsigned lcore_id = rte_lcore_id();
- unsigned lcore_next;
-
- /* create a mempool with single producer/consumer ring */
- if (mp_spsc == NULL) {
- mp_spsc = rte_mempool_create("test_mempool_sp_sc", MEMPOOL_SIZE,
- MEMPOOL_ELT_SIZE, 0, 0,
- my_mp_init, NULL,
- my_obj_init, NULL,
- SOCKET_ID_ANY,
- MEMPOOL_F_NO_CACHE_ALIGN | MEMPOOL_F_SP_PUT |
- MEMPOOL_F_SC_GET);
- if (mp_spsc == NULL)
- RET_ERR();
- }
- if (rte_mempool_lookup("test_mempool_sp_sc") != mp_spsc) {
- printf("Cannot lookup mempool from its name\n");
- rte_mempool_free(mp_spsc);
- RET_ERR();
- }
- lcore_next = rte_get_next_lcore(lcore_id, 0, 1);
- if (lcore_next >= RTE_MAX_LCORE) {
- rte_mempool_free(mp_spsc);
- RET_ERR();
- }
- if (rte_eal_lcore_role(lcore_next) != ROLE_RTE) {
- rte_mempool_free(mp_spsc);
- RET_ERR();
- }
- rte_spinlock_init(&scsp_spinlock);
- memset(scsp_obj_table, 0, sizeof(scsp_obj_table));
- rte_eal_remote_launch(test_mempool_launch_single_consumer, NULL,
- lcore_next);
- if (test_mempool_single_producer() < 0)
- ret = -1;
-
- if (rte_eal_wait_lcore(lcore_next) < 0)
- ret = -1;
- rte_mempool_free(mp_spsc);
-
- return ret;
-}
-
-/*
- * it tests some more basic of mempool
- */
-static int
-test_mempool_basic_ex(struct rte_mempool *mp)
-{
- unsigned i;
- void **obj;
- void *err_obj;
- int ret = -1;
-
- if (mp == NULL)
- return ret;
-
- obj = rte_calloc("test_mempool_basic_ex", MEMPOOL_SIZE,
- sizeof(void *), 0);
- if (obj == NULL) {
- printf("test_mempool_basic_ex fail to rte_malloc\n");
- return ret;
- }
- printf("test_mempool_basic_ex now mempool (%s) has %u free entries\n",
- mp->name, rte_mempool_in_use_count(mp));
- if (rte_mempool_full(mp) != 1) {
- printf("test_mempool_basic_ex the mempool should be full\n");
- goto fail_mp_basic_ex;
- }
-
- for (i = 0; i < MEMPOOL_SIZE; i ++) {
- if (rte_mempool_get(mp, &obj[i]) < 0) {
- printf("test_mp_basic_ex fail to get object for [%u]\n",
- i);
- goto fail_mp_basic_ex;
- }
- }
- if (rte_mempool_get(mp, &err_obj) == 0) {
- printf("test_mempool_basic_ex get an impossible obj\n");
- goto fail_mp_basic_ex;
- }
- printf("number: %u\n", i);
- if (rte_mempool_empty(mp) != 1) {
- printf("test_mempool_basic_ex the mempool should be empty\n");
- goto fail_mp_basic_ex;
- }
-
- for (i = 0; i < MEMPOOL_SIZE; i++)
- rte_mempool_put(mp, obj[i]);
-
- if (rte_mempool_full(mp) != 1) {
- printf("test_mempool_basic_ex the mempool should be full\n");
- goto fail_mp_basic_ex;
- }
-
- ret = 0;
-
-fail_mp_basic_ex:
- if (obj != NULL)
- rte_free((void *)obj);
-
- return ret;
-}
-
-static int
-test_mempool_same_name_twice_creation(void)
-{
- struct rte_mempool *mp_tc, *mp_tc2;
-
- mp_tc = rte_mempool_create("test_mempool_same_name", MEMPOOL_SIZE,
- MEMPOOL_ELT_SIZE, 0, 0,
- NULL, NULL,
- NULL, NULL,
- SOCKET_ID_ANY, 0);
-
- if (mp_tc == NULL)
- RET_ERR();
-
- mp_tc2 = rte_mempool_create("test_mempool_same_name", MEMPOOL_SIZE,
- MEMPOOL_ELT_SIZE, 0, 0,
- NULL, NULL,
- NULL, NULL,
- SOCKET_ID_ANY, 0);
-
- if (mp_tc2 != NULL) {
- rte_mempool_free(mp_tc);
- rte_mempool_free(mp_tc2);
- RET_ERR();
- }
-
- rte_mempool_free(mp_tc);
- return 0;
-}
-
-/*
- * BAsic test for mempool_xmem functions.
- */
-static int
-test_mempool_xmem_misc(void)
-{
- uint32_t elt_num, total_size;
- size_t sz;
- ssize_t usz;
-
- elt_num = MAX_KEEP;
- total_size = rte_mempool_calc_obj_size(MEMPOOL_ELT_SIZE, 0, NULL);
- sz = rte_mempool_xmem_size(elt_num, total_size, MEMPOOL_PG_SHIFT_MAX);
-
- usz = rte_mempool_xmem_usage(NULL, elt_num, total_size, 0, 1,
- MEMPOOL_PG_SHIFT_MAX);
-
- if (sz != (size_t)usz) {
- printf("failure @ %s: rte_mempool_xmem_usage(%u, %u) "
- "returns: %#zx, while expected: %#zx;\n",
- __func__, elt_num, total_size, sz, (size_t)usz);
- return -1;
- }
-
- return 0;
-}
-
-static void
-walk_cb(struct rte_mempool *mp, void *userdata __rte_unused)
-{
- printf("\t%s\n", mp->name);
-}
-
-static int
-test_mempool(void)
-{
- struct rte_mempool *mp_cache = NULL;
- struct rte_mempool *mp_nocache = NULL;
- struct rte_mempool *mp_stack = NULL;
-
- rte_atomic32_init(&synchro);
-
- /* create a mempool (without cache) */
- mp_nocache = rte_mempool_create("test_nocache", MEMPOOL_SIZE,
- MEMPOOL_ELT_SIZE, 0, 0,
- NULL, NULL,
- my_obj_init, NULL,
- SOCKET_ID_ANY, 0);
-
- if (mp_nocache == NULL) {
- printf("cannot allocate mp_nocache mempool\n");
- goto err;
- }
-
- /* create a mempool (with cache) */
- mp_cache = rte_mempool_create("test_cache", MEMPOOL_SIZE,
- MEMPOOL_ELT_SIZE,
- RTE_MEMPOOL_CACHE_MAX_SIZE, 0,
- NULL, NULL,
- my_obj_init, NULL,
- SOCKET_ID_ANY, 0);
-
- if (mp_cache == NULL) {
- printf("cannot allocate mp_cache mempool\n");
- goto err;
- }
-
- /* create a mempool with an external handler */
- mp_stack = rte_mempool_create_empty("test_stack",
- MEMPOOL_SIZE,
- MEMPOOL_ELT_SIZE,
- RTE_MEMPOOL_CACHE_MAX_SIZE, 0,
- SOCKET_ID_ANY, 0);
-
- if (mp_stack == NULL) {
- printf("cannot allocate mp_stack mempool\n");
- goto err;
- }
- if (rte_mempool_set_ops_byname(mp_stack, "stack", NULL) < 0) {
- printf("cannot set stack handler\n");
- goto err;
- }
- if (rte_mempool_populate_default(mp_stack) < 0) {
- printf("cannot populate mp_stack mempool\n");
- goto err;
- }
- rte_mempool_obj_iter(mp_stack, my_obj_init, NULL);
-
- /* retrieve the mempool from its name */
- if (rte_mempool_lookup("test_nocache") != mp_nocache) {
- printf("Cannot lookup mempool from its name\n");
- goto err;
- }
-
- printf("Walk into mempools:\n");
- rte_mempool_walk(walk_cb, NULL);
-
- rte_mempool_list_dump(stdout);
-
- /* basic tests without cache */
- if (test_mempool_basic(mp_nocache, 0) < 0)
- goto err;
-
- /* basic tests with cache */
- if (test_mempool_basic(mp_cache, 0) < 0)
- goto err;
-
- /* basic tests with user-owned cache */
- if (test_mempool_basic(mp_nocache, 1) < 0)
- goto err;
-
- /* more basic tests without cache */
- if (test_mempool_basic_ex(mp_nocache) < 0)
- goto err;
-
- /* mempool operation test based on single producer and single comsumer */
- if (test_mempool_sp_sc() < 0)
- goto err;
-
- if (test_mempool_creation_with_exceeded_cache_size() < 0)
- goto err;
-
- if (test_mempool_same_name_twice_creation() < 0)
- goto err;
-
- if (test_mempool_xmem_misc() < 0)
- goto err;
-
- /* test the stack handler */
- if (test_mempool_basic(mp_stack, 1) < 0)
- goto err;
-
- rte_mempool_list_dump(stdout);
-
- return 0;
-
-err:
- rte_mempool_free(mp_nocache);
- rte_mempool_free(mp_cache);
- rte_mempool_free(mp_stack);
- return -1;
-}
-
-REGISTER_TEST_COMMAND(mempool_autotest, test_mempool);
diff --git a/app/test/test_mempool_perf.c b/app/test/test_mempool_perf.c
deleted file mode 100644
index ebf1721a..00000000
--- a/app/test/test_mempool_perf.c
+++ /dev/null
@@ -1,383 +0,0 @@
-/*-
- * BSD LICENSE
- *
- * Copyright(c) 2010-2014 Intel Corporation. All rights reserved.
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * * Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * * Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in
- * the documentation and/or other materials provided with the
- * distribution.
- * * Neither the name of Intel Corporation nor the names of its
- * contributors may be used to endorse or promote products derived
- * from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
- * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
- * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#include <string.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <stdint.h>
-#include <inttypes.h>
-#include <stdarg.h>
-#include <errno.h>
-#include <sys/queue.h>
-
-#include <rte_common.h>
-#include <rte_log.h>
-#include <rte_debug.h>
-#include <rte_memory.h>
-#include <rte_memzone.h>
-#include <rte_launch.h>
-#include <rte_cycles.h>
-#include <rte_eal.h>
-#include <rte_per_lcore.h>
-#include <rte_lcore.h>
-#include <rte_atomic.h>
-#include <rte_branch_prediction.h>
-#include <rte_mempool.h>
-#include <rte_spinlock.h>
-#include <rte_malloc.h>
-
-#include "test.h"
-
-/*
- * Mempool performance
- * =======
- *
- * Each core get *n_keep* objects per bulk of *n_get_bulk*. Then,
- * objects are put back in the pool per bulk of *n_put_bulk*.
- *
- * This sequence is done during TIME_S seconds.
- *
- * This test is done on the following configurations:
- *
- * - Cores configuration (*cores*)
- *
- * - One core with cache
- * - Two cores with cache
- * - Max. cores with cache
- * - One core without cache
- * - Two cores without cache
- * - Max. cores without cache
- * - One core with user-owned cache
- * - Two cores with user-owned cache
- * - Max. cores with user-owned cache
- *
- * - Bulk size (*n_get_bulk*, *n_put_bulk*)
- *
- * - Bulk get from 1 to 32
- * - Bulk put from 1 to 32
- *
- * - Number of kept objects (*n_keep*)
- *
- * - 32
- * - 128
- */
-
-#define N 65536
-#define TIME_S 5
-#define MEMPOOL_ELT_SIZE 2048
-#define MAX_KEEP 128
-#define MEMPOOL_SIZE ((rte_lcore_count()*(MAX_KEEP+RTE_MEMPOOL_CACHE_MAX_SIZE))-1)
-
-#define LOG_ERR() printf("test failed at %s():%d\n", __func__, __LINE__)
-#define RET_ERR() do { \
- LOG_ERR(); \
- return -1; \
- } while (0)
-#define GOTO_ERR(var, label) do { \
- LOG_ERR(); \
- var = -1; \
- goto label; \
- } while (0)
-
-static struct rte_mempool *mp;
-static struct rte_mempool *mp_cache, *mp_nocache;
-static int use_external_cache;
-static unsigned external_cache_size = RTE_MEMPOOL_CACHE_MAX_SIZE;
-
-static rte_atomic32_t synchro;
-
-/* number of objects in one bulk operation (get or put) */
-static unsigned n_get_bulk;
-static unsigned n_put_bulk;
-
-/* number of objects retrived from mempool before putting them back */
-static unsigned n_keep;
-
-/* number of enqueues / dequeues */
-struct mempool_test_stats {
- uint64_t enq_count;
-} __rte_cache_aligned;
-
-static struct mempool_test_stats stats[RTE_MAX_LCORE];
-
-/*
- * save the object number in the first 4 bytes of object data. All
- * other bytes are set to 0.
- */
-static void
-my_obj_init(struct rte_mempool *mp, __attribute__((unused)) void *arg,
- void *obj, unsigned i)
-{
- uint32_t *objnum = obj;
- memset(obj, 0, mp->elt_size);
- *objnum = i;
-}
-
-static int
-per_lcore_mempool_test(__attribute__((unused)) void *arg)
-{
- void *obj_table[MAX_KEEP];
- unsigned i, idx;
- unsigned lcore_id = rte_lcore_id();
- int ret = 0;
- uint64_t start_cycles, end_cycles;
- uint64_t time_diff = 0, hz = rte_get_timer_hz();
- struct rte_mempool_cache *cache;
-
- if (use_external_cache) {
- /* Create a user-owned mempool cache. */
- cache = rte_mempool_cache_create(external_cache_size,
- SOCKET_ID_ANY);
- if (cache == NULL)
- RET_ERR();
- } else {
- /* May be NULL if cache is disabled. */
- cache = rte_mempool_default_cache(mp, lcore_id);
- }
-
- /* n_get_bulk and n_put_bulk must be divisors of n_keep */
- if (((n_keep / n_get_bulk) * n_get_bulk) != n_keep)
- GOTO_ERR(ret, out);
- if (((n_keep / n_put_bulk) * n_put_bulk) != n_keep)
- GOTO_ERR(ret, out);
-
- stats[lcore_id].enq_count = 0;
-
- /* wait synchro for slaves */
- if (lcore_id != rte_get_master_lcore())
- while (rte_atomic32_read(&synchro) == 0);
-
- start_cycles = rte_get_timer_cycles();
-
- while (time_diff/hz < TIME_S) {
- for (i = 0; likely(i < (N/n_keep)); i++) {
- /* get n_keep objects by bulk of n_bulk */
- idx = 0;
- while (idx < n_keep) {
- ret = rte_mempool_generic_get(mp,
- &obj_table[idx],
- n_get_bulk,
- cache, 0);
- if (unlikely(ret < 0)) {
- rte_mempool_dump(stdout, mp);
- /* in this case, objects are lost... */
- GOTO_ERR(ret, out);
- }
- idx += n_get_bulk;
- }
-
- /* put the objects back */
- idx = 0;
- while (idx < n_keep) {
- rte_mempool_generic_put(mp, &obj_table[idx],
- n_put_bulk,
- cache, 0);
- idx += n_put_bulk;
- }
- }
- end_cycles = rte_get_timer_cycles();
- time_diff = end_cycles - start_cycles;
- stats[lcore_id].enq_count += N;
- }
-
-out:
- if (use_external_cache) {
- rte_mempool_cache_flush(cache, mp);
- rte_mempool_cache_free(cache);
- }
-
- return ret;
-}
-
-/* launch all the per-lcore test, and display the result */
-static int
-launch_cores(unsigned cores)
-{
- unsigned lcore_id;
- uint64_t rate;
- int ret;
- unsigned cores_save = cores;
-
- rte_atomic32_set(&synchro, 0);
-
- /* reset stats */
- memset(stats, 0, sizeof(stats));
-
- printf("mempool_autotest cache=%u cores=%u n_get_bulk=%u "
- "n_put_bulk=%u n_keep=%u ",
- use_external_cache ?
- external_cache_size : (unsigned) mp->cache_size,
- cores, n_get_bulk, n_put_bulk, n_keep);
-
- if (rte_mempool_avail_count(mp) != MEMPOOL_SIZE) {
- printf("mempool is not full\n");
- return -1;
- }
-
- RTE_LCORE_FOREACH_SLAVE(lcore_id) {
- if (cores == 1)
- break;
- cores--;
- rte_eal_remote_launch(per_lcore_mempool_test,
- NULL, lcore_id);
- }
-
- /* start synchro and launch test on master */
- rte_atomic32_set(&synchro, 1);
-
- ret = per_lcore_mempool_test(NULL);
-
- cores = cores_save;
- RTE_LCORE_FOREACH_SLAVE(lcore_id) {
- if (cores == 1)
- break;
- cores--;
- if (rte_eal_wait_lcore(lcore_id) < 0)
- ret = -1;
- }
-
- if (ret < 0) {
- printf("per-lcore test returned -1\n");
- return -1;
- }
-
- rate = 0;
- for (lcore_id = 0; lcore_id < RTE_MAX_LCORE; lcore_id++)
- rate += (stats[lcore_id].enq_count / TIME_S);
-
- printf("rate_persec=%" PRIu64 "\n", rate);
-
- return 0;
-}
-
-/* for a given number of core, launch all test cases */
-static int
-do_one_mempool_test(unsigned cores)
-{
- unsigned bulk_tab_get[] = { 1, 4, 32, 0 };
- unsigned bulk_tab_put[] = { 1, 4, 32, 0 };
- unsigned keep_tab[] = { 32, 128, 0 };
- unsigned *get_bulk_ptr;
- unsigned *put_bulk_ptr;
- unsigned *keep_ptr;
- int ret;
-
- for (get_bulk_ptr = bulk_tab_get; *get_bulk_ptr; get_bulk_ptr++) {
- for (put_bulk_ptr = bulk_tab_put; *put_bulk_ptr; put_bulk_ptr++) {
- for (keep_ptr = keep_tab; *keep_ptr; keep_ptr++) {
-
- n_get_bulk = *get_bulk_ptr;
- n_put_bulk = *put_bulk_ptr;
- n_keep = *keep_ptr;
- ret = launch_cores(cores);
-
- if (ret < 0)
- return -1;
- }
- }
- }
- return 0;
-}
-
-static int
-test_mempool_perf(void)
-{
- rte_atomic32_init(&synchro);
-
- /* create a mempool (without cache) */
- if (mp_nocache == NULL)
- mp_nocache = rte_mempool_create("perf_test_nocache", MEMPOOL_SIZE,
- MEMPOOL_ELT_SIZE, 0, 0,
- NULL, NULL,
- my_obj_init, NULL,
- SOCKET_ID_ANY, 0);
- if (mp_nocache == NULL)
- return -1;
-
- /* create a mempool (with cache) */
- if (mp_cache == NULL)
- mp_cache = rte_mempool_create("perf_test_cache", MEMPOOL_SIZE,
- MEMPOOL_ELT_SIZE,
- RTE_MEMPOOL_CACHE_MAX_SIZE, 0,
- NULL, NULL,
- my_obj_init, NULL,
- SOCKET_ID_ANY, 0);
- if (mp_cache == NULL)
- return -1;
-
- /* performance test with 1, 2 and max cores */
- printf("start performance test (without cache)\n");
- mp = mp_nocache;
-
- if (do_one_mempool_test(1) < 0)
- return -1;
-
- if (do_one_mempool_test(2) < 0)
- return -1;
-
- if (do_one_mempool_test(rte_lcore_count()) < 0)
- return -1;
-
- /* performance test with 1, 2 and max cores */
- printf("start performance test (with cache)\n");
- mp = mp_cache;
-
- if (do_one_mempool_test(1) < 0)
- return -1;
-
- if (do_one_mempool_test(2) < 0)
- return -1;
-
- if (do_one_mempool_test(rte_lcore_count()) < 0)
- return -1;
-
- /* performance test with 1, 2 and max cores */
- printf("start performance test (with user-owned cache)\n");
- mp = mp_nocache;
- use_external_cache = 1;
-
- if (do_one_mempool_test(1) < 0)
- return -1;
-
- if (do_one_mempool_test(2) < 0)
- return -1;
-
- if (do_one_mempool_test(rte_lcore_count()) < 0)
- return -1;
-
- rte_mempool_list_dump(stdout);
-
- return 0;
-}
-
-REGISTER_TEST_COMMAND(mempool_perf_autotest, test_mempool_perf);
diff --git a/app/test/test_memzone.c b/app/test/test_memzone.c
deleted file mode 100644
index 7ae31cf7..00000000
--- a/app/test/test_memzone.c
+++ /dev/null
@@ -1,875 +0,0 @@
-/*-
- * BSD LICENSE
- *
- * Copyright(c) 2010-2014 Intel Corporation. All rights reserved.
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * * Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * * Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in
- * the documentation and/or other materials provided with the
- * distribution.
- * * Neither the name of Intel Corporation nor the names of its
- * contributors may be used to endorse or promote products derived
- * from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
- * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
- * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#include <stdio.h>
-#include <stdint.h>
-#include <inttypes.h>
-#include <sys/queue.h>
-
-#include <rte_random.h>
-#include <rte_cycles.h>
-#include <rte_memory.h>
-#include <rte_memzone.h>
-#include <rte_eal.h>
-#include <rte_eal_memconfig.h>
-#include <rte_common.h>
-#include <rte_string_fns.h>
-#include <rte_errno.h>
-#include <rte_malloc.h>
-#include "../../lib/librte_eal/common/malloc_elem.h"
-
-#include "test.h"
-
-/*
- * Memzone
- * =======
- *
- * - Search for three reserved zones or reserve them if they do not exist:
- *
- * - One is on any socket id.
- * - The second is on socket 0.
- * - The last one is on socket 1 (if socket 1 exists).
- *
- * - Check that the zones exist.
- *
- * - Check that the zones are cache-aligned.
- *
- * - Check that zones do not overlap.
- *
- * - Check that the zones are on the correct socket id.
- *
- * - Check that a lookup of the first zone returns the same pointer.
- *
- * - Check that it is not possible to create another zone with the
- * same name as an existing zone.
- *
- * - Check flags for specific huge page size reservation
- */
-
-/* Test if memory overlaps: return 1 if true, or 0 if false. */
-static int
-is_memory_overlap(phys_addr_t ptr1, size_t len1, phys_addr_t ptr2, size_t len2)
-{
- if (ptr2 >= ptr1 && (ptr2 - ptr1) < len1)
- return 1;
- else if (ptr2 < ptr1 && (ptr1 - ptr2) < len2)
- return 1;
- return 0;
-}
-
-static int
-test_memzone_invalid_alignment(void)
-{
- const struct rte_memzone * mz;
-
- mz = rte_memzone_lookup("invalid_alignment");
- if (mz != NULL) {
- printf("Zone with invalid alignment has been reserved\n");
- return -1;
- }
-
- mz = rte_memzone_reserve_aligned("invalid_alignment", 100,
- SOCKET_ID_ANY, 0, 100);
- if (mz != NULL) {
- printf("Zone with invalid alignment has been reserved\n");
- return -1;
- }
- return 0;
-}
-
-static int
-test_memzone_reserving_zone_size_bigger_than_the_maximum(void)
-{
- const struct rte_memzone * mz;
-
- mz = rte_memzone_lookup("zone_size_bigger_than_the_maximum");
- if (mz != NULL) {
- printf("zone_size_bigger_than_the_maximum has been reserved\n");
- return -1;
- }
-
- mz = rte_memzone_reserve("zone_size_bigger_than_the_maximum", (size_t)-1,
- SOCKET_ID_ANY, 0);
- if (mz != NULL) {
- printf("It is impossible to reserve such big a memzone\n");
- return -1;
- }
-
- return 0;
-}
-
-static int
-test_memzone_reserve_flags(void)
-{
- const struct rte_memzone *mz;
- const struct rte_memseg *ms;
- int hugepage_2MB_avail = 0;
- int hugepage_1GB_avail = 0;
- int hugepage_16MB_avail = 0;
- int hugepage_16GB_avail = 0;
- const size_t size = 100;
- int i = 0;
- ms = rte_eal_get_physmem_layout();
- for (i = 0; i < RTE_MAX_MEMSEG; i++) {
- if (ms[i].hugepage_sz == RTE_PGSIZE_2M)
- hugepage_2MB_avail = 1;
- if (ms[i].hugepage_sz == RTE_PGSIZE_1G)
- hugepage_1GB_avail = 1;
- if (ms[i].hugepage_sz == RTE_PGSIZE_16M)
- hugepage_16MB_avail = 1;
- if (ms[i].hugepage_sz == RTE_PGSIZE_16G)
- hugepage_16GB_avail = 1;
- }
- /* Display the availability of 2MB ,1GB, 16MB, 16GB pages */
- if (hugepage_2MB_avail)
- printf("2MB Huge pages available\n");
- if (hugepage_1GB_avail)
- printf("1GB Huge pages available\n");
- if (hugepage_16MB_avail)
- printf("16MB Huge pages available\n");
- if (hugepage_16GB_avail)
- printf("16GB Huge pages available\n");
- /*
- * If 2MB pages available, check that a small memzone is correctly
- * reserved from 2MB huge pages when requested by the RTE_MEMZONE_2MB flag.
- * Also check that RTE_MEMZONE_SIZE_HINT_ONLY flag only defaults to an
- * available page size (i.e 1GB ) when 2MB pages are unavailable.
- */
- if (hugepage_2MB_avail) {
- mz = rte_memzone_reserve("flag_zone_2M", size, SOCKET_ID_ANY,
- RTE_MEMZONE_2MB);
- if (mz == NULL) {
- printf("MEMZONE FLAG 2MB\n");
- return -1;
- }
- if (mz->hugepage_sz != RTE_PGSIZE_2M) {
- printf("hugepage_sz not equal 2M\n");
- return -1;
- }
-
- mz = rte_memzone_reserve("flag_zone_2M_HINT", size, SOCKET_ID_ANY,
- RTE_MEMZONE_2MB|RTE_MEMZONE_SIZE_HINT_ONLY);
- if (mz == NULL) {
- printf("MEMZONE FLAG 2MB\n");
- return -1;
- }
- if (mz->hugepage_sz != RTE_PGSIZE_2M) {
- printf("hugepage_sz not equal 2M\n");
- return -1;
- }
-
- /* Check if 1GB huge pages are unavailable, that function fails unless
- * HINT flag is indicated
- */
- if (!hugepage_1GB_avail) {
- mz = rte_memzone_reserve("flag_zone_1G_HINT", size, SOCKET_ID_ANY,
- RTE_MEMZONE_1GB|RTE_MEMZONE_SIZE_HINT_ONLY);
- if (mz == NULL) {
- printf("MEMZONE FLAG 1GB & HINT\n");
- return -1;
- }
- if (mz->hugepage_sz != RTE_PGSIZE_2M) {
- printf("hugepage_sz not equal 2M\n");
- return -1;
- }
-
- mz = rte_memzone_reserve("flag_zone_1G", size, SOCKET_ID_ANY,
- RTE_MEMZONE_1GB);
- if (mz != NULL) {
- printf("MEMZONE FLAG 1GB\n");
- return -1;
- }
- }
- }
-
- /*As with 2MB tests above for 1GB huge page requests*/
- if (hugepage_1GB_avail) {
- mz = rte_memzone_reserve("flag_zone_1G", size, SOCKET_ID_ANY,
- RTE_MEMZONE_1GB);
- if (mz == NULL) {
- printf("MEMZONE FLAG 1GB\n");
- return -1;
- }
- if (mz->hugepage_sz != RTE_PGSIZE_1G) {
- printf("hugepage_sz not equal 1G\n");
- return -1;
- }
-
- mz = rte_memzone_reserve("flag_zone_1G_HINT", size, SOCKET_ID_ANY,
- RTE_MEMZONE_1GB|RTE_MEMZONE_SIZE_HINT_ONLY);
- if (mz == NULL) {
- printf("MEMZONE FLAG 1GB\n");
- return -1;
- }
- if (mz->hugepage_sz != RTE_PGSIZE_1G) {
- printf("hugepage_sz not equal 1G\n");
- return -1;
- }
-
- /* Check if 1GB huge pages are unavailable, that function fails unless
- * HINT flag is indicated
- */
- if (!hugepage_2MB_avail) {
- mz = rte_memzone_reserve("flag_zone_2M_HINT", size, SOCKET_ID_ANY,
- RTE_MEMZONE_2MB|RTE_MEMZONE_SIZE_HINT_ONLY);
- if (mz == NULL){
- printf("MEMZONE FLAG 2MB & HINT\n");
- return -1;
- }
- if (mz->hugepage_sz != RTE_PGSIZE_1G) {
- printf("hugepage_sz not equal 1G\n");
- return -1;
- }
- mz = rte_memzone_reserve("flag_zone_2M", size, SOCKET_ID_ANY,
- RTE_MEMZONE_2MB);
- if (mz != NULL) {
- printf("MEMZONE FLAG 2MB\n");
- return -1;
- }
- }
-
- if (hugepage_2MB_avail && hugepage_1GB_avail) {
- mz = rte_memzone_reserve("flag_zone_2M_HINT", size, SOCKET_ID_ANY,
- RTE_MEMZONE_2MB|RTE_MEMZONE_1GB);
- if (mz != NULL) {
- printf("BOTH SIZES SET\n");
- return -1;
- }
- }
- }
- /*
- * This option is for IBM Power. If 16MB pages available, check
- * that a small memzone is correctly reserved from 16MB huge pages
- * when requested by the RTE_MEMZONE_16MB flag. Also check that
- * RTE_MEMZONE_SIZE_HINT_ONLY flag only defaults to an available
- * page size (i.e 16GB ) when 16MB pages are unavailable.
- */
- if (hugepage_16MB_avail) {
- mz = rte_memzone_reserve("flag_zone_16M", size, SOCKET_ID_ANY,
- RTE_MEMZONE_16MB);
- if (mz == NULL) {
- printf("MEMZONE FLAG 16MB\n");
- return -1;
- }
- if (mz->hugepage_sz != RTE_PGSIZE_16M) {
- printf("hugepage_sz not equal 16M\n");
- return -1;
- }
-
- mz = rte_memzone_reserve("flag_zone_16M_HINT", size,
- SOCKET_ID_ANY, RTE_MEMZONE_16MB|RTE_MEMZONE_SIZE_HINT_ONLY);
- if (mz == NULL) {
- printf("MEMZONE FLAG 2MB\n");
- return -1;
- }
- if (mz->hugepage_sz != RTE_PGSIZE_16M) {
- printf("hugepage_sz not equal 16M\n");
- return -1;
- }
-
- /* Check if 1GB huge pages are unavailable, that function fails
- * unless HINT flag is indicated
- */
- if (!hugepage_16GB_avail) {
- mz = rte_memzone_reserve("flag_zone_16G_HINT", size,
- SOCKET_ID_ANY,
- RTE_MEMZONE_16GB|RTE_MEMZONE_SIZE_HINT_ONLY);
- if (mz == NULL) {
- printf("MEMZONE FLAG 16GB & HINT\n");
- return -1;
- }
- if (mz->hugepage_sz != RTE_PGSIZE_16M) {
- printf("hugepage_sz not equal 16M\n");
- return -1;
- }
-
- mz = rte_memzone_reserve("flag_zone_16G", size,
- SOCKET_ID_ANY, RTE_MEMZONE_16GB);
- if (mz != NULL) {
- printf("MEMZONE FLAG 16GB\n");
- return -1;
- }
- }
- }
- /*As with 16MB tests above for 16GB huge page requests*/
- if (hugepage_16GB_avail) {
- mz = rte_memzone_reserve("flag_zone_16G", size, SOCKET_ID_ANY,
- RTE_MEMZONE_16GB);
- if (mz == NULL) {
- printf("MEMZONE FLAG 16GB\n");
- return -1;
- }
- if (mz->hugepage_sz != RTE_PGSIZE_16G) {
- printf("hugepage_sz not equal 16G\n");
- return -1;
- }
-
- mz = rte_memzone_reserve("flag_zone_16G_HINT", size,
- SOCKET_ID_ANY, RTE_MEMZONE_16GB|RTE_MEMZONE_SIZE_HINT_ONLY);
- if (mz == NULL) {
- printf("MEMZONE FLAG 16GB\n");
- return -1;
- }
- if (mz->hugepage_sz != RTE_PGSIZE_16G) {
- printf("hugepage_sz not equal 16G\n");
- return -1;
- }
-
- /* Check if 1GB huge pages are unavailable, that function fails
- * unless HINT flag is indicated
- */
- if (!hugepage_16MB_avail) {
- mz = rte_memzone_reserve("flag_zone_16M_HINT", size,
- SOCKET_ID_ANY,
- RTE_MEMZONE_16MB|RTE_MEMZONE_SIZE_HINT_ONLY);
- if (mz == NULL) {
- printf("MEMZONE FLAG 16MB & HINT\n");
- return -1;
- }
- if (mz->hugepage_sz != RTE_PGSIZE_16G) {
- printf("hugepage_sz not equal 16G\n");
- return -1;
- }
- mz = rte_memzone_reserve("flag_zone_16M", size,
- SOCKET_ID_ANY, RTE_MEMZONE_16MB);
- if (mz != NULL) {
- printf("MEMZONE FLAG 16MB\n");
- return -1;
- }
- }
-
- if (hugepage_16MB_avail && hugepage_16GB_avail) {
- mz = rte_memzone_reserve("flag_zone_16M_HINT", size,
- SOCKET_ID_ANY,
- RTE_MEMZONE_16MB|RTE_MEMZONE_16GB);
- if (mz != NULL) {
- printf("BOTH SIZES SET\n");
- return -1;
- }
- }
- }
- return 0;
-}
-
-
-/* Find the heap with the greatest free block size */
-static size_t
-find_max_block_free_size(const unsigned _align)
-{
- struct rte_malloc_socket_stats stats;
- unsigned i, align = _align;
- size_t len = 0;
-
- for (i = 0; i < RTE_MAX_NUMA_NODES; i++) {
- rte_malloc_get_socket_stats(i, &stats);
- if (stats.greatest_free_size > len)
- len = stats.greatest_free_size;
- }
-
- if (align < RTE_CACHE_LINE_SIZE)
- align = RTE_CACHE_LINE_ROUNDUP(align+1);
-
- if (len <= MALLOC_ELEM_OVERHEAD + align)
- return 0;
-
- return len - MALLOC_ELEM_OVERHEAD - align;
-}
-
-static int
-test_memzone_reserve_max(void)
-{
- const struct rte_memzone *mz;
- size_t maxlen;
-
- maxlen = find_max_block_free_size(0);
-
- if (maxlen == 0) {
- printf("There is no space left!\n");
- return 0;
- }
-
- mz = rte_memzone_reserve("max_zone", 0, SOCKET_ID_ANY, 0);
- if (mz == NULL){
- printf("Failed to reserve a big chunk of memory - %s\n",
- rte_strerror(rte_errno));
- rte_dump_physmem_layout(stdout);
- rte_memzone_dump(stdout);
- return -1;
- }
-
- if (mz->len != maxlen) {
- printf("Memzone reserve with 0 size did not return bigest block\n");
- printf("Expected size = %zu, actual size = %zu\n", maxlen, mz->len);
- rte_dump_physmem_layout(stdout);
- rte_memzone_dump(stdout);
- return -1;
- }
- return 0;
-}
-
-static int
-test_memzone_reserve_max_aligned(void)
-{
- const struct rte_memzone *mz;
- size_t maxlen = 0;
-
- /* random alignment */
- rte_srand((unsigned)rte_rdtsc());
- const unsigned align = 1 << ((rte_rand() % 8) + 5); /* from 128 up to 4k alignment */
-
- maxlen = find_max_block_free_size(align);
-
- if (maxlen == 0) {
- printf("There is no space left for biggest %u-aligned memzone!\n", align);
- return 0;
- }
-
- mz = rte_memzone_reserve_aligned("max_zone_aligned", 0,
- SOCKET_ID_ANY, 0, align);
- if (mz == NULL){
- printf("Failed to reserve a big chunk of memory - %s\n",
- rte_strerror(rte_errno));
- rte_dump_physmem_layout(stdout);
- rte_memzone_dump(stdout);
- return -1;
- }
-
- if (mz->len != maxlen) {
- printf("Memzone reserve with 0 size and alignment %u did not return"
- " bigest block\n", align);
- printf("Expected size = %zu, actual size = %zu\n",
- maxlen, mz->len);
- rte_dump_physmem_layout(stdout);
- rte_memzone_dump(stdout);
- return -1;
- }
- return 0;
-}
-
-static int
-test_memzone_aligned(void)
-{
- const struct rte_memzone *memzone_aligned_32;
- const struct rte_memzone *memzone_aligned_128;
- const struct rte_memzone *memzone_aligned_256;
- const struct rte_memzone *memzone_aligned_512;
- const struct rte_memzone *memzone_aligned_1024;
-
- /* memzone that should automatically be adjusted to align on 64 bytes */
- memzone_aligned_32 = rte_memzone_reserve_aligned("aligned_32", 100,
- SOCKET_ID_ANY, 0, 32);
-
- /* memzone that is supposed to be aligned on a 128 byte boundary */
- memzone_aligned_128 = rte_memzone_reserve_aligned("aligned_128", 100,
- SOCKET_ID_ANY, 0, 128);
-
- /* memzone that is supposed to be aligned on a 256 byte boundary */
- memzone_aligned_256 = rte_memzone_reserve_aligned("aligned_256", 100,
- SOCKET_ID_ANY, 0, 256);
-
- /* memzone that is supposed to be aligned on a 512 byte boundary */
- memzone_aligned_512 = rte_memzone_reserve_aligned("aligned_512", 100,
- SOCKET_ID_ANY, 0, 512);
-
- /* memzone that is supposed to be aligned on a 1024 byte boundary */
- memzone_aligned_1024 = rte_memzone_reserve_aligned("aligned_1024", 100,
- SOCKET_ID_ANY, 0, 1024);
-
- printf("check alignments and lengths\n");
- if (memzone_aligned_32 == NULL) {
- printf("Unable to reserve 64-byte aligned memzone!\n");
- return -1;
- }
- if ((memzone_aligned_32->phys_addr & RTE_CACHE_LINE_MASK) != 0)
- return -1;
- if (((uintptr_t) memzone_aligned_32->addr & RTE_CACHE_LINE_MASK) != 0)
- return -1;
- if ((memzone_aligned_32->len & RTE_CACHE_LINE_MASK) != 0)
- return -1;
-
- if (memzone_aligned_128 == NULL) {
- printf("Unable to reserve 128-byte aligned memzone!\n");
- return -1;
- }
- if ((memzone_aligned_128->phys_addr & 127) != 0)
- return -1;
- if (((uintptr_t) memzone_aligned_128->addr & 127) != 0)
- return -1;
- if ((memzone_aligned_128->len & RTE_CACHE_LINE_MASK) != 0)
- return -1;
-
- if (memzone_aligned_256 == NULL) {
- printf("Unable to reserve 256-byte aligned memzone!\n");
- return -1;
- }
- if ((memzone_aligned_256->phys_addr & 255) != 0)
- return -1;
- if (((uintptr_t) memzone_aligned_256->addr & 255) != 0)
- return -1;
- if ((memzone_aligned_256->len & RTE_CACHE_LINE_MASK) != 0)
- return -1;
-
- if (memzone_aligned_512 == NULL) {
- printf("Unable to reserve 512-byte aligned memzone!\n");
- return -1;
- }
- if ((memzone_aligned_512->phys_addr & 511) != 0)
- return -1;
- if (((uintptr_t) memzone_aligned_512->addr & 511) != 0)
- return -1;
- if ((memzone_aligned_512->len & RTE_CACHE_LINE_MASK) != 0)
- return -1;
-
- if (memzone_aligned_1024 == NULL) {
- printf("Unable to reserve 1024-byte aligned memzone!\n");
- return -1;
- }
- if ((memzone_aligned_1024->phys_addr & 1023) != 0)
- return -1;
- if (((uintptr_t) memzone_aligned_1024->addr & 1023) != 0)
- return -1;
- if ((memzone_aligned_1024->len & RTE_CACHE_LINE_MASK) != 0)
- return -1;
-
- /* check that zones don't overlap */
- printf("check overlapping\n");
- if (is_memory_overlap(memzone_aligned_32->phys_addr, memzone_aligned_32->len,
- memzone_aligned_128->phys_addr, memzone_aligned_128->len))
- return -1;
- if (is_memory_overlap(memzone_aligned_32->phys_addr, memzone_aligned_32->len,
- memzone_aligned_256->phys_addr, memzone_aligned_256->len))
- return -1;
- if (is_memory_overlap(memzone_aligned_32->phys_addr, memzone_aligned_32->len,
- memzone_aligned_512->phys_addr, memzone_aligned_512->len))
- return -1;
- if (is_memory_overlap(memzone_aligned_32->phys_addr, memzone_aligned_32->len,
- memzone_aligned_1024->phys_addr, memzone_aligned_1024->len))
- return -1;
- if (is_memory_overlap(memzone_aligned_128->phys_addr, memzone_aligned_128->len,
- memzone_aligned_256->phys_addr, memzone_aligned_256->len))
- return -1;
- if (is_memory_overlap(memzone_aligned_128->phys_addr, memzone_aligned_128->len,
- memzone_aligned_512->phys_addr, memzone_aligned_512->len))
- return -1;
- if (is_memory_overlap(memzone_aligned_128->phys_addr, memzone_aligned_128->len,
- memzone_aligned_1024->phys_addr, memzone_aligned_1024->len))
- return -1;
- if (is_memory_overlap(memzone_aligned_256->phys_addr, memzone_aligned_256->len,
- memzone_aligned_512->phys_addr, memzone_aligned_512->len))
- return -1;
- if (is_memory_overlap(memzone_aligned_256->phys_addr, memzone_aligned_256->len,
- memzone_aligned_1024->phys_addr, memzone_aligned_1024->len))
- return -1;
- if (is_memory_overlap(memzone_aligned_512->phys_addr, memzone_aligned_512->len,
- memzone_aligned_1024->phys_addr, memzone_aligned_1024->len))
- return -1;
- return 0;
-}
-
-static int
-check_memzone_bounded(const char *name, uint32_t len, uint32_t align,
- uint32_t bound)
-{
- const struct rte_memzone *mz;
- phys_addr_t bmask;
-
- bmask = ~((phys_addr_t)bound - 1);
-
- if ((mz = rte_memzone_reserve_bounded(name, len, SOCKET_ID_ANY, 0,
- align, bound)) == NULL) {
- printf("%s(%s): memzone creation failed\n",
- __func__, name);
- return -1;
- }
-
- if ((mz->phys_addr & ((phys_addr_t)align - 1)) != 0) {
- printf("%s(%s): invalid phys addr alignment\n",
- __func__, mz->name);
- return -1;
- }
-
- if (((uintptr_t) mz->addr & ((uintptr_t)align - 1)) != 0) {
- printf("%s(%s): invalid virtual addr alignment\n",
- __func__, mz->name);
- return -1;
- }
-
- if ((mz->len & RTE_CACHE_LINE_MASK) != 0 || mz->len < len ||
- mz->len < RTE_CACHE_LINE_SIZE) {
- printf("%s(%s): invalid length\n",
- __func__, mz->name);
- return -1;
- }
-
- if ((mz->phys_addr & bmask) !=
- ((mz->phys_addr + mz->len - 1) & bmask)) {
- printf("%s(%s): invalid memzone boundary %u crossed\n",
- __func__, mz->name, bound);
- return -1;
- }
-
- return 0;
-}
-
-static int
-test_memzone_bounded(void)
-{
- const struct rte_memzone *memzone_err;
- const char *name;
- int rc;
-
- /* should fail as boundary is not power of two */
- name = "bounded_error_31";
- if ((memzone_err = rte_memzone_reserve_bounded(name,
- 100, SOCKET_ID_ANY, 0, 32, UINT32_MAX)) != NULL) {
- printf("%s(%s)created a memzone with invalid boundary "
- "conditions\n", __func__, memzone_err->name);
- return -1;
- }
-
- /* should fail as len is greater then boundary */
- name = "bounded_error_32";
- if ((memzone_err = rte_memzone_reserve_bounded(name,
- 100, SOCKET_ID_ANY, 0, 32, 32)) != NULL) {
- printf("%s(%s)created a memzone with invalid boundary "
- "conditions\n", __func__, memzone_err->name);
- return -1;
- }
-
- if ((rc = check_memzone_bounded("bounded_128", 100, 128, 128)) != 0)
- return rc;
-
- if ((rc = check_memzone_bounded("bounded_256", 100, 256, 128)) != 0)
- return rc;
-
- if ((rc = check_memzone_bounded("bounded_1K", 100, 64, 1024)) != 0)
- return rc;
-
- if ((rc = check_memzone_bounded("bounded_1K_MAX", 0, 64, 1024)) != 0)
- return rc;
-
- return 0;
-}
-
-static int
-test_memzone_free(void)
-{
- const struct rte_memzone *mz[RTE_MAX_MEMZONE];
- int i;
- char name[20];
-
- mz[0] = rte_memzone_reserve("tempzone0", 2000, SOCKET_ID_ANY, 0);
- mz[1] = rte_memzone_reserve("tempzone1", 4000, SOCKET_ID_ANY, 0);
-
- if (mz[0] > mz[1])
- return -1;
- if (!rte_memzone_lookup("tempzone0"))
- return -1;
- if (!rte_memzone_lookup("tempzone1"))
- return -1;
-
- if (rte_memzone_free(mz[0])) {
- printf("Fail memzone free - tempzone0\n");
- return -1;
- }
- if (rte_memzone_lookup("tempzone0")) {
- printf("Found previously free memzone - tempzone0\n");
- return -1;
- }
- mz[2] = rte_memzone_reserve("tempzone2", 2000, SOCKET_ID_ANY, 0);
-
- if (mz[2] > mz[1]) {
- printf("tempzone2 should have gotten the free entry from tempzone0\n");
- return -1;
- }
- if (rte_memzone_free(mz[2])) {
- printf("Fail memzone free - tempzone2\n");
- return -1;
- }
- if (rte_memzone_lookup("tempzone2")) {
- printf("Found previously free memzone - tempzone2\n");
- return -1;
- }
- if (rte_memzone_free(mz[1])) {
- printf("Fail memzone free - tempzone1\n");
- return -1;
- }
- if (rte_memzone_lookup("tempzone1")) {
- printf("Found previously free memzone - tempzone1\n");
- return -1;
- }
-
- i = 0;
- do {
- snprintf(name, sizeof(name), "tempzone%u", i);
- mz[i] = rte_memzone_reserve(name, 1, SOCKET_ID_ANY, 0);
- } while (mz[i++] != NULL);
-
- if (rte_memzone_free(mz[0])) {
- printf("Fail memzone free - tempzone0\n");
- return -1;
- }
- mz[0] = rte_memzone_reserve("tempzone0new", 0, SOCKET_ID_ANY, 0);
-
- if (mz[0] == NULL) {
- printf("Fail to create memzone - tempzone0new - when MAX memzones were "
- "created and one was free\n");
- return -1;
- }
-
- for (i = i - 2; i >= 0; i--) {
- if (rte_memzone_free(mz[i])) {
- printf("Fail memzone free - tempzone%d\n", i);
- return -1;
- }
- }
-
- return 0;
-}
-
-static int
-test_memzone(void)
-{
- const struct rte_memzone *memzone1;
- const struct rte_memzone *memzone2;
- const struct rte_memzone *memzone3;
- const struct rte_memzone *memzone4;
- const struct rte_memzone *mz;
-
- memzone1 = rte_memzone_reserve("testzone1", 100,
- SOCKET_ID_ANY, 0);
-
- memzone2 = rte_memzone_reserve("testzone2", 1000,
- 0, 0);
-
- memzone3 = rte_memzone_reserve("testzone3", 1000,
- 1, 0);
-
- memzone4 = rte_memzone_reserve("testzone4", 1024,
- SOCKET_ID_ANY, 0);
-
- /* memzone3 may be NULL if we don't have NUMA */
- if (memzone1 == NULL || memzone2 == NULL || memzone4 == NULL)
- return -1;
-
- rte_memzone_dump(stdout);
-
- /* check cache-line alignments */
- printf("check alignments and lengths\n");
-
- if ((memzone1->phys_addr & RTE_CACHE_LINE_MASK) != 0)
- return -1;
- if ((memzone2->phys_addr & RTE_CACHE_LINE_MASK) != 0)
- return -1;
- if (memzone3 != NULL && (memzone3->phys_addr & RTE_CACHE_LINE_MASK) != 0)
- return -1;
- if ((memzone1->len & RTE_CACHE_LINE_MASK) != 0 || memzone1->len == 0)
- return -1;
- if ((memzone2->len & RTE_CACHE_LINE_MASK) != 0 || memzone2->len == 0)
- return -1;
- if (memzone3 != NULL && ((memzone3->len & RTE_CACHE_LINE_MASK) != 0 ||
- memzone3->len == 0))
- return -1;
- if (memzone4->len != 1024)
- return -1;
-
- /* check that zones don't overlap */
- printf("check overlapping\n");
-
- if (is_memory_overlap(memzone1->phys_addr, memzone1->len,
- memzone2->phys_addr, memzone2->len))
- return -1;
- if (memzone3 != NULL &&
- is_memory_overlap(memzone1->phys_addr, memzone1->len,
- memzone3->phys_addr, memzone3->len))
- return -1;
- if (memzone3 != NULL &&
- is_memory_overlap(memzone2->phys_addr, memzone2->len,
- memzone3->phys_addr, memzone3->len))
- return -1;
-
- printf("check socket ID\n");
-
- /* memzone2 must be on socket id 0 and memzone3 on socket 1 */
- if (memzone2->socket_id != 0)
- return -1;
- if (memzone3 != NULL && memzone3->socket_id != 1)
- return -1;
-
- printf("test zone lookup\n");
- mz = rte_memzone_lookup("testzone1");
- if (mz != memzone1)
- return -1;
-
- printf("test duplcate zone name\n");
- mz = rte_memzone_reserve("testzone1", 100,
- SOCKET_ID_ANY, 0);
- if (mz != NULL)
- return -1;
-
- printf("test free memzone\n");
- if (test_memzone_free() < 0)
- return -1;
-
- printf("test reserving memzone with bigger size than the maximum\n");
- if (test_memzone_reserving_zone_size_bigger_than_the_maximum() < 0)
- return -1;
-
- printf("test memzone_reserve flags\n");
- if (test_memzone_reserve_flags() < 0)
- return -1;
-
- printf("test alignment for memzone_reserve\n");
- if (test_memzone_aligned() < 0)
- return -1;
-
- printf("test boundary alignment for memzone_reserve\n");
- if (test_memzone_bounded() < 0)
- return -1;
-
- printf("test invalid alignment for memzone_reserve\n");
- if (test_memzone_invalid_alignment() < 0)
- return -1;
-
- printf("test reserving the largest size memzone possible\n");
- if (test_memzone_reserve_max() < 0)
- return -1;
-
- printf("test reserving the largest size aligned memzone possible\n");
- if (test_memzone_reserve_max_aligned() < 0)
- return -1;
-
- return 0;
-}
-
-REGISTER_TEST_COMMAND(memzone_autotest, test_memzone);
diff --git a/app/test/test_meter.c b/app/test/test_meter.c
deleted file mode 100644
index 26b05657..00000000
--- a/app/test/test_meter.c
+++ /dev/null
@@ -1,497 +0,0 @@
-/*-
- * BSD LICENSE
- *
- * Copyright(c) 2010-2014 Intel Corporation. All rights reserved.
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * * Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * * Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in
- * the documentation and/or other materials provided with the
- * distribution.
- * * Neither the name of Intel Corporation nor the names of its
- * contributors may be used to endorse or promote products derived
- * from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
- * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
- * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#include <stdlib.h>
-#include <stdio.h>
-#include <string.h>
-#include <stdint.h>
-#include <unistd.h>
-
-#include "test.h"
-
-#include <rte_cycles.h>
-#include <rte_meter.h>
-
-#define mlog(format, ...) do{\
- printf("Line %d:",__LINE__);\
- printf(format, ##__VA_ARGS__);\
- printf("\n");\
- }while(0);
-
-#define melog(format, ...) do{\
- printf("Line %d:",__LINE__);\
- printf(format, ##__VA_ARGS__);\
- printf(" failed!\n");\
- return -1;\
- }while(0);
-
-#define TM_TEST_SRTCM_CIR_DF 46000000
-#define TM_TEST_SRTCM_CBS_DF 2048
-#define TM_TEST_SRTCM_EBS_DF 4096
-
-#define TM_TEST_TRTCM_CIR_DF 46000000
-#define TM_TEST_TRTCM_PIR_DF 69000000
-#define TM_TEST_TRTCM_CBS_DF 2048
-#define TM_TEST_TRTCM_PBS_DF 4096
-
-static struct rte_meter_srtcm_params sparams =
- {.cir = TM_TEST_SRTCM_CIR_DF,
- .cbs = TM_TEST_SRTCM_CBS_DF,
- .ebs = TM_TEST_SRTCM_EBS_DF,};
-
-static struct rte_meter_trtcm_params tparams=
- {.cir = TM_TEST_TRTCM_CIR_DF,
- .pir = TM_TEST_TRTCM_PIR_DF,
- .cbs = TM_TEST_TRTCM_CBS_DF,
- .pbs = TM_TEST_TRTCM_PBS_DF,};
-
-/**
- * functional test for rte_meter_srtcm_config
- */
-static inline int
-tm_test_srtcm_config(void)
-{
-#define SRTCM_CFG_MSG "srtcm_config"
- struct rte_meter_srtcm sm;
- struct rte_meter_srtcm_params sparams1;
-
- /* invalid parameter test */
- if(rte_meter_srtcm_config(NULL, NULL) == 0)
- melog(SRTCM_CFG_MSG);
- if(rte_meter_srtcm_config(&sm, NULL) == 0)
- melog(SRTCM_CFG_MSG);
- if(rte_meter_srtcm_config(NULL, &sparams) == 0)
- melog(SRTCM_CFG_MSG);
-
- /* cbs and ebs can't both be zero */
- sparams1 = sparams;
- sparams1.cbs = 0;
- sparams1.ebs = 0;
- if(rte_meter_srtcm_config(&sm, &sparams1) == 0)
- melog(SRTCM_CFG_MSG);
-
- /* cir should never be 0 */
- sparams1 = sparams;
- sparams1.cir = 0;
- if(rte_meter_srtcm_config(&sm, &sparams1) == 0)
- melog(SRTCM_CFG_MSG);
-
- /* one of ebs and cbs can be zero, should be successful */
- sparams1 = sparams;
- sparams1.ebs = 0;
- if(rte_meter_srtcm_config(&sm, &sparams1) != 0)
- melog(SRTCM_CFG_MSG);
-
- sparams1 = sparams;
- sparams1.cbs = 0;
- if(rte_meter_srtcm_config(&sm, &sparams1) != 0)
- melog(SRTCM_CFG_MSG);
-
- /* usual parameter, should be successful */
- if(rte_meter_srtcm_config(&sm, &sparams) != 0)
- melog(SRTCM_CFG_MSG);
-
- return 0;
-
-}
-
-/**
- * functional test for rte_meter_trtcm_config
- */
-static inline int
-tm_test_trtcm_config(void)
-{
- struct rte_meter_trtcm tm;
- struct rte_meter_trtcm_params tparams1;
-#define TRTCM_CFG_MSG "trtcm_config"
-
- /* invalid parameter test */
- if(rte_meter_trtcm_config(NULL, NULL) == 0)
- melog(TRTCM_CFG_MSG);
- if(rte_meter_trtcm_config(&tm, NULL) == 0)
- melog(TRTCM_CFG_MSG);
- if(rte_meter_trtcm_config(NULL, &tparams) == 0)
- melog(TRTCM_CFG_MSG);
-
- /* cir, cbs, pir and pbs never be zero */
- tparams1 = tparams;
- tparams1.cir = 0;
- if(rte_meter_trtcm_config(&tm, &tparams1) == 0)
- melog(TRTCM_CFG_MSG);
-
- tparams1 = tparams;
- tparams1.cbs = 0;
- if(rte_meter_trtcm_config(&tm, &tparams1) == 0)
- melog(TRTCM_CFG_MSG);
-
- tparams1 = tparams;
- tparams1.pbs = 0;
- if(rte_meter_trtcm_config(&tm, &tparams1) == 0)
- melog(TRTCM_CFG_MSG);
-
- tparams1 = tparams;
- tparams1.pir = 0;
- if(rte_meter_trtcm_config(&tm, &tparams1) == 0)
- melog(TRTCM_CFG_MSG);
-
- /* pir should be greater or equal to cir */
- tparams1 = tparams;
- tparams1.pir = tparams1.cir - 1;
- if(rte_meter_trtcm_config(&tm, &tparams1) == 0)
- melog(TRTCM_CFG_MSG" pir < cir test");
-
- /* usual parameter, should be successful */
- if(rte_meter_trtcm_config(&tm, &tparams) != 0)
- melog(TRTCM_CFG_MSG);
-
- return 0;
-}
-
-/**
- * functional test for rte_meter_srtcm_color_blind_check
- */
-static inline int
-tm_test_srtcm_color_blind_check(void)
-{
-#define SRTCM_BLIND_CHECK_MSG "srtcm_blind_check"
- struct rte_meter_srtcm sm;
- uint64_t time;
- uint64_t hz = rte_get_tsc_hz();
-
- /* Test green */
- if(rte_meter_srtcm_config(&sm, &sparams) != 0)
- melog(SRTCM_BLIND_CHECK_MSG);
- time = rte_get_tsc_cycles() + hz;
- if(rte_meter_srtcm_color_blind_check(
- &sm, time, TM_TEST_SRTCM_CBS_DF - 1)
- != e_RTE_METER_GREEN)
- melog(SRTCM_BLIND_CHECK_MSG" GREEN");
-
- /* Test yellow */
- if(rte_meter_srtcm_config(&sm, &sparams) != 0)
- melog(SRTCM_BLIND_CHECK_MSG);
- time = rte_get_tsc_cycles() + hz;
- if(rte_meter_srtcm_color_blind_check(
- &sm, time, TM_TEST_SRTCM_CBS_DF + 1)
- != e_RTE_METER_YELLOW)
- melog(SRTCM_BLIND_CHECK_MSG" YELLOW");
-
- if(rte_meter_srtcm_config(&sm, &sparams) != 0)
- melog(SRTCM_BLIND_CHECK_MSG);
- time = rte_get_tsc_cycles() + hz;
- if(rte_meter_srtcm_color_blind_check(
- &sm, time, (uint32_t)sm.ebs - 1) != e_RTE_METER_YELLOW)
- melog(SRTCM_BLIND_CHECK_MSG" YELLOW");
-
- /* Test red */
- if(rte_meter_srtcm_config(&sm, &sparams) != 0)
- melog(SRTCM_BLIND_CHECK_MSG);
- time = rte_get_tsc_cycles() + hz;
- if(rte_meter_srtcm_color_blind_check(
- &sm, time, TM_TEST_SRTCM_EBS_DF + 1)
- != e_RTE_METER_RED)
- melog(SRTCM_BLIND_CHECK_MSG" RED");
-
- return 0;
-
-}
-
-/**
- * functional test for rte_meter_trtcm_color_blind_check
- */
-static inline int
-tm_test_trtcm_color_blind_check(void)
-{
-#define TRTCM_BLIND_CHECK_MSG "trtcm_blind_check"
-
- uint64_t time;
- struct rte_meter_trtcm tm;
- uint64_t hz = rte_get_tsc_hz();
-
- /* Test green */
- if(rte_meter_trtcm_config(&tm, &tparams) != 0)
- melog(TRTCM_BLIND_CHECK_MSG);
- time = rte_get_tsc_cycles() + hz;
- if(rte_meter_trtcm_color_blind_check(
- &tm, time, TM_TEST_TRTCM_CBS_DF - 1)
- != e_RTE_METER_GREEN)
- melog(TRTCM_BLIND_CHECK_MSG" GREEN");
-
- /* Test yellow */
- if(rte_meter_trtcm_config(&tm, &tparams) != 0)
- melog(TRTCM_BLIND_CHECK_MSG);
- time = rte_get_tsc_cycles() + hz;
- if(rte_meter_trtcm_color_blind_check(
- &tm, time, TM_TEST_TRTCM_CBS_DF + 1)
- != e_RTE_METER_YELLOW)
- melog(TRTCM_BLIND_CHECK_MSG" YELLOW");
-
- if(rte_meter_trtcm_config(&tm, &tparams) != 0)
- melog(TRTCM_BLIND_CHECK_MSG);
- time = rte_get_tsc_cycles() + hz;
- if(rte_meter_trtcm_color_blind_check(
- &tm, time, TM_TEST_TRTCM_PBS_DF - 1)
- != e_RTE_METER_YELLOW)
- melog(TRTCM_BLIND_CHECK_MSG" YELLOW");
-
- /* Test red */
- if(rte_meter_trtcm_config(&tm, &tparams) != 0)
- melog(TRTCM_BLIND_CHECK_MSG);
- time = rte_get_tsc_cycles() + hz;
- if(rte_meter_trtcm_color_blind_check(
- &tm, time, TM_TEST_TRTCM_PBS_DF + 1)
- != e_RTE_METER_RED)
- melog(TRTCM_BLIND_CHECK_MSG" RED");
-
- return 0;
-}
-
-
-/**
- * @in[4] : the flags packets carries.
- * @in[4] : the flags function expect to return.
- * It will do blind check at the time of 1 second from beginning.
- * At the time, it will use packets length of cbs -1, cbs + 1,
- * ebs -1 and ebs +1 with flag in[0], in[1], in[2] and in[3] to do
- * aware check, expect flag out[0], out[1], out[2] and out[3]
- */
-
-static inline int
-tm_test_srtcm_aware_check
-(enum rte_meter_color in[4], enum rte_meter_color out[4])
-{
-#define SRTCM_AWARE_CHECK_MSG "srtcm_aware_check"
- struct rte_meter_srtcm sm;
- uint64_t time;
- uint64_t hz = rte_get_tsc_hz();
-
- if(rte_meter_srtcm_config(&sm, &sparams) != 0)
- melog(SRTCM_AWARE_CHECK_MSG);
- time = rte_get_tsc_cycles() + hz;
- if(rte_meter_srtcm_color_aware_check(
- &sm, time, TM_TEST_SRTCM_CBS_DF - 1, in[0]) != out[0])
- melog(SRTCM_AWARE_CHECK_MSG" %u:%u", in[0], out[0]);
-
- if(rte_meter_srtcm_config(&sm, &sparams) != 0)
- melog(SRTCM_AWARE_CHECK_MSG);
- time = rte_get_tsc_cycles() + hz;
- if(rte_meter_srtcm_color_aware_check(
- &sm, time, TM_TEST_SRTCM_CBS_DF + 1, in[1]) != out[1])
- melog(SRTCM_AWARE_CHECK_MSG" %u:%u", in[1], out[1]);
-
- if(rte_meter_srtcm_config(&sm, &sparams) != 0)
- melog(SRTCM_AWARE_CHECK_MSG);
- time = rte_get_tsc_cycles() + hz;
- if(rte_meter_srtcm_color_aware_check(
- &sm, time, TM_TEST_SRTCM_EBS_DF - 1, in[2]) != out[2])
- melog(SRTCM_AWARE_CHECK_MSG" %u:%u", in[2], out[2]);
-
- if(rte_meter_srtcm_config(&sm, &sparams) != 0)
- melog(SRTCM_AWARE_CHECK_MSG);
- time = rte_get_tsc_cycles() + hz;
- if(rte_meter_srtcm_color_aware_check(
- &sm, time, TM_TEST_SRTCM_EBS_DF + 1, in[3]) != out[3])
- melog(SRTCM_AWARE_CHECK_MSG" %u:%u", in[3], out[3]);
-
- return 0;
-}
-
-
-/**
- * functional test for rte_meter_srtcm_color_aware_check
- */
-static inline int
-tm_test_srtcm_color_aware_check(void)
-{
- enum rte_meter_color in[4], out[4];
-
- /**
- * test 4 points that will produce green, yellow, yellow, red flag
- * if using blind check
- */
-
- /* previouly have a green, test points should keep unchanged */
- in[0] = in[1] = in[2] = in[3] = e_RTE_METER_GREEN;
- out[0] = e_RTE_METER_GREEN;
- out[1] = e_RTE_METER_YELLOW;
- out[2] = e_RTE_METER_YELLOW;
- out[3] = e_RTE_METER_RED;
- if(tm_test_srtcm_aware_check(in, out) != 0)
- return -1;
-
- /**
- * previously have a yellow, green & yellow = yellow
- * yellow & red = red
- */
- in[0] = in[1] = in[2] = in[3] = e_RTE_METER_YELLOW;
- out[0] = e_RTE_METER_YELLOW;
- out[1] = e_RTE_METER_YELLOW;
- out[2] = e_RTE_METER_YELLOW;
- out[3] = e_RTE_METER_RED;
- if(tm_test_srtcm_aware_check(in, out) != 0)
- return -1;
-
- /**
- * previously have a red, red & green = red
- * red & yellow = red
- */
- in[0] = in[1] = in[2] = in[3] = e_RTE_METER_RED;
- out[0] = e_RTE_METER_RED;
- out[1] = e_RTE_METER_RED;
- out[2] = e_RTE_METER_RED;
- out[3] = e_RTE_METER_RED;
- if(tm_test_srtcm_aware_check(in, out) != 0)
- return -1;
-
- return 0;
-}
-
-/**
- * @in[4] : the flags packets carries.
- * @in[4] : the flags function expect to return.
- * It will do blind check at the time of 1 second from beginning.
- * At the time, it will use packets length of cbs -1, cbs + 1,
- * ebs -1 and ebs +1 with flag in[0], in[1], in[2] and in[3] to do
- * aware check, expect flag out[0], out[1], out[2] and out[3]
- */
-static inline int
-tm_test_trtcm_aware_check
-(enum rte_meter_color in[4], enum rte_meter_color out[4])
-{
-#define TRTCM_AWARE_CHECK_MSG "trtcm_aware_check"
- struct rte_meter_trtcm tm;
- uint64_t time;
- uint64_t hz = rte_get_tsc_hz();
-
- if(rte_meter_trtcm_config(&tm, &tparams) != 0)
- melog(TRTCM_AWARE_CHECK_MSG);
- time = rte_get_tsc_cycles() + hz;
- if(rte_meter_trtcm_color_aware_check(
- &tm, time, TM_TEST_TRTCM_CBS_DF - 1, in[0]) != out[0])
- melog(TRTCM_AWARE_CHECK_MSG" %u:%u", in[0], out[0]);
-
- if(rte_meter_trtcm_config(&tm, &tparams) != 0)
- melog(TRTCM_AWARE_CHECK_MSG);
- time = rte_get_tsc_cycles() + hz;
- if(rte_meter_trtcm_color_aware_check(
- &tm, time, TM_TEST_TRTCM_CBS_DF + 1, in[1]) != out[1])
- melog(TRTCM_AWARE_CHECK_MSG" %u:%u", in[1], out[1]);
-
- if(rte_meter_trtcm_config(&tm, &tparams) != 0)
- melog(TRTCM_AWARE_CHECK_MSG);
- time = rte_get_tsc_cycles() + hz;
- if(rte_meter_trtcm_color_aware_check(
- &tm, time, TM_TEST_TRTCM_PBS_DF - 1, in[2]) != out[2])
- melog(TRTCM_AWARE_CHECK_MSG" %u:%u", in[2], out[2]);
-
- if(rte_meter_trtcm_config(&tm, &tparams) != 0)
- melog(TRTCM_AWARE_CHECK_MSG);
- time = rte_get_tsc_cycles() + hz;
- if(rte_meter_trtcm_color_aware_check(
- &tm, time, TM_TEST_TRTCM_PBS_DF + 1, in[3]) != out[3])
- melog(TRTCM_AWARE_CHECK_MSG" %u:%u", in[3], out[3]);
-
- return 0;
-}
-
-
-/**
- * functional test for rte_meter_trtcm_color_aware_check
- */
-
-static inline int
-tm_test_trtcm_color_aware_check(void)
-{
- enum rte_meter_color in[4], out[4];
- /**
- * test 4 points that will produce green, yellow, yellow, red flag
- * if using blind check
- */
-
- /* previouly have a green, test points should keep unchanged */
- in[0] = in[1] = in[2] = in[3] = e_RTE_METER_GREEN;
- out[0] = e_RTE_METER_GREEN;
- out[1] = e_RTE_METER_YELLOW;
- out[2] = e_RTE_METER_YELLOW;
- out[3] = e_RTE_METER_RED;
- if(tm_test_trtcm_aware_check(in, out) != 0)
- return -1;
-
- in[0] = in[1] = in[2] = in[3] = e_RTE_METER_YELLOW;
- out[0] = e_RTE_METER_YELLOW;
- out[1] = e_RTE_METER_YELLOW;
- out[2] = e_RTE_METER_YELLOW;
- out[3] = e_RTE_METER_RED;
- if(tm_test_trtcm_aware_check(in, out) != 0)
- return -1;
-
- in[0] = in[1] = in[2] = in[3] = e_RTE_METER_RED;
- out[0] = e_RTE_METER_RED;
- out[1] = e_RTE_METER_RED;
- out[2] = e_RTE_METER_RED;
- out[3] = e_RTE_METER_RED;
- if(tm_test_trtcm_aware_check(in, out) != 0)
- return -1;
-
- return 0;
-}
-
-/**
- * test main entrance for library meter
- */
-static int
-test_meter(void)
-{
- if(tm_test_srtcm_config() != 0 )
- return -1;
-
- if(tm_test_trtcm_config() != 0 )
- return -1;
-
- if(tm_test_srtcm_color_blind_check() != 0)
- return -1;
-
- if(tm_test_trtcm_color_blind_check()!= 0)
- return -1;
-
- if(tm_test_srtcm_color_aware_check()!= 0)
- return -1;
-
- if(tm_test_trtcm_color_aware_check()!= 0)
- return -1;
-
- return 0;
-
-}
-
-REGISTER_TEST_COMMAND(meter_autotest, test_meter);
diff --git a/app/test/test_mp_secondary.c b/app/test/test_mp_secondary.c
deleted file mode 100644
index 26c4afd6..00000000
--- a/app/test/test_mp_secondary.c
+++ /dev/null
@@ -1,285 +0,0 @@
-/*-
- * BSD LICENSE
- *
- * Copyright(c) 2010-2014 Intel Corporation. All rights reserved.
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * * Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * * Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in
- * the documentation and/or other materials provided with the
- * distribution.
- * * Neither the name of Intel Corporation nor the names of its
- * contributors may be used to endorse or promote products derived
- * from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
- * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
- * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#include <stdio.h>
-
-#include "test.h"
-
-#include <stdint.h>
-#include <stdlib.h>
-#include <stdarg.h>
-#include <inttypes.h>
-#include <sys/queue.h>
-#include <errno.h>
-#include <stdarg.h>
-#include <inttypes.h>
-#include <string.h>
-#include <stdlib.h>
-#include <stdarg.h>
-#include <unistd.h>
-#include <sys/wait.h>
-#include <libgen.h>
-#include <dirent.h>
-#include <limits.h>
-
-#include <rte_common.h>
-#include <rte_memory.h>
-#include <rte_memzone.h>
-#include <rte_eal.h>
-#include <rte_launch.h>
-#include <rte_per_lcore.h>
-#include <rte_lcore.h>
-#include <rte_errno.h>
-#include <rte_branch_prediction.h>
-#include <rte_atomic.h>
-#include <rte_ring.h>
-#include <rte_debug.h>
-#include <rte_log.h>
-#include <rte_mempool.h>
-
-#ifdef RTE_LIBRTE_HASH
-#include <rte_hash.h>
-#include <rte_fbk_hash.h>
-#endif /* RTE_LIBRTE_HASH */
-
-#ifdef RTE_LIBRTE_LPM
-#include <rte_lpm.h>
-#endif /* RTE_LIBRTE_LPM */
-
-#include <rte_string_fns.h>
-
-#include "process.h"
-
-#define launch_proc(ARGV) process_dup(ARGV, \
- sizeof(ARGV)/(sizeof(ARGV[0])), __func__)
-
-#ifdef RTE_EXEC_ENV_LINUXAPP
-static char*
-get_current_prefix(char * prefix, int size)
-{
- char path[PATH_MAX] = {0};
- char buf[PATH_MAX] = {0};
-
- /* get file for config (fd is always 3) */
- snprintf(path, sizeof(path), "/proc/self/fd/%d", 3);
-
- /* return NULL on error */
- if (readlink(path, buf, sizeof(buf)) == -1)
- return NULL;
-
- /* get the basename */
- snprintf(buf, sizeof(buf), "%s", basename(buf));
-
- /* copy string all the way from second char up to start of _config */
- snprintf(prefix, size, "%.*s",
- (int)(strnlen(buf, sizeof(buf)) - sizeof("_config")),
- &buf[1]);
-
- return prefix;
-}
-#endif
-
-/*
- * This function is called in the primary i.e. main test, to spawn off secondary
- * processes to run actual mp tests. Uses fork() and exec pair
- */
-static int
-run_secondary_instances(void)
-{
- int ret = 0;
- char coremask[10];
-
-#ifdef RTE_EXEC_ENV_LINUXAPP
- char tmp[PATH_MAX] = {0};
- char prefix[PATH_MAX] = {0};
-
- get_current_prefix(tmp, sizeof(tmp));
-
- snprintf(prefix, sizeof(prefix), "--file-prefix=%s", tmp);
-#else
- const char *prefix = "";
-#endif
-
- /* good case, using secondary */
- const char *argv1[] = {
- prgname, "-c", coremask, "--proc-type=secondary",
- prefix
- };
- /* good case, using auto */
- const char *argv2[] = {
- prgname, "-c", coremask, "--proc-type=auto",
- prefix
- };
- /* bad case, using invalid type */
- const char *argv3[] = {
- prgname, "-c", coremask, "--proc-type=ERROR",
- prefix
- };
-#ifdef RTE_EXEC_ENV_LINUXAPP
- /* bad case, using invalid file prefix */
- const char *argv4[] = {
- prgname, "-c", coremask, "--proc-type=secondary",
- "--file-prefix=ERROR"
- };
-#endif
-
- snprintf(coremask, sizeof(coremask), "%x", \
- (1 << rte_get_master_lcore()));
-
- ret |= launch_proc(argv1);
- ret |= launch_proc(argv2);
-
- ret |= !(launch_proc(argv3));
-#ifdef RTE_EXEC_ENV_LINUXAPP
- ret |= !(launch_proc(argv4));
-#endif
-
- return ret;
-}
-
-/*
- * This function is run in the secondary instance to test that creation of
- * objects fails in a secondary
- */
-static int
-run_object_creation_tests(void)
-{
- const unsigned flags = 0;
- const unsigned size = 1024;
- const unsigned elt_size = 64;
- const unsigned cache_size = 64;
- const unsigned priv_data_size = 32;
-
- printf("### Testing object creation - expect lots of mz reserve errors!\n");
-
- rte_errno = 0;
- if ((rte_memzone_reserve("test_mz", size, rte_socket_id(),
- flags) == NULL) &&
- (rte_memzone_lookup("test_mz") == NULL)) {
- printf("Error: unexpected return value from rte_memzone_reserve\n");
- return -1;
- }
- printf("# Checked rte_memzone_reserve() OK\n");
-
- rte_errno = 0;
- if ((rte_ring_create(
- "test_ring", size, rte_socket_id(), flags) == NULL) &&
- (rte_ring_lookup("test_ring") == NULL)){
- printf("Error: unexpected return value from rte_ring_create()\n");
- return -1;
- }
- printf("# Checked rte_ring_create() OK\n");
-
- rte_errno = 0;
- if ((rte_mempool_create("test_mp", size, elt_size, cache_size,
- priv_data_size, NULL, NULL, NULL, NULL,
- rte_socket_id(), flags) == NULL) &&
- (rte_mempool_lookup("test_mp") == NULL)){
- printf("Error: unexpected return value from rte_mempool_create()\n");
- return -1;
- }
- printf("# Checked rte_mempool_create() OK\n");
-
-#ifdef RTE_LIBRTE_HASH
- const struct rte_hash_parameters hash_params = { .name = "test_mp_hash" };
- rte_errno=0;
- if ((rte_hash_create(&hash_params) != NULL) &&
- (rte_hash_find_existing(hash_params.name) == NULL)){
- printf("Error: unexpected return value from rte_hash_create()\n");
- return -1;
- }
- printf("# Checked rte_hash_create() OK\n");
-
- const struct rte_fbk_hash_params fbk_params = { .name = "test_fbk_mp_hash" };
- rte_errno=0;
- if ((rte_fbk_hash_create(&fbk_params) != NULL) &&
- (rte_fbk_hash_find_existing(fbk_params.name) == NULL)){
- printf("Error: unexpected return value from rte_fbk_hash_create()\n");
- return -1;
- }
- printf("# Checked rte_fbk_hash_create() OK\n");
-#endif
-
-#ifdef RTE_LIBRTE_LPM
- rte_errno=0;
- struct rte_lpm_config config;
-
- config.max_rules = rte_socket_id();
- config.number_tbl8s = 256;
- config.flags = 0;
- if ((rte_lpm_create("test_lpm", size, &config) != NULL) &&
- (rte_lpm_find_existing("test_lpm") == NULL)){
- printf("Error: unexpected return value from rte_lpm_create()\n");
- return -1;
- }
- printf("# Checked rte_lpm_create() OK\n");
-#endif
-
-#ifdef RTE_APP_TEST_RESOURCE_TAR
- /* Run a test_pci call */
- if (test_pci() != 0) {
- printf("PCI scan failed in secondary\n");
- if (getuid() == 0) /* pci scans can fail as non-root */
- return -1;
- } else
- printf("PCI scan succeeded in secondary\n");
-#endif
-
- return 0;
-}
-
-/* if called in a primary process, just spawns off a secondary process to
- * run validation tests - which brings us right back here again...
- * if called in a secondary process, this runs a series of API tests to check
- * how things run in a secondary instance.
- */
-int
-test_mp_secondary(void)
-{
- if (rte_eal_process_type() == RTE_PROC_PRIMARY) {
- if (!test_pci_run) {
-#ifdef RTE_APP_TEST_RESOURCE_TAR
- printf("=== Running pre-requisite test of test_pci\n");
- test_pci();
- printf("=== Requisite test done\n");
-#endif
- }
- return run_secondary_instances();
- }
-
- printf("IN SECONDARY PROCESS\n");
-
- return run_object_creation_tests();
-}
-
-REGISTER_TEST_COMMAND(multiprocess_autotest, test_mp_secondary);
diff --git a/app/test/test_pci.c b/app/test/test_pci.c
deleted file mode 100644
index cda186d0..00000000
--- a/app/test/test_pci.c
+++ /dev/null
@@ -1,322 +0,0 @@
-/*-
- * BSD LICENSE
- *
- * Copyright(c) 2010-2014 Intel Corporation. All rights reserved.
- * Copyright(c) 2014 6WIND S.A.
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * * Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * * Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in
- * the documentation and/or other materials provided with the
- * distribution.
- * * Neither the name of Intel Corporation nor the names of its
- * contributors may be used to endorse or promote products derived
- * from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
- * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
- * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#include <stdio.h>
-#include <string.h>
-#include <stdint.h>
-#include <sys/queue.h>
-
-#include <rte_interrupts.h>
-#include <rte_pci.h>
-#include <rte_ethdev.h>
-#include <rte_devargs.h>
-
-#include "test.h"
-#include "resource.h"
-
-/* Generic maximum number of drivers to have room to allocate all drivers */
-#define NUM_MAX_DRIVERS 256
-
-/*
- * PCI test
- * ========
- *
- * - Register a driver with a ``probe()`` function.
- *
- * - Dump all PCI devices.
- *
- * - Check that the ``probe()`` function is called at least once.
- */
-
-int test_pci_run = 0; /* value checked by the multiprocess test */
-static unsigned pci_dev_count;
-
-static int my_driver_init(struct rte_pci_driver *dr,
- struct rte_pci_device *dev);
-
-/* IXGBE NICS */
-struct rte_pci_id my_driver_id[] = {
- {RTE_PCI_DEVICE(0x0001, 0x1234)},
- { .vendor_id = 0, /* sentinel */ },
-};
-
-struct rte_pci_id my_driver_id2[] = {
- {RTE_PCI_DEVICE(0x0001, 0x4444)},
- {RTE_PCI_DEVICE(0x0002, 0xabcd)},
- { .vendor_id = 0, /* sentinel */ },
-};
-
-struct rte_pci_driver my_driver = {
- .driver = {
- .name = "test_driver"
- },
- .probe = my_driver_init,
- .id_table = my_driver_id,
- .drv_flags = 0,
-};
-
-struct rte_pci_driver my_driver2 = {
- .driver = {
- .name = "test_driver2"
- },
- .probe = my_driver_init,
- .id_table = my_driver_id2,
- .drv_flags = 0,
-};
-
-static int
-my_driver_init(__attribute__((unused)) struct rte_pci_driver *dr,
- struct rte_pci_device *dev)
-{
- printf("My driver init called in %s\n", dr->driver.name);
- printf("%x:%x:%x.%d", dev->addr.domain, dev->addr.bus,
- dev->addr.devid, dev->addr.function);
- printf(" - vendor:%x device:%x\n", dev->id.vendor_id, dev->id.device_id);
-
- pci_dev_count ++;
- return 0;
-}
-
-static void
-blacklist_all_devices(void)
-{
- struct rte_pci_device *dev = NULL;
- unsigned i = 0;
- char pci_addr_str[16];
-
- TAILQ_FOREACH(dev, &pci_device_list, next) {
- snprintf(pci_addr_str, sizeof(pci_addr_str), PCI_PRI_FMT,
- dev->addr.domain, dev->addr.bus, dev->addr.devid,
- dev->addr.function);
- if (rte_eal_devargs_add(RTE_DEVTYPE_BLACKLISTED_PCI,
- pci_addr_str) < 0) {
- printf("Error: cannot blacklist <%s>", pci_addr_str);
- break;
- }
- i++;
- }
- printf("%u devices blacklisted\n", i);
-}
-
-/* clear devargs list that was modified by the test */
-static void free_devargs_list(void)
-{
- struct rte_devargs *devargs;
-
- while (!TAILQ_EMPTY(&devargs_list)) {
- devargs = TAILQ_FIRST(&devargs_list);
- TAILQ_REMOVE(&devargs_list, devargs, next);
- free(devargs->args);
- free(devargs);
- }
-}
-
-/* backup real devices & drivers (not used for testing) */
-struct pci_driver_list real_pci_driver_list =
- TAILQ_HEAD_INITIALIZER(real_pci_driver_list);
-struct pci_device_list real_pci_device_list =
- TAILQ_HEAD_INITIALIZER(real_pci_device_list);
-
-REGISTER_LINKED_RESOURCE(test_pci_sysfs);
-
-static int
-test_pci_setup(void)
-{
- struct rte_pci_device *dev;
- struct rte_pci_driver *dr;
- const struct resource *r;
- int ret;
-
- r = resource_find("test_pci_sysfs");
- TEST_ASSERT_NOT_NULL(r, "missing resource test_pci_sysfs");
-
- ret = resource_untar(r);
- TEST_ASSERT_SUCCESS(ret, "failed to untar %s", r->name);
-
- ret = setenv("SYSFS_PCI_DEVICES", "test_pci_sysfs/bus/pci/devices", 1);
- TEST_ASSERT_SUCCESS(ret, "failed to setenv");
-
- /* Unregister original devices & drivers lists */
- while (!TAILQ_EMPTY(&pci_driver_list)) {
- dr = TAILQ_FIRST(&pci_driver_list);
- rte_eal_pci_unregister(dr);
- TAILQ_INSERT_TAIL(&real_pci_driver_list, dr, next);
- }
-
- while (!TAILQ_EMPTY(&pci_device_list)) {
- dev = TAILQ_FIRST(&pci_device_list);
- TAILQ_REMOVE(&pci_device_list, dev, next);
- TAILQ_INSERT_TAIL(&real_pci_device_list, dev, next);
- }
-
- ret = rte_eal_pci_scan();
- TEST_ASSERT_SUCCESS(ret, "failed to scan PCI bus");
- rte_eal_pci_dump(stdout);
-
- return 0;
-}
-
-static int
-test_pci_cleanup(void)
-{
- struct rte_pci_device *dev;
- struct rte_pci_driver *dr;
- const struct resource *r;
- int ret;
-
- unsetenv("SYSFS_PCI_DEVICES");
-
- r = resource_find("test_pci_sysfs");
- TEST_ASSERT_NOT_NULL(r, "missing resource test_pci_sysfs");
-
- ret = resource_rm_by_tar(r);
- TEST_ASSERT_SUCCESS(ret, "Failed to delete resource %s", r->name);
-
- /*
- * FIXME: there is no API in DPDK to free a rte_pci_device so we
- * cannot free the devices in the right way. Let's assume that we
- * don't care for tests.
- */
- while (!TAILQ_EMPTY(&pci_device_list)) {
- dev = TAILQ_FIRST(&pci_device_list);
- TAILQ_REMOVE(&pci_device_list, dev, next);
- }
-
- /* Restore original devices & drivers lists */
- while (!TAILQ_EMPTY(&real_pci_driver_list)) {
- dr = TAILQ_FIRST(&real_pci_driver_list);
- TAILQ_REMOVE(&real_pci_driver_list, dr, next);
- rte_eal_pci_register(dr);
- }
-
- while (!TAILQ_EMPTY(&real_pci_device_list)) {
- dev = TAILQ_FIRST(&real_pci_device_list);
- TAILQ_REMOVE(&real_pci_device_list, dev, next);
- TAILQ_INSERT_TAIL(&pci_device_list, dev, next);
- }
-
- return 0;
-}
-
-static int
-test_pci_blacklist(void)
-{
- struct rte_devargs_list save_devargs_list;
-
- printf("Dump all devices\n");
- TEST_ASSERT(TAILQ_EMPTY(&pci_driver_list),
- "pci_driver_list not empty");
-
- rte_eal_pci_register(&my_driver);
- rte_eal_pci_register(&my_driver2);
-
- pci_dev_count = 0;
- printf("Scan bus\n");
- rte_eal_pci_probe();
-
- if (pci_dev_count == 0) {
- printf("no device detected\n");
- return -1;
- }
-
- /* save the real devargs_list */
- save_devargs_list = devargs_list;
- TAILQ_INIT(&devargs_list);
-
- blacklist_all_devices();
-
- pci_dev_count = 0;
- printf("Scan bus with all devices blacklisted\n");
- rte_eal_pci_probe();
-
- free_devargs_list();
- devargs_list = save_devargs_list;
-
- if (pci_dev_count != 0) {
- printf("not all devices are blacklisted\n");
- return -1;
- }
-
- test_pci_run = 1;
-
- rte_eal_pci_unregister(&my_driver);
- rte_eal_pci_unregister(&my_driver2);
-
- return 0;
-}
-
-static int test_pci_sysfs(void)
-{
- const char *orig;
- const char *newpath;
- int ret;
-
- orig = pci_get_sysfs_path();
- ret = setenv("SYSFS_PCI_DEVICES", "My Documents", 1);
- TEST_ASSERT_SUCCESS(ret, "Failed setenv to My Documents");
-
- newpath = pci_get_sysfs_path();
- TEST_ASSERT(!strcmp(newpath, "My Documents"),
- "pci_get_sysfs_path() should return 'My Documents' "
- "but gives %s", newpath);
-
- ret = setenv("SYSFS_PCI_DEVICES", orig, 1);
- TEST_ASSERT_SUCCESS(ret, "Failed setenv back to '%s'", orig);
-
- newpath = pci_get_sysfs_path();
- TEST_ASSERT(!strcmp(orig, newpath),
- "pci_get_sysfs_path returned unexpected path: "
- "%s (expected: %s)", newpath, orig);
- return 0;
-}
-
-int
-test_pci(void)
-{
- if (test_pci_sysfs())
- return -1;
-
- if (test_pci_setup())
- return -1;
-
- if (test_pci_blacklist())
- return -1;
-
- if (test_pci_cleanup())
- return -1;
-
- return 0;
-}
-
-REGISTER_TEST_COMMAND(pci_autotest, test_pci);
diff --git a/app/test/test_pci_sysfs/bus/pci/devices/0000:01:00.0/class b/app/test/test_pci_sysfs/bus/pci/devices/0000:01:00.0/class
deleted file mode 100644
index 2f9c1dad..00000000
--- a/app/test/test_pci_sysfs/bus/pci/devices/0000:01:00.0/class
+++ /dev/null
@@ -1 +0,0 @@
-0x020000
diff --git a/app/test/test_pci_sysfs/bus/pci/devices/0000:01:00.0/config b/app/test/test_pci_sysfs/bus/pci/devices/0000:01:00.0/config
deleted file mode 100644
index 7752421c..00000000
--- a/app/test/test_pci_sysfs/bus/pci/devices/0000:01:00.0/config
+++ /dev/null
Binary files differ
diff --git a/app/test/test_pci_sysfs/bus/pci/devices/0000:01:00.0/consistent_dma_mask_bits b/app/test/test_pci_sysfs/bus/pci/devices/0000:01:00.0/consistent_dma_mask_bits
deleted file mode 100644
index 900731ff..00000000
--- a/app/test/test_pci_sysfs/bus/pci/devices/0000:01:00.0/consistent_dma_mask_bits
+++ /dev/null
@@ -1 +0,0 @@
-64
diff --git a/app/test/test_pci_sysfs/bus/pci/devices/0000:01:00.0/device b/app/test/test_pci_sysfs/bus/pci/devices/0000:01:00.0/device
deleted file mode 100644
index 48a62909..00000000
--- a/app/test/test_pci_sysfs/bus/pci/devices/0000:01:00.0/device
+++ /dev/null
@@ -1 +0,0 @@
-0x1234
diff --git a/app/test/test_pci_sysfs/bus/pci/devices/0000:01:00.0/dma_mask_bits b/app/test/test_pci_sysfs/bus/pci/devices/0000:01:00.0/dma_mask_bits
deleted file mode 100644
index 900731ff..00000000
--- a/app/test/test_pci_sysfs/bus/pci/devices/0000:01:00.0/dma_mask_bits
+++ /dev/null
@@ -1 +0,0 @@
-64
diff --git a/app/test/test_pci_sysfs/bus/pci/devices/0000:01:00.0/enable b/app/test/test_pci_sysfs/bus/pci/devices/0000:01:00.0/enable
deleted file mode 100644
index d00491fd..00000000
--- a/app/test/test_pci_sysfs/bus/pci/devices/0000:01:00.0/enable
+++ /dev/null
@@ -1 +0,0 @@
-1
diff --git a/app/test/test_pci_sysfs/bus/pci/devices/0000:01:00.0/irq b/app/test/test_pci_sysfs/bus/pci/devices/0000:01:00.0/irq
deleted file mode 100644
index 573541ac..00000000
--- a/app/test/test_pci_sysfs/bus/pci/devices/0000:01:00.0/irq
+++ /dev/null
@@ -1 +0,0 @@
-0
diff --git a/app/test/test_pci_sysfs/bus/pci/devices/0000:01:00.0/modalias b/app/test/test_pci_sysfs/bus/pci/devices/0000:01:00.0/modalias
deleted file mode 100644
index f4c76ed9..00000000
--- a/app/test/test_pci_sysfs/bus/pci/devices/0000:01:00.0/modalias
+++ /dev/null
@@ -1 +0,0 @@
-pci:v00008086d000010FBsv00008086sd00000003bc02sc00i00
diff --git a/app/test/test_pci_sysfs/bus/pci/devices/0000:01:00.0/msi_bus b/app/test/test_pci_sysfs/bus/pci/devices/0000:01:00.0/msi_bus
deleted file mode 100644
index d00491fd..00000000
--- a/app/test/test_pci_sysfs/bus/pci/devices/0000:01:00.0/msi_bus
+++ /dev/null
@@ -1 +0,0 @@
-1
diff --git a/app/test/test_pci_sysfs/bus/pci/devices/0000:01:00.0/numa_node b/app/test/test_pci_sysfs/bus/pci/devices/0000:01:00.0/numa_node
deleted file mode 100644
index 3a2e3f49..00000000
--- a/app/test/test_pci_sysfs/bus/pci/devices/0000:01:00.0/numa_node
+++ /dev/null
@@ -1 +0,0 @@
--1
diff --git a/app/test/test_pci_sysfs/bus/pci/devices/0000:01:00.0/resource b/app/test/test_pci_sysfs/bus/pci/devices/0000:01:00.0/resource
deleted file mode 100644
index f3889296..00000000
--- a/app/test/test_pci_sysfs/bus/pci/devices/0000:01:00.0/resource
+++ /dev/null
@@ -1,13 +0,0 @@
-0x00000000d0080000 0x00000000d00fffff 0x000000000014220c
-0x0000000000000000 0x0000000000000000 0x0000000000000000
-0x000000000000e020 0x000000000000e03f 0x0000000000040101
-0x0000000000000000 0x0000000000000000 0x0000000000000000
-0x00000000d0104000 0x00000000d0107fff 0x000000000014220c
-0x0000000000000000 0x0000000000000000 0x0000000000000000
-0x0000000000000000 0x0000000000000000 0x0000000000000000
-0x00000000ab000000 0x00000000ab0fffff 0x0000000000140204
-0x0000000000000000 0x0000000000000000 0x0000000000000000
-0x0000000000000000 0x0000000000000000 0x0000000000000000
-0x00000000ab100000 0x00000000ab1fffff 0x0000000000140204
-0x0000000000000000 0x0000000000000000 0x0000000000000000
-0x0000000000000000 0x0000000000000000 0x0000000000000000
diff --git a/app/test/test_pci_sysfs/bus/pci/devices/0000:01:00.0/sriov_numvfs b/app/test/test_pci_sysfs/bus/pci/devices/0000:01:00.0/sriov_numvfs
deleted file mode 100644
index 573541ac..00000000
--- a/app/test/test_pci_sysfs/bus/pci/devices/0000:01:00.0/sriov_numvfs
+++ /dev/null
@@ -1 +0,0 @@
-0
diff --git a/app/test/test_pci_sysfs/bus/pci/devices/0000:01:00.0/sriov_totalvfs b/app/test/test_pci_sysfs/bus/pci/devices/0000:01:00.0/sriov_totalvfs
deleted file mode 100644
index 4b9026d8..00000000
--- a/app/test/test_pci_sysfs/bus/pci/devices/0000:01:00.0/sriov_totalvfs
+++ /dev/null
@@ -1 +0,0 @@
-63
diff --git a/app/test/test_pci_sysfs/bus/pci/devices/0000:01:00.0/subsystem_device b/app/test/test_pci_sysfs/bus/pci/devices/0000:01:00.0/subsystem_device
deleted file mode 100644
index 89a932cc..00000000
--- a/app/test/test_pci_sysfs/bus/pci/devices/0000:01:00.0/subsystem_device
+++ /dev/null
@@ -1 +0,0 @@
-0x0003
diff --git a/app/test/test_pci_sysfs/bus/pci/devices/0000:01:00.0/subsystem_vendor b/app/test/test_pci_sysfs/bus/pci/devices/0000:01:00.0/subsystem_vendor
deleted file mode 100644
index 446afb4b..00000000
--- a/app/test/test_pci_sysfs/bus/pci/devices/0000:01:00.0/subsystem_vendor
+++ /dev/null
@@ -1 +0,0 @@
-0x0001
diff --git a/app/test/test_pci_sysfs/bus/pci/devices/0000:01:00.0/uevent b/app/test/test_pci_sysfs/bus/pci/devices/0000:01:00.0/uevent
deleted file mode 100644
index 1dbe34de..00000000
--- a/app/test/test_pci_sysfs/bus/pci/devices/0000:01:00.0/uevent
+++ /dev/null
@@ -1,6 +0,0 @@
-DRIVER=ixgbe
-PCI_CLASS=20000
-PCI_ID=8086:10FB
-PCI_SUBSYS_ID=8086:0003
-PCI_SLOT_NAME=0000:01:00.0
-MODALIAS=pci:v00008086d000010FBsv00008086sd00000003bc02sc00i00
diff --git a/app/test/test_pci_sysfs/bus/pci/devices/0000:01:00.0/vendor b/app/test/test_pci_sysfs/bus/pci/devices/0000:01:00.0/vendor
deleted file mode 100644
index 446afb4b..00000000
--- a/app/test/test_pci_sysfs/bus/pci/devices/0000:01:00.0/vendor
+++ /dev/null
@@ -1 +0,0 @@
-0x0001
diff --git a/app/test/test_pci_sysfs/bus/pci/devices/0000:01:02.0/class b/app/test/test_pci_sysfs/bus/pci/devices/0000:01:02.0/class
deleted file mode 100644
index 22dd9361..00000000
--- a/app/test/test_pci_sysfs/bus/pci/devices/0000:01:02.0/class
+++ /dev/null
@@ -1 +0,0 @@
-0x100000
diff --git a/app/test/test_pci_sysfs/bus/pci/devices/0000:01:02.0/device b/app/test/test_pci_sysfs/bus/pci/devices/0000:01:02.0/device
deleted file mode 100644
index f61bbe63..00000000
--- a/app/test/test_pci_sysfs/bus/pci/devices/0000:01:02.0/device
+++ /dev/null
@@ -1 +0,0 @@
-0xabcd
diff --git a/app/test/test_pci_sysfs/bus/pci/devices/0000:01:02.0/resource b/app/test/test_pci_sysfs/bus/pci/devices/0000:01:02.0/resource
deleted file mode 100644
index f3889296..00000000
--- a/app/test/test_pci_sysfs/bus/pci/devices/0000:01:02.0/resource
+++ /dev/null
@@ -1,13 +0,0 @@
-0x00000000d0080000 0x00000000d00fffff 0x000000000014220c
-0x0000000000000000 0x0000000000000000 0x0000000000000000
-0x000000000000e020 0x000000000000e03f 0x0000000000040101
-0x0000000000000000 0x0000000000000000 0x0000000000000000
-0x00000000d0104000 0x00000000d0107fff 0x000000000014220c
-0x0000000000000000 0x0000000000000000 0x0000000000000000
-0x0000000000000000 0x0000000000000000 0x0000000000000000
-0x00000000ab000000 0x00000000ab0fffff 0x0000000000140204
-0x0000000000000000 0x0000000000000000 0x0000000000000000
-0x0000000000000000 0x0000000000000000 0x0000000000000000
-0x00000000ab100000 0x00000000ab1fffff 0x0000000000140204
-0x0000000000000000 0x0000000000000000 0x0000000000000000
-0x0000000000000000 0x0000000000000000 0x0000000000000000
diff --git a/app/test/test_pci_sysfs/bus/pci/devices/0000:01:02.0/subsystem_device b/app/test/test_pci_sysfs/bus/pci/devices/0000:01:02.0/subsystem_device
deleted file mode 100644
index f61bbe63..00000000
--- a/app/test/test_pci_sysfs/bus/pci/devices/0000:01:02.0/subsystem_device
+++ /dev/null
@@ -1 +0,0 @@
-0xabcd
diff --git a/app/test/test_pci_sysfs/bus/pci/devices/0000:01:02.0/subsystem_vendor b/app/test/test_pci_sysfs/bus/pci/devices/0000:01:02.0/subsystem_vendor
deleted file mode 100644
index 4321b81f..00000000
--- a/app/test/test_pci_sysfs/bus/pci/devices/0000:01:02.0/subsystem_vendor
+++ /dev/null
@@ -1 +0,0 @@
-0x0002
diff --git a/app/test/test_pci_sysfs/bus/pci/devices/0000:01:02.0/vendor b/app/test/test_pci_sysfs/bus/pci/devices/0000:01:02.0/vendor
deleted file mode 100644
index 4321b81f..00000000
--- a/app/test/test_pci_sysfs/bus/pci/devices/0000:01:02.0/vendor
+++ /dev/null
@@ -1 +0,0 @@
-0x0002
diff --git a/app/test/test_pci_sysfs/bus/pci/devices/0000:02:ab.0/class b/app/test/test_pci_sysfs/bus/pci/devices/0000:02:ab.0/class
deleted file mode 100644
index 22dd9361..00000000
--- a/app/test/test_pci_sysfs/bus/pci/devices/0000:02:ab.0/class
+++ /dev/null
@@ -1 +0,0 @@
-0x100000
diff --git a/app/test/test_pci_sysfs/bus/pci/devices/0000:02:ab.0/device b/app/test/test_pci_sysfs/bus/pci/devices/0000:02:ab.0/device
deleted file mode 100644
index ccaa4982..00000000
--- a/app/test/test_pci_sysfs/bus/pci/devices/0000:02:ab.0/device
+++ /dev/null
@@ -1 +0,0 @@
-0x4444
diff --git a/app/test/test_pci_sysfs/bus/pci/devices/0000:02:ab.0/resource b/app/test/test_pci_sysfs/bus/pci/devices/0000:02:ab.0/resource
deleted file mode 100644
index f3889296..00000000
--- a/app/test/test_pci_sysfs/bus/pci/devices/0000:02:ab.0/resource
+++ /dev/null
@@ -1,13 +0,0 @@
-0x00000000d0080000 0x00000000d00fffff 0x000000000014220c
-0x0000000000000000 0x0000000000000000 0x0000000000000000
-0x000000000000e020 0x000000000000e03f 0x0000000000040101
-0x0000000000000000 0x0000000000000000 0x0000000000000000
-0x00000000d0104000 0x00000000d0107fff 0x000000000014220c
-0x0000000000000000 0x0000000000000000 0x0000000000000000
-0x0000000000000000 0x0000000000000000 0x0000000000000000
-0x00000000ab000000 0x00000000ab0fffff 0x0000000000140204
-0x0000000000000000 0x0000000000000000 0x0000000000000000
-0x0000000000000000 0x0000000000000000 0x0000000000000000
-0x00000000ab100000 0x00000000ab1fffff 0x0000000000140204
-0x0000000000000000 0x0000000000000000 0x0000000000000000
-0x0000000000000000 0x0000000000000000 0x0000000000000000
diff --git a/app/test/test_pci_sysfs/bus/pci/devices/0000:02:ab.0/subsystem_device b/app/test/test_pci_sysfs/bus/pci/devices/0000:02:ab.0/subsystem_device
deleted file mode 100644
index ccaa4982..00000000
--- a/app/test/test_pci_sysfs/bus/pci/devices/0000:02:ab.0/subsystem_device
+++ /dev/null
@@ -1 +0,0 @@
-0x4444
diff --git a/app/test/test_pci_sysfs/bus/pci/devices/0000:02:ab.0/subsystem_vendor b/app/test/test_pci_sysfs/bus/pci/devices/0000:02:ab.0/subsystem_vendor
deleted file mode 100644
index 446afb4b..00000000
--- a/app/test/test_pci_sysfs/bus/pci/devices/0000:02:ab.0/subsystem_vendor
+++ /dev/null
@@ -1 +0,0 @@
-0x0001
diff --git a/app/test/test_pci_sysfs/bus/pci/devices/0000:02:ab.0/vendor b/app/test/test_pci_sysfs/bus/pci/devices/0000:02:ab.0/vendor
deleted file mode 100644
index 446afb4b..00000000
--- a/app/test/test_pci_sysfs/bus/pci/devices/0000:02:ab.0/vendor
+++ /dev/null
@@ -1 +0,0 @@
-0x0001
diff --git a/app/test/test_per_lcore.c b/app/test/test_per_lcore.c
deleted file mode 100644
index 747513d4..00000000
--- a/app/test/test_per_lcore.c
+++ /dev/null
@@ -1,139 +0,0 @@
-/*-
- * BSD LICENSE
- *
- * Copyright(c) 2010-2014 Intel Corporation. All rights reserved.
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * * Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * * Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in
- * the documentation and/or other materials provided with the
- * distribution.
- * * Neither the name of Intel Corporation nor the names of its
- * contributors may be used to endorse or promote products derived
- * from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
- * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
- * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#include <stdio.h>
-#include <stdint.h>
-#include <sys/queue.h>
-
-#include <rte_common.h>
-#include <rte_memory.h>
-#include <rte_memzone.h>
-#include <rte_per_lcore.h>
-#include <rte_launch.h>
-#include <rte_eal.h>
-#include <rte_per_lcore.h>
-#include <rte_lcore.h>
-#include <rte_cycles.h>
-
-#include "test.h"
-
-/*
- * Per-lcore variables and lcore launch
- * ====================================
- *
- * - Use ``rte_eal_mp_remote_launch()`` to call ``assign_vars()`` on
- * every available lcore. In this function, a per-lcore variable is
- * assigned to the lcore_id.
- *
- * - Use ``rte_eal_mp_remote_launch()`` to call ``display_vars()`` on
- * every available lcore. The function checks that the variable is
- * correctly set, or returns -1.
- *
- * - If at least one per-core variable was not correct, the test function
- * returns -1.
- */
-
-static RTE_DEFINE_PER_LCORE(unsigned, test) = 0x12345678;
-
-static int
-assign_vars(__attribute__((unused)) void *arg)
-{
- if (RTE_PER_LCORE(test) != 0x12345678)
- return -1;
- RTE_PER_LCORE(test) = rte_lcore_id();
- return 0;
-}
-
-static int
-display_vars(__attribute__((unused)) void *arg)
-{
- unsigned lcore_id = rte_lcore_id();
- unsigned var = RTE_PER_LCORE(test);
- unsigned socket_id = rte_lcore_to_socket_id(lcore_id);
-
- printf("on socket %u, on core %u, variable is %u\n", socket_id, lcore_id, var);
- if (lcore_id != var)
- return -1;
-
- RTE_PER_LCORE(test) = 0x12345678;
- return 0;
-}
-
-static int
-test_per_lcore_delay(__attribute__((unused)) void *arg)
-{
- rte_delay_ms(100);
- printf("wait 100ms on lcore %u\n", rte_lcore_id());
-
- return 0;
-}
-
-static int
-test_per_lcore(void)
-{
- unsigned lcore_id;
- int ret;
-
- rte_eal_mp_remote_launch(assign_vars, NULL, SKIP_MASTER);
- RTE_LCORE_FOREACH_SLAVE(lcore_id) {
- if (rte_eal_wait_lcore(lcore_id) < 0)
- return -1;
- }
-
- rte_eal_mp_remote_launch(display_vars, NULL, SKIP_MASTER);
- RTE_LCORE_FOREACH_SLAVE(lcore_id) {
- if (rte_eal_wait_lcore(lcore_id) < 0)
- return -1;
- }
-
- /* test if it could do remote launch twice at the same time or not */
- ret = rte_eal_mp_remote_launch(test_per_lcore_delay, NULL, SKIP_MASTER);
- if (ret < 0) {
- printf("It fails to do remote launch but it should able to do\n");
- return -1;
- }
- /* it should not be able to launch a lcore which is running */
- ret = rte_eal_mp_remote_launch(test_per_lcore_delay, NULL, SKIP_MASTER);
- if (ret == 0) {
- printf("It does remote launch successfully but it should not at this time\n");
- return -1;
- }
- RTE_LCORE_FOREACH_SLAVE(lcore_id) {
- if (rte_eal_wait_lcore(lcore_id) < 0)
- return -1;
- }
-
- return 0;
-}
-
-REGISTER_TEST_COMMAND(per_lcore_autotest, test_per_lcore);
diff --git a/app/test/test_pmd_perf.c b/app/test/test_pmd_perf.c
deleted file mode 100644
index e055aa07..00000000
--- a/app/test/test_pmd_perf.c
+++ /dev/null
@@ -1,913 +0,0 @@
-/*-
- * BSD LICENSE
- *
- * Copyright(c) 2010-2014 Intel Corporation. All rights reserved.
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * * Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * * Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in
- * the documentation and/or other materials provided with the
- * distribution.
- * * Neither the name of Intel Corporation nor the names of its
- * contributors may be used to endorse or promote products derived
- * from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
- * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
- * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-
-#include <stdio.h>
-#include <inttypes.h>
-#include <signal.h>
-#include <unistd.h>
-#include <rte_cycles.h>
-#include <rte_ethdev.h>
-#include <rte_byteorder.h>
-#include <rte_atomic.h>
-#include <rte_malloc.h>
-#include "packet_burst_generator.h"
-#include "test.h"
-
-#define NB_ETHPORTS_USED (1)
-#define NB_SOCKETS (2)
-#define MEMPOOL_CACHE_SIZE 250
-#define MAX_PKT_BURST (32)
-#define RTE_TEST_RX_DESC_DEFAULT (128)
-#define RTE_TEST_TX_DESC_DEFAULT (512)
-#define RTE_PORT_ALL (~(uint8_t)0x0)
-
-/* how long test would take at full line rate */
-#define RTE_TEST_DURATION (2)
-
-/*
- * RX and TX Prefetch, Host, and Write-back threshold values should be
- * carefully set for optimal performance. Consult the network
- * controller's datasheet and supporting DPDK documentation for guidance
- * on how these parameters should be set.
- */
-#define RX_PTHRESH 8 /**< Default values of RX prefetch threshold reg. */
-#define RX_HTHRESH 8 /**< Default values of RX host threshold reg. */
-#define RX_WTHRESH 0 /**< Default values of RX write-back threshold reg. */
-
-/*
- * These default values are optimized for use with the Intel(R) 82599 10 GbE
- * Controller and the DPDK ixgbe PMD. Consider using other values for other
- * network controllers and/or network drivers.
- */
-#define TX_PTHRESH 32 /**< Default values of TX prefetch threshold reg. */
-#define TX_HTHRESH 0 /**< Default values of TX host threshold reg. */
-#define TX_WTHRESH 0 /**< Default values of TX write-back threshold reg. */
-
-#define MAX_TRAFFIC_BURST 2048
-
-#define NB_MBUF RTE_MAX( \
- (unsigned)(nb_ports*nb_rx_queue*nb_rxd + \
- nb_ports*nb_lcores*MAX_PKT_BURST + \
- nb_ports*nb_tx_queue*nb_txd + \
- nb_lcores*MEMPOOL_CACHE_SIZE + \
- nb_ports*MAX_TRAFFIC_BURST), \
- (unsigned)8192)
-
-
-static struct rte_mempool *mbufpool[NB_SOCKETS];
-/* ethernet addresses of ports */
-static struct ether_addr ports_eth_addr[RTE_MAX_ETHPORTS];
-
-static struct rte_eth_conf port_conf = {
- .rxmode = {
- .mq_mode = ETH_MQ_RX_NONE,
- .max_rx_pkt_len = ETHER_MAX_LEN,
- .split_hdr_size = 0,
- .header_split = 0, /**< Header Split disabled */
- .hw_ip_checksum = 0, /**< IP checksum offload enabled */
- .hw_vlan_filter = 0, /**< VLAN filtering disabled */
- .hw_vlan_strip = 0, /**< VLAN strip enabled. */
- .hw_vlan_extend = 0, /**< Extended VLAN disabled. */
- .jumbo_frame = 0, /**< Jumbo Frame Support disabled */
- .hw_strip_crc = 0, /**< CRC stripped by hardware */
- .enable_scatter = 0, /**< scatter rx disabled */
- },
- .txmode = {
- .mq_mode = ETH_MQ_TX_NONE,
- },
- .lpbk_mode = 1, /* enable loopback */
-};
-
-static struct rte_eth_rxconf rx_conf = {
- .rx_thresh = {
- .pthresh = RX_PTHRESH,
- .hthresh = RX_HTHRESH,
- .wthresh = RX_WTHRESH,
- },
- .rx_free_thresh = 32,
-};
-
-static struct rte_eth_txconf tx_conf = {
- .tx_thresh = {
- .pthresh = TX_PTHRESH,
- .hthresh = TX_HTHRESH,
- .wthresh = TX_WTHRESH,
- },
- .tx_free_thresh = 32, /* Use PMD default values */
- .tx_rs_thresh = 32, /* Use PMD default values */
- .txq_flags = (ETH_TXQ_FLAGS_NOMULTSEGS |
- ETH_TXQ_FLAGS_NOVLANOFFL |
- ETH_TXQ_FLAGS_NOXSUMSCTP |
- ETH_TXQ_FLAGS_NOXSUMUDP |
- ETH_TXQ_FLAGS_NOXSUMTCP)
-};
-
-enum {
- LCORE_INVALID = 0,
- LCORE_AVAIL,
- LCORE_USED,
-};
-
-struct lcore_conf {
- uint8_t status;
- uint8_t socketid;
- uint16_t nb_ports;
- uint8_t portlist[RTE_MAX_ETHPORTS];
-} __rte_cache_aligned;
-
-struct lcore_conf lcore_conf[RTE_MAX_LCORE];
-
-static uint64_t link_mbps;
-
-enum {
- SC_CONTINUOUS = 0,
- SC_BURST_POLL_FIRST,
- SC_BURST_XMIT_FIRST,
-};
-
-static uint32_t sc_flag;
-
-/* Check the link status of all ports in up to 3s, and print them finally */
-static void
-check_all_ports_link_status(uint8_t port_num, uint32_t port_mask)
-{
-#define CHECK_INTERVAL 100 /* 100ms */
-#define MAX_CHECK_TIME 30 /* 3s (30 * 100ms) in total */
- uint8_t portid, count, all_ports_up, print_flag = 0;
- struct rte_eth_link link;
-
- printf("Checking link statuses...\n");
- fflush(stdout);
- for (count = 0; count <= MAX_CHECK_TIME; count++) {
- all_ports_up = 1;
- for (portid = 0; portid < port_num; portid++) {
- if ((port_mask & (1 << portid)) == 0)
- continue;
- memset(&link, 0, sizeof(link));
- rte_eth_link_get_nowait(portid, &link);
- /* print link status if flag set */
- if (print_flag == 1) {
- if (link.link_status) {
- printf("Port %d Link Up - speed %u "
- "Mbps - %s\n", (uint8_t)portid,
- (unsigned)link.link_speed,
- (link.link_duplex == ETH_LINK_FULL_DUPLEX) ?
- ("full-duplex") : ("half-duplex\n"));
- if (link_mbps == 0)
- link_mbps = link.link_speed;
- } else
- printf("Port %d Link Down\n",
- (uint8_t)portid);
- continue;
- }
- /* clear all_ports_up flag if any link down */
- if (link.link_status == ETH_LINK_DOWN) {
- all_ports_up = 0;
- break;
- }
- }
- /* after finally printing all link status, get out */
- if (print_flag == 1)
- break;
-
- if (all_ports_up == 0) {
- fflush(stdout);
- rte_delay_ms(CHECK_INTERVAL);
- }
-
- /* set the print_flag if all ports up or timeout */
- if (all_ports_up == 1 || count == (MAX_CHECK_TIME - 1))
- print_flag = 1;
- }
-}
-
-static void
-print_ethaddr(const char *name, const struct ether_addr *eth_addr)
-{
- char buf[ETHER_ADDR_FMT_SIZE];
- ether_format_addr(buf, ETHER_ADDR_FMT_SIZE, eth_addr);
- printf("%s%s", name, buf);
-}
-
-static int
-init_traffic(struct rte_mempool *mp,
- struct rte_mbuf **pkts_burst, uint32_t burst_size)
-{
- struct ether_hdr pkt_eth_hdr;
- struct ipv4_hdr pkt_ipv4_hdr;
- struct udp_hdr pkt_udp_hdr;
- uint32_t pktlen;
- static uint8_t src_mac[] = { 0x00, 0xFF, 0xAA, 0xFF, 0xAA, 0xFF };
- static uint8_t dst_mac[] = { 0x00, 0xAA, 0xFF, 0xAA, 0xFF, 0xAA };
-
-
- initialize_eth_header(&pkt_eth_hdr,
- (struct ether_addr *)src_mac,
- (struct ether_addr *)dst_mac, ETHER_TYPE_IPv4, 0, 0);
-
- pktlen = initialize_ipv4_header(&pkt_ipv4_hdr,
- IPV4_ADDR(10, 0, 0, 1),
- IPV4_ADDR(10, 0, 0, 2), 26);
- printf("IPv4 pktlen %u\n", pktlen);
-
- pktlen = initialize_udp_header(&pkt_udp_hdr, 0, 0, 18);
-
- printf("UDP pktlen %u\n", pktlen);
-
- return generate_packet_burst(mp, pkts_burst, &pkt_eth_hdr,
- 0, &pkt_ipv4_hdr, 1,
- &pkt_udp_hdr, burst_size,
- PACKET_BURST_GEN_PKT_LEN, 1);
-}
-
-static int
-init_lcores(void)
-{
- unsigned lcore_id;
-
- for (lcore_id = 0; lcore_id < RTE_MAX_LCORE; lcore_id++) {
- lcore_conf[lcore_id].socketid =
- rte_lcore_to_socket_id(lcore_id);
- if (rte_lcore_is_enabled(lcore_id) == 0) {
- lcore_conf[lcore_id].status = LCORE_INVALID;
- continue;
- } else
- lcore_conf[lcore_id].status = LCORE_AVAIL;
- }
- return 0;
-}
-
-static int
-init_mbufpool(unsigned nb_mbuf)
-{
- int socketid;
- unsigned lcore_id;
- char s[64];
-
- for (lcore_id = 0; lcore_id < RTE_MAX_LCORE; lcore_id++) {
- if (rte_lcore_is_enabled(lcore_id) == 0)
- continue;
-
- socketid = rte_lcore_to_socket_id(lcore_id);
- if (socketid >= NB_SOCKETS) {
- rte_exit(EXIT_FAILURE,
- "Socket %d of lcore %u is out of range %d\n",
- socketid, lcore_id, NB_SOCKETS);
- }
- if (mbufpool[socketid] == NULL) {
- snprintf(s, sizeof(s), "mbuf_pool_%d", socketid);
- mbufpool[socketid] =
- rte_pktmbuf_pool_create(s, nb_mbuf,
- MEMPOOL_CACHE_SIZE, 0,
- RTE_MBUF_DEFAULT_BUF_SIZE, socketid);
- if (mbufpool[socketid] == NULL)
- rte_exit(EXIT_FAILURE,
- "Cannot init mbuf pool on socket %d\n",
- socketid);
- else
- printf("Allocated mbuf pool on socket %d\n",
- socketid);
- }
- }
- return 0;
-}
-
-static uint16_t
-alloc_lcore(uint16_t socketid)
-{
- unsigned lcore_id;
-
- for (lcore_id = 0; lcore_id < RTE_MAX_LCORE; lcore_id++) {
- if (LCORE_AVAIL != lcore_conf[lcore_id].status ||
- lcore_conf[lcore_id].socketid != socketid ||
- lcore_id == rte_get_master_lcore())
- continue;
- lcore_conf[lcore_id].status = LCORE_USED;
- lcore_conf[lcore_id].nb_ports = 0;
- return lcore_id;
- }
-
- return (uint16_t)-1;
-}
-
-volatile uint64_t stop;
-uint64_t count;
-uint64_t drop;
-uint64_t idle;
-
-static void
-reset_count(void)
-{
- count = 0;
- drop = 0;
- idle = 0;
-}
-
-static void
-stats_display(uint8_t port_id)
-{
- struct rte_eth_stats stats;
- rte_eth_stats_get(port_id, &stats);
-
- printf(" RX-packets: %-10"PRIu64" RX-missed: %-10"PRIu64" RX-bytes: "
- "%-"PRIu64"\n",
- stats.ipackets, stats.imissed, stats.ibytes);
- printf(" RX-errors: %-10"PRIu64" RX-nombuf: %-10"PRIu64"\n",
- stats.ierrors, stats.rx_nombuf);
- printf(" TX-packets: %-10"PRIu64" TX-errors: %-10"PRIu64" TX-bytes: "
- "%-"PRIu64"\n",
- stats.opackets, stats.oerrors, stats.obytes);
-}
-
-static void
-signal_handler(int signum)
-{
- /* USR1 signal, stop testing */
- if (signum == SIGUSR1) {
- printf("Force Stop!\n");
- stop = 1;
- }
-
- /* USR2 signal, print stats */
- if (signum == SIGUSR2)
- stats_display(0);
-}
-
-struct rte_mbuf **tx_burst;
-
-uint64_t (*do_measure)(struct lcore_conf *conf,
- struct rte_mbuf *pkts_burst[],
- uint64_t total_pkts);
-
-static uint64_t
-measure_rxtx(struct lcore_conf *conf,
- struct rte_mbuf *pkts_burst[],
- uint64_t total_pkts)
-{
- unsigned i, portid, nb_rx, nb_tx;
- uint64_t prev_tsc, cur_tsc;
-
- prev_tsc = rte_rdtsc();
-
- while (likely(!stop)) {
- for (i = 0; i < conf->nb_ports; i++) {
- portid = conf->portlist[i];
- nb_rx = rte_eth_rx_burst((uint8_t) portid, 0,
- pkts_burst, MAX_PKT_BURST);
- if (unlikely(nb_rx == 0)) {
- idle++;
- continue;
- }
-
- count += nb_rx;
- nb_tx = rte_eth_tx_burst(portid, 0, pkts_burst, nb_rx);
- if (unlikely(nb_tx < nb_rx)) {
- drop += (nb_rx - nb_tx);
- do {
- rte_pktmbuf_free(pkts_burst[nb_tx]);
- } while (++nb_tx < nb_rx);
- }
- }
- if (unlikely(count >= total_pkts))
- break;
- }
-
- cur_tsc = rte_rdtsc();
-
- return cur_tsc - prev_tsc;
-}
-
-static uint64_t
-measure_rxonly(struct lcore_conf *conf,
- struct rte_mbuf *pkts_burst[],
- uint64_t total_pkts)
-{
- unsigned i, portid, nb_rx, nb_tx;
- uint64_t diff_tsc, cur_tsc;
-
- diff_tsc = 0;
- while (likely(!stop)) {
- for (i = 0; i < conf->nb_ports; i++) {
- portid = conf->portlist[i];
-
- cur_tsc = rte_rdtsc();
- nb_rx = rte_eth_rx_burst((uint8_t) portid, 0,
- pkts_burst, MAX_PKT_BURST);
- if (unlikely(nb_rx == 0)) {
- idle++;
- continue;
- }
- diff_tsc += rte_rdtsc() - cur_tsc;
-
- count += nb_rx;
- nb_tx = rte_eth_tx_burst(portid, 0, pkts_burst, nb_rx);
- if (unlikely(nb_tx < nb_rx)) {
- drop += (nb_rx - nb_tx);
- do {
- rte_pktmbuf_free(pkts_burst[nb_tx]);
- } while (++nb_tx < nb_rx);
- }
- }
- if (unlikely(count >= total_pkts))
- break;
- }
-
- return diff_tsc;
-}
-
-static uint64_t
-measure_txonly(struct lcore_conf *conf,
- struct rte_mbuf *pkts_burst[],
- uint64_t total_pkts)
-{
- unsigned i, portid, nb_rx, nb_tx;
- uint64_t diff_tsc, cur_tsc;
-
- printf("do tx measure\n");
- diff_tsc = 0;
- while (likely(!stop)) {
- for (i = 0; i < conf->nb_ports; i++) {
- portid = conf->portlist[i];
- nb_rx = rte_eth_rx_burst((uint8_t) portid, 0,
- pkts_burst, MAX_PKT_BURST);
- if (unlikely(nb_rx == 0)) {
- idle++;
- continue;
- }
-
- count += nb_rx;
-
- cur_tsc = rte_rdtsc();
- nb_tx = rte_eth_tx_burst(portid, 0, pkts_burst, nb_rx);
- if (unlikely(nb_tx < nb_rx)) {
- drop += (nb_rx - nb_tx);
- do {
- rte_pktmbuf_free(pkts_burst[nb_tx]);
- } while (++nb_tx < nb_rx);
- }
- diff_tsc += rte_rdtsc() - cur_tsc;
- }
- if (unlikely(count >= total_pkts))
- break;
- }
-
- return diff_tsc;
-}
-
-/* main processing loop */
-static int
-main_loop(__rte_unused void *args)
-{
-#define PACKET_SIZE 64
-#define FRAME_GAP 12
-#define MAC_PREAMBLE 8
- struct rte_mbuf *pkts_burst[MAX_PKT_BURST];
- unsigned lcore_id;
- unsigned i, portid, nb_rx = 0, nb_tx = 0;
- struct lcore_conf *conf;
- int pkt_per_port;
- uint64_t diff_tsc;
- uint64_t packets_per_second, total_packets;
-
- lcore_id = rte_lcore_id();
- conf = &lcore_conf[lcore_id];
- if (conf->status != LCORE_USED)
- return 0;
-
- pkt_per_port = MAX_TRAFFIC_BURST;
-
- int idx = 0;
- for (i = 0; i < conf->nb_ports; i++) {
- int num = pkt_per_port;
- portid = conf->portlist[i];
- printf("inject %d packet to port %d\n", num, portid);
- while (num) {
- nb_tx = RTE_MIN(MAX_PKT_BURST, num);
- nb_tx = rte_eth_tx_burst(portid, 0,
- &tx_burst[idx], nb_tx);
- num -= nb_tx;
- idx += nb_tx;
- }
- }
- printf("Total packets inject to prime ports = %u\n", idx);
-
- packets_per_second = (link_mbps * 1000 * 1000) /
- ((PACKET_SIZE + FRAME_GAP + MAC_PREAMBLE) * CHAR_BIT);
- printf("Each port will do %"PRIu64" packets per second\n",
- packets_per_second);
-
- total_packets = RTE_TEST_DURATION * conf->nb_ports * packets_per_second;
- printf("Test will stop after at least %"PRIu64" packets received\n",
- + total_packets);
-
- diff_tsc = do_measure(conf, pkts_burst, total_packets);
-
- for (i = 0; i < conf->nb_ports; i++) {
- portid = conf->portlist[i];
- int nb_free = pkt_per_port;
- do { /* dry out */
- nb_rx = rte_eth_rx_burst((uint8_t) portid, 0,
- pkts_burst, MAX_PKT_BURST);
- nb_tx = 0;
- while (nb_tx < nb_rx)
- rte_pktmbuf_free(pkts_burst[nb_tx++]);
- nb_free -= nb_rx;
- } while (nb_free != 0);
- printf("free %d mbuf left in port %u\n", pkt_per_port, portid);
- }
-
- if (count == 0)
- return -1;
-
- printf("%"PRIu64" packet, %"PRIu64" drop, %"PRIu64" idle\n",
- count, drop, idle);
- printf("Result: %"PRIu64" cycles per packet\n", diff_tsc / count);
-
- return 0;
-}
-
-rte_atomic64_t start;
-
-static inline int
-poll_burst(void *args)
-{
-#define MAX_IDLE (10000)
- unsigned lcore_id;
- struct rte_mbuf **pkts_burst;
- uint64_t diff_tsc, cur_tsc;
- uint16_t next[RTE_MAX_ETHPORTS];
- struct lcore_conf *conf;
- uint32_t pkt_per_port = *((uint32_t *)args);
- unsigned i, portid, nb_rx = 0;
- uint64_t total;
- uint64_t timeout = MAX_IDLE;
-
- lcore_id = rte_lcore_id();
- conf = &lcore_conf[lcore_id];
- if (conf->status != LCORE_USED)
- return 0;
-
- total = pkt_per_port * conf->nb_ports;
- printf("start to receive total expect %"PRIu64"\n", total);
-
- pkts_burst = (struct rte_mbuf **)
- rte_calloc_socket("poll_burst",
- total, sizeof(void *),
- RTE_CACHE_LINE_SIZE, conf->socketid);
- if (!pkts_burst)
- return -1;
-
- for (i = 0; i < conf->nb_ports; i++) {
- portid = conf->portlist[i];
- next[portid] = i * pkt_per_port;
- }
-
- while (!rte_atomic64_read(&start))
- ;
-
- cur_tsc = rte_rdtsc();
- while (total) {
- for (i = 0; i < conf->nb_ports; i++) {
- portid = conf->portlist[i];
- nb_rx = rte_eth_rx_burst((uint8_t) portid, 0,
- &pkts_burst[next[portid]],
- MAX_PKT_BURST);
- if (unlikely(nb_rx == 0)) {
- timeout--;
- if (unlikely(timeout == 0))
- goto timeout;
- continue;
- }
- next[portid] += nb_rx;
- total -= nb_rx;
- }
- }
-timeout:
- diff_tsc = rte_rdtsc() - cur_tsc;
-
- printf("%"PRIu64" packets lost, IDLE %"PRIu64" times\n",
- total, MAX_IDLE - timeout);
-
- /* clean up */
- total = pkt_per_port * conf->nb_ports - total;
- for (i = 0; i < total; i++)
- rte_pktmbuf_free(pkts_burst[i]);
-
- rte_free(pkts_burst);
-
- if (total > 0)
- return diff_tsc / total;
- else
- return -1;
-}
-
-static int
-exec_burst(uint32_t flags, int lcore)
-{
- unsigned i, portid, nb_tx = 0;
- struct lcore_conf *conf;
- uint32_t pkt_per_port;
- int num, idx = 0;
- int diff_tsc;
-
- conf = &lcore_conf[lcore];
-
- pkt_per_port = MAX_TRAFFIC_BURST;
- num = pkt_per_port;
-
- rte_atomic64_init(&start);
-
- /* start polling thread, but not actually poll yet */
- rte_eal_remote_launch(poll_burst,
- (void *)&pkt_per_port, lcore);
-
- /* Only when polling first */
- if (flags == SC_BURST_POLL_FIRST)
- rte_atomic64_set(&start, 1);
-
- /* start xmit */
- while (num) {
- nb_tx = RTE_MIN(MAX_PKT_BURST, num);
- for (i = 0; i < conf->nb_ports; i++) {
- portid = conf->portlist[i];
- rte_eth_tx_burst(portid, 0,
- &tx_burst[idx], nb_tx);
- idx += nb_tx;
- }
- num -= nb_tx;
- }
-
- sleep(5);
-
- /* only when polling second */
- if (flags == SC_BURST_XMIT_FIRST)
- rte_atomic64_set(&start, 1);
-
- /* wait for polling finished */
- diff_tsc = rte_eal_wait_lcore(lcore);
- if (diff_tsc < 0) {
- printf("exec_burst: Failed to measure cycles per packet\n");
- return -1;
- }
-
- printf("Result: %d cycles per packet\n", diff_tsc);
-
- return 0;
-}
-
-static int
-test_pmd_perf(void)
-{
- uint16_t nb_ports, num, nb_lcores, slave_id = (uint16_t)-1;
- uint16_t nb_rxd = MAX_TRAFFIC_BURST;
- uint16_t nb_txd = MAX_TRAFFIC_BURST;
- uint16_t portid;
- uint16_t nb_rx_queue = 1, nb_tx_queue = 1;
- int socketid = -1;
- int ret;
-
- printf("Start PMD RXTX cycles cost test.\n");
-
- signal(SIGUSR1, signal_handler);
- signal(SIGUSR2, signal_handler);
-
- nb_ports = rte_eth_dev_count();
- if (nb_ports < NB_ETHPORTS_USED) {
- printf("At least %u port(s) used for perf. test\n",
- NB_ETHPORTS_USED);
- return -1;
- }
-
- nb_lcores = rte_lcore_count();
-
- memset(lcore_conf, 0, sizeof(lcore_conf));
- init_lcores();
-
- init_mbufpool(NB_MBUF);
-
- if (sc_flag == SC_CONTINUOUS) {
- nb_rxd = RTE_TEST_RX_DESC_DEFAULT;
- nb_txd = RTE_TEST_TX_DESC_DEFAULT;
- }
- printf("CONFIG RXD=%d TXD=%d\n", nb_rxd, nb_txd);
-
- reset_count();
- num = 0;
- for (portid = 0; portid < nb_ports; portid++) {
- if (socketid == -1) {
- socketid = rte_eth_dev_socket_id(portid);
- slave_id = alloc_lcore(socketid);
- if (slave_id == (uint16_t)-1) {
- printf("No avail lcore to run test\n");
- return -1;
- }
- printf("Performance test runs on lcore %u socket %u\n",
- slave_id, socketid);
- }
-
- if (socketid != rte_eth_dev_socket_id(portid)) {
- printf("Skip port %d\n", portid);
- continue;
- }
-
- /* port configure */
- ret = rte_eth_dev_configure(portid, nb_rx_queue,
- nb_tx_queue, &port_conf);
- if (ret < 0)
- rte_exit(EXIT_FAILURE,
- "Cannot configure device: err=%d, port=%d\n",
- ret, portid);
-
- rte_eth_macaddr_get(portid, &ports_eth_addr[portid]);
- printf("Port %u ", portid);
- print_ethaddr("Address:", &ports_eth_addr[portid]);
- printf("\n");
-
- /* tx queue setup */
- ret = rte_eth_tx_queue_setup(portid, 0, nb_txd,
- socketid, &tx_conf);
- if (ret < 0)
- rte_exit(EXIT_FAILURE,
- "rte_eth_tx_queue_setup: err=%d, "
- "port=%d\n", ret, portid);
-
- /* rx queue steup */
- ret = rte_eth_rx_queue_setup(portid, 0, nb_rxd,
- socketid, &rx_conf,
- mbufpool[socketid]);
- if (ret < 0)
- rte_exit(EXIT_FAILURE, "rte_eth_rx_queue_setup: err=%d,"
- "port=%d\n", ret, portid);
-
- /* Start device */
- stop = 0;
- ret = rte_eth_dev_start(portid);
- if (ret < 0)
- rte_exit(EXIT_FAILURE,
- "rte_eth_dev_start: err=%d, port=%d\n",
- ret, portid);
-
- /* always eanble promiscuous */
- rte_eth_promiscuous_enable(portid);
-
- lcore_conf[slave_id].portlist[num++] = portid;
- lcore_conf[slave_id].nb_ports++;
- }
- check_all_ports_link_status(nb_ports, RTE_PORT_ALL);
-
- if (tx_burst == NULL) {
- tx_burst = (struct rte_mbuf **)
- rte_calloc_socket("tx_buff",
- MAX_TRAFFIC_BURST * nb_ports,
- sizeof(void *),
- RTE_CACHE_LINE_SIZE, socketid);
- if (!tx_burst)
- return -1;
- }
-
- init_traffic(mbufpool[socketid],
- tx_burst, MAX_TRAFFIC_BURST * nb_ports);
-
- printf("Generate %d packets @socket %d\n",
- MAX_TRAFFIC_BURST * nb_ports, socketid);
-
- if (sc_flag == SC_CONTINUOUS) {
- /* do both rxtx by default */
- if (NULL == do_measure)
- do_measure = measure_rxtx;
-
- rte_eal_remote_launch(main_loop, NULL, slave_id);
-
- if (rte_eal_wait_lcore(slave_id) < 0)
- return -1;
- } else if (sc_flag == SC_BURST_POLL_FIRST ||
- sc_flag == SC_BURST_XMIT_FIRST)
- if (exec_burst(sc_flag, slave_id) < 0)
- return -1;
-
- /* port tear down */
- for (portid = 0; portid < nb_ports; portid++) {
- if (socketid != rte_eth_dev_socket_id(portid))
- continue;
-
- rte_eth_dev_stop(portid);
- }
-
- return 0;
-}
-
-int
-test_set_rxtx_conf(cmdline_fixed_string_t mode)
-{
- printf("mode switch to %s\n", mode);
-
- if (!strcmp(mode, "vector")) {
- /* vector rx, tx */
- tx_conf.txq_flags = 0xf01;
- tx_conf.tx_rs_thresh = 32;
- tx_conf.tx_free_thresh = 32;
- port_conf.rxmode.hw_ip_checksum = 0;
- port_conf.rxmode.enable_scatter = 0;
- return 0;
- } else if (!strcmp(mode, "scalar")) {
- /* bulk alloc rx, full-featured tx */
- tx_conf.txq_flags = 0;
- tx_conf.tx_rs_thresh = 32;
- tx_conf.tx_free_thresh = 32;
- port_conf.rxmode.hw_ip_checksum = 1;
- port_conf.rxmode.enable_scatter = 0;
- return 0;
- } else if (!strcmp(mode, "hybrid")) {
- /* bulk alloc rx, vector tx
- * when vec macro not define,
- * using the same rx/tx as scalar
- */
- tx_conf.txq_flags = 0xf01;
- tx_conf.tx_rs_thresh = 32;
- tx_conf.tx_free_thresh = 32;
- port_conf.rxmode.hw_ip_checksum = 1;
- port_conf.rxmode.enable_scatter = 0;
- return 0;
- } else if (!strcmp(mode, "full")) {
- /* full feature rx,tx pair */
- tx_conf.txq_flags = 0x0; /* must condition */
- tx_conf.tx_rs_thresh = 32;
- tx_conf.tx_free_thresh = 32;
- port_conf.rxmode.hw_ip_checksum = 0;
- port_conf.rxmode.enable_scatter = 1; /* must condition */
- return 0;
- }
-
- return -1;
-}
-
-int
-test_set_rxtx_anchor(cmdline_fixed_string_t type)
-{
- printf("type switch to %s\n", type);
-
- if (!strcmp(type, "rxtx")) {
- do_measure = measure_rxtx;
- return 0;
- } else if (!strcmp(type, "rxonly")) {
- do_measure = measure_rxonly;
- return 0;
- } else if (!strcmp(type, "txonly")) {
- do_measure = measure_txonly;
- return 0;
- }
-
- return -1;
-}
-
-int
-test_set_rxtx_sc(cmdline_fixed_string_t type)
-{
- printf("stream control switch to %s\n", type);
-
- if (!strcmp(type, "continuous")) {
- sc_flag = SC_CONTINUOUS;
- return 0;
- } else if (!strcmp(type, "poll_before_xmit")) {
- sc_flag = SC_BURST_POLL_FIRST;
- return 0;
- } else if (!strcmp(type, "poll_after_xmit")) {
- sc_flag = SC_BURST_XMIT_FIRST;
- return 0;
- }
-
- return -1;
-}
-
-REGISTER_TEST_COMMAND(pmd_perf_autotest, test_pmd_perf);
diff --git a/app/test/test_pmd_ring.c b/app/test/test_pmd_ring.c
deleted file mode 100644
index 2cdf60d1..00000000
--- a/app/test/test_pmd_ring.c
+++ /dev/null
@@ -1,529 +0,0 @@
-/*-
- * BSD LICENSE
- *
- * Copyright(c) 2010-2015 Intel Corporation. All rights reserved.
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * * Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * * Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in
- * the documentation and/or other materials provided with the
- * distribution.
- * * Neither the name of Intel Corporation nor the names of its
- * contributors may be used to endorse or promote products derived
- * from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
- * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
- * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-#include "test.h"
-
-#include <stdio.h>
-
-#include <rte_eth_ring.h>
-#include <rte_ethdev.h>
-
-static struct rte_mempool *mp;
-static int tx_porta, rx_portb, rxtx_portc, rxtx_portd, rxtx_porte;
-
-#define SOCKET0 0
-#define RING_SIZE 256
-#define NUM_RINGS 2
-#define NB_MBUF 512
-
-
-static int
-test_ethdev_configure_port(int port)
-{
- struct rte_eth_conf null_conf;
- struct rte_eth_link link;
-
- memset(&null_conf, 0, sizeof(struct rte_eth_conf));
-
- if (rte_eth_dev_configure(port, 1, 2, &null_conf) < 0) {
- printf("Configure failed for port %d\n", port);
- return -1;
- }
-
- /* Test queue release */
- if (rte_eth_dev_configure(port, 1, 1, &null_conf) < 0) {
- printf("Configure failed for port %d\n", port);
- return -1;
- }
-
- if (rte_eth_tx_queue_setup(port, 0, RING_SIZE, SOCKET0, NULL) < 0) {
- printf("TX queue setup failed port %d\n", port);
- return -1;
- }
-
- if (rte_eth_rx_queue_setup(port, 0, RING_SIZE, SOCKET0,
- NULL, mp) < 0) {
- printf("RX queue setup failed port %d\n", port);
- return -1;
- }
-
- if (rte_eth_dev_start(port) < 0) {
- printf("Error starting port %d\n", port);
- return -1;
- }
-
- rte_eth_link_get(port, &link);
-
- return 0;
-}
-
-static int
-test_send_basic_packets(void)
-{
- struct rte_mbuf bufs[RING_SIZE];
- struct rte_mbuf *pbufs[RING_SIZE];
- int i;
-
- printf("Testing send and receive RING_SIZE/2 packets (tx_porta -> rx_portb)\n");
-
- for (i = 0; i < RING_SIZE/2; i++)
- pbufs[i] = &bufs[i];
-
- if (rte_eth_tx_burst(tx_porta, 0, pbufs, RING_SIZE/2) < RING_SIZE/2) {
- printf("Failed to transmit packet burst port %d\n", tx_porta);
- return -1;
- }
-
- if (rte_eth_rx_burst(rx_portb, 0, pbufs, RING_SIZE) != RING_SIZE/2) {
- printf("Failed to receive packet burst on port %d\n", rx_portb);
- return -1;
- }
-
- for (i = 0; i < RING_SIZE/2; i++)
- if (pbufs[i] != &bufs[i]) {
- printf("Error: received data does not match that transmitted\n");
- return -1;
- }
-
- return 0;
-}
-
-static int
-test_send_basic_packets_port(int port)
-{
- struct rte_mbuf bufs[RING_SIZE];
- struct rte_mbuf *pbufs[RING_SIZE];
- int i;
-
- printf("Testing send and receive RING_SIZE/2 packets (cmdl_port0 -> cmdl_port0)\n");
-
- for (i = 0; i < RING_SIZE/2; i++)
- pbufs[i] = &bufs[i];
-
- if (rte_eth_tx_burst(port, 0, pbufs, RING_SIZE/2) < RING_SIZE/2) {
- printf("Failed to transmit packet burst port %d\n", port);
- return -1;
- }
-
- if (rte_eth_rx_burst(port, 0, pbufs, RING_SIZE) != RING_SIZE/2) {
- printf("Failed to receive packet burst on port %d\n", port);
- return -1;
- }
-
- for (i = 0; i < RING_SIZE/2; i++)
- if (pbufs[i] != &bufs[i]) {
- printf("Error: received data does not match that transmitted\n");
- return -1;
- }
-
- return 0;
-}
-
-
-static int
-test_get_stats(int port)
-{
- struct rte_eth_stats stats;
- struct rte_mbuf buf, *pbuf = &buf;
-
- printf("Testing ring PMD stats_get port %d\n", port);
-
- /* check stats of RXTX port, should all be zero */
-
- rte_eth_stats_get(port, &stats);
- if (stats.ipackets != 0 || stats.opackets != 0 ||
- stats.ibytes != 0 || stats.obytes != 0 ||
- stats.ierrors != 0 || stats.oerrors != 0) {
- printf("Error: port %d stats are not zero\n", port);
- return -1;
- }
-
- /* send and receive 1 packet and check for stats update */
- if (rte_eth_tx_burst(port, 0, &pbuf, 1) != 1) {
- printf("Error sending packet to port %d\n", port);
- return -1;
- }
-
- if (rte_eth_rx_burst(port, 0, &pbuf, 1) != 1) {
- printf("Error receiving packet from port %d\n", port);
- return -1;
- }
-
- rte_eth_stats_get(port, &stats);
- if (stats.ipackets != 1 || stats.opackets != 1 ||
- stats.ibytes != 0 || stats.obytes != 0 ||
- stats.ierrors != 0 || stats.oerrors != 0) {
- printf("Error: port %d stats are not as expected\n", port);
- return -1;
- }
- return 0;
-}
-
-static int
-test_stats_reset(int port)
-{
- struct rte_eth_stats stats;
- struct rte_mbuf buf, *pbuf = &buf;
-
- printf("Testing ring PMD stats_reset port %d\n", port);
-
- rte_eth_stats_reset(port);
-
- /* check stats of RXTX port, should all be zero */
- rte_eth_stats_get(port, &stats);
- if (stats.ipackets != 0 || stats.opackets != 0 ||
- stats.ibytes != 0 || stats.obytes != 0 ||
- stats.ierrors != 0 || stats.oerrors != 0) {
- printf("Error: port %d stats are not zero\n", port);
- return -1;
- }
-
- /* send and receive 1 packet and check for stats update */
- if (rte_eth_tx_burst(port, 0, &pbuf, 1) != 1) {
- printf("Error sending packet to port %d\n", port);
- return -1;
- }
-
- if (rte_eth_rx_burst(port, 0, &pbuf, 1) != 1) {
- printf("Error receiving packet from port %d\n", port);
- return -1;
- }
-
- rte_eth_stats_get(port, &stats);
- if (stats.ipackets != 1 || stats.opackets != 1 ||
- stats.ibytes != 0 || stats.obytes != 0 ||
- stats.ierrors != 0 || stats.oerrors != 0) {
- printf("Error: port %d stats are not as expected\n", port);
- return -1;
- }
-
- rte_eth_stats_reset(port);
-
- /* check stats of RXTX port, should all be zero */
- rte_eth_stats_get(port, &stats);
- if (stats.ipackets != 0 || stats.opackets != 0 ||
- stats.ibytes != 0 || stats.obytes != 0 ||
- stats.ierrors != 0 || stats.oerrors != 0) {
- printf("Error: port %d stats are not zero\n", port);
- return -1;
- }
-
- return 0;
-}
-
-static int
-test_pmd_ring_pair_create_attach(int portd, int porte)
-{
- struct rte_eth_stats stats, stats2;
- struct rte_mbuf buf, *pbuf = &buf;
- struct rte_eth_conf null_conf;
-
- if ((rte_eth_dev_configure(portd, 1, 1, &null_conf) < 0)
- || (rte_eth_dev_configure(porte, 1, 1, &null_conf) < 0)) {
- printf("Configure failed for port\n");
- return -1;
- }
-
- if ((rte_eth_tx_queue_setup(portd, 0, RING_SIZE, SOCKET0, NULL) < 0)
- || (rte_eth_tx_queue_setup(porte, 0, RING_SIZE, SOCKET0, NULL) < 0)) {
- printf("TX queue setup failed\n");
- return -1;
- }
-
- if ((rte_eth_rx_queue_setup(portd, 0, RING_SIZE, SOCKET0, NULL, mp) < 0)
- || (rte_eth_rx_queue_setup(porte, 0, RING_SIZE, SOCKET0, NULL, mp) < 0)) {
- printf("RX queue setup failed\n");
- return -1;
- }
-
- if ((rte_eth_dev_start(portd) < 0)
- || (rte_eth_dev_start(porte) < 0)) {
- printf("Error starting port\n");
- return -1;
- }
-
- rte_eth_stats_reset(portd);
- /* check stats of port, should all be zero */
- rte_eth_stats_get(portd, &stats);
- if (stats.ipackets != 0 || stats.opackets != 0 ||
- stats.ibytes != 0 || stats.obytes != 0 ||
- stats.ierrors != 0 || stats.oerrors != 0) {
- printf("Error: port %d stats are not zero\n", portd);
- return -1;
- }
-
- rte_eth_stats_reset(porte);
- /* check stats of port, should all be zero */
- rte_eth_stats_get(porte, &stats2);
- if (stats2.ipackets != 0 || stats2.opackets != 0 ||
- stats2.ibytes != 0 || stats2.obytes != 0 ||
- stats2.ierrors != 0 || stats2.oerrors != 0) {
- printf("Error: port %d stats are not zero\n", porte);
- return -1;
- }
-
- /*
- * send and receive 1 packet (portd -> porte)
- * and check for stats update
- */
- printf("Testing send and receive 1 packet (portd -> porte)\n");
- if (rte_eth_tx_burst(portd, 0, &pbuf, 1) != 1) {
- printf("Error sending packet to port %d\n", portd);
- return -1;
- }
-
- if (rte_eth_rx_burst(porte, 0, &pbuf, 1) != 1) {
- printf("Error receiving packet from port %d\n", porte);
- return -1;
- }
-
- rte_eth_stats_get(portd, &stats);
- rte_eth_stats_get(porte, &stats2);
- if (stats.ipackets != 0 || stats.opackets != 1 ||
- stats.ibytes != 0 || stats.obytes != 0 ||
- stats.ierrors != 0 || stats.oerrors != 0) {
- printf("Error: port %d stats are not as expected\n", portd);
- return -1;
- }
-
- if (stats2.ipackets != 1 || stats2.opackets != 0 ||
- stats2.ibytes != 0 || stats2.obytes != 0 ||
- stats2.ierrors != 0 || stats2.oerrors != 0) {
- printf("Error: port %d stats are not as expected\n", porte);
- return -1;
- }
-
- /*
- * send and receive 1 packet (porte -> portd)
- * and check for stats update
- */
- printf("Testing send and receive 1 packet (porte -> portd)\n");
- if (rte_eth_tx_burst(porte, 0, &pbuf, 1) != 1) {
- printf("Error sending packet to port %d\n", porte);
- return -1;
- }
-
- if (rte_eth_rx_burst(portd, 0, &pbuf, 1) != 1) {
- printf("Error receiving packet from port %d\n", portd);
- return -1;
- }
-
- rte_eth_stats_get(portd, &stats);
- rte_eth_stats_get(porte, &stats2);
- if (stats.ipackets != 1 || stats.opackets != 1 ||
- stats.ibytes != 0 || stats.obytes != 0 ||
- stats.ierrors != 0 || stats.oerrors != 0) {
- printf("Error: port %d stats are not as expected\n", portd);
- return -1;
- }
-
- if (stats2.ipackets != 1 || stats2.opackets != 1 ||
- stats2.ibytes != 0 || stats2.obytes != 0 ||
- stats2.ierrors != 0 || stats2.oerrors != 0) {
- printf("Error: port %d stats are not as expected\n", porte);
- return -1;
- }
-
- /*
- * send and receive 1 packet (portd -> portd)
- * and check for stats update
- */
- printf("Testing send and receive 1 packet (portd -> portd)\n");
- if (rte_eth_tx_burst(portd, 0, &pbuf, 1) != 1) {
- printf("Error sending packet to port %d\n", portd);
- return -1;
- }
-
- if (rte_eth_rx_burst(portd, 0, &pbuf, 1) != 1) {
- printf("Error receiving packet from port %d\n", porte);
- return -1;
- }
-
- rte_eth_stats_get(portd, &stats);
- rte_eth_stats_get(porte, &stats2);
- if (stats.ipackets != 2 || stats.opackets != 2 ||
- stats.ibytes != 0 || stats.obytes != 0 ||
- stats.ierrors != 0 || stats.oerrors != 0) {
- printf("Error: port %d stats are not as expected\n", portd);
- return -1;
- }
-
- if (stats2.ipackets != 1 || stats2.opackets != 1 ||
- stats2.ibytes != 0 || stats2.obytes != 0 ||
- stats2.ierrors != 0 || stats2.oerrors != 0) {
- printf("Error: port %d stats are not as expected\n", porte);
- return -1;
- }
-
- /*
- * send and receive 1 packet (porte -> porte)
- * and check for stats update
- */
- printf("Testing send and receive 1 packet (porte -> porte)\n");
- if (rte_eth_tx_burst(porte, 0, &pbuf, 1) != 1) {
- printf("Error sending packet to port %d\n", porte);
- return -1;
- }
-
- if (rte_eth_rx_burst(porte, 0, &pbuf, 1) != 1) {
- printf("Error receiving packet from port %d\n", porte);
- return -1;
- }
-
- rte_eth_stats_get(portd, &stats);
- rte_eth_stats_get(porte, &stats2);
- if (stats.ipackets != 2 || stats.opackets != 2 ||
- stats.ibytes != 0 || stats.obytes != 0 ||
- stats.ierrors != 0 || stats.oerrors != 0) {
- printf("Error: port %d stats are not as expected\n", portd);
- return -1;
- }
-
- if (stats2.ipackets != 2 || stats2.opackets != 2 ||
- stats2.ibytes != 0 || stats2.obytes != 0 ||
- stats2.ierrors != 0 || stats2.oerrors != 0) {
- printf("Error: port %d stats are not as expected\n", porte);
- return -1;
- }
-
- rte_eth_dev_stop(portd);
- rte_eth_dev_stop(porte);
-
- return 0;
-}
-
-static int
-test_pmd_ring(void)
-{
- struct rte_ring *rxtx[NUM_RINGS];
- int port, cmdl_port0 = -1;
- uint8_t nb_ports;
-
- nb_ports = rte_eth_dev_count();
- printf("nb_ports=%d\n", (int)nb_ports);
-
- /* create the rings and eth_rings in the test code.
- * This does not test the rte_pmd_ring_devinit function.
- *
- * Test with the command line option --vdev=net_ring0 to test rte_pmd_ring_devinit.
- */
- rxtx[0] = rte_ring_create("R0", RING_SIZE, SOCKET0, RING_F_SP_ENQ|RING_F_SC_DEQ);
- if (rxtx[0] == NULL) {
- printf("rte_ring_create R0 failed");
- return -1;
- }
-
- rxtx[1] = rte_ring_create("R1", RING_SIZE, SOCKET0, RING_F_SP_ENQ|RING_F_SC_DEQ);
- if (rxtx[1] == NULL) {
- printf("rte_ring_create R1 failed");
- return -1;
- }
-
- tx_porta = rte_eth_from_rings("net_ringa", rxtx, NUM_RINGS, rxtx, NUM_RINGS, SOCKET0);
- rx_portb = rte_eth_from_rings("net_ringb", rxtx, NUM_RINGS, rxtx, NUM_RINGS, SOCKET0);
- rxtx_portc = rte_eth_from_rings("net_ringc", rxtx, NUM_RINGS, rxtx, NUM_RINGS, SOCKET0);
- rxtx_portd = rte_eth_from_rings("net_ringd", rxtx, NUM_RINGS, rxtx, NUM_RINGS, SOCKET0);
- rxtx_porte = rte_eth_from_rings("net_ringe", rxtx, NUM_RINGS, rxtx, NUM_RINGS, SOCKET0);
-
- printf("tx_porta=%d rx_portb=%d rxtx_portc=%d rxtx_portd=%d rxtx_porte=%d\n",
- tx_porta, rx_portb, rxtx_portc, rxtx_portd, rxtx_porte);
-
- if ((tx_porta == -1) || (rx_portb == -1) || (rxtx_portc == -1)
- || (rxtx_portd == -1) || (rxtx_porte == -1)) {
- printf("rte_eth_from rings failed\n");
- return -1;
- }
-
- mp = rte_pktmbuf_pool_create("mbuf_pool", NB_MBUF, 32,
- 0, RTE_MBUF_DEFAULT_BUF_SIZE, rte_socket_id());
- if (mp == NULL)
- return -1;
-
- if ((tx_porta >= RTE_MAX_ETHPORTS) || (rx_portb >= RTE_MAX_ETHPORTS)
- || (rxtx_portc >= RTE_MAX_ETHPORTS)
- || (rxtx_portd >= RTE_MAX_ETHPORTS)
- || (rxtx_porte >= RTE_MAX_ETHPORTS)) {
- printf(" port exceed max eth ports\n");
- return -1;
- }
-
- if (test_ethdev_configure_port(tx_porta) < 0)
- return -1;
-
- if (test_ethdev_configure_port(rx_portb) < 0)
- return -1;
-
- if (test_ethdev_configure_port(rxtx_portc) < 0)
- return -1;
-
- if (test_send_basic_packets() < 0)
- return -1;
-
- if (test_get_stats(rxtx_portc) < 0)
- return -1;
-
- if (test_stats_reset(rxtx_portc) < 0)
- return -1;
-
- rte_eth_dev_stop(tx_porta);
- rte_eth_dev_stop(rx_portb);
- rte_eth_dev_stop(rxtx_portc);
-
- if (test_pmd_ring_pair_create_attach(rxtx_portd, rxtx_porte) < 0)
- return -1;
-
- /* find a port created with the --vdev=net_ring0 command line option */
- for (port = 0; port < nb_ports; port++) {
- struct rte_eth_dev_info dev_info;
-
- rte_eth_dev_info_get(port, &dev_info);
- if (!strcmp(dev_info.driver_name, "Rings PMD")) {
- printf("found a command line ring port=%d\n", port);
- cmdl_port0 = port;
- break;
- }
- }
- if (cmdl_port0 != -1) {
- if (test_ethdev_configure_port(cmdl_port0) < 0)
- return -1;
- if (test_send_basic_packets_port(cmdl_port0) < 0)
- return -1;
- if (test_stats_reset(cmdl_port0) < 0)
- return -1;
- if (test_get_stats(cmdl_port0) < 0)
- return -1;
- rte_eth_dev_stop(cmdl_port0);
- }
- return 0;
-}
-
-REGISTER_TEST_COMMAND(ring_pmd_autotest, test_pmd_ring);
diff --git a/app/test/test_pmd_ring_perf.c b/app/test/test_pmd_ring_perf.c
deleted file mode 100644
index af011f7d..00000000
--- a/app/test/test_pmd_ring_perf.c
+++ /dev/null
@@ -1,184 +0,0 @@
-/*-
- * BSD LICENSE
- *
- * Copyright(c) 2015 Intel Corporation. All rights reserved.
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * * Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * * Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in
- * the documentation and/or other materials provided with the
- * distribution.
- * * Neither the name of Intel Corporation nor the names of its
- * contributors may be used to endorse or promote products derived
- * from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
- * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
- * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-
-#include <stdio.h>
-#include <inttypes.h>
-#include <rte_ring.h>
-#include <rte_cycles.h>
-#include <rte_launch.h>
-#include <rte_ethdev.h>
-#include <rte_eth_ring.h>
-
-#include "test.h"
-
-#define RING_NAME "RING_PERF"
-#define RING_SIZE 4096
-#define MAX_BURST 32
-
-/*
- * the sizes to enqueue and dequeue in testing
- * (marked volatile so they won't be seen as compile-time constants)
- */
-static const volatile unsigned bulk_sizes[] = { 1, 8, 32 };
-
-/* The ring structure used for tests */
-static struct rte_ring *r;
-static uint8_t ring_ethdev_port;
-
-/* Get cycle counts for dequeuing from an empty ring. Should be 2 or 3 cycles */
-static void
-test_empty_dequeue(void)
-{
- const unsigned iter_shift = 26;
- const unsigned iterations = 1 << iter_shift;
- unsigned i = 0;
- void *burst[MAX_BURST];
-
- const uint64_t sc_start = rte_rdtsc();
- for (i = 0; i < iterations; i++)
- rte_ring_sc_dequeue_bulk(r, burst, bulk_sizes[0]);
- const uint64_t sc_end = rte_rdtsc();
-
- const uint64_t eth_start = rte_rdtsc();
- for (i = 0; i < iterations; i++)
- rte_eth_rx_burst(ring_ethdev_port, 0, (void *)burst,
- bulk_sizes[0]);
- const uint64_t eth_end = rte_rdtsc();
-
- printf("Ring empty dequeue : %.1F\n",
- (double)(sc_end - sc_start) / iterations);
- printf("Ethdev empty dequeue: %.1F\n",
- (double)(eth_end - eth_start) / iterations);
-}
-
-/*
- * Test function that determines how long an enqueue + dequeue of a single item
- * takes on a single lcore. Result is for comparison with the bulk enq+deq.
- */
-static void
-test_single_enqueue_dequeue(void)
-{
- const unsigned iter_shift = 24;
- const unsigned iterations = 1 << iter_shift;
- unsigned i = 0;
- void *burst = NULL;
- struct rte_mbuf *mburst[1] = { NULL };
-
- const uint64_t sc_start = rte_rdtsc_precise();
- rte_compiler_barrier();
- for (i = 0; i < iterations; i++) {
- rte_ring_enqueue_bulk(r, &burst, 1);
- rte_ring_dequeue_bulk(r, &burst, 1);
- }
- const uint64_t sc_end = rte_rdtsc_precise();
- rte_compiler_barrier();
-
- const uint64_t eth_start = rte_rdtsc_precise();
- rte_compiler_barrier();
- for (i = 0; i < iterations; i++) {
- rte_eth_tx_burst(ring_ethdev_port, 0, mburst, 1);
- rte_eth_rx_burst(ring_ethdev_port, 0, mburst, 1);
- }
- const uint64_t eth_end = rte_rdtsc_precise();
- rte_compiler_barrier();
-
- printf("Ring single enq/dequeue : %"PRIu64"\n",
- (sc_end-sc_start) >> iter_shift);
- printf("Ethdev single enq/dequeue: %"PRIu64"\n",
- (eth_end-eth_start) >> iter_shift);
-}
-
-/* Times enqueue and dequeue on a single lcore */
-static void
-test_bulk_enqueue_dequeue(void)
-{
- const unsigned iter_shift = 23;
- const unsigned iterations = 1 << iter_shift;
- unsigned sz, i = 0;
- struct rte_mbuf *burst[MAX_BURST] = {0};
-
- for (sz = 0; sz < sizeof(bulk_sizes)/sizeof(bulk_sizes[0]); sz++) {
- const uint64_t sc_start = rte_rdtsc();
- for (i = 0; i < iterations; i++) {
- rte_ring_sp_enqueue_bulk(r, (void *)burst, bulk_sizes[sz]);
- rte_ring_sc_dequeue_bulk(r, (void *)burst, bulk_sizes[sz]);
- }
- const uint64_t sc_end = rte_rdtsc();
-
- const uint64_t eth_start = rte_rdtsc_precise();
- rte_compiler_barrier();
- for (i = 0; i < iterations; i++) {
- rte_eth_tx_burst(ring_ethdev_port, 0, burst, bulk_sizes[sz]);
- rte_eth_rx_burst(ring_ethdev_port, 0, burst, bulk_sizes[sz]);
- }
- const uint64_t eth_end = rte_rdtsc_precise();
- rte_compiler_barrier();
-
- double sc_avg = ((double)(sc_end-sc_start) /
- (iterations * bulk_sizes[sz]));
- double eth_avg = ((double)(eth_end-eth_start) /
- (iterations * bulk_sizes[sz]));
-
- printf("ring bulk enq/deq (size: %u) : %.1F\n", bulk_sizes[sz],
- sc_avg);
- printf("ethdev bulk enq/deq (size:%u): %.1F\n", bulk_sizes[sz],
- eth_avg);
-
- printf("\n");
- }
-}
-
-static int
-test_ring_pmd_perf(void)
-{
- r = rte_ring_create(RING_NAME, RING_SIZE, rte_socket_id(),
- RING_F_SP_ENQ|RING_F_SC_DEQ);
- if (r == NULL && (r = rte_ring_lookup(RING_NAME)) == NULL)
- return -1;
-
- ring_ethdev_port = rte_eth_from_ring(r);
-
- printf("\n### Testing const single element enq/deq ###\n");
- test_single_enqueue_dequeue();
-
- printf("\n### Testing empty dequeue ###\n");
- test_empty_dequeue();
-
- printf("\n### Testing using a single lcore ###\n");
- test_bulk_enqueue_dequeue();
-
- return 0;
-}
-
-REGISTER_TEST_COMMAND(ring_pmd_perf_autotest, test_ring_pmd_perf);
diff --git a/app/test/test_power.c b/app/test/test_power.c
deleted file mode 100644
index b2e1344c..00000000
--- a/app/test/test_power.c
+++ /dev/null
@@ -1,107 +0,0 @@
-/*-
- * BSD LICENSE
- *
- * Copyright(c) 2010-2014 Intel Corporation. All rights reserved.
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * * Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * * Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in
- * the documentation and/or other materials provided with the
- * distribution.
- * * Neither the name of Intel Corporation nor the names of its
- * contributors may be used to endorse or promote products derived
- * from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
- * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
- * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#include <stdio.h>
-#include <stdint.h>
-#include <unistd.h>
-#include <limits.h>
-#include <string.h>
-
-#include "test.h"
-
-#include <rte_power.h>
-
-static int
-test_power(void)
-{
- int ret = -1;
- enum power_management_env env;
-
- /* Test setting an invalid environment */
- ret = rte_power_set_env(PM_ENV_NOT_SET);
- if (ret == 0) {
- printf("Unexpectedly succeeded on setting an invalid environment\n");
- return -1;
- }
-
- /* Test that the environment has not been set */
- env = rte_power_get_env();
- if (env != PM_ENV_NOT_SET) {
- printf("Unexpectedly got a valid environment configuration\n");
- return -1;
- }
-
- /* verify that function pointers are NULL */
- if (rte_power_freqs != NULL) {
- printf("rte_power_freqs should be NULL, environment has not been "
- "initialised\n");
- goto fail_all;
- }
- if (rte_power_get_freq != NULL) {
- printf("rte_power_get_freq should be NULL, environment has not been "
- "initialised\n");
- goto fail_all;
- }
- if (rte_power_set_freq != NULL) {
- printf("rte_power_set_freq should be NULL, environment has not been "
- "initialised\n");
- goto fail_all;
- }
- if (rte_power_freq_up != NULL) {
- printf("rte_power_freq_up should be NULL, environment has not been "
- "initialised\n");
- goto fail_all;
- }
- if (rte_power_freq_down != NULL) {
- printf("rte_power_freq_down should be NULL, environment has not been "
- "initialised\n");
- goto fail_all;
- }
- if (rte_power_freq_max != NULL) {
- printf("rte_power_freq_max should be NULL, environment has not been "
- "initialised\n");
- goto fail_all;
- }
- if (rte_power_freq_min != NULL) {
- printf("rte_power_freq_min should be NULL, environment has not been "
- "initialised\n");
- goto fail_all;
- }
- rte_power_unset_env();
- return 0;
-fail_all:
- rte_power_unset_env();
- return -1;
-}
-
-REGISTER_TEST_COMMAND(power_autotest, test_power);
diff --git a/app/test/test_power_acpi_cpufreq.c b/app/test/test_power_acpi_cpufreq.c
deleted file mode 100644
index 64f5dd56..00000000
--- a/app/test/test_power_acpi_cpufreq.c
+++ /dev/null
@@ -1,540 +0,0 @@
-/*-
- * BSD LICENSE
- *
- * Copyright(c) 2010-2014 Intel Corporation. All rights reserved.
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * * Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * * Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in
- * the documentation and/or other materials provided with the
- * distribution.
- * * Neither the name of Intel Corporation nor the names of its
- * contributors may be used to endorse or promote products derived
- * from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
- * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
- * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#include <stdio.h>
-#include <stdint.h>
-#include <unistd.h>
-#include <limits.h>
-#include <string.h>
-
-#include "test.h"
-
-#include <rte_power.h>
-
-#define TEST_POWER_LCORE_ID 2U
-#define TEST_POWER_LCORE_INVALID ((unsigned)RTE_MAX_LCORE)
-#define TEST_POWER_FREQS_NUM_MAX ((unsigned)RTE_MAX_LCORE_FREQS)
-
-#define TEST_POWER_SYSFILE_CUR_FREQ \
- "/sys/devices/system/cpu/cpu%u/cpufreq/scaling_cur_freq"
-
-static uint32_t total_freq_num;
-static uint32_t freqs[TEST_POWER_FREQS_NUM_MAX];
-
-static int
-check_cur_freq(unsigned lcore_id, uint32_t idx)
-{
-#define TEST_POWER_CONVERT_TO_DECIMAL 10
- FILE *f;
- char fullpath[PATH_MAX];
- char buf[BUFSIZ];
- uint32_t cur_freq;
- int ret = -1;
-
- if (snprintf(fullpath, sizeof(fullpath),
- TEST_POWER_SYSFILE_CUR_FREQ, lcore_id) < 0) {
- return 0;
- }
- f = fopen(fullpath, "r");
- if (f == NULL) {
- return 0;
- }
- if (fgets(buf, sizeof(buf), f) == NULL) {
- goto fail_get_cur_freq;
- }
- cur_freq = strtoul(buf, NULL, TEST_POWER_CONVERT_TO_DECIMAL);
- ret = (freqs[idx] == cur_freq ? 0 : -1);
-
-fail_get_cur_freq:
- fclose(f);
-
- return ret;
-}
-
-/* Check rte_power_freqs() */
-static int
-check_power_freqs(void)
-{
- uint32_t ret;
-
- total_freq_num = 0;
- memset(freqs, 0, sizeof(freqs));
-
- /* test with an invalid lcore id */
- ret = rte_power_freqs(TEST_POWER_LCORE_INVALID, freqs,
- TEST_POWER_FREQS_NUM_MAX);
- if (ret > 0) {
- printf("Unexpectedly get available freqs successfully on "
- "lcore %u\n", TEST_POWER_LCORE_INVALID);
- return -1;
- }
-
- /* test with NULL buffer to save available freqs */
- ret = rte_power_freqs(TEST_POWER_LCORE_ID, NULL,
- TEST_POWER_FREQS_NUM_MAX);
- if (ret > 0) {
- printf("Unexpectedly get available freqs successfully with "
- "NULL buffer on lcore %u\n", TEST_POWER_LCORE_ID);
- return -1;
- }
-
- /* test of getting zero number of freqs */
- ret = rte_power_freqs(TEST_POWER_LCORE_ID, freqs, 0);
- if (ret > 0) {
- printf("Unexpectedly get available freqs successfully with "
- "zero buffer size on lcore %u\n", TEST_POWER_LCORE_ID);
- return -1;
- }
-
- /* test with all valid input parameters */
- ret = rte_power_freqs(TEST_POWER_LCORE_ID, freqs,
- TEST_POWER_FREQS_NUM_MAX);
- if (ret == 0 || ret > TEST_POWER_FREQS_NUM_MAX) {
- printf("Fail to get available freqs on lcore %u\n",
- TEST_POWER_LCORE_ID);
- return -1;
- }
-
- /* Save the total number of available freqs */
- total_freq_num = ret;
-
- return 0;
-}
-
-/* Check rte_power_get_freq() */
-static int
-check_power_get_freq(void)
-{
- int ret;
- uint32_t count;
-
- /* test with an invalid lcore id */
- count = rte_power_get_freq(TEST_POWER_LCORE_INVALID);
- if (count < TEST_POWER_FREQS_NUM_MAX) {
- printf("Unexpectedly get freq index successfully on "
- "lcore %u\n", TEST_POWER_LCORE_INVALID);
- return -1;
- }
-
- count = rte_power_get_freq(TEST_POWER_LCORE_ID);
- if (count >= TEST_POWER_FREQS_NUM_MAX) {
- printf("Fail to get the freq index on lcore %u\n",
- TEST_POWER_LCORE_ID);
- return -1;
- }
-
- /* Check the current frequency */
- ret = check_cur_freq(TEST_POWER_LCORE_ID, count);
- if (ret < 0)
- return -1;
-
- return 0;
-}
-
-/* Check rte_power_set_freq() */
-static int
-check_power_set_freq(void)
-{
- int ret;
-
- /* test with an invalid lcore id */
- ret = rte_power_set_freq(TEST_POWER_LCORE_INVALID, 0);
- if (ret >= 0) {
- printf("Unexpectedly set freq index successfully on "
- "lcore %u\n", TEST_POWER_LCORE_INVALID);
- return -1;
- }
-
- /* test with an invalid freq index */
- ret = rte_power_set_freq(TEST_POWER_LCORE_ID,
- TEST_POWER_FREQS_NUM_MAX);
- if (ret >= 0) {
- printf("Unexpectedly set an invalid freq index (%u)"
- "successfully on lcore %u\n", TEST_POWER_FREQS_NUM_MAX,
- TEST_POWER_LCORE_ID);
- return -1;
- }
-
- /**
- * test with an invalid freq index which is right one bigger than
- * total number of freqs
- */
- ret = rte_power_set_freq(TEST_POWER_LCORE_ID, total_freq_num);
- if (ret >= 0) {
- printf("Unexpectedly set an invalid freq index (%u)"
- "successfully on lcore %u\n", total_freq_num,
- TEST_POWER_LCORE_ID);
- return -1;
- }
- ret = rte_power_set_freq(TEST_POWER_LCORE_ID, total_freq_num - 1);
- if (ret < 0) {
- printf("Fail to set freq index on lcore %u\n",
- TEST_POWER_LCORE_ID);
- return -1;
- }
-
- /* Check the current frequency */
- ret = check_cur_freq(TEST_POWER_LCORE_ID, total_freq_num - 1);
- if (ret < 0)
- return -1;
-
- return 0;
-}
-
-/* Check rte_power_freq_down() */
-static int
-check_power_freq_down(void)
-{
- int ret;
-
- /* test with an invalid lcore id */
- ret = rte_power_freq_down(TEST_POWER_LCORE_INVALID);
- if (ret >= 0) {
- printf("Unexpectedly scale down successfully the freq on "
- "lcore %u\n", TEST_POWER_LCORE_INVALID);
- return -1;
- }
-
- /* Scale down to min and then scale down one step */
- ret = rte_power_freq_min(TEST_POWER_LCORE_ID);
- if (ret < 0) {
- printf("Fail to scale down the freq to min on lcore %u\n",
- TEST_POWER_LCORE_ID);
- return -1;
- }
- ret = rte_power_freq_down(TEST_POWER_LCORE_ID);
- if (ret < 0) {
- printf("Fail to scale down the freq on lcore %u\n",
- TEST_POWER_LCORE_ID);
- return -1;
- }
-
- /* Check the current frequency */
- ret = check_cur_freq(TEST_POWER_LCORE_ID, total_freq_num - 1);
- if (ret < 0)
- return -1;
-
- /* Scale up to max and then scale down one step */
- ret = rte_power_freq_max(TEST_POWER_LCORE_ID);
- if (ret < 0) {
- printf("Fail to scale up the freq to max on lcore %u\n",
- TEST_POWER_LCORE_ID);
- return -1;
- }
- ret = rte_power_freq_down(TEST_POWER_LCORE_ID);
- if (ret < 0) {
- printf("Fail to scale down the freq on lcore %u\n",
- TEST_POWER_LCORE_ID);
- return -1;
- }
-
- /* Check the current frequency */
- ret = check_cur_freq(TEST_POWER_LCORE_ID, 1);
- if (ret < 0)
- return -1;
-
- return 0;
-}
-
-/* Check rte_power_freq_up() */
-static int
-check_power_freq_up(void)
-{
- int ret;
-
- /* test with an invalid lcore id */
- ret = rte_power_freq_up(TEST_POWER_LCORE_INVALID);
- if (ret >= 0) {
- printf("Unexpectedly scale up successfully the freq on %u\n",
- TEST_POWER_LCORE_INVALID);
- return -1;
- }
-
- /* Scale down to min and then scale up one step */
- ret = rte_power_freq_min(TEST_POWER_LCORE_ID);
- if (ret < 0) {
- printf("Fail to scale down the freq to min on lcore %u\n",
- TEST_POWER_LCORE_ID);
- return -1;
- }
- ret = rte_power_freq_up(TEST_POWER_LCORE_ID);
- if (ret < 0) {
- printf("Fail to scale up the freq on lcore %u\n",
- TEST_POWER_LCORE_ID);
- return -1;
- }
-
- /* Check the current frequency */
- ret = check_cur_freq(TEST_POWER_LCORE_ID, total_freq_num - 2);
- if (ret < 0)
- return -1;
-
- /* Scale up to max and then scale up one step */
- ret = rte_power_freq_max(TEST_POWER_LCORE_ID);
- if (ret < 0) {
- printf("Fail to scale up the freq to max on lcore %u\n",
- TEST_POWER_LCORE_ID);
- return -1;
- }
- ret = rte_power_freq_up(TEST_POWER_LCORE_ID);
- if (ret < 0) {
- printf("Fail to scale up the freq on lcore %u\n",
- TEST_POWER_LCORE_ID);
- return -1;
- }
-
- /* Check the current frequency */
- ret = check_cur_freq(TEST_POWER_LCORE_ID, 0);
- if (ret < 0)
- return -1;
-
- return 0;
-}
-
-/* Check rte_power_freq_max() */
-static int
-check_power_freq_max(void)
-{
- int ret;
-
- /* test with an invalid lcore id */
- ret = rte_power_freq_max(TEST_POWER_LCORE_INVALID);
- if (ret >= 0) {
- printf("Unexpectedly scale up successfully the freq to max on "
- "lcore %u\n", TEST_POWER_LCORE_INVALID);
- return -1;
- }
- ret = rte_power_freq_max(TEST_POWER_LCORE_ID);
- if (ret < 0) {
- printf("Fail to scale up the freq to max on lcore %u\n",
- TEST_POWER_LCORE_ID);
- return -1;
- }
-
- /* Check the current frequency */
- ret = check_cur_freq(TEST_POWER_LCORE_ID, 0);
- if (ret < 0)
- return -1;
-
- return 0;
-}
-
-/* Check rte_power_freq_min() */
-static int
-check_power_freq_min(void)
-{
- int ret;
-
- /* test with an invalid lcore id */
- ret = rte_power_freq_min(TEST_POWER_LCORE_INVALID);
- if (ret >= 0) {
- printf("Unexpectedly scale down successfully the freq to min "
- "on lcore %u\n", TEST_POWER_LCORE_INVALID);
- return -1;
- }
- ret = rte_power_freq_min(TEST_POWER_LCORE_ID);
- if (ret < 0) {
- printf("Fail to scale down the freq to min on lcore %u\n",
- TEST_POWER_LCORE_ID);
- return -1;
- }
-
- /* Check the current frequency */
- ret = check_cur_freq(TEST_POWER_LCORE_ID, total_freq_num - 1);
- if (ret < 0)
- return -1;
-
- return 0;
-}
-
-static int
-test_power_acpi_cpufreq(void)
-{
- int ret = -1;
- enum power_management_env env;
-
- ret = rte_power_set_env(PM_ENV_ACPI_CPUFREQ);
- if (ret != 0) {
- printf("Failed on setting environment to PM_ENV_ACPI_CPUFREQ, this "
- "may occur if environment is not configured correctly or "
- " operating in another valid Power management environment\n");
- return -1;
- }
-
- /* Test environment configuration */
- env = rte_power_get_env();
- if (env != PM_ENV_ACPI_CPUFREQ) {
- printf("Unexpectedly got an environment other than ACPI cpufreq\n");
- goto fail_all;
- }
-
- /* verify that function pointers are not NULL */
- if (rte_power_freqs == NULL) {
- printf("rte_power_freqs should not be NULL, environment has not been "
- "initialised\n");
- goto fail_all;
- }
- if (rte_power_get_freq == NULL) {
- printf("rte_power_get_freq should not be NULL, environment has not "
- "been initialised\n");
- goto fail_all;
- }
- if (rte_power_set_freq == NULL) {
- printf("rte_power_set_freq should not be NULL, environment has not "
- "been initialised\n");
- goto fail_all;
- }
- if (rte_power_freq_up == NULL) {
- printf("rte_power_freq_up should not be NULL, environment has not "
- "been initialised\n");
- goto fail_all;
- }
- if (rte_power_freq_down == NULL) {
- printf("rte_power_freq_down should not be NULL, environment has not "
- "been initialised\n");
- goto fail_all;
- }
- if (rte_power_freq_max == NULL) {
- printf("rte_power_freq_max should not be NULL, environment has not "
- "been initialised\n");
- goto fail_all;
- }
- if (rte_power_freq_min == NULL) {
- printf("rte_power_freq_min should not be NULL, environment has not "
- "been initialised\n");
- goto fail_all;
- }
-
- /* test of init power management for an invalid lcore */
- ret = rte_power_init(TEST_POWER_LCORE_INVALID);
- if (ret == 0) {
- printf("Unexpectedly initialise power management successfully "
- "for lcore %u\n", TEST_POWER_LCORE_INVALID);
- rte_power_unset_env();
- return -1;
- }
-
- /* Test initialisation of a valid lcore */
- ret = rte_power_init(TEST_POWER_LCORE_ID);
- if (ret < 0) {
- printf("Cannot initialise power management for lcore %u, this "
- "may occur if environment is not configured "
- "correctly(APCI cpufreq) or operating in another valid "
- "Power management environment\n", TEST_POWER_LCORE_ID);
- rte_power_unset_env();
- return -1;
- }
-
- /**
- * test of initialising power management for the lcore which has
- * been initialised
- */
- ret = rte_power_init(TEST_POWER_LCORE_ID);
- if (ret == 0) {
- printf("Unexpectedly init successfully power twice on "
- "lcore %u\n", TEST_POWER_LCORE_ID);
- goto fail_all;
- }
-
- ret = check_power_freqs();
- if (ret < 0)
- goto fail_all;
-
- if (total_freq_num < 2) {
- rte_power_exit(TEST_POWER_LCORE_ID);
- printf("Frequency can not be changed due to CPU itself\n");
- rte_power_unset_env();
- return 0;
- }
-
- ret = check_power_get_freq();
- if (ret < 0)
- goto fail_all;
-
- ret = check_power_set_freq();
- if (ret < 0)
- goto fail_all;
-
- ret = check_power_freq_down();
- if (ret < 0)
- goto fail_all;
-
- ret = check_power_freq_up();
- if (ret < 0)
- goto fail_all;
-
- ret = check_power_freq_max();
- if (ret < 0)
- goto fail_all;
-
- ret = check_power_freq_min();
- if (ret < 0)
- goto fail_all;
-
- ret = rte_power_exit(TEST_POWER_LCORE_ID);
- if (ret < 0) {
- printf("Cannot exit power management for lcore %u\n",
- TEST_POWER_LCORE_ID);
- rte_power_unset_env();
- return -1;
- }
-
- /**
- * test of exiting power management for the lcore which has been exited
- */
- ret = rte_power_exit(TEST_POWER_LCORE_ID);
- if (ret == 0) {
- printf("Unexpectedly exit successfully power management twice "
- "on lcore %u\n", TEST_POWER_LCORE_ID);
- rte_power_unset_env();
- return -1;
- }
-
- /* test of exit power management for an invalid lcore */
- ret = rte_power_exit(TEST_POWER_LCORE_INVALID);
- if (ret == 0) {
- printf("Unpectedly exit power management successfully for "
- "lcore %u\n", TEST_POWER_LCORE_INVALID);
- rte_power_unset_env();
- return -1;
- }
- rte_power_unset_env();
- return 0;
-
-fail_all:
- rte_power_exit(TEST_POWER_LCORE_ID);
- rte_power_unset_env();
- return -1;
-}
-
-REGISTER_TEST_COMMAND(power_acpi_cpufreq_autotest, test_power_acpi_cpufreq);
diff --git a/app/test/test_power_kvm_vm.c b/app/test/test_power_kvm_vm.c
deleted file mode 100644
index 253a5f8b..00000000
--- a/app/test/test_power_kvm_vm.c
+++ /dev/null
@@ -1,303 +0,0 @@
-/*-
- * BSD LICENSE
- *
- * Copyright(c) 2010-2014 Intel Corporation. All rights reserved.
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * * Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * * Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in
- * the documentation and/or other materials provided with the
- * distribution.
- * * Neither the name of Intel Corporation nor the names of its
- * contributors may be used to endorse or promote products derived
- * from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
- * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
- * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#include <stdio.h>
-#include <stdint.h>
-#include <unistd.h>
-#include <limits.h>
-#include <string.h>
-
-#include "test.h"
-
-#include <rte_power.h>
-
-#define TEST_POWER_VM_LCORE_ID 0U
-#define TEST_POWER_VM_LCORE_OUT_OF_BOUNDS (RTE_MAX_LCORE+1)
-#define TEST_POWER_VM_LCORE_INVALID 1U
-
-static int
-test_power_kvm_vm(void)
-{
- int ret;
- enum power_management_env env;
-
- ret = rte_power_set_env(PM_ENV_KVM_VM);
- if (ret != 0) {
- printf("Failed on setting environment to PM_ENV_KVM_VM\n");
- return -1;
- }
-
- /* Test environment configuration */
- env = rte_power_get_env();
- if (env != PM_ENV_KVM_VM) {
- printf("Unexpectedly got a Power Management environment other than "
- "KVM VM\n");
- rte_power_unset_env();
- return -1;
- }
-
- /* verify that function pointers are not NULL */
- if (rte_power_freqs == NULL) {
- printf("rte_power_freqs should not be NULL, environment has not been "
- "initialised\n");
- return -1;
- }
- if (rte_power_get_freq == NULL) {
- printf("rte_power_get_freq should not be NULL, environment has not "
- "been initialised\n");
- return -1;
- }
- if (rte_power_set_freq == NULL) {
- printf("rte_power_set_freq should not be NULL, environment has not "
- "been initialised\n");
- return -1;
- }
- if (rte_power_freq_up == NULL) {
- printf("rte_power_freq_up should not be NULL, environment has not "
- "been initialised\n");
- return -1;
- }
- if (rte_power_freq_down == NULL) {
- printf("rte_power_freq_down should not be NULL, environment has not "
- "been initialised\n");
- return -1;
- }
- if (rte_power_freq_max == NULL) {
- printf("rte_power_freq_max should not be NULL, environment has not "
- "been initialised\n");
- return -1;
- }
- if (rte_power_freq_min == NULL) {
- printf("rte_power_freq_min should not be NULL, environment has not "
- "been initialised\n");
- return -1;
- }
- /* Test initialisation of an out of bounds lcore */
- ret = rte_power_init(TEST_POWER_VM_LCORE_OUT_OF_BOUNDS);
- if (ret != -1) {
- printf("rte_power_init unexpectedly succeeded on an invalid lcore %u\n",
- TEST_POWER_VM_LCORE_OUT_OF_BOUNDS);
- rte_power_unset_env();
- return -1;
- }
-
- /* Test initialisation of a valid lcore */
- ret = rte_power_init(TEST_POWER_VM_LCORE_ID);
- if (ret < 0) {
- printf("Cannot initialise power management for lcore %u, this "
- "may occur if environment is not configured "
- "correctly(KVM VM) or operating in another valid "
- "Power management environment\n", TEST_POWER_VM_LCORE_ID);
- rte_power_unset_env();
- return -1;
- }
-
- /* Test initialisation of previously initialised lcore */
- ret = rte_power_init(TEST_POWER_VM_LCORE_ID);
- if (ret == 0) {
- printf("rte_power_init unexpectedly succeeded on calling init twice on"
- " lcore %u\n", TEST_POWER_VM_LCORE_ID);
- goto fail_all;
- }
-
- /* Test frequency up of invalid lcore */
- ret = rte_power_freq_up(TEST_POWER_VM_LCORE_OUT_OF_BOUNDS);
- if (ret == 1) {
- printf("rte_power_freq_up unexpectedly succeeded on invalid lcore %u\n",
- TEST_POWER_VM_LCORE_OUT_OF_BOUNDS);
- goto fail_all;
- }
-
- /* Test frequency down of invalid lcore */
- ret = rte_power_freq_down(TEST_POWER_VM_LCORE_OUT_OF_BOUNDS);
- if (ret == 1) {
- printf("rte_power_freq_down unexpectedly succeeded on invalid lcore "
- "%u\n", TEST_POWER_VM_LCORE_OUT_OF_BOUNDS);
- goto fail_all;
- }
-
- /* Test frequency min of invalid lcore */
- ret = rte_power_freq_min(TEST_POWER_VM_LCORE_OUT_OF_BOUNDS);
- if (ret == 1) {
- printf("rte_power_freq_min unexpectedly succeeded on invalid lcore "
- "%u\n", TEST_POWER_VM_LCORE_OUT_OF_BOUNDS);
- goto fail_all;
- }
-
- /* Test frequency max of invalid lcore */
- ret = rte_power_freq_max(TEST_POWER_VM_LCORE_OUT_OF_BOUNDS);
- if (ret == 1) {
- printf("rte_power_freq_max unexpectedly succeeded on invalid lcore "
- "%u\n", TEST_POWER_VM_LCORE_OUT_OF_BOUNDS);
- goto fail_all;
- }
-
- /* Test frequency up of valid but uninitialised lcore */
- ret = rte_power_freq_up(TEST_POWER_VM_LCORE_INVALID);
- if (ret == 1) {
- printf("rte_power_freq_up unexpectedly succeeded on invalid lcore %u\n",
- TEST_POWER_VM_LCORE_INVALID);
- goto fail_all;
- }
-
- /* Test frequency down of valid but uninitialised lcore */
- ret = rte_power_freq_down(TEST_POWER_VM_LCORE_INVALID);
- if (ret == 1) {
- printf("rte_power_freq_down unexpectedly succeeded on invalid lcore "
- "%u\n", TEST_POWER_VM_LCORE_INVALID);
- goto fail_all;
- }
-
- /* Test frequency min of valid but uninitialised lcore */
- ret = rte_power_freq_min(TEST_POWER_VM_LCORE_INVALID);
- if (ret == 1) {
- printf("rte_power_freq_min unexpectedly succeeded on invalid lcore "
- "%u\n", TEST_POWER_VM_LCORE_INVALID);
- goto fail_all;
- }
-
- /* Test frequency max of valid but uninitialised lcore */
- ret = rte_power_freq_max(TEST_POWER_VM_LCORE_INVALID);
- if (ret == 1) {
- printf("rte_power_freq_max unexpectedly succeeded on invalid lcore "
- "%u\n", TEST_POWER_VM_LCORE_INVALID);
- goto fail_all;
- }
-
- /* Test frequency up of valid lcore */
- ret = rte_power_freq_up(TEST_POWER_VM_LCORE_ID);
- if (ret != 1) {
- printf("rte_power_freq_up unexpectedly failed on valid lcore %u\n",
- TEST_POWER_VM_LCORE_ID);
- goto fail_all;
- }
-
- /* Test frequency down of valid lcore */
- ret = rte_power_freq_down(TEST_POWER_VM_LCORE_ID);
- if (ret != 1) {
- printf("rte_power_freq_down unexpectedly failed on valid lcore "
- "%u\n", TEST_POWER_VM_LCORE_ID);
- goto fail_all;
- }
-
- /* Test frequency min of valid lcore */
- ret = rte_power_freq_min(TEST_POWER_VM_LCORE_ID);
- if (ret != 1) {
- printf("rte_power_freq_min unexpectedly failed on valid lcore "
- "%u\n", TEST_POWER_VM_LCORE_ID);
- goto fail_all;
- }
-
- /* Test frequency max of valid lcore */
- ret = rte_power_freq_max(TEST_POWER_VM_LCORE_ID);
- if (ret != 1) {
- printf("rte_power_freq_max unexpectedly failed on valid lcore "
- "%u\n", TEST_POWER_VM_LCORE_ID);
- goto fail_all;
- }
-
- /* Test unsupported rte_power_freqs */
- ret = rte_power_freqs(TEST_POWER_VM_LCORE_ID, NULL, 0);
- if (ret != -ENOTSUP) {
- printf("rte_power_freqs did not return the expected -ENOTSUP(%d) but "
- "returned %d\n", -ENOTSUP, ret);
- goto fail_all;
- }
-
- /* Test unsupported rte_power_get_freq */
- ret = rte_power_get_freq(TEST_POWER_VM_LCORE_ID);
- if (ret != -ENOTSUP) {
- printf("rte_power_get_freq did not return the expected -ENOTSUP(%d) but"
- " returned %d for lcore %u\n",
- -ENOTSUP, ret, TEST_POWER_VM_LCORE_ID);
- goto fail_all;
- }
-
- /* Test unsupported rte_power_set_freq */
- ret = rte_power_set_freq(TEST_POWER_VM_LCORE_ID, 0);
- if (ret != -ENOTSUP) {
- printf("rte_power_set_freq did not return the expected -ENOTSUP(%d) but"
- " returned %d for lcore %u\n",
- -ENOTSUP, ret, TEST_POWER_VM_LCORE_ID);
- goto fail_all;
- }
-
- /* Test removing of an lcore */
- ret = rte_power_exit(TEST_POWER_VM_LCORE_ID);
- if (ret != 0) {
- printf("rte_power_exit unexpectedly failed on valid lcore %u,"
- "please ensure that the environment has been configured "
- "correctly\n", TEST_POWER_VM_LCORE_ID);
- goto fail_all;
- }
-
- /* Test frequency up of previously removed lcore */
- ret = rte_power_freq_up(TEST_POWER_VM_LCORE_ID);
- if (ret == 0) {
- printf("rte_power_freq_up unexpectedly succeeded on a removed "
- "lcore %u\n", TEST_POWER_VM_LCORE_ID);
- return -1;
- }
-
- /* Test frequency down of previously removed lcore */
- ret = rte_power_freq_down(TEST_POWER_VM_LCORE_ID);
- if (ret == 0) {
- printf("rte_power_freq_down unexpectedly succeeded on a removed "
- "lcore %u\n", TEST_POWER_VM_LCORE_ID);
- return -1;
- }
-
- /* Test frequency min of previously removed lcore */
- ret = rte_power_freq_min(TEST_POWER_VM_LCORE_ID);
- if (ret == 0) {
- printf("rte_power_freq_min unexpectedly succeeded on a removed "
- "lcore %u\n", TEST_POWER_VM_LCORE_ID);
- return -1;
- }
-
- /* Test frequency max of previously removed lcore */
- ret = rte_power_freq_max(TEST_POWER_VM_LCORE_ID);
- if (ret == 0) {
- printf("rte_power_freq_max unexpectedly succeeded on a removed "
- "lcore %u\n", TEST_POWER_VM_LCORE_ID);
- return -1;
- }
- rte_power_unset_env();
- return 0;
-fail_all:
- rte_power_exit(TEST_POWER_VM_LCORE_ID);
- rte_power_unset_env();
- return -1;
-}
-
-REGISTER_TEST_COMMAND(power_kvm_vm_autotest, test_power_kvm_vm);
diff --git a/app/test/test_prefetch.c b/app/test/test_prefetch.c
deleted file mode 100644
index 80afaaf3..00000000
--- a/app/test/test_prefetch.c
+++ /dev/null
@@ -1,61 +0,0 @@
-/*-
- * BSD LICENSE
- *
- * Copyright(c) 2010-2014 Intel Corporation. All rights reserved.
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * * Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * * Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in
- * the documentation and/or other materials provided with the
- * distribution.
- * * Neither the name of Intel Corporation nor the names of its
- * contributors may be used to endorse or promote products derived
- * from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
- * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
- * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#include <stdio.h>
-#include <stdint.h>
-
-#include <rte_prefetch.h>
-
-#include "test.h"
-
-/*
- * Prefetch test
- * =============
- *
- * - Just test that the macro can be called and validate the compilation.
- * The test always return success.
- */
-
-static int
-test_prefetch(void)
-{
- int a;
-
- rte_prefetch0(&a);
- rte_prefetch1(&a);
- rte_prefetch2(&a);
-
- return 0;
-}
-
-REGISTER_TEST_COMMAND(prefetch_autotest, test_prefetch);
diff --git a/app/test/test_red.c b/app/test/test_red.c
deleted file mode 100644
index 348075dc..00000000
--- a/app/test/test_red.c
+++ /dev/null
@@ -1,1885 +0,0 @@
-/*-
- * BSD LICENSE
- *
- * Copyright(c) 2010-2014 Intel Corporation. All rights reserved.
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * * Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * * Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in
- * the documentation and/or other materials provided with the
- * distribution.
- * * Neither the name of Intel Corporation nor the names of its
- * contributors may be used to endorse or promote products derived
- * from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
- * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
- * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#include <stdlib.h>
-#include <stdio.h>
-#include <string.h>
-#include <stdint.h>
-#include <unistd.h>
-#include <inttypes.h>
-#include <sys/time.h>
-#include <time.h>
-#include <math.h>
-
-#include "test.h"
-
-#include <rte_red.h>
-
-#ifdef __INTEL_COMPILER
-#pragma warning(disable:2259) /* conversion may lose significant bits */
-#pragma warning(disable:181) /* Arg incompatible with format string */
-#endif
-
-#define TEST_HZ_PER_KHZ 1000
-#define TEST_NSEC_MARGIN 500 /**< nanosecond margin when calculating clk freq */
-
-#define MAX_QEMPTY_TIME_MSEC 50000
-#define MSEC_PER_SEC 1000 /**< Milli-seconds per second */
-#define USEC_PER_MSEC 1000 /**< Micro-seconds per milli-second */
-#define USEC_PER_SEC 1000000 /**< Micro-seconds per second */
-#define NSEC_PER_SEC (USEC_PER_SEC * 1000) /**< Nano-seconds per second */
-
-/**< structures for testing rte_red performance and function */
-struct test_rte_red_config { /**< Test structure for RTE_RED config */
- struct rte_red_config *rconfig; /**< RTE_RED configuration parameters */
- uint8_t num_cfg; /**< Number of RTE_RED configs to test */
- uint8_t *wq_log2; /**< Test wq_log2 value to use */
- uint32_t min_th; /**< Queue minimum threshold */
- uint32_t max_th; /**< Queue maximum threshold */
- uint8_t *maxp_inv; /**< Inverse mark probability */
-};
-
-struct test_queue { /**< Test structure for RTE_RED Queues */
- struct rte_red *rdata; /**< RTE_RED runtime data */
- uint32_t num_queues; /**< Number of RTE_RED queues to test */
- uint32_t *qconfig; /**< Configuration of RTE_RED queues for test */
- uint32_t *q; /**< Queue size */
- uint32_t q_ramp_up; /**< Num of enqueues to ramp up the queue */
- uint32_t avg_ramp_up; /**< Average num of enqueues to ramp up the queue */
- uint32_t avg_tolerance; /**< Tolerance in queue average */
- double drop_tolerance; /**< Drop tolerance of packets not enqueued */
-};
-
-struct test_var { /**< Test variables used for testing RTE_RED */
- uint32_t wait_usec; /**< Micro second wait interval */
- uint32_t num_iterations; /**< Number of test iterations */
- uint32_t num_ops; /**< Number of test operations */
- uint64_t clk_freq; /**< CPU clock frequency */
- uint32_t sleep_sec; /**< Seconds to sleep */
- uint32_t *dropped; /**< Test operations dropped */
- uint32_t *enqueued; /**< Test operations enqueued */
-};
-
-struct test_config { /**< Master test structure for RTE_RED */
- const char *ifname; /**< Interface name */
- const char *msg; /**< Test message for display */
- const char *htxt; /**< Header txt display for result output */
- struct test_rte_red_config *tconfig; /**< Test structure for RTE_RED config */
- struct test_queue *tqueue; /**< Test structure for RTE_RED Queues */
- struct test_var *tvar; /**< Test variables used for testing RTE_RED */
- uint32_t *tlevel; /**< Queue levels */
-};
-
-enum test_result {
- FAIL = 0,
- PASS
-};
-
-/**< Test structure to define tests to run */
-struct tests {
- struct test_config *testcfg;
- enum test_result (*testfn)(struct test_config *);
-};
-
-struct rdtsc_prof {
- uint64_t clk_start;
- uint64_t clk_min; /**< min clocks */
- uint64_t clk_max; /**< max clocks */
- uint64_t clk_avgc; /**< count to calc average */
- double clk_avg; /**< cumulative sum to calc average */
- const char *name;
-};
-
-static const uint64_t port_speed_bytes = (10ULL*1000ULL*1000ULL*1000ULL)/8ULL;
-static double inv_cycles_per_byte = 0;
-static double pkt_time_usec = 0;
-
-static void init_port_ts(uint64_t cpu_clock)
-{
- double cycles_per_byte = (double)(cpu_clock) / (double)(port_speed_bytes);
- inv_cycles_per_byte = 1.0 / cycles_per_byte;
- pkt_time_usec = 1000000.0 / ((double)port_speed_bytes / (double)RTE_RED_S);
-}
-
-static uint64_t get_port_ts(void)
-{
- return (uint64_t)((double)rte_rdtsc() * inv_cycles_per_byte);
-}
-
-static void rdtsc_prof_init(struct rdtsc_prof *p, const char *name)
-{
- p->clk_min = (uint64_t)(-1LL);
- p->clk_max = 0;
- p->clk_avg = 0;
- p->clk_avgc = 0;
- p->name = name;
-}
-
-static inline void rdtsc_prof_start(struct rdtsc_prof *p)
-{
- p->clk_start = rte_rdtsc_precise();
-}
-
-static inline void rdtsc_prof_end(struct rdtsc_prof *p)
-{
- uint64_t clk_start = rte_rdtsc() - p->clk_start;
-
- p->clk_avgc++;
- p->clk_avg += (double) clk_start;
-
- if (clk_start > p->clk_max)
- p->clk_max = clk_start;
- if (clk_start < p->clk_min)
- p->clk_min = clk_start;
-}
-
-static void rdtsc_prof_print(struct rdtsc_prof *p)
-{
- if (p->clk_avgc>0) {
- printf("RDTSC stats for %s: n=%" PRIu64 ", min=%" PRIu64 ", max=%" PRIu64 ", avg=%.1f\n",
- p->name,
- p->clk_avgc,
- p->clk_min,
- p->clk_max,
- (p->clk_avg / ((double) p->clk_avgc)));
- }
-}
-
-static uint32_t rte_red_get_avg_int(const struct rte_red_config *red_cfg,
- struct rte_red *red)
-{
- /**
- * scale by 1/n and convert from fixed-point to integer
- */
- return red->avg >> (RTE_RED_SCALING + red_cfg->wq_log2);
-}
-
-static double rte_red_get_avg_float(const struct rte_red_config *red_cfg,
- struct rte_red *red)
-{
- /**
- * scale by 1/n and convert from fixed-point to floating-point
- */
- return ldexp((double)red->avg, -(RTE_RED_SCALING + red_cfg->wq_log2));
-}
-
-static void rte_red_set_avg_int(const struct rte_red_config *red_cfg,
- struct rte_red *red,
- uint32_t avg)
-{
- /**
- * scale by n and convert from integer to fixed-point
- */
- red->avg = avg << (RTE_RED_SCALING + red_cfg->wq_log2);
-}
-
-static double calc_exp_avg_on_empty(double avg, uint32_t n, uint32_t time_diff)
-{
- return avg * pow((1.0 - 1.0 / (double)n), (double)time_diff / pkt_time_usec);
-}
-
-static double calc_drop_rate(uint32_t enqueued, uint32_t dropped)
-{
- return (double)dropped / ((double)enqueued + (double)dropped);
-}
-
-/**
- * calculate the drop probability
- */
-static double calc_drop_prob(uint32_t min_th, uint32_t max_th,
- uint32_t maxp_inv, uint32_t avg)
-{
- double drop_prob = 0.0;
-
- if (avg < min_th) {
- drop_prob = 0.0;
- } else if (avg < max_th) {
- drop_prob = (1.0 / (double)maxp_inv)
- * ((double)(avg - min_th)
- / (double)(max_th - min_th));
- } else {
- drop_prob = 1.0;
- }
- return drop_prob;
-}
-
-/**
- * check if drop rate matches drop probability within tolerance
- */
-static int check_drop_rate(double *diff, double drop_rate, double drop_prob, double tolerance)
-{
- double abs_diff = 0.0;
- int ret = 1;
-
- abs_diff = fabs(drop_rate - drop_prob);
- if ((int)abs_diff == 0) {
- *diff = 0.0;
- } else {
- *diff = (abs_diff / drop_prob) * 100.0;
- if (*diff > tolerance) {
- ret = 0;
- }
- }
- return ret;
-}
-
-/**
- * check if average queue size is within tolerance
- */
-static int check_avg(double *diff, double avg, double exp_avg, double tolerance)
-{
- double abs_diff = 0.0;
- int ret = 1;
-
- abs_diff = fabs(avg - exp_avg);
- if ((int)abs_diff == 0) {
- *diff = 0.0;
- } else {
- *diff = (abs_diff / exp_avg) * 100.0;
- if (*diff > tolerance) {
- ret = 0;
- }
- }
- return ret;
-}
-
-/**
- * initialize the test rte_red config
- */
-static enum test_result
-test_rte_red_init(struct test_config *tcfg)
-{
- unsigned i = 0;
-
- tcfg->tvar->clk_freq = rte_get_timer_hz();
- init_port_ts( tcfg->tvar->clk_freq );
-
- for (i = 0; i < tcfg->tconfig->num_cfg; i++) {
- if (rte_red_config_init(&tcfg->tconfig->rconfig[i],
- (uint16_t)tcfg->tconfig->wq_log2[i],
- (uint16_t)tcfg->tconfig->min_th,
- (uint16_t)tcfg->tconfig->max_th,
- (uint16_t)tcfg->tconfig->maxp_inv[i]) != 0) {
- return FAIL;
- }
- }
-
- *tcfg->tqueue->q = 0;
- *tcfg->tvar->dropped = 0;
- *tcfg->tvar->enqueued = 0;
- return PASS;
-}
-
-/**
- * enqueue until actual queue size reaches target level
- */
-static int
-increase_actual_qsize(struct rte_red_config *red_cfg,
- struct rte_red *red,
- uint32_t *q,
- uint32_t level,
- uint32_t attempts)
-{
- uint32_t i = 0;
-
- for (i = 0; i < attempts; i++) {
- int ret = 0;
-
- /**
- * enqueue
- */
- ret = rte_red_enqueue(red_cfg, red, *q, get_port_ts() );
- if (ret == 0) {
- if (++(*q) >= level)
- break;
- }
- }
- /**
- * check if target actual queue size has been reached
- */
- if (*q != level)
- return -1;
- /**
- * success
- */
- return 0;
-}
-
-/**
- * enqueue until average queue size reaches target level
- */
-static int
-increase_average_qsize(struct rte_red_config *red_cfg,
- struct rte_red *red,
- uint32_t *q,
- uint32_t level,
- uint32_t num_ops)
-{
- uint32_t avg = 0;
- uint32_t i = 0;
-
- for (i = 0; i < num_ops; i++) {
- /**
- * enqueue
- */
- rte_red_enqueue(red_cfg, red, *q, get_port_ts());
- }
- /**
- * check if target average queue size has been reached
- */
- avg = rte_red_get_avg_int(red_cfg, red);
- if (avg != level)
- return -1;
- /**
- * success
- */
- return 0;
-}
-
-/**
- * setup default values for the functional test structures
- */
-static struct rte_red_config ft_wrconfig[1];
-static struct rte_red ft_rtdata[1];
-static uint8_t ft_wq_log2[] = {9};
-static uint8_t ft_maxp_inv[] = {10};
-static uint32_t ft_qconfig[] = {0, 0, 1, 1};
-static uint32_t ft_q[] ={0};
-static uint32_t ft_dropped[] ={0};
-static uint32_t ft_enqueued[] ={0};
-
-static struct test_rte_red_config ft_tconfig = {
- .rconfig = ft_wrconfig,
- .num_cfg = RTE_DIM(ft_wrconfig),
- .wq_log2 = ft_wq_log2,
- .min_th = 32,
- .max_th = 128,
- .maxp_inv = ft_maxp_inv,
-};
-
-static struct test_queue ft_tqueue = {
- .rdata = ft_rtdata,
- .num_queues = RTE_DIM(ft_rtdata),
- .qconfig = ft_qconfig,
- .q = ft_q,
- .q_ramp_up = 1000000,
- .avg_ramp_up = 1000000,
- .avg_tolerance = 5, /* 5 percent */
- .drop_tolerance = 50, /* 50 percent */
-};
-
-static struct test_var ft_tvar = {
- .wait_usec = 10000,
- .num_iterations = 5,
- .num_ops = 10000,
- .clk_freq = 0,
- .dropped = ft_dropped,
- .enqueued = ft_enqueued,
- .sleep_sec = (MAX_QEMPTY_TIME_MSEC / MSEC_PER_SEC) + 2,
-};
-
-/**
- * functional test enqueue/dequeue packets
- */
-static void enqueue_dequeue_func(struct rte_red_config *red_cfg,
- struct rte_red *red,
- uint32_t *q,
- uint32_t num_ops,
- uint32_t *enqueued,
- uint32_t *dropped)
-{
- uint32_t i = 0;
-
- for (i = 0; i < num_ops; i++) {
- int ret = 0;
-
- /**
- * enqueue
- */
- ret = rte_red_enqueue(red_cfg, red, *q, get_port_ts());
- if (ret == 0)
- (*enqueued)++;
- else
- (*dropped)++;
- }
-}
-
-/**
- * Test F1: functional test 1
- */
-static uint32_t ft1_tlevels[] = {6, 12, 18, 24, 30, 36, 42, 48, 54, 60, 66, 72, 78, 84, 90, 96, 102, 108, 114, 120, 126, 132, 138, 144};
-
-static struct test_config func_test1_config = {
- .ifname = "functional test 1 interface",
- .msg = "functional test 1 : use one rte_red configuration,\n"
- " increase average queue size to various levels,\n"
- " compare drop rate to drop probability\n\n",
- .htxt = " "
- "avg queue size "
- "enqueued "
- "dropped "
- "drop prob % "
- "drop rate % "
- "diff % "
- "tolerance % "
- "\n",
- .tconfig = &ft_tconfig,
- .tqueue = &ft_tqueue,
- .tvar = &ft_tvar,
- .tlevel = ft1_tlevels,
-};
-
-static enum test_result func_test1(struct test_config *tcfg)
-{
- enum test_result result = PASS;
- uint32_t i = 0;
-
- printf("%s", tcfg->msg);
-
- if (test_rte_red_init(tcfg) != PASS) {
- result = FAIL;
- goto out;
- }
-
- printf("%s", tcfg->htxt);
-
- for (i = 0; i < RTE_DIM(ft1_tlevels); i++) {
- const char *label = NULL;
- uint32_t avg = 0;
- double drop_rate = 0.0;
- double drop_prob = 0.0;
- double diff = 0.0;
-
- /**
- * reset rte_red run-time data
- */
- rte_red_rt_data_init(tcfg->tqueue->rdata);
- *tcfg->tvar->enqueued = 0;
- *tcfg->tvar->dropped = 0;
-
- if (increase_actual_qsize(tcfg->tconfig->rconfig,
- tcfg->tqueue->rdata,
- tcfg->tqueue->q,
- tcfg->tlevel[i],
- tcfg->tqueue->q_ramp_up) != 0) {
- result = FAIL;
- goto out;
- }
-
- if (increase_average_qsize(tcfg->tconfig->rconfig,
- tcfg->tqueue->rdata,
- tcfg->tqueue->q,
- tcfg->tlevel[i],
- tcfg->tqueue->avg_ramp_up) != 0) {
- result = FAIL;
- goto out;
- }
-
- enqueue_dequeue_func(tcfg->tconfig->rconfig,
- tcfg->tqueue->rdata,
- tcfg->tqueue->q,
- tcfg->tvar->num_ops,
- tcfg->tvar->enqueued,
- tcfg->tvar->dropped);
-
- avg = rte_red_get_avg_int(tcfg->tconfig->rconfig, tcfg->tqueue->rdata);
- if (avg != tcfg->tlevel[i]) {
- fprintf(stderr, "Fail: avg != level\n");
- result = FAIL;
- }
-
- drop_rate = calc_drop_rate(*tcfg->tvar->enqueued, *tcfg->tvar->dropped);
- drop_prob = calc_drop_prob(tcfg->tconfig->min_th, tcfg->tconfig->max_th,
- *tcfg->tconfig->maxp_inv, tcfg->tlevel[i]);
- if (!check_drop_rate(&diff, drop_rate, drop_prob, (double)tcfg->tqueue->drop_tolerance))
- result = FAIL;
-
- if (tcfg->tlevel[i] == tcfg->tconfig->min_th)
- label = "min thresh: ";
- else if (tcfg->tlevel[i] == tcfg->tconfig->max_th)
- label = "max thresh: ";
- else
- label = " ";
- printf("%s%-15u%-15u%-15u%-15.4lf%-15.4lf%-15.4lf%-15.4lf\n",
- label, avg, *tcfg->tvar->enqueued, *tcfg->tvar->dropped,
- drop_prob * 100.0, drop_rate * 100.0, diff,
- (double)tcfg->tqueue->drop_tolerance);
- }
-out:
- return result;
-}
-
-/**
- * Test F2: functional test 2
- */
-static uint32_t ft2_tlevel[] = {127};
-static uint8_t ft2_wq_log2[] = {9, 9, 9, 9, 9, 9, 9, 9, 9, 9};
-static uint8_t ft2_maxp_inv[] = {10, 20, 30, 40, 50, 60, 70, 80, 90, 100};
-static struct rte_red_config ft2_rconfig[10];
-
-static struct test_rte_red_config ft2_tconfig = {
- .rconfig = ft2_rconfig,
- .num_cfg = RTE_DIM(ft2_rconfig),
- .wq_log2 = ft2_wq_log2,
- .min_th = 32,
- .max_th = 128,
- .maxp_inv = ft2_maxp_inv,
-};
-
-static struct test_config func_test2_config = {
- .ifname = "functional test 2 interface",
- .msg = "functional test 2 : use several RED configurations,\n"
- " increase average queue size to just below maximum threshold,\n"
- " compare drop rate to drop probability\n\n",
- .htxt = "RED config "
- "avg queue size "
- "min threshold "
- "max threshold "
- "drop prob % "
- "drop rate % "
- "diff % "
- "tolerance % "
- "\n",
- .tconfig = &ft2_tconfig,
- .tqueue = &ft_tqueue,
- .tvar = &ft_tvar,
- .tlevel = ft2_tlevel,
-};
-
-static enum test_result func_test2(struct test_config *tcfg)
-{
- enum test_result result = PASS;
- double prev_drop_rate = 1.0;
- uint32_t i = 0;
-
- printf("%s", tcfg->msg);
-
- if (test_rte_red_init(tcfg) != PASS) {
- result = FAIL;
- goto out;
- }
- rte_red_rt_data_init(tcfg->tqueue->rdata);
-
- if (increase_actual_qsize(tcfg->tconfig->rconfig,
- tcfg->tqueue->rdata,
- tcfg->tqueue->q,
- *tcfg->tlevel,
- tcfg->tqueue->q_ramp_up) != 0) {
- result = FAIL;
- goto out;
- }
-
- if (increase_average_qsize(tcfg->tconfig->rconfig,
- tcfg->tqueue->rdata,
- tcfg->tqueue->q,
- *tcfg->tlevel,
- tcfg->tqueue->avg_ramp_up) != 0) {
- result = FAIL;
- goto out;
- }
- printf("%s", tcfg->htxt);
-
- for (i = 0; i < tcfg->tconfig->num_cfg; i++) {
- uint32_t avg = 0;
- double drop_rate = 0.0;
- double drop_prob = 0.0;
- double diff = 0.0;
-
- *tcfg->tvar->dropped = 0;
- *tcfg->tvar->enqueued = 0;
-
- enqueue_dequeue_func(&tcfg->tconfig->rconfig[i],
- tcfg->tqueue->rdata,
- tcfg->tqueue->q,
- tcfg->tvar->num_ops,
- tcfg->tvar->enqueued,
- tcfg->tvar->dropped);
-
- avg = rte_red_get_avg_int(&tcfg->tconfig->rconfig[i], tcfg->tqueue->rdata);
- if (avg != *tcfg->tlevel)
- result = FAIL;
-
- drop_rate = calc_drop_rate(*tcfg->tvar->enqueued, *tcfg->tvar->dropped);
- drop_prob = calc_drop_prob(tcfg->tconfig->min_th, tcfg->tconfig->max_th,
- tcfg->tconfig->maxp_inv[i], *tcfg->tlevel);
- if (!check_drop_rate(&diff, drop_rate, drop_prob, (double)tcfg->tqueue->drop_tolerance))
- result = FAIL;
- /**
- * drop rate should decrease as maxp_inv increases
- */
- if (drop_rate > prev_drop_rate)
- result = FAIL;
- prev_drop_rate = drop_rate;
-
- printf("%-15u%-15u%-15u%-15u%-15.4lf%-15.4lf%-15.4lf%-15.4lf\n",
- i, avg, tcfg->tconfig->min_th, tcfg->tconfig->max_th,
- drop_prob * 100.0, drop_rate * 100.0, diff,
- (double)tcfg->tqueue->drop_tolerance);
- }
-out:
- return result;
-}
-
-/**
- * Test F3: functional test 3
- */
-static uint32_t ft3_tlevel[] = {1022};
-
-static struct test_rte_red_config ft3_tconfig = {
- .rconfig = ft_wrconfig,
- .num_cfg = RTE_DIM(ft_wrconfig),
- .wq_log2 = ft_wq_log2,
- .min_th = 32,
- .max_th = 1023,
- .maxp_inv = ft_maxp_inv,
-};
-
-static struct test_config func_test3_config = {
- .ifname = "functional test 3 interface",
- .msg = "functional test 3 : use one RED configuration,\n"
- " increase average queue size to target level,\n"
- " dequeue all packets until queue is empty,\n"
- " confirm that average queue size is computed correctly while queue is empty\n\n",
- .htxt = "q avg before "
- "q avg after "
- "expected "
- "difference % "
- "tolerance % "
- "result "
- "\n",
- .tconfig = &ft3_tconfig,
- .tqueue = &ft_tqueue,
- .tvar = &ft_tvar,
- .tlevel = ft3_tlevel,
-};
-
-static enum test_result func_test3(struct test_config *tcfg)
-{
- enum test_result result = PASS;
- uint32_t i = 0;
-
- printf("%s", tcfg->msg);
-
- if (test_rte_red_init(tcfg) != PASS) {
- result = FAIL;
- goto out;
- }
-
- rte_red_rt_data_init(tcfg->tqueue->rdata);
-
- if (increase_actual_qsize(tcfg->tconfig->rconfig,
- tcfg->tqueue->rdata,
- tcfg->tqueue->q,
- *tcfg->tlevel,
- tcfg->tqueue->q_ramp_up) != 0) {
- result = FAIL;
- goto out;
- }
-
- if (increase_average_qsize(tcfg->tconfig->rconfig,
- tcfg->tqueue->rdata,
- tcfg->tqueue->q,
- *tcfg->tlevel,
- tcfg->tqueue->avg_ramp_up) != 0) {
- result = FAIL;
- goto out;
- }
-
- printf("%s", tcfg->htxt);
-
- for (i = 0; i < tcfg->tvar->num_iterations; i++) {
- double avg_before = 0;
- double avg_after = 0;
- double exp_avg = 0;
- double diff = 0.0;
-
- avg_before = rte_red_get_avg_float(tcfg->tconfig->rconfig, tcfg->tqueue->rdata);
-
- /**
- * empty the queue
- */
- *tcfg->tqueue->q = 0;
- rte_red_mark_queue_empty(tcfg->tqueue->rdata, get_port_ts());
-
- rte_delay_us(tcfg->tvar->wait_usec);
-
- /**
- * enqueue one packet to recalculate average queue size
- */
- if (rte_red_enqueue(tcfg->tconfig->rconfig,
- tcfg->tqueue->rdata,
- *tcfg->tqueue->q,
- get_port_ts()) == 0) {
- (*tcfg->tqueue->q)++;
- } else {
- printf("%s:%d: packet enqueued on empty queue was dropped\n", __func__, __LINE__);
- result = FAIL;
- }
-
- exp_avg = calc_exp_avg_on_empty(avg_before,
- (1 << *tcfg->tconfig->wq_log2),
- tcfg->tvar->wait_usec);
- avg_after = rte_red_get_avg_float(tcfg->tconfig->rconfig,
- tcfg->tqueue->rdata);
- if (!check_avg(&diff, avg_after, exp_avg, (double)tcfg->tqueue->avg_tolerance))
- result = FAIL;
-
- printf("%-15.4lf%-15.4lf%-15.4lf%-15.4lf%-15.4lf%-15s\n",
- avg_before, avg_after, exp_avg, diff,
- (double)tcfg->tqueue->avg_tolerance,
- diff <= (double)tcfg->tqueue->avg_tolerance ? "pass" : "fail");
- }
-out:
- return result;
-}
-
-/**
- * Test F4: functional test 4
- */
-static uint32_t ft4_tlevel[] = {1022};
-static uint8_t ft4_wq_log2[] = {11};
-
-static struct test_rte_red_config ft4_tconfig = {
- .rconfig = ft_wrconfig,
- .num_cfg = RTE_DIM(ft_wrconfig),
- .min_th = 32,
- .max_th = 1023,
- .wq_log2 = ft4_wq_log2,
- .maxp_inv = ft_maxp_inv,
-};
-
-static struct test_queue ft4_tqueue = {
- .rdata = ft_rtdata,
- .num_queues = RTE_DIM(ft_rtdata),
- .qconfig = ft_qconfig,
- .q = ft_q,
- .q_ramp_up = 1000000,
- .avg_ramp_up = 1000000,
- .avg_tolerance = 0, /* 0 percent */
- .drop_tolerance = 50, /* 50 percent */
-};
-
-static struct test_config func_test4_config = {
- .ifname = "functional test 4 interface",
- .msg = "functional test 4 : use one RED configuration,\n"
- " increase average queue size to target level,\n"
- " dequeue all packets until queue is empty,\n"
- " confirm that average queue size is computed correctly while\n"
- " queue is empty for more than 50 sec,\n"
- " (this test takes 52 sec to run)\n\n",
- .htxt = "q avg before "
- "q avg after "
- "expected "
- "difference % "
- "tolerance % "
- "result "
- "\n",
- .tconfig = &ft4_tconfig,
- .tqueue = &ft4_tqueue,
- .tvar = &ft_tvar,
- .tlevel = ft4_tlevel,
-};
-
-static enum test_result func_test4(struct test_config *tcfg)
-{
- enum test_result result = PASS;
- uint64_t time_diff = 0;
- uint64_t start = 0;
- double avg_before = 0.0;
- double avg_after = 0.0;
- double exp_avg = 0.0;
- double diff = 0.0;
-
- printf("%s", tcfg->msg);
-
- if (test_rte_red_init(tcfg) != PASS) {
- result = FAIL;
- goto out;
- }
-
- rte_red_rt_data_init(tcfg->tqueue->rdata);
-
- if (increase_actual_qsize(tcfg->tconfig->rconfig,
- tcfg->tqueue->rdata,
- tcfg->tqueue->q,
- *tcfg->tlevel,
- tcfg->tqueue->q_ramp_up) != 0) {
- result = FAIL;
- goto out;
- }
-
- if (increase_average_qsize(tcfg->tconfig->rconfig,
- tcfg->tqueue->rdata,
- tcfg->tqueue->q,
- *tcfg->tlevel,
- tcfg->tqueue->avg_ramp_up) != 0) {
- result = FAIL;
- goto out;
- }
-
- printf("%s", tcfg->htxt);
-
- avg_before = rte_red_get_avg_float(tcfg->tconfig->rconfig, tcfg->tqueue->rdata);
-
- /**
- * empty the queue
- */
- *tcfg->tqueue->q = 0;
- rte_red_mark_queue_empty(tcfg->tqueue->rdata, get_port_ts());
-
- /**
- * record empty time locally
- */
- start = rte_rdtsc();
-
- sleep(tcfg->tvar->sleep_sec);
-
- /**
- * enqueue one packet to recalculate average queue size
- */
- if (rte_red_enqueue(tcfg->tconfig->rconfig,
- tcfg->tqueue->rdata,
- *tcfg->tqueue->q,
- get_port_ts()) != 0) {
- result = FAIL;
- goto out;
- }
- (*tcfg->tqueue->q)++;
-
- /**
- * calculate how long queue has been empty
- */
- time_diff = ((rte_rdtsc() - start) / tcfg->tvar->clk_freq)
- * MSEC_PER_SEC;
- if (time_diff < MAX_QEMPTY_TIME_MSEC) {
- /**
- * this could happen if sleep was interrupted for some reason
- */
- result = FAIL;
- goto out;
- }
-
- /**
- * confirm that average queue size is now at expected level
- */
- exp_avg = 0.0;
- avg_after = rte_red_get_avg_float(tcfg->tconfig->rconfig, tcfg->tqueue->rdata);
- if (!check_avg(&diff, avg_after, exp_avg, (double)tcfg->tqueue->avg_tolerance))
- result = FAIL;
-
- printf("%-15.4lf%-15.4lf%-15.4lf%-15.4lf%-15.4lf%-15s\n",
- avg_before, avg_after, exp_avg,
- diff, (double)tcfg->tqueue->avg_tolerance,
- diff <= (double)tcfg->tqueue->avg_tolerance ? "pass" : "fail");
-out:
- return result;
-}
-
-/**
- * Test F5: functional test 5
- */
-static uint32_t ft5_tlevel[] = {127};
-static uint8_t ft5_wq_log2[] = {9, 8};
-static uint8_t ft5_maxp_inv[] = {10, 20};
-static struct rte_red_config ft5_config[2];
-static struct rte_red ft5_data[4];
-static uint32_t ft5_q[4];
-static uint32_t ft5_dropped[] = {0, 0, 0, 0};
-static uint32_t ft5_enqueued[] = {0, 0, 0, 0};
-
-static struct test_rte_red_config ft5_tconfig = {
- .rconfig = ft5_config,
- .num_cfg = RTE_DIM(ft5_config),
- .min_th = 32,
- .max_th = 128,
- .wq_log2 = ft5_wq_log2,
- .maxp_inv = ft5_maxp_inv,
-};
-
-static struct test_queue ft5_tqueue = {
- .rdata = ft5_data,
- .num_queues = RTE_DIM(ft5_data),
- .qconfig = ft_qconfig,
- .q = ft5_q,
- .q_ramp_up = 1000000,
- .avg_ramp_up = 1000000,
- .avg_tolerance = 5, /* 10 percent */
- .drop_tolerance = 50, /* 50 percent */
-};
-
-struct test_var ft5_tvar = {
- .wait_usec = 0,
- .num_iterations = 15,
- .num_ops = 10000,
- .clk_freq = 0,
- .dropped = ft5_dropped,
- .enqueued = ft5_enqueued,
- .sleep_sec = 0,
-};
-
-static struct test_config func_test5_config = {
- .ifname = "functional test 5 interface",
- .msg = "functional test 5 : use several queues (each with its own run-time data),\n"
- " use several RED configurations (such that each configuration is shared by multiple queues),\n"
- " increase average queue size to just below maximum threshold,\n"
- " compare drop rate to drop probability,\n"
- " (this is a larger scale version of functional test 2)\n\n",
- .htxt = "queue "
- "config "
- "avg queue size "
- "min threshold "
- "max threshold "
- "drop prob % "
- "drop rate % "
- "diff % "
- "tolerance % "
- "\n",
- .tconfig = &ft5_tconfig,
- .tqueue = &ft5_tqueue,
- .tvar = &ft5_tvar,
- .tlevel = ft5_tlevel,
-};
-
-static enum test_result func_test5(struct test_config *tcfg)
-{
- enum test_result result = PASS;
- uint32_t j = 0;
-
- printf("%s", tcfg->msg);
-
- if (test_rte_red_init(tcfg) != PASS) {
- result = FAIL;
- goto out;
- }
-
- printf("%s", tcfg->htxt);
-
- for (j = 0; j < tcfg->tqueue->num_queues; j++) {
- rte_red_rt_data_init(&tcfg->tqueue->rdata[j]);
- tcfg->tqueue->q[j] = 0;
-
- if (increase_actual_qsize(&tcfg->tconfig->rconfig[tcfg->tqueue->qconfig[j]],
- &tcfg->tqueue->rdata[j],
- &tcfg->tqueue->q[j],
- *tcfg->tlevel,
- tcfg->tqueue->q_ramp_up) != 0) {
- result = FAIL;
- goto out;
- }
-
- if (increase_average_qsize(&tcfg->tconfig->rconfig[tcfg->tqueue->qconfig[j]],
- &tcfg->tqueue->rdata[j],
- &tcfg->tqueue->q[j],
- *tcfg->tlevel,
- tcfg->tqueue->avg_ramp_up) != 0) {
- result = FAIL;
- goto out;
- }
- }
-
- for (j = 0; j < tcfg->tqueue->num_queues; j++) {
- uint32_t avg = 0;
- double drop_rate = 0.0;
- double drop_prob = 0.0;
- double diff = 0.0;
-
- tcfg->tvar->dropped[j] = 0;
- tcfg->tvar->enqueued[j] = 0;
-
- enqueue_dequeue_func(&tcfg->tconfig->rconfig[tcfg->tqueue->qconfig[j]],
- &tcfg->tqueue->rdata[j],
- &tcfg->tqueue->q[j],
- tcfg->tvar->num_ops,
- &tcfg->tvar->enqueued[j],
- &tcfg->tvar->dropped[j]);
-
- avg = rte_red_get_avg_int(&tcfg->tconfig->rconfig[tcfg->tqueue->qconfig[j]],
- &tcfg->tqueue->rdata[j]);
- if (avg != *tcfg->tlevel)
- result = FAIL;
-
- drop_rate = calc_drop_rate(tcfg->tvar->enqueued[j],tcfg->tvar->dropped[j]);
- drop_prob = calc_drop_prob(tcfg->tconfig->min_th, tcfg->tconfig->max_th,
- tcfg->tconfig->maxp_inv[tcfg->tqueue->qconfig[j]],
- *tcfg->tlevel);
- if (!check_drop_rate(&diff, drop_rate, drop_prob, (double)tcfg->tqueue->drop_tolerance))
- result = FAIL;
-
- printf("%-15u%-15u%-15u%-15u%-15u%-15.4lf%-15.4lf%-15.4lf%-15.4lf\n",
- j, tcfg->tqueue->qconfig[j], avg,
- tcfg->tconfig->min_th, tcfg->tconfig->max_th,
- drop_prob * 100.0, drop_rate * 100.0,
- diff, (double)tcfg->tqueue->drop_tolerance);
- }
-out:
- return result;
-}
-
-/**
- * Test F6: functional test 6
- */
-static uint32_t ft6_tlevel[] = {1022};
-static uint8_t ft6_wq_log2[] = {9, 8};
-static uint8_t ft6_maxp_inv[] = {10, 20};
-static struct rte_red_config ft6_config[2];
-static struct rte_red ft6_data[4];
-static uint32_t ft6_q[4];
-
-static struct test_rte_red_config ft6_tconfig = {
- .rconfig = ft6_config,
- .num_cfg = RTE_DIM(ft6_config),
- .min_th = 32,
- .max_th = 1023,
- .wq_log2 = ft6_wq_log2,
- .maxp_inv = ft6_maxp_inv,
-};
-
-static struct test_queue ft6_tqueue = {
- .rdata = ft6_data,
- .num_queues = RTE_DIM(ft6_data),
- .qconfig = ft_qconfig,
- .q = ft6_q,
- .q_ramp_up = 1000000,
- .avg_ramp_up = 1000000,
- .avg_tolerance = 5, /* 10 percent */
- .drop_tolerance = 50, /* 50 percent */
-};
-
-static struct test_config func_test6_config = {
- .ifname = "functional test 6 interface",
- .msg = "functional test 6 : use several queues (each with its own run-time data),\n"
- " use several RED configurations (such that each configuration is sharte_red by multiple queues),\n"
- " increase average queue size to target level,\n"
- " dequeue all packets until queue is empty,\n"
- " confirm that average queue size is computed correctly while queue is empty\n"
- " (this is a larger scale version of functional test 3)\n\n",
- .htxt = "queue "
- "config "
- "q avg before "
- "q avg after "
- "expected "
- "difference % "
- "tolerance % "
- "result ""\n",
- .tconfig = &ft6_tconfig,
- .tqueue = &ft6_tqueue,
- .tvar = &ft_tvar,
- .tlevel = ft6_tlevel,
-};
-
-static enum test_result func_test6(struct test_config *tcfg)
-{
- enum test_result result = PASS;
- uint32_t j = 0;
-
- printf("%s", tcfg->msg);
- if (test_rte_red_init(tcfg) != PASS) {
- result = FAIL;
- goto out;
- }
- printf("%s", tcfg->htxt);
-
- for (j = 0; j < tcfg->tqueue->num_queues; j++) {
- rte_red_rt_data_init(&tcfg->tqueue->rdata[j]);
- tcfg->tqueue->q[j] = 0;
-
- if (increase_actual_qsize(&tcfg->tconfig->rconfig[tcfg->tqueue->qconfig[j]],
- &tcfg->tqueue->rdata[j],
- &tcfg->tqueue->q[j],
- *tcfg->tlevel,
- tcfg->tqueue->q_ramp_up) != 0) {
- result = FAIL;
- goto out;
- }
- if (increase_average_qsize(&tcfg->tconfig->rconfig[tcfg->tqueue->qconfig[j]],
- &tcfg->tqueue->rdata[j],
- &tcfg->tqueue->q[j],
- *tcfg->tlevel,
- tcfg->tqueue->avg_ramp_up) != 0) {
- result = FAIL;
- goto out;
- }
- }
- for (j = 0; j < tcfg->tqueue->num_queues; j++) {
- double avg_before = 0;
- double avg_after = 0;
- double exp_avg = 0;
- double diff = 0.0;
-
- avg_before = rte_red_get_avg_float(&tcfg->tconfig->rconfig[tcfg->tqueue->qconfig[j]],
- &tcfg->tqueue->rdata[j]);
-
- /**
- * empty the queue
- */
- tcfg->tqueue->q[j] = 0;
- rte_red_mark_queue_empty(&tcfg->tqueue->rdata[j], get_port_ts());
- rte_delay_us(tcfg->tvar->wait_usec);
-
- /**
- * enqueue one packet to recalculate average queue size
- */
- if (rte_red_enqueue(&tcfg->tconfig->rconfig[tcfg->tqueue->qconfig[j]],
- &tcfg->tqueue->rdata[j],
- tcfg->tqueue->q[j],
- get_port_ts()) == 0) {
- tcfg->tqueue->q[j]++;
- } else {
- printf("%s:%d: packet enqueued on empty queue was dropped\n", __func__, __LINE__);
- result = FAIL;
- }
-
- exp_avg = calc_exp_avg_on_empty(avg_before,
- (1 << tcfg->tconfig->wq_log2[tcfg->tqueue->qconfig[j]]),
- tcfg->tvar->wait_usec);
- avg_after = rte_red_get_avg_float(&tcfg->tconfig->rconfig[tcfg->tqueue->qconfig[j]],
- &tcfg->tqueue->rdata[j]);
- if (!check_avg(&diff, avg_after, exp_avg, (double)tcfg->tqueue->avg_tolerance))
- result = FAIL;
-
- printf("%-15u%-15u%-15.4lf%-15.4lf%-15.4lf%-15.4lf%-15.4lf%-15s\n",
- j, tcfg->tqueue->qconfig[j], avg_before, avg_after,
- exp_avg, diff, (double)tcfg->tqueue->avg_tolerance,
- diff <= tcfg->tqueue->avg_tolerance ? "pass" : "fail");
- }
-out:
- return result;
-}
-
-/**
- * setup default values for the performance test structures
- */
-static struct rte_red_config pt_wrconfig[1];
-static struct rte_red pt_rtdata[1];
-static uint8_t pt_wq_log2[] = {9};
-static uint8_t pt_maxp_inv[] = {10};
-static uint32_t pt_qconfig[] = {0};
-static uint32_t pt_q[] = {0};
-static uint32_t pt_dropped[] = {0};
-static uint32_t pt_enqueued[] = {0};
-
-static struct test_rte_red_config pt_tconfig = {
- .rconfig = pt_wrconfig,
- .num_cfg = RTE_DIM(pt_wrconfig),
- .wq_log2 = pt_wq_log2,
- .min_th = 32,
- .max_th = 128,
- .maxp_inv = pt_maxp_inv,
-};
-
-static struct test_queue pt_tqueue = {
- .rdata = pt_rtdata,
- .num_queues = RTE_DIM(pt_rtdata),
- .qconfig = pt_qconfig,
- .q = pt_q,
- .q_ramp_up = 1000000,
- .avg_ramp_up = 1000000,
- .avg_tolerance = 5, /* 10 percent */
- .drop_tolerance = 50, /* 50 percent */
-};
-
-/**
- * enqueue/dequeue packets
- */
-static void enqueue_dequeue_perf(struct rte_red_config *red_cfg,
- struct rte_red *red,
- uint32_t *q,
- uint32_t num_ops,
- uint32_t *enqueued,
- uint32_t *dropped,
- struct rdtsc_prof *prof)
-{
- uint32_t i = 0;
-
- for (i = 0; i < num_ops; i++) {
- uint64_t ts = 0;
- int ret = 0;
- /**
- * enqueue
- */
- ts = get_port_ts();
- rdtsc_prof_start(prof);
- ret = rte_red_enqueue(red_cfg, red, *q, ts );
- rdtsc_prof_end(prof);
- if (ret == 0)
- (*enqueued)++;
- else
- (*dropped)++;
- }
-}
-
-/**
- * Setup test structures for tests P1, P2, P3
- * performance tests 1, 2 and 3
- */
-static uint32_t pt1_tlevel[] = {16};
-static uint32_t pt2_tlevel[] = {80};
-static uint32_t pt3_tlevel[] = {144};
-
-static struct test_var perf1_tvar = {
- .wait_usec = 0,
- .num_iterations = 15,
- .num_ops = 50000000,
- .clk_freq = 0,
- .dropped = pt_dropped,
- .enqueued = pt_enqueued,
- .sleep_sec = 0
-};
-
-static struct test_config perf1_test1_config = {
- .ifname = "performance test 1 interface",
- .msg = "performance test 1 : use one RED configuration,\n"
- " set actual and average queue sizes to level below min threshold,\n"
- " measure enqueue performance\n\n",
- .tconfig = &pt_tconfig,
- .tqueue = &pt_tqueue,
- .tvar = &perf1_tvar,
- .tlevel = pt1_tlevel,
-};
-
-static struct test_config perf1_test2_config = {
- .ifname = "performance test 2 interface",
- .msg = "performance test 2 : use one RED configuration,\n"
- " set actual and average queue sizes to level in between min and max thresholds,\n"
- " measure enqueue performance\n\n",
- .tconfig = &pt_tconfig,
- .tqueue = &pt_tqueue,
- .tvar = &perf1_tvar,
- .tlevel = pt2_tlevel,
-};
-
-static struct test_config perf1_test3_config = {
- .ifname = "performance test 3 interface",
- .msg = "performance test 3 : use one RED configuration,\n"
- " set actual and average queue sizes to level above max threshold,\n"
- " measure enqueue performance\n\n",
- .tconfig = &pt_tconfig,
- .tqueue = &pt_tqueue,
- .tvar = &perf1_tvar,
- .tlevel = pt3_tlevel,
-};
-
-/**
- * Performance test function to measure enqueue performance.
- * This runs performance tests 1, 2 and 3
- */
-static enum test_result perf1_test(struct test_config *tcfg)
-{
- enum test_result result = PASS;
- struct rdtsc_prof prof = {0, 0, 0, 0, 0.0, NULL};
- uint32_t total = 0;
-
- printf("%s", tcfg->msg);
-
- rdtsc_prof_init(&prof, "enqueue");
-
- if (test_rte_red_init(tcfg) != PASS) {
- result = FAIL;
- goto out;
- }
-
- /**
- * set average queue size to target level
- */
- *tcfg->tqueue->q = *tcfg->tlevel;
-
- /**
- * initialize the rte_red run time data structure
- */
- rte_red_rt_data_init(tcfg->tqueue->rdata);
-
- /**
- * set the queue average
- */
- rte_red_set_avg_int(tcfg->tconfig->rconfig, tcfg->tqueue->rdata, *tcfg->tlevel);
- if (rte_red_get_avg_int(tcfg->tconfig->rconfig, tcfg->tqueue->rdata)
- != *tcfg->tlevel) {
- result = FAIL;
- goto out;
- }
-
- enqueue_dequeue_perf(tcfg->tconfig->rconfig,
- tcfg->tqueue->rdata,
- tcfg->tqueue->q,
- tcfg->tvar->num_ops,
- tcfg->tvar->enqueued,
- tcfg->tvar->dropped,
- &prof);
-
- total = *tcfg->tvar->enqueued + *tcfg->tvar->dropped;
-
- printf("\ntotal: %u, enqueued: %u (%.2lf%%), dropped: %u (%.2lf%%)\n", total,
- *tcfg->tvar->enqueued, ((double)(*tcfg->tvar->enqueued) / (double)total) * 100.0,
- *tcfg->tvar->dropped, ((double)(*tcfg->tvar->dropped) / (double)total) * 100.0);
-
- rdtsc_prof_print(&prof);
-out:
- return result;
-}
-
-/**
- * Setup test structures for tests P4, P5, P6
- * performance tests 4, 5 and 6
- */
-static uint32_t pt4_tlevel[] = {16};
-static uint32_t pt5_tlevel[] = {80};
-static uint32_t pt6_tlevel[] = {144};
-
-static struct test_var perf2_tvar = {
- .wait_usec = 500,
- .num_iterations = 10000,
- .num_ops = 10000,
- .dropped = pt_dropped,
- .enqueued = pt_enqueued,
- .sleep_sec = 0
-};
-
-static struct test_config perf2_test4_config = {
- .ifname = "performance test 4 interface",
- .msg = "performance test 4 : use one RED configuration,\n"
- " set actual and average queue sizes to level below min threshold,\n"
- " dequeue all packets until queue is empty,\n"
- " measure enqueue performance when queue is empty\n\n",
- .htxt = "iteration "
- "q avg before "
- "q avg after "
- "expected "
- "difference % "
- "tolerance % "
- "result ""\n",
- .tconfig = &pt_tconfig,
- .tqueue = &pt_tqueue,
- .tvar = &perf2_tvar,
- .tlevel = pt4_tlevel,
-};
-
-static struct test_config perf2_test5_config = {
- .ifname = "performance test 5 interface",
- .msg = "performance test 5 : use one RED configuration,\n"
- " set actual and average queue sizes to level in between min and max thresholds,\n"
- " dequeue all packets until queue is empty,\n"
- " measure enqueue performance when queue is empty\n\n",
- .htxt = "iteration "
- "q avg before "
- "q avg after "
- "expected "
- "difference "
- "tolerance "
- "result ""\n",
- .tconfig = &pt_tconfig,
- .tqueue = &pt_tqueue,
- .tvar = &perf2_tvar,
- .tlevel = pt5_tlevel,
-};
-
-static struct test_config perf2_test6_config = {
- .ifname = "performance test 6 interface",
- .msg = "performance test 6 : use one RED configuration,\n"
- " set actual and average queue sizes to level above max threshold,\n"
- " dequeue all packets until queue is empty,\n"
- " measure enqueue performance when queue is empty\n\n",
- .htxt = "iteration "
- "q avg before "
- "q avg after "
- "expected "
- "difference % "
- "tolerance % "
- "result ""\n",
- .tconfig = &pt_tconfig,
- .tqueue = &pt_tqueue,
- .tvar = &perf2_tvar,
- .tlevel = pt6_tlevel,
-};
-
-/**
- * Performance test function to measure enqueue performance when the
- * queue is empty. This runs performance tests 4, 5 and 6
- */
-static enum test_result perf2_test(struct test_config *tcfg)
-{
- enum test_result result = PASS;
- struct rdtsc_prof prof = {0, 0, 0, 0, 0.0, NULL};
- uint32_t total = 0;
- uint32_t i = 0;
-
- printf("%s", tcfg->msg);
-
- rdtsc_prof_init(&prof, "enqueue");
-
- if (test_rte_red_init(tcfg) != PASS) {
- result = FAIL;
- goto out;
- }
-
- printf("%s", tcfg->htxt);
-
- for (i = 0; i < tcfg->tvar->num_iterations; i++) {
- uint32_t count = 0;
- uint64_t ts = 0;
- double avg_before = 0;
- int ret = 0;
-
- /**
- * set average queue size to target level
- */
- *tcfg->tqueue->q = *tcfg->tlevel;
- count = (*tcfg->tqueue->rdata).count;
-
- /**
- * initialize the rte_red run time data structure
- */
- rte_red_rt_data_init(tcfg->tqueue->rdata);
- (*tcfg->tqueue->rdata).count = count;
-
- /**
- * set the queue average
- */
- rte_red_set_avg_int(tcfg->tconfig->rconfig, tcfg->tqueue->rdata, *tcfg->tlevel);
- avg_before = rte_red_get_avg_float(tcfg->tconfig->rconfig, tcfg->tqueue->rdata);
- if ((avg_before < *tcfg->tlevel) || (avg_before > *tcfg->tlevel)) {
- result = FAIL;
- goto out;
- }
-
- /**
- * empty the queue
- */
- *tcfg->tqueue->q = 0;
- rte_red_mark_queue_empty(tcfg->tqueue->rdata, get_port_ts());
-
- /**
- * wait for specified period of time
- */
- rte_delay_us(tcfg->tvar->wait_usec);
-
- /**
- * measure performance of enqueue operation while queue is empty
- */
- ts = get_port_ts();
- rdtsc_prof_start(&prof);
- ret = rte_red_enqueue(tcfg->tconfig->rconfig, tcfg->tqueue->rdata,
- *tcfg->tqueue->q, ts );
- rdtsc_prof_end(&prof);
-
- /**
- * gather enqueued/dropped statistics
- */
- if (ret == 0)
- (*tcfg->tvar->enqueued)++;
- else
- (*tcfg->tvar->dropped)++;
-
- /**
- * on first and last iteration, confirm that
- * average queue size was computed correctly
- */
- if ((i == 0) || (i == tcfg->tvar->num_iterations - 1)) {
- double avg_after = 0;
- double exp_avg = 0;
- double diff = 0.0;
- int ok = 0;
-
- avg_after = rte_red_get_avg_float(tcfg->tconfig->rconfig, tcfg->tqueue->rdata);
- exp_avg = calc_exp_avg_on_empty(avg_before,
- (1 << *tcfg->tconfig->wq_log2),
- tcfg->tvar->wait_usec);
- if (check_avg(&diff, avg_after, exp_avg, (double)tcfg->tqueue->avg_tolerance))
- ok = 1;
- printf("%-15u%-15.4lf%-15.4lf%-15.4lf%-15.4lf%-15.4lf%-15s\n",
- i, avg_before, avg_after, exp_avg, diff,
- (double)tcfg->tqueue->avg_tolerance, ok ? "pass" : "fail");
- if (!ok) {
- result = FAIL;
- goto out;
- }
- }
- }
- total = *tcfg->tvar->enqueued + *tcfg->tvar->dropped;
- printf("\ntotal: %u, enqueued: %u (%.2lf%%), dropped: %u (%.2lf%%)\n", total,
- *tcfg->tvar->enqueued, ((double)(*tcfg->tvar->enqueued) / (double)total) * 100.0,
- *tcfg->tvar->dropped, ((double)(*tcfg->tvar->dropped) / (double)total) * 100.0);
-
- rdtsc_prof_print(&prof);
-out:
- return result;
-}
-
-/**
- * setup default values for overflow test structures
- */
-static uint32_t avg_max = 0;
-static uint32_t avg_max_bits = 0;
-
-static struct rte_red_config ovfl_wrconfig[1];
-static struct rte_red ovfl_rtdata[1];
-static uint8_t ovfl_maxp_inv[] = {10};
-static uint32_t ovfl_qconfig[] = {0, 0, 1, 1};
-static uint32_t ovfl_q[] ={0};
-static uint32_t ovfl_dropped[] ={0};
-static uint32_t ovfl_enqueued[] ={0};
-static uint32_t ovfl_tlevel[] = {1023};
-static uint8_t ovfl_wq_log2[] = {12};
-
-static struct test_rte_red_config ovfl_tconfig = {
- .rconfig = ovfl_wrconfig,
- .num_cfg = RTE_DIM(ovfl_wrconfig),
- .wq_log2 = ovfl_wq_log2,
- .min_th = 32,
- .max_th = 1023,
- .maxp_inv = ovfl_maxp_inv,
-};
-
-static struct test_queue ovfl_tqueue = {
- .rdata = ovfl_rtdata,
- .num_queues = RTE_DIM(ovfl_rtdata),
- .qconfig = ovfl_qconfig,
- .q = ovfl_q,
- .q_ramp_up = 1000000,
- .avg_ramp_up = 1000000,
- .avg_tolerance = 5, /* 10 percent */
- .drop_tolerance = 50, /* 50 percent */
-};
-
-static struct test_var ovfl_tvar = {
- .wait_usec = 10000,
- .num_iterations = 1,
- .num_ops = 10000,
- .clk_freq = 0,
- .dropped = ovfl_dropped,
- .enqueued = ovfl_enqueued,
- .sleep_sec = 0
-};
-
-static void ovfl_check_avg(uint32_t avg)
-{
- if (avg > avg_max) {
- double avg_log = 0;
- uint32_t bits = 0;
- avg_max = avg;
- avg_log = log(((double)avg_max));
- avg_log = avg_log / log(2.0);
- bits = (uint32_t)ceil(avg_log);
- if (bits > avg_max_bits)
- avg_max_bits = bits;
- }
-}
-
-static struct test_config ovfl_test1_config = {
- .ifname = "queue avergage overflow test interface",
- .msg = "overflow test 1 : use one RED configuration,\n"
- " increase average queue size to target level,\n"
- " check maximum number of bits requirte_red to represent avg_s\n\n",
- .htxt = "avg queue size "
- "wq_log2 "
- "fraction bits "
- "max queue avg "
- "num bits "
- "enqueued "
- "dropped "
- "drop prob % "
- "drop rate % "
- "\n",
- .tconfig = &ovfl_tconfig,
- .tqueue = &ovfl_tqueue,
- .tvar = &ovfl_tvar,
- .tlevel = ovfl_tlevel,
-};
-
-static enum test_result ovfl_test1(struct test_config *tcfg)
-{
- enum test_result result = PASS;
- uint32_t avg = 0;
- uint32_t i = 0;
- double drop_rate = 0.0;
- double drop_prob = 0.0;
- double diff = 0.0;
- int ret = 0;
-
- printf("%s", tcfg->msg);
-
- if (test_rte_red_init(tcfg) != PASS) {
-
- result = FAIL;
- goto out;
- }
-
- /**
- * reset rte_red run-time data
- */
- rte_red_rt_data_init(tcfg->tqueue->rdata);
-
- /**
- * increase actual queue size
- */
- for (i = 0; i < tcfg->tqueue->q_ramp_up; i++) {
- ret = rte_red_enqueue(tcfg->tconfig->rconfig, tcfg->tqueue->rdata,
- *tcfg->tqueue->q, get_port_ts());
-
- if (ret == 0) {
- if (++(*tcfg->tqueue->q) >= *tcfg->tlevel)
- break;
- }
- }
-
- /**
- * enqueue
- */
- for (i = 0; i < tcfg->tqueue->avg_ramp_up; i++) {
- ret = rte_red_enqueue(tcfg->tconfig->rconfig, tcfg->tqueue->rdata,
- *tcfg->tqueue->q, get_port_ts());
- ovfl_check_avg((*tcfg->tqueue->rdata).avg);
- avg = rte_red_get_avg_int(tcfg->tconfig->rconfig, tcfg->tqueue->rdata);
- if (avg == *tcfg->tlevel) {
- if (ret == 0)
- (*tcfg->tvar->enqueued)++;
- else
- (*tcfg->tvar->dropped)++;
- }
- }
-
- /**
- * check if target average queue size has been reached
- */
- avg = rte_red_get_avg_int(tcfg->tconfig->rconfig, tcfg->tqueue->rdata);
- if (avg != *tcfg->tlevel) {
- result = FAIL;
- goto out;
- }
-
- /**
- * check drop rate against drop probability
- */
- drop_rate = calc_drop_rate(*tcfg->tvar->enqueued, *tcfg->tvar->dropped);
- drop_prob = calc_drop_prob(tcfg->tconfig->min_th,
- tcfg->tconfig->max_th,
- *tcfg->tconfig->maxp_inv,
- *tcfg->tlevel);
- if (!check_drop_rate(&diff, drop_rate, drop_prob, (double)tcfg->tqueue->drop_tolerance))
- result = FAIL;
-
- printf("%s", tcfg->htxt);
-
- printf("%-16u%-9u%-15u0x%08x %-10u%-10u%-10u%-13.2lf%-13.2lf\n",
- avg, *tcfg->tconfig->wq_log2, RTE_RED_SCALING,
- avg_max, avg_max_bits,
- *tcfg->tvar->enqueued, *tcfg->tvar->dropped,
- drop_prob * 100.0, drop_rate * 100.0);
-out:
- return result;
-}
-
-/**
- * define the functional and performance tests to be executed
- */
-struct tests func_tests[] = {
- { &func_test1_config, func_test1 },
- { &func_test2_config, func_test2 },
- { &func_test3_config, func_test3 },
- { &func_test4_config, func_test4 },
- { &func_test5_config, func_test5 },
- { &func_test6_config, func_test6 },
- { &ovfl_test1_config, ovfl_test1 },
-};
-
-struct tests func_tests_quick[] = {
- { &func_test1_config, func_test1 },
- { &func_test2_config, func_test2 },
- { &func_test3_config, func_test3 },
- /* no test 4 as it takes a lot of time */
- { &func_test5_config, func_test5 },
- { &func_test6_config, func_test6 },
- { &ovfl_test1_config, ovfl_test1 },
-};
-
-struct tests perf_tests[] = {
- { &perf1_test1_config, perf1_test },
- { &perf1_test2_config, perf1_test },
- { &perf1_test3_config, perf1_test },
- { &perf2_test4_config, perf2_test },
- { &perf2_test5_config, perf2_test },
- { &perf2_test6_config, perf2_test },
-};
-
-/**
- * function to execute the required_red tests
- */
-static void run_tests(struct tests *test_type, uint32_t test_count, uint32_t *num_tests, uint32_t *num_pass)
-{
- enum test_result result = PASS;
- uint32_t i = 0;
-
- for (i = 0; i < test_count; i++) {
- printf("\n--------------------------------------------------------------------------------\n");
- result = test_type[i].testfn(test_type[i].testcfg);
- (*num_tests)++;
- if (result == PASS) {
- (*num_pass)++;
- printf("-------------------------------------<pass>-------------------------------------\n");
- } else {
- printf("-------------------------------------<fail>-------------------------------------\n");
- }
- }
- return;
-}
-
-/**
- * check if functions accept invalid parameters
- *
- * First, all functions will be called without initialized RED
- * Then, all of them will be called with NULL/invalid parameters
- *
- * Some functions are not tested as they are performance-critical and thus
- * don't do any parameter checking.
- */
-static int
-test_invalid_parameters(void)
-{
- struct rte_red_config config;
-
- if (rte_red_rt_data_init(NULL) == 0) {
- printf("rte_red_rt_data_init should have failed!\n");
- return -1;
- }
-
- if (rte_red_config_init(NULL, 0, 0, 0, 0) == 0) {
- printf("rte_red_config_init should have failed!\n");
- return -1;
- }
-
- if (rte_red_rt_data_init(NULL) == 0) {
- printf("rte_red_rt_data_init should have failed!\n");
- return -1;
- }
-
- /* NULL config */
- if (rte_red_config_init(NULL, 0, 0, 0, 0) == 0) {
- printf("%i: rte_red_config_init should have failed!\n", __LINE__);
- return -1;
- }
- /* min_treshold == max_treshold */
- if (rte_red_config_init(&config, 0, 1, 1, 0) == 0) {
- printf("%i: rte_red_config_init should have failed!\n", __LINE__);
- return -1;
- }
- /* min_treshold > max_treshold */
- if (rte_red_config_init(&config, 0, 2, 1, 0) == 0) {
- printf("%i: rte_red_config_init should have failed!\n", __LINE__);
- return -1;
- }
- /* wq_log2 > RTE_RED_WQ_LOG2_MAX */
- if (rte_red_config_init(&config,
- RTE_RED_WQ_LOG2_MAX + 1, 1, 2, 0) == 0) {
- printf("%i: rte_red_config_init should have failed!\n", __LINE__);
- return -1;
- }
- /* wq_log2 < RTE_RED_WQ_LOG2_MIN */
- if (rte_red_config_init(&config,
- RTE_RED_WQ_LOG2_MIN - 1, 1, 2, 0) == 0) {
- printf("%i: rte_red_config_init should have failed!\n", __LINE__);
- return -1;
- }
- /* maxp_inv > RTE_RED_MAXP_INV_MAX */
- if (rte_red_config_init(&config,
- RTE_RED_WQ_LOG2_MIN, 1, 2, RTE_RED_MAXP_INV_MAX + 1) == 0) {
- printf("%i: rte_red_config_init should have failed!\n", __LINE__);
- return -1;
- }
- /* maxp_inv < RTE_RED_MAXP_INV_MIN */
- if (rte_red_config_init(&config,
- RTE_RED_WQ_LOG2_MIN, 1, 2, RTE_RED_MAXP_INV_MIN - 1) == 0) {
- printf("%i: rte_red_config_init should have failed!\n", __LINE__);
- return -1;
- }
-
- return 0;
-}
-
-static void
-show_stats(const uint32_t num_tests, const uint32_t num_pass)
-{
- if (num_pass == num_tests)
- printf("[total: %u, pass: %u]\n", num_tests, num_pass);
- else
- printf("[total: %u, pass: %u, fail: %u]\n", num_tests, num_pass,
- num_tests - num_pass);
-}
-
-static int
-tell_the_result(const uint32_t num_tests, const uint32_t num_pass)
-{
- return (num_pass == num_tests) ? 0 : 1;
-}
-
-static int
-test_red(void)
-{
- uint32_t num_tests = 0;
- uint32_t num_pass = 0;
-
- if (test_invalid_parameters() < 0)
- return -1;
- run_tests(func_tests_quick, RTE_DIM(func_tests_quick),
- &num_tests, &num_pass);
- show_stats(num_tests, num_pass);
- return tell_the_result(num_tests, num_pass);
-}
-
-static int
-test_red_perf(void)
-{
- uint32_t num_tests = 0;
- uint32_t num_pass = 0;
-
- run_tests(perf_tests, RTE_DIM(perf_tests), &num_tests, &num_pass);
- show_stats(num_tests, num_pass);
- return tell_the_result(num_tests, num_pass);
-}
-
-static int
-test_red_all(void)
-{
- uint32_t num_tests = 0;
- uint32_t num_pass = 0;
-
- if (test_invalid_parameters() < 0)
- return -1;
-
- run_tests(func_tests, RTE_DIM(func_tests), &num_tests, &num_pass);
- run_tests(perf_tests, RTE_DIM(perf_tests), &num_tests, &num_pass);
- show_stats(num_tests, num_pass);
- return tell_the_result(num_tests, num_pass);
-}
-
-REGISTER_TEST_COMMAND(red_autotest, test_red);
-REGISTER_TEST_COMMAND(red_perf, test_red_perf);
-REGISTER_TEST_COMMAND(red_all, test_red_all);
diff --git a/app/test/test_reorder.c b/app/test/test_reorder.c
deleted file mode 100644
index e8a0a2f2..00000000
--- a/app/test/test_reorder.c
+++ /dev/null
@@ -1,386 +0,0 @@
-/*-
- * BSD LICENSE
- *
- * Copyright(c) 2010-2014 Intel Corporation. All rights reserved.
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * * Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * * Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in
- * the documentation and/or other materials provided with the
- * distribution.
- * * Neither the name of Intel Corporation nor the names of its
- * contributors may be used to endorse or promote products derived
- * from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
- * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
- * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#include "test.h"
-#include "stdio.h"
-
-#include <unistd.h>
-#include <string.h>
-
-#include <rte_cycles.h>
-#include <rte_errno.h>
-#include <rte_mbuf.h>
-#include <rte_reorder.h>
-#include <rte_lcore.h>
-#include <rte_malloc.h>
-
-#include "test.h"
-
-#define BURST 32
-#define REORDER_BUFFER_SIZE 16384
-#define NUM_MBUFS (2*REORDER_BUFFER_SIZE)
-#define REORDER_BUFFER_SIZE_INVALID 2049
-
-struct reorder_unittest_params {
- struct rte_mempool *p;
- struct rte_reorder_buffer *b;
-};
-
-static struct reorder_unittest_params default_params = {
- .p = NULL,
- .b = NULL
-};
-
-static struct reorder_unittest_params *test_params = &default_params;
-
-static int
-test_reorder_create(void)
-{
- struct rte_reorder_buffer *b = NULL;
-
- b = rte_reorder_create(NULL, rte_socket_id(), REORDER_BUFFER_SIZE);
- TEST_ASSERT((b == NULL) && (rte_errno == EINVAL),
- "No error on create() with NULL name");
-
- b = rte_reorder_create("PKT", rte_socket_id(), REORDER_BUFFER_SIZE_INVALID);
- TEST_ASSERT((b == NULL) && (rte_errno == EINVAL),
- "No error on create() with invalid buffer size param.");
-
- b = rte_reorder_create("PKT_RO1", rte_socket_id(), REORDER_BUFFER_SIZE);
- TEST_ASSERT_EQUAL(b, test_params->b,
- "New reorder instance created with already existing name");
-
- return 0;
-}
-
-static int
-test_reorder_init(void)
-{
- struct rte_reorder_buffer *b = NULL;
- unsigned int size;
- /*
- * The minimum memory area size that should be passed to library is,
- * sizeof(struct rte_reorder_buffer) + (2 * size * sizeof(struct rte_mbuf *));
- * Otherwise error will be thrown
- */
-
- size = 100;
- b = rte_reorder_init(b, size, "PKT1", REORDER_BUFFER_SIZE);
- TEST_ASSERT((b == NULL) && (rte_errno == EINVAL),
- "No error on init with NULL buffer.");
-
- b = rte_malloc(NULL, size, 0);
- b = rte_reorder_init(b, size, "PKT1", REORDER_BUFFER_SIZE);
- TEST_ASSERT((b == NULL) && (rte_errno == EINVAL),
- "No error on init with invalid mem zone size.");
- rte_free(b);
-
- size = 262336;
- b = rte_malloc(NULL, size, 0);
- b = rte_reorder_init(b, size, "PKT1", REORDER_BUFFER_SIZE_INVALID);
- TEST_ASSERT((b == NULL) && (rte_errno == EINVAL),
- "No error on init with invalid buffer size param.");
-
- b = rte_reorder_init(b, size, NULL, REORDER_BUFFER_SIZE);
- TEST_ASSERT((b == NULL) && (rte_errno == EINVAL),
- "No error on init with invalid name.");
- rte_free(b);
-
- return 0;
-}
-
-static int
-test_reorder_find_existing(void)
-{
- struct rte_reorder_buffer *b = NULL;
-
- /* Try to find existing reorder buffer instance */
- b = rte_reorder_find_existing("PKT_RO1");
- TEST_ASSERT_EQUAL(b, test_params->b,
- "existing reorder buffer instance not found");
-
- /* Try to find non existing reorder buffer instance */
- b = rte_reorder_find_existing("ro_find_non_existing");
- TEST_ASSERT((b == NULL) && (rte_errno == ENOENT),
- "non existing reorder buffer instance found");
-
- return 0;
-}
-
-static int
-test_reorder_free(void)
-{
- struct rte_reorder_buffer *b1 = NULL, *b2 = NULL;
- const char *name = "test_free";
-
- b1 = rte_reorder_create(name, rte_socket_id(), 8);
- TEST_ASSERT_NOT_NULL(b1, "Failed to create reorder buffer.");
-
- b2 = rte_reorder_find_existing(name);
- TEST_ASSERT_EQUAL(b1, b2, "Failed to find existing reorder buffer");
-
- rte_reorder_free(b1);
-
- b2 = rte_reorder_find_existing(name);
- TEST_ASSERT((b2 == NULL) && (rte_errno == ENOENT),
- "Found previously freed reorder buffer");
-
- return 0;
-}
-
-static int
-test_reorder_insert(void)
-{
- struct rte_reorder_buffer *b = NULL;
- struct rte_mempool *p = test_params->p;
- const unsigned int size = 4;
- const unsigned int num_bufs = 7;
- struct rte_mbuf *bufs[num_bufs];
- int ret = 0;
- unsigned i;
-
- /* This would create a reorder buffer instance consisting of:
- * reorder_seq = 0
- * ready_buf: RB[size] = {NULL, NULL, NULL, NULL}
- * order_buf: OB[size] = {NULL, NULL, NULL, NULL}
- */
- b = rte_reorder_create("test_insert", rte_socket_id(), size);
- TEST_ASSERT_NOT_NULL(b, "Failed to create reorder buffer");
-
- ret = rte_mempool_get_bulk(p, (void *)bufs, num_bufs);
- TEST_ASSERT_SUCCESS(ret, "Error getting mbuf from pool");
-
- for (i = 0; i < num_bufs; i++)
- bufs[i]->seqn = i;
-
- /* This should fill up order buffer:
- * reorder_seq = 0
- * RB[] = {NULL, NULL, NULL, NULL}
- * OB[] = {0, 1, 2, 3}
- */
- for (i = 0; i < size; i++) {
- ret = rte_reorder_insert(b, bufs[i]);
- if (ret != 0) {
- printf("%s:%d: Error inserting packet with seqn less than size\n",
- __func__, __LINE__);
- ret = -1;
- goto exit;
- }
- }
-
- /* early packet - should move mbufs to ready buf and move sequence window
- * reorder_seq = 4
- * RB[] = {0, 1, 2, 3}
- * OB[] = {4, NULL, NULL, NULL}
- */
- ret = rte_reorder_insert(b, bufs[4]);
- if (ret != 0) {
- printf("%s:%d: Error inserting early packet with seqn: size\n",
- __func__, __LINE__);
- ret = -1;
- goto exit;
- }
-
- /* early packet from current sequence window - full ready buffer */
- bufs[5]->seqn = 2 * size;
- ret = rte_reorder_insert(b, bufs[5]);
- if (!((ret == -1) && (rte_errno == ENOSPC))) {
- printf("%s:%d: No error inserting early packet with full ready buffer\n",
- __func__, __LINE__);
- ret = -1;
- goto exit;
- }
-
- /* late packet */
- bufs[6]->seqn = 3 * size;
- ret = rte_reorder_insert(b, bufs[6]);
- if (!((ret == -1) && (rte_errno == ERANGE))) {
- printf("%s:%d: No error inserting late packet with seqn:"
- " 3 * size\n", __func__, __LINE__);
- ret = -1;
- goto exit;
- }
-
- ret = 0;
-exit:
- rte_mempool_put_bulk(p, (void *)bufs, num_bufs);
- rte_reorder_free(b);
- return ret;
-}
-
-static int
-test_reorder_drain(void)
-{
- struct rte_reorder_buffer *b = NULL;
- struct rte_mempool *p = test_params->p;
- const unsigned int size = 4;
- const unsigned int num_bufs = 8;
- struct rte_mbuf *bufs[num_bufs];
- struct rte_mbuf *robufs[num_bufs];
- int ret = 0;
- unsigned i, cnt;
-
- /* This would create a reorder buffer instance consisting of:
- * reorder_seq = 0
- * ready_buf: RB[size] = {NULL, NULL, NULL, NULL}
- * order_buf: OB[size] = {NULL, NULL, NULL, NULL}
- */
- b = rte_reorder_create("test_drain", rte_socket_id(), size);
- TEST_ASSERT_NOT_NULL(b, "Failed to create reorder buffer");
-
- ret = rte_mempool_get_bulk(p, (void *)bufs, num_bufs);
- TEST_ASSERT_SUCCESS(ret, "Error getting mbuf from pool");
-
- /* Check no drained packets if reorder is empty */
- cnt = rte_reorder_drain(b, robufs, 1);
- if (cnt != 0) {
- printf("%s:%d: drained packets from empty reorder buffer\n",
- __func__, __LINE__);
- ret = -1;
- goto exit;
- }
-
- for (i = 0; i < num_bufs; i++)
- bufs[i]->seqn = i;
-
- /* Insert packet with seqn 1:
- * reorder_seq = 0
- * RB[] = {NULL, NULL, NULL, NULL}
- * OB[] = {1, NULL, NULL, NULL}
- */
- rte_reorder_insert(b, bufs[1]);
-
- cnt = rte_reorder_drain(b, robufs, 1);
- if (cnt != 1) {
- printf("%s:%d:%d: number of expected packets not drained\n",
- __func__, __LINE__, cnt);
- ret = -1;
- goto exit;
- }
-
- /* Insert more packets
- * RB[] = {NULL, NULL, NULL, NULL}
- * OB[] = {NULL, 2, 3, NULL}
- */
- rte_reorder_insert(b, bufs[2]);
- rte_reorder_insert(b, bufs[3]);
-
- /* Insert more packets
- * RB[] = {NULL, NULL, NULL, NULL}
- * OB[] = {NULL, 2, 3, 4}
- */
- rte_reorder_insert(b, bufs[4]);
-
- /* Insert more packets
- * RB[] = {2, 3, 4, NULL}
- * OB[] = {NULL, NULL, 7, NULL}
- */
- rte_reorder_insert(b, bufs[7]);
-
- /* drained expected packets */
- cnt = rte_reorder_drain(b, robufs, 4);
- if (cnt != 3) {
- printf("%s:%d:%d: number of expected packets not drained\n",
- __func__, __LINE__, cnt);
- ret = -1;
- goto exit;
- }
-
- /*
- * RB[] = {NULL, NULL, NULL, NULL}
- * OB[] = {NULL, NULL, 7, NULL}
- */
- cnt = rte_reorder_drain(b, robufs, 1);
- if (cnt != 0) {
- printf("%s:%d:%d: number of expected packets not drained\n",
- __func__, __LINE__, cnt);
- ret = -1;
- goto exit;
- }
- ret = 0;
-exit:
- rte_mempool_put_bulk(p, (void *)bufs, num_bufs);
- rte_reorder_free(b);
- return ret;
-}
-
-static int
-test_setup(void)
-{
- /* reorder buffer instance creation */
- if (test_params->b == NULL) {
- test_params->b = rte_reorder_create("PKT_RO1", rte_socket_id(),
- REORDER_BUFFER_SIZE);
- if (test_params->b == NULL) {
- printf("%s: Error creating reorder buffer instance b\n",
- __func__);
- return -1;
- }
- } else
- rte_reorder_reset(test_params->b);
-
- /* mempool creation */
- if (test_params->p == NULL) {
- test_params->p = rte_pktmbuf_pool_create("RO_MBUF_POOL",
- NUM_MBUFS, BURST, 0, RTE_MBUF_DEFAULT_BUF_SIZE,
- rte_socket_id());
- if (test_params->p == NULL) {
- printf("%s: Error creating mempool\n", __func__);
- return -1;
- }
- }
- return 0;
-}
-
-static struct unit_test_suite reorder_test_suite = {
-
- .setup = test_setup,
- .suite_name = "Reorder Unit Test Suite",
- .unit_test_cases = {
- TEST_CASE(test_reorder_create),
- TEST_CASE(test_reorder_init),
- TEST_CASE(test_reorder_find_existing),
- TEST_CASE(test_reorder_free),
- TEST_CASE(test_reorder_insert),
- TEST_CASE(test_reorder_drain),
- TEST_CASES_END()
- }
-};
-
-static int
-test_reorder(void)
-{
- return unit_test_suite_runner(&reorder_test_suite);
-}
-
-REGISTER_TEST_COMMAND(reorder_autotest, test_reorder);
diff --git a/app/test/test_resource.c b/app/test/test_resource.c
deleted file mode 100644
index a3a82f13..00000000
--- a/app/test/test_resource.c
+++ /dev/null
@@ -1,133 +0,0 @@
-/*-
- * BSD LICENSE
- *
- * Copyright(c) 2016 RehiveTech. All rights reserved.
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * * Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * * Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in
- * the documentation and/or other materials provided with the
- * distribution.
- * * Neither the name of RehiveTech nor the names of its
- * contributors may be used to endorse or promote products derived
- * from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
- * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
- * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#include <stdio.h>
-#include <string.h>
-
-#include "test.h"
-#include "resource.h"
-
-const char test_resource_dpdk_blob[] = {
- '\x44', '\x50', '\x44', '\x4b', '\x00'
-};
-
-REGISTER_RESOURCE(test_resource_dpdk,
- test_resource_dpdk_blob, test_resource_dpdk_blob + 4);
-
-static int test_resource_dpdk(void)
-{
- const struct resource *r;
-
- r = resource_find("test_resource_dpdk");
- TEST_ASSERT_NOT_NULL(r, "Could not find test_resource_dpdk");
- TEST_ASSERT(!strcmp(r->name, "test_resource_dpdk"),
- "Found resource %s, expected test_resource_dpdk",
- r->name);
-
- TEST_ASSERT(!strncmp("DPDK", r->begin, 4),
- "Unexpected payload: %.4s...", r->begin);
-
- return 0;
-}
-
-REGISTER_LINKED_RESOURCE(test_resource_c);
-
-static int test_resource_c(void)
-{
- const struct resource *r;
- FILE *f;
-
- r = resource_find("test_resource_c");
- TEST_ASSERT_NOT_NULL(r, "No test_resource_c found");
- TEST_ASSERT(!strcmp(r->name, "test_resource_c"),
- "Found resource %s, expected test_resource_c",
- r->name);
-
- TEST_ASSERT_SUCCESS(resource_fwrite_file(r, "test_resource.c"),
- "Failed to to write file %s", r->name);
-
- f = fopen("test_resource.c", "r");
- TEST_ASSERT_NOT_NULL(f,
- "Missing extracted file resource.c");
- fclose(f);
- remove("test_resource.c");
-
- return 0;
-}
-
-#ifdef RTE_APP_TEST_RESOURCE_TAR
-REGISTER_LINKED_RESOURCE(test_resource_tar);
-
-static int test_resource_tar(void)
-{
- const struct resource *r;
- FILE *f;
-
- r = resource_find("test_resource_tar");
- TEST_ASSERT_NOT_NULL(r, "No test_resource_tar found");
- TEST_ASSERT(!strcmp(r->name, "test_resource_tar"),
- "Found resource %s, expected test_resource_tar",
- r->name);
-
- TEST_ASSERT_SUCCESS(resource_untar(r),
- "Failed to to untar %s", r->name);
-
- f = fopen("test_resource.c", "r");
- TEST_ASSERT_NOT_NULL(f,
- "Missing extracted file test_resource.c");
- fclose(f);
-
- TEST_ASSERT_SUCCESS(resource_rm_by_tar(r),
- "Failed to remove extracted contents of %s", r->name);
- return 0;
-}
-
-#endif /* RTE_APP_TEST_RESOURCE_TAR */
-
-static int test_resource(void)
-{
- if (test_resource_dpdk())
- return -1;
-
- if (test_resource_c())
- return -1;
-
-#ifdef RTE_APP_TEST_RESOURCE_TAR
- if (test_resource_tar())
- return -1;
-#endif /* RTE_APP_TEST_RESOURCE_TAR */
-
- return 0;
-}
-
-REGISTER_TEST_COMMAND(resource_autotest, test_resource);
diff --git a/app/test/test_ring.c b/app/test/test_ring.c
deleted file mode 100644
index ebcb8964..00000000
--- a/app/test/test_ring.c
+++ /dev/null
@@ -1,1381 +0,0 @@
-/*-
- * BSD LICENSE
- *
- * Copyright(c) 2010-2014 Intel Corporation. All rights reserved.
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * * Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * * Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in
- * the documentation and/or other materials provided with the
- * distribution.
- * * Neither the name of Intel Corporation nor the names of its
- * contributors may be used to endorse or promote products derived
- * from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
- * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
- * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#include <string.h>
-#include <stdarg.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <stdint.h>
-#include <inttypes.h>
-#include <errno.h>
-#include <sys/queue.h>
-
-#include <rte_common.h>
-#include <rte_log.h>
-#include <rte_memory.h>
-#include <rte_memzone.h>
-#include <rte_launch.h>
-#include <rte_cycles.h>
-#include <rte_eal.h>
-#include <rte_per_lcore.h>
-#include <rte_lcore.h>
-#include <rte_atomic.h>
-#include <rte_branch_prediction.h>
-#include <rte_malloc.h>
-#include <rte_ring.h>
-#include <rte_random.h>
-#include <rte_common.h>
-#include <rte_errno.h>
-#include <rte_hexdump.h>
-
-#include "test.h"
-
-/*
- * Ring
- * ====
- *
- * #. Basic tests: done on one core:
- *
- * - Using single producer/single consumer functions:
- *
- * - Enqueue one object, two objects, MAX_BULK objects
- * - Dequeue one object, two objects, MAX_BULK objects
- * - Check that dequeued pointers are correct
- *
- * - Using multi producers/multi consumers functions:
- *
- * - Enqueue one object, two objects, MAX_BULK objects
- * - Dequeue one object, two objects, MAX_BULK objects
- * - Check that dequeued pointers are correct
- *
- * - Test watermark and default bulk enqueue/dequeue:
- *
- * - Set watermark
- * - Set default bulk value
- * - Enqueue objects, check that -EDQUOT is returned when
- * watermark is exceeded
- * - Check that dequeued pointers are correct
- *
- * #. Check live watermark change
- *
- * - Start a loop on another lcore that will enqueue and dequeue
- * objects in a ring. It will monitor the value of watermark.
- * - At the same time, change the watermark on the master lcore.
- * - The slave lcore will check that watermark changes from 16 to 32.
- *
- * #. Performance tests.
- *
- * Tests done in test_ring_perf.c
- */
-
-#define RING_SIZE 4096
-#define MAX_BULK 32
-
-static rte_atomic32_t synchro;
-
-static struct rte_ring *r;
-
-#define TEST_RING_VERIFY(exp) \
- if (!(exp)) { \
- printf("error at %s:%d\tcondition " #exp " failed\n", \
- __func__, __LINE__); \
- rte_ring_dump(stdout, r); \
- return -1; \
- }
-
-#define TEST_RING_FULL_EMTPY_ITER 8
-
-static int
-check_live_watermark_change(__attribute__((unused)) void *dummy)
-{
- uint64_t hz = rte_get_timer_hz();
- void *obj_table[MAX_BULK];
- unsigned watermark, watermark_old = 16;
- uint64_t cur_time, end_time;
- int64_t diff = 0;
- int i, ret;
- unsigned count = 4;
-
- /* init the object table */
- memset(obj_table, 0, sizeof(obj_table));
- end_time = rte_get_timer_cycles() + (hz / 4);
-
- /* check that bulk and watermark are 4 and 32 (respectively) */
- while (diff >= 0) {
-
- /* add in ring until we reach watermark */
- ret = 0;
- for (i = 0; i < 16; i ++) {
- if (ret != 0)
- break;
- ret = rte_ring_enqueue_bulk(r, obj_table, count);
- }
-
- if (ret != -EDQUOT) {
- printf("Cannot enqueue objects, or watermark not "
- "reached (ret=%d)\n", ret);
- return -1;
- }
-
- /* read watermark, the only change allowed is from 16 to 32 */
- watermark = r->prod.watermark;
- if (watermark != watermark_old &&
- (watermark_old != 16 || watermark != 32)) {
- printf("Bad watermark change %u -> %u\n", watermark_old,
- watermark);
- return -1;
- }
- watermark_old = watermark;
-
- /* dequeue objects from ring */
- while (i--) {
- ret = rte_ring_dequeue_bulk(r, obj_table, count);
- if (ret != 0) {
- printf("Cannot dequeue (ret=%d)\n", ret);
- return -1;
- }
- }
-
- cur_time = rte_get_timer_cycles();
- diff = end_time - cur_time;
- }
-
- if (watermark_old != 32 ) {
- printf(" watermark was not updated (wm=%u)\n",
- watermark_old);
- return -1;
- }
-
- return 0;
-}
-
-static int
-test_live_watermark_change(void)
-{
- unsigned lcore_id = rte_lcore_id();
- unsigned lcore_id2 = rte_get_next_lcore(lcore_id, 0, 1);
-
- printf("Test watermark live modification\n");
- rte_ring_set_water_mark(r, 16);
-
- /* launch a thread that will enqueue and dequeue, checking
- * watermark and quota */
- rte_eal_remote_launch(check_live_watermark_change, NULL, lcore_id2);
-
- rte_delay_ms(100);
- rte_ring_set_water_mark(r, 32);
- rte_delay_ms(100);
-
- if (rte_eal_wait_lcore(lcore_id2) < 0)
- return -1;
-
- return 0;
-}
-
-/* Test for catch on invalid watermark values */
-static int
-test_set_watermark( void ){
- unsigned count;
- int setwm;
-
- struct rte_ring *r = rte_ring_lookup("test_ring_basic_ex");
- if(r == NULL){
- printf( " ring lookup failed\n" );
- goto error;
- }
- count = r->prod.size*2;
- setwm = rte_ring_set_water_mark(r, count);
- if (setwm != -EINVAL){
- printf("Test failed to detect invalid watermark count value\n");
- goto error;
- }
-
- count = 0;
- rte_ring_set_water_mark(r, count);
- if (r->prod.watermark != r->prod.size) {
- printf("Test failed to detect invalid watermark count value\n");
- goto error;
- }
- return 0;
-
-error:
- return -1;
-}
-
-/*
- * helper routine for test_ring_basic
- */
-static int
-test_ring_basic_full_empty(void * const src[], void *dst[])
-{
- unsigned i, rand;
- const unsigned rsz = RING_SIZE - 1;
-
- printf("Basic full/empty test\n");
-
- for (i = 0; TEST_RING_FULL_EMTPY_ITER != i; i++) {
-
- /* random shift in the ring */
- rand = RTE_MAX(rte_rand() % RING_SIZE, 1UL);
- printf("%s: iteration %u, random shift: %u;\n",
- __func__, i, rand);
- TEST_RING_VERIFY(-ENOBUFS != rte_ring_enqueue_bulk(r, src,
- rand));
- TEST_RING_VERIFY(0 == rte_ring_dequeue_bulk(r, dst, rand));
-
- /* fill the ring */
- TEST_RING_VERIFY(-ENOBUFS != rte_ring_enqueue_bulk(r, src,
- rsz));
- TEST_RING_VERIFY(0 == rte_ring_free_count(r));
- TEST_RING_VERIFY(rsz == rte_ring_count(r));
- TEST_RING_VERIFY(rte_ring_full(r));
- TEST_RING_VERIFY(0 == rte_ring_empty(r));
-
- /* empty the ring */
- TEST_RING_VERIFY(0 == rte_ring_dequeue_bulk(r, dst, rsz));
- TEST_RING_VERIFY(rsz == rte_ring_free_count(r));
- TEST_RING_VERIFY(0 == rte_ring_count(r));
- TEST_RING_VERIFY(0 == rte_ring_full(r));
- TEST_RING_VERIFY(rte_ring_empty(r));
-
- /* check data */
- TEST_RING_VERIFY(0 == memcmp(src, dst, rsz));
- rte_ring_dump(stdout, r);
- }
- return 0;
-}
-
-static int
-test_ring_basic(void)
-{
- void **src = NULL, **cur_src = NULL, **dst = NULL, **cur_dst = NULL;
- int ret;
- unsigned i, num_elems;
-
- /* alloc dummy object pointers */
- src = malloc(RING_SIZE*2*sizeof(void *));
- if (src == NULL)
- goto fail;
-
- for (i = 0; i < RING_SIZE*2 ; i++) {
- src[i] = (void *)(unsigned long)i;
- }
- cur_src = src;
-
- /* alloc some room for copied objects */
- dst = malloc(RING_SIZE*2*sizeof(void *));
- if (dst == NULL)
- goto fail;
-
- memset(dst, 0, RING_SIZE*2*sizeof(void *));
- cur_dst = dst;
-
- printf("enqueue 1 obj\n");
- ret = rte_ring_sp_enqueue_bulk(r, cur_src, 1);
- cur_src += 1;
- if (ret != 0)
- goto fail;
-
- printf("enqueue 2 objs\n");
- ret = rte_ring_sp_enqueue_bulk(r, cur_src, 2);
- cur_src += 2;
- if (ret != 0)
- goto fail;
-
- printf("enqueue MAX_BULK objs\n");
- ret = rte_ring_sp_enqueue_bulk(r, cur_src, MAX_BULK);
- cur_src += MAX_BULK;
- if (ret != 0)
- goto fail;
-
- printf("dequeue 1 obj\n");
- ret = rte_ring_sc_dequeue_bulk(r, cur_dst, 1);
- cur_dst += 1;
- if (ret != 0)
- goto fail;
-
- printf("dequeue 2 objs\n");
- ret = rte_ring_sc_dequeue_bulk(r, cur_dst, 2);
- cur_dst += 2;
- if (ret != 0)
- goto fail;
-
- printf("dequeue MAX_BULK objs\n");
- ret = rte_ring_sc_dequeue_bulk(r, cur_dst, MAX_BULK);
- cur_dst += MAX_BULK;
- if (ret != 0)
- goto fail;
-
- /* check data */
- if (memcmp(src, dst, cur_dst - dst)) {
- rte_hexdump(stdout, "src", src, cur_src - src);
- rte_hexdump(stdout, "dst", dst, cur_dst - dst);
- printf("data after dequeue is not the same\n");
- goto fail;
- }
- cur_src = src;
- cur_dst = dst;
-
- printf("enqueue 1 obj\n");
- ret = rte_ring_mp_enqueue_bulk(r, cur_src, 1);
- cur_src += 1;
- if (ret != 0)
- goto fail;
-
- printf("enqueue 2 objs\n");
- ret = rte_ring_mp_enqueue_bulk(r, cur_src, 2);
- cur_src += 2;
- if (ret != 0)
- goto fail;
-
- printf("enqueue MAX_BULK objs\n");
- ret = rte_ring_mp_enqueue_bulk(r, cur_src, MAX_BULK);
- cur_src += MAX_BULK;
- if (ret != 0)
- goto fail;
-
- printf("dequeue 1 obj\n");
- ret = rte_ring_mc_dequeue_bulk(r, cur_dst, 1);
- cur_dst += 1;
- if (ret != 0)
- goto fail;
-
- printf("dequeue 2 objs\n");
- ret = rte_ring_mc_dequeue_bulk(r, cur_dst, 2);
- cur_dst += 2;
- if (ret != 0)
- goto fail;
-
- printf("dequeue MAX_BULK objs\n");
- ret = rte_ring_mc_dequeue_bulk(r, cur_dst, MAX_BULK);
- cur_dst += MAX_BULK;
- if (ret != 0)
- goto fail;
-
- /* check data */
- if (memcmp(src, dst, cur_dst - dst)) {
- rte_hexdump(stdout, "src", src, cur_src - src);
- rte_hexdump(stdout, "dst", dst, cur_dst - dst);
- printf("data after dequeue is not the same\n");
- goto fail;
- }
- cur_src = src;
- cur_dst = dst;
-
- printf("fill and empty the ring\n");
- for (i = 0; i<RING_SIZE/MAX_BULK; i++) {
- ret = rte_ring_mp_enqueue_bulk(r, cur_src, MAX_BULK);
- cur_src += MAX_BULK;
- if (ret != 0)
- goto fail;
- ret = rte_ring_mc_dequeue_bulk(r, cur_dst, MAX_BULK);
- cur_dst += MAX_BULK;
- if (ret != 0)
- goto fail;
- }
-
- /* check data */
- if (memcmp(src, dst, cur_dst - dst)) {
- rte_hexdump(stdout, "src", src, cur_src - src);
- rte_hexdump(stdout, "dst", dst, cur_dst - dst);
- printf("data after dequeue is not the same\n");
- goto fail;
- }
-
- if (test_ring_basic_full_empty(src, dst) != 0)
- goto fail;
-
- cur_src = src;
- cur_dst = dst;
-
- printf("test watermark and default bulk enqueue / dequeue\n");
- rte_ring_set_water_mark(r, 20);
- num_elems = 16;
-
- cur_src = src;
- cur_dst = dst;
-
- ret = rte_ring_enqueue_bulk(r, cur_src, num_elems);
- cur_src += num_elems;
- if (ret != 0) {
- printf("Cannot enqueue\n");
- goto fail;
- }
- ret = rte_ring_enqueue_bulk(r, cur_src, num_elems);
- cur_src += num_elems;
- if (ret != -EDQUOT) {
- printf("Watermark not exceeded\n");
- goto fail;
- }
- ret = rte_ring_dequeue_bulk(r, cur_dst, num_elems);
- cur_dst += num_elems;
- if (ret != 0) {
- printf("Cannot dequeue\n");
- goto fail;
- }
- ret = rte_ring_dequeue_bulk(r, cur_dst, num_elems);
- cur_dst += num_elems;
- if (ret != 0) {
- printf("Cannot dequeue2\n");
- goto fail;
- }
-
- /* check data */
- if (memcmp(src, dst, cur_dst - dst)) {
- rte_hexdump(stdout, "src", src, cur_src - src);
- rte_hexdump(stdout, "dst", dst, cur_dst - dst);
- printf("data after dequeue is not the same\n");
- goto fail;
- }
-
- cur_src = src;
- cur_dst = dst;
-
- ret = rte_ring_mp_enqueue(r, cur_src);
- if (ret != 0)
- goto fail;
-
- ret = rte_ring_mc_dequeue(r, cur_dst);
- if (ret != 0)
- goto fail;
-
- free(src);
- free(dst);
- return 0;
-
- fail:
- free(src);
- free(dst);
- return -1;
-}
-
-static int
-test_ring_burst_basic(void)
-{
- void **src = NULL, **cur_src = NULL, **dst = NULL, **cur_dst = NULL;
- int ret;
- unsigned i;
-
- /* alloc dummy object pointers */
- src = malloc(RING_SIZE*2*sizeof(void *));
- if (src == NULL)
- goto fail;
-
- for (i = 0; i < RING_SIZE*2 ; i++) {
- src[i] = (void *)(unsigned long)i;
- }
- cur_src = src;
-
- /* alloc some room for copied objects */
- dst = malloc(RING_SIZE*2*sizeof(void *));
- if (dst == NULL)
- goto fail;
-
- memset(dst, 0, RING_SIZE*2*sizeof(void *));
- cur_dst = dst;
-
- printf("Test SP & SC basic functions \n");
- printf("enqueue 1 obj\n");
- ret = rte_ring_sp_enqueue_burst(r, cur_src, 1);
- cur_src += 1;
- if ((ret & RTE_RING_SZ_MASK) != 1)
- goto fail;
-
- printf("enqueue 2 objs\n");
- ret = rte_ring_sp_enqueue_burst(r, cur_src, 2);
- cur_src += 2;
- if ((ret & RTE_RING_SZ_MASK) != 2)
- goto fail;
-
- printf("enqueue MAX_BULK objs\n");
- ret = rte_ring_sp_enqueue_burst(r, cur_src, MAX_BULK) ;
- cur_src += MAX_BULK;
- if ((ret & RTE_RING_SZ_MASK) != MAX_BULK)
- goto fail;
-
- printf("dequeue 1 obj\n");
- ret = rte_ring_sc_dequeue_burst(r, cur_dst, 1) ;
- cur_dst += 1;
- if ((ret & RTE_RING_SZ_MASK) != 1)
- goto fail;
-
- printf("dequeue 2 objs\n");
- ret = rte_ring_sc_dequeue_burst(r, cur_dst, 2);
- cur_dst += 2;
- if ((ret & RTE_RING_SZ_MASK) != 2)
- goto fail;
-
- printf("dequeue MAX_BULK objs\n");
- ret = rte_ring_sc_dequeue_burst(r, cur_dst, MAX_BULK);
- cur_dst += MAX_BULK;
- if ((ret & RTE_RING_SZ_MASK) != MAX_BULK)
- goto fail;
-
- /* check data */
- if (memcmp(src, dst, cur_dst - dst)) {
- rte_hexdump(stdout, "src", src, cur_src - src);
- rte_hexdump(stdout, "dst", dst, cur_dst - dst);
- printf("data after dequeue is not the same\n");
- goto fail;
- }
-
- cur_src = src;
- cur_dst = dst;
-
- printf("Test enqueue without enough memory space \n");
- for (i = 0; i< (RING_SIZE/MAX_BULK - 1); i++) {
- ret = rte_ring_sp_enqueue_burst(r, cur_src, MAX_BULK);
- cur_src += MAX_BULK;
- if ((ret & RTE_RING_SZ_MASK) != MAX_BULK) {
- goto fail;
- }
- }
-
- printf("Enqueue 2 objects, free entries = MAX_BULK - 2 \n");
- ret = rte_ring_sp_enqueue_burst(r, cur_src, 2);
- cur_src += 2;
- if ((ret & RTE_RING_SZ_MASK) != 2)
- goto fail;
-
- printf("Enqueue the remaining entries = MAX_BULK - 2 \n");
- /* Always one free entry left */
- ret = rte_ring_sp_enqueue_burst(r, cur_src, MAX_BULK);
- cur_src += MAX_BULK - 3;
- if ((ret & RTE_RING_SZ_MASK) != MAX_BULK - 3)
- goto fail;
-
- printf("Test if ring is full \n");
- if (rte_ring_full(r) != 1)
- goto fail;
-
- printf("Test enqueue for a full entry \n");
- ret = rte_ring_sp_enqueue_burst(r, cur_src, MAX_BULK);
- if ((ret & RTE_RING_SZ_MASK) != 0)
- goto fail;
-
- printf("Test dequeue without enough objects \n");
- for (i = 0; i<RING_SIZE/MAX_BULK - 1; i++) {
- ret = rte_ring_sc_dequeue_burst(r, cur_dst, MAX_BULK);
- cur_dst += MAX_BULK;
- if ((ret & RTE_RING_SZ_MASK) != MAX_BULK)
- goto fail;
- }
-
- /* Available memory space for the exact MAX_BULK entries */
- ret = rte_ring_sc_dequeue_burst(r, cur_dst, 2);
- cur_dst += 2;
- if ((ret & RTE_RING_SZ_MASK) != 2)
- goto fail;
-
- ret = rte_ring_sc_dequeue_burst(r, cur_dst, MAX_BULK);
- cur_dst += MAX_BULK - 3;
- if ((ret & RTE_RING_SZ_MASK) != MAX_BULK - 3)
- goto fail;
-
- printf("Test if ring is empty \n");
- /* Check if ring is empty */
- if (1 != rte_ring_empty(r))
- goto fail;
-
- /* check data */
- if (memcmp(src, dst, cur_dst - dst)) {
- rte_hexdump(stdout, "src", src, cur_src - src);
- rte_hexdump(stdout, "dst", dst, cur_dst - dst);
- printf("data after dequeue is not the same\n");
- goto fail;
- }
-
- cur_src = src;
- cur_dst = dst;
-
- printf("Test MP & MC basic functions \n");
-
- printf("enqueue 1 obj\n");
- ret = rte_ring_mp_enqueue_burst(r, cur_src, 1);
- cur_src += 1;
- if ((ret & RTE_RING_SZ_MASK) != 1)
- goto fail;
-
- printf("enqueue 2 objs\n");
- ret = rte_ring_mp_enqueue_burst(r, cur_src, 2);
- cur_src += 2;
- if ((ret & RTE_RING_SZ_MASK) != 2)
- goto fail;
-
- printf("enqueue MAX_BULK objs\n");
- ret = rte_ring_mp_enqueue_burst(r, cur_src, MAX_BULK);
- cur_src += MAX_BULK;
- if ((ret & RTE_RING_SZ_MASK) != MAX_BULK)
- goto fail;
-
- printf("dequeue 1 obj\n");
- ret = rte_ring_mc_dequeue_burst(r, cur_dst, 1);
- cur_dst += 1;
- if ((ret & RTE_RING_SZ_MASK) != 1)
- goto fail;
-
- printf("dequeue 2 objs\n");
- ret = rte_ring_mc_dequeue_burst(r, cur_dst, 2);
- cur_dst += 2;
- if ((ret & RTE_RING_SZ_MASK) != 2)
- goto fail;
-
- printf("dequeue MAX_BULK objs\n");
- ret = rte_ring_mc_dequeue_burst(r, cur_dst, MAX_BULK);
- cur_dst += MAX_BULK;
- if ((ret & RTE_RING_SZ_MASK) != MAX_BULK)
- goto fail;
-
- /* check data */
- if (memcmp(src, dst, cur_dst - dst)) {
- rte_hexdump(stdout, "src", src, cur_src - src);
- rte_hexdump(stdout, "dst", dst, cur_dst - dst);
- printf("data after dequeue is not the same\n");
- goto fail;
- }
-
- cur_src = src;
- cur_dst = dst;
-
- printf("fill and empty the ring\n");
- for (i = 0; i<RING_SIZE/MAX_BULK; i++) {
- ret = rte_ring_mp_enqueue_burst(r, cur_src, MAX_BULK);
- cur_src += MAX_BULK;
- if ((ret & RTE_RING_SZ_MASK) != MAX_BULK)
- goto fail;
- ret = rte_ring_mc_dequeue_burst(r, cur_dst, MAX_BULK);
- cur_dst += MAX_BULK;
- if ((ret & RTE_RING_SZ_MASK) != MAX_BULK)
- goto fail;
- }
-
- /* check data */
- if (memcmp(src, dst, cur_dst - dst)) {
- rte_hexdump(stdout, "src", src, cur_src - src);
- rte_hexdump(stdout, "dst", dst, cur_dst - dst);
- printf("data after dequeue is not the same\n");
- goto fail;
- }
-
- cur_src = src;
- cur_dst = dst;
-
- printf("Test enqueue without enough memory space \n");
- for (i = 0; i<RING_SIZE/MAX_BULK - 1; i++) {
- ret = rte_ring_mp_enqueue_burst(r, cur_src, MAX_BULK);
- cur_src += MAX_BULK;
- if ((ret & RTE_RING_SZ_MASK) != MAX_BULK)
- goto fail;
- }
-
- /* Available memory space for the exact MAX_BULK objects */
- ret = rte_ring_mp_enqueue_burst(r, cur_src, 2);
- cur_src += 2;
- if ((ret & RTE_RING_SZ_MASK) != 2)
- goto fail;
-
- ret = rte_ring_mp_enqueue_burst(r, cur_src, MAX_BULK);
- cur_src += MAX_BULK - 3;
- if ((ret & RTE_RING_SZ_MASK) != MAX_BULK - 3)
- goto fail;
-
-
- printf("Test dequeue without enough objects \n");
- for (i = 0; i<RING_SIZE/MAX_BULK - 1; i++) {
- ret = rte_ring_mc_dequeue_burst(r, cur_dst, MAX_BULK);
- cur_dst += MAX_BULK;
- if ((ret & RTE_RING_SZ_MASK) != MAX_BULK)
- goto fail;
- }
-
- /* Available objects - the exact MAX_BULK */
- ret = rte_ring_mc_dequeue_burst(r, cur_dst, 2);
- cur_dst += 2;
- if ((ret & RTE_RING_SZ_MASK) != 2)
- goto fail;
-
- ret = rte_ring_mc_dequeue_burst(r, cur_dst, MAX_BULK);
- cur_dst += MAX_BULK - 3;
- if ((ret & RTE_RING_SZ_MASK) != MAX_BULK - 3)
- goto fail;
-
- /* check data */
- if (memcmp(src, dst, cur_dst - dst)) {
- rte_hexdump(stdout, "src", src, cur_src - src);
- rte_hexdump(stdout, "dst", dst, cur_dst - dst);
- printf("data after dequeue is not the same\n");
- goto fail;
- }
-
- cur_src = src;
- cur_dst = dst;
-
- printf("Covering rte_ring_enqueue_burst functions \n");
-
- ret = rte_ring_enqueue_burst(r, cur_src, 2);
- cur_src += 2;
- if ((ret & RTE_RING_SZ_MASK) != 2)
- goto fail;
-
- ret = rte_ring_dequeue_burst(r, cur_dst, 2);
- cur_dst += 2;
- if (ret != 2)
- goto fail;
-
- /* Free memory before test completed */
- free(src);
- free(dst);
- return 0;
-
- fail:
- free(src);
- free(dst);
- return -1;
-}
-
-static int
-test_ring_stats(void)
-{
-
-#ifndef RTE_LIBRTE_RING_DEBUG
- printf("Enable RTE_LIBRTE_RING_DEBUG to test ring stats.\n");
- return 0;
-#else
- void **src = NULL, **cur_src = NULL, **dst = NULL, **cur_dst = NULL;
- int ret;
- unsigned i;
- unsigned num_items = 0;
- unsigned failed_enqueue_ops = 0;
- unsigned failed_enqueue_items = 0;
- unsigned failed_dequeue_ops = 0;
- unsigned failed_dequeue_items = 0;
- unsigned last_enqueue_ops = 0;
- unsigned last_enqueue_items = 0;
- unsigned last_quota_ops = 0;
- unsigned last_quota_items = 0;
- unsigned lcore_id = rte_lcore_id();
- struct rte_ring_debug_stats *ring_stats = &r->stats[lcore_id];
-
- printf("Test the ring stats.\n");
-
- /* Reset the watermark in case it was set in another test. */
- rte_ring_set_water_mark(r, 0);
-
- /* Reset the ring stats. */
- memset(&r->stats[lcore_id], 0, sizeof(r->stats[lcore_id]));
-
- /* Allocate some dummy object pointers. */
- src = malloc(RING_SIZE*2*sizeof(void *));
- if (src == NULL)
- goto fail;
-
- for (i = 0; i < RING_SIZE*2 ; i++) {
- src[i] = (void *)(unsigned long)i;
- }
-
- /* Allocate some memory for copied objects. */
- dst = malloc(RING_SIZE*2*sizeof(void *));
- if (dst == NULL)
- goto fail;
-
- memset(dst, 0, RING_SIZE*2*sizeof(void *));
-
- /* Set the head and tail pointers. */
- cur_src = src;
- cur_dst = dst;
-
- /* Do Enqueue tests. */
- printf("Test the dequeue stats.\n");
-
- /* Fill the ring up to RING_SIZE -1. */
- printf("Fill the ring.\n");
- for (i = 0; i< (RING_SIZE/MAX_BULK); i++) {
- rte_ring_sp_enqueue_burst(r, cur_src, MAX_BULK);
- cur_src += MAX_BULK;
- }
-
- /* Adjust for final enqueue = MAX_BULK -1. */
- cur_src--;
-
- printf("Verify that the ring is full.\n");
- if (rte_ring_full(r) != 1)
- goto fail;
-
-
- printf("Verify the enqueue success stats.\n");
- /* Stats should match above enqueue operations to fill the ring. */
- if (ring_stats->enq_success_bulk != (RING_SIZE/MAX_BULK))
- goto fail;
-
- /* Current max objects is RING_SIZE -1. */
- if (ring_stats->enq_success_objs != RING_SIZE -1)
- goto fail;
-
- /* Shouldn't have any failures yet. */
- if (ring_stats->enq_fail_bulk != 0)
- goto fail;
- if (ring_stats->enq_fail_objs != 0)
- goto fail;
-
-
- printf("Test stats for SP burst enqueue to a full ring.\n");
- num_items = 2;
- ret = rte_ring_sp_enqueue_burst(r, cur_src, num_items);
- if ((ret & RTE_RING_SZ_MASK) != 0)
- goto fail;
-
- failed_enqueue_ops += 1;
- failed_enqueue_items += num_items;
-
- /* The enqueue should have failed. */
- if (ring_stats->enq_fail_bulk != failed_enqueue_ops)
- goto fail;
- if (ring_stats->enq_fail_objs != failed_enqueue_items)
- goto fail;
-
-
- printf("Test stats for SP bulk enqueue to a full ring.\n");
- num_items = 4;
- ret = rte_ring_sp_enqueue_bulk(r, cur_src, num_items);
- if (ret != -ENOBUFS)
- goto fail;
-
- failed_enqueue_ops += 1;
- failed_enqueue_items += num_items;
-
- /* The enqueue should have failed. */
- if (ring_stats->enq_fail_bulk != failed_enqueue_ops)
- goto fail;
- if (ring_stats->enq_fail_objs != failed_enqueue_items)
- goto fail;
-
-
- printf("Test stats for MP burst enqueue to a full ring.\n");
- num_items = 8;
- ret = rte_ring_mp_enqueue_burst(r, cur_src, num_items);
- if ((ret & RTE_RING_SZ_MASK) != 0)
- goto fail;
-
- failed_enqueue_ops += 1;
- failed_enqueue_items += num_items;
-
- /* The enqueue should have failed. */
- if (ring_stats->enq_fail_bulk != failed_enqueue_ops)
- goto fail;
- if (ring_stats->enq_fail_objs != failed_enqueue_items)
- goto fail;
-
-
- printf("Test stats for MP bulk enqueue to a full ring.\n");
- num_items = 16;
- ret = rte_ring_mp_enqueue_bulk(r, cur_src, num_items);
- if (ret != -ENOBUFS)
- goto fail;
-
- failed_enqueue_ops += 1;
- failed_enqueue_items += num_items;
-
- /* The enqueue should have failed. */
- if (ring_stats->enq_fail_bulk != failed_enqueue_ops)
- goto fail;
- if (ring_stats->enq_fail_objs != failed_enqueue_items)
- goto fail;
-
-
- /* Do Dequeue tests. */
- printf("Test the dequeue stats.\n");
-
- printf("Empty the ring.\n");
- for (i = 0; i<RING_SIZE/MAX_BULK; i++) {
- rte_ring_sc_dequeue_burst(r, cur_dst, MAX_BULK);
- cur_dst += MAX_BULK;
- }
-
- /* There was only RING_SIZE -1 objects to dequeue. */
- cur_dst++;
-
- printf("Verify ring is empty.\n");
- if (1 != rte_ring_empty(r))
- goto fail;
-
- printf("Verify the dequeue success stats.\n");
- /* Stats should match above dequeue operations. */
- if (ring_stats->deq_success_bulk != (RING_SIZE/MAX_BULK))
- goto fail;
-
- /* Objects dequeued is RING_SIZE -1. */
- if (ring_stats->deq_success_objs != RING_SIZE -1)
- goto fail;
-
- /* Shouldn't have any dequeue failure stats yet. */
- if (ring_stats->deq_fail_bulk != 0)
- goto fail;
-
- printf("Test stats for SC burst dequeue with an empty ring.\n");
- num_items = 2;
- ret = rte_ring_sc_dequeue_burst(r, cur_dst, num_items);
- if ((ret & RTE_RING_SZ_MASK) != 0)
- goto fail;
-
- failed_dequeue_ops += 1;
- failed_dequeue_items += num_items;
-
- /* The dequeue should have failed. */
- if (ring_stats->deq_fail_bulk != failed_dequeue_ops)
- goto fail;
- if (ring_stats->deq_fail_objs != failed_dequeue_items)
- goto fail;
-
-
- printf("Test stats for SC bulk dequeue with an empty ring.\n");
- num_items = 4;
- ret = rte_ring_sc_dequeue_bulk(r, cur_dst, num_items);
- if (ret != -ENOENT)
- goto fail;
-
- failed_dequeue_ops += 1;
- failed_dequeue_items += num_items;
-
- /* The dequeue should have failed. */
- if (ring_stats->deq_fail_bulk != failed_dequeue_ops)
- goto fail;
- if (ring_stats->deq_fail_objs != failed_dequeue_items)
- goto fail;
-
-
- printf("Test stats for MC burst dequeue with an empty ring.\n");
- num_items = 8;
- ret = rte_ring_mc_dequeue_burst(r, cur_dst, num_items);
- if ((ret & RTE_RING_SZ_MASK) != 0)
- goto fail;
- failed_dequeue_ops += 1;
- failed_dequeue_items += num_items;
-
- /* The dequeue should have failed. */
- if (ring_stats->deq_fail_bulk != failed_dequeue_ops)
- goto fail;
- if (ring_stats->deq_fail_objs != failed_dequeue_items)
- goto fail;
-
-
- printf("Test stats for MC bulk dequeue with an empty ring.\n");
- num_items = 16;
- ret = rte_ring_mc_dequeue_bulk(r, cur_dst, num_items);
- if (ret != -ENOENT)
- goto fail;
-
- failed_dequeue_ops += 1;
- failed_dequeue_items += num_items;
-
- /* The dequeue should have failed. */
- if (ring_stats->deq_fail_bulk != failed_dequeue_ops)
- goto fail;
- if (ring_stats->deq_fail_objs != failed_dequeue_items)
- goto fail;
-
-
- printf("Test total enqueue/dequeue stats.\n");
- /* At this point the enqueue and dequeue stats should be the same. */
- if (ring_stats->enq_success_bulk != ring_stats->deq_success_bulk)
- goto fail;
- if (ring_stats->enq_success_objs != ring_stats->deq_success_objs)
- goto fail;
- if (ring_stats->enq_fail_bulk != ring_stats->deq_fail_bulk)
- goto fail;
- if (ring_stats->enq_fail_objs != ring_stats->deq_fail_objs)
- goto fail;
-
-
- /* Watermark Tests. */
- printf("Test the watermark/quota stats.\n");
-
- printf("Verify the initial watermark stats.\n");
- /* Watermark stats should be 0 since there is no watermark. */
- if (ring_stats->enq_quota_bulk != 0)
- goto fail;
- if (ring_stats->enq_quota_objs != 0)
- goto fail;
-
- /* Set a watermark. */
- rte_ring_set_water_mark(r, 16);
-
- /* Reset pointers. */
- cur_src = src;
- cur_dst = dst;
-
- last_enqueue_ops = ring_stats->enq_success_bulk;
- last_enqueue_items = ring_stats->enq_success_objs;
-
-
- printf("Test stats for SP burst enqueue below watermark.\n");
- num_items = 8;
- ret = rte_ring_sp_enqueue_burst(r, cur_src, num_items);
- if ((ret & RTE_RING_SZ_MASK) != num_items)
- goto fail;
-
- /* Watermark stats should still be 0. */
- if (ring_stats->enq_quota_bulk != 0)
- goto fail;
- if (ring_stats->enq_quota_objs != 0)
- goto fail;
-
- /* Success stats should have increased. */
- if (ring_stats->enq_success_bulk != last_enqueue_ops + 1)
- goto fail;
- if (ring_stats->enq_success_objs != last_enqueue_items + num_items)
- goto fail;
-
- last_enqueue_ops = ring_stats->enq_success_bulk;
- last_enqueue_items = ring_stats->enq_success_objs;
-
-
- printf("Test stats for SP burst enqueue at watermark.\n");
- num_items = 8;
- ret = rte_ring_sp_enqueue_burst(r, cur_src, num_items);
- if ((ret & RTE_RING_SZ_MASK) != num_items)
- goto fail;
-
- /* Watermark stats should have changed. */
- if (ring_stats->enq_quota_bulk != 1)
- goto fail;
- if (ring_stats->enq_quota_objs != num_items)
- goto fail;
-
- last_quota_ops = ring_stats->enq_quota_bulk;
- last_quota_items = ring_stats->enq_quota_objs;
-
-
- printf("Test stats for SP burst enqueue above watermark.\n");
- num_items = 1;
- ret = rte_ring_sp_enqueue_burst(r, cur_src, num_items);
- if ((ret & RTE_RING_SZ_MASK) != num_items)
- goto fail;
-
- /* Watermark stats should have changed. */
- if (ring_stats->enq_quota_bulk != last_quota_ops +1)
- goto fail;
- if (ring_stats->enq_quota_objs != last_quota_items + num_items)
- goto fail;
-
- last_quota_ops = ring_stats->enq_quota_bulk;
- last_quota_items = ring_stats->enq_quota_objs;
-
-
- printf("Test stats for MP burst enqueue above watermark.\n");
- num_items = 2;
- ret = rte_ring_mp_enqueue_burst(r, cur_src, num_items);
- if ((ret & RTE_RING_SZ_MASK) != num_items)
- goto fail;
-
- /* Watermark stats should have changed. */
- if (ring_stats->enq_quota_bulk != last_quota_ops +1)
- goto fail;
- if (ring_stats->enq_quota_objs != last_quota_items + num_items)
- goto fail;
-
- last_quota_ops = ring_stats->enq_quota_bulk;
- last_quota_items = ring_stats->enq_quota_objs;
-
-
- printf("Test stats for SP bulk enqueue above watermark.\n");
- num_items = 4;
- ret = rte_ring_sp_enqueue_bulk(r, cur_src, num_items);
- if (ret != -EDQUOT)
- goto fail;
-
- /* Watermark stats should have changed. */
- if (ring_stats->enq_quota_bulk != last_quota_ops +1)
- goto fail;
- if (ring_stats->enq_quota_objs != last_quota_items + num_items)
- goto fail;
-
- last_quota_ops = ring_stats->enq_quota_bulk;
- last_quota_items = ring_stats->enq_quota_objs;
-
-
- printf("Test stats for MP bulk enqueue above watermark.\n");
- num_items = 8;
- ret = rte_ring_mp_enqueue_bulk(r, cur_src, num_items);
- if (ret != -EDQUOT)
- goto fail;
-
- /* Watermark stats should have changed. */
- if (ring_stats->enq_quota_bulk != last_quota_ops +1)
- goto fail;
- if (ring_stats->enq_quota_objs != last_quota_items + num_items)
- goto fail;
-
- printf("Test watermark success stats.\n");
- /* Success stats should be same as last non-watermarked enqueue. */
- if (ring_stats->enq_success_bulk != last_enqueue_ops)
- goto fail;
- if (ring_stats->enq_success_objs != last_enqueue_items)
- goto fail;
-
-
- /* Cleanup. */
-
- /* Empty the ring. */
- for (i = 0; i<RING_SIZE/MAX_BULK; i++) {
- rte_ring_sc_dequeue_burst(r, cur_dst, MAX_BULK);
- cur_dst += MAX_BULK;
- }
-
- /* Reset the watermark. */
- rte_ring_set_water_mark(r, 0);
-
- /* Reset the ring stats. */
- memset(&r->stats[lcore_id], 0, sizeof(r->stats[lcore_id]));
-
- /* Free memory before test completed */
- free(src);
- free(dst);
- return 0;
-
-fail:
- free(src);
- free(dst);
- return -1;
-#endif
-}
-
-/*
- * it will always fail to create ring with a wrong ring size number in this function
- */
-static int
-test_ring_creation_with_wrong_size(void)
-{
- struct rte_ring * rp = NULL;
-
- /* Test if ring size is not power of 2 */
- rp = rte_ring_create("test_bad_ring_size", RING_SIZE + 1, SOCKET_ID_ANY, 0);
- if (NULL != rp) {
- return -1;
- }
-
- /* Test if ring size is exceeding the limit */
- rp = rte_ring_create("test_bad_ring_size", (RTE_RING_SZ_MASK + 1), SOCKET_ID_ANY, 0);
- if (NULL != rp) {
- return -1;
- }
- return 0;
-}
-
-/*
- * it tests if it would always fail to create ring with an used ring name
- */
-static int
-test_ring_creation_with_an_used_name(void)
-{
- struct rte_ring * rp;
-
- rp = rte_ring_create("test", RING_SIZE, SOCKET_ID_ANY, 0);
- if (NULL != rp)
- return -1;
-
- return 0;
-}
-
-/*
- * Test to if a non-power of 2 count causes the create
- * function to fail correctly
- */
-static int
-test_create_count_odd(void)
-{
- struct rte_ring *r = rte_ring_create("test_ring_count",
- 4097, SOCKET_ID_ANY, 0 );
- if(r != NULL){
- return -1;
- }
- return 0;
-}
-
-static int
-test_lookup_null(void)
-{
- struct rte_ring *rlp = rte_ring_lookup("ring_not_found");
- if (rlp ==NULL)
- if (rte_errno != ENOENT){
- printf( "test failed to returnn error on null pointer\n");
- return -1;
- }
- return 0;
-}
-
-/*
- * it tests some more basic ring operations
- */
-static int
-test_ring_basic_ex(void)
-{
- int ret = -1;
- unsigned i;
- struct rte_ring * rp;
- void **obj = NULL;
-
- obj = rte_calloc("test_ring_basic_ex_malloc", RING_SIZE, sizeof(void *), 0);
- if (obj == NULL) {
- printf("test_ring_basic_ex fail to rte_malloc\n");
- goto fail_test;
- }
-
- rp = rte_ring_create("test_ring_basic_ex", RING_SIZE, SOCKET_ID_ANY,
- RING_F_SP_ENQ | RING_F_SC_DEQ);
- if (rp == NULL) {
- printf("test_ring_basic_ex fail to create ring\n");
- goto fail_test;
- }
-
- if (rte_ring_lookup("test_ring_basic_ex") != rp) {
- goto fail_test;
- }
-
- if (rte_ring_empty(rp) != 1) {
- printf("test_ring_basic_ex ring is not empty but it should be\n");
- goto fail_test;
- }
-
- printf("%u ring entries are now free\n", rte_ring_free_count(rp));
-
- for (i = 0; i < RING_SIZE; i ++) {
- rte_ring_enqueue(rp, obj[i]);
- }
-
- if (rte_ring_full(rp) != 1) {
- printf("test_ring_basic_ex ring is not full but it should be\n");
- goto fail_test;
- }
-
- for (i = 0; i < RING_SIZE; i ++) {
- rte_ring_dequeue(rp, &obj[i]);
- }
-
- if (rte_ring_empty(rp) != 1) {
- printf("test_ring_basic_ex ring is not empty but it should be\n");
- goto fail_test;
- }
-
- /* Covering the ring burst operation */
- ret = rte_ring_enqueue_burst(rp, obj, 2);
- if ((ret & RTE_RING_SZ_MASK) != 2) {
- printf("test_ring_basic_ex: rte_ring_enqueue_burst fails \n");
- goto fail_test;
- }
-
- ret = rte_ring_dequeue_burst(rp, obj, 2);
- if (ret != 2) {
- printf("test_ring_basic_ex: rte_ring_dequeue_burst fails \n");
- goto fail_test;
- }
-
- ret = 0;
-fail_test:
- if (obj != NULL)
- rte_free(obj);
-
- return ret;
-}
-
-static int
-test_ring(void)
-{
- /* some more basic operations */
- if (test_ring_basic_ex() < 0)
- return -1;
-
- rte_atomic32_init(&synchro);
-
- if (r == NULL)
- r = rte_ring_create("test", RING_SIZE, SOCKET_ID_ANY, 0);
- if (r == NULL)
- return -1;
-
- /* retrieve the ring from its name */
- if (rte_ring_lookup("test") != r) {
- printf("Cannot lookup ring from its name\n");
- return -1;
- }
-
- /* burst operations */
- if (test_ring_burst_basic() < 0)
- return -1;
-
- /* basic operations */
- if (test_ring_basic() < 0)
- return -1;
-
- /* ring stats */
- if (test_ring_stats() < 0)
- return -1;
-
- /* basic operations */
- if (test_live_watermark_change() < 0)
- return -1;
-
- if ( test_set_watermark() < 0){
- printf ("Test failed to detect invalid parameter\n");
- return -1;
- }
- else
- printf ( "Test detected forced bad watermark values\n");
-
- if ( test_create_count_odd() < 0){
- printf ("Test failed to detect odd count\n");
- return -1;
- }
- else
- printf ( "Test detected odd count\n");
-
- if ( test_lookup_null() < 0){
- printf ("Test failed to detect NULL ring lookup\n");
- return -1;
- }
- else
- printf ( "Test detected NULL ring lookup \n");
-
- /* test of creating ring with wrong size */
- if (test_ring_creation_with_wrong_size() < 0)
- return -1;
-
- /* test of creation ring with an used name */
- if (test_ring_creation_with_an_used_name() < 0)
- return -1;
-
- /* dump the ring status */
- rte_ring_list_dump(stdout);
-
- return 0;
-}
-
-REGISTER_TEST_COMMAND(ring_autotest, test_ring);
diff --git a/app/test/test_ring_perf.c b/app/test/test_ring_perf.c
deleted file mode 100644
index 320c20cd..00000000
--- a/app/test/test_ring_perf.c
+++ /dev/null
@@ -1,417 +0,0 @@
-/*-
- * BSD LICENSE
- *
- * Copyright(c) 2010-2014 Intel Corporation. All rights reserved.
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * * Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * * Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in
- * the documentation and/or other materials provided with the
- * distribution.
- * * Neither the name of Intel Corporation nor the names of its
- * contributors may be used to endorse or promote products derived
- * from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
- * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
- * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-
-#include <stdio.h>
-#include <inttypes.h>
-#include <rte_ring.h>
-#include <rte_cycles.h>
-#include <rte_launch.h>
-
-#include "test.h"
-
-/*
- * Ring
- * ====
- *
- * Measures performance of various operations using rdtsc
- * * Empty ring dequeue
- * * Enqueue/dequeue of bursts in 1 threads
- * * Enqueue/dequeue of bursts in 2 threads
- */
-
-#define RING_NAME "RING_PERF"
-#define RING_SIZE 4096
-#define MAX_BURST 32
-
-/*
- * the sizes to enqueue and dequeue in testing
- * (marked volatile so they won't be seen as compile-time constants)
- */
-static const volatile unsigned bulk_sizes[] = { 8, 32 };
-
-/* The ring structure used for tests */
-static struct rte_ring *r;
-
-struct lcore_pair {
- unsigned c1, c2;
-};
-
-static volatile unsigned lcore_count = 0;
-
-/**** Functions to analyse our core mask to get cores for different tests ***/
-
-static int
-get_two_hyperthreads(struct lcore_pair *lcp)
-{
- unsigned id1, id2;
- unsigned c1, c2, s1, s2;
- RTE_LCORE_FOREACH(id1) {
- /* inner loop just re-reads all id's. We could skip the first few
- * elements, but since number of cores is small there is little point
- */
- RTE_LCORE_FOREACH(id2) {
- if (id1 == id2)
- continue;
- c1 = lcore_config[id1].core_id;
- c2 = lcore_config[id2].core_id;
- s1 = lcore_config[id1].socket_id;
- s2 = lcore_config[id2].socket_id;
- if ((c1 == c2) && (s1 == s2)){
- lcp->c1 = id1;
- lcp->c2 = id2;
- return 0;
- }
- }
- }
- return 1;
-}
-
-static int
-get_two_cores(struct lcore_pair *lcp)
-{
- unsigned id1, id2;
- unsigned c1, c2, s1, s2;
- RTE_LCORE_FOREACH(id1) {
- RTE_LCORE_FOREACH(id2) {
- if (id1 == id2)
- continue;
- c1 = lcore_config[id1].core_id;
- c2 = lcore_config[id2].core_id;
- s1 = lcore_config[id1].socket_id;
- s2 = lcore_config[id2].socket_id;
- if ((c1 != c2) && (s1 == s2)){
- lcp->c1 = id1;
- lcp->c2 = id2;
- return 0;
- }
- }
- }
- return 1;
-}
-
-static int
-get_two_sockets(struct lcore_pair *lcp)
-{
- unsigned id1, id2;
- unsigned s1, s2;
- RTE_LCORE_FOREACH(id1) {
- RTE_LCORE_FOREACH(id2) {
- if (id1 == id2)
- continue;
- s1 = lcore_config[id1].socket_id;
- s2 = lcore_config[id2].socket_id;
- if (s1 != s2){
- lcp->c1 = id1;
- lcp->c2 = id2;
- return 0;
- }
- }
- }
- return 1;
-}
-
-/* Get cycle counts for dequeuing from an empty ring. Should be 2 or 3 cycles */
-static void
-test_empty_dequeue(void)
-{
- const unsigned iter_shift = 26;
- const unsigned iterations = 1<<iter_shift;
- unsigned i = 0;
- void *burst[MAX_BURST];
-
- const uint64_t sc_start = rte_rdtsc();
- for (i = 0; i < iterations; i++)
- rte_ring_sc_dequeue_bulk(r, burst, bulk_sizes[0]);
- const uint64_t sc_end = rte_rdtsc();
-
- const uint64_t mc_start = rte_rdtsc();
- for (i = 0; i < iterations; i++)
- rte_ring_mc_dequeue_bulk(r, burst, bulk_sizes[0]);
- const uint64_t mc_end = rte_rdtsc();
-
- printf("SC empty dequeue: %.2F\n",
- (double)(sc_end-sc_start) / iterations);
- printf("MC empty dequeue: %.2F\n",
- (double)(mc_end-mc_start) / iterations);
-}
-
-/*
- * for the separate enqueue and dequeue threads they take in one param
- * and return two. Input = burst size, output = cycle average for sp/sc & mp/mc
- */
-struct thread_params {
- unsigned size; /* input value, the burst size */
- double spsc, mpmc; /* output value, the single or multi timings */
-};
-
-/*
- * Function that uses rdtsc to measure timing for ring enqueue. Needs pair
- * thread running dequeue_bulk function
- */
-static int
-enqueue_bulk(void *p)
-{
- const unsigned iter_shift = 23;
- const unsigned iterations = 1<<iter_shift;
- struct thread_params *params = p;
- const unsigned size = params->size;
- unsigned i;
- void *burst[MAX_BURST] = {0};
-
- if ( __sync_add_and_fetch(&lcore_count, 1) != 2 )
- while(lcore_count != 2)
- rte_pause();
-
- const uint64_t sp_start = rte_rdtsc();
- for (i = 0; i < iterations; i++)
- while (rte_ring_sp_enqueue_bulk(r, burst, size) != 0)
- rte_pause();
- const uint64_t sp_end = rte_rdtsc();
-
- const uint64_t mp_start = rte_rdtsc();
- for (i = 0; i < iterations; i++)
- while (rte_ring_mp_enqueue_bulk(r, burst, size) != 0)
- rte_pause();
- const uint64_t mp_end = rte_rdtsc();
-
- params->spsc = ((double)(sp_end - sp_start))/(iterations*size);
- params->mpmc = ((double)(mp_end - mp_start))/(iterations*size);
- return 0;
-}
-
-/*
- * Function that uses rdtsc to measure timing for ring dequeue. Needs pair
- * thread running enqueue_bulk function
- */
-static int
-dequeue_bulk(void *p)
-{
- const unsigned iter_shift = 23;
- const unsigned iterations = 1<<iter_shift;
- struct thread_params *params = p;
- const unsigned size = params->size;
- unsigned i;
- void *burst[MAX_BURST] = {0};
-
- if ( __sync_add_and_fetch(&lcore_count, 1) != 2 )
- while(lcore_count != 2)
- rte_pause();
-
- const uint64_t sc_start = rte_rdtsc();
- for (i = 0; i < iterations; i++)
- while (rte_ring_sc_dequeue_bulk(r, burst, size) != 0)
- rte_pause();
- const uint64_t sc_end = rte_rdtsc();
-
- const uint64_t mc_start = rte_rdtsc();
- for (i = 0; i < iterations; i++)
- while (rte_ring_mc_dequeue_bulk(r, burst, size) != 0)
- rte_pause();
- const uint64_t mc_end = rte_rdtsc();
-
- params->spsc = ((double)(sc_end - sc_start))/(iterations*size);
- params->mpmc = ((double)(mc_end - mc_start))/(iterations*size);
- return 0;
-}
-
-/*
- * Function that calls the enqueue and dequeue bulk functions on pairs of cores.
- * used to measure ring perf between hyperthreads, cores and sockets.
- */
-static void
-run_on_core_pair(struct lcore_pair *cores,
- lcore_function_t f1, lcore_function_t f2)
-{
- struct thread_params param1 = {0}, param2 = {0};
- unsigned i;
- for (i = 0; i < sizeof(bulk_sizes)/sizeof(bulk_sizes[0]); i++) {
- lcore_count = 0;
- param1.size = param2.size = bulk_sizes[i];
- if (cores->c1 == rte_get_master_lcore()) {
- rte_eal_remote_launch(f2, &param2, cores->c2);
- f1(&param1);
- rte_eal_wait_lcore(cores->c2);
- } else {
- rte_eal_remote_launch(f1, &param1, cores->c1);
- rte_eal_remote_launch(f2, &param2, cores->c2);
- rte_eal_wait_lcore(cores->c1);
- rte_eal_wait_lcore(cores->c2);
- }
- printf("SP/SC bulk enq/dequeue (size: %u): %.2F\n", bulk_sizes[i],
- param1.spsc + param2.spsc);
- printf("MP/MC bulk enq/dequeue (size: %u): %.2F\n", bulk_sizes[i],
- param1.mpmc + param2.mpmc);
- }
-}
-
-/*
- * Test function that determines how long an enqueue + dequeue of a single item
- * takes on a single lcore. Result is for comparison with the bulk enq+deq.
- */
-static void
-test_single_enqueue_dequeue(void)
-{
- const unsigned iter_shift = 24;
- const unsigned iterations = 1<<iter_shift;
- unsigned i = 0;
- void *burst = NULL;
-
- const uint64_t sc_start = rte_rdtsc();
- for (i = 0; i < iterations; i++) {
- rte_ring_sp_enqueue(r, burst);
- rte_ring_sc_dequeue(r, &burst);
- }
- const uint64_t sc_end = rte_rdtsc();
-
- const uint64_t mc_start = rte_rdtsc();
- for (i = 0; i < iterations; i++) {
- rte_ring_mp_enqueue(r, burst);
- rte_ring_mc_dequeue(r, &burst);
- }
- const uint64_t mc_end = rte_rdtsc();
-
- printf("SP/SC single enq/dequeue: %"PRIu64"\n",
- (sc_end-sc_start) >> iter_shift);
- printf("MP/MC single enq/dequeue: %"PRIu64"\n",
- (mc_end-mc_start) >> iter_shift);
-}
-
-/*
- * Test that does both enqueue and dequeue on a core using the burst() API calls
- * instead of the bulk() calls used in other tests. Results should be the same
- * as for the bulk function called on a single lcore.
- */
-static void
-test_burst_enqueue_dequeue(void)
-{
- const unsigned iter_shift = 23;
- const unsigned iterations = 1<<iter_shift;
- unsigned sz, i = 0;
- void *burst[MAX_BURST] = {0};
-
- for (sz = 0; sz < sizeof(bulk_sizes)/sizeof(bulk_sizes[0]); sz++) {
- const uint64_t sc_start = rte_rdtsc();
- for (i = 0; i < iterations; i++) {
- rte_ring_sp_enqueue_burst(r, burst, bulk_sizes[sz]);
- rte_ring_sc_dequeue_burst(r, burst, bulk_sizes[sz]);
- }
- const uint64_t sc_end = rte_rdtsc();
-
- const uint64_t mc_start = rte_rdtsc();
- for (i = 0; i < iterations; i++) {
- rte_ring_mp_enqueue_burst(r, burst, bulk_sizes[sz]);
- rte_ring_mc_dequeue_burst(r, burst, bulk_sizes[sz]);
- }
- const uint64_t mc_end = rte_rdtsc();
-
- uint64_t mc_avg = ((mc_end-mc_start) >> iter_shift) / bulk_sizes[sz];
- uint64_t sc_avg = ((sc_end-sc_start) >> iter_shift) / bulk_sizes[sz];
-
- printf("SP/SC burst enq/dequeue (size: %u): %"PRIu64"\n", bulk_sizes[sz],
- sc_avg);
- printf("MP/MC burst enq/dequeue (size: %u): %"PRIu64"\n", bulk_sizes[sz],
- mc_avg);
- }
-}
-
-/* Times enqueue and dequeue on a single lcore */
-static void
-test_bulk_enqueue_dequeue(void)
-{
- const unsigned iter_shift = 23;
- const unsigned iterations = 1<<iter_shift;
- unsigned sz, i = 0;
- void *burst[MAX_BURST] = {0};
-
- for (sz = 0; sz < sizeof(bulk_sizes)/sizeof(bulk_sizes[0]); sz++) {
- const uint64_t sc_start = rte_rdtsc();
- for (i = 0; i < iterations; i++) {
- rte_ring_sp_enqueue_bulk(r, burst, bulk_sizes[sz]);
- rte_ring_sc_dequeue_bulk(r, burst, bulk_sizes[sz]);
- }
- const uint64_t sc_end = rte_rdtsc();
-
- const uint64_t mc_start = rte_rdtsc();
- for (i = 0; i < iterations; i++) {
- rte_ring_mp_enqueue_bulk(r, burst, bulk_sizes[sz]);
- rte_ring_mc_dequeue_bulk(r, burst, bulk_sizes[sz]);
- }
- const uint64_t mc_end = rte_rdtsc();
-
- double sc_avg = ((double)(sc_end-sc_start) /
- (iterations * bulk_sizes[sz]));
- double mc_avg = ((double)(mc_end-mc_start) /
- (iterations * bulk_sizes[sz]));
-
- printf("SP/SC bulk enq/dequeue (size: %u): %.2F\n", bulk_sizes[sz],
- sc_avg);
- printf("MP/MC bulk enq/dequeue (size: %u): %.2F\n", bulk_sizes[sz],
- mc_avg);
- }
-}
-
-static int
-test_ring_perf(void)
-{
- struct lcore_pair cores;
- r = rte_ring_create(RING_NAME, RING_SIZE, rte_socket_id(), 0);
- if (r == NULL && (r = rte_ring_lookup(RING_NAME)) == NULL)
- return -1;
-
- printf("### Testing single element and burst enq/deq ###\n");
- test_single_enqueue_dequeue();
- test_burst_enqueue_dequeue();
-
- printf("\n### Testing empty dequeue ###\n");
- test_empty_dequeue();
-
- printf("\n### Testing using a single lcore ###\n");
- test_bulk_enqueue_dequeue();
-
- if (get_two_hyperthreads(&cores) == 0) {
- printf("\n### Testing using two hyperthreads ###\n");
- run_on_core_pair(&cores, enqueue_bulk, dequeue_bulk);
- }
- if (get_two_cores(&cores) == 0) {
- printf("\n### Testing using two physical cores ###\n");
- run_on_core_pair(&cores, enqueue_bulk, dequeue_bulk);
- }
- if (get_two_sockets(&cores) == 0) {
- printf("\n### Testing using two NUMA nodes ###\n");
- run_on_core_pair(&cores, enqueue_bulk, dequeue_bulk);
- }
- return 0;
-}
-
-REGISTER_TEST_COMMAND(ring_perf_autotest, test_ring_perf);
diff --git a/app/test/test_rwlock.c b/app/test/test_rwlock.c
deleted file mode 100644
index 50f58ade..00000000
--- a/app/test/test_rwlock.c
+++ /dev/null
@@ -1,132 +0,0 @@
-/*-
- * BSD LICENSE
- *
- * Copyright(c) 2010-2014 Intel Corporation. All rights reserved.
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * * Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * * Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in
- * the documentation and/or other materials provided with the
- * distribution.
- * * Neither the name of Intel Corporation nor the names of its
- * contributors may be used to endorse or promote products derived
- * from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
- * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
- * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#include <stdio.h>
-#include <stdint.h>
-#include <unistd.h>
-#include <sys/queue.h>
-
-#include <rte_common.h>
-#include <rte_memory.h>
-#include <rte_memzone.h>
-#include <rte_per_lcore.h>
-#include <rte_launch.h>
-#include <rte_atomic.h>
-#include <rte_rwlock.h>
-#include <rte_eal.h>
-#include <rte_per_lcore.h>
-#include <rte_lcore.h>
-#include <rte_cycles.h>
-
-#include "test.h"
-
-/*
- * rwlock test
- * ===========
- *
- * - There is a global rwlock and a table of rwlocks (one per lcore).
- *
- * - The test function takes all of these locks and launches the
- * ``test_rwlock_per_core()`` function on each core (except the master).
- *
- * - The function takes the global write lock, display something,
- * then releases the global lock.
- * - Then, it takes the per-lcore write lock, display something, and
- * releases the per-core lock.
- * - Finally, a read lock is taken during 100 ms, then released.
- *
- * - The main function unlocks the per-lcore locks sequentially and
- * waits between each lock. This triggers the display of a message
- * for each core, in the correct order.
- *
- * Then, it tries to take the global write lock and display the last
- * message. The autotest script checks that the message order is correct.
- */
-
-static rte_rwlock_t sl;
-static rte_rwlock_t sl_tab[RTE_MAX_LCORE];
-
-static int
-test_rwlock_per_core(__attribute__((unused)) void *arg)
-{
- rte_rwlock_write_lock(&sl);
- printf("Global write lock taken on core %u\n", rte_lcore_id());
- rte_rwlock_write_unlock(&sl);
-
- rte_rwlock_write_lock(&sl_tab[rte_lcore_id()]);
- printf("Hello from core %u !\n", rte_lcore_id());
- rte_rwlock_write_unlock(&sl_tab[rte_lcore_id()]);
-
- rte_rwlock_read_lock(&sl);
- printf("Global read lock taken on core %u\n", rte_lcore_id());
- rte_delay_ms(100);
- printf("Release global read lock on core %u\n", rte_lcore_id());
- rte_rwlock_read_unlock(&sl);
-
- return 0;
-}
-
-static int
-test_rwlock(void)
-{
- int i;
-
- rte_rwlock_init(&sl);
- for (i=0; i<RTE_MAX_LCORE; i++)
- rte_rwlock_init(&sl_tab[i]);
-
- rte_rwlock_write_lock(&sl);
-
- RTE_LCORE_FOREACH_SLAVE(i) {
- rte_rwlock_write_lock(&sl_tab[i]);
- rte_eal_remote_launch(test_rwlock_per_core, NULL, i);
- }
-
- rte_rwlock_write_unlock(&sl);
-
- RTE_LCORE_FOREACH_SLAVE(i) {
- rte_rwlock_write_unlock(&sl_tab[i]);
- rte_delay_ms(100);
- }
-
- rte_rwlock_write_lock(&sl);
- /* this message should be the last message of test */
- printf("Global write lock taken on master core %u\n", rte_lcore_id());
- rte_rwlock_write_unlock(&sl);
-
- rte_eal_mp_wait_lcore();
-
- return 0;
-}
-
-REGISTER_TEST_COMMAND(rwlock_autotest, test_rwlock);
diff --git a/app/test/test_sched.c b/app/test/test_sched.c
deleted file mode 100644
index bd2776d3..00000000
--- a/app/test/test_sched.c
+++ /dev/null
@@ -1,216 +0,0 @@
-/*-
- * BSD LICENSE
- *
- * Copyright(c) 2010-2014 Intel Corporation. All rights reserved.
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * * Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * * Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in
- * the documentation and/or other materials provided with the
- * distribution.
- * * Neither the name of Intel Corporation nor the names of its
- * contributors may be used to endorse or promote products derived
- * from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
- * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
- * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#include <stdlib.h>
-#include <stdio.h>
-#include <string.h>
-#include <stdint.h>
-#include <unistd.h>
-
-#include "test.h"
-
-#include <rte_cycles.h>
-#include <rte_ether.h>
-#include <rte_ip.h>
-#include <rte_byteorder.h>
-#include <rte_sched.h>
-
-
-#define SUBPORT 0
-#define PIPE 1
-#define TC 2
-#define QUEUE 3
-
-static struct rte_sched_subport_params subport_param[] = {
- {
- .tb_rate = 1250000000,
- .tb_size = 1000000,
-
- .tc_rate = {1250000000, 1250000000, 1250000000, 1250000000},
- .tc_period = 10,
- },
-};
-
-static struct rte_sched_pipe_params pipe_profile[] = {
- { /* Profile #0 */
- .tb_rate = 305175,
- .tb_size = 1000000,
-
- .tc_rate = {305175, 305175, 305175, 305175},
- .tc_period = 40,
-
- .wrr_weights = {1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1},
- },
-};
-
-static struct rte_sched_port_params port_param = {
- .socket = 0, /* computed */
- .rate = 0, /* computed */
- .mtu = 1522,
- .frame_overhead = RTE_SCHED_FRAME_OVERHEAD_DEFAULT,
- .n_subports_per_port = 1,
- .n_pipes_per_subport = 1024,
- .qsize = {32, 32, 32, 32},
- .pipe_profiles = pipe_profile,
- .n_pipe_profiles = 1,
-};
-
-#define NB_MBUF 32
-#define MBUF_DATA_SZ (2048 + RTE_PKTMBUF_HEADROOM)
-#define MEMPOOL_CACHE_SZ 0
-#define SOCKET 0
-
-
-static struct rte_mempool *
-create_mempool(void)
-{
- struct rte_mempool * mp;
-
- mp = rte_mempool_lookup("test_sched");
- if (!mp)
- mp = rte_pktmbuf_pool_create("test_sched", NB_MBUF,
- MEMPOOL_CACHE_SZ, 0, MBUF_DATA_SZ, SOCKET);
-
- return mp;
-}
-
-static void
-prepare_pkt(struct rte_mbuf *mbuf)
-{
- struct ether_hdr *eth_hdr;
- struct vlan_hdr *vlan1, *vlan2;
- struct ipv4_hdr *ip_hdr;
-
- /* Simulate a classifier */
- eth_hdr = rte_pktmbuf_mtod(mbuf, struct ether_hdr *);
- vlan1 = (struct vlan_hdr *)(&eth_hdr->ether_type );
- vlan2 = (struct vlan_hdr *)((uintptr_t)&eth_hdr->ether_type + sizeof(struct vlan_hdr));
- eth_hdr = (struct ether_hdr *)((uintptr_t)&eth_hdr->ether_type + 2 *sizeof(struct vlan_hdr));
- ip_hdr = (struct ipv4_hdr *)((uintptr_t)eth_hdr + sizeof(eth_hdr->ether_type));
-
- vlan1->vlan_tci = rte_cpu_to_be_16(SUBPORT);
- vlan2->vlan_tci = rte_cpu_to_be_16(PIPE);
- eth_hdr->ether_type = rte_cpu_to_be_16(ETHER_TYPE_IPv4);
- ip_hdr->dst_addr = IPv4(0,0,TC,QUEUE);
-
-
- rte_sched_port_pkt_write(mbuf, SUBPORT, PIPE, TC, QUEUE, e_RTE_METER_YELLOW);
-
- /* 64 byte packet */
- mbuf->pkt_len = 60;
- mbuf->data_len = 60;
-}
-
-
-/**
- * test main entrance for library sched
- */
-static int
-test_sched(void)
-{
- struct rte_mempool *mp = NULL;
- struct rte_sched_port *port = NULL;
- uint32_t pipe;
- struct rte_mbuf *in_mbufs[10];
- struct rte_mbuf *out_mbufs[10];
- int i;
-
- int err;
-
- mp = create_mempool();
- TEST_ASSERT_NOT_NULL(mp, "Error creating mempool\n");
-
- port_param.socket = 0;
- port_param.rate = (uint64_t) 10000 * 1000 * 1000 / 8;
-
- port = rte_sched_port_config(&port_param);
- TEST_ASSERT_NOT_NULL(port, "Error config sched port\n");
-
- err = rte_sched_subport_config(port, SUBPORT, subport_param);
- TEST_ASSERT_SUCCESS(err, "Error config sched, err=%d\n", err);
-
- for (pipe = 0; pipe < port_param.n_pipes_per_subport; pipe ++) {
- err = rte_sched_pipe_config(port, SUBPORT, pipe, 0);
- TEST_ASSERT_SUCCESS(err, "Error config sched pipe %u, err=%d\n", pipe, err);
- }
-
- for (i = 0; i < 10; i++) {
- in_mbufs[i] = rte_pktmbuf_alloc(mp);
- TEST_ASSERT_NOT_NULL(in_mbufs[i], "Packet allocation failed\n");
- prepare_pkt(in_mbufs[i]);
- }
-
-
- err = rte_sched_port_enqueue(port, in_mbufs, 10);
- TEST_ASSERT_EQUAL(err, 10, "Wrong enqueue, err=%d\n", err);
-
- err = rte_sched_port_dequeue(port, out_mbufs, 10);
- TEST_ASSERT_EQUAL(err, 10, "Wrong dequeue, err=%d\n", err);
-
- for (i = 0; i < 10; i++) {
- enum rte_meter_color color;
- uint32_t subport, traffic_class, queue;
-
- color = rte_sched_port_pkt_read_color(out_mbufs[i]);
- TEST_ASSERT_EQUAL(color, e_RTE_METER_YELLOW, "Wrong color\n");
-
- rte_sched_port_pkt_read_tree_path(out_mbufs[i],
- &subport, &pipe, &traffic_class, &queue);
-
- TEST_ASSERT_EQUAL(subport, SUBPORT, "Wrong subport\n");
- TEST_ASSERT_EQUAL(pipe, PIPE, "Wrong pipe\n");
- TEST_ASSERT_EQUAL(traffic_class, TC, "Wrong traffic_class\n");
- TEST_ASSERT_EQUAL(queue, QUEUE, "Wrong queue\n");
-
- }
-
-
- struct rte_sched_subport_stats subport_stats;
- uint32_t tc_ov;
- rte_sched_subport_read_stats(port, SUBPORT, &subport_stats, &tc_ov);
-#if 0
- TEST_ASSERT_EQUAL(subport_stats.n_pkts_tc[TC-1], 10, "Wrong subport stats\n");
-#endif
- struct rte_sched_queue_stats queue_stats;
- uint16_t qlen;
- rte_sched_queue_read_stats(port, QUEUE, &queue_stats, &qlen);
-#if 0
- TEST_ASSERT_EQUAL(queue_stats.n_pkts, 10, "Wrong queue stats\n");
-#endif
-
- rte_sched_port_free(port);
-
- return 0;
-}
-
-REGISTER_TEST_COMMAND(sched_autotest, test_sched);
diff --git a/app/test/test_spinlock.c b/app/test/test_spinlock.c
deleted file mode 100644
index 2d94eecc..00000000
--- a/app/test/test_spinlock.c
+++ /dev/null
@@ -1,336 +0,0 @@
-/*-
- * BSD LICENSE
- *
- * Copyright(c) 2010-2014 Intel Corporation. All rights reserved.
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * * Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * * Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in
- * the documentation and/or other materials provided with the
- * distribution.
- * * Neither the name of Intel Corporation nor the names of its
- * contributors may be used to endorse or promote products derived
- * from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
- * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
- * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#include <stdio.h>
-#include <stdint.h>
-#include <inttypes.h>
-#include <string.h>
-#include <unistd.h>
-#include <sys/queue.h>
-
-#include <rte_common.h>
-#include <rte_memory.h>
-#include <rte_memzone.h>
-#include <rte_per_lcore.h>
-#include <rte_launch.h>
-#include <rte_eal.h>
-#include <rte_per_lcore.h>
-#include <rte_lcore.h>
-#include <rte_cycles.h>
-#include <rte_spinlock.h>
-#include <rte_atomic.h>
-
-#include "test.h"
-
-/*
- * Spinlock test
- * =============
- *
- * - There is a global spinlock and a table of spinlocks (one per lcore).
- *
- * - The test function takes all of these locks and launches the
- * ``test_spinlock_per_core()`` function on each core (except the master).
- *
- * - The function takes the global lock, display something, then releases
- * the global lock.
- * - The function takes the per-lcore lock, display something, then releases
- * the per-core lock.
- *
- * - The main function unlocks the per-lcore locks sequentially and
- * waits between each lock. This triggers the display of a message
- * for each core, in the correct order. The autotest script checks that
- * this order is correct.
- *
- * - A load test is carried out, with all cores attempting to lock a single lock
- * multiple times
- */
-
-static rte_spinlock_t sl, sl_try;
-static rte_spinlock_t sl_tab[RTE_MAX_LCORE];
-static rte_spinlock_recursive_t slr;
-static unsigned count = 0;
-
-static rte_atomic32_t synchro;
-
-static int
-test_spinlock_per_core(__attribute__((unused)) void *arg)
-{
- rte_spinlock_lock(&sl);
- printf("Global lock taken on core %u\n", rte_lcore_id());
- rte_spinlock_unlock(&sl);
-
- rte_spinlock_lock(&sl_tab[rte_lcore_id()]);
- printf("Hello from core %u !\n", rte_lcore_id());
- rte_spinlock_unlock(&sl_tab[rte_lcore_id()]);
-
- return 0;
-}
-
-static int
-test_spinlock_recursive_per_core(__attribute__((unused)) void *arg)
-{
- unsigned id = rte_lcore_id();
-
- rte_spinlock_recursive_lock(&slr);
- printf("Global recursive lock taken on core %u - count = %d\n",
- id, slr.count);
- rte_spinlock_recursive_lock(&slr);
- printf("Global recursive lock taken on core %u - count = %d\n",
- id, slr.count);
- rte_spinlock_recursive_lock(&slr);
- printf("Global recursive lock taken on core %u - count = %d\n",
- id, slr.count);
-
- printf("Hello from within recursive locks from core %u !\n", id);
-
- rte_spinlock_recursive_unlock(&slr);
- printf("Global recursive lock released on core %u - count = %d\n",
- id, slr.count);
- rte_spinlock_recursive_unlock(&slr);
- printf("Global recursive lock released on core %u - count = %d\n",
- id, slr.count);
- rte_spinlock_recursive_unlock(&slr);
- printf("Global recursive lock released on core %u - count = %d\n",
- id, slr.count);
-
- return 0;
-}
-
-static rte_spinlock_t lk = RTE_SPINLOCK_INITIALIZER;
-static uint64_t lock_count[RTE_MAX_LCORE] = {0};
-
-#define TIME_MS 100
-
-static int
-load_loop_fn(void *func_param)
-{
- uint64_t time_diff = 0, begin;
- uint64_t hz = rte_get_timer_hz();
- uint64_t lcount = 0;
- const int use_lock = *(int*)func_param;
- const unsigned lcore = rte_lcore_id();
-
- /* wait synchro for slaves */
- if (lcore != rte_get_master_lcore())
- while (rte_atomic32_read(&synchro) == 0);
-
- begin = rte_get_timer_cycles();
- while (time_diff < hz * TIME_MS / 1000) {
- if (use_lock)
- rte_spinlock_lock(&lk);
- lcount++;
- if (use_lock)
- rte_spinlock_unlock(&lk);
- /* delay to make lock duty cycle slighlty realistic */
- rte_delay_us(1);
- time_diff = rte_get_timer_cycles() - begin;
- }
- lock_count[lcore] = lcount;
- return 0;
-}
-
-static int
-test_spinlock_perf(void)
-{
- unsigned int i;
- uint64_t total = 0;
- int lock = 0;
- const unsigned lcore = rte_lcore_id();
-
- printf("\nTest with no lock on single core...\n");
- load_loop_fn(&lock);
- printf("Core [%u] count = %"PRIu64"\n", lcore, lock_count[lcore]);
- memset(lock_count, 0, sizeof(lock_count));
-
- printf("\nTest with lock on single core...\n");
- lock = 1;
- load_loop_fn(&lock);
- printf("Core [%u] count = %"PRIu64"\n", lcore, lock_count[lcore]);
- memset(lock_count, 0, sizeof(lock_count));
-
- printf("\nTest with lock on %u cores...\n", rte_lcore_count());
-
- /* Clear synchro and start slaves */
- rte_atomic32_set(&synchro, 0);
- rte_eal_mp_remote_launch(load_loop_fn, &lock, SKIP_MASTER);
-
- /* start synchro and launch test on master */
- rte_atomic32_set(&synchro, 1);
- load_loop_fn(&lock);
-
- rte_eal_mp_wait_lcore();
-
- RTE_LCORE_FOREACH(i) {
- printf("Core [%u] count = %"PRIu64"\n", i, lock_count[i]);
- total += lock_count[i];
- }
-
- printf("Total count = %"PRIu64"\n", total);
-
- return 0;
-}
-
-/*
- * Use rte_spinlock_trylock() to trylock a spinlock object,
- * If it could not lock the object sucessfully, it would
- * return immediately and the variable of "count" would be
- * increased by one per times. the value of "count" could be
- * checked as the result later.
- */
-static int
-test_spinlock_try(__attribute__((unused)) void *arg)
-{
- if (rte_spinlock_trylock(&sl_try) == 0) {
- rte_spinlock_lock(&sl);
- count ++;
- rte_spinlock_unlock(&sl);
- }
-
- return 0;
-}
-
-
-/*
- * Test rte_eal_get_lcore_state() in addition to spinlocks
- * as we have "waiting" then "running" lcores.
- */
-static int
-test_spinlock(void)
-{
- int ret = 0;
- int i;
-
- /* slave cores should be waiting: print it */
- RTE_LCORE_FOREACH_SLAVE(i) {
- printf("lcore %d state: %d\n", i,
- (int) rte_eal_get_lcore_state(i));
- }
-
- rte_spinlock_init(&sl);
- rte_spinlock_init(&sl_try);
- rte_spinlock_recursive_init(&slr);
- for (i=0; i<RTE_MAX_LCORE; i++)
- rte_spinlock_init(&sl_tab[i]);
-
- rte_spinlock_lock(&sl);
-
- RTE_LCORE_FOREACH_SLAVE(i) {
- rte_spinlock_lock(&sl_tab[i]);
- rte_eal_remote_launch(test_spinlock_per_core, NULL, i);
- }
-
- /* slave cores should be busy: print it */
- RTE_LCORE_FOREACH_SLAVE(i) {
- printf("lcore %d state: %d\n", i,
- (int) rte_eal_get_lcore_state(i));
- }
- rte_spinlock_unlock(&sl);
-
- RTE_LCORE_FOREACH_SLAVE(i) {
- rte_spinlock_unlock(&sl_tab[i]);
- rte_delay_ms(10);
- }
-
- rte_eal_mp_wait_lcore();
-
- rte_spinlock_recursive_lock(&slr);
-
- /*
- * Try to acquire a lock that we already own
- */
- if(!rte_spinlock_recursive_trylock(&slr)) {
- printf("rte_spinlock_recursive_trylock failed on a lock that "
- "we already own\n");
- ret = -1;
- } else
- rte_spinlock_recursive_unlock(&slr);
-
- RTE_LCORE_FOREACH_SLAVE(i) {
- rte_eal_remote_launch(test_spinlock_recursive_per_core, NULL, i);
- }
- rte_spinlock_recursive_unlock(&slr);
- rte_eal_mp_wait_lcore();
-
- /*
- * Test if it could return immediately from try-locking a locked object.
- * Here it will lock the spinlock object first, then launch all the slave
- * lcores to trylock the same spinlock object.
- * All the slave lcores should give up try-locking a locked object and
- * return immediately, and then increase the "count" initialized with zero
- * by one per times.
- * We can check if the "count" is finally equal to the number of all slave
- * lcores to see if the behavior of try-locking a locked spinlock object
- * is correct.
- */
- if (rte_spinlock_trylock(&sl_try) == 0) {
- return -1;
- }
- count = 0;
- RTE_LCORE_FOREACH_SLAVE(i) {
- rte_eal_remote_launch(test_spinlock_try, NULL, i);
- }
- rte_eal_mp_wait_lcore();
- rte_spinlock_unlock(&sl_try);
- if (rte_spinlock_is_locked(&sl)) {
- printf("spinlock is locked but it should not be\n");
- return -1;
- }
- rte_spinlock_lock(&sl);
- if (count != ( rte_lcore_count() - 1)) {
- ret = -1;
- }
- rte_spinlock_unlock(&sl);
-
- /*
- * Test if it can trylock recursively.
- * Use rte_spinlock_recursive_trylock() to check if it can lock a spinlock
- * object recursively. Here it will try to lock a spinlock object twice.
- */
- if (rte_spinlock_recursive_trylock(&slr) == 0) {
- printf("It failed to do the first spinlock_recursive_trylock but it should able to do\n");
- return -1;
- }
- if (rte_spinlock_recursive_trylock(&slr) == 0) {
- printf("It failed to do the second spinlock_recursive_trylock but it should able to do\n");
- return -1;
- }
- rte_spinlock_recursive_unlock(&slr);
- rte_spinlock_recursive_unlock(&slr);
-
- if (test_spinlock_perf() < 0)
- return -1;
-
- return ret;
-}
-
-REGISTER_TEST_COMMAND(spinlock_autotest, test_spinlock);
diff --git a/app/test/test_string_fns.c b/app/test/test_string_fns.c
deleted file mode 100644
index 8b4359aa..00000000
--- a/app/test/test_string_fns.c
+++ /dev/null
@@ -1,169 +0,0 @@
-/*-
- * BSD LICENSE
- *
- * Copyright(c) 2010-2014 Intel Corporation. All rights reserved.
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * * Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * * Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in
- * the documentation and/or other materials provided with the
- * distribution.
- * * Neither the name of Intel Corporation nor the names of its
- * contributors may be used to endorse or promote products derived
- * from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
- * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
- * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#include <stdio.h>
-#include <stdarg.h>
-#include <stddef.h>
-#include <errno.h>
-#include <string.h>
-
-#include <rte_string_fns.h>
-
-#include "test.h"
-
-#define LOG(...) do {\
- fprintf(stderr, "%s() ln %d: ", __func__, __LINE__); \
- fprintf(stderr, __VA_ARGS__); \
-} while(0)
-
-#define DATA_BYTE 'a'
-
-static int
-test_rte_strsplit(void)
-{
- int i;
- do {
- /* =======================================================
- * split a mac address correct number of splits requested
- * =======================================================*/
- char test_string[] = "54:65:76:87:98:90";
- char *splits[6];
-
- LOG("Source string: '%s', to split on ':'\n", test_string);
- if (rte_strsplit(test_string, sizeof(test_string),
- splits, 6, ':') != 6) {
- LOG("Error splitting mac address\n");
- return -1;
- }
- for (i = 0; i < 6; i++)
- LOG("Token %d = %s\n", i + 1, splits[i]);
- } while (0);
-
-
- do {
- /* =======================================================
- * split on spaces smaller number of splits requested
- * =======================================================*/
- char test_string[] = "54 65 76 87 98 90";
- char *splits[6];
-
- LOG("Source string: '%s', to split on ' '\n", test_string);
- if (rte_strsplit(test_string, sizeof(test_string),
- splits, 3, ' ') != 3) {
- LOG("Error splitting mac address for max 2 splits\n");
- return -1;
- }
- for (i = 0; i < 3; i++)
- LOG("Token %d = %s\n", i + 1, splits[i]);
- } while (0);
-
- do {
- /* =======================================================
- * split on commas - more splits than commas requested
- * =======================================================*/
- char test_string[] = "a,b,c,d";
- char *splits[6];
-
- LOG("Source string: '%s', to split on ','\n", test_string);
- if (rte_strsplit(test_string, sizeof(test_string),
- splits, 6, ',') != 4) {
- LOG("Error splitting %s on ','\n", test_string);
- return -1;
- }
- for (i = 0; i < 4; i++)
- LOG("Token %d = %s\n", i + 1, splits[i]);
- } while(0);
-
- do {
- /* =======================================================
- * Try splitting on non-existent character.
- * =======================================================*/
- char test_string[] = "a,b,c,d";
- char *splits[6];
-
- LOG("Source string: '%s', to split on ' '\n", test_string);
- if (rte_strsplit(test_string, sizeof(test_string),
- splits, 6, ' ') != 1) {
- LOG("Error splitting %s on ' '\n", test_string);
- return -1;
- }
- LOG("String not split\n");
- } while(0);
-
- do {
- /* =======================================================
- * Invalid / edge case parameter checks
- * =======================================================*/
- char test_string[] = "a,b,c,d";
- char *splits[6];
-
- if (rte_strsplit(NULL, 0, splits, 6, ',') >= 0
- || errno != EINVAL){
- LOG("Error: rte_strsplit accepted NULL string parameter\n");
- return -1;
- }
-
- if (rte_strsplit(test_string, sizeof(test_string), NULL, 0, ',') >= 0
- || errno != EINVAL){
- LOG("Error: rte_strsplit accepted NULL array parameter\n");
- return -1;
- }
-
- errno = 0;
- if (rte_strsplit(test_string, 0, splits, 6, ',') != 0 || errno != 0) {
- LOG("Error: rte_strsplit did not accept 0 length string\n");
- return -1;
- }
-
- if (rte_strsplit(test_string, sizeof(test_string), splits, 0, ',') != 0
- || errno != 0) {
- LOG("Error: rte_strsplit did not accept 0 length array\n");
- return -1;
- }
-
- LOG("Parameter test cases passed\n");
- } while(0);
-
- LOG("%s - PASSED\n", __func__);
- return 0;
-}
-
-static int
-test_string_fns(void)
-{
- if (test_rte_strsplit() < 0)
- return -1;
- return 0;
-}
-
-REGISTER_TEST_COMMAND(string_autotest, test_string_fns);
diff --git a/app/test/test_table.c b/app/test/test_table.c
deleted file mode 100644
index 1faa0a6d..00000000
--- a/app/test/test_table.c
+++ /dev/null
@@ -1,202 +0,0 @@
-/*-
- * BSD LICENSE
- *
- * Copyright(c) 2010-2014 Intel Corporation. All rights reserved.
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * * Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * * Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in
- * the documentation and/or other materials provided with the
- * distribution.
- * * Neither the name of Intel Corporation nor the names of its
- * contributors may be used to endorse or promote products derived
- * from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
- * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
- * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#include <rte_byteorder.h>
-#include <rte_hexdump.h>
-#include <rte_string_fns.h>
-#include <string.h>
-#include "test.h"
-#include "test_table.h"
-#include "test_table_pipeline.h"
-#include "test_table_ports.h"
-#include "test_table_tables.h"
-#include "test_table_combined.h"
-#include "test_table_acl.h"
-
-/* Global variables */
-struct rte_pipeline *p;
-struct rte_ring *rings_rx[N_PORTS];
-struct rte_ring *rings_tx[N_PORTS];
-struct rte_mempool *pool = NULL;
-
-uint32_t port_in_id[N_PORTS];
-uint32_t port_out_id[N_PORTS];
-uint32_t port_out_id_type[3];
-uint32_t table_id[N_PORTS*2];
-uint64_t override_hit_mask = 0xFFFFFFFF;
-uint64_t override_miss_mask = 0xFFFFFFFF;
-uint64_t non_reserved_actions_hit = 0;
-uint64_t non_reserved_actions_miss = 0;
-uint8_t connect_miss_action_to_port_out = 0;
-uint8_t connect_miss_action_to_table = 0;
-uint32_t table_entry_default_action = RTE_PIPELINE_ACTION_DROP;
-uint32_t table_entry_hit_action = RTE_PIPELINE_ACTION_PORT;
-uint32_t table_entry_miss_action = RTE_PIPELINE_ACTION_DROP;
-rte_pipeline_port_in_action_handler port_in_action = NULL;
-rte_pipeline_port_out_action_handler port_out_action = NULL;
-rte_pipeline_table_action_handler_hit action_handler_hit = NULL;
-rte_pipeline_table_action_handler_miss action_handler_miss = NULL;
-
-/* Function prototypes */
-static void app_init_rings(void);
-static void app_init_mbuf_pools(void);
-
-uint64_t pipeline_test_hash(void *key,
- __attribute__((unused)) uint32_t key_size,
- __attribute__((unused)) uint64_t seed)
-{
- uint32_t *k32 = (uint32_t *) key;
- uint32_t ip_dst = rte_be_to_cpu_32(k32[0]);
- uint64_t signature = ip_dst;
-
- return signature;
-}
-
-static void
-app_init_mbuf_pools(void)
-{
- /* Init the buffer pool */
- printf("Getting/Creating the mempool ...\n");
- pool = rte_mempool_lookup("mempool");
- if (!pool) {
- pool = rte_pktmbuf_pool_create(
- "mempool",
- POOL_SIZE,
- POOL_CACHE_SIZE, 0, POOL_BUFFER_SIZE,
- 0);
- if (pool == NULL)
- rte_panic("Cannot create mbuf pool\n");
- }
-}
-
-static void
-app_init_rings(void)
-{
- uint32_t i;
-
- for (i = 0; i < N_PORTS; i++) {
- char name[32];
-
- snprintf(name, sizeof(name), "app_ring_rx_%u", i);
- rings_rx[i] = rte_ring_lookup(name);
- if (rings_rx[i] == NULL) {
- rings_rx[i] = rte_ring_create(
- name,
- RING_RX_SIZE,
- 0,
- RING_F_SP_ENQ | RING_F_SC_DEQ);
- }
- if (rings_rx[i] == NULL)
- rte_panic("Cannot create RX ring %u\n", i);
- }
-
- for (i = 0; i < N_PORTS; i++) {
- char name[32];
-
- snprintf(name, sizeof(name), "app_ring_tx_%u", i);
- rings_tx[i] = rte_ring_lookup(name);
- if (rings_tx[i] == NULL) {
- rings_tx[i] = rte_ring_create(
- name,
- RING_TX_SIZE,
- 0,
- RING_F_SP_ENQ | RING_F_SC_DEQ);
- }
- if (rings_tx[i] == NULL)
- rte_panic("Cannot create TX ring %u\n", i);
- }
-
-}
-
-static int
-test_table(void)
-{
- int status, failures;
- unsigned i;
-
- failures = 0;
-
- app_init_rings();
- app_init_mbuf_pools();
-
- printf("\n\n\n\n************Pipeline tests************\n");
-
- if (test_table_pipeline() < 0)
- return -1;
-
- printf("\n\n\n\n************Port tests************\n");
- for (i = 0; i < n_port_tests; i++) {
- status = port_tests[i]();
- if (status < 0) {
- printf("\nPort test number %d failed (%d).\n", i,
- status);
- failures++;
- return -1;
- }
- }
-
- printf("\n\n\n\n************Table tests************\n");
- for (i = 0; i < n_table_tests; i++) {
- status = table_tests[i]();
- if (status < 0) {
- printf("\nTable test number %d failed (%d).\n", i,
- status);
- failures++;
- return -1;
- }
- }
-
- printf("\n\n\n\n************Table tests************\n");
- for (i = 0; i < n_table_tests_combined; i++) {
- status = table_tests_combined[i]();
- if (status < 0) {
- printf("\nCombined table test number %d failed with "
- "reason number %d.\n", i, status);
- failures++;
- return -1;
- }
- }
-
- if (failures)
- return -1;
-
-#ifdef RTE_LIBRTE_ACL
- printf("\n\n\n\n************ACL tests************\n");
- if (test_table_acl() < 0)
- return -1;
-#endif
-
- return 0;
-}
-
-REGISTER_TEST_COMMAND(table_autotest, test_table);
diff --git a/app/test/test_table.h b/app/test/test_table.h
deleted file mode 100644
index 84d1845a..00000000
--- a/app/test/test_table.h
+++ /dev/null
@@ -1,206 +0,0 @@
-/*-
- * BSD LICENSE
- *
- * Copyright(c) 2010-2014 Intel Corporation. All rights reserved.
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * * Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * * Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in
- * the documentation and/or other materials provided with the
- * distribution.
- * * Neither the name of Intel Corporation nor the names of its
- * contributors may be used to endorse or promote products derived
- * from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
- * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
- * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#include <rte_table_stub.h>
-#include <rte_table_lpm.h>
-#include <rte_table_lpm_ipv6.h>
-#include <rte_table_hash.h>
-#include <rte_table_array.h>
-#include <rte_pipeline.h>
-
-#ifdef RTE_LIBRTE_ACL
-#include <rte_table_acl.h>
-#endif
-
-#include <rte_port_ring.h>
-#include <rte_port_ethdev.h>
-#include <rte_port_source_sink.h>
-
-#ifndef TEST_TABLE_H_
-#define TEST_TABLE_H_
-
-#define RING_SIZE 4096
-#define MAX_BULK 32
-#define N 65536
-#define TIME_S 5
-#define TEST_RING_FULL_EMTPY_ITER 8
-#define N_PORTS 2
-#define N_PKTS 2
-#define N_PKTS_EXT 6
-#define RING_RX rings_rx[0]
-#define RING_RX_2 rings_rx[1]
-#define RING_TX rings_tx[0]
-#define RING_TX_2 rings_tx[1]
-#define PORT_RX_RING_SIZE 128
-#define PORT_TX_RING_SIZE 512
-#define RING_RX_SIZE 128
-#define RING_TX_SIZE 128
-#define POOL_BUFFER_SIZE RTE_MBUF_DEFAULT_BUF_SIZE
-#define POOL_SIZE (32 * 1024)
-#define POOL_CACHE_SIZE 256
-#define BURST_SIZE 8
-#define WORKER_TYPE 1
-#define MAX_DUMMY_PORTS 2
-#define MP_NAME "dummy_port_mempool"
-#define MBUF_COUNT (8000 * MAX_DUMMY_PORTS)
-#define MP_CACHE_SZ 256
-#define MP_SOCKET 0
-#define MP_FLAGS 0
-
-/* Macros */
-#define APP_METADATA_OFFSET(offset) (sizeof(struct rte_mbuf) + (offset))
-
-#define RING_ENQUEUE(ring, value) do { \
- struct rte_mbuf *m; \
- uint32_t *k32, *signature; \
- uint8_t *key; \
- \
- m = rte_pktmbuf_alloc(pool); \
- if (m == NULL) \
- return -1; \
- signature = RTE_MBUF_METADATA_UINT32_PTR(m, \
- APP_METADATA_OFFSET(0)); \
- key = RTE_MBUF_METADATA_UINT8_PTR(m, \
- APP_METADATA_OFFSET(32)); \
- k32 = (uint32_t *) key; \
- k32[0] = (value); \
- *signature = pipeline_test_hash(key, 0, 0); \
- rte_ring_enqueue((ring), m); \
-} while (0)
-
-#define RUN_PIPELINE(pipeline) do { \
- rte_pipeline_run((pipeline)); \
- rte_pipeline_flush((pipeline)); \
-} while (0)
-
-#define VERIFY(var, value) do { \
- if ((var) != -(value)) \
- return var; \
-} while (0)
-
-#define VERIFY_TRAFFIC(ring, sent, expected) do { \
- unsigned i, n = 0; \
- void *mbuf = NULL; \
- \
- for (i = 0; i < (sent); i++) { \
- if (!rte_ring_dequeue((ring), &mbuf)) { \
- if (mbuf == NULL) \
- continue; \
- n++; \
- rte_pktmbuf_free((struct rte_mbuf *)mbuf); \
- } \
- else \
- break; \
- } \
- printf("Expected %d, got %d\n", expected, n); \
- if (n != (expected)) { \
- return -21; \
- } \
-} while (0)
-
-/* Function definitions */
-uint64_t pipeline_test_hash(
- void *key,
- __attribute__((unused)) uint32_t key_size,
- __attribute__((unused)) uint64_t seed);
-
-/* Extern variables */
-extern struct rte_pipeline *p;
-extern struct rte_ring *rings_rx[N_PORTS];
-extern struct rte_ring *rings_tx[N_PORTS];
-extern struct rte_mempool *pool;
-extern uint32_t port_in_id[N_PORTS];
-extern uint32_t port_out_id[N_PORTS];
-extern uint32_t port_out_id_type[3];
-extern uint32_t table_id[N_PORTS*2];
-extern uint64_t override_hit_mask;
-extern uint64_t override_miss_mask;
-extern uint64_t non_reserved_actions_hit;
-extern uint64_t non_reserved_actions_miss;
-extern uint8_t connect_miss_action_to_port_out;
-extern uint8_t connect_miss_action_to_table;
-extern uint32_t table_entry_default_action;
-extern uint32_t table_entry_hit_action;
-extern uint32_t table_entry_miss_action;
-extern rte_pipeline_port_in_action_handler port_in_action;
-extern rte_pipeline_port_out_action_handler port_out_action;
-extern rte_pipeline_table_action_handler_hit action_handler_hit;
-extern rte_pipeline_table_action_handler_miss action_handler_miss;
-
-/* Global data types */
-struct manage_ops {
- uint32_t op_id;
- void *op_data;
- int expected_result;
-};
-
-/* Internal pipeline structures */
-struct rte_port_in {
- struct rte_port_in_ops ops;
- uint32_t burst_size;
- uint32_t table_id;
- void *h_port;
-};
-
-struct rte_port_out {
- struct rte_port_out_ops ops;
- void *h_port;
-};
-
-struct rte_table {
- struct rte_table_ops ops;
- rte_pipeline_table_action_handler_hit f_action;
- uint32_t table_next_id;
- uint32_t table_next_id_valid;
- uint8_t actions_lookup_miss[RTE_CACHE_LINE_SIZE];
- uint32_t action_data_size;
- void *h_table;
-};
-
-#define RTE_PIPELINE_MAX_NAME_SZ 124
-
-struct rte_pipeline {
- char name[RTE_PIPELINE_MAX_NAME_SZ];
- uint32_t socket_id;
- struct rte_port_in ports_in[16];
- struct rte_port_out ports_out[16];
- struct rte_table tables[64];
- uint32_t num_ports_in;
- uint32_t num_ports_out;
- uint32_t num_tables;
- struct rte_mbuf *pkts[RTE_PORT_IN_BURST_SIZE_MAX];
- struct rte_table_entry *actions[RTE_PORT_IN_BURST_SIZE_MAX];
- uint64_t mask_action[64];
- uint32_t mask_actions;
-};
-#endif
diff --git a/app/test/test_table_acl.c b/app/test/test_table_acl.c
deleted file mode 100644
index b3bfda4c..00000000
--- a/app/test/test_table_acl.c
+++ /dev/null
@@ -1,760 +0,0 @@
-/*-
- * BSD LICENSE
- *
- * Copyright(c) 2010-2014 Intel Corporation. All rights reserved.
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * * Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * * Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in
- * the documentation and/or other materials provided with the
- * distribution.
- * * Neither the name of Intel Corporation nor the names of its
- * contributors may be used to endorse or promote products derived
- * from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
- * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
- * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#include <rte_hexdump.h>
-#include "test_table.h"
-#include "test_table_acl.h"
-
-#define IPv4(a, b, c, d) ((uint32_t)(((a) & 0xff) << 24) | \
- (((b) & 0xff) << 16) | \
- (((c) & 0xff) << 8) | \
- ((d) & 0xff))
-
-/*
- * Rule and trace formats definitions.
- **/
-
-struct ipv4_5tuple {
- uint8_t proto;
- uint32_t ip_src;
- uint32_t ip_dst;
- uint16_t port_src;
- uint16_t port_dst;
-};
-
-enum {
- PROTO_FIELD_IPV4,
- SRC_FIELD_IPV4,
- DST_FIELD_IPV4,
- SRCP_FIELD_IPV4,
- DSTP_FIELD_IPV4,
- NUM_FIELDS_IPV4
-};
-
-struct rte_acl_field_def ipv4_defs[NUM_FIELDS_IPV4] = {
- {
- .type = RTE_ACL_FIELD_TYPE_BITMASK,
- .size = sizeof(uint8_t),
- .field_index = PROTO_FIELD_IPV4,
- .input_index = PROTO_FIELD_IPV4,
- .offset = offsetof(struct ipv4_5tuple, proto),
- },
- {
- .type = RTE_ACL_FIELD_TYPE_MASK,
- .size = sizeof(uint32_t),
- .field_index = SRC_FIELD_IPV4,
- .input_index = SRC_FIELD_IPV4,
- .offset = offsetof(struct ipv4_5tuple, ip_src),
- },
- {
- .type = RTE_ACL_FIELD_TYPE_MASK,
- .size = sizeof(uint32_t),
- .field_index = DST_FIELD_IPV4,
- .input_index = DST_FIELD_IPV4,
- .offset = offsetof(struct ipv4_5tuple, ip_dst),
- },
- {
- .type = RTE_ACL_FIELD_TYPE_RANGE,
- .size = sizeof(uint16_t),
- .field_index = SRCP_FIELD_IPV4,
- .input_index = SRCP_FIELD_IPV4,
- .offset = offsetof(struct ipv4_5tuple, port_src),
- },
- {
- .type = RTE_ACL_FIELD_TYPE_RANGE,
- .size = sizeof(uint16_t),
- .field_index = DSTP_FIELD_IPV4,
- .input_index = SRCP_FIELD_IPV4,
- .offset = offsetof(struct ipv4_5tuple, port_dst),
- },
-};
-
-struct rte_table_acl_rule_add_params table_acl_IPv4_rule;
-
-typedef int (*parse_5tuple)(char *text,
- struct rte_table_acl_rule_add_params *rule);
-
-/*
-* The order of the fields in the rule string after the initial '@'
-*/
-enum {
- CB_FLD_SRC_ADDR,
- CB_FLD_DST_ADDR,
- CB_FLD_SRC_PORT_RANGE,
- CB_FLD_DST_PORT_RANGE,
- CB_FLD_PROTO,
- CB_FLD_NUM,
-};
-
-
-#define GET_CB_FIELD(in, fd, base, lim, dlm) \
-do { \
- unsigned long val; \
- char *end; \
- \
- errno = 0; \
- val = strtoul((in), &end, (base)); \
- if (errno != 0 || end[0] != (dlm) || val > (lim)) \
- return -EINVAL; \
- (fd) = (typeof(fd)) val; \
- (in) = end + 1; \
-} while (0)
-
-
-
-
-static int
-parse_ipv4_net(const char *in, uint32_t *addr, uint32_t *mask_len)
-{
- uint8_t a, b, c, d, m;
-
- GET_CB_FIELD(in, a, 0, UINT8_MAX, '.');
- GET_CB_FIELD(in, b, 0, UINT8_MAX, '.');
- GET_CB_FIELD(in, c, 0, UINT8_MAX, '.');
- GET_CB_FIELD(in, d, 0, UINT8_MAX, '/');
- GET_CB_FIELD(in, m, 0, sizeof(uint32_t) * CHAR_BIT, 0);
-
- addr[0] = IPv4(a, b, c, d);
- mask_len[0] = m;
-
- return 0;
-}
-
-static int
-parse_port_range(const char *in, uint16_t *port_low, uint16_t *port_high)
-{
- uint16_t a, b;
-
- GET_CB_FIELD(in, a, 0, UINT16_MAX, ':');
- GET_CB_FIELD(in, b, 0, UINT16_MAX, 0);
-
- port_low[0] = a;
- port_high[0] = b;
-
- return 0;
-}
-
-static int
-parse_cb_ipv4_rule(char *str, struct rte_table_acl_rule_add_params *v)
-{
- int i, rc;
- char *s, *sp, *in[CB_FLD_NUM];
- static const char *dlm = " \t\n";
-
- /*
- ** Skip leading '@'
- */
- if (strchr(str, '@') != str)
- return -EINVAL;
-
- s = str + 1;
-
- /*
- * Populate the 'in' array with the location of each
- * field in the string we're parsing
- */
- for (i = 0; i != DIM(in); i++) {
- in[i] = strtok_r(s, dlm, &sp);
- if (in[i] == NULL)
- return -EINVAL;
- s = NULL;
- }
-
- /* Parse x.x.x.x/x */
- rc = parse_ipv4_net(in[CB_FLD_SRC_ADDR],
- &v->field_value[SRC_FIELD_IPV4].value.u32,
- &v->field_value[SRC_FIELD_IPV4].mask_range.u32);
- if (rc != 0) {
- RTE_LOG(ERR, PIPELINE, "failed to read src address/mask: %s\n",
- in[CB_FLD_SRC_ADDR]);
- return rc;
- }
-
- printf("V=%u, mask=%u\n", v->field_value[SRC_FIELD_IPV4].value.u32,
- v->field_value[SRC_FIELD_IPV4].mask_range.u32);
-
- /* Parse x.x.x.x/x */
- rc = parse_ipv4_net(in[CB_FLD_DST_ADDR],
- &v->field_value[DST_FIELD_IPV4].value.u32,
- &v->field_value[DST_FIELD_IPV4].mask_range.u32);
- if (rc != 0) {
- RTE_LOG(ERR, PIPELINE, "failed to read dest address/mask: %s\n",
- in[CB_FLD_DST_ADDR]);
- return rc;
- }
-
- printf("V=%u, mask=%u\n", v->field_value[DST_FIELD_IPV4].value.u32,
- v->field_value[DST_FIELD_IPV4].mask_range.u32);
- /* Parse n:n */
- rc = parse_port_range(in[CB_FLD_SRC_PORT_RANGE],
- &v->field_value[SRCP_FIELD_IPV4].value.u16,
- &v->field_value[SRCP_FIELD_IPV4].mask_range.u16);
- if (rc != 0) {
- RTE_LOG(ERR, PIPELINE, "failed to read source port range: %s\n",
- in[CB_FLD_SRC_PORT_RANGE]);
- return rc;
- }
-
- printf("V=%u, mask=%u\n", v->field_value[SRCP_FIELD_IPV4].value.u16,
- v->field_value[SRCP_FIELD_IPV4].mask_range.u16);
- /* Parse n:n */
- rc = parse_port_range(in[CB_FLD_DST_PORT_RANGE],
- &v->field_value[DSTP_FIELD_IPV4].value.u16,
- &v->field_value[DSTP_FIELD_IPV4].mask_range.u16);
- if (rc != 0) {
- RTE_LOG(ERR, PIPELINE, "failed to read dest port range: %s\n",
- in[CB_FLD_DST_PORT_RANGE]);
- return rc;
- }
-
- printf("V=%u, mask=%u\n", v->field_value[DSTP_FIELD_IPV4].value.u16,
- v->field_value[DSTP_FIELD_IPV4].mask_range.u16);
- /* parse 0/0xnn */
- GET_CB_FIELD(in[CB_FLD_PROTO],
- v->field_value[PROTO_FIELD_IPV4].value.u8,
- 0, UINT8_MAX, '/');
- GET_CB_FIELD(in[CB_FLD_PROTO],
- v->field_value[PROTO_FIELD_IPV4].mask_range.u8,
- 0, UINT8_MAX, 0);
-
- printf("V=%u, mask=%u\n",
- (unsigned int)v->field_value[PROTO_FIELD_IPV4].value.u8,
- v->field_value[PROTO_FIELD_IPV4].mask_range.u8);
- return 0;
-}
-
-static int
-parse_cb_ipv4_rule_del(char *str, struct rte_table_acl_rule_delete_params *v)
-{
- int i, rc;
- char *s, *sp, *in[CB_FLD_NUM];
- static const char *dlm = " \t\n";
-
- /*
- ** Skip leading '@'
- */
- if (strchr(str, '@') != str)
- return -EINVAL;
-
- s = str + 1;
-
- /*
- * Populate the 'in' array with the location of each
- * field in the string we're parsing
- */
- for (i = 0; i != DIM(in); i++) {
- in[i] = strtok_r(s, dlm, &sp);
- if (in[i] == NULL)
- return -EINVAL;
- s = NULL;
- }
-
- /* Parse x.x.x.x/x */
- rc = parse_ipv4_net(in[CB_FLD_SRC_ADDR],
- &v->field_value[SRC_FIELD_IPV4].value.u32,
- &v->field_value[SRC_FIELD_IPV4].mask_range.u32);
- if (rc != 0) {
- RTE_LOG(ERR, PIPELINE, "failed to read src address/mask: %s\n",
- in[CB_FLD_SRC_ADDR]);
- return rc;
- }
-
- printf("V=%u, mask=%u\n", v->field_value[SRC_FIELD_IPV4].value.u32,
- v->field_value[SRC_FIELD_IPV4].mask_range.u32);
-
- /* Parse x.x.x.x/x */
- rc = parse_ipv4_net(in[CB_FLD_DST_ADDR],
- &v->field_value[DST_FIELD_IPV4].value.u32,
- &v->field_value[DST_FIELD_IPV4].mask_range.u32);
- if (rc != 0) {
- RTE_LOG(ERR, PIPELINE, "failed to read dest address/mask: %s\n",
- in[CB_FLD_DST_ADDR]);
- return rc;
- }
-
- printf("V=%u, mask=%u\n", v->field_value[DST_FIELD_IPV4].value.u32,
- v->field_value[DST_FIELD_IPV4].mask_range.u32);
- /* Parse n:n */
- rc = parse_port_range(in[CB_FLD_SRC_PORT_RANGE],
- &v->field_value[SRCP_FIELD_IPV4].value.u16,
- &v->field_value[SRCP_FIELD_IPV4].mask_range.u16);
- if (rc != 0) {
- RTE_LOG(ERR, PIPELINE, "failed to read source port range: %s\n",
- in[CB_FLD_SRC_PORT_RANGE]);
- return rc;
- }
-
- printf("V=%u, mask=%u\n", v->field_value[SRCP_FIELD_IPV4].value.u16,
- v->field_value[SRCP_FIELD_IPV4].mask_range.u16);
- /* Parse n:n */
- rc = parse_port_range(in[CB_FLD_DST_PORT_RANGE],
- &v->field_value[DSTP_FIELD_IPV4].value.u16,
- &v->field_value[DSTP_FIELD_IPV4].mask_range.u16);
- if (rc != 0) {
- RTE_LOG(ERR, PIPELINE, "failed to read dest port range: %s\n",
- in[CB_FLD_DST_PORT_RANGE]);
- return rc;
- }
-
- printf("V=%u, mask=%u\n", v->field_value[DSTP_FIELD_IPV4].value.u16,
- v->field_value[DSTP_FIELD_IPV4].mask_range.u16);
- /* parse 0/0xnn */
- GET_CB_FIELD(in[CB_FLD_PROTO],
- v->field_value[PROTO_FIELD_IPV4].value.u8,
- 0, UINT8_MAX, '/');
- GET_CB_FIELD(in[CB_FLD_PROTO],
- v->field_value[PROTO_FIELD_IPV4].mask_range.u8,
- 0, UINT8_MAX, 0);
-
- printf("V=%u, mask=%u\n",
- (unsigned int)v->field_value[PROTO_FIELD_IPV4].value.u8,
- v->field_value[PROTO_FIELD_IPV4].mask_range.u8);
- return 0;
-}
-
-/*
- * The format for these rules DO NOT need the port ranges to be
- * separated by ' : ', just ':'. It's a lot more readable and
- * cleaner, IMO.
- */
-char lines[][128] = {
- "@0.0.0.0/0 0.0.0.0/0 0:65535 0:65535 2/0xff", /* Protocol check */
- "@192.168.3.1/32 0.0.0.0/0 0:65535 0:65535 0/0", /* Src IP checl */
- "@0.0.0.0/0 10.4.4.1/32 0:65535 0:65535 0/0", /* dst IP check */
- "@0.0.0.0/0 0.0.0.0/0 105:105 0:65535 0/0", /* src port check */
- "@0.0.0.0/0 0.0.0.0/0 0:65535 206:206 0/0", /* dst port check */
-};
-
-char line[128];
-
-
-static int
-setup_acl_pipeline(void)
-{
- int ret;
- int i;
- struct rte_pipeline_params pipeline_params = {
- .name = "PIPELINE",
- .socket_id = 0,
- };
- uint32_t n;
- struct rte_table_acl_rule_add_params rule_params;
- struct rte_pipeline_table_acl_rule_delete_params *delete_params;
- parse_5tuple parser;
- char acl_name[64];
-
- /* Pipeline configuration */
- p = rte_pipeline_create(&pipeline_params);
- if (p == NULL) {
- RTE_LOG(INFO, PIPELINE, "%s: Failed to configure pipeline\n",
- __func__);
- goto fail;
- }
-
- /* Input port configuration */
- for (i = 0; i < N_PORTS; i++) {
- struct rte_port_ring_reader_params port_ring_params = {
- .ring = rings_rx[i],
- };
-
- struct rte_pipeline_port_in_params port_params = {
- .ops = &rte_port_ring_reader_ops,
- .arg_create = (void *) &port_ring_params,
- .f_action = NULL,
- .burst_size = BURST_SIZE,
- };
-
- /* Put in action for some ports */
- if (i)
- port_params.f_action = port_in_action;
-
- ret = rte_pipeline_port_in_create(p, &port_params,
- &port_in_id[i]);
- if (ret) {
- rte_panic("Unable to configure input port %d, ret:%d\n",
- i, ret);
- goto fail;
- }
- }
-
- /* output Port configuration */
- for (i = 0; i < N_PORTS; i++) {
- struct rte_port_ring_writer_params port_ring_params = {
- .ring = rings_tx[i],
- .tx_burst_sz = BURST_SIZE,
- };
-
- struct rte_pipeline_port_out_params port_params = {
- .ops = &rte_port_ring_writer_ops,
- .arg_create = (void *) &port_ring_params,
- .f_action = NULL,
- .arg_ah = NULL,
- };
-
-
- if (rte_pipeline_port_out_create(p, &port_params,
- &port_out_id[i])) {
- rte_panic("Unable to configure output port %d\n", i);
- goto fail;
- }
- }
-
- /* Table configuration */
- for (i = 0; i < N_PORTS; i++) {
- struct rte_pipeline_table_params table_params;
-
- /* Set up defaults for stub */
- table_params.ops = &rte_table_stub_ops;
- table_params.arg_create = NULL;
- table_params.f_action_hit = action_handler_hit;
- table_params.f_action_miss = NULL;
- table_params.action_data_size = 0;
-
- RTE_LOG(INFO, PIPELINE, "miss_action=%x\n",
- table_entry_miss_action);
-
- printf("RTE_ACL_RULE_SZ(%zu) = %zu\n", DIM(ipv4_defs),
- RTE_ACL_RULE_SZ(DIM(ipv4_defs)));
-
- struct rte_table_acl_params acl_params;
-
- acl_params.n_rules = 1 << 5;
- acl_params.n_rule_fields = DIM(ipv4_defs);
- snprintf(acl_name, sizeof(acl_name), "ACL%d", i);
- acl_params.name = acl_name;
- memcpy(acl_params.field_format, ipv4_defs, sizeof(ipv4_defs));
-
- table_params.ops = &rte_table_acl_ops;
- table_params.arg_create = &acl_params;
-
- if (rte_pipeline_table_create(p, &table_params, &table_id[i])) {
- rte_panic("Unable to configure table %u\n", i);
- goto fail;
- }
-
- if (connect_miss_action_to_table) {
- if (rte_pipeline_table_create(p, &table_params,
- &table_id[i+2])) {
- rte_panic("Unable to configure table %u\n", i);
- goto fail;
- }
- }
- }
-
- for (i = 0; i < N_PORTS; i++) {
- if (rte_pipeline_port_in_connect_to_table(p, port_in_id[i],
- table_id[i])) {
- rte_panic("Unable to connect input port %u to "
- "table %u\n",
- port_in_id[i], table_id[i]);
- goto fail;
- }
- }
-
- /* Add bulk entries to tables */
- for (i = 0; i < N_PORTS; i++) {
- struct rte_table_acl_rule_add_params keys[5];
- struct rte_pipeline_table_entry entries[5];
- struct rte_table_acl_rule_add_params *key_array[5];
- struct rte_pipeline_table_entry *table_entries[5];
- int key_found[5];
- struct rte_pipeline_table_entry *table_entries_ptr[5];
- struct rte_pipeline_table_entry entries_ptr[5];
-
- parser = parse_cb_ipv4_rule;
- for (n = 0; n < 5; n++) {
- memset(&keys[n], 0, sizeof(struct rte_table_acl_rule_add_params));
- key_array[n] = &keys[n];
-
- snprintf(line, sizeof(line), "%s", lines[n]);
- printf("PARSING [%s]\n", line);
-
- ret = parser(line, &keys[n]);
- if (ret != 0) {
- RTE_LOG(ERR, PIPELINE,
- "line %u: parse_cb_ipv4vlan_rule"
- " failed, error code: %d (%s)\n",
- n, ret, strerror(-ret));
- return ret;
- }
-
- keys[n].priority = RTE_ACL_MAX_PRIORITY - n - 1;
-
- entries[n].action = RTE_PIPELINE_ACTION_PORT;
- entries[n].port_id = port_out_id[i^1];
- table_entries[n] = &entries[n];
- table_entries_ptr[n] = &entries_ptr[n];
- }
-
- ret = rte_pipeline_table_entry_add_bulk(p, table_id[i],
- (void **)key_array, table_entries, 5, key_found, table_entries_ptr);
- if (ret < 0) {
- rte_panic("Add entry bulk to table %u failed (%d)\n",
- table_id[i], ret);
- goto fail;
- }
- }
-
- /* Delete bulk entries from tables */
- for (i = 0; i < N_PORTS; i++) {
- struct rte_table_acl_rule_delete_params keys[5];
- struct rte_table_acl_rule_delete_params *key_array[5];
- struct rte_pipeline_table_entry *table_entries[5];
- int key_found[5];
-
- for (n = 0; n < 5; n++) {
- memset(&keys[n], 0, sizeof(struct rte_table_acl_rule_delete_params));
- key_array[n] = &keys[n];
-
- snprintf(line, sizeof(line), "%s", lines[n]);
- printf("PARSING [%s]\n", line);
-
- ret = parse_cb_ipv4_rule_del(line, &keys[n]);
- if (ret != 0) {
- RTE_LOG(ERR, PIPELINE,
- "line %u: parse_cb_ipv4vlan_rule"
- " failed, error code: %d (%s)\n",
- n, ret, strerror(-ret));
- return ret;
- }
- }
-
- ret = rte_pipeline_table_entry_delete_bulk(p, table_id[i],
- (void **)key_array, 5, key_found, table_entries);
- if (ret < 0) {
- rte_panic("Delete bulk entries from table %u failed (%d)\n",
- table_id[i], ret);
- goto fail;
- } else
- printf("Bulk deleted rules.\n");
- }
-
- /* Add entries to tables */
- for (i = 0; i < N_PORTS; i++) {
- struct rte_pipeline_table_entry table_entry = {
- .action = RTE_PIPELINE_ACTION_PORT,
- {.port_id = port_out_id[i^1]},
- };
- int key_found;
- struct rte_pipeline_table_entry *entry_ptr;
-
- memset(&rule_params, 0, sizeof(rule_params));
- parser = parse_cb_ipv4_rule;
-
- for (n = 1; n <= 5; n++) {
- snprintf(line, sizeof(line), "%s", lines[n-1]);
- printf("PARSING [%s]\n", line);
-
- ret = parser(line, &rule_params);
- if (ret != 0) {
- RTE_LOG(ERR, PIPELINE,
- "line %u: parse_cb_ipv4vlan_rule"
- " failed, error code: %d (%s)\n",
- n, ret, strerror(-ret));
- return ret;
- }
-
- rule_params.priority = RTE_ACL_MAX_PRIORITY - n;
-
- ret = rte_pipeline_table_entry_add(p, table_id[i],
- &rule_params,
- &table_entry, &key_found, &entry_ptr);
- if (ret < 0) {
- rte_panic("Add entry to table %u failed (%d)\n",
- table_id[i], ret);
- goto fail;
- }
- }
-
- /* delete a few rules */
- for (n = 2; n <= 3; n++) {
- snprintf(line, sizeof(line), "%s", lines[n-1]);
- printf("PARSING [%s]\n", line);
-
- ret = parser(line, &rule_params);
- if (ret != 0) {
- RTE_LOG(ERR, PIPELINE, "line %u: parse rule "
- " failed, error code: %d (%s)\n",
- n, ret, strerror(-ret));
- return ret;
- }
-
- delete_params = (struct
- rte_pipeline_table_acl_rule_delete_params *)
- &(rule_params.field_value[0]);
- ret = rte_pipeline_table_entry_delete(p, table_id[i],
- delete_params, &key_found, NULL);
- if (ret < 0) {
- rte_panic("Add entry to table %u failed (%d)\n",
- table_id[i], ret);
- goto fail;
- } else
- printf("Deleted Rule.\n");
- }
-
-
- /* Try to add duplicates */
- for (n = 1; n <= 5; n++) {
- snprintf(line, sizeof(line), "%s", lines[n-1]);
- printf("PARSING [%s]\n", line);
-
- ret = parser(line, &rule_params);
- if (ret != 0) {
- RTE_LOG(ERR, PIPELINE, "line %u: parse rule"
- " failed, error code: %d (%s)\n",
- n, ret, strerror(-ret));
- return ret;
- }
-
- rule_params.priority = RTE_ACL_MAX_PRIORITY - n;
-
- ret = rte_pipeline_table_entry_add(p, table_id[i],
- &rule_params,
- &table_entry, &key_found, &entry_ptr);
- if (ret < 0) {
- rte_panic("Add entry to table %u failed (%d)\n",
- table_id[i], ret);
- goto fail;
- }
- }
- }
-
- /* Enable input ports */
- for (i = 0; i < N_PORTS ; i++)
- if (rte_pipeline_port_in_enable(p, port_in_id[i]))
- rte_panic("Unable to enable input port %u\n",
- port_in_id[i]);
-
- /* Check pipeline consistency */
- if (rte_pipeline_check(p) < 0) {
- rte_panic("Pipeline consistency check failed\n");
- goto fail;
- }
-
- return 0;
-fail:
-
- return -1;
-}
-
-static int
-test_pipeline_single_filter(int expected_count)
-{
- int i, j, ret, tx_count;
- struct ipv4_5tuple five_tuple;
-
- /* Allocate a few mbufs and manually insert into the rings. */
- for (i = 0; i < N_PORTS; i++) {
- for (j = 0; j < 8; j++) {
- struct rte_mbuf *mbuf;
-
- mbuf = rte_pktmbuf_alloc(pool);
- if (mbuf == NULL)
- /* this will cause test failure after cleanup
- * of already enqueued mbufs, as the mbuf
- * counts won't match */
- break;
- memset(rte_pktmbuf_mtod(mbuf, char *), 0x00,
- sizeof(struct ipv4_5tuple));
-
- five_tuple.proto = j;
- five_tuple.ip_src = rte_bswap32(IPv4(192, 168, j, 1));
- five_tuple.ip_dst = rte_bswap32(IPv4(10, 4, j, 1));
- five_tuple.port_src = rte_bswap16(100 + j);
- five_tuple.port_dst = rte_bswap16(200 + j);
-
- memcpy(rte_pktmbuf_mtod(mbuf, char *), &five_tuple,
- sizeof(struct ipv4_5tuple));
- RTE_LOG(INFO, PIPELINE, "%s: Enqueue onto ring %d\n",
- __func__, i);
- rte_ring_enqueue(rings_rx[i], mbuf);
- }
- }
-
- /* Run pipeline once */
- for (i = 0; i< N_PORTS; i++)
- rte_pipeline_run(p);
-
- rte_pipeline_flush(p);
-
- tx_count = 0;
-
- for (i = 0; i < N_PORTS; i++) {
- void *objs[RING_TX_SIZE];
- struct rte_mbuf *mbuf;
-
- ret = rte_ring_sc_dequeue_burst(rings_tx[i], objs, 10);
- if (ret <= 0) {
- printf("Got no objects from ring %d - error code %d\n",
- i, ret);
- } else {
- printf("Got %d object(s) from ring %d!\n", ret, i);
- for (j = 0; j < ret; j++) {
- mbuf = (struct rte_mbuf *)objs[j];
- rte_hexdump(stdout, "mbuf",
- rte_pktmbuf_mtod(mbuf, char *), 64);
- rte_pktmbuf_free(mbuf);
- }
- tx_count += ret;
- }
- }
-
- if (tx_count != expected_count) {
- RTE_LOG(INFO, PIPELINE,
- "%s: Unexpected packets for ACL test, "
- "expected %d, got %d\n",
- __func__, expected_count, tx_count);
- goto fail;
- }
-
- rte_pipeline_free(p);
-
- return 0;
-fail:
- return -1;
-
-}
-
-int
-test_table_acl(void)
-{
-
-
- override_hit_mask = 0xFF; /* All packets are a hit */
-
- setup_acl_pipeline();
- if (test_pipeline_single_filter(10) < 0)
- return -1;
-
- return 0;
-}
diff --git a/app/test/test_table_acl.h b/app/test/test_table_acl.h
deleted file mode 100644
index a64c3e6c..00000000
--- a/app/test/test_table_acl.h
+++ /dev/null
@@ -1,35 +0,0 @@
-/*-
- * BSD LICENSE
- *
- * Copyright(c) 2010-2014 Intel Corporation. All rights reserved.
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * * Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * * Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in
- * the documentation and/or other materials provided with the
- * distribution.
- * * Neither the name of Intel Corporation nor the names of its
- * contributors may be used to endorse or promote products derived
- * from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
- * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
- * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-/* Test prototypes */
-int test_table_acl(void);
diff --git a/app/test/test_table_combined.c b/app/test/test_table_combined.c
deleted file mode 100644
index a2d19a1a..00000000
--- a/app/test/test_table_combined.c
+++ /dev/null
@@ -1,881 +0,0 @@
-/*-
- * BSD LICENSE
- *
- * Copyright(c) 2010-2016 Intel Corporation. All rights reserved.
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * * Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * * Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in
- * the documentation and/or other materials provided with the
- * distribution.
- * * Neither the name of Intel Corporation nor the names of its
- * contributors may be used to endorse or promote products derived
- * from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
- * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
- * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#include <string.h>
-#include "test_table_combined.h"
-#include "test_table.h"
-#include <rte_table_lpm_ipv6.h>
-
-#define MAX_TEST_KEYS 128
-#define N_PACKETS 50
-
-enum check_table_result {
- CHECK_TABLE_OK,
- CHECK_TABLE_PORT_CONFIG,
- CHECK_TABLE_PORT_ENABLE,
- CHECK_TABLE_TABLE_CONFIG,
- CHECK_TABLE_ENTRY_ADD,
- CHECK_TABLE_DEFAULT_ENTRY_ADD,
- CHECK_TABLE_CONNECT,
- CHECK_TABLE_MANAGE_ERROR,
- CHECK_TABLE_CONSISTENCY,
- CHECK_TABLE_NO_TRAFFIC,
- CHECK_TABLE_INVALID_PARAMETER,
-};
-
-struct table_packets {
- uint32_t hit_packet[MAX_TEST_KEYS];
- uint32_t miss_packet[MAX_TEST_KEYS];
- uint32_t n_hit_packets;
- uint32_t n_miss_packets;
-};
-
-combined_table_test table_tests_combined[] = {
- test_table_lpm_combined,
- test_table_lpm_ipv6_combined,
- test_table_hash8lru,
- test_table_hash8ext,
- test_table_hash16lru,
- test_table_hash16ext,
- test_table_hash32lru,
- test_table_hash32ext,
- test_table_hash_cuckoo_combined,
-};
-
-unsigned n_table_tests_combined = RTE_DIM(table_tests_combined);
-
-/* Generic port tester function */
-static int
-test_table_type(struct rte_table_ops *table_ops, void *table_args,
- void *key, struct table_packets *table_packets,
- struct manage_ops *manage_ops, unsigned n_ops)
-{
- uint32_t ring_in_id, table_id, ring_out_id, ring_out_2_id;
- unsigned i;
-
- RTE_SET_USED(manage_ops);
- RTE_SET_USED(n_ops);
- /* Create pipeline */
- struct rte_pipeline_params pipeline_params = {
- .name = "pipeline",
- .socket_id = 0,
- };
-
- struct rte_pipeline *pipeline = rte_pipeline_create(&pipeline_params);
-
- /* Create input ring */
- struct rte_port_ring_reader_params ring_params_rx = {
- .ring = RING_RX,
- };
-
- struct rte_port_ring_writer_params ring_params_tx = {
- .ring = RING_RX,
- .tx_burst_sz = RTE_PORT_IN_BURST_SIZE_MAX,
- };
-
- struct rte_pipeline_port_in_params ring_in_params = {
- .ops = &rte_port_ring_reader_ops,
- .arg_create = (void *)&ring_params_rx,
- .f_action = NULL,
- .burst_size = RTE_PORT_IN_BURST_SIZE_MAX,
- };
-
- if (rte_pipeline_port_in_create(pipeline, &ring_in_params,
- &ring_in_id) != 0) {
- rte_pipeline_free(pipeline);
- return -CHECK_TABLE_PORT_CONFIG;
- }
-
- /* Create table */
- struct rte_pipeline_table_params table_params = {
- .ops = table_ops,
- .arg_create = table_args,
- .f_action_hit = NULL,
- .f_action_miss = NULL,
- .arg_ah = NULL,
- .action_data_size = 0,
- };
-
- if (rte_pipeline_table_create(pipeline, &table_params,
- &table_id) != 0) {
- rte_pipeline_free(pipeline);
- return -CHECK_TABLE_TABLE_CONFIG;
- }
-
- /* Create output ports */
- ring_params_tx.ring = RING_TX;
-
- struct rte_pipeline_port_out_params ring_out_params = {
- .ops = &rte_port_ring_writer_ops,
- .arg_create = (void *)&ring_params_tx,
- .f_action = NULL,
- };
-
- if (rte_pipeline_port_out_create(pipeline, &ring_out_params,
- &ring_out_id) != 0) {
- rte_pipeline_free(pipeline);
- return -CHECK_TABLE_PORT_CONFIG;
- }
-
- ring_params_tx.ring = RING_TX_2;
-
- if (rte_pipeline_port_out_create(pipeline, &ring_out_params,
- &ring_out_2_id) != 0) {
- rte_pipeline_free(pipeline);
- return -CHECK_TABLE_PORT_CONFIG;
- }
-
- /* Add entry to the table */
- struct rte_pipeline_table_entry default_entry = {
- .action = RTE_PIPELINE_ACTION_DROP,
- {.table_id = ring_out_id},
- };
-
- struct rte_pipeline_table_entry table_entry = {
- .action = RTE_PIPELINE_ACTION_PORT,
- {.table_id = ring_out_id},
- };
-
- struct rte_pipeline_table_entry *default_entry_ptr, *entry_ptr;
-
- int key_found;
-
- if (rte_pipeline_table_default_entry_add(pipeline, table_id,
- &default_entry, &default_entry_ptr) != 0) {
- rte_pipeline_free(pipeline);
- return -CHECK_TABLE_DEFAULT_ENTRY_ADD;
- }
-
- if (rte_pipeline_table_entry_add(pipeline, table_id,
- key ? key : &table_entry, &table_entry, &key_found,
- &entry_ptr) != 0) {
- rte_pipeline_free(pipeline);
- return -CHECK_TABLE_ENTRY_ADD;
- }
-
- /* Create connections and check consistency */
- if (rte_pipeline_port_in_connect_to_table(pipeline, ring_in_id,
- table_id) != 0) {
- rte_pipeline_free(pipeline);
- return -CHECK_TABLE_CONNECT;
- }
-
- if (rte_pipeline_port_in_enable(pipeline, ring_in_id) != 0) {
- rte_pipeline_free(pipeline);
- return -CHECK_TABLE_PORT_ENABLE;
- }
-
- if (rte_pipeline_check(pipeline) != 0) {
- rte_pipeline_free(pipeline);
- return -CHECK_TABLE_CONSISTENCY;
- }
-
-
-
- /* Flow test - All hits */
- if (table_packets->n_hit_packets) {
- for (i = 0; i < table_packets->n_hit_packets; i++)
- RING_ENQUEUE(RING_RX, table_packets->hit_packet[i]);
-
- RUN_PIPELINE(pipeline);
-
- VERIFY_TRAFFIC(RING_TX, table_packets->n_hit_packets,
- table_packets->n_hit_packets);
- }
-
- /* Flow test - All misses */
- if (table_packets->n_miss_packets) {
- for (i = 0; i < table_packets->n_miss_packets; i++)
- RING_ENQUEUE(RING_RX, table_packets->miss_packet[i]);
-
- RUN_PIPELINE(pipeline);
-
- VERIFY_TRAFFIC(RING_TX, table_packets->n_miss_packets, 0);
- }
-
- /* Flow test - Half hits, half misses */
- if (table_packets->n_hit_packets && table_packets->n_miss_packets) {
- for (i = 0; i < (table_packets->n_hit_packets) / 2; i++)
- RING_ENQUEUE(RING_RX, table_packets->hit_packet[i]);
-
- for (i = 0; i < (table_packets->n_miss_packets) / 2; i++)
- RING_ENQUEUE(RING_RX, table_packets->miss_packet[i]);
-
- RUN_PIPELINE(pipeline);
- VERIFY_TRAFFIC(RING_TX, table_packets->n_hit_packets,
- table_packets->n_hit_packets / 2);
- }
-
- /* Flow test - Single packet */
- if (table_packets->n_hit_packets) {
- RING_ENQUEUE(RING_RX, table_packets->hit_packet[0]);
- RUN_PIPELINE(pipeline);
- VERIFY_TRAFFIC(RING_TX, table_packets->n_hit_packets, 1);
- }
- if (table_packets->n_miss_packets) {
- RING_ENQUEUE(RING_RX, table_packets->miss_packet[0]);
- RUN_PIPELINE(pipeline);
- VERIFY_TRAFFIC(RING_TX, table_packets->n_miss_packets, 0);
- }
-
-
- /* Change table entry action */
- printf("Change entry action\n");
- table_entry.table_id = ring_out_2_id;
-
- if (rte_pipeline_table_default_entry_add(pipeline, table_id,
- &default_entry, &default_entry_ptr) != 0) {
- rte_pipeline_free(pipeline);
- return -CHECK_TABLE_ENTRY_ADD;
- }
-
- if (rte_pipeline_table_entry_add(pipeline, table_id,
- key ? key : &table_entry, &table_entry, &key_found,
- &entry_ptr) != 0) {
- rte_pipeline_free(pipeline);
- return -CHECK_TABLE_ENTRY_ADD;
- }
-
- /* Check that traffic destination has changed */
- if (table_packets->n_hit_packets) {
- for (i = 0; i < table_packets->n_hit_packets; i++)
- RING_ENQUEUE(RING_RX, table_packets->hit_packet[i]);
-
- RUN_PIPELINE(pipeline);
- VERIFY_TRAFFIC(RING_TX, table_packets->n_hit_packets, 0);
- VERIFY_TRAFFIC(RING_TX_2, table_packets->n_hit_packets,
- table_packets->n_hit_packets);
- }
-
- printf("delete entry\n");
- /* Delete table entry */
- rte_pipeline_table_entry_delete(pipeline, table_id,
- key ? key : &table_entry, &key_found, NULL);
-
- rte_pipeline_free(pipeline);
-
- return 0;
-}
-
-/* Table tests */
-int
-test_table_stub_combined(void)
-{
- int status, i;
- struct table_packets table_packets;
-
- printf("--------------\n");
- printf("RUNNING TEST - %s\n", __func__);
- printf("--------------\n");
- for (i = 0; i < N_PACKETS; i++)
- table_packets.hit_packet[i] = i;
-
- table_packets.n_hit_packets = N_PACKETS;
- table_packets.n_miss_packets = 0;
-
- status = test_table_type(&rte_table_stub_ops, NULL, NULL,
- &table_packets, NULL, 1);
- VERIFY(status, CHECK_TABLE_OK);
-
- return 0;
-}
-
-int
-test_table_lpm_combined(void)
-{
- int status, i;
-
- /* Traffic flow */
- struct rte_table_lpm_params lpm_params = {
- .name = "LPM",
- .n_rules = 1 << 16,
- .number_tbl8s = 1 << 8,
- .flags = 0,
- .entry_unique_size = 8,
- .offset = APP_METADATA_OFFSET(0),
- };
-
- struct rte_table_lpm_key lpm_key = {
- .ip = 0xadadadad,
- .depth = 16,
- };
-
- struct table_packets table_packets;
-
- printf("--------------\n");
- printf("RUNNING TEST - %s\n", __func__);
- printf("--------------\n");
-
- for (i = 0; i < N_PACKETS; i++)
- table_packets.hit_packet[i] = 0xadadadad;
-
- for (i = 0; i < N_PACKETS; i++)
- table_packets.miss_packet[i] = 0xfefefefe;
-
- table_packets.n_hit_packets = N_PACKETS;
- table_packets.n_miss_packets = N_PACKETS;
-
- status = test_table_type(&rte_table_lpm_ops, (void *)&lpm_params,
- (void *)&lpm_key, &table_packets, NULL, 0);
- VERIFY(status, CHECK_TABLE_OK);
-
- /* Invalid parameters */
- lpm_params.n_rules = 0;
-
- status = test_table_type(&rte_table_lpm_ops, (void *)&lpm_params,
- (void *)&lpm_key, &table_packets, NULL, 0);
- VERIFY(status, CHECK_TABLE_TABLE_CONFIG);
-
- lpm_params.n_rules = 1 << 24;
- lpm_key.depth = 0;
-
- status = test_table_type(&rte_table_lpm_ops, (void *)&lpm_params,
- (void *)&lpm_key, &table_packets, NULL, 0);
- VERIFY(status, CHECK_TABLE_ENTRY_ADD);
-
- lpm_key.depth = 33;
-
- status = test_table_type(&rte_table_lpm_ops, (void *)&lpm_params,
- (void *)&lpm_key, &table_packets, NULL, 0);
- VERIFY(status, CHECK_TABLE_ENTRY_ADD);
-
- return 0;
-}
-
-int
-test_table_lpm_ipv6_combined(void)
-{
- int status, i;
-
- /* Traffic flow */
- struct rte_table_lpm_ipv6_params lpm_ipv6_params = {
- .name = "LPM",
- .n_rules = 1 << 16,
- .number_tbl8s = 1 << 13,
- .entry_unique_size = 8,
- .offset = APP_METADATA_OFFSET(32),
- };
-
- struct rte_table_lpm_ipv6_key lpm_ipv6_key = {
- .depth = 16,
- };
- memset(lpm_ipv6_key.ip, 0xad, 16);
-
- struct table_packets table_packets;
-
- printf("--------------\n");
- printf("RUNNING TEST - %s\n", __func__);
- printf("--------------\n");
- for (i = 0; i < N_PACKETS; i++)
- table_packets.hit_packet[i] = 0xadadadad;
-
- for (i = 0; i < N_PACKETS; i++)
- table_packets.miss_packet[i] = 0xadadadab;
-
- table_packets.n_hit_packets = N_PACKETS;
- table_packets.n_miss_packets = N_PACKETS;
-
- status = test_table_type(&rte_table_lpm_ipv6_ops,
- (void *)&lpm_ipv6_params,
- (void *)&lpm_ipv6_key, &table_packets, NULL, 0);
- VERIFY(status, CHECK_TABLE_OK);
-
- /* Invalid parameters */
- lpm_ipv6_params.n_rules = 0;
-
- status = test_table_type(&rte_table_lpm_ipv6_ops,
- (void *)&lpm_ipv6_params,
- (void *)&lpm_ipv6_key, &table_packets, NULL, 0);
- VERIFY(status, CHECK_TABLE_TABLE_CONFIG);
-
- lpm_ipv6_params.n_rules = 1 << 24;
- lpm_ipv6_key.depth = 0;
-
- status = test_table_type(&rte_table_lpm_ipv6_ops,
- (void *)&lpm_ipv6_params,
- (void *)&lpm_ipv6_key, &table_packets, NULL, 0);
- VERIFY(status, CHECK_TABLE_ENTRY_ADD);
-
- lpm_ipv6_key.depth = 129;
- status = test_table_type(&rte_table_lpm_ipv6_ops,
- (void *)&lpm_ipv6_params,
- (void *)&lpm_ipv6_key, &table_packets, NULL, 0);
- VERIFY(status, CHECK_TABLE_ENTRY_ADD);
-
- return 0;
-}
-
-int
-test_table_hash8lru(void)
-{
- int status, i;
-
- /* Traffic flow */
- struct rte_table_hash_key8_lru_params key8lru_params = {
- .n_entries = 1<<24,
- .f_hash = pipeline_test_hash,
- .signature_offset = APP_METADATA_OFFSET(0),
- .key_offset = APP_METADATA_OFFSET(32),
- .key_mask = NULL,
- };
-
- uint8_t key8lru[8];
- uint32_t *k8lru = (uint32_t *) key8lru;
-
- memset(key8lru, 0, sizeof(key8lru));
- k8lru[0] = 0xadadadad;
-
- struct table_packets table_packets;
-
- printf("--------------\n");
- printf("RUNNING TEST - %s\n", __func__);
- printf("--------------\n");
- for (i = 0; i < 50; i++)
- table_packets.hit_packet[i] = 0xadadadad;
-
- for (i = 0; i < 50; i++)
- table_packets.miss_packet[i] = 0xfefefefe;
-
- table_packets.n_hit_packets = 50;
- table_packets.n_miss_packets = 50;
-
- status = test_table_type(&rte_table_hash_key8_lru_ops,
- (void *)&key8lru_params, (void *)key8lru, &table_packets,
- NULL, 0);
- VERIFY(status, CHECK_TABLE_OK);
-
- /* Invalid parameters */
- key8lru_params.n_entries = 0;
-
- status = test_table_type(&rte_table_hash_key8_lru_ops,
- (void *)&key8lru_params, (void *)key8lru, &table_packets,
- NULL, 0);
- VERIFY(status, CHECK_TABLE_TABLE_CONFIG);
-
- key8lru_params.n_entries = 1<<16;
- key8lru_params.f_hash = NULL;
-
- status = test_table_type(&rte_table_hash_key8_lru_ops,
- (void *)&key8lru_params, (void *)key8lru, &table_packets,
- NULL, 0);
- VERIFY(status, CHECK_TABLE_TABLE_CONFIG);
-
- return 0;
-}
-
-int
-test_table_hash16lru(void)
-{
- int status, i;
-
- /* Traffic flow */
- struct rte_table_hash_key16_lru_params key16lru_params = {
- .n_entries = 1<<16,
- .f_hash = pipeline_test_hash,
- .seed = 0,
- .signature_offset = APP_METADATA_OFFSET(0),
- .key_offset = APP_METADATA_OFFSET(32),
- .key_mask = NULL,
- };
-
- uint8_t key16lru[16];
- uint32_t *k16lru = (uint32_t *) key16lru;
-
- memset(key16lru, 0, sizeof(key16lru));
- k16lru[0] = 0xadadadad;
-
- struct table_packets table_packets;
-
- printf("--------------\n");
- printf("RUNNING TEST - %s\n", __func__);
- printf("--------------\n");
- for (i = 0; i < 50; i++)
- table_packets.hit_packet[i] = 0xadadadad;
-
- for (i = 0; i < 50; i++)
- table_packets.miss_packet[i] = 0xfefefefe;
-
- table_packets.n_hit_packets = 50;
- table_packets.n_miss_packets = 50;
-
- status = test_table_type(&rte_table_hash_key16_lru_ops,
- (void *)&key16lru_params, (void *)key16lru, &table_packets,
- NULL, 0);
- VERIFY(status, CHECK_TABLE_OK);
-
- /* Invalid parameters */
- key16lru_params.n_entries = 0;
-
- status = test_table_type(&rte_table_hash_key16_lru_ops,
- (void *)&key16lru_params, (void *)key16lru, &table_packets,
- NULL, 0);
- VERIFY(status, CHECK_TABLE_TABLE_CONFIG);
-
- key16lru_params.n_entries = 1<<16;
- key16lru_params.f_hash = NULL;
-
- status = test_table_type(&rte_table_hash_key16_lru_ops,
- (void *)&key16lru_params, (void *)key16lru, &table_packets,
- NULL, 0);
- VERIFY(status, CHECK_TABLE_TABLE_CONFIG);
-
- return 0;
-}
-
-int
-test_table_hash32lru(void)
-{
- int status, i;
-
- /* Traffic flow */
- struct rte_table_hash_key32_lru_params key32lru_params = {
- .n_entries = 1<<16,
- .f_hash = pipeline_test_hash,
- .seed = 0,
- .signature_offset = APP_METADATA_OFFSET(0),
- .key_offset = APP_METADATA_OFFSET(32),
- };
-
- uint8_t key32lru[32];
- uint32_t *k32lru = (uint32_t *) key32lru;
-
- memset(key32lru, 0, sizeof(key32lru));
- k32lru[0] = 0xadadadad;
-
- struct table_packets table_packets;
-
- printf("--------------\n");
- printf("RUNNING TEST - %s\n", __func__);
- printf("--------------\n");
- for (i = 0; i < 50; i++)
- table_packets.hit_packet[i] = 0xadadadad;
-
- for (i = 0; i < 50; i++)
- table_packets.miss_packet[i] = 0xbdadadad;
-
- table_packets.n_hit_packets = 50;
- table_packets.n_miss_packets = 50;
-
- status = test_table_type(&rte_table_hash_key32_lru_ops,
- (void *)&key32lru_params, (void *)key32lru, &table_packets,
- NULL, 0);
- VERIFY(status, CHECK_TABLE_OK);
-
- /* Invalid parameters */
- key32lru_params.n_entries = 0;
-
- status = test_table_type(&rte_table_hash_key32_lru_ops,
- (void *)&key32lru_params, (void *)key32lru, &table_packets,
- NULL, 0);
- VERIFY(status, CHECK_TABLE_TABLE_CONFIG);
-
- key32lru_params.n_entries = 1<<16;
- key32lru_params.f_hash = NULL;
-
- status = test_table_type(&rte_table_hash_key32_lru_ops,
- (void *)&key32lru_params, (void *)key32lru, &table_packets,
- NULL, 0);
- VERIFY(status, CHECK_TABLE_TABLE_CONFIG);
-
- return 0;
-}
-
-int
-test_table_hash8ext(void)
-{
- int status, i;
-
- /* Traffic flow */
- struct rte_table_hash_key8_ext_params key8ext_params = {
- .n_entries = 1<<16,
- .n_entries_ext = 1<<15,
- .f_hash = pipeline_test_hash,
- .seed = 0,
- .signature_offset = APP_METADATA_OFFSET(0),
- .key_offset = APP_METADATA_OFFSET(32),
- .key_mask = NULL,
- };
-
- uint8_t key8ext[8];
- uint32_t *k8ext = (uint32_t *) key8ext;
-
- memset(key8ext, 0, sizeof(key8ext));
- k8ext[0] = 0xadadadad;
-
- struct table_packets table_packets;
-
- printf("--------------\n");
- printf("RUNNING TEST - %s\n", __func__);
- printf("--------------\n");
- for (i = 0; i < 50; i++)
- table_packets.hit_packet[i] = 0xadadadad;
-
- for (i = 0; i < 50; i++)
- table_packets.miss_packet[i] = 0xbdadadad;
-
- table_packets.n_hit_packets = 50;
- table_packets.n_miss_packets = 50;
-
- status = test_table_type(&rte_table_hash_key8_ext_ops,
- (void *)&key8ext_params, (void *)key8ext, &table_packets,
- NULL, 0);
- VERIFY(status, CHECK_TABLE_OK);
-
- /* Invalid parameters */
- key8ext_params.n_entries = 0;
-
- status = test_table_type(&rte_table_hash_key8_ext_ops,
- (void *)&key8ext_params, (void *)key8ext, &table_packets,
- NULL, 0);
- VERIFY(status, CHECK_TABLE_TABLE_CONFIG);
-
- key8ext_params.n_entries = 1<<16;
- key8ext_params.f_hash = NULL;
-
- status = test_table_type(&rte_table_hash_key8_ext_ops,
- (void *)&key8ext_params, (void *)key8ext, &table_packets,
- NULL, 0);
- VERIFY(status, CHECK_TABLE_TABLE_CONFIG);
-
- key8ext_params.f_hash = pipeline_test_hash;
- key8ext_params.n_entries_ext = 0;
-
- status = test_table_type(&rte_table_hash_key8_ext_ops,
- (void *)&key8ext_params, (void *)key8ext, &table_packets, NULL, 0);
- VERIFY(status, CHECK_TABLE_TABLE_CONFIG);
-
- return 0;
-}
-
-int
-test_table_hash16ext(void)
-{
- int status, i;
-
- /* Traffic flow */
- struct rte_table_hash_key16_ext_params key16ext_params = {
- .n_entries = 1<<16,
- .n_entries_ext = 1<<15,
- .f_hash = pipeline_test_hash,
- .seed = 0,
- .signature_offset = APP_METADATA_OFFSET(0),
- .key_offset = APP_METADATA_OFFSET(32),
- .key_mask = NULL,
- };
-
- uint8_t key16ext[16];
- uint32_t *k16ext = (uint32_t *) key16ext;
-
- memset(key16ext, 0, sizeof(key16ext));
- k16ext[0] = 0xadadadad;
-
- struct table_packets table_packets;
-
- printf("--------------\n");
- printf("RUNNING TEST - %s\n", __func__);
- printf("--------------\n");
- for (i = 0; i < 50; i++)
- table_packets.hit_packet[i] = 0xadadadad;
-
- for (i = 0; i < 50; i++)
- table_packets.miss_packet[i] = 0xbdadadad;
-
- table_packets.n_hit_packets = 50;
- table_packets.n_miss_packets = 50;
-
- status = test_table_type(&rte_table_hash_key16_ext_ops,
- (void *)&key16ext_params, (void *)key16ext, &table_packets,
- NULL, 0);
- VERIFY(status, CHECK_TABLE_OK);
-
- /* Invalid parameters */
- key16ext_params.n_entries = 0;
-
- status = test_table_type(&rte_table_hash_key16_ext_ops,
- (void *)&key16ext_params, (void *)key16ext, &table_packets,
- NULL, 0);
- VERIFY(status, CHECK_TABLE_TABLE_CONFIG);
-
- key16ext_params.n_entries = 1<<16;
- key16ext_params.f_hash = NULL;
-
- status = test_table_type(&rte_table_hash_key16_ext_ops,
- (void *)&key16ext_params, (void *)key16ext, &table_packets,
- NULL, 0);
- VERIFY(status, CHECK_TABLE_TABLE_CONFIG);
-
- key16ext_params.f_hash = pipeline_test_hash;
- key16ext_params.n_entries_ext = 0;
-
- status = test_table_type(&rte_table_hash_key16_ext_ops,
- (void *)&key16ext_params, (void *)key16ext, &table_packets, NULL, 0);
- VERIFY(status, CHECK_TABLE_TABLE_CONFIG);
-
- return 0;
-}
-
-int
-test_table_hash32ext(void)
-{
- int status, i;
-
- /* Traffic flow */
- struct rte_table_hash_key32_ext_params key32ext_params = {
- .n_entries = 1<<16,
- .n_entries_ext = 1<<15,
- .f_hash = pipeline_test_hash,
- .seed = 0,
- .signature_offset = APP_METADATA_OFFSET(0),
- .key_offset = APP_METADATA_OFFSET(32),
- };
-
- uint8_t key32ext[32];
- uint32_t *k32ext = (uint32_t *) key32ext;
-
- memset(key32ext, 0, sizeof(key32ext));
- k32ext[0] = 0xadadadad;
-
- struct table_packets table_packets;
-
- printf("--------------\n");
- printf("RUNNING TEST - %s\n", __func__);
- printf("--------------\n");
- for (i = 0; i < 50; i++)
- table_packets.hit_packet[i] = 0xadadadad;
-
- for (i = 0; i < 50; i++)
- table_packets.miss_packet[i] = 0xbdadadad;
-
- table_packets.n_hit_packets = 50;
- table_packets.n_miss_packets = 50;
-
- status = test_table_type(&rte_table_hash_key32_ext_ops,
- (void *)&key32ext_params, (void *)key32ext, &table_packets,
- NULL, 0);
- VERIFY(status, CHECK_TABLE_OK);
-
- /* Invalid parameters */
- key32ext_params.n_entries = 0;
-
- status = test_table_type(&rte_table_hash_key32_ext_ops,
- (void *)&key32ext_params, (void *)key32ext, &table_packets,
- NULL, 0);
- VERIFY(status, CHECK_TABLE_TABLE_CONFIG);
-
- key32ext_params.n_entries = 1<<16;
- key32ext_params.f_hash = NULL;
-
- status = test_table_type(&rte_table_hash_key32_ext_ops,
- (void *)&key32ext_params, (void *)key32ext, &table_packets,
- NULL, 0);
- VERIFY(status, CHECK_TABLE_TABLE_CONFIG);
-
- key32ext_params.f_hash = pipeline_test_hash;
- key32ext_params.n_entries_ext = 0;
-
- status = test_table_type(&rte_table_hash_key32_ext_ops,
- (void *)&key32ext_params, (void *)key32ext, &table_packets,
- NULL, 0);
- VERIFY(status, CHECK_TABLE_TABLE_CONFIG);
-
- return 0;
-}
-
-int
-test_table_hash_cuckoo_combined(void)
-{
- int status, i;
-
- /* Traffic flow */
- struct rte_table_hash_cuckoo_params cuckoo_params = {
- .key_size = 32,
- .n_keys = 1<<16,
- .f_hash = pipeline_test_hash,
- .seed = 0,
- .signature_offset = APP_METADATA_OFFSET(0),
- .key_offset = APP_METADATA_OFFSET(32),
- .name = "CUCKOO_HASH",
- };
-
- uint8_t key_cuckoo[32];
- uint32_t *kcuckoo = (uint32_t *) key_cuckoo;
-
- memset(key_cuckoo, 0, sizeof(key_cuckoo));
- kcuckoo[0] = 0xadadadad;
-
- struct table_packets table_packets;
-
- printf("--------------\n");
- printf("RUNNING TEST - %s\n", __func__);
- printf("--------------\n");
- for (i = 0; i < 50; i++)
- table_packets.hit_packet[i] = 0xadadadad;
-
- for (i = 0; i < 50; i++)
- table_packets.miss_packet[i] = 0xbdadadad;
-
- table_packets.n_hit_packets = 50;
- table_packets.n_miss_packets = 50;
-
- status = test_table_type(&rte_table_hash_cuckoo_dosig_ops,
- (void *)&cuckoo_params, (void *)key_cuckoo, &table_packets,
- NULL, 0);
- VERIFY(status, CHECK_TABLE_OK);
-
- /* Invalid parameters */
- cuckoo_params.key_size = 0;
-
- status = test_table_type(&rte_table_hash_cuckoo_dosig_ops,
- (void *)&cuckoo_params, (void *)key_cuckoo, &table_packets,
- NULL, 0);
- VERIFY(status, CHECK_TABLE_TABLE_CONFIG);
-
- cuckoo_params.key_size = 32;
- cuckoo_params.n_keys = 0;
-
- status = test_table_type(&rte_table_hash_cuckoo_dosig_ops,
- (void *)&cuckoo_params, (void *)key_cuckoo, &table_packets,
- NULL, 0);
- VERIFY(status, CHECK_TABLE_TABLE_CONFIG);
-
- cuckoo_params.n_keys = 1<<16;
- cuckoo_params.f_hash = NULL;
-
- status = test_table_type(&rte_table_hash_cuckoo_dosig_ops,
- (void *)&cuckoo_params, (void *)key_cuckoo, &table_packets,
- NULL, 0);
- VERIFY(status, CHECK_TABLE_TABLE_CONFIG);
-
- return 0;
-}
-
diff --git a/app/test/test_table_combined.h b/app/test/test_table_combined.h
deleted file mode 100644
index e1619f92..00000000
--- a/app/test/test_table_combined.h
+++ /dev/null
@@ -1,56 +0,0 @@
-/*-
- * BSD LICENSE
- *
- * Copyright(c) 2010-2016 Intel Corporation. All rights reserved.
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * * Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * * Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in
- * the documentation and/or other materials provided with the
- * distribution.
- * * Neither the name of Intel Corporation nor the names of its
- * contributors may be used to endorse or promote products derived
- * from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
- * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
- * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-/* Test prototypes */
-int test_table_stub_combined(void);
-int test_table_lpm_combined(void);
-int test_table_lpm_ipv6_combined(void);
-#ifdef RTE_LIBRTE_ACL
-int test_table_acl(void);
-#endif
-int test_table_hash8unoptimized(void);
-int test_table_hash8lru(void);
-int test_table_hash8ext(void);
-int test_table_hash16unoptimized(void);
-int test_table_hash16lru(void);
-int test_table_hash16ext(void);
-int test_table_hash32unoptimized(void);
-int test_table_hash32lru(void);
-int test_table_hash32ext(void);
-int test_table_hash_cuckoo_combined(void);
-
-/* Extern variables */
-typedef int (*combined_table_test)(void);
-
-extern combined_table_test table_tests_combined[];
-extern unsigned n_table_tests_combined;
diff --git a/app/test/test_table_pipeline.c b/app/test/test_table_pipeline.c
deleted file mode 100644
index 36bfeda3..00000000
--- a/app/test/test_table_pipeline.c
+++ /dev/null
@@ -1,600 +0,0 @@
-/*-
- * BSD LICENSE
- *
- * Copyright(c) 2010-2014 Intel Corporation. All rights reserved.
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * * Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * * Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in
- * the documentation and/or other materials provided with the
- * distribution.
- * * Neither the name of Intel Corporation nor the names of its
- * contributors may be used to endorse or promote products derived
- * from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
- * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
- * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#include <string.h>
-#include <rte_pipeline.h>
-#include <rte_log.h>
-#include <inttypes.h>
-#include <rte_hexdump.h>
-#include "test_table.h"
-#include "test_table_pipeline.h"
-
-#if 0
-
-static rte_pipeline_port_out_action_handler port_action_0x00
- (struct rte_mbuf **pkts, uint32_t n, uint64_t *pkts_mask, void *arg);
-static rte_pipeline_port_out_action_handler port_action_0xFF
- (struct rte_mbuf **pkts, uint32_t n, uint64_t *pkts_mask, void *arg);
-static rte_pipeline_port_out_action_handler port_action_stub
- (struct rte_mbuf **pkts, uint32_t n, uint64_t *pkts_mask, void *arg);
-
-
-rte_pipeline_port_out_action_handler port_action_0x00(struct rte_mbuf **pkts,
- uint32_t n,
- uint64_t *pkts_mask,
- void *arg)
-{
- RTE_SET_USED(pkts);
- RTE_SET_USED(n);
- RTE_SET_USED(arg);
- printf("Port Action 0x00\n");
- *pkts_mask = 0x00;
- return 0;
-}
-
-rte_pipeline_port_out_action_handler port_action_0xFF(struct rte_mbuf **pkts,
- uint32_t n,
- uint64_t *pkts_mask,
- void *arg)
-{
- RTE_SET_USED(pkts);
- RTE_SET_USED(n);
- RTE_SET_USED(arg);
- printf("Port Action 0xFF\n");
- *pkts_mask = 0xFF;
- return 0;
-}
-
-rte_pipeline_port_out_action_handler port_action_stub(struct rte_mbuf **pkts,
- uint32_t n,
- uint64_t *pkts_mask,
- void *arg)
-{
- RTE_SET_USED(pkts);
- RTE_SET_USED(n);
- RTE_SET_USED(pkts_mask);
- RTE_SET_USED(arg);
- printf("Port Action stub\n");
- return 0;
-}
-
-#endif
-
-rte_pipeline_table_action_handler_hit
-table_action_0x00(struct rte_pipeline *p, struct rte_mbuf **pkts,
- uint64_t pkts_mask, struct rte_pipeline_table_entry **entry, void *arg);
-
-rte_pipeline_table_action_handler_hit
-table_action_stub_hit(struct rte_pipeline *p, struct rte_mbuf **pkts,
- uint64_t pkts_mask, struct rte_pipeline_table_entry **entry, void *arg);
-
-rte_pipeline_table_action_handler_miss
-table_action_stub_miss(struct rte_pipeline *p, struct rte_mbuf **pkts,
- uint64_t pkts_mask, struct rte_pipeline_table_entry **entry, void *arg);
-
-rte_pipeline_table_action_handler_hit
-table_action_0x00(__attribute__((unused)) struct rte_pipeline *p,
- __attribute__((unused)) struct rte_mbuf **pkts,
- uint64_t pkts_mask,
- __attribute__((unused)) struct rte_pipeline_table_entry **entry,
- __attribute__((unused)) void *arg)
-{
- printf("Table Action, setting pkts_mask to 0x00\n");
- pkts_mask = ~0x00;
- rte_pipeline_ah_packet_drop(p, pkts_mask);
- return 0;
-}
-
-rte_pipeline_table_action_handler_hit
-table_action_stub_hit(__attribute__((unused)) struct rte_pipeline *p,
- __attribute__((unused)) struct rte_mbuf **pkts,
- uint64_t pkts_mask,
- __attribute__((unused)) struct rte_pipeline_table_entry **entry,
- __attribute__((unused)) void *arg)
-{
- printf("STUB Table Action Hit - doing nothing\n");
- printf("STUB Table Action Hit - setting mask to 0x%"PRIx64"\n",
- override_hit_mask);
- pkts_mask = (~override_hit_mask) & 0x3;
- rte_pipeline_ah_packet_drop(p, pkts_mask);
- return 0;
-}
-
-rte_pipeline_table_action_handler_miss
-table_action_stub_miss(struct rte_pipeline *p,
- __attribute__((unused)) struct rte_mbuf **pkts,
- uint64_t pkts_mask,
- __attribute__((unused)) struct rte_pipeline_table_entry **entry,
- __attribute__((unused)) void *arg)
-{
- printf("STUB Table Action Miss - setting mask to 0x%"PRIx64"\n",
- override_miss_mask);
- pkts_mask = (~override_miss_mask) & 0x3;
- rte_pipeline_ah_packet_drop(p, pkts_mask);
- return 0;
-}
-
-enum e_test_type {
- e_TEST_STUB = 0,
- e_TEST_LPM,
- e_TEST_LPM6,
- e_TEST_HASH_LRU_8,
- e_TEST_HASH_LRU_16,
- e_TEST_HASH_LRU_32,
- e_TEST_HASH_EXT_8,
- e_TEST_HASH_EXT_16,
- e_TEST_HASH_EXT_32
-};
-
-char pipeline_test_names[][64] = {
- "Stub",
- "LPM",
- "LPMv6",
- "8-bit LRU Hash",
- "16-bit LRU Hash",
- "32-bit LRU Hash",
- "16-bit Ext Hash",
- "8-bit Ext Hash",
- "32-bit Ext Hash",
- ""
-};
-
-
-static int
-cleanup_pipeline(void)
-{
-
- rte_pipeline_free(p);
-
- return 0;
-}
-
-
-static int check_pipeline_invalid_params(void);
-
-static int
-check_pipeline_invalid_params(void)
-{
- struct rte_pipeline_params pipeline_params_1 = {
- .name = NULL,
- .socket_id = 0,
- };
- struct rte_pipeline_params pipeline_params_2 = {
- .name = "PIPELINE",
- .socket_id = -1,
- };
- struct rte_pipeline_params pipeline_params_3 = {
- .name = "PIPELINE",
- .socket_id = 127,
- };
-
- p = rte_pipeline_create(NULL);
- if (p != NULL) {
- RTE_LOG(INFO, PIPELINE,
- "%s: configured pipeline with null params\n",
- __func__);
- goto fail;
- }
- p = rte_pipeline_create(&pipeline_params_1);
- if (p != NULL) {
- RTE_LOG(INFO, PIPELINE, "%s: Configure pipeline with NULL "
- "name\n", __func__);
- goto fail;
- }
-
- p = rte_pipeline_create(&pipeline_params_2);
- if (p != NULL) {
- RTE_LOG(INFO, PIPELINE, "%s: Configure pipeline with invalid "
- "socket\n", __func__);
- goto fail;
- }
-
- p = rte_pipeline_create(&pipeline_params_3);
- if (p != NULL) {
- RTE_LOG(INFO, PIPELINE, "%s: Configure pipeline with invalid "
- "socket\n", __func__);
- goto fail;
- }
-
- /* Check pipeline consistency */
- if (!rte_pipeline_check(p)) {
- rte_panic("Pipeline consistency reported as OK\n");
- goto fail;
- }
-
-
- return 0;
-fail:
- return -1;
-}
-
-
-static int
-setup_pipeline(int test_type)
-{
- int ret;
- int i;
- struct rte_pipeline_params pipeline_params = {
- .name = "PIPELINE",
- .socket_id = 0,
- };
-
- RTE_LOG(INFO, PIPELINE, "%s: **** Setting up %s test\n",
- __func__, pipeline_test_names[test_type]);
-
- /* Pipeline configuration */
- p = rte_pipeline_create(&pipeline_params);
- if (p == NULL) {
- RTE_LOG(INFO, PIPELINE, "%s: Failed to configure pipeline\n",
- __func__);
- goto fail;
- }
-
- ret = rte_pipeline_free(p);
- if (ret != 0) {
- RTE_LOG(INFO, PIPELINE, "%s: Failed to free pipeline\n",
- __func__);
- goto fail;
- }
-
- /* Pipeline configuration */
- p = rte_pipeline_create(&pipeline_params);
- if (p == NULL) {
- RTE_LOG(INFO, PIPELINE, "%s: Failed to configure pipeline\n",
- __func__);
- goto fail;
- }
-
-
- /* Input port configuration */
- for (i = 0; i < N_PORTS; i++) {
- struct rte_port_ring_reader_params port_ring_params = {
- .ring = rings_rx[i],
- };
-
- struct rte_pipeline_port_in_params port_params = {
- .ops = &rte_port_ring_reader_ops,
- .arg_create = (void *) &port_ring_params,
- .f_action = NULL,
- .burst_size = BURST_SIZE,
- };
-
- /* Put in action for some ports */
- if (i)
- port_params.f_action = NULL;
-
- ret = rte_pipeline_port_in_create(p, &port_params,
- &port_in_id[i]);
- if (ret) {
- rte_panic("Unable to configure input port %d, ret:%d\n",
- i, ret);
- goto fail;
- }
- }
-
- /* output Port configuration */
- for (i = 0; i < N_PORTS; i++) {
- struct rte_port_ring_writer_params port_ring_params = {
- .ring = rings_tx[i],
- .tx_burst_sz = BURST_SIZE,
- };
-
- struct rte_pipeline_port_out_params port_params = {
- .ops = &rte_port_ring_writer_ops,
- .arg_create = (void *) &port_ring_params,
- .f_action = NULL,
- .arg_ah = NULL,
- };
-
- if (i)
- port_params.f_action = port_out_action;
-
- if (rte_pipeline_port_out_create(p, &port_params,
- &port_out_id[i])) {
- rte_panic("Unable to configure output port %d\n", i);
- goto fail;
- }
- }
-
- /* Table configuration */
- for (i = 0; i < N_PORTS; i++) {
- struct rte_pipeline_table_params table_params = {
- .ops = &rte_table_stub_ops,
- .arg_create = NULL,
- .f_action_hit = action_handler_hit,
- .f_action_miss = action_handler_miss,
- .action_data_size = 0,
- };
-
- if (rte_pipeline_table_create(p, &table_params, &table_id[i])) {
- rte_panic("Unable to configure table %u\n", i);
- goto fail;
- }
-
- if (connect_miss_action_to_table)
- if (rte_pipeline_table_create(p, &table_params,
- &table_id[i+2])) {
- rte_panic("Unable to configure table %u\n", i);
- goto fail;
- }
- }
-
- for (i = 0; i < N_PORTS; i++)
- if (rte_pipeline_port_in_connect_to_table(p, port_in_id[i],
- table_id[i])) {
- rte_panic("Unable to connect input port %u to "
- "table %u\n", port_in_id[i], table_id[i]);
- goto fail;
- }
-
- /* Add entries to tables */
- for (i = 0; i < N_PORTS; i++) {
- struct rte_pipeline_table_entry default_entry = {
- .action = (enum rte_pipeline_action)
- table_entry_default_action,
- {.port_id = port_out_id[i^1]},
- };
- struct rte_pipeline_table_entry *default_entry_ptr;
-
- if (connect_miss_action_to_table) {
- printf("Setting first table to output to next table\n");
- default_entry.action = RTE_PIPELINE_ACTION_TABLE;
- default_entry.table_id = table_id[i+2];
- }
-
- /* Add the default action for the table. */
- ret = rte_pipeline_table_default_entry_add(p, table_id[i],
- &default_entry, &default_entry_ptr);
- if (ret < 0) {
- rte_panic("Unable to add default entry to table %u "
- "code %d\n", table_id[i], ret);
- goto fail;
- } else
- printf("Added default entry to table id %d with "
- "action %x\n",
- table_id[i], default_entry.action);
-
- if (connect_miss_action_to_table) {
- /* We create a second table so the first can pass
- traffic into it */
- struct rte_pipeline_table_entry default_entry = {
- .action = RTE_PIPELINE_ACTION_PORT,
- {.port_id = port_out_id[i^1]},
- };
- printf("Setting secont table to output to port\n");
-
- /* Add the default action for the table. */
- ret = rte_pipeline_table_default_entry_add(p,
- table_id[i+2],
- &default_entry, &default_entry_ptr);
- if (ret < 0) {
- rte_panic("Unable to add default entry to "
- "table %u code %d\n",
- table_id[i], ret);
- goto fail;
- } else
- printf("Added default entry to table id %d "
- "with action %x\n",
- table_id[i], default_entry.action);
- }
- }
-
- /* Enable input ports */
- for (i = 0; i < N_PORTS ; i++)
- if (rte_pipeline_port_in_enable(p, port_in_id[i]))
- rte_panic("Unable to enable input port %u\n",
- port_in_id[i]);
-
- /* Check pipeline consistency */
- if (rte_pipeline_check(p) < 0) {
- rte_panic("Pipeline consistency check failed\n");
- goto fail;
- } else
- printf("Pipeline Consistency OK!\n");
-
- return 0;
-fail:
-
- return -1;
-}
-
-static int
-test_pipeline_single_filter(int test_type, int expected_count)
-{
- int i;
- int j;
- int ret;
- int tx_count;
-
- RTE_LOG(INFO, PIPELINE, "%s: **** Running %s test\n",
- __func__, pipeline_test_names[test_type]);
- /* Run pipeline once */
- for (i = 0; i < N_PORTS; i++)
- rte_pipeline_run(p);
-
-
- ret = rte_pipeline_flush(NULL);
- if (ret != -EINVAL) {
- RTE_LOG(INFO, PIPELINE,
- "%s: No pipeline flush error NULL pipeline (%d)\n",
- __func__, ret);
- goto fail;
- }
-
- /*
- * Allocate a few mbufs and manually insert into the rings. */
- for (i = 0; i < N_PORTS; i++)
- for (j = 0; j < N_PORTS; j++) {
- struct rte_mbuf *m;
- uint8_t *key;
- uint32_t *k32;
-
- m = rte_pktmbuf_alloc(pool);
- if (m == NULL) {
- rte_panic("Failed to alloc mbuf from pool\n");
- return -1;
- }
- key = RTE_MBUF_METADATA_UINT8_PTR(m,
- APP_METADATA_OFFSET(32));
-
- k32 = (uint32_t *) key;
- k32[0] = 0xadadadad >> (j % 2);
-
- RTE_LOG(INFO, PIPELINE, "%s: Enqueue onto ring %d\n",
- __func__, i);
- rte_ring_enqueue(rings_rx[i], m);
- }
-
- /* Run pipeline once */
- for (i = 0; i < N_PORTS; i++)
- rte_pipeline_run(p);
-
- /*
- * need to flush the pipeline, as there may be less hits than the burst
- size and they will not have been flushed to the tx rings. */
- rte_pipeline_flush(p);
-
- /*
- * Now we'll see what we got back on the tx rings. We should see whatever
- * packets we had hits on that were destined for the output ports.
- */
- tx_count = 0;
-
- for (i = 0; i < N_PORTS; i++) {
- void *objs[RING_TX_SIZE];
- struct rte_mbuf *mbuf;
-
- ret = rte_ring_sc_dequeue_burst(rings_tx[i], objs, 10);
- if (ret <= 0)
- printf("Got no objects from ring %d - error code %d\n",
- i, ret);
- else {
- printf("Got %d object(s) from ring %d!\n", ret, i);
- for (j = 0; j < ret; j++) {
- mbuf = (struct rte_mbuf *)objs[j];
- rte_hexdump(stdout, "Object:",
- rte_pktmbuf_mtod(mbuf, char *),
- mbuf->data_len);
- rte_pktmbuf_free(mbuf);
- }
- tx_count += ret;
- }
- }
-
- if (tx_count != expected_count) {
- RTE_LOG(INFO, PIPELINE,
- "%s: Unexpected packets out for %s test, expected %d, "
- "got %d\n", __func__, pipeline_test_names[test_type],
- expected_count, tx_count);
- goto fail;
- }
-
- cleanup_pipeline();
-
- return 0;
-fail:
- return -1;
-
-}
-
-int
-test_table_pipeline(void)
-{
- /* TEST - All packets dropped */
- action_handler_hit = NULL;
- action_handler_miss = NULL;
- table_entry_default_action = RTE_PIPELINE_ACTION_DROP;
- setup_pipeline(e_TEST_STUB);
- if (test_pipeline_single_filter(e_TEST_STUB, 0) < 0)
- return -1;
-
- /* TEST - All packets passed through */
- table_entry_default_action = RTE_PIPELINE_ACTION_PORT;
- setup_pipeline(e_TEST_STUB);
- if (test_pipeline_single_filter(e_TEST_STUB, 4) < 0)
- return -1;
-
- /* TEST - one packet per port */
- action_handler_hit = NULL;
- action_handler_miss =
- (rte_pipeline_table_action_handler_miss) table_action_stub_miss;
- table_entry_default_action = RTE_PIPELINE_ACTION_PORT;
- override_miss_mask = 0x01; /* one packet per port */
- setup_pipeline(e_TEST_STUB);
- if (test_pipeline_single_filter(e_TEST_STUB, 2) < 0)
- return -1;
-
- /* TEST - one packet per port */
- override_miss_mask = 0x02; /*all per port */
- setup_pipeline(e_TEST_STUB);
- if (test_pipeline_single_filter(e_TEST_STUB, 2) < 0)
- return -1;
-
- /* TEST - all packets per port */
- override_miss_mask = 0x03; /*all per port */
- setup_pipeline(e_TEST_STUB);
- if (test_pipeline_single_filter(e_TEST_STUB, 4) < 0)
- return -1;
-
- /*
- * This test will set up two tables in the pipeline. the first table
- * will forward to another table on miss, and the second table will
- * forward to port.
- */
- connect_miss_action_to_table = 1;
- table_entry_default_action = RTE_PIPELINE_ACTION_TABLE;
- action_handler_hit = NULL; /* not for stub, hitmask always zero */
- action_handler_miss = NULL;
- setup_pipeline(e_TEST_STUB);
- if (test_pipeline_single_filter(e_TEST_STUB, 4) < 0)
- return -1;
- connect_miss_action_to_table = 0;
-
- printf("TEST - two tables, hitmask override to 0x01\n");
- connect_miss_action_to_table = 1;
- action_handler_miss =
- (rte_pipeline_table_action_handler_miss)table_action_stub_miss;
- override_miss_mask = 0x01;
- setup_pipeline(e_TEST_STUB);
- if (test_pipeline_single_filter(e_TEST_STUB, 2) < 0)
- return -1;
- connect_miss_action_to_table = 0;
-
- if (check_pipeline_invalid_params()) {
- RTE_LOG(INFO, PIPELINE, "%s: Check pipeline invalid params "
- "failed.\n", __func__);
- return -1;
- }
-
- return 0;
-}
diff --git a/app/test/test_table_pipeline.h b/app/test/test_table_pipeline.h
deleted file mode 100644
index b3f20ba3..00000000
--- a/app/test/test_table_pipeline.h
+++ /dev/null
@@ -1,35 +0,0 @@
-/*-
- * BSD LICENSE
- *
- * Copyright(c) 2010-2014 Intel Corporation. All rights reserved.
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * * Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * * Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in
- * the documentation and/or other materials provided with the
- * distribution.
- * * Neither the name of Intel Corporation nor the names of its
- * contributors may be used to endorse or promote products derived
- * from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
- * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
- * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-/* Test prototypes */
-int test_table_pipeline(void);
diff --git a/app/test/test_table_ports.c b/app/test/test_table_ports.c
deleted file mode 100644
index 25323677..00000000
--- a/app/test/test_table_ports.c
+++ /dev/null
@@ -1,220 +0,0 @@
-/*-
- * BSD LICENSE
- *
- * Copyright(c) 2010-2014 Intel Corporation. All rights reserved.
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * * Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * * Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in
- * the documentation and/or other materials provided with the
- * distribution.
- * * Neither the name of Intel Corporation nor the names of its
- * contributors may be used to endorse or promote products derived
- * from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
- * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
- * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#include "test_table_ports.h"
-#include "test_table.h"
-
-port_test port_tests[] = {
- test_port_ring_reader,
- test_port_ring_writer,
-};
-
-unsigned n_port_tests = RTE_DIM(port_tests);
-
-/* Port tests */
-int
-test_port_ring_reader(void)
-{
- int status, i;
- struct rte_port_ring_reader_params port_ring_reader_params;
- void *port;
-
- /* Invalid params */
- port = rte_port_ring_reader_ops.f_create(NULL, 0);
- if (port != NULL)
- return -1;
-
- status = rte_port_ring_reader_ops.f_free(port);
- if (status >= 0)
- return -2;
-
- /* Create and free */
- port_ring_reader_params.ring = RING_RX;
- port = rte_port_ring_reader_ops.f_create(&port_ring_reader_params, 0);
- if (port == NULL)
- return -3;
-
- status = rte_port_ring_reader_ops.f_free(port);
- if (status != 0)
- return -4;
-
- /* -- Traffic RX -- */
- int expected_pkts, received_pkts;
- struct rte_mbuf *res_mbuf[RTE_PORT_IN_BURST_SIZE_MAX];
- void *mbuf[RTE_PORT_IN_BURST_SIZE_MAX];
-
- port_ring_reader_params.ring = RING_RX;
- port = rte_port_ring_reader_ops.f_create(&port_ring_reader_params, 0);
-
- /* Single packet */
- mbuf[0] = (void *)rte_pktmbuf_alloc(pool);
-
- expected_pkts = rte_ring_sp_enqueue_burst(port_ring_reader_params.ring,
- mbuf, 1);
- received_pkts = rte_port_ring_reader_ops.f_rx(port, res_mbuf, 1);
-
- if (received_pkts < expected_pkts)
- return -5;
-
- rte_pktmbuf_free(res_mbuf[0]);
-
- /* Multiple packets */
- for (i = 0; i < RTE_PORT_IN_BURST_SIZE_MAX; i++)
- mbuf[i] = rte_pktmbuf_alloc(pool);
-
- expected_pkts = rte_ring_sp_enqueue_burst(port_ring_reader_params.ring,
- (void * const *) mbuf, RTE_PORT_IN_BURST_SIZE_MAX);
- received_pkts = rte_port_ring_reader_ops.f_rx(port, res_mbuf,
- RTE_PORT_IN_BURST_SIZE_MAX);
-
- if (received_pkts < expected_pkts)
- return -6;
-
- for (i = 0; i < RTE_PORT_IN_BURST_SIZE_MAX; i++)
- rte_pktmbuf_free(res_mbuf[i]);
-
- return 0;
-}
-
-int
-test_port_ring_writer(void)
-{
- int status, i;
- struct rte_port_ring_writer_params port_ring_writer_params;
- void *port;
-
- /* Invalid params */
- port = rte_port_ring_writer_ops.f_create(NULL, 0);
- if (port != NULL)
- return -1;
-
- status = rte_port_ring_writer_ops.f_free(port);
- if (status >= 0)
- return -2;
-
- port_ring_writer_params.ring = NULL;
-
- port = rte_port_ring_writer_ops.f_create(&port_ring_writer_params, 0);
- if (port != NULL)
- return -3;
-
- port_ring_writer_params.ring = RING_TX;
- port_ring_writer_params.tx_burst_sz = RTE_PORT_IN_BURST_SIZE_MAX + 1;
-
- port = rte_port_ring_writer_ops.f_create(&port_ring_writer_params, 0);
- if (port != NULL)
- return -4;
-
- /* Create and free */
- port_ring_writer_params.ring = RING_TX;
- port_ring_writer_params.tx_burst_sz = RTE_PORT_IN_BURST_SIZE_MAX;
-
- port = rte_port_ring_writer_ops.f_create(&port_ring_writer_params, 0);
- if (port == NULL)
- return -5;
-
- status = rte_port_ring_writer_ops.f_free(port);
- if (status != 0)
- return -6;
-
- /* -- Traffic TX -- */
- int expected_pkts, received_pkts;
- struct rte_mbuf *mbuf[RTE_PORT_IN_BURST_SIZE_MAX];
- struct rte_mbuf *res_mbuf[RTE_PORT_IN_BURST_SIZE_MAX];
-
- port_ring_writer_params.ring = RING_TX;
- port_ring_writer_params.tx_burst_sz = RTE_PORT_IN_BURST_SIZE_MAX;
- port = rte_port_ring_writer_ops.f_create(&port_ring_writer_params, 0);
-
- /* Single packet */
- mbuf[0] = rte_pktmbuf_alloc(pool);
-
- rte_port_ring_writer_ops.f_tx(port, mbuf[0]);
- rte_port_ring_writer_ops.f_flush(port);
- expected_pkts = 1;
- received_pkts = rte_ring_sc_dequeue_burst(port_ring_writer_params.ring,
- (void **)res_mbuf, port_ring_writer_params.tx_burst_sz);
-
- if (received_pkts < expected_pkts)
- return -7;
-
- rte_pktmbuf_free(res_mbuf[0]);
-
- /* Multiple packets */
- for (i = 0; i < RTE_PORT_IN_BURST_SIZE_MAX; i++) {
- mbuf[i] = rte_pktmbuf_alloc(pool);
- rte_port_ring_writer_ops.f_tx(port, mbuf[i]);
- }
-
- expected_pkts = RTE_PORT_IN_BURST_SIZE_MAX;
- received_pkts = rte_ring_sc_dequeue_burst(port_ring_writer_params.ring,
- (void **)res_mbuf, port_ring_writer_params.tx_burst_sz);
-
- if (received_pkts < expected_pkts)
- return -8;
-
- for (i = 0; i < RTE_PORT_IN_BURST_SIZE_MAX; i++)
- rte_pktmbuf_free(res_mbuf[i]);
-
- /* TX Bulk */
- for (i = 0; i < RTE_PORT_IN_BURST_SIZE_MAX; i++)
- mbuf[i] = rte_pktmbuf_alloc(pool);
- rte_port_ring_writer_ops.f_tx_bulk(port, mbuf, (uint64_t)-1);
-
- expected_pkts = RTE_PORT_IN_BURST_SIZE_MAX;
- received_pkts = rte_ring_sc_dequeue_burst(port_ring_writer_params.ring,
- (void **)res_mbuf, port_ring_writer_params.tx_burst_sz);
-
- if (received_pkts < expected_pkts)
- return -8;
-
- for (i = 0; i < RTE_PORT_IN_BURST_SIZE_MAX; i++)
- rte_pktmbuf_free(res_mbuf[i]);
-
- for (i = 0; i < RTE_PORT_IN_BURST_SIZE_MAX; i++)
- mbuf[i] = rte_pktmbuf_alloc(pool);
- rte_port_ring_writer_ops.f_tx_bulk(port, mbuf, (uint64_t)-3);
- rte_port_ring_writer_ops.f_tx_bulk(port, mbuf, (uint64_t)2);
-
- expected_pkts = RTE_PORT_IN_BURST_SIZE_MAX;
- received_pkts = rte_ring_sc_dequeue_burst(port_ring_writer_params.ring,
- (void **)res_mbuf, port_ring_writer_params.tx_burst_sz);
-
- if (received_pkts < expected_pkts)
- return -9;
-
- for (i = 0; i < RTE_PORT_IN_BURST_SIZE_MAX; i++)
- rte_pktmbuf_free(res_mbuf[i]);
-
- return 0;
-}
diff --git a/app/test/test_table_ports.h b/app/test/test_table_ports.h
deleted file mode 100644
index 512b77fe..00000000
--- a/app/test/test_table_ports.h
+++ /dev/null
@@ -1,42 +0,0 @@
-/*-
- * BSD LICENSE
- *
- * Copyright(c) 2010-2014 Intel Corporation. All rights reserved.
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * * Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * * Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in
- * the documentation and/or other materials provided with the
- * distribution.
- * * Neither the name of Intel Corporation nor the names of its
- * contributors may be used to endorse or promote products derived
- * from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
- * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
- * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-/* Test prototypes */
-int test_port_ring_reader(void);
-int test_port_ring_writer(void);
-
-/* Extern variables */
-typedef int (*port_test)(void);
-
-extern port_test port_tests[];
-extern unsigned n_port_tests;
diff --git a/app/test/test_table_tables.c b/app/test/test_table_tables.c
deleted file mode 100644
index d835eb9f..00000000
--- a/app/test/test_table_tables.c
+++ /dev/null
@@ -1,1109 +0,0 @@
-/*-
- * BSD LICENSE
- *
- * Copyright(c) 2010-2016 Intel Corporation. All rights reserved.
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * * Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * * Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in
- * the documentation and/or other materials provided with the
- * distribution.
- * * Neither the name of Intel Corporation nor the names of its
- * contributors may be used to endorse or promote products derived
- * from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
- * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
- * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#include <string.h>
-#include <rte_byteorder.h>
-#include <rte_table_lpm_ipv6.h>
-#include <rte_lru.h>
-#include <rte_cycles.h>
-#include "test_table_tables.h"
-#include "test_table.h"
-
-table_test table_tests[] = {
- test_table_stub,
- test_table_array,
- test_table_lpm,
- test_table_lpm_ipv6,
- test_table_hash_lru,
- test_table_hash_ext,
- test_table_hash_cuckoo,
-};
-
-#define PREPARE_PACKET(mbuf, value) do { \
- uint32_t *k32, *signature; \
- uint8_t *key; \
- mbuf = rte_pktmbuf_alloc(pool); \
- signature = RTE_MBUF_METADATA_UINT32_PTR(mbuf, \
- APP_METADATA_OFFSET(0)); \
- key = RTE_MBUF_METADATA_UINT8_PTR(mbuf, \
- APP_METADATA_OFFSET(32)); \
- memset(key, 0, 32); \
- k32 = (uint32_t *) key; \
- k32[0] = (value); \
- *signature = pipeline_test_hash(key, 0, 0); \
-} while (0)
-
-unsigned n_table_tests = RTE_DIM(table_tests);
-
-/* Function prototypes */
-static int
-test_table_hash_lru_generic(struct rte_table_ops *ops);
-static int
-test_table_hash_ext_generic(struct rte_table_ops *ops);
-
-struct rte_bucket_4_8 {
- /* Cache line 0 */
- uint64_t signature;
- uint64_t lru_list;
- struct rte_bucket_4_8 *next;
- uint64_t next_valid;
- uint64_t key[4];
- /* Cache line 1 */
- uint8_t data[0];
-};
-
-#if RTE_TABLE_HASH_LRU_STRATEGY == 3
-uint64_t shuffles = 0xfffffffdfffbfff9ULL;
-#else
-uint64_t shuffles = 0x0003000200010000ULL;
-#endif
-
-static int test_lru_update(void)
-{
- struct rte_bucket_4_8 b;
- struct rte_bucket_4_8 *bucket;
- uint32_t i;
- uint64_t pos;
- uint64_t iterations;
- uint64_t j;
- int poss;
-
- printf("---------------------------\n");
- printf("Testing lru_update macro...\n");
- printf("---------------------------\n");
- bucket = &b;
- iterations = 10;
-#if RTE_TABLE_HASH_LRU_STRATEGY == 3
- bucket->lru_list = 0xFFFFFFFFFFFFFFFFULL;
-#else
- bucket->lru_list = 0x0000000100020003ULL;
-#endif
- poss = 0;
- for (j = 0; j < iterations; j++)
- for (i = 0; i < 9; i++) {
- uint32_t idx = i >> 1;
- lru_update(bucket, idx);
- pos = lru_pos(bucket);
- poss += pos;
- printf("%s: %d lru_list=%016"PRIx64", upd=%d, "
- "pos=%"PRIx64"\n",
- __func__, i, bucket->lru_list, i>>1, pos);
- }
-
- if (bucket->lru_list != shuffles) {
- printf("%s: ERROR: %d lru_list=%016"PRIx64", expected %016"
- PRIx64"\n",
- __func__, i, bucket->lru_list, shuffles);
- return -1;
- }
- printf("%s: output checksum of results =%d\n",
- __func__, poss);
-#if 0
- if (poss != 126) {
- printf("%s: ERROR output checksum of results =%d expected %d\n",
- __func__, poss, 126);
- return -1;
- }
-#endif
-
- fflush(stdout);
-
- uint64_t sc_start = rte_rdtsc();
- iterations = 100000000;
- poss = 0;
- for (j = 0; j < iterations; j++) {
- for (i = 0; i < 4; i++) {
- lru_update(bucket, i);
- pos |= bucket->lru_list;
- }
- }
- uint64_t sc_end = rte_rdtsc();
-
- printf("%s: output checksum of results =%llu\n",
- __func__, (long long unsigned int)pos);
- printf("%s: start=%016"PRIx64", end=%016"PRIx64"\n",
- __func__, sc_start, sc_end);
- printf("\nlru_update: %lu cycles per loop iteration.\n\n",
- (long unsigned int)((sc_end-sc_start)/(iterations*4)));
-
- return 0;
-}
-
-/* Table tests */
-int
-test_table_stub(void)
-{
- int i;
- uint64_t expected_mask = 0, result_mask;
- struct rte_mbuf *mbufs[RTE_PORT_IN_BURST_SIZE_MAX];
- void *table;
- char *entries[RTE_PORT_IN_BURST_SIZE_MAX];
-
- /* Create */
- table = rte_table_stub_ops.f_create(NULL, 0, 1);
- if (table == NULL)
- return -1;
-
- /* Traffic flow */
- for (i = 0; i < RTE_PORT_IN_BURST_SIZE_MAX; i++)
- if (i % 2 == 0)
- PREPARE_PACKET(mbufs[i], 0xadadadad);
- else
- PREPARE_PACKET(mbufs[i], 0xadadadab);
-
- expected_mask = 0;
- rte_table_stub_ops.f_lookup(table, mbufs, -1,
- &result_mask, (void **)entries);
- if (result_mask != expected_mask)
- return -2;
-
- /* Free resources */
- for (i = 0; i < RTE_PORT_IN_BURST_SIZE_MAX; i++)
- rte_pktmbuf_free(mbufs[i]);
-
- return 0;
-}
-
-int
-test_table_array(void)
-{
- int status, i;
- uint64_t result_mask;
- struct rte_mbuf *mbufs[RTE_PORT_IN_BURST_SIZE_MAX];
- void *table;
- char *entries[RTE_PORT_IN_BURST_SIZE_MAX];
- char entry1, entry2;
- void *entry_ptr;
- int key_found;
-
- /* Initialize params and create tables */
- struct rte_table_array_params array_params = {
- .n_entries = 7,
- .offset = APP_METADATA_OFFSET(1)
- };
-
- table = rte_table_array_ops.f_create(NULL, 0, 1);
- if (table != NULL)
- return -1;
-
- array_params.n_entries = 0;
-
- table = rte_table_array_ops.f_create(&array_params, 0, 1);
- if (table != NULL)
- return -2;
-
- array_params.n_entries = 7;
-
- table = rte_table_array_ops.f_create(&array_params, 0, 1);
- if (table != NULL)
- return -3;
-
- array_params.n_entries = 1 << 24;
- array_params.offset = APP_METADATA_OFFSET(1);
-
- table = rte_table_array_ops.f_create(&array_params, 0, 1);
- if (table == NULL)
- return -4;
-
- array_params.offset = APP_METADATA_OFFSET(32);
-
- table = rte_table_array_ops.f_create(&array_params, 0, 1);
- if (table == NULL)
- return -5;
-
- /* Free */
- status = rte_table_array_ops.f_free(table);
- if (status < 0)
- return -6;
-
- status = rte_table_array_ops.f_free(NULL);
- if (status == 0)
- return -7;
-
- /* Add */
- struct rte_table_array_key array_key_1 = {
- .pos = 10,
- };
- struct rte_table_array_key array_key_2 = {
- .pos = 20,
- };
- entry1 = 'A';
- entry2 = 'B';
-
- table = rte_table_array_ops.f_create(&array_params, 0, 1);
- if (table == NULL)
- return -8;
-
- status = rte_table_array_ops.f_add(NULL, (void *) &array_key_1, &entry1,
- &key_found, &entry_ptr);
- if (status == 0)
- return -9;
-
- status = rte_table_array_ops.f_add(table, (void *) &array_key_1, NULL,
- &key_found, &entry_ptr);
- if (status == 0)
- return -10;
-
- status = rte_table_array_ops.f_add(table, (void *) &array_key_1,
- &entry1, &key_found, &entry_ptr);
- if (status != 0)
- return -11;
-
- /* Traffic flow */
- status = rte_table_array_ops.f_add(table, (void *) &array_key_2,
- &entry2, &key_found, &entry_ptr);
- if (status != 0)
- return -12;
-
- for (i = 0; i < RTE_PORT_IN_BURST_SIZE_MAX; i++)
- if (i % 2 == 0)
- PREPARE_PACKET(mbufs[i], 10);
- else
- PREPARE_PACKET(mbufs[i], 20);
-
- rte_table_array_ops.f_lookup(table, mbufs, -1,
- &result_mask, (void **)entries);
-
- for (i = 0; i < RTE_PORT_IN_BURST_SIZE_MAX; i++)
- if (i % 2 == 0 && *entries[i] != 'A')
- return -13;
- else
- if (i % 2 == 1 && *entries[i] != 'B')
- return -13;
-
- /* Free resources */
- for (i = 0; i < RTE_PORT_IN_BURST_SIZE_MAX; i++)
- rte_pktmbuf_free(mbufs[i]);
-
- status = rte_table_array_ops.f_free(table);
-
- return 0;
-}
-
-int
-test_table_lpm(void)
-{
- int status, i;
- uint64_t expected_mask = 0, result_mask;
- struct rte_mbuf *mbufs[RTE_PORT_IN_BURST_SIZE_MAX];
- void *table;
- char *entries[RTE_PORT_IN_BURST_SIZE_MAX];
- char entry;
- void *entry_ptr;
- int key_found;
- uint32_t entry_size = 1;
-
- /* Initialize params and create tables */
- struct rte_table_lpm_params lpm_params = {
- .name = "LPM",
- .n_rules = 1 << 24,
- .number_tbl8s = 1 << 8,
- .flags = 0,
- .entry_unique_size = entry_size,
- .offset = APP_METADATA_OFFSET(1)
- };
-
- table = rte_table_lpm_ops.f_create(NULL, 0, entry_size);
- if (table != NULL)
- return -1;
-
- lpm_params.name = NULL;
-
- table = rte_table_lpm_ops.f_create(&lpm_params, 0, entry_size);
- if (table != NULL)
- return -2;
-
- lpm_params.name = "LPM";
- lpm_params.n_rules = 0;
-
- table = rte_table_lpm_ops.f_create(&lpm_params, 0, entry_size);
- if (table != NULL)
- return -3;
-
- lpm_params.n_rules = 1 << 24;
- lpm_params.offset = APP_METADATA_OFFSET(32);
- lpm_params.entry_unique_size = 0;
-
- table = rte_table_lpm_ops.f_create(&lpm_params, 0, entry_size);
- if (table != NULL)
- return -4;
-
- lpm_params.entry_unique_size = entry_size + 1;
-
- table = rte_table_lpm_ops.f_create(&lpm_params, 0, entry_size);
- if (table != NULL)
- return -5;
-
- lpm_params.entry_unique_size = entry_size;
-
- table = rte_table_lpm_ops.f_create(&lpm_params, 0, entry_size);
- if (table == NULL)
- return -6;
-
- /* Free */
- status = rte_table_lpm_ops.f_free(table);
- if (status < 0)
- return -7;
-
- status = rte_table_lpm_ops.f_free(NULL);
- if (status == 0)
- return -8;
-
- /* Add */
- struct rte_table_lpm_key lpm_key;
- lpm_key.ip = 0xadadadad;
-
- table = rte_table_lpm_ops.f_create(&lpm_params, 0, 1);
- if (table == NULL)
- return -9;
-
- status = rte_table_lpm_ops.f_add(NULL, &lpm_key, &entry, &key_found,
- &entry_ptr);
- if (status == 0)
- return -10;
-
- status = rte_table_lpm_ops.f_add(table, NULL, &entry, &key_found,
- &entry_ptr);
- if (status == 0)
- return -11;
-
- status = rte_table_lpm_ops.f_add(table, &lpm_key, NULL, &key_found,
- &entry_ptr);
- if (status == 0)
- return -12;
-
- lpm_key.depth = 0;
- status = rte_table_lpm_ops.f_add(table, &lpm_key, &entry, &key_found,
- &entry_ptr);
- if (status == 0)
- return -13;
-
- lpm_key.depth = 33;
- status = rte_table_lpm_ops.f_add(table, &lpm_key, &entry, &key_found,
- &entry_ptr);
- if (status == 0)
- return -14;
-
- lpm_key.depth = 16;
- status = rte_table_lpm_ops.f_add(table, &lpm_key, &entry, &key_found,
- &entry_ptr);
- if (status != 0)
- return -15;
-
- /* Delete */
- status = rte_table_lpm_ops.f_delete(NULL, &lpm_key, &key_found, NULL);
- if (status == 0)
- return -16;
-
- status = rte_table_lpm_ops.f_delete(table, NULL, &key_found, NULL);
- if (status == 0)
- return -17;
-
- lpm_key.depth = 0;
- status = rte_table_lpm_ops.f_delete(table, &lpm_key, &key_found, NULL);
- if (status == 0)
- return -18;
-
- lpm_key.depth = 33;
- status = rte_table_lpm_ops.f_delete(table, &lpm_key, &key_found, NULL);
- if (status == 0)
- return -19;
-
- lpm_key.depth = 16;
- status = rte_table_lpm_ops.f_delete(table, &lpm_key, &key_found, NULL);
- if (status != 0)
- return -20;
-
- status = rte_table_lpm_ops.f_delete(table, &lpm_key, &key_found, NULL);
- if (status != 0)
- return -21;
-
- /* Traffic flow */
- entry = 'A';
- status = rte_table_lpm_ops.f_add(table, &lpm_key, &entry, &key_found,
- &entry_ptr);
- if (status < 0)
- return -22;
-
- for (i = 0; i < RTE_PORT_IN_BURST_SIZE_MAX; i++)
- if (i % 2 == 0) {
- expected_mask |= (uint64_t)1 << i;
- PREPARE_PACKET(mbufs[i], 0xadadadad);
- } else
- PREPARE_PACKET(mbufs[i], 0xadadadab);
-
- rte_table_lpm_ops.f_lookup(table, mbufs, -1,
- &result_mask, (void **)entries);
- if (result_mask != expected_mask)
- return -23;
-
- /* Free resources */
- for (i = 0; i < RTE_PORT_IN_BURST_SIZE_MAX; i++)
- rte_pktmbuf_free(mbufs[i]);
-
- status = rte_table_lpm_ops.f_free(table);
-
- return 0;
-}
-
-int
-test_table_lpm_ipv6(void)
-{
- int status, i;
- uint64_t expected_mask = 0, result_mask;
- struct rte_mbuf *mbufs[RTE_PORT_IN_BURST_SIZE_MAX];
- void *table;
- char *entries[RTE_PORT_IN_BURST_SIZE_MAX];
- char entry;
- void *entry_ptr;
- int key_found;
- uint32_t entry_size = 1;
-
- /* Initialize params and create tables */
- struct rte_table_lpm_ipv6_params lpm_params = {
- .name = "LPM",
- .n_rules = 1 << 24,
- .number_tbl8s = 1 << 21,
- .entry_unique_size = entry_size,
- .offset = APP_METADATA_OFFSET(32)
- };
-
- table = rte_table_lpm_ipv6_ops.f_create(NULL, 0, entry_size);
- if (table != NULL)
- return -1;
-
- lpm_params.name = NULL;
-
- table = rte_table_lpm_ipv6_ops.f_create(&lpm_params, 0, entry_size);
- if (table != NULL)
- return -2;
-
- lpm_params.name = "LPM";
- lpm_params.n_rules = 0;
-
- table = rte_table_lpm_ipv6_ops.f_create(&lpm_params, 0, entry_size);
- if (table != NULL)
- return -3;
-
- lpm_params.n_rules = 1 << 24;
- lpm_params.number_tbl8s = 0;
- table = rte_table_lpm_ipv6_ops.f_create(&lpm_params, 0, entry_size);
- if (table != NULL)
- return -4;
-
- lpm_params.number_tbl8s = 1 << 21;
- lpm_params.entry_unique_size = 0;
- table = rte_table_lpm_ipv6_ops.f_create(&lpm_params, 0, entry_size);
- if (table != NULL)
- return -5;
-
- lpm_params.entry_unique_size = entry_size + 1;
- table = rte_table_lpm_ipv6_ops.f_create(&lpm_params, 0, entry_size);
- if (table != NULL)
- return -6;
-
- lpm_params.entry_unique_size = entry_size;
- lpm_params.offset = APP_METADATA_OFFSET(32);
-
- table = rte_table_lpm_ipv6_ops.f_create(&lpm_params, 0, entry_size);
- if (table == NULL)
- return -7;
-
- /* Free */
- status = rte_table_lpm_ipv6_ops.f_free(table);
- if (status < 0)
- return -8;
-
- status = rte_table_lpm_ipv6_ops.f_free(NULL);
- if (status == 0)
- return -9;
-
- /* Add */
- struct rte_table_lpm_ipv6_key lpm_key;
-
- lpm_key.ip[0] = 0xad;
- lpm_key.ip[1] = 0xad;
- lpm_key.ip[2] = 0xad;
- lpm_key.ip[3] = 0xad;
-
- table = rte_table_lpm_ipv6_ops.f_create(&lpm_params, 0, entry_size);
- if (table == NULL)
- return -10;
-
- status = rte_table_lpm_ipv6_ops.f_add(NULL, &lpm_key, &entry,
- &key_found, &entry_ptr);
- if (status == 0)
- return -11;
-
- status = rte_table_lpm_ipv6_ops.f_add(table, NULL, &entry, &key_found,
- &entry_ptr);
- if (status == 0)
- return -12;
-
- status = rte_table_lpm_ipv6_ops.f_add(table, &lpm_key, NULL, &key_found,
- &entry_ptr);
- if (status == 0)
- return -13;
-
- lpm_key.depth = 0;
- status = rte_table_lpm_ipv6_ops.f_add(table, &lpm_key, &entry,
- &key_found, &entry_ptr);
- if (status == 0)
- return -14;
-
- lpm_key.depth = 129;
- status = rte_table_lpm_ipv6_ops.f_add(table, &lpm_key, &entry,
- &key_found, &entry_ptr);
- if (status == 0)
- return -15;
-
- lpm_key.depth = 16;
- status = rte_table_lpm_ipv6_ops.f_add(table, &lpm_key, &entry,
- &key_found, &entry_ptr);
- if (status != 0)
- return -16;
-
- /* Delete */
- status = rte_table_lpm_ipv6_ops.f_delete(NULL, &lpm_key, &key_found,
- NULL);
- if (status == 0)
- return -17;
-
- status = rte_table_lpm_ipv6_ops.f_delete(table, NULL, &key_found, NULL);
- if (status == 0)
- return -18;
-
- lpm_key.depth = 0;
- status = rte_table_lpm_ipv6_ops.f_delete(table, &lpm_key, &key_found,
- NULL);
- if (status == 0)
- return -19;
-
- lpm_key.depth = 129;
- status = rte_table_lpm_ipv6_ops.f_delete(table, &lpm_key, &key_found,
- NULL);
- if (status == 0)
- return -20;
-
- lpm_key.depth = 16;
- status = rte_table_lpm_ipv6_ops.f_delete(table, &lpm_key, &key_found,
- NULL);
- if (status != 0)
- return -21;
-
- status = rte_table_lpm_ipv6_ops.f_delete(table, &lpm_key, &key_found,
- NULL);
- if (status != 0)
- return -22;
-
- /* Traffic flow */
- entry = 'A';
- status = rte_table_lpm_ipv6_ops.f_add(table, &lpm_key, &entry,
- &key_found, &entry_ptr);
- if (status < 0)
- return -23;
-
- for (i = 0; i < RTE_PORT_IN_BURST_SIZE_MAX; i++)
- if (i % 2 == 0) {
- expected_mask |= (uint64_t)1 << i;
- PREPARE_PACKET(mbufs[i], 0xadadadad);
- } else
- PREPARE_PACKET(mbufs[i], 0xadadadab);
-
- rte_table_lpm_ipv6_ops.f_lookup(table, mbufs, -1,
- &result_mask, (void **)entries);
- if (result_mask != expected_mask)
- return -24;
-
- /* Free resources */
- for (i = 0; i < RTE_PORT_IN_BURST_SIZE_MAX; i++)
- rte_pktmbuf_free(mbufs[i]);
-
- status = rte_table_lpm_ipv6_ops.f_free(table);
-
- return 0;
-}
-
-static int
-test_table_hash_lru_generic(struct rte_table_ops *ops)
-{
- int status, i;
- uint64_t expected_mask = 0, result_mask;
- struct rte_mbuf *mbufs[RTE_PORT_IN_BURST_SIZE_MAX];
- void *table;
- char *entries[RTE_PORT_IN_BURST_SIZE_MAX];
- char entry;
- void *entry_ptr;
- int key_found;
-
- /* Initialize params and create tables */
- struct rte_table_hash_key8_lru_params hash_params = {
- .n_entries = 1 << 10,
- .f_hash = pipeline_test_hash,
- .seed = 0,
- .signature_offset = APP_METADATA_OFFSET(1),
- .key_offset = APP_METADATA_OFFSET(32),
- .key_mask = NULL,
- };
-
- hash_params.n_entries = 0;
-
- table = ops->f_create(&hash_params, 0, 1);
- if (table != NULL)
- return -1;
-
- hash_params.n_entries = 1 << 10;
- hash_params.signature_offset = APP_METADATA_OFFSET(1);
-
- table = ops->f_create(&hash_params, 0, 1);
- if (table == NULL)
- return -2;
-
- hash_params.signature_offset = APP_METADATA_OFFSET(0);
- hash_params.key_offset = APP_METADATA_OFFSET(1);
-
- table = ops->f_create(&hash_params, 0, 1);
- if (table == NULL)
- return -3;
-
- hash_params.key_offset = APP_METADATA_OFFSET(32);
- hash_params.f_hash = NULL;
-
- table = ops->f_create(&hash_params, 0, 1);
- if (table != NULL)
- return -4;
-
- hash_params.f_hash = pipeline_test_hash;
-
- table = ops->f_create(&hash_params, 0, 1);
- if (table == NULL)
- return -5;
-
- /* Free */
- status = ops->f_free(table);
- if (status < 0)
- return -6;
-
- status = ops->f_free(NULL);
- if (status == 0)
- return -7;
-
- /* Add */
- uint8_t key[32];
- uint32_t *k32 = (uint32_t *) &key;
-
- memset(key, 0, 32);
- k32[0] = rte_be_to_cpu_32(0xadadadad);
-
- table = ops->f_create(&hash_params, 0, 1);
- if (table == NULL)
- return -8;
-
- entry = 'A';
- status = ops->f_add(table, &key, &entry, &key_found, &entry_ptr);
- if (status != 0)
- return -9;
-
- /* Delete */
- status = ops->f_delete(table, &key, &key_found, NULL);
- if (status != 0)
- return -10;
-
- status = ops->f_delete(table, &key, &key_found, NULL);
- if (status != 0)
- return -11;
-
- /* Traffic flow */
- entry = 'A';
- status = ops->f_add(table, &key, &entry, &key_found, &entry_ptr);
- if (status < 0)
- return -12;
-
- for (i = 0; i < RTE_PORT_IN_BURST_SIZE_MAX; i++)
- if (i % 2 == 0) {
- expected_mask |= (uint64_t)1 << i;
- PREPARE_PACKET(mbufs[i], 0xadadadad);
- } else
- PREPARE_PACKET(mbufs[i], 0xadadadab);
-
- ops->f_lookup(table, mbufs, -1, &result_mask, (void **)entries);
- if (result_mask != expected_mask)
- return -13;
-
- /* Free resources */
- for (i = 0; i < RTE_PORT_IN_BURST_SIZE_MAX; i++)
- rte_pktmbuf_free(mbufs[i]);
-
- status = ops->f_free(table);
-
- return 0;
-}
-
-static int
-test_table_hash_ext_generic(struct rte_table_ops *ops)
-{
- int status, i;
- uint64_t expected_mask = 0, result_mask;
- struct rte_mbuf *mbufs[RTE_PORT_IN_BURST_SIZE_MAX];
- void *table;
- char *entries[RTE_PORT_IN_BURST_SIZE_MAX];
- char entry;
- int key_found;
- void *entry_ptr;
-
- /* Initialize params and create tables */
- struct rte_table_hash_key8_ext_params hash_params = {
- .n_entries = 1 << 10,
- .n_entries_ext = 1 << 4,
- .f_hash = pipeline_test_hash,
- .seed = 0,
- .signature_offset = APP_METADATA_OFFSET(1),
- .key_offset = APP_METADATA_OFFSET(32),
- .key_mask = NULL,
- };
-
- hash_params.n_entries = 0;
-
- table = ops->f_create(&hash_params, 0, 1);
- if (table != NULL)
- return -1;
-
- hash_params.n_entries = 1 << 10;
- hash_params.n_entries_ext = 0;
- table = ops->f_create(&hash_params, 0, 1);
- if (table != NULL)
- return -2;
-
- hash_params.n_entries_ext = 1 << 4;
- hash_params.signature_offset = APP_METADATA_OFFSET(1);
- table = ops->f_create(&hash_params, 0, 1);
- if (table == NULL)
- return -2;
-
- hash_params.signature_offset = APP_METADATA_OFFSET(0);
- hash_params.key_offset = APP_METADATA_OFFSET(1);
-
- table = ops->f_create(&hash_params, 0, 1);
- if (table == NULL)
- return -3;
-
- hash_params.key_offset = APP_METADATA_OFFSET(32);
- hash_params.f_hash = NULL;
-
- table = ops->f_create(&hash_params, 0, 1);
- if (table != NULL)
- return -4;
-
- hash_params.f_hash = pipeline_test_hash;
-
- table = ops->f_create(&hash_params, 0, 1);
- if (table == NULL)
- return -5;
-
- /* Free */
- status = ops->f_free(table);
- if (status < 0)
- return -6;
-
- status = ops->f_free(NULL);
- if (status == 0)
- return -7;
-
- /* Add */
- uint8_t key[32];
- uint32_t *k32 = (uint32_t *) &key;
-
- memset(key, 0, 32);
- k32[0] = rte_be_to_cpu_32(0xadadadad);
-
- table = ops->f_create(&hash_params, 0, 1);
- if (table == NULL)
- return -8;
-
- entry = 'A';
- status = ops->f_add(table, &key, &entry, &key_found, &entry_ptr);
- if (status != 0)
- return -9;
-
- /* Delete */
- status = ops->f_delete(table, &key, &key_found, NULL);
- if (status != 0)
- return -10;
-
- status = ops->f_delete(table, &key, &key_found, NULL);
- if (status != 0)
- return -11;
-
- /* Traffic flow */
- entry = 'A';
- status = ops->f_add(table, &key, &entry, &key_found, &entry_ptr);
- if (status < 0)
- return -12;
-
- for (i = 0; i < RTE_PORT_IN_BURST_SIZE_MAX; i++)
- if (i % 2 == 0) {
- expected_mask |= (uint64_t)1 << i;
- PREPARE_PACKET(mbufs[i], 0xadadadad);
- } else
- PREPARE_PACKET(mbufs[i], 0xadadadab);
-
- ops->f_lookup(table, mbufs, -1, &result_mask, (void **)entries);
- if (result_mask != expected_mask)
- return -13;
-
- /* Free resources */
- for (i = 0; i < RTE_PORT_IN_BURST_SIZE_MAX; i++)
- rte_pktmbuf_free(mbufs[i]);
-
- status = ops->f_free(table);
-
- return 0;
-}
-
-int
-test_table_hash_lru(void)
-{
- int status;
-
- status = test_table_hash_lru_generic(&rte_table_hash_key8_lru_ops);
- if (status < 0)
- return status;
-
- status = test_table_hash_lru_generic(
- &rte_table_hash_key8_lru_dosig_ops);
- if (status < 0)
- return status;
-
- status = test_table_hash_lru_generic(&rte_table_hash_key16_lru_ops);
- if (status < 0)
- return status;
-
- status = test_table_hash_lru_generic(&rte_table_hash_key32_lru_ops);
- if (status < 0)
- return status;
-
- status = test_lru_update();
- if (status < 0)
- return status;
-
- return 0;
-}
-
-int
-test_table_hash_ext(void)
-{
- int status;
-
- status = test_table_hash_ext_generic(&rte_table_hash_key8_ext_ops);
- if (status < 0)
- return status;
-
- status = test_table_hash_ext_generic(
- &rte_table_hash_key8_ext_dosig_ops);
- if (status < 0)
- return status;
-
- status = test_table_hash_ext_generic(&rte_table_hash_key16_ext_ops);
- if (status < 0)
- return status;
-
- status = test_table_hash_ext_generic(&rte_table_hash_key32_ext_ops);
- if (status < 0)
- return status;
-
- return 0;
-}
-
-
-int
-test_table_hash_cuckoo(void)
-{
- int status, i;
- uint64_t expected_mask = 0, result_mask;
- struct rte_mbuf *mbufs[RTE_PORT_IN_BURST_SIZE_MAX];
- void *table;
- char *entries[RTE_PORT_IN_BURST_SIZE_MAX];
- char entry;
- void *entry_ptr;
- int key_found;
- uint32_t entry_size = 1;
-
- /* Initialize params and create tables */
- struct rte_table_hash_cuckoo_params cuckoo_params = {
- .key_size = 32,
- .n_keys = 1 << 24,
- .f_hash = pipeline_test_hash,
- .seed = 0,
- .signature_offset = APP_METADATA_OFFSET(0),
- .key_offset = APP_METADATA_OFFSET(32),
- .name = "CUCKOO",
- };
-
- table = rte_table_hash_cuckoo_dosig_ops.f_create(NULL, 0, entry_size);
- if (table != NULL)
- return -1;
-
- cuckoo_params.key_size = 0;
-
- table = rte_table_hash_cuckoo_dosig_ops.f_create(&cuckoo_params,
- 0, entry_size);
- if (table != NULL)
- return -2;
-
- cuckoo_params.key_size = 32;
- cuckoo_params.n_keys = 0;
-
- table = rte_table_hash_cuckoo_dosig_ops.f_create(&cuckoo_params,
- 0, entry_size);
- if (table != NULL)
- return -3;
-
- cuckoo_params.n_keys = 1 << 24;
- cuckoo_params.f_hash = NULL;
-
- table = rte_table_hash_cuckoo_dosig_ops.f_create(&cuckoo_params,
- 0, entry_size);
- if (table != NULL)
- return -4;
-
- cuckoo_params.f_hash = pipeline_test_hash;
- cuckoo_params.name = NULL;
-
- table = rte_table_hash_cuckoo_dosig_ops.f_create(&cuckoo_params,
- 0, entry_size);
- if (table != NULL)
- return -5;
-
- cuckoo_params.name = "CUCKOO";
-
- table = rte_table_hash_cuckoo_dosig_ops.f_create(&cuckoo_params,
- 0, entry_size);
- if (table == NULL)
- return -6;
-
- /* Free */
- status = rte_table_hash_cuckoo_dosig_ops.f_free(table);
- if (status < 0)
- return -7;
-
- status = rte_table_hash_cuckoo_dosig_ops.f_free(NULL);
- if (status == 0)
- return -8;
-
- /* Add */
- uint8_t key_cuckoo[32];
- uint32_t *kcuckoo = (uint32_t *) &key_cuckoo;
-
- memset(key_cuckoo, 0, 32);
- kcuckoo[0] = rte_be_to_cpu_32(0xadadadad);
-
- table = rte_table_hash_cuckoo_dosig_ops.f_create(&cuckoo_params, 0, 1);
- if (table == NULL)
- return -9;
-
- entry = 'A';
- status = rte_table_hash_cuckoo_dosig_ops.f_add(NULL, &key_cuckoo,
- &entry, &key_found, &entry_ptr);
- if (status == 0)
- return -10;
-
- status = rte_table_hash_cuckoo_dosig_ops.f_add(table, NULL, &entry,
- &key_found, &entry_ptr);
- if (status == 0)
- return -11;
-
- status = rte_table_hash_cuckoo_dosig_ops.f_add(table, &key_cuckoo,
- NULL, &key_found, &entry_ptr);
- if (status == 0)
- return -12;
-
- status = rte_table_hash_cuckoo_dosig_ops.f_add(table, &key_cuckoo,
- &entry, &key_found, &entry_ptr);
- if (status != 0)
- return -13;
-
- status = rte_table_hash_cuckoo_dosig_ops.f_add(table, &key_cuckoo,
- &entry, &key_found, &entry_ptr);
- if (status != 0)
- return -14;
-
- /* Delete */
- status = rte_table_hash_cuckoo_dosig_ops.f_delete(NULL, &key_cuckoo,
- &key_found, NULL);
- if (status == 0)
- return -15;
-
- status = rte_table_hash_cuckoo_dosig_ops.f_delete(table, NULL,
- &key_found, NULL);
- if (status == 0)
- return -16;
-
- status = rte_table_hash_cuckoo_dosig_ops.f_delete(table, &key_cuckoo,
- &key_found, NULL);
- if (status != 0)
- return -17;
-
- status = rte_table_hash_cuckoo_dosig_ops.f_delete(table, &key_cuckoo,
- &key_found, NULL);
- if (status != -ENOENT)
- return -18;
-
- /* Traffic flow */
- entry = 'A';
- status = rte_table_hash_cuckoo_dosig_ops.f_add(table, &key_cuckoo,
- &entry, &key_found,
- &entry_ptr);
- if (status < 0)
- return -19;
-
- for (i = 0; i < RTE_PORT_IN_BURST_SIZE_MAX; i++)
- if (i % 2 == 0) {
- expected_mask |= (uint64_t)1 << i;
- PREPARE_PACKET(mbufs[i], 0xadadadad);
- } else
- PREPARE_PACKET(mbufs[i], 0xadadadab);
-
- rte_table_hash_cuckoo_dosig_ops.f_lookup(table, mbufs, -1,
- &result_mask, (void **)entries);
- if (result_mask != expected_mask)
- return -20;
-
- /* Free resources */
- for (i = 0; i < RTE_PORT_IN_BURST_SIZE_MAX; i++)
- rte_pktmbuf_free(mbufs[i]);
-
- status = rte_table_hash_cuckoo_dosig_ops.f_free(table);
-
- return 0;
-}
-
diff --git a/app/test/test_table_tables.h b/app/test/test_table_tables.h
deleted file mode 100644
index 35311362..00000000
--- a/app/test/test_table_tables.h
+++ /dev/null
@@ -1,51 +0,0 @@
-/*-
- * BSD LICENSE
- *
- * Copyright(c) 2010-2016 Intel Corporation. All rights reserved.
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * * Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * * Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in
- * the documentation and/or other materials provided with the
- * distribution.
- * * Neither the name of Intel Corporation nor the names of its
- * contributors may be used to endorse or promote products derived
- * from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
- * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
- * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-/* Test prototypes */
-int test_table_hash_cuckoo(void);
-int test_table_lpm(void);
-int test_table_lpm_ipv6(void);
-int test_table_array(void);
-#ifdef RTE_LIBRTE_ACL
-int test_table_acl(void);
-#endif
-int test_table_hash_unoptimized(void);
-int test_table_hash_lru(void);
-int test_table_hash_ext(void);
-int test_table_stub(void);
-
-/* Extern variables */
-typedef int (*table_test)(void);
-
-extern table_test table_tests[];
-extern unsigned n_table_tests;
diff --git a/app/test/test_tailq.c b/app/test/test_tailq.c
deleted file mode 100644
index 33a3e8a9..00000000
--- a/app/test/test_tailq.c
+++ /dev/null
@@ -1,157 +0,0 @@
-/*-
- * BSD LICENSE
- *
- * Copyright(c) 2010-2014 Intel Corporation. All rights reserved.
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * * Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * * Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in
- * the documentation and/or other materials provided with the
- * distribution.
- * * Neither the name of Intel Corporation nor the names of its
- * contributors may be used to endorse or promote products derived
- * from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
- * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
- * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#include <stdio.h>
-#include <stdint.h>
-#include <stdarg.h>
-#include <string.h>
-#include <errno.h>
-#include <sys/queue.h>
-
-#include <rte_eal.h>
-#include <rte_eal_memconfig.h>
-#include <rte_string_fns.h>
-
-#include "test.h"
-
-#define do_return(...) do { \
- printf("Error at %s, line %d: ", __func__, __LINE__); \
- printf(__VA_ARGS__); \
- return 1; \
-} while (0)
-
-static struct rte_tailq_elem rte_dummy_tailq = {
- .name = "dummy",
-};
-EAL_REGISTER_TAILQ(rte_dummy_tailq)
-
-static struct rte_tailq_elem rte_dummy_dyn_tailq = {
- .name = "dummy_dyn",
-};
-static struct rte_tailq_elem rte_dummy_dyn2_tailq = {
- .name = "dummy_dyn",
-};
-
-static struct rte_tailq_entry d_elem;
-static struct rte_tailq_entry d_dyn_elem;
-
-static int
-test_tailq_early(void)
-{
- struct rte_tailq_entry_head *d_head;
-
- d_head = RTE_TAILQ_CAST(rte_dummy_tailq.head, rte_tailq_entry_head);
- if (d_head == NULL)
- do_return("Error %s has not been initialised\n",
- rte_dummy_tailq.name);
-
- /* check we can add an item to it */
- TAILQ_INSERT_TAIL(d_head, &d_elem, next);
-
- return 0;
-}
-
-static int
-test_tailq_create(void)
-{
- struct rte_tailq_entry_head *d_head;
-
- /* create a tailq and check its non-null (since we are post-eal init) */
- if ((rte_eal_tailq_register(&rte_dummy_dyn_tailq) < 0) ||
- (rte_dummy_dyn_tailq.head == NULL))
- do_return("Error allocating %s\n", rte_dummy_dyn_tailq.name);
-
- d_head = RTE_TAILQ_CAST(rte_dummy_dyn_tailq.head, rte_tailq_entry_head);
-
- /* check we can add an item to it */
- TAILQ_INSERT_TAIL(d_head, &d_dyn_elem, next);
-
- if (strcmp(rte_dummy_dyn2_tailq.name, rte_dummy_dyn_tailq.name))
- do_return("Error, something is wrong in the tailq test\n");
-
- /* try allocating again, and check for failure */
- if (!rte_eal_tailq_register(&rte_dummy_dyn2_tailq))
- do_return("Error, registering the same tailq %s did not fail\n",
- rte_dummy_dyn2_tailq.name);
-
- return 0;
-}
-
-static int
-test_tailq_lookup(void)
-{
- /* run successful test - check result is found */
- struct rte_tailq_entry_head *d_head;
- struct rte_tailq_entry *d_ptr;
-
- d_head = RTE_TAILQ_LOOKUP(rte_dummy_tailq.name, rte_tailq_entry_head);
- /* rte_dummy_tailq has been registered by EAL_REGISTER_TAILQ */
- if (d_head == NULL ||
- d_head != RTE_TAILQ_CAST(rte_dummy_tailq.head, rte_tailq_entry_head))
- do_return("Error with tailq lookup\n");
-
- TAILQ_FOREACH(d_ptr, d_head, next)
- if (d_ptr != &d_elem)
- do_return("Error with tailq returned from lookup - "
- "expected element not found\n");
-
- d_head = RTE_TAILQ_LOOKUP(rte_dummy_dyn_tailq.name, rte_tailq_entry_head);
- /* rte_dummy_dyn_tailq has been registered by test_tailq_create */
- if (d_head == NULL ||
- d_head != RTE_TAILQ_CAST(rte_dummy_dyn_tailq.head, rte_tailq_entry_head))
- do_return("Error with tailq lookup\n");
-
- TAILQ_FOREACH(d_ptr, d_head, next)
- if (d_ptr != &d_dyn_elem)
- do_return("Error with tailq returned from lookup - "
- "expected element not found\n");
-
- /* now try a bad/error lookup */
- d_head = RTE_TAILQ_LOOKUP("coucou", rte_tailq_entry_head);
- if (d_head != NULL)
- do_return("Error, lookup does not return NULL for bad tailq name\n");
-
- return 0;
-}
-
-static int
-test_tailq(void)
-{
- int ret = 0;
- ret |= test_tailq_early();
- ret |= test_tailq_create();
- ret |= test_tailq_lookup();
- return ret;
-}
-
-REGISTER_TEST_COMMAND(tailq_autotest, test_tailq);
diff --git a/app/test/test_thash.c b/app/test/test_thash.c
deleted file mode 100644
index 61754a94..00000000
--- a/app/test/test_thash.c
+++ /dev/null
@@ -1,172 +0,0 @@
-/*-
- * BSD LICENSE
- *
- * Copyright(c) 2015 Vladimir Medvedkin <medvedkinv@gmail.com>
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * * Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * * Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in
- * the documentation and/or other materials provided with the
- * distribution.
- * * Neither the name of Intel Corporation nor the names of its
- * contributors may be used to endorse or promote products derived
- * from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
- * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
- * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#include <rte_common.h>
-#include <rte_eal.h>
-#include <rte_ip.h>
-
-#include "test.h"
-
-#include <rte_thash.h>
-
-struct test_thash_v4 {
- uint32_t dst_ip;
- uint32_t src_ip;
- uint16_t dst_port;
- uint16_t src_port;
- uint32_t hash_l3;
- uint32_t hash_l3l4;
-};
-
-struct test_thash_v6 {
- uint8_t dst_ip[16];
- uint8_t src_ip[16];
- uint16_t dst_port;
- uint16_t src_port;
- uint32_t hash_l3;
- uint32_t hash_l3l4;
-};
-
-/*From 82599 Datasheet 7.1.2.8.3 RSS Verification Suite*/
-struct test_thash_v4 v4_tbl[] = {
-{IPv4(161, 142, 100, 80), IPv4(66, 9, 149, 187),
- 1766, 2794, 0x323e8fc2, 0x51ccc178},
-{IPv4(65, 69, 140, 83), IPv4(199, 92, 111, 2),
- 4739, 14230, 0xd718262a, 0xc626b0ea},
-{IPv4(12, 22, 207, 184), IPv4(24, 19, 198, 95),
- 38024, 12898, 0xd2d0a5de, 0x5c2b394a},
-{IPv4(209, 142, 163, 6), IPv4(38, 27, 205, 30),
- 2217, 48228, 0x82989176, 0xafc7327f},
-{IPv4(202, 188, 127, 2), IPv4(153, 39, 163, 191),
- 1303, 44251, 0x5d1809c5, 0x10e828a2},
-};
-
-struct test_thash_v6 v6_tbl[] = {
-/*3ffe:2501:200:3::1*/
-{{0x3f, 0xfe, 0x25, 0x01, 0x02, 0x00, 0x00, 0x03,
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01,},
-/*3ffe:2501:200:1fff::7*/
-{0x3f, 0xfe, 0x25, 0x01, 0x02, 0x00, 0x1f, 0xff,
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07,},
-1766, 2794, 0x2cc18cd5, 0x40207d3d},
-/*ff02::1*/
-{{0xff, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01,},
-/*3ffe:501:8::260:97ff:fe40:efab*/
-{0x3f, 0xfe, 0x05, 0x01, 0x00, 0x08, 0x00, 0x00,
-0x02, 0x60, 0x97, 0xff, 0xfe, 0x40, 0xef, 0xab,},
-4739, 14230, 0x0f0c461c, 0xdde51bbf},
-/*fe80::200:f8ff:fe21:67cf*/
-{{0xfe, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-0x02, 0x00, 0xf8, 0xff, 0xfe, 0x21, 0x67, 0xcf,},
-/*3ffe:1900:4545:3:200:f8ff:fe21:67cf*/
-{0x3f, 0xfe, 0x19, 0x00, 0x45, 0x45, 0x00, 0x03,
-0x02, 0x00, 0xf8, 0xff, 0xfe, 0x21, 0x67, 0xcf,},
-38024, 44251, 0x4b61e985, 0x02d1feef},
-};
-
-uint8_t default_rss_key[] = {
-0x6d, 0x5a, 0x56, 0xda, 0x25, 0x5b, 0x0e, 0xc2,
-0x41, 0x67, 0x25, 0x3d, 0x43, 0xa3, 0x8f, 0xb0,
-0xd0, 0xca, 0x2b, 0xcb, 0xae, 0x7b, 0x30, 0xb4,
-0x77, 0xcb, 0x2d, 0xa3, 0x80, 0x30, 0xf2, 0x0c,
-0x6a, 0x42, 0xb7, 0x3b, 0xbe, 0xac, 0x01, 0xfa,
-};
-
-static int
-test_thash(void)
-{
- uint32_t i, j;
- union rte_thash_tuple tuple;
- uint32_t rss_l3, rss_l3l4;
- uint8_t rss_key_be[RTE_DIM(default_rss_key)];
- struct ipv6_hdr ipv6_hdr;
-
- /* Convert RSS key*/
- rte_convert_rss_key((uint32_t *)&default_rss_key,
- (uint32_t *)rss_key_be, RTE_DIM(default_rss_key));
-
-
- for (i = 0; i < RTE_DIM(v4_tbl); i++) {
- tuple.v4.src_addr = v4_tbl[i].src_ip;
- tuple.v4.dst_addr = v4_tbl[i].dst_ip;
- tuple.v4.sport = v4_tbl[i].src_port;
- tuple.v4.dport = v4_tbl[i].dst_port;
- /*Calculate hash with original key*/
- rss_l3 = rte_softrss((uint32_t *)&tuple,
- RTE_THASH_V4_L3_LEN, default_rss_key);
- rss_l3l4 = rte_softrss((uint32_t *)&tuple,
- RTE_THASH_V4_L4_LEN, default_rss_key);
- if ((rss_l3 != v4_tbl[i].hash_l3) ||
- (rss_l3l4 != v4_tbl[i].hash_l3l4))
- return -1;
- /*Calculate hash with converted key*/
- rss_l3 = rte_softrss_be((uint32_t *)&tuple,
- RTE_THASH_V4_L3_LEN, rss_key_be);
- rss_l3l4 = rte_softrss_be((uint32_t *)&tuple,
- RTE_THASH_V4_L4_LEN, rss_key_be);
- if ((rss_l3 != v4_tbl[i].hash_l3) ||
- (rss_l3l4 != v4_tbl[i].hash_l3l4))
- return -1;
- }
- for (i = 0; i < RTE_DIM(v6_tbl); i++) {
- /*Fill ipv6 hdr*/
- for (j = 0; j < RTE_DIM(ipv6_hdr.src_addr); j++)
- ipv6_hdr.src_addr[j] = v6_tbl[i].src_ip[j];
- for (j = 0; j < RTE_DIM(ipv6_hdr.dst_addr); j++)
- ipv6_hdr.dst_addr[j] = v6_tbl[i].dst_ip[j];
- /*Load and convert ipv6 address into tuple*/
- rte_thash_load_v6_addrs(&ipv6_hdr, &tuple);
- tuple.v6.sport = v6_tbl[i].src_port;
- tuple.v6.dport = v6_tbl[i].dst_port;
- /*Calculate hash with original key*/
- rss_l3 = rte_softrss((uint32_t *)&tuple,
- RTE_THASH_V6_L3_LEN, default_rss_key);
- rss_l3l4 = rte_softrss((uint32_t *)&tuple,
- RTE_THASH_V6_L4_LEN, default_rss_key);
- if ((rss_l3 != v6_tbl[i].hash_l3) ||
- (rss_l3l4 != v6_tbl[i].hash_l3l4))
- return -1;
- /*Calculate hash with converted key*/
- rss_l3 = rte_softrss_be((uint32_t *)&tuple,
- RTE_THASH_V6_L3_LEN, rss_key_be);
- rss_l3l4 = rte_softrss_be((uint32_t *)&tuple,
- RTE_THASH_V6_L4_LEN, rss_key_be);
- if ((rss_l3 != v6_tbl[i].hash_l3) ||
- (rss_l3l4 != v6_tbl[i].hash_l3l4))
- return -1;
- }
- return 0;
-}
-
-REGISTER_TEST_COMMAND(thash_autotest, test_thash);
diff --git a/app/test/test_timer.c b/app/test/test_timer.c
deleted file mode 100644
index 2f6525a5..00000000
--- a/app/test/test_timer.c
+++ /dev/null
@@ -1,629 +0,0 @@
-/*-
- * BSD LICENSE
- *
- * Copyright(c) 2010-2014 Intel Corporation. All rights reserved.
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * * Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * * Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in
- * the documentation and/or other materials provided with the
- * distribution.
- * * Neither the name of Intel Corporation nor the names of its
- * contributors may be used to endorse or promote products derived
- * from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
- * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
- * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#include "test.h"
-
-/*
- * Timer
- * =====
- *
- * #. Stress test 1.
- *
- * The objective of the timer stress tests is to check that there are no
- * race conditions in list and status management. This test launches,
- * resets and stops the timer very often on many cores at the same
- * time.
- *
- * - Only one timer is used for this test.
- * - On each core, the rte_timer_manage() function is called from the main
- * loop every 3 microseconds.
- * - In the main loop, the timer may be reset (randomly, with a
- * probability of 0.5 %) 100 microseconds later on a random core, or
- * stopped (with a probability of 0.5 % also).
- * - In callback, the timer is can be reset (randomly, with a
- * probability of 0.5 %) 100 microseconds later on the same core or
- * on another core (same probability), or stopped (same
- * probability).
- *
- * # Stress test 2.
- *
- * The objective of this test is similar to the first in that it attempts
- * to find if there are any race conditions in the timer library. However,
- * it is less complex in terms of operations performed and duration, as it
- * is designed to have a predictable outcome that can be tested.
- *
- * - A set of timers is initialized for use by the test
- * - All cores then simultaneously are set to schedule all the timers at
- * the same time, so conflicts should occur.
- * - Then there is a delay while we wait for the timers to expire
- * - Then the master lcore calls timer_manage() and we check that all
- * timers have had their callbacks called exactly once - no more no less.
- * - Then we repeat the process, except after setting up the timers, we have
- * all cores randomly reschedule them.
- * - Again we check that the expected number of callbacks has occurred when
- * we call timer-manage.
- *
- * #. Basic test.
- *
- * This test performs basic functional checks of the timers. The test
- * uses four different timers that are loaded and stopped under
- * specific conditions in specific contexts.
- *
- * - Four timers are used for this test.
- * - On each core, the rte_timer_manage() function is called from main loop
- * every 3 microseconds.
- *
- * The autotest python script checks that the behavior is correct:
- *
- * - timer0
- *
- * - At initialization, timer0 is loaded by the master core, on master core
- * in "single" mode (time = 1 second).
- * - In the first 19 callbacks, timer0 is reloaded on the same core,
- * then, it is explicitly stopped at the 20th call.
- * - At t=25s, timer0 is reloaded once by timer2.
- *
- * - timer1
- *
- * - At initialization, timer1 is loaded by the master core, on the
- * master core in "single" mode (time = 2 seconds).
- * - In the first 9 callbacks, timer1 is reloaded on another
- * core. After the 10th callback, timer1 is not reloaded anymore.
- *
- * - timer2
- *
- * - At initialization, timer2 is loaded by the master core, on the
- * master core in "periodical" mode (time = 1 second).
- * - In the callback, when t=25s, it stops timer3 and reloads timer0
- * on the current core.
- *
- * - timer3
- *
- * - At initialization, timer3 is loaded by the master core, on
- * another core in "periodical" mode (time = 1 second).
- * - It is stopped at t=25s by timer2.
- */
-
-#include <stdio.h>
-#include <stdarg.h>
-#include <string.h>
-#include <stdlib.h>
-#include <stdint.h>
-#include <inttypes.h>
-#include <sys/queue.h>
-#include <math.h>
-
-#include <rte_common.h>
-#include <rte_log.h>
-#include <rte_memory.h>
-#include <rte_memzone.h>
-#include <rte_launch.h>
-#include <rte_cycles.h>
-#include <rte_eal.h>
-#include <rte_per_lcore.h>
-#include <rte_lcore.h>
-#include <rte_atomic.h>
-#include <rte_timer.h>
-#include <rte_random.h>
-#include <rte_malloc.h>
-
-#define TEST_DURATION_S 1 /* in seconds */
-#define NB_TIMER 4
-
-#define RTE_LOGTYPE_TESTTIMER RTE_LOGTYPE_USER3
-
-static volatile uint64_t end_time;
-static volatile int test_failed;
-
-struct mytimerinfo {
- struct rte_timer tim;
- unsigned id;
- unsigned count;
-};
-
-static struct mytimerinfo mytiminfo[NB_TIMER];
-
-static void timer_basic_cb(struct rte_timer *tim, void *arg);
-
-static void
-mytimer_reset(struct mytimerinfo *timinfo, uint64_t ticks,
- enum rte_timer_type type, unsigned tim_lcore,
- rte_timer_cb_t fct)
-{
- rte_timer_reset_sync(&timinfo->tim, ticks, type, tim_lcore,
- fct, timinfo);
-}
-
-/* timer callback for stress tests */
-static void
-timer_stress_cb(__attribute__((unused)) struct rte_timer *tim,
- __attribute__((unused)) void *arg)
-{
- long r;
- unsigned lcore_id = rte_lcore_id();
- uint64_t hz = rte_get_timer_hz();
-
- if (rte_timer_pending(tim))
- return;
-
- r = rte_rand();
- if ((r & 0xff) == 0) {
- mytimer_reset(&mytiminfo[0], hz, SINGLE, lcore_id,
- timer_stress_cb);
- }
- else if ((r & 0xff) == 1) {
- mytimer_reset(&mytiminfo[0], hz, SINGLE,
- rte_get_next_lcore(lcore_id, 0, 1),
- timer_stress_cb);
- }
- else if ((r & 0xff) == 2) {
- rte_timer_stop(&mytiminfo[0].tim);
- }
-}
-
-static int
-timer_stress_main_loop(__attribute__((unused)) void *arg)
-{
- uint64_t hz = rte_get_timer_hz();
- unsigned lcore_id = rte_lcore_id();
- uint64_t cur_time;
- int64_t diff = 0;
- long r;
-
- while (diff >= 0) {
-
- /* call the timer handler on each core */
- rte_timer_manage();
-
- /* simulate the processing of a packet
- * (1 us = 2000 cycles at 2 Ghz) */
- rte_delay_us(1);
-
- /* randomly stop or reset timer */
- r = rte_rand();
- lcore_id = rte_get_next_lcore(lcore_id, 0, 1);
- if ((r & 0xff) == 0) {
- /* 100 us */
- mytimer_reset(&mytiminfo[0], hz/10000, SINGLE, lcore_id,
- timer_stress_cb);
- }
- else if ((r & 0xff) == 1) {
- rte_timer_stop_sync(&mytiminfo[0].tim);
- }
- cur_time = rte_get_timer_cycles();
- diff = end_time - cur_time;
- }
-
- lcore_id = rte_lcore_id();
- RTE_LOG(INFO, TESTTIMER, "core %u finished\n", lcore_id);
-
- return 0;
-}
-
-/* Need to synchronize slave lcores through multiple steps. */
-enum { SLAVE_WAITING = 1, SLAVE_RUN_SIGNAL, SLAVE_RUNNING, SLAVE_FINISHED };
-static rte_atomic16_t slave_state[RTE_MAX_LCORE];
-
-static void
-master_init_slaves(void)
-{
- unsigned i;
-
- RTE_LCORE_FOREACH_SLAVE(i) {
- rte_atomic16_set(&slave_state[i], SLAVE_WAITING);
- }
-}
-
-static void
-master_start_slaves(void)
-{
- unsigned i;
-
- RTE_LCORE_FOREACH_SLAVE(i) {
- rte_atomic16_set(&slave_state[i], SLAVE_RUN_SIGNAL);
- }
- RTE_LCORE_FOREACH_SLAVE(i) {
- while (rte_atomic16_read(&slave_state[i]) != SLAVE_RUNNING)
- rte_pause();
- }
-}
-
-static void
-master_wait_for_slaves(void)
-{
- unsigned i;
-
- RTE_LCORE_FOREACH_SLAVE(i) {
- while (rte_atomic16_read(&slave_state[i]) != SLAVE_FINISHED)
- rte_pause();
- }
-}
-
-static void
-slave_wait_to_start(void)
-{
- unsigned lcore_id = rte_lcore_id();
-
- while (rte_atomic16_read(&slave_state[lcore_id]) != SLAVE_RUN_SIGNAL)
- rte_pause();
- rte_atomic16_set(&slave_state[lcore_id], SLAVE_RUNNING);
-}
-
-static void
-slave_finish(void)
-{
- unsigned lcore_id = rte_lcore_id();
-
- rte_atomic16_set(&slave_state[lcore_id], SLAVE_FINISHED);
-}
-
-
-static volatile int cb_count = 0;
-
-/* callback for second stress test. will only be called
- * on master lcore */
-static void
-timer_stress2_cb(struct rte_timer *tim __rte_unused, void *arg __rte_unused)
-{
- cb_count++;
-}
-
-#define NB_STRESS2_TIMERS 8192
-
-static int
-timer_stress2_main_loop(__attribute__((unused)) void *arg)
-{
- static struct rte_timer *timers;
- int i, ret;
- uint64_t delay = rte_get_timer_hz() / 20;
- unsigned lcore_id = rte_lcore_id();
- unsigned master = rte_get_master_lcore();
- int32_t my_collisions = 0;
- static rte_atomic32_t collisions;
-
- if (lcore_id == master) {
- cb_count = 0;
- test_failed = 0;
- rte_atomic32_set(&collisions, 0);
- master_init_slaves();
- timers = rte_malloc(NULL, sizeof(*timers) * NB_STRESS2_TIMERS, 0);
- if (timers == NULL) {
- printf("Test Failed\n");
- printf("- Cannot allocate memory for timers\n" );
- test_failed = 1;
- master_start_slaves();
- goto cleanup;
- }
- for (i = 0; i < NB_STRESS2_TIMERS; i++)
- rte_timer_init(&timers[i]);
- master_start_slaves();
- } else {
- slave_wait_to_start();
- if (test_failed)
- goto cleanup;
- }
-
- /* have all cores schedule all timers on master lcore */
- for (i = 0; i < NB_STRESS2_TIMERS; i++) {
- ret = rte_timer_reset(&timers[i], delay, SINGLE, master,
- timer_stress2_cb, NULL);
- /* there will be collisions when multiple cores simultaneously
- * configure the same timers */
- if (ret != 0)
- my_collisions++;
- }
- if (my_collisions != 0)
- rte_atomic32_add(&collisions, my_collisions);
-
- /* wait long enough for timers to expire */
- rte_delay_ms(100);
-
- /* all cores rendezvous */
- if (lcore_id == master) {
- master_wait_for_slaves();
- } else {
- slave_finish();
- }
-
- /* now check that we get the right number of callbacks */
- if (lcore_id == master) {
- my_collisions = rte_atomic32_read(&collisions);
- if (my_collisions != 0)
- printf("- %d timer reset collisions (OK)\n", my_collisions);
- rte_timer_manage();
- if (cb_count != NB_STRESS2_TIMERS) {
- printf("Test Failed\n");
- printf("- Stress test 2, part 1 failed\n");
- printf("- Expected %d callbacks, got %d\n", NB_STRESS2_TIMERS,
- cb_count);
- test_failed = 1;
- master_start_slaves();
- goto cleanup;
- }
- cb_count = 0;
-
- /* proceed */
- master_start_slaves();
- } else {
- /* proceed */
- slave_wait_to_start();
- if (test_failed)
- goto cleanup;
- }
-
- /* now test again, just stop and restart timers at random after init*/
- for (i = 0; i < NB_STRESS2_TIMERS; i++)
- rte_timer_reset(&timers[i], delay, SINGLE, master,
- timer_stress2_cb, NULL);
-
- /* pick random timer to reset, stopping them first half the time */
- for (i = 0; i < 100000; i++) {
- int r = rand() % NB_STRESS2_TIMERS;
- if (i % 2)
- rte_timer_stop(&timers[r]);
- rte_timer_reset(&timers[r], delay, SINGLE, master,
- timer_stress2_cb, NULL);
- }
-
- /* wait long enough for timers to expire */
- rte_delay_ms(100);
-
- /* now check that we get the right number of callbacks */
- if (lcore_id == master) {
- master_wait_for_slaves();
-
- rte_timer_manage();
- if (cb_count != NB_STRESS2_TIMERS) {
- printf("Test Failed\n");
- printf("- Stress test 2, part 2 failed\n");
- printf("- Expected %d callbacks, got %d\n", NB_STRESS2_TIMERS,
- cb_count);
- test_failed = 1;
- } else {
- printf("Test OK\n");
- }
- }
-
-cleanup:
- if (lcore_id == master) {
- master_wait_for_slaves();
- if (timers != NULL) {
- rte_free(timers);
- timers = NULL;
- }
- } else {
- slave_finish();
- }
-
- return 0;
-}
-
-/* timer callback for basic tests */
-static void
-timer_basic_cb(struct rte_timer *tim, void *arg)
-{
- struct mytimerinfo *timinfo = arg;
- uint64_t hz = rte_get_timer_hz();
- unsigned lcore_id = rte_lcore_id();
- uint64_t cur_time = rte_get_timer_cycles();
-
- if (rte_timer_pending(tim))
- return;
-
- timinfo->count ++;
-
- RTE_LOG(INFO, TESTTIMER,
- "%"PRIu64": callback id=%u count=%u on core %u\n",
- cur_time, timinfo->id, timinfo->count, lcore_id);
-
- /* reload timer 0 on same core */
- if (timinfo->id == 0 && timinfo->count < 20) {
- mytimer_reset(timinfo, hz, SINGLE, lcore_id, timer_basic_cb);
- return;
- }
-
- /* reload timer 1 on next core */
- if (timinfo->id == 1 && timinfo->count < 10) {
- mytimer_reset(timinfo, hz*2, SINGLE,
- rte_get_next_lcore(lcore_id, 0, 1),
- timer_basic_cb);
- return;
- }
-
- /* Explicitelly stop timer 0. Once stop() called, we can even
- * erase the content of the structure: it is not referenced
- * anymore by any code (in case of dynamic structure, it can
- * be freed) */
- if (timinfo->id == 0 && timinfo->count == 20) {
-
- /* stop_sync() is not needed, because we know that the
- * status of timer is only modified by this core */
- rte_timer_stop(tim);
- memset(tim, 0xAA, sizeof(struct rte_timer));
- return;
- }
-
- /* stop timer3, and restart a new timer0 (it was removed 5
- * seconds ago) for a single shot */
- if (timinfo->id == 2 && timinfo->count == 25) {
- rte_timer_stop_sync(&mytiminfo[3].tim);
-
- /* need to reinit because structure was erased with 0xAA */
- rte_timer_init(&mytiminfo[0].tim);
- mytimer_reset(&mytiminfo[0], hz, SINGLE, lcore_id,
- timer_basic_cb);
- }
-}
-
-static int
-timer_basic_main_loop(__attribute__((unused)) void *arg)
-{
- uint64_t hz = rte_get_timer_hz();
- unsigned lcore_id = rte_lcore_id();
- uint64_t cur_time;
- int64_t diff = 0;
-
- /* launch all timers on core 0 */
- if (lcore_id == rte_get_master_lcore()) {
- mytimer_reset(&mytiminfo[0], hz/4, SINGLE, lcore_id,
- timer_basic_cb);
- mytimer_reset(&mytiminfo[1], hz/2, SINGLE, lcore_id,
- timer_basic_cb);
- mytimer_reset(&mytiminfo[2], hz/4, PERIODICAL, lcore_id,
- timer_basic_cb);
- mytimer_reset(&mytiminfo[3], hz/4, PERIODICAL,
- rte_get_next_lcore(lcore_id, 0, 1),
- timer_basic_cb);
- }
-
- while (diff >= 0) {
-
- /* call the timer handler on each core */
- rte_timer_manage();
-
- /* simulate the processing of a packet
- * (3 us = 6000 cycles at 2 Ghz) */
- rte_delay_us(3);
-
- cur_time = rte_get_timer_cycles();
- diff = end_time - cur_time;
- }
- RTE_LOG(INFO, TESTTIMER, "core %u finished\n", lcore_id);
-
- return 0;
-}
-
-static int
-timer_sanity_check(void)
-{
-#ifdef RTE_LIBEAL_USE_HPET
- if (eal_timer_source != EAL_TIMER_HPET) {
- printf("Not using HPET, can't sanity check timer sources\n");
- return 0;
- }
-
- const uint64_t t_hz = rte_get_tsc_hz();
- const uint64_t h_hz = rte_get_hpet_hz();
- printf("Hertz values: TSC = %"PRIu64", HPET = %"PRIu64"\n", t_hz, h_hz);
-
- const uint64_t tsc_start = rte_get_tsc_cycles();
- const uint64_t hpet_start = rte_get_hpet_cycles();
- rte_delay_ms(100); /* delay 1/10 second */
- const uint64_t tsc_end = rte_get_tsc_cycles();
- const uint64_t hpet_end = rte_get_hpet_cycles();
- printf("Measured cycles: TSC = %"PRIu64", HPET = %"PRIu64"\n",
- tsc_end-tsc_start, hpet_end-hpet_start);
-
- const double tsc_time = (double)(tsc_end - tsc_start)/t_hz;
- const double hpet_time = (double)(hpet_end - hpet_start)/h_hz;
- /* get the percentage that the times differ by */
- const double time_diff = fabs(tsc_time - hpet_time)*100/tsc_time;
- printf("Measured time: TSC = %.4f, HPET = %.4f\n", tsc_time, hpet_time);
-
- printf("Elapsed time measured by TSC and HPET differ by %f%%\n",
- time_diff);
- if (time_diff > 0.1) {
- printf("Error times differ by >0.1%%");
- return -1;
- }
-#endif
- return 0;
-}
-
-static int
-test_timer(void)
-{
- unsigned i;
- uint64_t cur_time;
- uint64_t hz;
-
- /* sanity check our timer sources and timer config values */
- if (timer_sanity_check() < 0) {
- printf("Timer sanity checks failed\n");
- return TEST_FAILED;
- }
-
- if (rte_lcore_count() < 2) {
- printf("not enough lcores for this test\n");
- return TEST_FAILED;
- }
-
- /* init timer */
- for (i=0; i<NB_TIMER; i++) {
- memset(&mytiminfo[i], 0, sizeof(struct mytimerinfo));
- mytiminfo[i].id = i;
- rte_timer_init(&mytiminfo[i].tim);
- }
-
- /* calculate the "end of test" time */
- cur_time = rte_get_timer_cycles();
- hz = rte_get_timer_hz();
- end_time = cur_time + (hz * TEST_DURATION_S);
-
- /* start other cores */
- printf("Start timer stress tests\n");
- rte_eal_mp_remote_launch(timer_stress_main_loop, NULL, CALL_MASTER);
- rte_eal_mp_wait_lcore();
-
- /* stop timer 0 used for stress test */
- rte_timer_stop_sync(&mytiminfo[0].tim);
-
- /* run a second, slightly different set of stress tests */
- printf("\nStart timer stress tests 2\n");
- test_failed = 0;
- rte_eal_mp_remote_launch(timer_stress2_main_loop, NULL, CALL_MASTER);
- rte_eal_mp_wait_lcore();
- if (test_failed)
- return TEST_FAILED;
-
- /* calculate the "end of test" time */
- cur_time = rte_get_timer_cycles();
- hz = rte_get_timer_hz();
- end_time = cur_time + (hz * TEST_DURATION_S);
-
- /* start other cores */
- printf("\nStart timer basic tests\n");
- rte_eal_mp_remote_launch(timer_basic_main_loop, NULL, CALL_MASTER);
- rte_eal_mp_wait_lcore();
-
- /* stop all timers */
- for (i=0; i<NB_TIMER; i++) {
- rte_timer_stop_sync(&mytiminfo[i].tim);
- }
-
- rte_timer_dump_stats(stdout);
-
- return TEST_SUCCESS;
-}
-
-REGISTER_TEST_COMMAND(timer_autotest, test_timer);
diff --git a/app/test/test_timer_perf.c b/app/test/test_timer_perf.c
deleted file mode 100644
index fa77efbd..00000000
--- a/app/test/test_timer_perf.c
+++ /dev/null
@@ -1,161 +0,0 @@
-/*-
- * BSD LICENSE
- *
- * Copyright(c) 2010-2014 Intel Corporation. All rights reserved.
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * * Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * * Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in
- * the documentation and/or other materials provided with the
- * distribution.
- * * Neither the name of Intel Corporation nor the names of its
- * contributors may be used to endorse or promote products derived
- * from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
- * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
- * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#include "test.h"
-
-#include <stdio.h>
-#include <unistd.h>
-#include <inttypes.h>
-#include <rte_cycles.h>
-#include <rte_timer.h>
-#include <rte_common.h>
-#include <rte_lcore.h>
-#include <rte_random.h>
-#include <rte_malloc.h>
-
-#define MAX_ITERATIONS 1000000
-
-int outstanding_count = 0;
-
-static void
-timer_cb(struct rte_timer *t __rte_unused, void *param __rte_unused)
-{
- outstanding_count--;
-}
-
-#define DELAY_SECONDS 1
-
-#ifdef RTE_EXEC_ENV_LINUXAPP
-#define do_delay() usleep(10)
-#else
-#define do_delay() rte_pause()
-#endif
-
-static int
-test_timer_perf(void)
-{
- unsigned iterations = 100;
- unsigned i;
- struct rte_timer *tms;
- uint64_t start_tsc, end_tsc, delay_start;
- unsigned lcore_id = rte_lcore_id();
-
- tms = rte_malloc(NULL, sizeof(*tms) * MAX_ITERATIONS, 0);
-
- for (i = 0; i < MAX_ITERATIONS; i++)
- rte_timer_init(&tms[i]);
-
- const uint64_t ticks = rte_get_timer_hz() * DELAY_SECONDS;
- const uint64_t ticks_per_ms = rte_get_tsc_hz()/1000;
- const uint64_t ticks_per_us = ticks_per_ms/1000;
-
- while (iterations <= MAX_ITERATIONS) {
-
- printf("Appending %u timers\n", iterations);
- start_tsc = rte_rdtsc();
- for (i = 0; i < iterations; i++)
- rte_timer_reset(&tms[i], ticks, SINGLE, lcore_id,
- timer_cb, NULL);
- end_tsc = rte_rdtsc();
- printf("Time for %u timers: %"PRIu64" (%"PRIu64"ms), ", iterations,
- end_tsc-start_tsc, (end_tsc-start_tsc+ticks_per_ms/2)/(ticks_per_ms));
- printf("Time per timer: %"PRIu64" (%"PRIu64"us)\n",
- (end_tsc-start_tsc)/iterations,
- ((end_tsc-start_tsc)/iterations+ticks_per_us/2)/(ticks_per_us));
- outstanding_count = iterations;
- delay_start = rte_get_timer_cycles();
- while (rte_get_timer_cycles() < delay_start + ticks)
- do_delay();
-
- start_tsc = rte_rdtsc();
- while (outstanding_count)
- rte_timer_manage();
- end_tsc = rte_rdtsc();
- printf("Time for %u callbacks: %"PRIu64" (%"PRIu64"ms), ", iterations,
- end_tsc-start_tsc, (end_tsc-start_tsc+ticks_per_ms/2)/(ticks_per_ms));
- printf("Time per callback: %"PRIu64" (%"PRIu64"us)\n",
- (end_tsc-start_tsc)/iterations,
- ((end_tsc-start_tsc)/iterations+ticks_per_us/2)/(ticks_per_us));
-
- printf("Resetting %u timers\n", iterations);
- start_tsc = rte_rdtsc();
- for (i = 0; i < iterations; i++)
- rte_timer_reset(&tms[i], rte_rand() % ticks, SINGLE, lcore_id,
- timer_cb, NULL);
- end_tsc = rte_rdtsc();
- printf("Time for %u timers: %"PRIu64" (%"PRIu64"ms), ", iterations,
- end_tsc-start_tsc, (end_tsc-start_tsc+ticks_per_ms/2)/(ticks_per_ms));
- printf("Time per timer: %"PRIu64" (%"PRIu64"us)\n",
- (end_tsc-start_tsc)/iterations,
- ((end_tsc-start_tsc)/iterations+ticks_per_us/2)/(ticks_per_us));
- outstanding_count = iterations;
-
- delay_start = rte_get_timer_cycles();
- while (rte_get_timer_cycles() < delay_start + ticks)
- do_delay();
-
- rte_timer_manage();
- if (outstanding_count != 0) {
- printf("Error: outstanding callback count = %d\n", outstanding_count);
- return -1;
- }
-
- iterations *= 10;
- printf("\n");
- }
-
- printf("All timers processed ok\n");
-
- /* measure time to poll an empty timer list */
- start_tsc = rte_rdtsc();
- for (i = 0; i < iterations; i++)
- rte_timer_manage();
- end_tsc = rte_rdtsc();
- printf("\nTime per rte_timer_manage with zero timers: %"PRIu64" cycles\n",
- (end_tsc - start_tsc + iterations/2) / iterations);
-
- /* measure time to poll a timer list with timers, but without
- * calling any callbacks */
- rte_timer_reset(&tms[0], ticks * 100, SINGLE, lcore_id,
- timer_cb, NULL);
- start_tsc = rte_rdtsc();
- for (i = 0; i < iterations; i++)
- rte_timer_manage();
- end_tsc = rte_rdtsc();
- printf("Time per rte_timer_manage with zero callbacks: %"PRIu64" cycles\n",
- (end_tsc - start_tsc + iterations/2) / iterations);
-
- return 0;
-}
-
-REGISTER_TEST_COMMAND(timer_perf_autotest, test_timer_perf);
diff --git a/app/test/test_timer_racecond.c b/app/test/test_timer_racecond.c
deleted file mode 100644
index 7824ec4b..00000000
--- a/app/test/test_timer_racecond.c
+++ /dev/null
@@ -1,205 +0,0 @@
-/*-
- * BSD LICENSE
- *
- * Copyright(c) 2015 Akamai Technologies.
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * * Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * * Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in
- * the documentation and/or other materials provided with the
- * distribution.
- * * Neither the name of Intel Corporation nor the names of its
- * contributors may be used to endorse or promote products derived
- * from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
- * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
- * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#include "test.h"
-
-#include <stdio.h>
-#include <unistd.h>
-#include <inttypes.h>
-#include <rte_cycles.h>
-#include <rte_timer.h>
-#include <rte_common.h>
-#include <rte_lcore.h>
-#include <rte_random.h>
-#include <rte_malloc.h>
-
-#undef TEST_TIMER_RACECOND_VERBOSE
-
-#ifdef RTE_EXEC_ENV_LINUXAPP
-#define usec_delay(us) usleep(us)
-#else
-#define usec_delay(us) rte_delay_us(us)
-#endif
-
-#define BILLION (1UL << 30)
-
-#define TEST_DURATION_S 20 /* in seconds */
-#define N_TIMERS 50
-
-static struct rte_timer timer[N_TIMERS];
-static unsigned timer_lcore_id[N_TIMERS];
-
-static unsigned master;
-static volatile unsigned stop_slaves;
-
-static int reload_timer(struct rte_timer *tim);
-
-static void
-timer_cb(struct rte_timer *tim, void *arg __rte_unused)
-{
- /* Simulate slow callback function, 100 us. */
- rte_delay_us(100);
-
-#ifdef TEST_TIMER_RACECOND_VERBOSE
- if (tim == &timer[0])
- printf("------------------------------------------------\n");
- printf("timer_cb: core %u timer %lu\n",
- rte_lcore_id(), tim - timer);
-#endif
- (void)reload_timer(tim);
-}
-
-RTE_DEFINE_PER_LCORE(unsigned, n_reset_collisions);
-
-static int
-reload_timer(struct rte_timer *tim)
-{
- /* Make timer expire roughly when the TSC hits the next BILLION
- * multiple. Add in timer's index to make them expire in nearly
- * sorted order. This makes all timers somewhat synchronized,
- * firing ~2-3 times per second, assuming 2-3 GHz TSCs.
- */
- uint64_t ticks = BILLION - (rte_get_timer_cycles() % BILLION) +
- (tim - timer);
- int ret;
-
- ret = rte_timer_reset(tim, ticks, PERIODICAL, master, timer_cb, NULL);
- if (ret != 0) {
-#ifdef TEST_TIMER_RACECOND_VERBOSE
- printf("- core %u failed to reset timer %lu (OK)\n",
- rte_lcore_id(), tim - timer);
-#endif
- RTE_PER_LCORE(n_reset_collisions) += 1;
- }
- return ret;
-}
-
-static int
-slave_main_loop(__attribute__((unused)) void *arg)
-{
- unsigned lcore_id = rte_lcore_id();
- unsigned i;
-
- RTE_PER_LCORE(n_reset_collisions) = 0;
-
- printf("Starting main loop on core %u\n", lcore_id);
-
- while (!stop_slaves) {
- /* Wait until the timer manager is running.
- * We know it's running when we see timer[0] NOT pending.
- */
- if (rte_timer_pending(&timer[0])) {
- rte_pause();
- continue;
- }
-
- /* Now, go cause some havoc!
- * Reload our timers.
- */
- for (i = 0; i < N_TIMERS; i++) {
- if (timer_lcore_id[i] == lcore_id)
- (void)reload_timer(&timer[i]);
- }
- usec_delay(100*1000); /* sleep 100 ms */
- }
-
- if (RTE_PER_LCORE(n_reset_collisions) != 0) {
- printf("- core %u, %u reset collisions (OK)\n",
- lcore_id, RTE_PER_LCORE(n_reset_collisions));
- }
- return 0;
-}
-
-static int
-test_timer_racecond(void)
-{
- int ret;
- uint64_t hz;
- uint64_t cur_time;
- uint64_t end_time;
- int64_t diff = 0;
- unsigned lcore_id;
- unsigned i;
-
- master = lcore_id = rte_lcore_id();
- hz = rte_get_timer_hz();
-
- /* init and start timers */
- for (i = 0; i < N_TIMERS; i++) {
- rte_timer_init(&timer[i]);
- ret = reload_timer(&timer[i]);
- TEST_ASSERT(ret == 0, "reload_timer failed");
-
- /* Distribute timers to slaves.
- * Note that we assign timer[0] to the master.
- */
- timer_lcore_id[i] = lcore_id;
- lcore_id = rte_get_next_lcore(lcore_id, 1, 1);
- }
-
- /* calculate the "end of test" time */
- cur_time = rte_get_timer_cycles();
- end_time = cur_time + (hz * TEST_DURATION_S);
-
- /* start slave cores */
- stop_slaves = 0;
- printf("Start timer manage race condition test (%u seconds)\n",
- TEST_DURATION_S);
- rte_eal_mp_remote_launch(slave_main_loop, NULL, SKIP_MASTER);
-
- while (diff >= 0) {
- /* run the timers */
- rte_timer_manage();
-
- /* wait 100 ms */
- usec_delay(100*1000);
-
- cur_time = rte_get_timer_cycles();
- diff = end_time - cur_time;
- }
-
- /* stop slave cores */
- printf("Stopping timer manage race condition test\n");
- stop_slaves = 1;
- rte_eal_mp_wait_lcore();
-
- /* stop timers */
- for (i = 0; i < N_TIMERS; i++) {
- ret = rte_timer_stop(&timer[i]);
- TEST_ASSERT(ret == 0, "rte_timer_stop failed");
- }
-
- return TEST_SUCCESS;
-}
-
-REGISTER_TEST_COMMAND(timer_racecond_autotest, test_timer_racecond);
diff --git a/app/test/test_version.c b/app/test/test_version.c
deleted file mode 100644
index afc0d0b8..00000000
--- a/app/test/test_version.c
+++ /dev/null
@@ -1,57 +0,0 @@
-/*-
- * BSD LICENSE
- *
- * Copyright(c) 2010-2014 Intel Corporation. All rights reserved.
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * * Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * * Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in
- * the documentation and/or other materials provided with the
- * distribution.
- * * Neither the name of Intel Corporation nor the names of its
- * contributors may be used to endorse or promote products derived
- * from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
- * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
- * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#include <stdio.h>
-#include <string.h>
-#include <stdint.h>
-
-#include <rte_common.h>
-#include <rte_version.h>
-
-#include "test.h"
-
-
-static int
-test_version(void)
-{
- const char *version = rte_version();
- if (version == NULL)
- return -1;
- printf("Version string: '%s'\n", version);
- if (*version == '\0' ||
- strncmp(version, RTE_VER_PREFIX, sizeof(RTE_VER_PREFIX)-1) != 0)
- return -1;
- return 0;
-}
-
-REGISTER_TEST_COMMAND(version_autotest, test_version);
diff --git a/app/test/test_xmmt_ops.h b/app/test/test_xmmt_ops.h
deleted file mode 100644
index 42174d2c..00000000
--- a/app/test/test_xmmt_ops.h
+++ /dev/null
@@ -1,83 +0,0 @@
-/*-
- * BSD LICENSE
- *
- * Copyright(c) 2015 Cavium Networks. All rights reserved.
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * * Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * * Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in
- * the documentation and/or other materials provided with the
- * distribution.
- * * Neither the name of Cavium Networks nor the names of its
- * contributors may be used to endorse or promote products derived
- * from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
- * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
- * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#ifndef _TEST_XMMT_OPS_H_
-#define _TEST_XMMT_OPS_H_
-
-#include <rte_vect.h>
-
-#if defined(RTE_ARCH_ARM) || defined(RTE_ARCH_ARM64)
-
-/* vect_* abstraction implementation using NEON */
-
-/* loads the xmm_t value from address p(does not need to be 16-byte aligned)*/
-#define vect_loadu_sil128(p) vld1q_s32((const int32_t *)p)
-
-/* sets the 4 signed 32-bit integer values and returns the xmm_t variable */
-static inline xmm_t __attribute__((always_inline))
-vect_set_epi32(int i3, int i2, int i1, int i0)
-{
- int32_t data[4] = {i0, i1, i2, i3};
-
- return vld1q_s32(data);
-}
-
-#elif defined(RTE_ARCH_X86)
-
-/* vect_* abstraction implementation using SSE */
-
-/* loads the xmm_t value from address p(does not need to be 16-byte aligned)*/
-#define vect_loadu_sil128(p) _mm_loadu_si128(p)
-
-/* sets the 4 signed 32-bit integer values and returns the xmm_t variable */
-#define vect_set_epi32(i3, i2, i1, i0) _mm_set_epi32(i3, i2, i1, i0)
-
-#elif defined(RTE_ARCH_PPC_64)
-
-/* vect_* abstraction implementation using ALTIVEC */
-
-/* loads the xmm_t value from address p(does not need to be 16-byte aligned)*/
-#define vect_loadu_sil128(p) vec_ld(0, p)
-
-/* sets the 4 signed 32-bit integer values and returns the xmm_t variable */
-static inline xmm_t __attribute__((always_inline))
-vect_set_epi32(int i3, int i2, int i1, int i0)
-{
- xmm_t data = (xmm_t){i0, i1, i2, i3};
-
- return data;
-}
-
-#endif
-
-#endif /* _TEST_XMMT_OPS_H_ */
diff --git a/app/test/virtual_pmd.c b/app/test/virtual_pmd.c
deleted file mode 100644
index 65b44c64..00000000
--- a/app/test/virtual_pmd.c
+++ /dev/null
@@ -1,644 +0,0 @@
-/*-
- * BSD LICENSE
- *
- * Copyright(c) 2010-2014 Intel Corporation. All rights reserved.
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * * Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * * Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in
- * the documentation and/or other materials provided with the
- * distribution.
- * * Neither the name of Intel Corporation nor the names of its
- * contributors may be used to endorse or promote products derived
- * from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
- * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
- * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#include <rte_mbuf.h>
-#include <rte_ethdev.h>
-#include <rte_malloc.h>
-#include <rte_memcpy.h>
-#include <rte_memory.h>
-#include <rte_ring.h>
-
-#include "virtual_pmd.h"
-
-#define MAX_PKT_BURST 512
-
-static const char *virtual_ethdev_driver_name = "Virtual PMD";
-
-struct virtual_ethdev_private {
- struct eth_dev_ops dev_ops;
- struct rte_eth_stats eth_stats;
-
- struct rte_ring *rx_queue;
- struct rte_ring *tx_queue;
-
- int tx_burst_fail_count;
-};
-
-struct virtual_ethdev_queue {
- int port_id;
- int queue_id;
-};
-
-static int
-virtual_ethdev_start_success(struct rte_eth_dev *eth_dev __rte_unused)
-{
- eth_dev->data->dev_started = 1;
-
- return 0;
-}
-
-static int
-virtual_ethdev_start_fail(struct rte_eth_dev *eth_dev __rte_unused)
-{
- eth_dev->data->dev_started = 0;
-
- return -1;
-}
-static void virtual_ethdev_stop(struct rte_eth_dev *eth_dev __rte_unused)
-{
- void *pkt = NULL;
- struct virtual_ethdev_private *prv = eth_dev->data->dev_private;
-
- eth_dev->data->dev_link.link_status = ETH_LINK_DOWN;
- eth_dev->data->dev_started = 0;
- while (rte_ring_dequeue(prv->rx_queue, &pkt) != -ENOENT)
- rte_pktmbuf_free(pkt);
-
- while (rte_ring_dequeue(prv->tx_queue, &pkt) != -ENOENT)
- rte_pktmbuf_free(pkt);
-}
-
-static void
-virtual_ethdev_close(struct rte_eth_dev *dev __rte_unused)
-{}
-
-static int
-virtual_ethdev_configure_success(struct rte_eth_dev *dev __rte_unused)
-{
- return 0;
-}
-
-static int
-virtual_ethdev_configure_fail(struct rte_eth_dev *dev __rte_unused)
-{
- return -1;
-}
-
-static void
-virtual_ethdev_info_get(struct rte_eth_dev *dev __rte_unused,
- struct rte_eth_dev_info *dev_info)
-{
- dev_info->driver_name = virtual_ethdev_driver_name;
- dev_info->max_mac_addrs = 1;
-
- dev_info->max_rx_pktlen = (uint32_t)2048;
-
- dev_info->max_rx_queues = (uint16_t)128;
- dev_info->max_tx_queues = (uint16_t)512;
-
- dev_info->min_rx_bufsize = 0;
- dev_info->pci_dev = NULL;
-}
-
-static int
-virtual_ethdev_rx_queue_setup_success(struct rte_eth_dev *dev,
- uint16_t rx_queue_id, uint16_t nb_rx_desc __rte_unused,
- unsigned int socket_id,
- const struct rte_eth_rxconf *rx_conf __rte_unused,
- struct rte_mempool *mb_pool __rte_unused)
-{
- struct virtual_ethdev_queue *rx_q;
-
- rx_q = (struct virtual_ethdev_queue *)rte_zmalloc_socket(NULL,
- sizeof(struct virtual_ethdev_queue), 0, socket_id);
-
- if (rx_q == NULL)
- return -1;
-
- rx_q->port_id = dev->data->port_id;
- rx_q->queue_id = rx_queue_id;
-
- dev->data->rx_queues[rx_queue_id] = rx_q;
-
- return 0;
-}
-
-static int
-virtual_ethdev_rx_queue_setup_fail(struct rte_eth_dev *dev __rte_unused,
- uint16_t rx_queue_id __rte_unused, uint16_t nb_rx_desc __rte_unused,
- unsigned int socket_id __rte_unused,
- const struct rte_eth_rxconf *rx_conf __rte_unused,
- struct rte_mempool *mb_pool __rte_unused)
-{
- return -1;
-}
-
-static int
-virtual_ethdev_tx_queue_setup_success(struct rte_eth_dev *dev,
- uint16_t tx_queue_id, uint16_t nb_tx_desc __rte_unused,
- unsigned int socket_id,
- const struct rte_eth_txconf *tx_conf __rte_unused)
-{
- struct virtual_ethdev_queue *tx_q;
-
- tx_q = (struct virtual_ethdev_queue *)rte_zmalloc_socket(NULL,
- sizeof(struct virtual_ethdev_queue), 0, socket_id);
-
- if (tx_q == NULL)
- return -1;
-
- tx_q->port_id = dev->data->port_id;
- tx_q->queue_id = tx_queue_id;
-
- dev->data->tx_queues[tx_queue_id] = tx_q;
-
- return 0;
-}
-
-static int
-virtual_ethdev_tx_queue_setup_fail(struct rte_eth_dev *dev __rte_unused,
- uint16_t tx_queue_id __rte_unused, uint16_t nb_tx_desc __rte_unused,
- unsigned int socket_id __rte_unused,
- const struct rte_eth_txconf *tx_conf __rte_unused)
-{
- return -1;
-}
-
-static void
-virtual_ethdev_rx_queue_release(void *q __rte_unused)
-{
-}
-
-static void
-virtual_ethdev_tx_queue_release(void *q __rte_unused)
-{
-}
-
-static int
-virtual_ethdev_link_update_success(struct rte_eth_dev *bonded_eth_dev,
- int wait_to_complete __rte_unused)
-{
- if (!bonded_eth_dev->data->dev_started)
- bonded_eth_dev->data->dev_link.link_status = ETH_LINK_DOWN;
-
- return 0;
-}
-
-static int
-virtual_ethdev_link_update_fail(struct rte_eth_dev *bonded_eth_dev __rte_unused,
- int wait_to_complete __rte_unused)
-{
- return -1;
-}
-
-static void
-virtual_ethdev_stats_get(struct rte_eth_dev *dev, struct rte_eth_stats *stats)
-{
- struct virtual_ethdev_private *dev_private = dev->data->dev_private;
-
- if (stats)
- rte_memcpy(stats, &dev_private->eth_stats, sizeof(*stats));
-}
-
-static void
-virtual_ethdev_stats_reset(struct rte_eth_dev *dev)
-{
- struct virtual_ethdev_private *dev_private = dev->data->dev_private;
- void *pkt = NULL;
-
- while (rte_ring_dequeue(dev_private->tx_queue, &pkt) == -ENOBUFS)
- rte_pktmbuf_free(pkt);
-
- /* Reset internal statistics */
- memset(&dev_private->eth_stats, 0, sizeof(dev_private->eth_stats));
-}
-
-static void
-virtual_ethdev_promiscuous_mode_enable(struct rte_eth_dev *dev __rte_unused)
-{}
-
-static void
-virtual_ethdev_promiscuous_mode_disable(struct rte_eth_dev *dev __rte_unused)
-{}
-
-
-static const struct eth_dev_ops virtual_ethdev_default_dev_ops = {
- .dev_configure = virtual_ethdev_configure_success,
- .dev_start = virtual_ethdev_start_success,
- .dev_stop = virtual_ethdev_stop,
- .dev_close = virtual_ethdev_close,
- .dev_infos_get = virtual_ethdev_info_get,
- .rx_queue_setup = virtual_ethdev_rx_queue_setup_success,
- .tx_queue_setup = virtual_ethdev_tx_queue_setup_success,
- .rx_queue_release = virtual_ethdev_rx_queue_release,
- .tx_queue_release = virtual_ethdev_tx_queue_release,
- .link_update = virtual_ethdev_link_update_success,
- .stats_get = virtual_ethdev_stats_get,
- .stats_reset = virtual_ethdev_stats_reset,
- .promiscuous_enable = virtual_ethdev_promiscuous_mode_enable,
- .promiscuous_disable = virtual_ethdev_promiscuous_mode_disable
-};
-
-
-void
-virtual_ethdev_start_fn_set_success(uint8_t port_id, uint8_t success)
-{
- struct rte_eth_dev *dev = &rte_eth_devices[port_id];
- struct virtual_ethdev_private *dev_private = dev->data->dev_private;
- struct eth_dev_ops *dev_ops = &dev_private->dev_ops;
-
- if (success)
- dev_ops->dev_start = virtual_ethdev_start_success;
- else
- dev_ops->dev_start = virtual_ethdev_start_fail;
-
-}
-
-void
-virtual_ethdev_configure_fn_set_success(uint8_t port_id, uint8_t success)
-{
- struct rte_eth_dev *dev = &rte_eth_devices[port_id];
- struct virtual_ethdev_private *dev_private = dev->data->dev_private;
- struct eth_dev_ops *dev_ops = &dev_private->dev_ops;
-
- if (success)
- dev_ops->dev_configure = virtual_ethdev_configure_success;
- else
- dev_ops->dev_configure = virtual_ethdev_configure_fail;
-}
-
-void
-virtual_ethdev_rx_queue_setup_fn_set_success(uint8_t port_id, uint8_t success)
-{
- struct rte_eth_dev *dev = &rte_eth_devices[port_id];
- struct virtual_ethdev_private *dev_private = dev->data->dev_private;
- struct eth_dev_ops *dev_ops = &dev_private->dev_ops;
-
- if (success)
- dev_ops->rx_queue_setup = virtual_ethdev_rx_queue_setup_success;
- else
- dev_ops->rx_queue_setup = virtual_ethdev_rx_queue_setup_fail;
-}
-
-void
-virtual_ethdev_tx_queue_setup_fn_set_success(uint8_t port_id, uint8_t success)
-{
- struct rte_eth_dev *dev = &rte_eth_devices[port_id];
- struct virtual_ethdev_private *dev_private = dev->data->dev_private;
- struct eth_dev_ops *dev_ops = &dev_private->dev_ops;
-
- if (success)
- dev_ops->tx_queue_setup = virtual_ethdev_tx_queue_setup_success;
- else
- dev_ops->tx_queue_setup = virtual_ethdev_tx_queue_setup_fail;
-}
-
-void
-virtual_ethdev_link_update_fn_set_success(uint8_t port_id, uint8_t success)
-{
- struct rte_eth_dev *dev = &rte_eth_devices[port_id];
- struct virtual_ethdev_private *dev_private = dev->data->dev_private;
- struct eth_dev_ops *dev_ops = &dev_private->dev_ops;
-
- if (success)
- dev_ops->link_update = virtual_ethdev_link_update_success;
- else
- dev_ops->link_update = virtual_ethdev_link_update_fail;
-}
-
-
-static uint16_t
-virtual_ethdev_rx_burst_success(void *queue __rte_unused,
- struct rte_mbuf **bufs,
- uint16_t nb_pkts)
-{
- struct rte_eth_dev *vrtl_eth_dev;
- struct virtual_ethdev_queue *pq_map;
- struct virtual_ethdev_private *dev_private;
-
- int rx_count, i;
-
- pq_map = (struct virtual_ethdev_queue *)queue;
- vrtl_eth_dev = &rte_eth_devices[pq_map->port_id];
- dev_private = vrtl_eth_dev->data->dev_private;
-
- rx_count = rte_ring_dequeue_burst(dev_private->rx_queue, (void **) bufs,
- nb_pkts);
-
- /* increments ipackets count */
- dev_private->eth_stats.ipackets += rx_count;
-
- /* increments ibytes count */
- for (i = 0; i < rx_count; i++)
- dev_private->eth_stats.ibytes += rte_pktmbuf_pkt_len(bufs[i]);
-
- return rx_count;
-}
-
-static uint16_t
-virtual_ethdev_rx_burst_fail(void *queue __rte_unused,
- struct rte_mbuf **bufs __rte_unused,
- uint16_t nb_pkts __rte_unused)
-{
- return 0;
-}
-
-static uint16_t
-virtual_ethdev_tx_burst_success(void *queue, struct rte_mbuf **bufs,
- uint16_t nb_pkts)
-{
- struct virtual_ethdev_queue *tx_q = (struct virtual_ethdev_queue *)queue;
-
- struct rte_eth_dev *vrtl_eth_dev;
- struct virtual_ethdev_private *dev_private;
-
- int i;
-
- vrtl_eth_dev = &rte_eth_devices[tx_q->port_id];
- dev_private = vrtl_eth_dev->data->dev_private;
-
- if (!vrtl_eth_dev->data->dev_link.link_status)
- nb_pkts = 0;
- else
- nb_pkts = rte_ring_enqueue_burst(dev_private->tx_queue, (void **)bufs,
- nb_pkts);
-
- /* increment opacket count */
- dev_private->eth_stats.opackets += nb_pkts;
-
- /* increment obytes count */
- for (i = 0; i < nb_pkts; i++)
- dev_private->eth_stats.obytes += rte_pktmbuf_pkt_len(bufs[i]);
-
- return nb_pkts;
-}
-
-static uint16_t
-virtual_ethdev_tx_burst_fail(void *queue, struct rte_mbuf **bufs,
- uint16_t nb_pkts)
-{
- struct rte_eth_dev *vrtl_eth_dev = NULL;
- struct virtual_ethdev_queue *tx_q = NULL;
- struct virtual_ethdev_private *dev_private = NULL;
-
- int i;
-
- tx_q = (struct virtual_ethdev_queue *)queue;
- vrtl_eth_dev = &rte_eth_devices[tx_q->port_id];
- dev_private = vrtl_eth_dev->data->dev_private;
-
- if (dev_private->tx_burst_fail_count < nb_pkts) {
- int successfully_txd = nb_pkts - dev_private->tx_burst_fail_count;
-
- /* increment opacket count */
- dev_private->eth_stats.opackets += successfully_txd;
-
- /* free packets in burst */
- for (i = 0; i < successfully_txd; i++) {
- /* free packets in burst */
- if (bufs[i] != NULL)
- rte_pktmbuf_free(bufs[i]);
-
- bufs[i] = NULL;
- }
-
- return successfully_txd;
- }
-
- return 0;
-}
-
-
-void
-virtual_ethdev_rx_burst_fn_set_success(uint8_t port_id, uint8_t success)
-{
- struct rte_eth_dev *vrtl_eth_dev = &rte_eth_devices[port_id];
-
- if (success)
- vrtl_eth_dev->rx_pkt_burst = virtual_ethdev_rx_burst_success;
- else
- vrtl_eth_dev->rx_pkt_burst = virtual_ethdev_rx_burst_fail;
-}
-
-
-void
-virtual_ethdev_tx_burst_fn_set_success(uint8_t port_id, uint8_t success)
-{
- struct virtual_ethdev_private *dev_private = NULL;
- struct rte_eth_dev *vrtl_eth_dev = &rte_eth_devices[port_id];
-
- dev_private = vrtl_eth_dev->data->dev_private;
-
- if (success)
- vrtl_eth_dev->tx_pkt_burst = virtual_ethdev_tx_burst_success;
- else
- vrtl_eth_dev->tx_pkt_burst = virtual_ethdev_tx_burst_fail;
-
- dev_private->tx_burst_fail_count = 0;
-}
-
-void
-virtual_ethdev_tx_burst_fn_set_tx_pkt_fail_count(uint8_t port_id,
- uint8_t packet_fail_count)
-{
- struct virtual_ethdev_private *dev_private = NULL;
- struct rte_eth_dev *vrtl_eth_dev = &rte_eth_devices[port_id];
-
-
- dev_private = vrtl_eth_dev->data->dev_private;
- dev_private->tx_burst_fail_count = packet_fail_count;
-}
-
-void
-virtual_ethdev_set_link_status(uint8_t port_id, uint8_t link_status)
-{
- struct rte_eth_dev *vrtl_eth_dev = &rte_eth_devices[port_id];
-
- vrtl_eth_dev->data->dev_link.link_status = link_status;
-}
-
-void
-virtual_ethdev_simulate_link_status_interrupt(uint8_t port_id,
- uint8_t link_status)
-{
- struct rte_eth_dev *vrtl_eth_dev = &rte_eth_devices[port_id];
-
- vrtl_eth_dev->data->dev_link.link_status = link_status;
-
- _rte_eth_dev_callback_process(vrtl_eth_dev, RTE_ETH_EVENT_INTR_LSC, NULL);
-}
-
-int
-virtual_ethdev_add_mbufs_to_rx_queue(uint8_t port_id,
- struct rte_mbuf **pkt_burst, int burst_length)
-{
- struct rte_eth_dev *vrtl_eth_dev = &rte_eth_devices[port_id];
- struct virtual_ethdev_private *dev_private =
- vrtl_eth_dev->data->dev_private;
-
- return rte_ring_enqueue_burst(dev_private->rx_queue, (void **)pkt_burst,
- burst_length);
-}
-
-int
-virtual_ethdev_get_mbufs_from_tx_queue(uint8_t port_id,
- struct rte_mbuf **pkt_burst, int burst_length)
-{
- struct virtual_ethdev_private *dev_private;
- struct rte_eth_dev *vrtl_eth_dev = &rte_eth_devices[port_id];
-
- dev_private = vrtl_eth_dev->data->dev_private;
- return rte_ring_dequeue_burst(dev_private->tx_queue, (void **)pkt_burst,
- burst_length);
-}
-
-static uint8_t
-get_number_of_sockets(void)
-{
- int sockets = 0;
- int i;
- const struct rte_memseg *ms = rte_eal_get_physmem_layout();
-
- for (i = 0; i < RTE_MAX_MEMSEG && ms[i].addr != NULL; i++) {
- if (sockets < ms[i].socket_id)
- sockets = ms[i].socket_id;
- }
- /* Number of sockets = maximum socket_id + 1 */
- return ++sockets;
-}
-
-int
-virtual_ethdev_create(const char *name, struct ether_addr *mac_addr,
- uint8_t socket_id, uint8_t isr_support)
-{
- struct rte_pci_device *pci_dev = NULL;
- struct rte_eth_dev *eth_dev = NULL;
- struct eth_driver *eth_drv = NULL;
- struct rte_pci_driver *pci_drv = NULL;
- struct rte_pci_id *id_table = NULL;
- struct virtual_ethdev_private *dev_private = NULL;
- char name_buf[RTE_RING_NAMESIZE];
-
-
- /* now do all data allocation - for eth_dev structure, dummy pci driver
- * and internal (dev_private) data
- */
-
- if (socket_id >= get_number_of_sockets())
- goto err;
-
- pci_dev = rte_zmalloc_socket(name, sizeof(*pci_dev), 0, socket_id);
- if (pci_dev == NULL)
- goto err;
-
- eth_drv = rte_zmalloc_socket(name, sizeof(*eth_drv), 0, socket_id);
- if (eth_drv == NULL)
- goto err;
-
- pci_drv = rte_zmalloc_socket(name, sizeof(*pci_drv), 0, socket_id);
- if (pci_drv == NULL)
- goto err;
-
- id_table = rte_zmalloc_socket(name, sizeof(*id_table), 0, socket_id);
- if (id_table == NULL)
- goto err;
- id_table->device_id = 0xBEEF;
-
- dev_private = rte_zmalloc_socket(name, sizeof(*dev_private), 0, socket_id);
- if (dev_private == NULL)
- goto err;
-
- snprintf(name_buf, sizeof(name_buf), "%s_rxQ", name);
- dev_private->rx_queue = rte_ring_create(name_buf, MAX_PKT_BURST, socket_id,
- 0);
- if (dev_private->rx_queue == NULL)
- goto err;
-
- snprintf(name_buf, sizeof(name_buf), "%s_txQ", name);
- dev_private->tx_queue = rte_ring_create(name_buf, MAX_PKT_BURST, socket_id,
- 0);
- if (dev_private->tx_queue == NULL)
- goto err;
-
- /* reserve an ethdev entry */
- eth_dev = rte_eth_dev_allocate(name);
- if (eth_dev == NULL)
- goto err;
-
- pci_dev->device.numa_node = socket_id;
- pci_drv->driver.name = virtual_ethdev_driver_name;
- pci_drv->id_table = id_table;
-
- if (isr_support)
- pci_drv->drv_flags |= RTE_PCI_DRV_INTR_LSC;
- else
- pci_drv->drv_flags &= ~RTE_PCI_DRV_INTR_LSC;
-
-
- eth_drv->pci_drv = (struct rte_pci_driver)(*pci_drv);
- eth_dev->driver = eth_drv;
-
- eth_dev->data->nb_rx_queues = (uint16_t)1;
- eth_dev->data->nb_tx_queues = (uint16_t)1;
-
- TAILQ_INIT(&(eth_dev->link_intr_cbs));
-
- eth_dev->data->dev_link.link_status = ETH_LINK_DOWN;
- eth_dev->data->dev_link.link_speed = ETH_SPEED_NUM_10G;
- eth_dev->data->dev_link.link_duplex = ETH_LINK_FULL_DUPLEX;
-
- eth_dev->data->mac_addrs = rte_zmalloc(name, ETHER_ADDR_LEN, 0);
- if (eth_dev->data->mac_addrs == NULL)
- goto err;
-
- memcpy(eth_dev->data->mac_addrs, mac_addr,
- sizeof(*eth_dev->data->mac_addrs));
-
- eth_dev->data->dev_started = 0;
- eth_dev->data->promiscuous = 0;
- eth_dev->data->scattered_rx = 0;
- eth_dev->data->all_multicast = 0;
-
- eth_dev->data->dev_private = dev_private;
-
- /* Copy default device operation functions */
- dev_private->dev_ops = virtual_ethdev_default_dev_ops;
- eth_dev->dev_ops = &dev_private->dev_ops;
-
- eth_dev->pci_dev = pci_dev;
- eth_dev->pci_dev->device.driver = &eth_drv->pci_drv.driver;
-
- eth_dev->rx_pkt_burst = virtual_ethdev_rx_burst_success;
- eth_dev->tx_pkt_burst = virtual_ethdev_tx_burst_success;
-
- return eth_dev->data->port_id;
-
-err:
- rte_free(pci_dev);
- rte_free(pci_drv);
- rte_free(eth_drv);
- rte_free(id_table);
- rte_free(dev_private);
-
- return -1;
-}
diff --git a/app/test/virtual_pmd.h b/app/test/virtual_pmd.h
deleted file mode 100644
index de001884..00000000
--- a/app/test/virtual_pmd.h
+++ /dev/null
@@ -1,104 +0,0 @@
-/*-
- * BSD LICENSE
- *
- * Copyright(c) 2010-2014 Intel Corporation. All rights reserved.
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * * Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * * Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in
- * the documentation and/or other materials provided with the
- * distribution.
- * * Neither the name of Intel Corporation nor the names of its
- * contributors may be used to endorse or promote products derived
- * from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
- * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
- * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#ifndef __VIRTUAL_ETHDEV_H_
-#define __VIRTUAL_ETHDEV_H_
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-#include <rte_ether.h>
-
-int
-virtual_ethdev_init(void);
-
-int
-virtual_ethdev_create(const char *name, struct ether_addr *mac_addr,
- uint8_t socket_id, uint8_t isr_support);
-
-void
-virtual_ethdev_set_link_status(uint8_t port_id, uint8_t link_status);
-
-void
-virtual_ethdev_simulate_link_status_interrupt(uint8_t port_id,
- uint8_t link_status);
-
-int
-virtual_ethdev_add_mbufs_to_rx_queue(uint8_t port_id,
- struct rte_mbuf **pkts_burst, int burst_length);
-
-int
-virtual_ethdev_get_mbufs_from_tx_queue(uint8_t port_id,
- struct rte_mbuf **pkt_burst, int burst_length);
-
-/** Control methods for the dev_ops functions pointer to control the behavior
- * of the Virtual PMD */
-
-void
-virtual_ethdev_start_fn_set_success(uint8_t port_id, uint8_t success);
-
-void
-virtual_ethdev_stop_fn_set_success(uint8_t port_id, uint8_t success);
-
-void
-virtual_ethdev_configure_fn_set_success(uint8_t port_id, uint8_t success);
-
-void
-virtual_ethdev_rx_queue_setup_fn_set_success(uint8_t port_id, uint8_t success);
-
-void
-virtual_ethdev_tx_queue_setup_fn_set_success(uint8_t port_id, uint8_t success);
-
-void
-virtual_ethdev_link_update_fn_set_success(uint8_t port_id, uint8_t success);
-
-void
-virtual_ethdev_rx_burst_fn_set_success(uint8_t port_id, uint8_t success);
-
-void
-virtual_ethdev_tx_burst_fn_set_success(uint8_t port_id, uint8_t success);
-
-/* if a value greater than zero is set for packet_fail_count then virtual
- * device tx burst function will fail that many packet from burst or all
- * packets if packet_fail_count is greater than the number of packets in the
- * burst */
-void
-virtual_ethdev_tx_burst_fn_set_tx_pkt_fail_count(uint8_t port_id,
- uint8_t packet_fail_count);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* __VIRTUAL_ETHDEV_H_ */