class ConfigSetup1_1: def __init__(self, config): #self.__queue_wan = Queue() #self.__queue_lan = Queue() #logging.info('self.__queue_size_inicio162') #logging.info(self.__queue_wan.qsize()) self.__config = config self.__interface = None self.__lla = None self.__pkt = None self.__valid = False self.__result = None self.__device_lan_tn1 = None self.__lan_mac_tn1 = None self.__ceRouter_mac_addr = None self.__flag_M = None self.__flag_O = None self.__flag_chlim = None self.__flag_L = None self.__flag_A = None self.__flag_R = None self.__validlifetime = None self.__preferredlifetime = None self.__interval = None self.__routerlifetime = None self.__ipv6_dst = None self.__ipv6_src = None self.__ether_src = None self.__ether_dst = None self.__xid = None self.__server_duid = None self.__client_duid = None self.__ND_local_OK = False self.__setup1_1_OK = False self.__local_ping_OK = False self.__global_ns_ok = False self.__dhcp_ok = False self.__active_DHCP_no_IA_PD = False self.__iaid = None self.__mac_cerouter = None self.__flag_prf = None self.udp_dport = None self.udp_sport = None self.__reachabletime = None self.__retranstimer = None self.__disapproved = False self.__dhcp_reconf_type = None self.__local_addr_ceRouter = None self.__dhcp_t1 = None self.__dhcp_t2 = None self.__dhcp_preflft = None self.__dhcp_plen = None self.__dhcp_validlft = None self.__active_renew_dhcp = None self.__prefix_addr = None self.__set_ra2 = False self.__recvd_dhcp_renew = False self.__dhcp_renew_done = False self.__sendmsgssetup1_1 = SendMsgs(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.2b') #self.__packet_sniffer.daemon=True #recebe o pacote #packetSniffer return pkt def get_prefix_addr(self): return self.__prefix_addr def set_prefix_addr(self, valor): self.__prefix_addr = valor def get_reachabletime(self): return int(self.__reachabletime) def get_retranstimer(self): return int(self.__retranstimer) def set_reachabletime(self, valor): self.__reachabletime = valor def set_retranstimer(self, valor): self.__retranstimer = valor def get_recvd_dhcp_renew(self): return self.__recvd_dhcp_renew def active_DHCP_no_IA_PD(self): self.__active_DHCP_no_IA_PD = True def get_setup1_1_OK(self): return self.__setup1_1_OK def set_result(self, valor): self.__result = valor def get_result(self): return self.__result def send_icmpv6_ra(self, pkt): et = Ether(src=self.__wan_mac_tr1) #,\ #dst=pkt[Ether].src) ip = IPv6(src=self.__link_local_addr,\ dst=self.__all_nodes_addr) icmp_ra = ICMPv6ND_RA() sendp(et / ip / icmp_ra, iface=self.__wan_device_tr1) def send_echo_request_lan(self): et = Ether(src=self.__wan_mac_tr1,\ dst=self.__ceRouter_mac_addr) ip = IPv6(src=self.__link_local_addr,\ dst=self.__all_nodes_addr) icmp_ra = ICMPv6EchoRequest() sendp(et / ip / icmp_ra, iface=self.__wan_device_tr1) def flags_partA(self): self.__flag_M = self.__config.get('t1.6.2_flags_part_a', 'flag_m') self.__flag_O = self.__config.get('t1.6.2_flags_part_a', 'flag_o') self.__flag_chlim = self.__config.get('t1.6.2_flags_part_a', 'flag_chlim') self.__flag_L = self.__config.get('t1.6.2_flags_part_a', 'flag_l') self.__flag_A = self.__config.get('t1.6.2_flags_part_a', 'flag_a') self.__flag_R = self.__config.get('t1.6.2_flags_part_a', 'flag_r') self.__validlifetime = self.__config.get('t1.6.2_flags_part_a', 'validlifetime') self.__preferredlifetime = self.__config.get('t1.6.2_flags_part_a', 'preferredlifetime') self.__routerlifetime = self.__config.get('t1.6.2_flags_part_a', 'routerlifetime') self.__intervalo = self.__config.get('t1.6.2_flags_part_a', 'intervalo') def flags_partB(self): self.__flag_M = self.__config.get('t1.6.2_flags_part_b', 'flag_m') self.__flag_O = self.__config.get('t1.6.2_flags_part_b', 'flag_o') self.__flag_chlim = self.__config.get('t1.6.2_flags_part_b', 'flag_chlim') self.__flag_L = self.__config.get('t1.6.2_flags_part_b', 'flag_l') self.__flag_A = self.__config.get('t1.6.2_flags_part_b', 'flag_a') self.__flag_R = self.__config.get('t1.6.2_flags_part_b', 'flag_r') self.__validlifetime = self.__config.get('t1.6.2_flags_part_b', 'validlifetime') self.__preferredlifetime = self.__config.get('t1.6.2_flags_part_b', 'preferredlifetime') self.__routerlifetime = self.__config.get('t1.6.2_flags_part_b', 'routerlifetime') self.__intervalo = self.__config.get('t1.6.2_flags_part_b', 'intervalo') def get_flag_M(self): return int(self.__flag_M) def set_flag_M(self, valor): self.__flag_M = valor def get_flag_O(self): return int(self.__flag_O) def set_flag_O(self, valor): self.__flag_O = valor def get_flag_prf(self): return int(self.__flag_prf) def set_flag_prf(self, valor): self.__flag_prf = valor def set_flag_0(self, valor): self.__flag_O = valor def set_routerlifetime(self, valor): self.__routerlifetime = valor def set_flag_L(self, valor): self.__flag_L = valor def set_flag_A(self, valor): self.__flag_A = valor def set_flag_R(self, valor): self.__flag_R = valor def set_validlifetime(self, valor): self.__validlifetime = valor def set_preferredlifetime(self, valor): self.__preferredlifetime = valor def set_intervalo(self, valor): self.__intervalo = valor def set_flag_chlim(self, valor): self.__flag_chlim = valor def get_flag_chlim(self): return int(self.__flag_chlim) def get_flag_L(self): return int(self.__flag_L) def get_flag_A(self): return int(self.__flag_A) def get_flag_R(self): return int(self.__flag_R) def get_validlifetime(self): return int(self.__validlifetime) def get_preferredlifetime(self): return int(self.__preferredlifetime) def get_interval(self): return int(self.__intervalo) def get_routerlifetime(self): return int(self.__routerlifetime) def set_ipv6_dst(self, valor): self.__ipv6_dst = valor def get_ipv6_dst(self): return self.__ipv6_dst def set_ipv6_src(self, valor): self.__ipv6_src = valor def get_ipv6_src(self): return self.__ipv6_src def set_ether_dst(self, valor): self.__ether_dst = valor def get_ether_dst(self): return self.__ether_dst def set_ether_src(self, valor): self.__ether_src = valor def set_ND_local_OK(self): self.__ND_local_OK = True def get_ether_src(self): return self.__ether_src def set_local_addr_ceRouter(self, valor): self.__local_addr_ceRouter = valor def get_local_addr_ceRouter(self): return self.__local_addr_ceRouter def set_tgt(self, valor): self.__tgt = valor def get_tgt(self): return self.__tgt def set_xid(self, valor): self.__xid = valor def get_xid(self): return self.__xid def set_client_duid(self, valor): self.__client_duid = valor def get_client_duid(self): return self.__client_duid def set_server_duid(self, valor): self.__server_duid = valor def get_server_duid(self): return self.__server_duid def set_iaid(self, valor): self.__iaid = valor def get_iaid(self): return self.__iaid def get_local_ping(self): return self.__local_ping_OK def get_ND_local_OK(self): return self.__ND_local_OK def get_dhcp_reconf_type(self): return self.__dhcp_reconf_type def set_dhcp_reconf_type(self, valor): self.__dhcp_reconf_type = valor def set_mac_ceRouter(self, valor): self.__mac_cerouter = valor def get_mac_ceRouter(self): return self.__mac_cerouter def get_disapproved(self): return self.__disapproved def get_lla(self): return self.__lla def set_lla(self, valor): self.__lla = valor def set_setup1_1_OK(self, valor): self.__setup1_1_OK = valor def get_udp_sport(self): return int(self.udp_sport) def set_udp_sport(self, valor): self.udp_sport = valor def set_ra2(self): self.__set_ra2 = True def get_udp_dport(self): return int(self.udp_dport) def set_udp_dport(self, valor): self.udp_dport = valor def set_pd_prefixlen(self, valor): self.__pd_prefixlen = valor def get_pd_prefixlen(self): return int(self.__pd_prefixlen) def set_dhcp_t1(self, valor): self.__dhcp_t1 = valor def set_dhcp_t2(self, valor): self.__dhcp_t2 = valor def set_dhcp_preflft(self, valor): self.__dhcp_preflft = valor def set_dhcp_plen(self, valor): self.__dhcp_plen = valor def set_dhcp_validlft(self, valor): self.__dhcp_validlft = valor def get_dhcp_t1(self): return int(self.__dhcp_t1) def get_dhcp_t2(self): return int(self.__dhcp_t2) def get_dhcp_preflft(self): return int(self.__dhcp_preflft) def get_dhcp_plen(self): return int(self.__dhcp_plen) def get_dhcp_validlft(self): return int(self.__dhcp_validlft) def active_renew_dhcp(self): self.__active_renew_dhcp = True def get_dhcp_renew_done(self): return self.__dhcp_renew_done def check_layers(self, pkt): #print('Check REnew') if pkt.haslayer(DHCP6_Renew): #print('====PACOTE RENEW====') self.__recvd_dhcp_renew = True if self.__active_renew_dhcp: self.set_mac_ceRouter(pkt[Ether].src) self.set_local_addr_ceRouter(pkt[IPv6].src) self.set_xid(pkt[DHCP6_Renew].trid) self.set_ipv6_src(self.__config.get('wan', 'link_local_addr')) self.set_ipv6_dst(pkt[IPv6].src) self.set_ether_src(self.__config.get('wan', 'link_local_mac')) self.set_ether_dst(pkt[Ether].src) self.__sendmsgssetup1_1.send_dhcp_reply_v2(self) #self.__dhcp_ok = True self.__dhcp_renew_done = True # if pkt.haslayer(ICMPv6ND_NS): # self.__recvd_echo_request = True # self.set_ipv6_src(self.__config.get('wan','link_local_addr')) # self.set_ipv6_dst(self.get_local_addr_ceRouter()) # self.set_ether_src(self.__config.get('wan','link_local_mac')) # self.set_ether_dst(self.get_mac_ceRouter()) # #self.set_tgt(self.get_local_addr_ceRouter()) # self.__sendmsgssetup1_1.send_echo_request(self) # if pkt.haslayer(ICMPv6EchoRequest): # self.__recvd_echo_request = True # self.set_ipv6_src(self.__config.get('wan','global_lan_addr')) # self.set_ipv6_dst(pkt.[IPv6].src) # self.set_ether_src(self.__config.get('wan','ra_mac')) # self.set_ether_dst(pkt[Ether].src) # #self.set_tgt(self.get_local_addr_ceRouter()) # self.__sendmsgssetup1_1.send_echo_reply(self) def run_setup1_1(self, pkt): if pkt[Ether].src == self.__config.get('wan', 'link_local_mac'): return if pkt[Ether].src == self.__config.get('wan', 'ra_mac'): return if self.__disapproved: return False if pkt.haslayer(ICMPv6EchoReply): #print('DESTINO IPv6:' + pkt[IPv6].dst) if pkt[IPv6].dst == self.__config.get('wan', 'link_local_addr'): #print('DESTINO IPv6 OKKKK') self.__local_ping_OK = True return if pkt.haslayer(ICMPv6ND_NS): #print('1') if pkt[ICMPv6ND_NS].tgt == '::': p #rint('11') return if pkt[IPv6].src == self.__config.get('wan', 'link_local_addr'): #print('111') return if pkt[IPv6].src == self.__config.get('wan', 'global_wan_addr'): #print('1111') return if pkt[IPv6].src == self.__config.get('wan', 'ra_address'): return if pkt.haslayer(ICMPv6EchoRequest): return # self.__sendmsgssetup1_1.send_icmp_na(self) if pkt[ICMPv6ND_NS].tgt == self.__config.get( 'wan', 'link_local_addr'): if pkt[IPv6].src == self.__config.get('wan', 'link_local_addr'): return if pkt[IPv6].src == self.__config.get('wan', 'global_wan_addr'): return if pkt[IPv6].src == self.__config.get('wan', 'ra_address'): return self.set_mac_ceRouter(pkt[Ether].src) self.set_local_addr_ceRouter(pkt[IPv6].src) self.set_ipv6_src(self.__config.get('wan', 'link_local_addr')) self.set_ipv6_dst(pkt[IPv6].src) self.set_ether_src(self.__config.get('wan', 'link_local_mac')) self.set_ether_dst(pkt[Ether].src) self.set_tgt(self.__config.get('wan', 'link_local_addr')) #self.__sendmsgssetup1_1.send_echo_request(self) self.set_lla(self.__config.get('wan', 'link_local_mac')) # print("ENVIOU NAA") if not self.__local_ping_OK: self.__sendmsgssetup1_1.send_icmp_na(self) # time.sleep(10) else: self.set_local_addr_ceRouter(pkt[ICMPv6ND_NS].tgt) self.set_mac_ceRouter(pkt[Ether].src) #print('enviou ICMP NA') self.set_ipv6_src(self.__config.get('wan', 'link_local_addr')) self.set_ipv6_dst( self.__config.get('multicast', 'all_nodes_addr')) self.set_ether_src(self.__config.get('wan', 'link_local_mac')) self.set_ether_dst( self.__config.get('multicast', 'all_mac_nodes')) self.set_tgt(self.get_local_addr_ceRouter()) #self.__sendmsgssetup1_1.send_echo_request(self) self.set_lla(self.__config.get('wan', 'link_local_mac')) if not self.__ND_local_OK: #print('nao tenho ND LOCAL OK') self.__sendmsgssetup1_1.send_icmp_ns(self) return if pkt.haslayer(ICMPv6ND_NA) and not self.__local_ping_OK: #self.__ND_local_OK = True self.set_ipv6_src(self.__config.get('wan', 'link_local_addr')) self.set_ipv6_dst(self.get_local_addr_ceRouter()) self.set_ether_src(self.__config.get('wan', 'link_local_mac')) self.set_ether_dst(self.get_mac_ceRouter()) #self.set_tgt(self.get_local_addr_ceRouter()) self.__sendmsgssetup1_1.send_echo_request(self) self.__ND_local_OK = True #return else: #self.__ND_local_OK = True #print('enviou ICMP NS') if not self.__local_ping_OK: self.set_ipv6_src(self.__config.get('wan', 'link_local_addr')) self.set_ipv6_dst( self.__config.get('multicast', 'all_nodes_addr')) self.set_ether_src(self.__config.get('wan', 'link_local_mac')) self.set_ether_dst( self.__config.get('multicast', 'all_mac_nodes')) #self.set_tgt(self.get_local_addr_ceRouter()) self.set_tgt(self.get_local_addr_ceRouter()) #self.__sendmsgssetup1_1.send_echo_request(self) self.set_lla(self.__config.get('wan', 'link_local_mac')) self.__sendmsgssetup1_1.send_icmp_ns(self) #return if pkt.haslayer(ICMPv6ND_RS): if self.__local_ping_OK: logging.info('SEND TR1 RA 531') self.set_ether_src(self.__config.get('wan', 'ra_mac')) self.set_ether_dst( self.__config.get('multicast', 'all_mac_nodes')) self.set_ipv6_src(self.__config.get('wan', 'ra_address')) self.set_ipv6_dst( self.__config.get('multicast', 'all_nodes_addr')) # if not self.__active_RA_no_IA_PD: #self.set_lla(self.__config.get('wan','ra_mac')) if not self.__set_ra2: self.__sendmsgssetup1_1.send_tr1_RA(self) else: print('send_RA2') self.__sendmsgssetup1_1.send_tr1_RA2(self) else: self.set_local_addr_ceRouter(pkt[IPv6].src) self.set_mac_ceRouter(pkt[Ether].src) # print('PRE SOLICIT') if pkt.haslayer(DHCP6_Solicit) and self.__local_ping_OK: logging.info('SEND ADVERTISE 576') self.set_xid(pkt[DHCP6_Solicit].trid) self.set_client_duid(pkt[DHCP6OptClientId].duid) self.set_server_duid((self.__config.get('setup1-1_advertise', 'server_duid'))) self.set_iaid(pkt[DHCP6OptIA_NA].iaid) self.set_ether_src(self.__config.get('wan', 'link_local_mac')) self.set_ether_dst(pkt[Ether].src) self.set_ipv6_dst(pkt[IPv6].src) self.set_local_addr_ceRouter(pkt[IPv6].src) self.set_mac_ceRouter(pkt[Ether].src) self.set_ipv6_src(self.__config.get('wan', 'link_local_addr')) if not self.__active_DHCP_no_IA_PD: self.__sendmsgssetup1_1.send_dhcp_advertise(self) else: self.__sendmsgssetup1_1.send_dhcp_advertise_no_IA_PD(self) elif pkt.haslayer(DHCP6_Solicit): self.set_local_addr_ceRouter(pkt[IPv6].src) self.set_mac_ceRouter(pkt[Ether].src) if pkt.haslayer(DHCP6_Request): logging.info('SEND REPLY 616') self.set_mac_ceRouter(pkt[Ether].src) self.set_local_addr_ceRouter(pkt[IPv6].src) self.set_xid(pkt[DHCP6_Request].trid) self.set_ipv6_src(self.__config.get('wan', 'link_local_addr')) self.set_ipv6_dst(pkt[IPv6].src) self.set_ether_src(self.__config.get('wan', 'link_local_mac')) self.set_ether_dst(pkt[Ether].src) self.__sendmsgssetup1_1.send_dhcp_reply(self) self.__dhcp_ok = True self.__setup1_1_OK = True logging.info("Common Test Setup 1.1 OK")
class Test275c: 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.5c') 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.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 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.5c - 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(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.__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.5c: Recebeu o Prefixo atualizado.' ) logging.info('Aprovado Teste2.7.5c.') 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.5c: Recebido Recursive DNS OK.') # logging.info('Aprovado Teste2.7.5c.') # self.__packet_sniffer_lan.stop() # self.__finish_wan = True # self.__fail_test = False # return True # else: # logging.info(' Teste2.7.5c: 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.5c', 'pd_prefixlen')) self.__config_setup1_1.set_routerlifetime( self.__config.get('t2.7.5c', '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('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 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
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
class ConfigSetup1_1: def __init__(self,config): self.__config = config self.__interface = None self.__lla = None self.__pkt = None self.__valid = False self.__result = None self.__device_lan_tn1 = None self.__lan_mac_tn1 = None self.__ceRouter_mac_addr = None self.__flag_M = None self.__flag_O = None self.__flag_chlim = None self.__flag_L = None self.__flag_A = None self.__flag_R = None self.__validlifetime = None self.__preferredlifetime = None self.__interval = None self.__routerlifetime = None self.__ipv6_dst =None self.__ipv6_src = None self.__ether_src = None self.__ether_dst = None self.__xid = None self.__server_duid = None self.__client_duid = None self.__ND_local_OK = False self.__setup1_1_OK = False self.__local_ping_OK = False self.__global_ns_ok = False self.__dhcp_ok = False self.__active_DHCP_no_IA_PD = False self.__iaid = None self.__mac_cerouter = None self.__flag_prf = None self.udp_dport = None self.udp_sport = None self.__reachabletime = None self.__retranstimer = None self.__disapproved = False self.__dhcp_reconf_type = None self.__local_addr_ceRouter =None self.__dhcp_t1 = None self.__dhcp_t2 = None self.__dhcp_preflft = None self.__dhcp_plen = None self.__dhcp_validlft = None self.__active_renew_dhcp = None self.__prefix_addr = None self.__set_ra2 = False self.__recvd_dhcp_renew = False self.__dhcp_renew_done = False self.__pd_prefixlen = None self.__sendmsgssetup1_1 = SendMsgs(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.2b') def get_prefix_addr(self): return self.__prefix_addr def set_prefix_addr(self,valor): self.__prefix_addr = valor def get_reachabletime(self): return int(self.__reachabletime) def get_retranstimer(self): return int(self.__retranstimer) def set_reachabletime(self,valor): self.__reachabletime = valor def set_retranstimer(self,valor): self.__retranstimer = valor def get_recvd_dhcp_renew(self): return self.__recvd_dhcp_renew def active_DHCP_no_IA_PD(self): self.__active_DHCP_no_IA_PD = True def get_setup1_1_OK(self): return self.__setup1_1_OK def set_result(self, valor): self.__result = valor def get_result(self): return self.__result def send_icmpv6_ra(self,pkt): et = Ether(src=self.__wan_mac_tr1)#,\ #dst=pkt[Ether].src) ip = IPv6(src=self.__link_local_addr,\ dst=self.__all_nodes_addr) icmp_ra = ICMPv6ND_RA() sendp(et/ip/icmp_ra,iface=self.__wan_device_tr1) def send_echo_request_lan(self): et = Ether(src=self.__wan_mac_tr1,\ dst=self.__ceRouter_mac_addr) ip = IPv6(src=self.__link_local_addr,\ dst=self.__all_nodes_addr) icmp_ra = ICMPv6EchoRequest() sendp(et/ip/icmp_ra,iface=self.__wan_device_tr1) def flags_partA(self): self.__flag_M = self.__config.get('t1.6.2_flags_part_a','flag_m') self.__flag_O = self.__config.get('t1.6.2_flags_part_a','flag_o') self.__flag_chlim = self.__config.get('t1.6.2_flags_part_a','flag_chlim') self.__flag_L = self.__config.get('t1.6.2_flags_part_a','flag_l') self.__flag_A = self.__config.get('t1.6.2_flags_part_a','flag_a') self.__flag_R = self.__config.get('t1.6.2_flags_part_a','flag_r') self.__validlifetime = self.__config.get('t1.6.2_flags_part_a','validlifetime') self.__preferredlifetime = self.__config.get('t1.6.2_flags_part_a','preferredlifetime') self.__routerlifetime = self.__config.get('t1.6.2_flags_part_a','routerlifetime') self.__intervalo = self.__config.get('t1.6.2_flags_part_a','intervalo') def flags_partB(self): self.__flag_M = self.__config.get('t1.6.2_flags_part_b','flag_m') self.__flag_O = self.__config.get('t1.6.2_flags_part_b','flag_o') self.__flag_chlim = self.__config.get('t1.6.2_flags_part_b','flag_chlim') self.__flag_L = self.__config.get('t1.6.2_flags_part_b','flag_l') self.__flag_A = self.__config.get('t1.6.2_flags_part_b','flag_a') self.__flag_R = self.__config.get('t1.6.2_flags_part_b','flag_r') self.__validlifetime = self.__config.get('t1.6.2_flags_part_b','validlifetime') self.__preferredlifetime = self.__config.get('t1.6.2_flags_part_b','preferredlifetime') self.__routerlifetime = self.__config.get('t1.6.2_flags_part_b','routerlifetime') self.__intervalo = self.__config.get('t1.6.2_flags_part_b','intervalo') def get_flag_M(self): return int(self.__flag_M) def set_flag_M(self,valor): self.__flag_M = valor def get_flag_O(self): return int(self.__flag_O) def set_flag_O(self,valor): self.__flag_O= valor def get_flag_prf(self): return int(self.__flag_prf) def set_flag_prf(self,valor): self.__flag_prf = valor def set_flag_0(self,valor): self.__flag_O = valor def set_routerlifetime(self,valor): self.__routerlifetime= valor def set_flag_L(self,valor): self.__flag_L = valor def set_flag_A(self,valor): self.__flag_A = valor def set_flag_R(self,valor): self.__flag_R = valor def set_validlifetime(self,valor): self.__validlifetime = valor def set_preferredlifetime(self,valor): self.__preferredlifetime = valor def set_intervalo(self,valor): self.__intervalo = valor def set_flag_chlim(self,valor): self.__flag_chlim = valor def get_flag_chlim(self): return int(self.__flag_chlim) def get_flag_L(self): return int(self.__flag_L) def get_flag_A(self): return int(self.__flag_A) def get_flag_R(self): return int(self.__flag_R) def get_validlifetime(self): return int(self.__validlifetime) def get_preferredlifetime(self): return int(self.__preferredlifetime) def get_interval(self): return int(self.__intervalo) def get_routerlifetime(self): return int(self.__routerlifetime) def set_ipv6_dst(self, valor): self.__ipv6_dst = valor def get_ipv6_dst(self): return self.__ipv6_dst def set_ipv6_src(self, valor): self.__ipv6_src = valor def get_ipv6_src(self): return self.__ipv6_src def set_ether_dst(self, valor): self.__ether_dst = valor def get_ether_dst(self): return self.__ether_dst def set_ether_src(self, valor): self.__ether_src = valor def set_ND_local_OK(self): self.__ND_local_OK = True def get_ether_src(self): return self.__ether_src def set_local_addr_ceRouter(self,valor): self.__local_addr_ceRouter = valor def get_local_addr_ceRouter(self): return self.__local_addr_ceRouter def set_tgt(self,valor): self.__tgt = valor def get_tgt(self): return self.__tgt def set_xid(self,valor): self.__xid = valor def get_xid(self): return self.__xid def set_client_duid(self,valor): self.__client_duid = valor def get_client_duid(self): return self.__client_duid def set_server_duid(self,valor): self.__server_duid = valor def get_server_duid(self): return self.__server_duid def set_iaid(self,valor): self.__iaid = valor def get_iaid(self): return self.__iaid def get_local_ping(self): return self.__local_ping_OK def get_ND_local_OK(self): return self.__ND_local_OK def get_dhcp_reconf_type(self): return self.__dhcp_reconf_type def set_dhcp_reconf_type(self,valor): self.__dhcp_reconf_type = valor def set_mac_ceRouter(self,valor): self.__mac_cerouter = valor def get_mac_ceRouter(self): return self.__mac_cerouter def get_disapproved(self): return self.__disapproved def get_lla(self): return self.__lla def set_lla(self,valor): self.__lla = valor def set_setup1_1_OK(self,valor): self.__setup1_1_OK = valor def get_udp_sport(self): return int(self.udp_sport) def set_udp_sport(self,valor): self.udp_sport = valor def set_ra2(self): self.__set_ra2 = True def get_udp_dport(self): return int(self.udp_dport) def set_udp_dport(self,valor): self.udp_dport = valor def set_pd_prefixlen(self,valor): self.__pd_prefixlen = valor def get_pd_prefixlen(self): return int(self.__pd_prefixlen) def set_dhcp_t1(self,valor): self.__dhcp_t1 = valor def set_dhcp_t2(self,valor): self.__dhcp_t2 = valor def set_dhcp_preflft(self,valor): self.__dhcp_preflft = valor def set_dhcp_plen(self,valor): self.__dhcp_plen = valor def set_dhcp_validlft(self,valor): self.__dhcp_validlft = valor def get_dhcp_t1(self): return int(self.__dhcp_t1) def get_dhcp_t2(self): return int(self.__dhcp_t2) def get_dhcp_preflft(self): return int(self.__dhcp_preflft) def get_dhcp_plen(self): return int(self.__dhcp_plen) def get_dhcp_validlft(self): return int(self.__dhcp_validlft) def active_renew_dhcp(self): self.__active_renew_dhcp = True def get_dhcp_renew_done(self): return self.__dhcp_renew_done def check_layers(self,pkt): if pkt.haslayer(DHCP6_Renew): self.__recvd_dhcp_renew = True if self.__active_renew_dhcp: self.set_mac_ceRouter(pkt[Ether].src) self.set_local_addr_ceRouter(pkt[IPv6].src) self.set_xid(pkt[DHCP6_Renew].trid) self.set_ipv6_src(self.__config.get('wan','link_local_addr')) self.set_ipv6_dst(pkt[IPv6].src) self.set_ether_src(self.__config.get('wan','link_local_mac')) self.set_ether_dst(pkt[Ether].src) self.__sendmsgssetup1_1.send_dhcp_reply_v2(self) self.__dhcp_renew_done = True def run_setup1_1(self,pkt): if pkt[Ether].src == self.__config.get('wan','link_local_mac'): return if pkt[Ether].src == self.__config.get('wan','ra_mac'): return if self.__disapproved: return False if pkt.haslayer(ICMPv6EchoReply): if pkt[IPv6].dst == self.__config.get('wan','link_local_addr'): self.__local_ping_OK = True return if pkt.haslayer(ICMPv6ND_NS): if pkt[ICMPv6ND_NS].tgt == '::': return if pkt[IPv6].src == self.__config.get('wan','link_local_addr'): return if pkt[IPv6].src == self.__config.get('wan','global_wan_addr'): return if pkt[IPv6].src == self.__config.get('wan','ra_address'): return if pkt.haslayer(ICMPv6EchoRequest): return if pkt[ICMPv6ND_NS].tgt == self.__config.get('wan','link_local_addr'): if pkt[IPv6].src == self.__config.get('wan','link_local_addr'): return if pkt[IPv6].src == self.__config.get('wan','global_wan_addr'): return if pkt[IPv6].src == self.__config.get('wan','ra_address'): return self.set_mac_ceRouter(pkt[Ether].src) self.set_local_addr_ceRouter(pkt[IPv6].src) self.set_ipv6_src(self.__config.get('wan','link_local_addr')) self.set_ipv6_dst(pkt[IPv6].src) self.set_ether_src(self.__config.get('wan','link_local_mac')) self.set_ether_dst(pkt[Ether].src) self.set_tgt(self.__config.get('wan','link_local_addr')) self.set_lla(self.__config.get('wan','link_local_mac')) if not self.__local_ping_OK: self.__sendmsgssetup1_1.send_icmp_na(self) else: self.set_local_addr_ceRouter(pkt[ICMPv6ND_NS].tgt) self.set_mac_ceRouter(pkt[Ether].src) self.set_ipv6_src(self.__config.get('wan','link_local_addr')) self.set_ipv6_dst(self.__config.get('multicast','all_nodes_addr')) self.set_ether_src(self.__config.get('wan','link_local_mac')) self.set_ether_dst(self.__config.get('multicast','all_mac_nodes')) self.set_tgt(self.get_local_addr_ceRouter()) self.set_lla(self.__config.get('wan','link_local_mac')) if not self.__ND_local_OK: self.__sendmsgssetup1_1.send_icmp_ns(self) return if pkt.haslayer(ICMPv6ND_NA) and not self.__local_ping_OK: self.set_ipv6_src(self.__config.get('wan','link_local_addr')) self.set_ipv6_dst(self.get_local_addr_ceRouter()) self.set_ether_src(self.__config.get('wan','link_local_mac')) self.set_ether_dst(self.get_mac_ceRouter()) self.__sendmsgssetup1_1.send_echo_request(self) self.__ND_local_OK = True else: if not self.__local_ping_OK: self.set_ipv6_src(self.__config.get('wan','link_local_addr')) self.set_ipv6_dst(self.__config.get('multicast','all_nodes_addr')) self.set_ether_src(self.__config.get('wan','link_local_mac')) self.set_ether_dst(self.__config.get('multicast','all_mac_nodes')) self.set_tgt(self.get_local_addr_ceRouter()) self.set_lla(self.__config.get('wan','link_local_mac')) self.__sendmsgssetup1_1.send_icmp_ns(self) if pkt.haslayer(ICMPv6ND_RS): if self.__local_ping_OK: self.set_ether_src(self.__config.get('wan','ra_mac')) self.set_ether_dst(self.__config.get('multicast','all_mac_nodes')) self.set_ipv6_src(self.__config.get('wan','ra_address')) self.set_ipv6_dst(self.__config.get('multicast','all_nodes_addr')) if not self.__set_ra2: print('RA_NORMAL') self.__sendmsgssetup1_1.send_tr1_RA(self) else: print('RA_versao2L') self.__sendmsgssetup1_1.send_tr1_RA2(self) else: self.set_local_addr_ceRouter(pkt[IPv6].src) self.set_mac_ceRouter(pkt[Ether].src) if pkt.haslayer(DHCP6_Solicit) and self.__local_ping_OK: logging.info('Início do DHCPv6') self.set_xid(pkt[DHCP6_Solicit].trid) self.set_client_duid(pkt[DHCP6OptClientId].duid) self.set_server_duid((self.__config.get('setup1-1_advertise','server_duid'))) self.set_iaid(pkt[DHCP6OptIA_NA].iaid) self.set_ether_src(self.__config.get('wan','link_local_mac')) self.set_ether_dst(pkt[Ether].src) self.set_ipv6_dst(pkt[IPv6].src) self.set_local_addr_ceRouter(pkt[IPv6].src) self.set_mac_ceRouter(pkt[Ether].src) self.set_ipv6_src(self.__config.get('wan','link_local_addr')) if not self.__active_DHCP_no_IA_PD: self.__sendmsgssetup1_1.send_dhcp_advertise(self) else: self.__sendmsgssetup1_1.send_dhcp_advertise_no_IA_PD(self) elif pkt.haslayer(DHCP6_Solicit): self.set_local_addr_ceRouter(pkt[IPv6].src) self.set_mac_ceRouter(pkt[Ether].src) if pkt.haslayer(DHCP6_Request): logging.info('Conclusão do DHCPv6') self.set_mac_ceRouter(pkt[Ether].src) self.set_local_addr_ceRouter(pkt[IPv6].src) self.set_xid(pkt[DHCP6_Request].trid) self.set_ipv6_src(self.__config.get('wan','link_local_addr')) self.set_ipv6_dst(pkt[IPv6].src) self.set_ether_src(self.__config.get('wan','link_local_mac')) self.set_ether_dst(pkt[Ether].src) self.__sendmsgssetup1_1.send_dhcp_reply(self) self.__dhcp_ok = True self.__setup1_1_OK = True logging.info("Common Test Setup 1.1 OK")