verify cflow packet fields
(self)
| 451 | self.logger.info("FFP_TEST_FINISH_0002") |
| 452 | |
| 453 | def test_cflow_packet(self): |
| 454 | """verify cflow packet fields""" |
| 455 | self.logger.info("FFP_TEST_START_0000") |
| 456 | self.pg_enable_capture(self.pg_interfaces) |
| 457 | self.pkts = [] |
| 458 | |
| 459 | ipfix = VppCFLOW( |
| 460 | test=self, intf="pg8", datapath="ip4", layer="l2 l3 l4", active=2 |
| 461 | ) |
| 462 | ipfix.add_vpp_config() |
| 463 | |
| 464 | route_9001 = VppIpRoute( |
| 465 | self, |
| 466 | "9.0.0.0", |
| 467 | 24, |
| 468 | [VppRoutePath(self.pg8._remote_hosts[0].ip4, self.pg8.sw_if_index)], |
| 469 | ) |
| 470 | route_9001.add_vpp_config() |
| 471 | |
| 472 | ipfix_decoder = IPFIXDecoder() |
| 473 | templates = ipfix.verify_templates(ipfix_decoder, count=1) |
| 474 | |
| 475 | self.pkts = [ |
| 476 | ( |
| 477 | Ether(dst=self.pg7.local_mac, src=self.pg7.remote_mac) |
| 478 | / IP(src=self.pg7.remote_ip4, dst="9.0.0.100") |
| 479 | / TCP(sport=1234, dport=4321, flags=80) |
| 480 | / Raw(b"\xa5" * 100) |
| 481 | ) |
| 482 | ] |
| 483 | |
| 484 | nowUTC = int(time.time()) |
| 485 | nowUNIX = nowUTC + 2208988800 |
| 486 | self.send_packets(src_if=self.pg7, dst_if=self.pg8) |
| 487 | |
| 488 | cflow = self.wait_for_cflow_packet(self.collector, templates[0], 10) |
| 489 | self.collector.get_capture(2) |
| 490 | |
| 491 | if cflow[0].haslayer(IPFIX): |
| 492 | self.assertEqual(cflow[IPFIX].version, 10) |
| 493 | self.assertEqual(cflow[IPFIX].observationDomainID, 1) |
| 494 | self.assertEqual(cflow[IPFIX].sequenceNumber, 0) |
| 495 | self.assertAlmostEqual(cflow[IPFIX].exportTime, nowUTC, delta=5) |
| 496 | if cflow.haslayer(Data): |
| 497 | record = ipfix_decoder.decode_data_set(cflow[0].getlayer(Set))[0] |
| 498 | # ingress interface |
| 499 | self.assertEqual(int(binascii.hexlify(record[10]), 16), 8) |
| 500 | # egress interface |
| 501 | self.assertEqual(int(binascii.hexlify(record[14]), 16), 9) |
| 502 | # direction |
| 503 | self.assertEqual(int(binascii.hexlify(record[61]), 16), 1) |
| 504 | # packets |
| 505 | self.assertEqual(int(binascii.hexlify(record[2]), 16), 1) |
| 506 | # src mac |
| 507 | self.assertEqual(mac_ntop(record[56]), self.pg8.local_mac) |
| 508 | # dst mac |
| 509 | self.assertEqual(mac_ntop(record[80]), self.pg8.remote_mac) |
| 510 | flowTimestamp = int(binascii.hexlify(record[156]), 16) >> 32 |
nothing calls this directly
no test coverage detected