dom0: store dispid in QubesDisposableVm object and generate proper IP (#247)
This commit is contained in:
		
							parent
							
								
									ff70ded003
								
							
						
					
					
						commit
						7e234a4a8d
					
				| @ -1286,6 +1286,7 @@ class QubesNetVm(QubesVm): | ||||
|         self.netid = netid | ||||
|         self.__network = "10.137.{0}.0".format(netid) | ||||
|         self.netprefix = "10.137.{0}.".format(netid) | ||||
|         self.dispnetprefix = "10.138.{0}.".format(netid) | ||||
|         self.__netmask = vm_default_netmask | ||||
|         self.__gateway = self.netprefix + "1" | ||||
|         self.__secondary_dns = self.netprefix + "254" | ||||
| @ -1333,6 +1334,11 @@ class QubesNetVm(QubesVm): | ||||
|         assert lo >= 2 and lo <= 254, "Wrong IP address for VM" | ||||
|         return self.netprefix  + "{0}".format(lo) | ||||
| 
 | ||||
|     def get_ip_for_dispvm(self, dispid): | ||||
|         lo = dispid % 254 + 1 | ||||
|         assert lo >= 1 and lo <= 254, "Wrong IP address for VM" | ||||
|         return self.dispnetprefix  + "{0}".format(lo) | ||||
| 
 | ||||
|     def get_config_params(self, source_template=None): | ||||
|         args = super(QubesNetVm, self).get_config_params(source_template) | ||||
|         args['kernelopts'] = ' swiotlb=force pci=nomsi' | ||||
| @ -1594,16 +1600,27 @@ class QubesDisposableVm(QubesVm): | ||||
|         template_vm = kwargs["template_vm"] | ||||
|         assert template_vm is not None, "Missing template_vm for DisposableVM!" | ||||
| 
 | ||||
|         self.dispid = kwargs.pop("dispid") | ||||
| 
 | ||||
|         super(QubesDisposableVm, self).__init__(dir_path="/nonexistent", **kwargs) | ||||
| 
 | ||||
|     @property | ||||
|     def type(self): | ||||
|         return "DisposableVM" | ||||
| 
 | ||||
|     @property | ||||
|     def ip(self): | ||||
|         if self.netvm_vm is not None: | ||||
|             return self.netvm_vm.get_ip_for_dispvm(self.dispid) | ||||
|         else: | ||||
|             return None | ||||
| 
 | ||||
| 
 | ||||
|     def get_xml_attrs(self): | ||||
|         attrs = {} | ||||
|         attrs["qid"] = str(self.qid) | ||||
|         attrs["name"] = self.name | ||||
|         attrs["dispid"] = str(self.dispid) | ||||
|         attrs["template_qid"] = str(self.template_vm.qid) | ||||
|         attrs["label"] = self.label.name | ||||
|         return attrs | ||||
| @ -1703,13 +1720,13 @@ class QubesVmCollection(dict): | ||||
|         self[vm.qid]=vm | ||||
|         return vm | ||||
| 
 | ||||
|     def add_new_disposablevm(self, name, template_vm, | ||||
|     def add_new_disposablevm(self, name, template_vm, dispid, | ||||
|                       label = None): | ||||
| 
 | ||||
|         qid = self.get_new_unused_qid() | ||||
|         vm = QubesDisposableVm (qid=qid, name=name, template_vm=template_vm, | ||||
|                          netvm_vm = self.get_default_netvm_vm(), | ||||
|                          label=label) | ||||
|                          label=label, dispid=dispid) | ||||
| 
 | ||||
|         if not self.verify_new_vm (vm): | ||||
|             assert False, "Wrong VM description!" | ||||
| @ -2203,12 +2220,13 @@ class QubesVmCollection(dict): | ||||
|                 kwargs = {} | ||||
|                 attr_list = ("qid", "name", | ||||
|                              "template_qid", | ||||
|                              "label") | ||||
|                              "label", "dispid") | ||||
| 
 | ||||
|                 for attribute in attr_list: | ||||
|                     kwargs[attribute] = element.get(attribute) | ||||
| 
 | ||||
|                 kwargs["qid"] = int(kwargs["qid"]) | ||||
|                 kwargs["dispid"] = int(kwargs["dispid"]) | ||||
|                 kwargs["template_qid"] = int(kwargs["template_qid"]) | ||||
| 
 | ||||
|                 template_vm = self[kwargs.pop("template_qid")] | ||||
|  | ||||
| @ -78,7 +78,8 @@ class QfileDaemonDvm: | ||||
|             sys.stderr.write( 'Domain ' + disptempl + ' does not exist ?') | ||||
|             qvm_collection.unlock_db() | ||||
|             return None | ||||
|         qvm_collection.add_new_disposablevm(disp_name, vm_disptempl.template_vm, label=vm.label) | ||||
|         dispid=int(disp_name[4:]) | ||||
|         qvm_collection.add_new_disposablevm(disp_name, vm_disptempl.template_vm, label=vm.label, dispid=dispid) | ||||
|         qvm_collection.save() | ||||
|         qvm_collection.unlock_db() | ||||
| 
 | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user
	 Marek Marczykowski
						Marek Marczykowski