aboutsummaryrefslogtreecommitdiffstats
path: root/src/plugins
AgeCommit message (Expand)AuthorFilesLines
2018-10-30dpdk: .function should be removed for mutiarch nodesDamjan Marion2-4/+0
2018-10-29migrate ipsec to new multiarch infraKlement Sekera2-31/+10
2018-10-28session: move test to unittest pluginFlorin Coras2-2/+1759
2018-10-28physmem: coverity issuesDamjan Marion1-3/+0
2018-10-27vmxnet3: add logging support to the control plane [VPP-1470]Steven4-17/+87
2018-10-26acl-plugin: fix the node multiarch function selectionAndrew Yourtchenko2-33/+22
2018-10-26vmxnet3: enable promiscuous modeSteven1-1/+1
2018-10-25acl-plugin: "show acl-plugin acl" ACE# is truncated to 4 digits in outputAndrew Yourtchenko1-1/+1
2018-10-25Use correct name to register ABF plugin with ACLsNeale Ranns1-1/+1
2018-10-25pmalloc: support for 4K pagesDamjan Marion1-1/+1
2018-10-25Add x86_64 perfmon tablesDave Barach3-20/+10
2018-10-24dpdk: fix hugepage pre-allocDamjan Marion1-1/+2
2018-10-24acl-plugin: introduce a format function for l4 session keyAndrew Yourtchenko3-48/+77
2018-10-24vppinfra: autodetect default hugepage sizeDamjan Marion1-3/+5
2018-10-23VPP-1474: fix coverity warningDave Barach1-0/+3
2018-10-23perfmon.c: Register additional cpuids.Paul Vinciguerra1-4/+7
2018-10-23Numa-aware, growable physical memory allocator (pmalloc)Damjan Marion12-170/+137
2018-10-23dpdk: support 18.11 changes to CRC flagsStephen Hemminger1-7/+7
2018-10-23dpdk: add esp6 decrypt nodes, func declarationsMatthew Smith1-0/+30
2018-10-23c11 safe string handling supportDave Barach98-335/+482
2018-10-22vlib: pci improvementsDamjan Marion6-46/+50
2018-10-22ipsec fix missing node renamesKlement Sekera3-7/+11
2018-10-22vlib: introduce vlib_buffer_get_{pa,va,current_va,current_pa} inlinesDamjan Marion8-70/+61
2018-10-22vppinfra: use log2 page size in hugepage functionsDamjan Marion1-1/+1
2018-10-22X86_64 perf counter pluginDave Barach5-0/+1466
2018-10-22VPP-1420 CDP check memory bounds fixFilip Varga1-4/+17
2018-10-22Fix dereferencing null string in dpdk_early_initJuraj Sloboda1-0/+1
2018-10-22ipsec: split ipsec nodes into ip4/ip6 nodesKlement Sekera3-71/+254
2018-10-22dpdk: use rte_vfio_dma_map API instead of digging for vfio fdDamjan Marion1-63/+17
2018-10-21tcp: count first lost hole (VPP-1465)Florin Coras1-3/+29
2018-10-20dpdk: add netvsc PMDStephen Hemminger3-1/+40
2018-10-20acl-plugin: use the L2 feature arc infrastructure instead of L2 classifier fo...Andrew Yourtchenko3-699/+304
2018-10-20dpdk: use rx/tx_offload_names to formatStephen Hemminger1-38/+53
2018-10-19avf: fix crash in rss key calculationDamjan Marion1-1/+1
2018-10-19NAT44: fix ICMP virtual fragmentation reassembly (VPP-1466)Matus Fabian4-63/+122
2018-10-19vppinfra: add atomic macros for __sync builtinsSirshak Das9-41/+43
2018-10-18tcp: fix sacks lost bytes counting (VPP-1465)Florin Coras1-34/+90
2018-10-18tls: fix connection failures/interrupts at scale (VPP-1464)Florin Coras1-2/+3
2018-10-17acl-plugin: tuplemerge: refresh the pointer to hash-readied ACL entries per e...Andrew Yourtchenko1-0/+2
2018-10-17tcp: avoid sack processing when not needed (VPP-1460)Florin Coras1-1/+1
2018-10-16Fix coverity issue for potentially overflowing of page sizeHaiyang Tan1-3/+3
2018-10-16IGMP: proxy deviceJakub Grajciar15-12/+749
2018-10-16vmxnet3: show vmxnet3 with filtering capability [VPP-1452]Steven3-12/+234
2018-10-16vmxnet3: vmxnet3_test_plugin.so: undefined symbol: format_vlib_pci_addr [VPP-...Steven1-1/+9
2018-10-15dpdk: only look at PCI information on PCI devicesStephen Hemminger5-8/+26
2018-10-12dpdk: support passing log-levelStephen Hemminger1-1/+2
2018-10-12NAT44: identity NAT fix (VPP-1441)Matus Fabian4-32/+118
2018-10-10vppinfra: introduce clib_mem_vm_ext_free() to avoid fd leaksHaiyang Tan1-1/+1
2018-10-10vmxnet3: better error handlingSteven2-20/+42
2018-10-10acl-plugin: reduce the syslog level for debug messagesAndrew Yourtchenko1-5/+6
Vk9KwDgZ29WtKFzuATLFnOtCS46E= -----END RSA PRIVATE KEY----- EOF chmod 600 ${VIRL_PKEY} # # Pick a random host from the array of VIRL servers for every test set run # and attempt to reach it and verify it's status. # # The server must be reachable and have a "status" file with # the content "PRODUCTION" to be selected. # # If the server is not reachable or does not have the correct # status remove it from the array and start again. # # Abort if there are no more servers left in the array. # for index in "${!TEST_GROUPS[@]}"; do VIRL_SERVER[${index}]="" while [[ ! "${VIRL_SERVER[${index}]}" ]]; do num_hosts=${#VIRL_SERVERS[@]} if [ $num_hosts == 0 ] then echo "No more VIRL candidate hosts available, failing." exit 127 fi element=$[ $RANDOM % $num_hosts ] virl_server_candidate=${VIRL_SERVERS[$element]} virl_server_status=$(ssh ${SSH_OPTIONS} ${VIRL_USERNAME}@${virl_server_candidate} cat $VIRL_SERVER_STATUS_FILE 2>&1) echo VIRL HOST $virl_server_candidate status is \"$virl_server_status\" if [ "$virl_server_status" == "$VIRL_SERVER_EXPECTED_STATUS" ] then # Candidate is in good status. Select this server. VIRL_SERVER[${index}]="$virl_server_candidate" else # Candidate is in bad status. Remove from array. VIRL_SERVERS=("${VIRL_SERVERS[@]:0:$element}" "${VIRL_SERVERS[@]:$[$element+1]}") fi done done echo "Selected VIRL servers: ${VIRL_SERVER[@]}" # Temporarily download VPP and DPDK packages from nexus.fd.io DPDK_STABLE_VER=$(cat ${SCRIPT_DIR}/DPDK_STABLE_VER)_amd64 VPP_REPO_URL=$(cat ${SCRIPT_DIR}/VPP_REPO_URL_UBUNTU) VPP_CLASSIFIER="-deb" if [ "${#}" -ne "0" ]; then arr=(${@}) echo ${arr[0]} # DPDK is not part of the vpp build wget -q "${VPP_REPO_URL}/vpp-dpdk-dev/${DPDK_STABLE_VER}/vpp-dpdk-dev-${DPDK_STABLE_VER}${VPP_CLASSIFIER}.deb" || exit wget -q "${VPP_REPO_URL}/vpp-dpdk-dkms/${DPDK_STABLE_VER}/vpp-dpdk-dkms-${DPDK_STABLE_VER}${VPP_CLASSIFIER}.deb" || exit else rm -f *.deb VPP_STABLE_VER=$(cat ${SCRIPT_DIR}/VPP_STABLE_VER_UBUNTU) wget -q "${VPP_REPO_URL}/vpp/${VPP_STABLE_VER}/vpp-${VPP_STABLE_VER}${VPP_CLASSIFIER}.deb" || exit wget -q "${VPP_REPO_URL}/vpp-dbg/${VPP_STABLE_VER}/vpp-dbg-${VPP_STABLE_VER}${VPP_CLASSIFIER}.deb" || exit wget -q "${VPP_REPO_URL}/vpp-dev/${VPP_STABLE_VER}/vpp-dev-${VPP_STABLE_VER}${VPP_CLASSIFIER}.deb" || exit wget -q "${VPP_REPO_URL}/vpp-dpdk-dev/${DPDK_STABLE_VER}/vpp-dpdk-dev-${DPDK_STABLE_VER}${VPP_CLASSIFIER}.deb" || exit wget -q "${VPP_REPO_URL}/vpp-dpdk-dkms/${DPDK_STABLE_VER}/vpp-dpdk-dkms-${DPDK_STABLE_VER}${VPP_CLASSIFIER}.deb" || exit wget -q "${VPP_REPO_URL}/vpp-lib/${VPP_STABLE_VER}/vpp-lib-${VPP_STABLE_VER}${VPP_CLASSIFIER}.deb" || exit wget -q "${VPP_REPO_URL}/vpp-plugins/${VPP_STABLE_VER}/vpp-plugins-${VPP_STABLE_VER}${VPP_CLASSIFIER}.deb" || exit fi VPP_DEBS=(*.deb) echo ${VPP_DEBS[@]} VIRL_DIR_LOC="/tmp" VPP_DEBS_FULL=(${VPP_DEBS[@]}) # Prepend directory location at remote host to deb file list for index in "${!VPP_DEBS_FULL[@]}"; do VPP_DEBS_FULL[${index}]=${VIRL_DIR_LOC}/${VPP_DEBS_FULL[${index}]} done echo "Updated file names: " ${VPP_DEBS_FULL[@]} cat ${VIRL_PKEY} # Copy the files to VIRL hosts DONE="" for index in "${!VIRL_SERVER[@]}"; do # Do not copy files in case they have already been copied to the VIRL host [[ "${DONE[@]}" =~ "${VIRL_SERVER[${index}]}" ]] && copy=0 || copy=1 if [ "${copy}" -eq "0" ]; then echo "VPP deb files have already been copied to the VIRL host ${VIRL_SERVER[${index}]}" else scp ${SSH_OPTIONS} *.deb \ ${VIRL_USERNAME}@${VIRL_SERVER[${index}]}:${VIRL_DIR_LOC}/ result=$? if [ "${result}" -ne "0" ]; then echo "Failed to copy VPP deb files to VIRL host ${VIRL_SERVER[${index}]}" echo ${result} exit ${result} else echo "VPP deb files successfully copied to the VIRL host ${VIRL_SERVER[${index}]}" fi DONE+=(${VIRL_SERVER[${index}]}) fi done # Start a simulation on VIRL server function stop_virl_simulation { for index in "${!VIRL_SERVER[@]}"; do ssh ${SSH_OPTIONS} ${VIRL_USERNAME}@${VIRL_SERVER[${index}]}\ "stop-testcase ${VIRL_SID[${index}]}" done } # Upon script exit, cleanup the simulation execution trap stop_virl_simulation EXIT for index in "${!VIRL_SERVER[@]}"; do echo "Starting simulation nr. ${index} on VIRL server ${VIRL_SERVER[${index}]}" VIRL_SID[${index}]=$(ssh ${SSH_OPTIONS} \ ${VIRL_USERNAME}@${VIRL_SERVER[${index}]} \ "start-testcase -c ${VIRL_TOPOLOGY} -r ${VIRL_RELEASE} ${VPP_DEBS_FULL[@]}") retval=$? if [ ${retval} -ne "0" ]; then echo "VIRL simulation start failed on ${VIRL_SERVER[${index}]}" exit ${retval} fi if [[ ! "${VIRL_SID[${index}]}" =~ session-[a-zA-Z0-9_]{6} ]]; then echo "No VIRL session ID reported." exit 127 fi echo "VIRL simulation started on ${VIRL_SERVER[${index}]}" ssh_do ${VIRL_USERNAME}@${VIRL_SERVER[${index}]}\ cat /scratch/${VIRL_SID[${index}]}/topology.yaml # Download the topology file from VIRL session and rename it scp ${SSH_OPTIONS} \ ${VIRL_USERNAME}@${VIRL_SERVER[${index}]}:/scratch/${VIRL_SID[${index}]}/topology.yaml \ topologies/enabled/topology${index}.yaml retval=$? if [ ${retval} -ne "0" ]; then echo "Failed to copy topology file from VIRL simulation nr. ${index} on VIRL server ${VIRL_SERVER[${index}]}" exit ${retval} fi done echo ${VIRL_SID[@]} virtualenv --system-site-packages env . env/bin/activate echo pip install pip install -r ${SCRIPT_DIR}/requirements.txt for index in "${!VIRL_SERVER[@]}"; do pykwalify -s ${SCRIPT_DIR}/resources/topology_schemas/3_node_topology.sch.yaml \ -s ${SCRIPT_DIR}/resources/topology_schemas/topology.sch.yaml \ -d ${SCRIPT_DIR}/topologies/enabled/topology${index}.yaml \ -vvv if [ "$?" -ne "0" ]; then echo "Topology${index} schema validation failed." echo "However, the tests will start." fi done function run_test_set() { set +x OLDIFS=$IFS IFS="," nr=$(echo $1) rm -f ${LOG_PATH}/test_run${nr}.log exec &> >(while read line; do echo "$(date +'%H:%M:%S') $line" \ >> ${LOG_PATH}/test_run${nr}.log; done;) suite_str="" for suite in ${TEST_GROUPS[${nr}]}; do suite_str="${suite_str} --suite ${SUITE_PATH}.${suite}" done IFS=$OLDIFS echo "PYTHONPATH=`pwd` pybot -L TRACE -W 136\ -v TOPOLOGY_PATH:${SCRIPT_DIR}/topologies/enabled/topology${nr}.yaml \ ${suite_str} \ --include vm_envAND3_node_single_link_topo \ --include vm_envAND3_node_double_link_topo \ --exclude PERFTEST \ --exclude SKIP_PATCH \ --noncritical EXPECTED_FAILING \ --output ${LOG_PATH}/log_test_set_run${nr} \ tests/" PYTHONPATH=`pwd` pybot -L TRACE -W 136\ -v TOPOLOGY_PATH:${SCRIPT_DIR}/topologies/enabled/topology${nr}.yaml \ ${suite_str} \ --include vm_envAND3_node_single_link_topo \ --include vm_envAND3_node_double_link_topo \ --exclude PERFTEST \ --exclude SKIP_PATCH \ --noncritical EXPECTED_FAILING \ --output ${LOG_PATH}/log_test_set_run${nr} \ tests/ local_run_rc=$? echo ${local_run_rc} > ${SHARED_MEMORY_PATH}/rc_test_run${nr} set -x } set +x # Send to background an instance of the run_test_set() function for each number, # record the pid. for index in "${!VIRL_SERVER[@]}"; do run_test_set ${index} & pid=$! echo "Sent to background: Test_set${index} (pid=$pid)" pids[$pid]=$index done echo echo -n "Waiting..." # Watch the stable of background processes. # If a pid goes away, remove it from the array. while [ -n "${pids[*]}" ]; do for i in $(seq 0 9); do sleep 1 echo -n "." done for pid in "${!pids[@]}"; do if ! ps "$pid" >/dev/null; then echo -e "\n" echo "Test_set${pids[$pid]} with PID $pid finished." unset pids[$pid] fi done if [ -z "${!pids[*]}" ]; then break fi echo -n -e "\nStill waiting for test set(s): ${pids[*]} ..." done echo echo "All test set runs finished." echo set -x RC=0 for index in "${!VIRL_SERVER[@]}"; do echo "Test_set${index} log:" cat ${LOG_PATH}/test_run${index}.log RC_PARTIAL_RUN=$(cat ${SHARED_MEMORY_PATH}/rc_test_run${index}) RC=$((RC+RC_PARTIAL_RUN)) rm -f ${SHARED_MEMORY_PATH}/rc_test_run${index} rm -f ${LOG_PATH}/test_run${index}.log echo done # Log the final result if [ "${RC}" -eq "0" ]; then set +x echo echo "========================================================================================================================================" echo "Final result of all test loops: | PASS |" echo "All critical tests have passed." echo "========================================================================================================================================" echo set -x else if [ "${RC}" -eq "1" ]; then HLP_STR="test has" else HLP_STR="tests have" fi set +x echo echo "========================================================================================================================================" echo "Final result of all test loops: | FAIL |" echo "${RC} critical ${HLP_STR} failed." echo "========================================================================================================================================" echo set -x fi echo Post-processing test data... partial_logs="" for index in "${!VIRL_SERVER[@]}"; do partial_logs="${partial_logs} ${LOG_PATH}/log_test_set_run${index}.xml" done # Rebot output post-processing rebot --noncritical EXPECTED_FAILING \ --output output.xml ${partial_logs} # Remove unnecessary log files rm -f ${partial_logs} echo Post-processing finished. if [ ${RC} -eq 0 ]; then RETURN_STATUS=0 else RETURN_STATUS=1 fi exit ${RETURN_STATUS}