예제 #1
0
class Test163b:
    def __init__(self, config, app):
        self.__app = app
        self.__queue_wan = Queue()
        self.__queue_lan = Queue()
        self.__config = config
        self.__interface = None
        self.__pkt = None
        self.__local_addr_ceRouter = None
        self.__sendmsgs = SendMsgs(self.__config)
        self.__config_setup1_1 = ConfigSetup1_1(self.__config)
        self.__wan_device_tr1 = self.__config.get('wan', 'device_wan_tr1')
        self.__wan_mac_tr1 = self.__config.get('wan', 'wan_mac_tr1')
        self.__link_local_addr = self.__config.get('wan', 'link_local_addr')
        self.__all_nodes_addr = self.__config.get('multicast',
                                                  'all_nodes_addr')
        self.__test_desc = self.__config.get('tests', '1.6.3b')
        self.msg = self.__config.get('tests', '1.6.3b')
        self.msg_lan = self.__config.get('tests', '1.6.3b')
        self.addr_ceRouter = None

    def set_flags(self):
        self.__config_setup1_1.set_flag_M(self.__config.get(
            't1.6.3', 'flag_m'))
        self.__config_setup1_1.set_flag_0(self.__config.get(
            't1.6.3', 'flag_o'))
        self.__config_setup1_1.set_flag_chlim(
            self.__config.get('t1.6.3', 'flag_chlim'))
        self.__config_setup1_1.set_flag_L(self.__config.get(
            't1.6.3', 'flag_l'))
        self.__config_setup1_1.set_flag_A(self.__config.get(
            't1.6.3', 'flag_a'))
        self.__config_setup1_1.set_flag_R(self.__config.get(
            't1.6.3', 'flag_r'))
        self.__config_setup1_1.set_flag_prf(
            self.__config.get('t1.6.3', 'flag_prf'))

        self.__config_setup1_1.set_validlifetime(
            self.__config.get('t1.6.3', 'validlifetime'))
        self.__config_setup1_1.set_preferredlifetime(
            self.__config.get('t1.6.3', 'preferredlifetime'))
        self.__config_setup1_1.set_routerlifetime(
            self.__config.get('t1.6.3', 'routerlifetime'))
        self.__config_setup1_1.set_intervalo(
            self.__config.get('t1.6.3', 'intervalo'))
        self.__config_setup1_1.set_pd_prefixlen(
            self.__config.get('t1.6.3', 'pd_prefixlen'))

        self.__config_setup1_1.set_prefix_addr(
            self.__config.get('setup1-1_advertise', 'ia_pd_address'))
        self.__config_setup1_1.set_dhcp_t1(
            self.__config.get('t1.6.3', 'dhcp_t1'))
        self.__config_setup1_1.set_dhcp_t2(
            self.__config.get('t1.6.3', 'dhcp_t2'))
        self.__config_setup1_1.set_dhcp_preflft(
            self.__config.get('t1.6.3', 'dhcp_preflft'))
        self.__config_setup1_1.set_dhcp_validlft(
            self.__config.get('t1.6.3', 'dhcp_validlft'))
        self.__config_setup1_1.set_dhcp_plen(
            self.__config.get('t1.6.3', 'dhcp_plen'))

    def get_addr_ceRouter(self):
        return self.addr_ceRouter

    def get_mac_ceRouter(self):
        return self.mac_ceRouter

    def set_status_lan(self, v):
        self.msg_lan = v

    def get_status_lan(self):
        return self.msg_lan

    def set_status(self, v):
        self.msg = v

    def get_status(self):
        return self.msg

    def run(self):
        @self.__app.route("/LAN", methods=['GET'])
        def envia_lan():

            return self.get_status_lan()

        @self.__app.route("/WAN", methods=['GET'])
        def enviawan():

            return self.get_status()

        self.__packet_sniffer_wan = PacketSniffer('test163b', self.__queue_wan,
                                                  self, self.__config,
                                                  self.__wan_device_tr1)

        self.__packet_sniffer_wan.start()
        self.set_flags()
        logging.info(self.__test_desc)
        t_test = 0
        sent_reconfigure = False
        time_over = False

        t_test1 = 0
        t_test2 = 0

        cache_wan = []

        while not self.__queue_wan.full():
            while self.__queue_wan.empty():
                if sent_reconfigure:
                    if t_test2 < 3:
                        time.sleep(1)
                        t_test2 = t_test2 + 1
                    else:
                        time_over = True
                if t_test < 120:
                    time.sleep(1)
                    t_test = t_test + 1
                    if t_test % 20 == 0:
                        logging.info(
                            'WAN: Tempo limite de teste 120 seg. Tempo atual: '
                            + str(t_test))
                        self.set_status(
                            'WAN: Tempo limite de teste 120 seg. Tempo atual:  '
                            + str(t_test))
                else:
                    self.__packet_sniffer_wan.stop()
                    logging.info('Reprovado: Teste 1.6.3b- TImeout')
                    self.set_status('Reprovado: Teste 1.6.3b TImeout')
                    time.sleep(2)
                    self.set_status(
                        'REPROVADO'
                    )  # Mensagem padrão para o frontEnd atualizar Status
                    return False
            pkt = self.__queue_wan.get()
            cache_wan.append(pkt)
            wrpcap("wan-1.6.3b.cap", cache_wan)

            if not self.__config_setup1_1.get_setup1_1_OK():
                logging.info('WAN: Setup 1.1 em execução')
                self.set_status('WAN: Setup 1.1 em execução')
                if not self.__config_setup1_1.get_disapproved():
                    self.__config_setup1_1.run_setup1_1(pkt)

                else:
                    logging.info(
                        'WAN: Reprovado Teste 1.6.3b - Falha em completar o setup 1.1'
                    )
                    self.set_status(
                        'Reprovado Teste 1.6.3b - Falha em completar o setup 1.1'
                    )
                    time.sleep(2)
                    self.set_status(
                        'REPROVADO'
                    )  # Mensagem padrão para o frontEnd atualizar Status
                    self.__packet_sniffer_wan.stop()
                    return False

                #self.__config_setup1_1.run_setup1_1(pkt)
            else:

                # self.__config_setup1_1.set_xid()
                if pkt.haslayer(DHCP6_Renew):

                    logging.info(pkt.show())

                    self.__packet_sniffer_wan.stop()
                    logging.info(
                        'Aprovado: Teste 1.6.3.b. recebeu DHCP Renew apos DHCP Reconfigure'
                    )
                    self.set_status(
                        'Aprovado: Teste 1.6.3.b. recebeu DHCP Renew apos DHCP Reconfigure'
                    )
                    time.sleep(2)
                    self.set_status(
                        'APROVADO'
                    )  # Mensagem padrão para o frontEnd atualizar Status

                    return True

                elif time_over:

                    if not sent_reconfigure:
                        self.__packet_sniffer_wan.stop()
                        logging.info(
                            'Falha: Teste 1.6.3.b. Tempo finalizado mas Não Enviou DHCP Reconfigure'
                        )
                        self.set_status(
                            'Falha: Teste 1.6.3.b. Tempo finalizado mas Não Enviou DHCP Reconfigure'
                        )
                        time.sleep(2)
                        self.set_status(
                            'REPROVADO'
                        )  # Mensagem padrão para o frontEnd atualizar Status

                        return False
                    else:
                        self.__packet_sniffer_wan.stop()
                        logging.info(
                            'Falha: Teste 1.6.3.b. Tempo finalizado mas Não Recebeu Renew'
                        )
                        self.set_status(
                            'Falha: Teste 1.6.3.b. Tempo finalizado mas Não Recebeu Renew'
                        )
                        time.sleep(2)
                        self.set_status(
                            'REPROVADO'
                        )  # Mensagem padrão para o frontEnd atualizar Status

                        return False

                if not sent_reconfigure:
                    time.sleep(3)
                    logging.info('WAN: Envio de DHCP6 reconfigure')
                    self.set_status('WAN:  - Envio de DHCP6 reconfigure')
                    self.__config_setup1_1.set_ipv6_src(
                        self.__config.get('wan', 'link_local_addr'))

                    self.__config_setup1_1.set_ipv6_dst(
                        self.__config_setup1_1.get_local_addr_ceRouter())

                    self.__config_setup1_1.set_ether_src(
                        self.__config.get('wan', 'link_local_mac'))

                    self.__config_setup1_1.set_ether_dst(
                        self.__config_setup1_1.get_mac_ceRouter())

                    self.__config_setup1_1.set_dhcp_reconf_type(
                        self.__config.get('t1.6.3', 'msg_type'))

                    self.__config_setup1_1.set_udp_sport('547')
                    self.__config_setup1_1.set_udp_dport('546')
                    self.__sendmsgs.send_dhcp_reconfigure(
                        self.__config_setup1_1)

                    sent_reconfigure = True

        self.__packet_sniffer_wan.stop()
        return False
