@@ -842,7 +842,7 @@ class DeviceAssignment(Port):
842
842
def __init__ (
843
843
self ,
844
844
port : Port ,
845
- device_id = None ,
845
+ device_identity = None ,
846
846
frontend_domain = None ,
847
847
options = None ,
848
848
mode : Union [str , AssignmentMode ] = "manual" ,
@@ -854,25 +854,33 @@ def __init__(
854
854
else :
855
855
self .mode = AssignmentMode (mode )
856
856
self .frontend_domain = frontend_domain
857
+ self .device_identity = device_identity
857
858
858
859
def clone (self , ** kwargs ):
859
860
"""
860
861
Clone object and substitute attributes with explicitly given.
861
862
"""
863
+ port = kwargs .get (
864
+ "port" , Port (self .backend_domain , self .ident , self .devclass ))
862
865
attr = {
863
866
"options" : self .options ,
864
- "required " : self .required ,
865
- "attach_automatically " : self .attach_automatically ,
867
+ "mode " : self .mode ,
868
+ "device_identity " : self .device_identity ,
866
869
"frontend_domain" : self .frontend_domain ,
867
870
}
868
871
attr .update (kwargs )
869
- return self .__class__ (
870
- Port (self .backend_domain , self .ident , self .devclass ), ** attr )
872
+ return self .__class__ (port , ** attr )
871
873
872
874
@property
873
875
def device (self ) -> DeviceInfo :
874
876
"""Get DeviceInfo object corresponding to this DeviceAssignment"""
875
- return self .backend_domain .devices [self .devclass ][self .ident ]
877
+ dev = self .backend_domain .devices [self .devclass ][self .ident ]
878
+ if (self .device_identity is not None
879
+ and self .device_identity != dev .self_identity ):
880
+ raise ProtocolError (
881
+ "Device identity does not match, expected "
882
+ f"'{ self .device_identity } ' got '{ dev .self_identity } '" )
883
+ return dev
876
884
877
885
@property
878
886
def frontend_domain (self ) -> Optional [QubesVM ]:
@@ -917,6 +925,7 @@ def attach_automatically(self) -> bool:
917
925
"""
918
926
return self .mode in (
919
927
AssignmentMode .AUTO ,
928
+ AssignmentMode .ASK ,
920
929
AssignmentMode .REQUIRED
921
930
)
922
931
@@ -942,6 +951,7 @@ def serialize(self) -> bytes:
942
951
self .pack_property (key , value )
943
952
for key , value in (
944
953
('mode' , self .mode .value ),
954
+ ('device_identity' , self .device_identity ),
945
955
('ident' , self .ident ),
946
956
('devclass' , self .devclass )))
947
957
0 commit comments