def __init__(self, *args, **kwargs): super(CoscinApp, self).__init__(*args, **kwargs) # The nib is the universal variable containing network configuration and # learned state (so far) nib = NetworkInformationBase() self.nib = nib config_file = os.getenv("COSCIN_CFG_FILE", "coscin_gates_testbed.json") nib.load_config(config_file) hostname = socket.gethostname() on_switch = self.nib.switch_for_controller_host(hostname) if on_switch == None: self.logger.error("The hostname "+hostname+" is not present in a controller_hosts attribute for the switch in "+config_file) sys.exit(1) zookeeper_for_switch = self.nib.zookeeper_for_switch(on_switch) if zookeeper_for_switch == "": self.mc = None else: self.mc = MultipleControllers(self.logger, hostname, zookeeper_for_switch) self.heartbeat_monitor_started = False # Register all handlers self.l2_learning_switch_handler = L2LearningSwitchHandler(nib, self.logger) self.cross_campus_handler = CrossCampusHandler(nib, self.logger) self.arp_handler = ArpHandler(nib, self.logger) self.path_selection_handler = PathSelectionHandler(nib, self.logger)
def create_handler(self, pkt, dp_to_customer, in_port, data, datapath, controller, federazione, public_to_private_a, public_to_private_b): print 'publice to private a', public_to_private_a, 'publice to private', public_to_private_b cs = controller.get_customers() arp_header = pkt.get_protocol(arp.arp) ip_header = pkt.get_protocol(ipv4.ipv4) udp_header = pkt.get_protocol(udp.udp) if arp_header is not None: self._handler = ArpHandler(pkt, datapath, in_port, controller) #print('------pkt-------',pkt) #dns_pkt=DNS(pkt[-1]) if udp_header is not None: print('-----------', cs[0].get_ns_domain_name()) dns_pkt = DNS(pkt[-1]) if cs[0].get_ns_domain_name() is None: print '--calling alg1---' if dns_pkt.qr == 0: self._handler = DNSQueryHandler(pkt, in_port, data, datapath, controller, federazione, public_to_private_a, public_to_private_b) elif dns_pkt.qr == 1: self._handler = DNSResponseHandler( pkt, in_port, data, datapath, controller, federazione, public_to_private_a, public_to_private_b, pkt[-1]) else: print '--calling alg2---' if dns_pkt.ancount == 1: dnsrr = dns_pkt.an controller.set_packet_ip(ip_header.src) self._handler = DNSResponseHandlerAlg2_2( pkt, in_port, data, datapath, controller, federazione, public_to_private_a, public_to_private_b, pkt[-1]) elif dns_pkt.qr == 0: self._handler = DNSQueryHandlerAlg2( pkt, in_port, data, datapath, controller, federazione, public_to_private_a, public_to_private_b) elif dns_pkt.qr == 1 and dns_pkt.qd.qname != cs[ 0].get_ns_domain_name(): #print ('--dns.id------',dns_pkt.id,'----udp_dst_port_--',udp_header.dst_port,'----udp_src_port_--',udp_header.src_port) self._handler = DNSResponseHandlerAlg2( pkt, in_port, data, datapath, controller, federazione, public_to_private_a, public_to_private_b, pkt[-1]) else: ip_header = pkt.get_protocol(ipv4.ipv4) if ip_header is not None: self._handler = IpHandler(pkt, dp_to_customer, in_port, data, datapath, controller, federazione, public_to_private_a, public_to_private_b) return self._handler
def create_handler(self, pkt, dp_to_customer, in_port, data, datapath, controller, federazione, public_to_private_a, public_to_private_b): print 'publice to private a', public_to_private_a, 'publice to private', public_to_private_b cs = controller.get_customers() arp_header = pkt.get_protocol(arp.arp) #print('--arp---',arp_header) ip_header = pkt.get_protocol(ipv4.ipv4) udp_header = pkt.get_protocol(udp.udp) if arp_header is not None: self._handler = ArpHandler(pkt, datapath, in_port, controller) elif udp_header is not None: #print ('------------------I am inside UDP part',udp_header.src_port) pport = udp_header.src_port #print('------pkt-------',pkt) dns_pkt = DNS(pkt[-1]) #print('------DNS-pkt-Q------',dns_pkt) print('------DNS-pkt-Q-type-----', dns_pkt.qd.qtype) csR = controller.get_customers_remote() cr_list = [] cr_ns_list = [] for cr in range(len(csR)): if csR[cr].get_ip() is not None: cr_list.append(csR[cr].get_ip()) #name=csR[cr].get_name_server() #name=name.split('.') #new_sub=name[1]+'.'+name[2]+'.'+name[3]+'.' #print'-----name[1:]--',new_sub #cr_ns_list.append(new_sub) if len(cr_list) >= 1: query = dns_pkt.qd.qname print '--calling alg1---, ', dns_pkt.qd.qname if dns_pkt.qr == 0: self._handler = DNSQueryHandler(pkt, in_port, data, datapath, controller, federazione, public_to_private_a, public_to_private_b) elif dns_pkt.qr == 1: self._handler = DNSResponseHandler( pkt, in_port, data, datapath, controller, federazione, public_to_private_a, public_to_private_b, pkt[-1]) else: print '--calling alg2---' if dns_pkt.ancount == 1: print '--I have final answer--' controller.set_packet_ip(ip_header.src) self._handler = DNSResponseHandlerAlg2_2( pkt, in_port, data, datapath, controller, federazione, public_to_private_a, public_to_private_b, pkt[-1]) elif dns_pkt.qr == 0 and dns_pkt.qd.qtype == 1: self._handler = DNSQueryHandlerAlg2( pkt, in_port, data, datapath, controller, federazione, public_to_private_a, public_to_private_b) elif dns_pkt.qr == 1: #print ('--dns.id------',dns_pkt.id,'----udp_dst_port_--',udp_header.dst_port,'----udp_src_port_--',udp_header.src_port) self._handler = DNSResponseHandlerAlg2( pkt, in_port, data, datapath, controller, federazione, public_to_private_a, public_to_private_b, pkt[-1]) elif ip_header is not None: print('------------------I am inside IP part-----------') self._handler = IpHandler(pkt, dp_to_customer, in_port, data, datapath, controller, federazione, public_to_private_a, public_to_private_b) #self._handler = IpHandler(pkt, dp_to_customer, in_port, data, datapath, controller, federazione,public_to_private_a,public_to_private_b) return self._handler