예제 #2
0
class Test275d:
    def __init__(self, config):
        self.__queue_wan = Queue()
        self.__queue_lan = Queue()
        self.__config = config
        self.__interface = None
        self.__pkt = None
        self.__local_addr_ceRouter = None
        self.__sendmsgs = SendMsgs(self.__config)
        self.__config_setup1_1 = ConfigSetup1_1(self.__config)
        #self.__config_setup_lan = ConfigSetup1_1_Lan(self.__config)
        self.__wan_device_tr1 = self.__config.get('wan', 'device_wan_tr1')
        self.__lan_device = self.__config.get('lan', 'lan_device')
        self.__wan_mac_tr1 = self.__config.get('wan', 'wan_mac_tr1')
        self.__link_local_addr = self.__config.get('wan', 'link_local_addr')
        self.__all_nodes_addr = self.__config.get('multicast',
                                                  'all_nodes_addr')
        self.__test_desc = self.__config.get('tests', '2.7.5d')
        self.__t_lan = None
        self.__finish_wan = False
        self.__dhcp_renew_done = False
        self.__config_setup_lan = ConfigSetup1_1_Lan(self.__config,
                                                     self.__lan_device)

    def set_flags(self):
        self.__config_setup1_1.set_flag_M(
            self.__config.get('t1.6.6b', 'flag_m'))
        self.__config_setup1_1.set_flag_0(
            self.__config.get('t1.6.6b', 'flag_o'))
        self.__config_setup1_1.set_flag_chlim(
            self.__config.get('t1.6.6b', 'flag_chlim'))
        self.__config_setup1_1.set_flag_L(
            self.__config.get('t1.6.6b', 'flag_l'))
        self.__config_setup1_1.set_flag_A(
            self.__config.get('t1.6.6b', 'flag_a'))
        self.__config_setup1_1.set_flag_R(
            self.__config.get('t1.6.6b', 'flag_r'))
        self.__config_setup1_1.set_flag_prf(
            self.__config.get('t1.6.6b', 'flag_prf'))
        self.__config_setup1_1.set_validlifetime(
            self.__config.get('t2.7.5d', 'validlifetime'))
        self.__config_setup1_1.set_preferredlifetime(
            self.__config.get('t2.7.5d', 'preferredlifetime'))
        self.__config_setup1_1.set_routerlifetime(
            self.__config.get('t2.7.5d', 'routerlifetime'))
        self.__config_setup1_1.set_intervalo(
            self.__config.get('t1.6.6b', 'intervalo'))
        self.__config_setup1_1.set_prefix_addr(
            self.__config.get('setup1-1_advertise', 'ia_pd_address'))
        self.__config_setup1_1.set_dhcp_t1(
            self.__config.get('t2.7.5d', 'dhcp_t1'))
        self.__config_setup1_1.set_dhcp_t2(
            self.__config.get('t2.7.5d', 'dhcp_t2'))
        self.__config_setup1_1.set_dhcp_preflft(
            self.__config.get('t2.7.5d', 'dhcp_preflft'))
        self.__config_setup1_1.set_dhcp_validlft(
            self.__config.get('t2.7.5d', 'dhcp_validlft'))
        self.__config_setup1_1.set_dhcp_plen(
            self.__config.get('t2.7.5d', 'dhcp_plen'))

    def set_flags_lan(self):
        self.__config_setup_lan.set_elapsetime(
            self.__config.get('solicitlan', 'elapsetime'))
        self.__config_setup_lan.set_xid(self.__config.get('solicitlan', 'xid'))
        self.__config_setup_lan.set_fdqn(
            self.__config.get('solicitlan', 'clientfqdn'))
        self.__config_setup_lan.set_vendor_class(
            self.__config.get('solicitlan', 'vendorclass'))

        self.__config_setup_lan.set_enterprise(
            self.__config.get('solicitlan', 'enterpriseid'))
        self.__config_setup_lan.set_client_duid(
            self.__config.get('solicitlan', 'duid'))
        self.__config_setup_lan.set_iaid(
            self.__config.get('solicitlan', 'iaid'))

    def run_Lan(self):
        #self.__config_setup_lan_.flags_partA()
        logging.info('Thread da LAN inicio')
        t_test = 0
        t_test1 = 0
        sent_reconfigure = False
        time_over = False
        send_ra = False
        self.set_flags_lan()
        self.__config_setup_lan.set_setup_lan_start()
        while not self.__queue_lan.full():
            while self.__queue_lan.empty():

                logging.info('Thread da LAN time')
                time.sleep(1)

                if self.__config_setup1_1.get_setup1_1_OK():
                    logging.info('Thread da WAN DONE')
                    #                    t_test = t_test + 1
                    #                   if self.__config_setup1_1.get_recvd_dhcp_renew():
                    #pkt = self.__queue_lan.get()
                    if t_test < 65:
                        time.sleep(1)
                        t_test = t_test + 1
                        if t_test % 5 == 0:

                            #self.__config_setup_lan.set_setup_lan_start()
                            self.__config_setup_lan.set_ipv6_src(
                                self.__config.get('lan', 'lan_local_addr'))
                            self.__config_setup_lan.set_ether_src(
                                self.__config.get('lan', 'mac_address'))
                            self.__config_setup_lan.set_ether_dst(
                                self.__config.get('multicast',
                                                  'all_mac_routers'))
                            self.__config_setup_lan.set_ipv6_dst(
                                self.__config.get('general',
                                                  'all_routers_address'))
                            self.__config_setup_lan.set_lla(
                                self.__config.get('lan', 'mac_address'))
                            self.__sendmsgs.send_icmp_rs(
                                self.__config_setup_lan)

                            if self.__config_setup_lan.get_ND_global_OK(
                            ) and not self.__config_setup_lan.get_global_ping_OK(
                            ):
                                mac_global = self.__config_setup_lan.get_global_mac_ceRouter(
                                )
                                ip_global = self.__config_setup_lan.get_global_addr_ceRouter(
                                )
                                self.__config_setup_lan.set_ipv6_src(
                                    self.__config.get('lan',
                                                      'global_wan_addr'))
                                self.__config_setup_lan.set_ether_src(
                                    self.__config.get('lan', 'mac_address'))
                                self.__config_setup_lan.set_ether_dst(
                                    mac_global)
                                self.__config_setup_lan.set_ipv6_dst(ip_global)
                                self.__sendmsgs.send_echo_request_lan(
                                    self.__config_setup_lan)

                            #self.__config_setup_lan.set_setup_lan_start()
                            self.__config_setup_lan.set_ipv6_src(
                                self.__config.get('lan', 'lan_local_addr'))
                            self.__config_setup_lan.set_ether_src(
                                self.__config.get('lan', 'mac_address'))
                            self.__config_setup_lan.set_ether_dst(
                                self.__config.get('multicast',
                                                  'all_mac_routers'))
                            self.__config_setup_lan.set_ipv6_dst(
                                self.__config.get('multicast',
                                                  'all_routers_addr'))
                            self.__config_setup_lan.set_xid(
                                self.__config.get('informationlan', 'xid'))
                            #self.__config_setup_lan.set_lla(self.__config.get('lan','mac_address'))
                            self.__config_setup_lan.set_elapsetime(
                                self.__config.get('informationlan',
                                                  'elapsetime'))
                            self.__config_setup_lan.set_vendor_class(
                                self.__config.get('informationlan',
                                                  'vendorclass'))
                            self.__sendmsgs.send_dhcp_information(
                                self.__config_setup_lan)
                            time_over = True

            pkt = self.__queue_lan.get()
            if not self.__config_setup_lan.get_global_ping_OK():
                if not self.__config_setup_lan.get_disapproved():
                    self.__config_setup_lan.run_setup1_1(pkt)
                else:
                    logging.info(
                        'Reprovado Teste 2.7.5d - Falha em completar o Common Setup 1.1 da RFC'
                    )
                    self.__packet_sniffer_lan.stop()
                    self.__finish_wan = True
                    return False
            else:
                if self.__dhcp_renew_done:
                    print('DONE CONCLUIDO- VALIDANDO MENSAGEM RA')
                    if t_test1 < 60:
                        print('DONE CONCLUIDO- VALIDANDO MENSAGEM RA TEMPO')
                        time.sleep(1)
                        t_test1 = t_test1 + 1
                        #if t_test1 % 10 == 0:
                        #self.__config_setup_lan.set_setup_lan_start()
                        self.__config_setup_lan.set_ipv6_src(
                            self.__config.get('lan', 'lan_local_addr'))
                        self.__config_setup_lan.set_ether_src(
                            self.__config.get('lan', 'mac_address'))
                        self.__config_setup_lan.set_ether_dst(
                            self.__config.get('multicast', 'all_mac_routers'))
                        self.__config_setup_lan.set_ipv6_dst(
                            self.__config.get('general',
                                              'all_routers_address'))
                        self.__config_setup_lan.set_lla(
                            self.__config.get('lan', 'mac_address'))
                        self.__sendmsgs.send_icmp_rs(self.__config_setup_lan)

                        if pkt.haslayer(ICMPv6ND_RA):
                            print(
                                'DONE CONCLUIDO- VALIDANDO MENSAGEM MENSAGEM RA'
                            )
                            if pkt.haslayer(ICMPv6NDOptRouteInfo):
                                if pkt[ICMPv6NDOptRouteInfo].plen != 60:
                                    logging.info(
                                        ' Teste2.7.5d: Reprovado. Tamanho do prefixo diferente do anunciado no DHCP Reconfigure'
                                    )
                                    logging.info(
                                        pkt[ICMPv6NDOptPrefixInfo].prefixlen)
                                    logging.info(
                                        pkt[ICMPv6NDOptRouteInfo].plen)

                                    self.__packet_sniffer_lan.stop()
                                    self.__finish_wan = True
                                    self.__fail_test = True
                                    return False
                                else:  #self.__validlifetime_CeRouter == pkt[ICMPv6NDOptPrefixInfo].validlifetime
                                    logging.info(
                                        ' Teste 2.7.5d:Tamanho do prefixo igual ao anunciado na mensagem DHCP Reconfigure.'
                                    )
                                    logging.info('Aprovado Teste2.7.5d.')
                                    self.__packet_sniffer_lan.stop()
                                    self.__finish_wan = True
                                    self.__fail_test = False
                                    return True
                            else:
                                print('DONE CONCLUIDO- SEM PREFIX INFO RA')
                # logging.info('Setup LAN  Concluido')
                # if self.__config_setup_lan.get_recvd_dhcp_srcladdr():
                #     logging.info(' Teste 2.7.5d: Recebido Recursive DNS OK.')
                #     logging.info('Aprovado Teste2.7.5d.')
                #     self.__packet_sniffer_lan.stop()
                #     self.__finish_wan = True
                #     self.__fail_test = False
                #     return True

                # else:
                #     logging.info(' Teste2.7.5d: Reprovado. Não foi recebido')
                #     #logging.info(routerlifetime)
                #     self.__packet_sniffer_lan.stop()
                #     self.__finish_wan = True
                #     self.__fail_test = True
                #     return False

    def run(self):
        self.__t_lan = Thread(target=self.run_Lan, name='LAN_Thread')
        self.__t_lan.start()

        self.__packet_sniffer_wan = PacketSniffer('Test273b-WAN',
                                                  self.__queue_wan, self,
                                                  self.__config,
                                                  self.__wan_device_tr1)
        self.__packet_sniffer_wan.start()

        self.__packet_sniffer_lan = PacketSniffer('Test273b-LAN',
                                                  self.__queue_lan, self,
                                                  self.__config,
                                                  self.__lan_device)
        test_lan = self.__packet_sniffer_lan.start()

        self.set_flags()
        logging.info(self.__test_desc)
        t_test = 0
        sent_reconfigure = False
        time_over = False
        #time.sleep(11111)
        finish_wan = True
        self.__config_setup1_1.set_pd_prefixlen(
            self.__config.get('t2.7.5d', 'pd_prefixlen'))
        self.__config_setup1_1.set_routerlifetime(
            self.__config.get('t2.7.5d', 'routerlifetime'))
        #self.__config_setup1_1.active_DHCP_no_IA_PD()
        while not self.__queue_wan.full():
            while self.__queue_wan.empty():
                if t_test < 60:
                    time.sleep(1)
                    if t_test % 15 == 0:

                        self.__config_setup1_1.set_ether_src(
                            self.__config.get('wan', 'ra_mac'))
                        self.__config_setup1_1.set_ether_dst(
                            self.__config.get('multicast', 'all_mac_nodes'))
                        self.__config_setup1_1.set_ipv6_src(
                            self.__config.get('wan', 'ra_address'))
                        self.__config_setup1_1.set_ipv6_dst(
                            self.__config.get('multicast', 'all_nodes_addr'))
                        self.__sendmsgs.send_tr1_RA(self.__config_setup1_1)
                    t_test = t_test + 1
                else:
                    time_over = True
            pkt = self.__queue_wan.get()

            if not self.__config_setup1_1.get_setup1_1_OK():

                if not self.__config_setup1_1.get_disapproved():
                    self.__config_setup1_1.run_setup1_1(pkt)
                else:
                    logging.info(
                        'Reprovado Teste 2.7.3a - Falha em completar o Common Setup 1.1 da RFC'
                    )
                    self.__packet_sniffer_wan.stop()
                    return False

            else:
                if not self.__finish_wan:
                    print('WAN - Concluido')
                    print('LAN RESULT')
                    if not sent_reconfigure:
                        time.sleep(25)
                        print('aqui7')
                        self.__config_setup1_1.set_ipv6_src(
                            self.__config.get('wan', 'link_local_addr'))
                        print('aqui8')
                        self.__config_setup1_1.set_ipv6_dst(
                            self.__config_setup1_1.get_local_addr_ceRouter())
                        print('aqui10')
                        self.__config_setup1_1.set_ether_src(
                            self.__config.get('wan', 'link_local_mac'))
                        print('aqui11')
                        self.__config_setup1_1.set_ether_dst(
                            self.__config_setup1_1.get_mac_ceRouter())
                        print('aqui12')
                        self.__config_setup1_1.set_dhcp_reconf_type(
                            self.__config.get('t1.6.3', 'msg_type'))
                        print('aqui13')
                        self.__config_setup1_1.set_udp_sport('547')
                        self.__config_setup1_1.set_udp_dport('546')
                        self.__sendmsgs.send_dhcp_reconfigure(
                            self.__config_setup1_1)
                        print('aqui14')
                        sent_reconfigure = True

                    if pkt.haslayer(DHCP6_Renew):
                        if not self.__dhcp_renew_done:
                            #                        if self.__active_renew_dhcp:
                            self.__config_setup1_1.set_mac_ceRouter(
                                pkt[Ether].src)
                            self.__config_setup1_1.set_local_addr_ceRouter(
                                pkt[IPv6].src)
                            self.__config_setup1_1.set_xid(
                                pkt[DHCP6_Renew].trid)
                            self.__config_setup1_1.set_ipv6_src(
                                self.__config.get('wan', 'link_local_addr'))
                            self.__config_setup1_1.set_ipv6_dst(pkt[IPv6].src)
                            self.__config_setup1_1.set_ether_src(
                                self.__config.get('wan', 'link_local_mac'))
                            self.__config_setup1_1.set_ether_dst(
                                pkt[Ether].src)
                            self.__config_setup1_1.set_dhcp_preflft('100')
                            self.__config_setup1_1.set_dhcp_validlft('200')
                            self.__config_setup1_1.set_dhcp_plen('60')
                            self.__config_setup1_1.set_prefix_addr(
                                self.__config.get('setup1-1_advertise',
                                                  'ia_pd_address'))
                            self.__sendmsgs.send_dhcp_reply_v3(
                                self.__config_setup1_1)
                            #self.__dhcp_ok = True
                            self.__dhcp_renew_done = True
                else:
                    self.__packet_sniffer_wan.stop()
                    if self.__fail_test:
                        return False
                    else:
                        return True
        self.__packet_sniffer_wan.stop()
        return False
