Пример #1
0
 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'])
Пример #2
0
 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
Пример #3
0
 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'])
Пример #4
0
 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