def test_qos_marking_dscp_on_vhost(self): ''' Create qos-config1 for remarking DSCP 1 to fc1(DSCP 10) Create qos-config2 for remarking DSCP 0 to fc2(DSCP 20) for fabric Have VMs A and B Apply qos-config1 to vmi on VM A and validate the marking happens as per fc1. Apply qos-config2 on vhost interface and verify that all packets going out of vhost interface are marked as per fc2 ''' fc_ids= self.fc_id_obj.get_free_fc_ids(2) fcs = [{'fc_id': fc_ids[0], 'dscp': 10, 'dot1p': 5, 'exp': 1}, {'fc_id': fc_ids[1], 'dscp': 20, 'dot1p': 6, 'exp': 2}] self.setup_fcs(fcs) dscp_map_vmi = {1: fc_ids[0]} dscp_map_vhost = {0: fc_ids[1]} qos_fixture1 = self.setup_qos_config(dscp_map=dscp_map_vmi) qos_fixture2 = self.setup_qos_config(dscp_map=dscp_map_vhost, qos_config_type='vhost') vn1_vm1_vmi_id = self.vn1_vm1_fixture.get_vmi_ids().values()[0] self.setup_qos_config_on_vmi(qos_fixture1, vn1_vm1_vmi_id) validate_method_args = { 'src_vm_fixture': self.vn1_vm1_fixture, 'dest_vm_fixture': self.vn1_vm2_fixture, 'dscp': dscp_map_vmi.keys()[0], 'expected_dscp': fcs[0]['dscp'], 'expected_dot1p': fcs[0]['dot1p'], 'src_compute_fixture': self.vn1_vm1_compute_fixture} assert self.validate_packet_qos_marking(**validate_method_args) interface = self.vn1_vm1_compute_fixture.agent_physical_interface username = self.inputs.host_data[self.vn1_vm1_compute_fixture.ip]\ ['username'] password = self.inputs.host_data[self.vn1_vm1_compute_fixture.ip]\ ['password'] compute_index = self.inputs.compute_names.index(self.first_node_name) traffic_obj = TrafficAnalyzer(interface, self.vn1_vm1_compute_fixture, username, password, src_ip=self.inputs.compute_control_ips[ compute_index], dest_port=5269, protocol='tcp', logger=self.logger) session,pcap = traffic_obj.packet_capture_start() sleep(10) traffic_obj.packet_capture_stop() assert traffic_obj.verify_packets("dot1p_dscp", pcap_path_with_file_name = pcap, expected_count=1, dscp=fcs[1]['dscp'], dot1p=fcs[1]['dot1p'])
def _generate_scapy_traffic(self, src_vm_fixture, src_compute_fixture, interface, encap=None, username=None, password=None, interval=1, count=1, **kwargs): params = {} params['ether'] = kwargs.get('ether', {}) params['dot1q'] = kwargs.get('dot1q', {}) params['ip'] = kwargs.get('ip', {}) params['ipv6'] = kwargs.get('ipv6', {}) params['tcp'] = kwargs.get('tcp', {}) params['udp'] = kwargs.get('udp', {}) username = username or self.inputs.host_data[ src_compute_fixture.ip]['username'] password = password or self.inputs.host_data[ src_compute_fixture.ip]['password'] scapy_obj = ScapyTraffic(src_vm_fixture, interval=interval, count=count, **params) scapy_obj.start() traffic_obj = TrafficAnalyzer(interface, src_compute_fixture, username, password, logger=self.logger, encap_type=encap) return traffic_obj, scapy_obj
def test_qos_marking_dscp_on_vhost(self): ''' Create qos-config1 for remarking DSCP 1 to fc1(DSCP 10) Create qos-config2 for remarking DSCP 0 to fc2(DSCP 20) for fabric Have VMs A and B Apply qos-config1 to vmi on VM A and validate the marking happens as per fc1. Apply qos-config2 on vhost interface and verify that all packets going out of vhost interface are marked as per fc2 ''' fc_ids = self.fc_id_obj.get_free_fc_ids(2) fcs = [{ 'fc_id': fc_ids[0], 'dscp': 10, 'dot1p': 5, 'exp': 1 }, { 'fc_id': fc_ids[1], 'dscp': 20, 'dot1p': 6, 'exp': 2 }] self.setup_fcs(fcs) dscp_map_vmi = {1: fc_ids[0]} dscp_map_vhost = {0: fc_ids[1]} qos_fixture1 = self.setup_qos_config(dscp_map=dscp_map_vmi) qos_fixture2 = self.setup_qos_config(dscp_map=dscp_map_vhost, qos_config_type='vhost') vn1_vm1_vmi_id = self.vn1_vm1_fixture.get_vmi_ids().values()[0] self.setup_qos_config_on_vmi(qos_fixture1, vn1_vm1_vmi_id) validate_method_args = { 'src_vm_fixture': self.vn1_vm1_fixture, 'dest_vm_fixture': self.vn1_vm2_fixture, 'dscp': dscp_map_vmi.keys()[0], 'expected_dscp': fcs[0]['dscp'], 'expected_dot1p': fcs[0]['dot1p'], 'src_compute_fixture': self.vn1_vm1_compute_fixture } assert self.validate_packet_qos_marking(**validate_method_args) interface = self.vn1_vm1_compute_fixture.agent_physical_interface username = self.inputs.host_data[self.vn1_vm1_compute_fixture.ip]\ ['username'] password = self.inputs.host_data[self.vn1_vm1_compute_fixture.ip]\ ['password'] traffic_obj = TrafficAnalyzer( interface, self.vn1_vm1_compute_fixture, username, password, src_ip=self.inputs.compute_control_ips[0], dest_port=5269, protocol='tcp', logger=self.logger) session, pcap = traffic_obj.packet_capture_start() sleep(10) traffic_obj.packet_capture_stop() assert traffic_obj.verify_packets("dot1p_dscp", pcap_path_with_file_name=pcap, expected_count=1, dscp=fcs[1]['dscp'], dot1p=fcs[1]['dot1p'])
def _generate_hping_traffic(self, src_vm_fixture, src_compute_fixture, interface, dest_ip=None, src_port=None, dest_port=None, encap=None, username=None, password=None, interval=1, count=1, vrf_id=None, proto=None, **kwargs): udp = kwargs.get('udp', False) tos = kwargs.get('tos', None) username = username or self.inputs.host_data[ src_compute_fixture.ip]['username'] password = password or self.inputs.host_data[ src_compute_fixture.ip]['password'] src_ip = src_vm_fixture.vm_ip hping_obj = Hping3(src_vm_fixture, dest_ip, destport=dest_port, baseport=src_port, count=count, interval=interval, udp=udp, tos=tos, keep=True, numeric=True) hping_obj.start(wait=kwargs.get('wait', False)) sleep(5) if encap == "MPLSoGRE": traffic_obj = TrafficAnalyzer(interface, src_compute_fixture, username, password, src_ip=src_ip, dest_ip=dest_ip, logger=self.logger, encap_type=encap) else: fwd_flow, rev_flow = src_compute_fixture.get_flow_entry( source_ip=src_ip, dest_ip=dest_ip, proto=proto, source_port=src_port, dest_port=dest_port, vrf_id=vrf_id) if not fwd_flow or not rev_flow: self.logger.error( 'Flow not created. Cannot proceed with analysis') return False src_port1 = fwd_flow.dump()['underlay_udp_sport'] if src_port1 == '0': self.logger.error('Flow does not seem active..something is ' 'wrong. Cannot proceed') self.logger.debug('Fwd flow :%s, Rev flow: %s' % (fwd_flow.dump(), rev_flow.dump())) return False traffic_obj = TrafficAnalyzer(interface, src_compute_fixture, username, password, src_port=src_port1, protocol='udp', logger=self.logger, encap_type=encap) return traffic_obj, hping_obj