예제 #3
0
class Test273c:

    def __init__(self,config,app):
        self.__app = app
        self.__queue_wan = Queue()
        self.__queue_lan = Queue()
        self.__config = config
        self.__interface = None
        self.__pkt = None
        self.__local_addr_ceRouter =None
        self.__sendmsgs = SendMsgs(self.__config)
        self.__config_setup1_1 = ConfigSetup1_1(self.__config)
        #self.__config_setup_lan = ConfigSetup1_1_Lan(self.__config)
        self.__wan_device_tr1 = self.__config.get('wan','device_wan_tr1')
        self.__lan_device = self.__config.get('lan','lan_device')
        self.__wan_mac_tr1 = self.__config.get('wan','wan_mac_tr1')
        self.__link_local_addr = self.__config.get('wan','link_local_addr')
        self.__all_nodes_addr = self.__config.get('multicast','all_nodes_addr')
        self.__test_desc = self.__config.get('tests','2.7.3c')
        self.__t_lan = None
        self.__finish_wan = False
        self.__fail_test = False
        self.msg = self.__config.get('tests','2.7.3c')
        self.msg_lan =self.__config.get('tests','2.7.3c')
        self.__config_setup_lan = ConfigSetup1_1_Lan(self.__config,self.__lan_device)



    def set_flags(self):
        self.__config_setup1_1.set_flag_M(self.__config.get('t1.6.6b','flag_m'))
        self.__config_setup1_1.set_flag_0(self.__config.get('t1.6.6b','flag_o'))
        self.__config_setup1_1.set_flag_chlim(self.__config.get('t1.6.6b','flag_chlim'))
        self.__config_setup1_1.set_flag_L(self.__config.get('t1.6.6b','flag_l'))
        self.__config_setup1_1.set_flag_A(self.__config.get('t1.6.6b','flag_a'))
        self.__config_setup1_1.set_flag_R(self.__config.get('t1.6.6b','flag_r'))
        self.__config_setup1_1.set_flag_prf(self.__config.get('t1.6.6b','flag_prf'))
        self.__config_setup1_1.set_validlifetime(self.__config.get('t2.7.3c','validlifetime'))
        self.__config_setup1_1.set_preferredlifetime(self.__config.get('t2.7.3c','preferredlifetime'))
        self.__config_setup1_1.set_routerlifetime(self.__config.get('t2.7.3c','routerlifetime'))
        self.__config_setup1_1.set_intervalo(self.__config.get('t1.6.6b','intervalo'))

        self.__config_setup1_1.set_dhcp_t1(self.__config.get('t2.7.3c','dhcp_t1'))
        self.__config_setup1_1.set_dhcp_t2(self.__config.get('t2.7.3c','dhcp_t2'))
        self.__config_setup1_1.set_dhcp_preflft(self.__config.get('t2.7.3c','dhcp_preflft'))
        self.__config_setup1_1.set_dhcp_validlft(self.__config.get('t2.7.3c','dhcp_validlft'))
        self.__config_setup1_1.set_dhcp_plen(self.__config.get('t2.7.3c','dhcp_plen'))
   
    def set_flags_lan(self):
        self.__config_setup_lan.set_elapsetime(self.__config.get('solicitlan','elapsetime'))
        self.__config_setup_lan.set_xid(self.__config.get('solicitlan','xid'))
        self.__config_setup_lan.set_fdqn(self.__config.get('solicitlan','clientfqdn'))
        self.__config_setup_lan.set_vendor_class(self.__config.get('solicitlan','vendorclass'))

        self.__config_setup_lan.set_enterprise(self.__config.get('solicitlan','enterpriseid'))
        self.__config_setup_lan.set_client_duid(self.__config.get('solicitlan','duid'))
        self.__config_setup_lan.set_iaid(self.__config.get('solicitlan','iaid'))

    def set_status_lan(self,v):
        self.msg_lan = v

    def get_status_lan(self):
        return self.msg_lan


    def set_status(self,v):
        self.msg = v

    def get_status(self):
        return self.msg

        self.__config_setup_lan.set_ipv6_src(self.__config.get('lan','lan_local_addr'))
        self.__config_setup_lan.set_ether_src(self.__config.get('lan','mac_address'))
        self.__config_setup_lan.set_ether_dst(self.__config.get('multicast','all_mac_routers'))
        self.__config_setup_lan.set_ipv6_dst(self.__config.get('general','all_routers_address'))
        self.__config_setup_lan.set_lla(self.__config.get('lan','mac_address'))
        self.__sendmsgs.send_icmp_rs(self.__config_setup_lan)
        
    def echo_request_lan(self):
        #print('ENVIO REQUEST 1 LAN')

        mac_global = self.__config_setup_lan.get_global_mac_ceRouter()
        ip_global = self.__config_setup_lan.get_global_addr_ceRouter()
        self.__config_setup_lan.set_ipv6_src(self.__config.get('lan','global_wan_addr'))
        self.__config_setup_lan.set_ether_src(self.__config.get('lan','mac_address'))
        self.__config_setup_lan.set_ether_dst(mac_global)
        self.__config_setup_lan.set_ipv6_dst(ip_global)
        self.__sendmsgs.send_echo_request_lan(self.__config_setup_lan)

    def echo_request_lan_wrong_prefix(self):
        #print('ENVIO REQUEST 1 LAN')
        mac_global = self.__config_setup_lan.get_global_mac_ceRouter()
        ip_global = self.__config_setup_lan.get_global_addr_ceRouter()
        self.__config_setup_lan.set_ipv6_src(self.__config.get('t2.7.6','source_to_ping_tn1'))
        self.__config_setup_lan.set_ether_src(self.__config.get('lan','mac_address'))
        self.__config_setup_lan.set_ether_dst(mac_global)
        self.__config_setup_lan.set_ipv6_dst(self.__config.get('wan','global_wan_addr'))
        self.__sendmsgs.send_echo_request_lan(self.__config_setup_lan)

    def icmp_na_wrong_prefix(self):
        self.__config_setup_lan.set_ipv6_src(self.__config.get('lan','global_wan_addr'))
        self.__config_setup_lan.set_ether_src(self.__config.get('lan','mac_address'))
        self.__config_setup_lan.set_ether_dst(self.__config_setup_lan.get_global_mac_ceRouter())
        self.__config_setup_lan.set_ipv6_dst(self.__config_setup_lan.get_global_addr_ceRouter())
        self.__config_setup_lan.set_tgt(self.__config.get('t2.7.6','source_to_ping_tn1'))
        self.__config_setup_lan.set_lla(self.__config.get('lan','mac_address'))
        self.__sendmsgs.send_icmp_na_lan(self.__config_setup_lan)

    def dhcp_information_lan(self):
        #self.__config_setup_lan.set_setup_lan_start()
        #print('#print ENVIO INFORMATION LAN')
        self.__config_setup_lan.set_ipv6_src(self.__config.get('lan','lan_local_addr'))
        self.__config_setup_lan.set_ether_src(self.__config.get('lan','mac_address'))
        self.__config_setup_lan.set_ether_dst(self.__config.get('multicast','all_mac_routers'))
        self.__config_setup_lan.set_ipv6_dst(self.__config.get('multicast','all_routers_addr'))
        self.__config_setup_lan.set_xid(self.__config.get('informationlan','xid'))
        #self.__config_setup_lan.set_lla(self.__config.get('lan','mac_address'))
        self.__config_setup_lan.set_elapsetime(self.__config.get('informationlan','elapsetime'))
        self.__config_setup_lan.set_vendor_class(self.__config.get('informationlan','vendorclass'))
        self.__sendmsgs.send_dhcp_information(self.__config_setup_lan)


    def ra_wan(self):
        self.__config_setup1_1.set_ether_src(self.__config.get('wan','ra_mac'))
        self.__config_setup1_1.set_ether_dst(self.__config.get('multicast','all_mac_nodes'))
        self.__config_setup1_1.set_ipv6_src(self.__config.get('wan','ra_address'))
        self.__config_setup1_1.set_ipv6_dst(self.__config.get('multicast','all_nodes_addr'))
        self.__sendmsgs.send_tr1_RA(self.__config_setup1_1)

    def dhcp_reconf(self):
        self.__config_setup1_1.set_ipv6_src(self.__config.get('wan','link_local_addr'))
        self.__config_setup1_1.set_ipv6_dst(self.__config_setup1_1.get_local_addr_ceRouter())
        self.__config_setup1_1.set_ether_src(self.__config.get('wan','link_local_mac'))
        self.__config_setup1_1.set_ether_dst(self.__config_setup1_1.get_mac_ceRouter())
        self.__config_setup1_1.set_dhcp_reconf_type(self.__config.get('t2.7.5d','msg_type'))
        self.__config_setup1_1.set_udp_sport('547')
        self.__config_setup1_1.set_udp_dport('546')
        self.__sendmsgs.send_dhcp_reconfigure(self.__config_setup1_1)


    def icmp_na_global_lan(self,pkt):
        self.__config_setup_lan.set_ipv6_src(self.__config.get('lan','global_wan_addr'))
        self.__config_setup_lan.set_ether_src(self.__config.get('lan','mac_address'))
        self.__config_setup_lan.set_ether_dst(pkt[Ether].src)
        self.__config_setup_lan.set_ipv6_dst(pkt[IPv6].src)
        self.__config_setup_lan.set_tgt(self.__config.get('lan','global_wan_addr'))
        self.__config_setup_lan.set_lla(self.__config.get('lan','mac_address'))
        self.__config_setup_lan.set_mac_ceRouter(pkt[Ether].src)
        self.__sendmsgs.send_icmp_na_lan(self.__config_setup_lan)

    def rs_lan(self):

        self.__config_setup_lan.set_ipv6_src(self.__config.get('lan','lan_local_addr'))
        self.__config_setup_lan.set_ether_src(self.__config.get('lan','mac_address'))
        self.__config_setup_lan.set_ether_dst(self.__config.get('multicast','all_mac_routers'))
        self.__config_setup_lan.set_ipv6_dst(self.__config.get('general','all_routers_address'))
        self.__config_setup_lan.set_lla(self.__config.get('lan','mac_address'))
        self.__sendmsgs.send_icmp_rs(self.__config_setup_lan)
    def run_Lan(self):
        @self.__app.route("/LAN",methods=['GET'])
        def envia_lan():
            return self.get_status_lan()
        #self.__config_setup_lan_.flags_partA()

        t_test = 0
        sent_reconfigure = False
        time_over = False
        self.set_flags_lan()
        cache_lan = []
        temporizador = 0
        test_max_time_lan = 300
        while not self.__queue_lan.full():
            time.sleep(1)
            temporizador = temporizador + 1
            while self.__queue_lan.empty():
                

                time.sleep(1)
                if self.__config_setup1_1.get_setup1_1_OK():
                    if temporizador < test_max_time_lan:
                        temporizador = temporizador + 1
                    else:
                        self.set_status_lan('LAN: Reprovado. Timeout')
                        time.sleep(2)
                        self.set_status_lan('REPROVADO')
                        logging.info('LAN: Reprovado. Timeout')
                        #logging.info(routerlifetime)
                        self.__finish_wan = True 
                        self.__fail_test = True
                        self.__packet_sniffer_lan.stop()
                        return False


                    if temporizador % 20 == 0:
                        logging.info('LAN: Tempo limite do teste: '+str(test_max_time_lan)+' segundos. Tempo: ' +str(temporizador))
                        self.set_status_lan('LAN: Tempo limite do teste: '+str(test_max_time_lan)+' segundos. Tempo: ' +str(temporizador))


                    if self.__config_setup1_1.get_recvd_dhcp_renew():
                #pkt = self.__queue_lan.get()
                        self.set_status_lan('LAN: Transmissão periódica de ICMP RS Apos o recebimento da mensagem DHCP Renew')
                        logging.info('LAN: Transmissão periódica de ICMP RS  Apos o recebimento da mensagem DHCP Renew')             
                        self.__config_setup_lan.set_setup_lan_start()
                        self.rs_lan()

                        
            pkt = self.__queue_lan.get()
            cache_lan.append(pkt)
            wrpcap("lan-2.7.3c.cap",cache_lan)

            if not self.__config_setup_lan.get_setup_OK():
                if not self.__config_setup_lan.get_disapproved():
                    self.__config_setup_lan.run_setup1_1(pkt)
                else:
                    
                    logging.info('LAN: Reprovado Teste 2.7.4a - Falha em completar o setup 1.1')
                    self.set_status_lan('Reprovado Teste 2.7.4a - Falha em completar o setup 1.1')
                    time.sleep(2)
                    self.set_status_lan('REPROVADO') # Mensagem padrão para o frontEnd atualizar Status
                    self.__packet_sniffer_lan.stop()
                    self.__finish_wan = True 
                    self.__fail_test = True
                    return False 
            else:
                logging.info('Setup LAN concluido. Verificando o valor de routerlifetime ')
                self.set_status_lan('Setup LAN concluido. o valor de  routerlifetime')
                routerlifetime = self.__config_setup_lan.get_routerlifetime_CeRouter()
                if routerlifetime == 0:
                    logging.info(' APROVADO  Teste 2.7.3c: routerlifetime OK. routerlifetime  igual a 0')
                    self.set_status_lan('APROVADO  Teste 2.7.3c: routerlifetime OK. routerlifetime  igual a 0')
                    time.sleep(2)
                    self.set_status_lan('APROVADO') # Mensagem padrão para o frontEnd atualizar Status
                    
                    self.__packet_sniffer_lan.stop()
                    self.__finish_wan = True
                    self.__fail_test = False 
                    return True         
                else:                     
                    logging.info(' REPROVADO  Teste 2.7.3c: routerlifetime. routerlifetime  acima de 0')
                    self.set_status_lan('REPROVADO  Teste 2.7.3c: routerlifetime. routerlifetime  acima de 0')
                    time.sleep(2)
                    self.set_status_lan('REPROVADO') # Mensagem padrão para o frontEnd atualizar Status
                    self.__packet_sniffer_lan.stop()
                    self.__finish_wan = True
                    self.__fail_test = False 
                    return True         
                
    def run(self):
        @self.__app.route("/WAN",methods=['GET'])
        def enviawan():
            return self.get_status()
        self.__t_lan =  Thread(target=self.run_Lan,name='LAN_Thread')
        self.__t_lan.start()
        
        self.__packet_sniffer_wan = PacketSniffer('Test273b-WAN',self.__queue_wan,self,self.__config,self.__wan_device_tr1)
        self.__packet_sniffer_wan.start()
        
        self.__packet_sniffer_lan = PacketSniffer('Test273b-LAN',self.__queue_lan,self,self.__config,self.__lan_device)
        test_lan = self.__packet_sniffer_lan.start()
        cache_wan = []
        self.set_flags()
        logging.info(self.__test_desc)
        t_test = 0
        sent_reconfigure = False
        time_over = False
        #time.sleep(11111)

        self.__config_setup1_1.set_pd_prefixlen(self.__config.get('t2.7.3c','pd_prefixlen')) 
        self.__config_setup1_1.set_routerlifetime(self.__config.get('t2.7.3c','routerlifetime')) 
        test_max_time = 300
        temporizador = 0 
        #self.__config_setup1_1.active_DHCP_no_IA_PD()
        while not self.__queue_wan.full():
            while self.__queue_wan.empty():
                time.sleep(1)
                if temporizador < test_max_time:
                    temporizador = temporizador + 1
                else:
                    self.set_status('WAN: Reprovado. Timeout')
                    time.sleep(2)
                    self.set_status('REPROVADO')
                    logging.info('WAN: Reprovado. Timeout')
                    #logging.info(routerlifetime)
                    self.__packet_sniffer_lan.stop()
                    self.__packet_sniffer_wan.stop()
                    return False 
                if temporizador % 5 ==0:
                    logging.info('WAN: Envio de RA periódico')
                    self.set_status('WAN: Envio de RA periódico')                        
                    self.ra_wan()

            pkt = self.__queue_wan.get()

            cache_wan.append(pkt)
            wrpcap("WAN-2.7.3c.cap",cache_wan)

            if not self.__config_setup1_1.get_setup1_1_OK():
                logging.info('WAN: Setup 1.1 em execução')
                self.set_status('WAN: Setup 1.1 em execução') 
                if not self.__config_setup1_1.get_disapproved():
                    self.__config_setup1_1.run_setup1_1(pkt)
                else:
                    logging.info('WAN: Reprovado Teste 2.7.4a - Falha em completar o setup 1.1')
                    self.set_status('WAN: Reprovado Teste 2.7.4a - Falha em completar o setup 1.1')
                    time.sleep(2)
                    self.set_status('REPROVADO') # Mensagem padrão para o frontEnd atualizar Status
                    self.__packet_sniffer_lan.stop()
                    self.__finish_wan = True
                    self.__fail_test = True
            else: 
                logging.info('WAN: Checando o recebimento de Renew')
                self.set_status('WAN: Checando o recebimento de Renew')
                self.__config_setup1_1.check_layers(pkt)

                if self.__finish_wan: 
                    self.__packet_sniffer_wan.stop()
                    if self.__fail_test:
                        return False
                    else:
                        return True

        self.__packet_sniffer_wan.stop()
        return False
     
        
