def connect_to_dynamips(self, local_port, dynamips, remote_slot, remote_int, remote_port): #figure out the destionation port according to interface descritors if remote_slot.adapter in ['ETHSW', 'ATMSW', 'FRSW', 'Bridge']: # This is a virtual switch that doesn't provide interface descriptors dst_port = remote_port else: # Look at the interfaces dict to find out what the real port is as # as far as dynamips is concerned try: dst_port = remote_slot.interfaces[remote_int][remote_port] except KeyError: raise DynamipsError, 'invalid interface' #validate the connection if not validate_connect('e', remote_int, self.p, self, local_port, dynamips, remote_slot, remote_port): return (src_udp, dst_udp) = self.__allocate_udp_port(dynamips) if self.p.host == dynamips.host: # source and dest adapters are on the same dynamips server, perform loopback binding optimization src_ip = '127.0.0.1' dst_ip = '127.0.0.1' else: # source and dest are on different dynamips servers src_ip = self.p.name dst_ip = dynamips.host #check whether the user did not make a mistake in multi-server .net file if src_ip == 'localhost' or src_ip =='127.0.0.1' or dst_ip =='localhost' or dst_ip == '127.0.0.1': dowarning('Connecting %s port %s to %s slot %s port %s:\nin case of multi-server operation make sure you do not use "localhost" string in definition of dynamips hypervisor.\n'% (self.name, local_port, remote_slot.router.name, remote_slot.adapter, remote_port)) #create the fw side of UDP connection send(self.p, 'pemu create_udp %s %i %i %s %i' % (self.name, local_port, src_udp, dst_ip, dst_udp)) self.nios[local_port] = UDPConnection(src_udp, dst_ip, dst_udp, self, local_port) #create the dynamips side of UDP connection - the NIO and connect it to the router remote_nio = NIO_udp(dynamips, dst_udp, src_ip, src_udp, None, remote_slot, dst_port) if isinstance(remote_slot, Bridge): # Bridges don't use ports remote_slot.nio(nio=remote_nio) else: remote_slot.nio(port=dst_port, nio=remote_nio) #set reverse nios remote_nio.reverse_nio = self.nios[local_port] self.nios[local_port].reverse_nio = remote_nio
def connect_to_dynamips(self, local_port, dynamips, remote_slot, remote_int, remote_port): #figure out the destionation port according to interface descritors if remote_slot.adapter in ['ETHSW', 'ATMSW', 'ATMBR', 'FRSW', 'Bridge']: # This is a virtual switch that doesn't provide interface descriptors dst_port = remote_port else: # Look at the interfaces dict to find out what the real port is as # as far as dynamips is concerned try: dst_port = remote_slot.interfaces[remote_int][remote_port] except KeyError: raise DynamipsError, 'invalid interface' #validate the connection if not validate_connect('e', remote_int, self.p, self, local_port, dynamips, remote_slot, remote_port): return (src_udp, dst_udp) = self.__allocate_udp_port(dynamips) if self.p.host == dynamips.host: # source and dest adapters are on the same dynamips server, perform loopback binding optimization src_ip = '127.0.0.1' dst_ip = '127.0.0.1' else: # source and dest are on different dynamips servers src_ip = self.p.name dst_ip = dynamips.host #check whether the user did not make a mistake in multi-server .net file if src_ip == 'localhost' or src_ip =='127.0.0.1' or dst_ip =='localhost' or dst_ip == '127.0.0.1': dowarning('Connecting %s port %s to %s slot %s port %s:\nin case of multi-server operation make sure you do not use "localhost" string in definition of dynamips hypervisor.\n'% (self.name, local_port, remote_slot.router.name, remote_slot.adapter, remote_port)) #create the emulated device side of UDP connection send(self.p, 'qemu create_udp %s %i %i %s %i' % (self.name, local_port, src_udp, dst_ip, dst_udp)) self.nios[local_port] = UDPConnection(src_udp, dst_ip, dst_udp, self, local_port) #create the dynamips side of UDP connection - the NIO and connect it to the router remote_nio = NIO_udp(dynamips, dst_udp, src_ip, src_udp, None, remote_slot, dst_port) if isinstance(remote_slot, Bridge): # Bridges don't use ports remote_slot.nio(nio=remote_nio) else: remote_slot.nio(port=dst_port, nio=remote_nio) #set reverse nios remote_nio.reverse_nio = self.nios[local_port] self.nios[local_port].reverse_nio = remote_nio
def connect_to_dynamips(self, local_port, dynamips, remote_slot, remote_int, remote_port): if self.nios.has_key(local_port) and self.nios[local_port] != None: debug("%s: port %i has already a UDP connection" % (self.name, local_port)) return #figure out the destionation port according to interface descritors debugmsg( 2, "AnyVBoxEmuDevice::connect_to_dynamips(%s, dynamips, dynamips, %s, %s)" % (str(local_port), str(remote_int), str(remote_port))) #debugmsg(2, "AnyVBoxEmuDevice::connect_to_dynamips()") debugmsg(3, "remote_slot.adapter = %s" % str(remote_slot.adapter)) if remote_slot.adapter in [ 'ETHSW', 'ATMSW', 'ATMBR', 'FRSW', 'Bridge', 'Hub' ]: # This is a virtual switch that doesn't provide interface descriptors dst_port = remote_port else: # Look at the interfaces dict to find out what the real port is as # as far as dynamips is concerned try: dst_port = remote_slot.interfaces[remote_int][remote_port] except KeyError: raise DynamipsError, 'invalid interface' debugmsg( 3, "AnyVBoxEmuDevice::connect_to_dynamips() validate_connect") #validate the connection if not validate_connect('e', remote_int, self.p, self, local_port, dynamips, remote_slot, remote_port): return (src_udp, dst_udp) = self.__allocate_udp_port(dynamips) debugmsg(3, "self.p.host = %s" % self.p.host) debugmsg(3, "dynamips.host = %s" % dynamips.host) """ # WARNING: This code crashes on multi-host setups: (when connecting to Dynamips switch) if self.p.host == dynamips.host: # source and dest adapters are on the same dynamips server, perform loopback binding optimization src_ip = '127.0.0.1' dst_ip = '127.0.0.1' elif (self.p.host == 'localhost' or self.p.host == '127.0.0.1' or self.p.host == '::1') and (dynamips.host == 'localhost' or dynamips.host == '127.0.0.1' or dynamips.host == '::1'): # 'localhost', IP: '127.0.0.1' and IPv6 '::1' are equal. src_ip = '127.0.0.1' dst_ip = '127.0.0.1' else: # source and dest are on different dynamips servers src_ip = self.p.name dst_ip = dynamips.host #check whether the user did not make a mistake in multi-server .net file #if src_ip == 'localhost' or src_ip =='127.0.0.1' or dst_ip =='localhost' or dst_ip == '127.0.0.1': # dowarning('Connecting %s port %s to %s slot %s port %s:\nin case of multi-server operation make sure you do not use "localhost" string in definition of dynamips hypervisor.\n'% (self.name, local_port, remote_slot.router.name, remote_slot.adapter, remote_port)) """ src_ip = self.p.name dst_ip = dynamips.host debugmsg(2, "dynagen_vbox_lib.py: src_ip = %s" % str(src_ip)) debugmsg(2, "dynagen_vbox_lib.py: dst_ip = %s" % str(dst_ip)) if src_ip != dst_ip: if (self.isLocalhost(src_ip)) or (self.isLocalhost(dst_ip)): if (self.isLocalhost(src_ip) is False) or (self.isLocalhost(dst_ip) is False): dowarning( 'In case of multi-server operation, make sure you do not use "localhost" or "127.0.0.1" string in definition of dynamips hypervisor. Use actual IP addresses instead.' ) debugmsg( 3, "dynagen_vbox_lib.py: 'vbox create_udp self.name=%s local_port=%i src_udp=%i dst_ip=%s dst_udp=%i'" % (self.name, local_port, src_udp, dst_ip, dst_udp)) #create the virtualized device side of UDP connection send( self.p, 'vbox create_udp %s %i %i %s %i' % (self.name, local_port, src_udp, dst_ip, dst_udp)) self.nios[local_port] = UDPConnection(src_udp, dst_ip, dst_udp, self, local_port) #create the dynamips side of UDP connection - the NIO and connect it to the router remote_nio = NIO_udp(dynamips, dst_udp, src_ip, src_udp, None, remote_slot, dst_port) if isinstance(remote_slot, Bridge): # Bridges don't use ports remote_slot.nio(nio=remote_nio) else: remote_slot.nio(port=dst_port, nio=remote_nio) #set reverse nios remote_nio.reverse_nio = self.nios[local_port] self.nios[local_port].reverse_nio = remote_nio
def connect_to_dynamips(self, local_port, dynamips, remote_slot, remote_int, remote_port): #figure out the destionation port according to interface descritors debugmsg(2, "AnyEmuDevice::connect_to_dynamips()") if remote_slot.adapter in ['ETHSW', 'ATMSW', 'ATMBR', 'FRSW', 'Bridge']: # This is a virtual switch that doesn't provide interface descriptors dst_port = remote_port else: # Look at the interfaces dict to find out what the real port is as # as far as dynamips is concerned try: dst_port = remote_slot.interfaces[remote_int][remote_port] except KeyError: raise DynamipsError, 'invalid interface' #validate the connection if not validate_connect('e', remote_int, self.p, self, local_port, dynamips, remote_slot, remote_port): return (src_udp, dst_udp) = self.__allocate_udp_port(dynamips) debugmsg(3, "self.p.host = %s" % self.p.host) debugmsg(3, "dynamips.host = %s" % dynamips.host) """ # WARNING: This code crashes on multi-host setups: if self.p.host == dynamips.host: # source and dest adapters are on the same dynamips server, perform loopback binding optimization src_ip = '127.0.0.1' dst_ip = '127.0.0.1' elif (self.p.host == 'localhost' or self.p.host == '127.0.0.1' or self.p.host == '::1') and (dynamips.host == 'localhost' or dynamips.host == '127.0.0.1' or dynamips.host == '::1'): # 'localhost', IP: '127.0.0.1' and IPv6 '::1' are equal. src_ip = '127.0.0.1' dst_ip = '127.0.0.1' else: # source and dest are on different dynamips servers src_ip = self.p.name dst_ip = dynamips.host #check whether the user did not make a mistake in multi-server .net file if src_ip == 'localhost' or src_ip =='127.0.0.1' or dst_ip =='localhost' or dst_ip == '127.0.0.1': dowarning('Connecting %s port %s to %s slot %s port %s:\nin case of multi-server operation make sure you do not use "localhost" string in definition of dynamips hypervisor.\n'% (self.name, local_port, remote_slot.router.name, remote_slot.adapter, remote_port)) """ src_ip = self.p.name dst_ip = dynamips.host debugmsg(2, "qemu_lib.py: src_ip = %s" % str(src_ip)) debugmsg(2, "qemu_lib.py: dst_ip = %s" % str(dst_ip)) if src_ip != dst_ip: if (self.isLocalhost(src_ip)) or (self.isLocalhost(dst_ip)): if (self.isLocalhost(src_ip) is False) or (self.isLocalhost(dst_ip) is False): dowarning('In case of multi-server operation, make sure you do not use "localhost" or "127.0.0.1" string in definition of dynamips hypervisor. Use actual IP addresses instead.') debugmsg(3, "qemu_lib.py: 'qemu create_udp self.name=%s local_port=%i src_udp=%i dst_ip=%s dst_udp=%i'" % (self.name, local_port, src_udp, dst_ip, dst_udp)) #create the emulated device side of UDP connection send(self.p, 'qemu create_udp %s %i %i %s %i' % (self.name, local_port, src_udp, dst_ip, dst_udp)) self.nios[local_port] = UDPConnection(src_udp, dst_ip, dst_udp, self, local_port) #create the dynamips side of UDP connection - the NIO and connect it to the router remote_nio = NIO_udp(dynamips, dst_udp, src_ip, src_udp, None, remote_slot, dst_port) if isinstance(remote_slot, Bridge): # Bridges don't use ports remote_slot.nio(nio=remote_nio) else: remote_slot.nio(port=dst_port, nio=remote_nio) #set reverse nios remote_nio.reverse_nio = self.nios[local_port] self.nios[local_port].reverse_nio = remote_nio