X-Git-Url: https://gerrit.fd.io/r/gitweb?a=blobdiff_plain;f=test%2Ftest_flowprobe.py;h=517729d8591b7851eea0b9e6b844c88457c65944;hb=refs%2Fchanges%2F41%2F33441%2F3;hp=5ffb7ce8efcdcf5482febc2b497102ee63e400cc;hpb=ec850a80446332f0423972c970042ad616a05f74;p=vpp.git diff --git a/test/test_flowprobe.py b/test/test_flowprobe.py index 5ffb7ce8efc..517729d8591 100644 --- a/test/test_flowprobe.py +++ b/test/test_flowprobe.py @@ -1,4 +1,4 @@ -#!/usr/bin/env python +#!/usr/bin/env python3 from __future__ import print_function import binascii import random @@ -12,12 +12,17 @@ from scapy.layers.l2 import Ether from scapy.layers.inet import IP, TCP, UDP from scapy.layers.inet6 import IPv6 +from framework import tag_fixme_vpp_workers from framework import VppTestCase, VppTestRunner, running_extended_tests +from framework import tag_run_solo from vpp_object import VppObject from vpp_pg_interface import CaptureTimeoutError from util import ppp from ipfix import IPFIX, Set, Template, Data, IPFIXDecoder from vpp_ip_route import VppIpRoute, VppRoutePath +from vpp_papi.macaddress import mac_ntop +from socket import inet_ntop +from vpp_papi import VppEnum class VppCFLOW(VppObject): @@ -40,10 +45,20 @@ class VppCFLOW(VppObject): def add_vpp_config(self): self.enable_exporter() + l2_flag = 0 + l3_flag = 0 + l4_flag = 0 + if 'l2' in self._collect.lower(): + l2_flag = (VppEnum.vl_api_flowprobe_record_flags_t. + FLOWPROBE_RECORD_FLAG_L2) + if 'l3' in self._collect.lower(): + l3_flag = (VppEnum.vl_api_flowprobe_record_flags_t. + FLOWPROBE_RECORD_FLAG_L3) + if 'l4' in self._collect.lower(): + l4_flag = (VppEnum.vl_api_flowprobe_record_flags_t. + FLOWPROBE_RECORD_FLAG_L4) self._test.vapi.flowprobe_params( - record_l2=1 if 'l2' in self._collect.lower() else 0, - record_l3=1 if 'l3' in self._collect.lower() else 0, - record_l4=1 if 'l4' in self._collect.lower() else 0, + record_flags=(l2_flag | l3_flag | l4_flag), active_timer=self._active, passive_timer=self._passive) self.enable_flowprobe_feature() self._test.vapi.cli("ipfix flush") @@ -57,8 +72,8 @@ class VppCFLOW(VppObject): def enable_exporter(self): self._test.vapi.set_ipfix_exporter( - collector_address=self._test.pg0.remote_ip4n, - src_address=self._test.pg0.local_ip4n, + collector_address=self._test.pg0.remote_ip4, + src_address=self._test.pg0.local_ip4, path_mtu=self._mtu, template_interval=self._timeout) @@ -234,7 +249,7 @@ class MethodHolder(VppTestCase): ip_layer = capture[0][IPv6] if data_set is not None: for record in data: - # skip flow if in/out gress interface is 0 + # skip flow if ingress/egress interface is 0 if int(binascii.hexlify(record[10]), 16) == 0: continue if int(binascii.hexlify(record[14]), 16) == 0: @@ -330,6 +345,8 @@ class MethodHolder(VppTestCase): return p +@tag_run_solo +@tag_fixme_vpp_workers class Flowprobe(MethodHolder): """Template verification, timer tests""" @@ -415,7 +432,7 @@ class Flowprobe(MethodHolder): src=self.pg7.remote_mac) / IP(src=self.pg7.remote_ip4, dst="9.0.0.100") / TCP(sport=1234, dport=4321, flags=80) / - Raw('\xa5' * 100))] + Raw(b'\xa5' * 100))] nowUTC = int(time.time()) nowUNIX = nowUTC+2208988800 @@ -438,11 +455,9 @@ class Flowprobe(MethodHolder): # packets self.assertEqual(int(binascii.hexlify(record[2]), 16), 1) # src mac - self.assertEqual(':'.join(re.findall('..', record[56].encode( - 'hex'))), self.pg8.local_mac) + self.assertEqual(mac_ntop(record[56]), self.pg8.local_mac) # dst mac - self.assertEqual(':'.join(re.findall('..', record[80].encode( - 'hex'))), self.pg8.remote_mac) + self.assertEqual(mac_ntop(record[80]), self.pg8.remote_mac) flowTimestamp = int(binascii.hexlify(record[156]), 16) >> 32 # flow start timestamp self.assertAlmostEqual(flowTimestamp, nowUNIX, delta=1) @@ -452,15 +467,11 @@ class Flowprobe(MethodHolder): # ethernet type self.assertEqual(int(binascii.hexlify(record[256]), 16), 8) # src ip - self.assertEqual('.'.join(re.findall('..', record[8].encode( - 'hex'))), - '.'.join('{:02x}'.format(int(n)) for n in - self.pg7.remote_ip4.split('.'))) + self.assertEqual(inet_ntop(socket.AF_INET, record[8]), + self.pg7.remote_ip4) # dst ip - self.assertEqual('.'.join(re.findall('..', record[12].encode( - 'hex'))), - '.'.join('{:02x}'.format(int(n)) for n in - "9.0.0.100".split('.'))) + self.assertEqual(inet_ntop(socket.AF_INET, record[12]), + "9.0.0.100") # protocol (TCP) self.assertEqual(int(binascii.hexlify(record[4]), 16), 6) # src port @@ -474,6 +485,7 @@ class Flowprobe(MethodHolder): self.logger.info("FFP_TEST_FINISH_0000") +@tag_fixme_vpp_workers class Datapath(MethodHolder): """collect information on Ethernet, IP4 and IP6 datapath (no timers)""" @@ -494,7 +506,7 @@ class Datapath(MethodHolder): ipfix.add_vpp_config() # template packet should arrive immediately - self.vapi.cli("ipfix flush") + self.vapi.ipfix_flush() ipfix.verify_templates(timeout=3, count=1) self.collector.get_capture(1) @@ -518,7 +530,7 @@ class Datapath(MethodHolder): capture = self.send_packets() # make sure the one packet we expect actually showed up - self.vapi.cli("ipfix flush") + self.vapi.ipfix_flush() cflow = self.wait_for_cflow_packet(self.collector, templates[0]) self.verify_cflow_data_detail(ipfix_decoder, capture, cflow, {2: 'packets', 256: 8}) @@ -544,7 +556,7 @@ class Datapath(MethodHolder): capture = self.send_packets() # make sure the one packet we expect actually showed up - self.vapi.cli("ipfix flush") + self.vapi.ipfix_flush() cflow = self.wait_for_cflow_packet(self.collector, templates[0]) self.verify_cflow_data_detail(ipfix_decoder, capture, cflow, {2: 'packets', 4: 17, @@ -572,7 +584,7 @@ class Datapath(MethodHolder): capture = self.send_packets() # make sure the one packet we expect actually showed up - self.vapi.cli("ipfix flush") + self.vapi.ipfix_flush() cflow = self.wait_for_cflow_packet(self.collector, templates[0]) self.verify_cflow_data_detail(ipfix_decoder, capture, cflow, {2: 'packets', 7: 'sport', 11: 'dport'}) @@ -592,7 +604,7 @@ class Datapath(MethodHolder): ipfix.add_vpp_config() # template packet should arrive immediately - self.vapi.cli("ipfix flush") + self.vapi.ipfix_flush() ipfix.verify_templates(timeout=3, count=1) self.collector.get_capture(1) @@ -617,7 +629,7 @@ class Datapath(MethodHolder): capture = self.send_packets(src_if=self.pg3, dst_if=self.pg4) # make sure the one packet we expect actually showed up - self.vapi.cli("ipfix flush") + self.vapi.ipfix_flush() cflow = self.wait_for_cflow_packet(self.collector, templates[0]) self.verify_cflow_data_detail(ipfix_decoder, capture, cflow, {2: 'packets', 256: 8}) @@ -645,7 +657,7 @@ class Datapath(MethodHolder): capture = self.send_packets(src_if=self.pg3, dst_if=self.pg4) # make sure the one packet we expect actually showed up - self.vapi.cli("ipfix flush") + self.vapi.ipfix_flush() cflow = self.wait_for_cflow_packet(self.collector, templates[0]) self.verify_cflow_data_detail(ipfix_decoder, capture, cflow, {1: 'octets', 2: 'packets', @@ -674,7 +686,7 @@ class Datapath(MethodHolder): capture = self.send_packets(src_if=self.pg3, dst_if=self.pg4) # make sure the one packet we expect actually showed up - self.vapi.cli("ipfix flush") + self.vapi.ipfix_flush() cflow = self.wait_for_cflow_packet(self.collector, templates[0]) self.verify_cflow_data_detail(ipfix_decoder, capture, cflow, {2: 'packets', 7: 'sport', 11: 'dport'}) @@ -719,7 +731,7 @@ class Datapath(MethodHolder): capture = self.send_packets(src_if=self.pg5, dst_if=self.pg6) # make sure the one packet we expect actually showed up - self.vapi.cli("ipfix flush") + self.vapi.ipfix_flush() cflow = self.wait_for_cflow_packet(self.collector, templates[0]) self.verify_cflow_data_detail(ipfix_decoder, capture, cflow, {2: 'packets', 256: 56710}, @@ -749,7 +761,7 @@ class Datapath(MethodHolder): capture = self.send_packets(src_if=self.pg5, dst_if=self.pg6) # make sure the one packet we expect actually showed up - self.vapi.cli("ipfix flush") + self.vapi.ipfix_flush() cflow = self.wait_for_cflow_packet(self.collector, templates[0]) self.verify_cflow_data_detail(ipfix_decoder, capture, cflow, {2: 'packets', @@ -780,7 +792,7 @@ class Datapath(MethodHolder): capture = self.send_packets(src_if=self.pg5, dst_if=self.pg6) # make sure the one packet we expect actually showed up - self.vapi.cli("ipfix flush") + self.vapi.ipfix_flush() cflow = self.wait_for_cflow_packet(self.collector, templates[0]) self.verify_cflow_data_detail(ipfix_decoder, capture, cflow, {2: 'packets', 7: 'sport', 11: 'dport'}, @@ -809,7 +821,7 @@ class Datapath(MethodHolder): capture = self.send_packets() # make sure the one packet we expect actually showed up - self.vapi.cli("ipfix flush") + self.vapi.ipfix_flush() cflow = self.wait_for_cflow_packet(self.collector, templates[1]) self.verify_cflow_data_notimer(ipfix_decoder, capture, [cflow]) self.collector.get_capture(4) @@ -828,7 +840,7 @@ class Datapath(MethodHolder): ipfix_decoder = IPFIXDecoder() # template packet should arrive immediately - self.vapi.cli("ipfix flush") + self.vapi.ipfix_flush() templates = ipfix.verify_templates(ipfix_decoder) self.create_stream(packets=6) @@ -836,7 +848,7 @@ class Datapath(MethodHolder): # make sure the one packet we expect actually showed up cflows = [] - self.vapi.cli("ipfix flush") + self.vapi.ipfix_flush() cflows.append(self.wait_for_cflow_packet(self.collector, templates[1])) cflows.append(self.wait_for_cflow_packet(self.collector, @@ -877,18 +889,18 @@ class DisableIPFIX(MethodHolder): self.send_packets() # make sure the one packet we expect actually showed up - self.vapi.cli("ipfix flush") + self.vapi.ipfix_flush() self.wait_for_cflow_packet(self.collector, templates[1]) self.collector.get_capture(4) - # disble IPFIX + # disable IPFIX ipfix.disable_exporter() self.pg_enable_capture([self.collector]) self.send_packets() # make sure no one packet arrived in 1 minute - self.vapi.cli("ipfix flush") + self.vapi.ipfix_flush() self.wait_for_cflow_packet(self.collector, templates[1], expected=False) self.collector.get_capture(0) @@ -927,19 +939,19 @@ class ReenableIPFIX(MethodHolder): self.send_packets() # make sure the one packet we expect actually showed up - self.vapi.cli("ipfix flush") + self.vapi.ipfix_flush() self.wait_for_cflow_packet(self.collector, templates[1]) self.collector.get_capture(4) # disable IPFIX ipfix.disable_exporter() - self.vapi.cli("ipfix flush") + self.vapi.ipfix_flush() self.pg_enable_capture([self.collector]) self.send_packets() # make sure no one packet arrived in active timer span - self.vapi.cli("ipfix flush") + self.vapi.ipfix_flush() self.wait_for_cflow_packet(self.collector, templates[1], expected=False) self.collector.get_capture(0) @@ -994,18 +1006,18 @@ class DisableFP(MethodHolder): self.send_packets() # make sure the one packet we expect actually showed up - self.vapi.cli("ipfix flush") + self.vapi.ipfix_flush() self.wait_for_cflow_packet(self.collector, templates[1]) self.collector.get_capture(4) - # disble IPFIX + # disable IPFIX ipfix.disable_flowprobe_feature() self.pg_enable_capture([self.collector]) self.send_packets() # make sure no one packet arrived in active timer span - self.vapi.cli("ipfix flush") + self.vapi.ipfix_flush() self.wait_for_cflow_packet(self.collector, templates[1], expected=False) self.collector.get_capture(0) @@ -1038,39 +1050,39 @@ class ReenableFP(MethodHolder): ipfix_decoder = IPFIXDecoder() # template packet should arrive immediately - self.vapi.cli("ipfix flush") + self.vapi.ipfix_flush() templates = ipfix.verify_templates(ipfix_decoder, timeout=3) self.create_stream() self.send_packets() # make sure the one packet we expect actually showed up - self.vapi.cli("ipfix flush") + self.vapi.ipfix_flush() self.wait_for_cflow_packet(self.collector, templates[1], 5) self.collector.get_capture(4) - # disble FPP feature + # disable FPP feature ipfix.disable_flowprobe_feature() self.pg_enable_capture([self.collector]) self.send_packets() # make sure no one packet arrived in active timer span - self.vapi.cli("ipfix flush") + self.vapi.ipfix_flush() self.wait_for_cflow_packet(self.collector, templates[1], 5, expected=False) self.collector.get_capture(0) # enable FPP feature ipfix.enable_flowprobe_feature() - self.vapi.cli("ipfix flush") + self.vapi.ipfix_flush() templates = ipfix.verify_templates(ipfix_decoder, timeout=3) self.send_packets() # make sure the next packets (templates and data) we expect actually # showed up - self.vapi.cli("ipfix flush") + self.vapi.ipfix_flush() self.wait_for_cflow_packet(self.collector, templates[1], 5) self.collector.get_capture(4)