예제 #4
0
파일: test163b.py 프로젝트: ronyjah/rfc
class Test163b:

    def __init__(self,config):
        self.__queue_wan = Queue()
        self.__queue_lan = Queue()
        self.__config = config
        self.__interface = None
        self.__pkt = None
        self.__local_addr_ceRouter =None
        self.__sendmsgs = SendMsgs(self.__config)
        self.__config_setup1_1 = ConfigSetup1_1(self.__config)
        self.__wan_device_tr1 = self.__config.get('wan','device_wan_tr1')
        self.__wan_mac_tr1 = self.__config.get('wan','wan_mac_tr1')
        self.__link_local_addr = self.__config.get('wan','link_local_addr')
        self.__all_nodes_addr = self.__config.get('multicast','all_nodes_addr')
        self.__test_desc = self.__config.get('tests','1.6.3b')


    def set_flags(self):
        self.__config_setup1_1.set_flag_M(self.__config.get('t1.6.3','flag_m'))
        self.__config_setup1_1.set_flag_0(self.__config.get('t1.6.3','flag_o'))
        self.__config_setup1_1.set_flag_chlim(self.__config.get('t1.6.3','flag_chlim'))
        self.__config_setup1_1.set_flag_L(self.__config.get('t1.6.3','flag_l'))
        self.__config_setup1_1.set_flag_A(self.__config.get('t1.6.3','flag_a'))
        self.__config_setup1_1.set_flag_R(self.__config.get('t1.6.3','flag_r'))
        self.__config_setup1_1.set_flag_prf(self.__config.get('t1.6.3','flag_prf'))
        self.__config_setup1_1.set_validlifetime(self.__config.get('t1.6.3','validlifetime'))
        self.__config_setup1_1.set_preferredlifetime(self.__config.get('t1.6.3','preferredlifetime'))
        self.__config_setup1_1.set_routerlifetime(self.__config.get('t1.6.3','routerlifetime'))
        self.__config_setup1_1.set_intervalo(self.__config.get('t1.6.3','intervalo'))

    def run(self):
        self.__packet_sniffer_wan = PacketSniffer('test163b',self.__queue_wan,self,self.__config,self.__wan_device_tr1)
        self.__config_setup1_1.flags_partA()
        self.__packet_sniffer_wan.start()
        self.set_flags()
        logging.info(self.__test_desc)
        t_test = 0
        sent_reconfigure = False

        time_over = False        
        while not self.__queue_wan.full():
            while self.__queue_wan.empty():
                if t_test < 3000:
                    time.sleep(1)
                    t_test = t_test + 1
                else:
                    time_over = True
            pkt = self.__queue_wan.get()
           
            if not self.__config_setup1_1.get_setup1_1_OK():

                if not self.__config_setup1_1.get_disapproved():
                    self.__config_setup1_1.run_setup1_1(pkt)
                    print('aqui')
                else:
                    print('aqui1')
                    self.__packet_sniffer_wan.stop() 
                    logging.info('Reprovado Teste 1.6.3.c - Falha em completar o Common Setup 1.1 da RFC')
                    return False

                #self.__config_setup1_1.run_setup1_1(pkt)
            else:
                

                # self.__config_setup1_1.set_xid()
                if pkt.haslayer(DHCP6_Renew):
                    print('aqui2')
                    logging.info(pkt.show())
                    print('aqui3')
                    self.__packet_sniffer_wan.stop()
                    print('aqui33333')
                    
                    logging.info('Aprovado: Teste 1.6.3.b.')
                    return True

                elif time_over :
                    print('aqui4')
                    if not sent_reconfigure:
                        print('aqui5')
                        pass
                        #self.__packet_sniffer_wan.stop()
                        logging.info('Falha: Teste 1.6.3.b. Tempo finalizado e Não Enviou DHCP Reconfigure')
                        return False
                    else:
                        print('aqui6')
                        self.__packet_sniffer_wan.stop()
                        logging.info('Reprovado: Teste 1.6.3.b. Tempo finalizado e Não recebeu DHCP6 Renew')

                        return False

                if not sent_reconfigure:
                    time.sleep(3)
                    print('aqui7')
                    self.__config_setup1_1.set_ipv6_src(self.__config.get('wan','link_local_addr'))
                    print('aqui8')
                    self.__config_setup1_1.set_ipv6_dst(self.__config_setup1_1.get_local_addr_ceRouter())
                    print('aqui10')
                    self.__config_setup1_1.set_ether_src(self.__config.get('wan','link_local_mac'))
                    print('aqui11')
                    self.__config_setup1_1.set_ether_dst(self.__config_setup1_1.get_mac_ceRouter())
                    print('aqui12')
                    self.__config_setup1_1.set_dhcp_reconf_type(self.__config.get('t1.6.3','msg_type'))
                    print('aqui13')
                    self.__config_setup1_1.set_udp_sport('547')
                    self.__config_setup1_1.set_udp_dport('546')
                    self.__sendmsgs.send_dhcp_reconfigure(self.__config_setup1_1)
                    print('aqui14')
                    sent_reconfigure = True                
                # if pkt.haslayer(DHCP6_Solicit):
                #     self.__packet_sniffer_wan.stop()
                #     while not self.__queue_wan.empty():
                #         pkt = self.__queue_wan.get() 
                #     return True
        # while not pkt.haslayer(IPv6):
        #     pkt = self.__queue_wan.get()      
        self.__packet_sniffer_wan.stop()
        return False
     
        
