示例#1
0
  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)
示例#2
0
 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