예제 #5
0
class Test275c:
    def __init__(self, config, app):
        self.__app = app
        self.__queue_wan = Queue()
        self.__queue_lan = Queue()
        self.__config = config
        self.__interface = None
        self.__pkt = None
        self.__local_addr_ceRouter = None
        self.__sendmsgs = SendMsgs(self.__config)
        self.__config_setup1_1 = ConfigSetup1_1(self.__config)
        #self.__config_setup_lan = ConfigSetup1_1_Lan(self.__config)
        self.__wan_device_tr1 = self.__config.get('wan', 'device_wan_tr1')
        self.__lan_device = self.__config.get('lan', 'lan_device')
        self.__wan_mac_tr1 = self.__config.get('wan', 'wan_mac_tr1')
        self.__link_local_addr = self.__config.get('wan', 'link_local_addr')
        self.__all_nodes_addr = self.__config.get('multicast',
                                                  'all_nodes_addr')
        self.__test_desc = self.__config.get('tests', '2.7.5c')
        self.__t_lan = None
        self.__finish_wan = False
        self.__fail_test = False
        self.__dhcp_renew_done = False

        self.msg = self.__config.get('tests', '2.7.5c')
        self.msg_lan = self.__config.get('tests', '2.7.5c')
        self.__config_setup_lan = ConfigSetup1_1_Lan(self.__config,
                                                     self.__lan_device)

    def set_flags(self):
        self.__config_setup1_1.set_flag_M(
            self.__config.get('t1.6.6b', 'flag_m'))
        self.__config_setup1_1.set_flag_0(
            self.__config.get('t1.6.6b', 'flag_o'))
        self.__config_setup1_1.set_flag_chlim(
            self.__config.get('t1.6.6b', 'flag_chlim'))
        self.__config_setup1_1.set_flag_L(
            self.__config.get('t1.6.6b', 'flag_l'))
        self.__config_setup1_1.set_flag_A(
            self.__config.get('t1.6.6b', 'flag_a'))
        self.__config_setup1_1.set_flag_R(
            self.__config.get('t1.6.6b', 'flag_r'))
        self.__config_setup1_1.set_flag_prf(
            self.__config.get('t1.6.6b', 'flag_prf'))
        self.__config_setup1_1.set_validlifetime(
            self.__config.get('t2.7.5c', 'validlifetime'))
        self.__config_setup1_1.set_preferredlifetime(
            self.__config.get('t2.7.5c', 'preferredlifetime'))
        self.__config_setup1_1.set_routerlifetime(
            self.__config.get('t2.7.5c', 'routerlifetime'))
        self.__config_setup1_1.set_intervalo(
            self.__config.get('t1.6.6b', 'intervalo'))
        self.__config_setup1_1.set_prefix_addr(
            self.__config.get('setup1-1_advertise', 'ia_pd_address'))
        self.__config_setup1_1.set_dhcp_t1(
            self.__config.get('t2.7.5c', 'dhcp_t1'))
        self.__config_setup1_1.set_dhcp_t2(
            self.__config.get('t2.7.5c', 'dhcp_t2'))
        self.__config_setup1_1.set_dhcp_preflft(
            self.__config.get('t2.7.5c', 'dhcp_preflft'))
        self.__config_setup1_1.set_dhcp_validlft(
            self.__config.get('t2.7.5c', 'dhcp_validlft'))
        self.__config_setup1_1.set_dhcp_plen(
            self.__config.get('t2.7.5c', 'dhcp_plen'))

    def set_flags_lan(self):
        self.__config_setup_lan.set_elapsetime(
            self.__config.get('solicitlan', 'elapsetime'))
        self.__config_setup_lan.set_xid(self.__config.get('solicitlan', 'xid'))
        self.__config_setup_lan.set_fdqn(
            self.__config.get('solicitlan', 'clientfqdn'))
        self.__config_setup_lan.set_vendor_class(
            self.__config.get('solicitlan', 'vendorclass'))

        self.__config_setup_lan.set_enterprise(
            self.__config.get('solicitlan', 'enterpriseid'))
        self.__config_setup_lan.set_client_duid(
            self.__config.get('solicitlan', 'duid'))
        self.__config_setup_lan.set_iaid(
            self.__config.get('solicitlan', 'iaid'))

    def set_status_lan(self, v):
        self.msg_lan = v

    def get_status_lan(self):
        return self.msg_lan

    def set_status(self, v):
        self.msg = v

    def get_status(self):
        return self.msg

    def rs_lan(self):

        self.__config_setup_lan.set_ipv6_src(
            self.__config.get('lan', 'lan_local_addr'))
        self.__config_setup_lan.set_ether_src(
            self.__config.get('lan', 'mac_address'))
        self.__config_setup_lan.set_ether_dst(
            self.__config.get('multicast', 'all_mac_routers'))
        self.__config_setup_lan.set_ipv6_dst(
            self.__config.get('general', 'all_routers_address'))
        self.__config_setup_lan.set_lla(self.__config.get(
            'lan', 'mac_address'))
        self.__sendmsgs.send_icmp_rs(self.__config_setup_lan)

    def echo_request_lan(self):
        #print('ENVIO REQUEST 1 LAN')

        mac_global = self.__config_setup_lan.get_global_mac_ceRouter()
        ip_global = self.__config_setup_lan.get_global_addr_ceRouter()
        self.__config_setup_lan.set_ipv6_src(
            self.__config.get('lan', 'global_wan_addr'))
        self.__config_setup_lan.set_ether_src(
            self.__config.get('lan', 'mac_address'))
        self.__config_setup_lan.set_ether_dst(mac_global)
        self.__config_setup_lan.set_ipv6_dst(ip_global)
        self.__sendmsgs.send_echo_request_lan(self.__config_setup_lan)

    def echo_request_lan_wrong_prefix(self):
        #print('ENVIO REQUEST 1 LAN')
        mac_global = self.__config_setup_lan.get_global_mac_ceRouter()
        ip_global = self.__config_setup_lan.get_global_addr_ceRouter()
        self.__config_setup_lan.set_ipv6_src(
            self.__config.get('t2.7.6', 'source_to_ping_tn1'))
        self.__config_setup_lan.set_ether_src(
            self.__config.get('lan', 'mac_address'))
        self.__config_setup_lan.set_ether_dst(mac_global)
        self.__config_setup_lan.set_ipv6_dst(
            self.__config.get('wan', 'global_wan_addr'))
        self.__sendmsgs.send_echo_request_lan(self.__config_setup_lan)

    def icmp_na_wrong_prefix(self):
        self.__config_setup_lan.set_ipv6_src(
            self.__config.get('lan', 'global_wan_addr'))
        self.__config_setup_lan.set_ether_src(
            self.__config.get('lan', 'mac_address'))
        self.__config_setup_lan.set_ether_dst(
            self.__config_setup_lan.get_global_mac_ceRouter())
        self.__config_setup_lan.set_ipv6_dst(
            self.__config_setup_lan.get_global_addr_ceRouter())
        self.__config_setup_lan.set_tgt(
            self.__config.get('t2.7.6', 'source_to_ping_tn1'))
        self.__config_setup_lan.set_lla(self.__config.get(
            'lan', 'mac_address'))
        self.__sendmsgs.send_icmp_na_lan(self.__config_setup_lan)

    def dhcp_information_lan(self):
        #self.__config_setup_lan.set_setup_lan_start()
        #print('#print ENVIO INFORMATION LAN')
        self.__config_setup_lan.set_ipv6_src(
            self.__config.get('lan', 'lan_local_addr'))
        self.__config_setup_lan.set_ether_src(
            self.__config.get('lan', 'mac_address'))
        self.__config_setup_lan.set_ether_dst(
            self.__config.get('multicast', 'all_mac_routers'))
        self.__config_setup_lan.set_ipv6_dst(
            self.__config.get('multicast', 'all_routers_addr'))
        self.__config_setup_lan.set_xid(
            self.__config.get('informationlan', 'xid'))
        #self.__config_setup_lan.set_lla(self.__config.get('lan','mac_address'))
        self.__config_setup_lan.set_elapsetime(
            self.__config.get('informationlan', 'elapsetime'))
        self.__config_setup_lan.set_vendor_class(
            self.__config.get('informationlan', 'vendorclass'))
        self.__sendmsgs.send_dhcp_information(self.__config_setup_lan)

    def ra_wan(self):
        self.__config_setup1_1.set_ether_src(self.__config.get(
            'wan', 'ra_mac'))
        self.__config_setup1_1.set_ether_dst(
            self.__config.get('multicast', 'all_mac_nodes'))
        self.__config_setup1_1.set_ipv6_src(
            self.__config.get('wan', 'ra_address'))
        self.__config_setup1_1.set_ipv6_dst(
            self.__config.get('multicast', 'all_nodes_addr'))
        self.__sendmsgs.send_tr1_RA(self.__config_setup1_1)

    def dhcp_reconf(self):
        self.__config_setup1_1.set_ipv6_src(
            self.__config.get('wan', 'link_local_addr'))
        self.__config_setup1_1.set_ipv6_dst(
            self.__config_setup1_1.get_local_addr_ceRouter())
        self.__config_setup1_1.set_ether_src(
            self.__config.get('wan', 'link_local_mac'))
        self.__config_setup1_1.set_ether_dst(
            self.__config_setup1_1.get_mac_ceRouter())
        self.__config_setup1_1.set_dhcp_reconf_type(
            self.__config.get('t2.7.5d', 'msg_type'))
        self.__config_setup1_1.set_udp_sport('547')
        self.__config_setup1_1.set_udp_dport('546')
        self.__sendmsgs.send_dhcp_reconfigure(self.__config_setup1_1)

    def dhcp_reply(self, pkt):
        self.__config_setup1_1.set_mac_ceRouter(pkt[Ether].src)
        self.__config_setup1_1.set_local_addr_ceRouter(pkt[IPv6].src)
        self.__config_setup1_1.set_xid(pkt[DHCP6_Renew].trid)
        self.__config_setup1_1.set_ipv6_src(
            self.__config.get('wan', 'link_local_addr'))
        self.__config_setup1_1.set_ipv6_dst(pkt[IPv6].src)
        self.__config_setup1_1.set_ether_src(
            self.__config.get('wan', 'link_local_mac'))
        self.__config_setup1_1.set_ether_dst(pkt[Ether].src)
        self.__config_setup1_1.set_dhcp_preflft('100')
        self.__config_setup1_1.set_dhcp_validlft('200')
        self.__config_setup1_1.set_dhcp_plen('60')
        self.__config_setup1_1.set_prefix_addr(
            self.__config.get('setup1-1_advertise', 'ia_pd_address'))
        self.__sendmsgs.send_dhcp_reply_v3(self.__config_setup1_1)

    def icmp_na_global_lan(self, pkt):
        self.__config_setup_lan.set_ipv6_src(
            self.__config.get('lan', 'global_wan_addr'))
        self.__config_setup_lan.set_ether_src(
            self.__config.get('lan', 'mac_address'))
        self.__config_setup_lan.set_ether_dst(pkt[Ether].src)
        self.__config_setup_lan.set_ipv6_dst(pkt[IPv6].src)
        self.__config_setup_lan.set_tgt(
            self.__config.get('lan', 'global_wan_addr'))
        self.__config_setup_lan.set_lla(self.__config.get(
            'lan', 'mac_address'))
        self.__config_setup_lan.set_mac_ceRouter(pkt[Ether].src)
        self.__sendmsgs.send_icmp_na_lan(self.__config_setup_lan)

    def run_Lan(self):
        @self.__app.route("/LAN", methods=['GET'])
        def envia_lan():
            return self.get_status_lan()

        #self.__config_setup_lan_.flags_partA()
        logging.info('Thread da LAN inicio')
        t_test = 0
        t_test1 = 0
        sent_reconfigure = False
        time_over = False
        send_ra = False
        self.set_flags_lan()
        self.__config_setup_lan.set_setup_lan_start()
        cache_lan = []
        temporizador = 0
        test_max_time_lan = 300
        rs_sent = False
        while not self.__queue_lan.full():
            time.sleep(1)
            temporizador = temporizador + 1
            while self.__queue_lan.empty():
                time.sleep(1)
                if self.__config_setup1_1.get_setup1_1_OK():

                    if temporizador < test_max_time_lan:
                        temporizador = temporizador + 1
                    else:
                        self.set_status_lan('LAN: Reprovado. Timeout')
                        time.sleep(2)
                        self.set_status_lan('REPROVADO')
                        logging.info('LAN: Reprovado. Timeout')
                        #logging.info(routerlifetime)
                        self.__finish_wan = True
                        self.__fail_test = True
                        self.__packet_sniffer_lan.stop()

                        return False
                    if temporizador % 20 == 0:

                        logging.info('LAN: Tempo limite do teste: ' +
                                     str(test_max_time_lan) +
                                     ' segundos. Tempo: ' + str(temporizador))
                        self.set_status_lan('LAN: Tempo limite do teste: ' +
                                            str(test_max_time_lan) +
                                            ' segundos. Tempo: ' +
                                            str(temporizador))

                    if temporizador % 8 == 0:
                        self.set_status_lan(
                            'LAN: Transmissão periódica de ICMP RS e DHCP information'
                        )
                        logging.info(
                            'LAN: Transmissão periódica de ICMP RS e DHCP information'
                        )
                        self.rs_lan()
                        #self.dhcp_information_lan()

                    if temporizador % 5 == 0:
                        if self.__config_setup_lan.get_ND_global_OK(
                        ) and not self.__config_setup_lan.get_global_ping_OK():
                            self.set_status_lan(
                                'LAN: Transmissão Echo Request IP global do roteador'
                            )
                            logging.info(
                                'LAN: Transmissão Echo Request IP global do roteador'
                            )
                            self.echo_request_lan()

            pkt = self.__queue_lan.get()

            cache_lan.append(pkt)
            wrpcap("lan-2.7.5c.cap", cache_lan)

            if not self.__config_setup_lan.get_global_ping_OK():
                if not self.__config_setup_lan.get_disapproved():
                    self.__config_setup_lan.run_setup1_1(pkt)
                else:
                    logging.info(
                        'LAN: Reprovado Teste 2.7.5c - Falha em completar o setup 1.1'
                    )
                    self.set_status_lan(
                        'Reprovado Teste 2.7.5c - Falha em completar o setup 1.1'
                    )
                    time.sleep(2)
                    self.set_status_lan(
                        'REPROVADO'
                    )  # Mensagem padrão para o frontEnd atualizar Status

                    self.__packet_sniffer_lan.stop()
                    self.__finish_wan = True
                    self.__fail_test = True
                    return False
            else:
                if self.__dhcp_renew_done:
                    logging.info('LAN: DHCP Renew concluido')
                    self.set_status_lan('LAN: DHCP Renew concluido')
                    if temporizador < test_max_time_lan:
                        #if t_test1 % 10 == 0:
                        #self.__config_setup_lan.set_setup_lan_start()
                        self.set_status_lan(
                            'LAN: DHCP Renew concluido. Enviando RS')
                        logging.info('LAN: DHCP Renew concluido. Enviado RS')
                        if temporizador % 10 == 0:
                            while not self.__queue_lan.empty():

                                self.__queue_lan.get()

                            self.rs_lan()
                            rs_sent = True
                        if rs_sent:
                            if pkt.haslayer(ICMPv6ND_RA):

                                if pkt.haslayer(ICMPv6NDOptPrefixInfo):
                                    if pkt[ICMPv6NDOptPrefixInfo].prefix != self.__config.get(
                                            'setup1-1_advertise',
                                            'ia_pd_address2'):
                                        logging.info(
                                            ' Teste2.7.5c: Reprovado. Não Recebeu o Prefixo atualizado'
                                        )
                                        logging.info(
                                            pkt[ICMPv6NDOptPrefixInfo].prefix)
                                        self.set_status_lan(
                                            '  Teste2.7.5c: Reprovado. Não Recebeu o Prefixo atualizado'
                                        )
                                        time.sleep(2)
                                        self.set_status_lan(
                                            'REPROVADO'
                                        )  # Mensagem padrão para o frontEnd atualizar Status

                                        self.__packet_sniffer_lan.stop()
                                        self.__finish_wan = True
                                        self.__fail_test = True
                                        return False
                                    else:  #self.__validlifetime_CeRouter == pkt[ICMPv6NDOptPrefixInfo].validlifetime

                                        logging.info(
                                            ' APROVADO Teste 2.7.5c: Recebeu o Prefixo atualizado.'
                                        )

                                        self.set_status(
                                            ' APROVADO Teste 2.7.5c: Recebeu o Prefixo atualizado.'
                                        )
                                        time.sleep(2)
                                        self.set_status(
                                            'APROVADO'
                                        )  # Mensagem padrão para o frontEnd atualizar Status

                                        self.__packet_sniffer_lan.stop()
                                        self.__finish_wan = True
                                        self.__fail_test = False
                                        return True
                                else:
                                    logging.info(
                                        ' Teste2.7.5c: Reprovado. Não Recebeu o Prefixo'
                                    )
                                    logging.info(
                                        pkt[ICMPv6NDOptPrefixInfo].prefix)
                                    self.set_status_lan(
                                        'Teste2.7.5c: Reprovado. Não Recebeu o Prefixo'
                                    )
                                    time.sleep(2)
                                    self.set_status_lan(
                                        'REPROVADO'
                                    )  # Mensagem padrão para o frontEnd atualizar Status

                                    self.__packet_sniffer_lan.stop()
                                    self.__finish_wan = True
                                    self.__fail_test = True

    def dhcp_reconfigure(self):
        self.__config_setup1_1.set_ipv6_src(
            self.__config.get('wan', 'link_local_addr'))

        self.__config_setup1_1.set_ipv6_dst(
            self.__config_setup1_1.get_local_addr_ceRouter())

        self.__config_setup1_1.set_ether_src(
            self.__config.get('wan', 'link_local_mac'))

        self.__config_setup1_1.set_ether_dst(
            self.__config_setup1_1.get_mac_ceRouter())

        self.__config_setup1_1.set_dhcp_reconf_type(
            self.__config.get('t1.6.3', 'msg_type'))

        self.__config_setup1_1.set_udp_sport('547')
        self.__config_setup1_1.set_udp_dport('546')
        self.__sendmsgs.send_dhcp_reconfigure(self.__config_setup1_1)

    def dhcp_renew(self, pkt):
        #                        if self.__active_renew_dhcp:
        self.__config_setup1_1.set_mac_ceRouter(pkt[Ether].src)
        self.__config_setup1_1.set_local_addr_ceRouter(pkt[IPv6].src)
        self.__config_setup1_1.set_xid(pkt[DHCP6_Renew].trid)
        self.__config_setup1_1.set_ipv6_src(
            self.__config.get('wan', 'link_local_addr'))
        self.__config_setup1_1.set_ipv6_dst(pkt[IPv6].src)
        self.__config_setup1_1.set_ether_src(
            self.__config.get('wan', 'link_local_mac'))
        self.__config_setup1_1.set_ether_dst(pkt[Ether].src)
        self.__config_setup1_1.set_dhcp_preflft('0')
        self.__config_setup1_1.set_dhcp_validlft('0')
        self.__config_setup1_1.set_dhcp_plen('64')
        #self.__config_setup1_1.set_prefix_addr(self.__config.get('setup1-1_advertise','ia_pd_address2'))
        self.__sendmsgs.send_dhcp_reply_v2(self.__config_setup1_1)
        #self.__dhcp_ok = True

    def run(self):
        @self.__app.route("/WAN", methods=['GET'])
        def enviawan():
            return self.get_status()

        self.__t_lan = Thread(target=self.run_Lan, name='LAN_Thread')
        self.__t_lan.start()

        self.__packet_sniffer_wan = PacketSniffer('Test273b-WAN',
                                                  self.__queue_wan, self,
                                                  self.__config,
                                                  self.__wan_device_tr1)
        self.__packet_sniffer_wan.start()

        self.__packet_sniffer_lan = PacketSniffer('Test273b-LAN',
                                                  self.__queue_lan, self,
                                                  self.__config,
                                                  self.__lan_device)
        self.__packet_sniffer_lan.start()
        cache_wan = []
        self.set_flags()
        logging.info(self.__test_desc)
        t_test = 0
        sent_reconfigure = False
        time_over = False
        #time.sleep(11111)

        self.__config_setup1_1.set_pd_prefixlen(
            self.__config.get('t2.7.5c', 'pd_prefixlen'))
        self.__config_setup1_1.set_routerlifetime(
            self.__config.get('t2.7.5c', 'routerlifetime'))
        test_max_time = 300
        temporizador = 0
        #self.__config_setup1_1.active_DHCP_no_IA_PD()
        while not self.__queue_wan.full():
            while self.__queue_wan.empty():
                time.sleep(1)
                if temporizador < test_max_time:
                    temporizador = temporizador + 1
                else:
                    self.set_status('WAN: Reprovado. Timeout')
                    time.sleep(2)
                    self.set_status('REPROVADO')
                    logging.info('WAN: Reprovado. Timeout')
                    #logging.info(routerlifetime)
                    self.__packet_sniffer_lan.stop()
                    self.__packet_sniffer_wan.stop()
                    return False

                if temporizador % 10 == 0:
                    logging.info('WAN: Envio de RA periódico')
                    self.set_status('WAN: Envio de RA periódico')
                    self.ra_wan()

            pkt = self.__queue_wan.get()

            cache_wan.append(pkt)
            wrpcap("WAN-2.7.5c.cap", cache_wan)

            if not self.__config_setup1_1.get_setup1_1_OK():
                logging.info('WAN: Setup 1.1 em execução')
                self.set_status('WAN: Setup 1.1 em execução')
                if not self.__config_setup1_1.get_disapproved():
                    self.__config_setup1_1.run_setup1_1(pkt)
                else:
                    logging.info(
                        'WAN: Reprovado Teste 2.7.5c - Falha em completar o setup 1.1'
                    )
                    self.set_status(
                        'WAN: Reprovado Teste 2.7.5c - Falha em completar o setup 1.1'
                    )
                    time.sleep(2)
                    self.set_status(
                        'REPROVADO'
                    )  # Mensagem padrão para o frontEnd atualizar Status
                    self.__packet_sniffer_lan.stop()
                    self.__finish_wan = True
                    self.__fail_test = True
                    return False
            else:
                if not self.__finish_wan:

                    if not sent_reconfigure:
                        logging.info(
                            'WAN: Aguardando 25 segundos para enviar o DHCP Reconfigure'
                        )
                        self.set_status(
                            'WAN: Aguardando 25 segundos para enviar o DHCP Reconfigure'
                        )
                        time.sleep(25)

                        self.dhcp_reconfigure()

                        sent_reconfigure = True
                        logging.info('WAN:  DHCP Reconfigure Enviado')
                        self.set_status('WAN:  Reconfigure Enviado')

                    if pkt.haslayer(DHCP6_Renew):
                        logging.info('WAN:   Enviando DHCP REPLY')
                        self.set_status('WAN:  Enviando DHCP REPLy')
                        if not self.__dhcp_renew_done:
                            self.dhcp_renew(pkt)
                            self.__dhcp_renew_done = True
                else:
                    self.__packet_sniffer_wan.stop()
                    if self.__fail_test:
                        return False
                    else:
                        return True
        self.__packet_sniffer_wan.stop()
        return False