]>
git.proxmox.com Git - pve-manager.git/blob - www/manager6/window/PCIMapEdit.js
8c1a95e3216150033b83e20b66a535656cf983eb
1 Ext
.define('PVE.window.PCIMapEditWindow', {
2 extend
: 'Proxmox.window.Edit',
4 mixins
: ['Proxmox.Mixin.CBind'],
8 subject
: gettext('PCI mapping'),
10 onlineHelp
: 'resource_mapping',
14 cbindData: function(initialConfig
) {
16 me
.isCreate
= !me
.name
|| !me
.nodename
;
17 me
.method
= me
.name
? 'PUT' : 'POST';
20 nodename
: me
.nodename
,
24 submitUrl: function(_url
, data
) {
26 let name
= me
.method
=== 'PUT' ? me
.name
: '';
27 return `/cluster/mapping/pci/${name}`;
31 xclass
: 'Ext.app.ViewController',
33 onGetValues: function(values
) {
35 let view
= me
.getView();
36 if (view
.method
=== "POST") {
40 if (values
.iommugroup
=== -1) {
41 delete values
.iommugroup
;
44 let nodename
= values
.node
?? view
.nodename
;
47 let otherMaps
= PVE
.Parser
48 .filterPropertyStringList(me
.originalMap
, (e
) => e
.node
!== nodename
);
49 if (otherMaps
.length
) {
50 values
.map
= values
.map
.concat(otherMaps
);
57 onSetValues: function(values
) {
59 let view
= me
.getView();
60 me
.originalMap
= [...values
.map
];
61 values
.map
= PVE
.Parser
.filterPropertyStringList(values
.map
, (e
) => e
.node
=== view
.nodename
);
65 checkIommu: function(store
, records
, success
) {
67 if (!success
|| !records
.length
) {
70 me
.lookup('iommu_warning').setVisible(
71 records
.every((val
) => val
.data
.iommugroup
=== -1),
74 let value
= me
.lookup('pciselector').getValue();
75 me
.checkIsolated(value
);
78 checkIsolated: function(value
) {
81 let store
= me
.lookup('pciselector').getStore();
83 let isIsolated = function(entry
) {
85 let parsed
= PVE
.Parser
.parsePropertyString(entry
);
86 parsed
.iommugroup
= parseInt(parsed
.iommugroup
, 10);
87 if (!parsed
.iommugroup
) {
90 store
.each(({ data
}) => {
91 let isSubDevice
= data
.id
.startsWith(parsed
.path
);
92 if (data
.iommugroup
=== parsed
.iommugroup
&& data
.id
!== parsed
.path
&& !isSubDevice
) {
101 let showWarning
= false;
102 if (Ext
.isArray(value
)) {
103 for (const entry
of value
) {
104 if (!isIsolated(entry
)) {
110 showWarning
= isIsolated(value
);
112 me
.lookup('group_warning').setVisible(showWarning
);
115 mdevChange: function(mdevField
, value
) {
116 this.lookup('pciselector').setMdev(value
);
119 nodeChange: function(_field
, value
) {
120 this.lookup('pciselector').setNodename(value
);
123 pciChange: function(_field
, value
) {
125 me
.lookup('multiple_warning').setVisible(Ext
.isArray(value
) && value
.length
> 1);
126 me
.checkIsolated(value
);
130 'field[name=mdev]': {
131 change
: 'mdevChange',
134 change
: 'nodeChange',
136 'pveMultiPCISelector': {
145 onGetValues: function(values
) {
146 return this.up('window').getController().onGetValues(values
);
149 onSetValues: function(values
) {
150 return this.up('window').getController().onSetValues(values
);
155 xtype
: 'displayfield',
156 reference
: 'iommu_warning',
160 value
: 'No IOMMU detected, please activate it.' +
161 'See Documentation for further information.',
165 xtype
: 'displayfield',
166 reference
: 'multiple_warning',
170 value
: 'When multiple devices are selected, the first free one will be chosen' +
175 xtype
: 'displayfield',
176 reference
: 'group_warning',
180 itemId
: 'iommuwarning',
181 value
: 'The selected Device is not in a seperate IOMMU group, make sure this is intended.',
188 xtype
: 'pmxDisplayEditField',
189 fieldLabel
: gettext('Name'),
194 submitValue
: '{isCreate}',
200 xtype
: 'pmxDisplayEditField',
201 fieldLabel
: gettext('Mapping on Node'),
205 xtype
: 'pveNodeSelector',
208 editable
: '{!nodename}',
218 xtype
: 'displayfield',
221 xtype
: 'proxmoxcheckbox',
222 fieldLabel
: gettext('Mediated Devices'),
227 deleteEmpty
: '{!isCreate}',
234 xtype
: 'pveMultiPCISelector',
235 fieldLabel
: gettext('Device'),
238 reference
: 'pciselector',
241 nodename
: '{nodename}',
244 onLoadCallBack
: 'checkIommu',
248 xtype
: 'proxmoxtextfield',
249 fieldLabel
: gettext('Comment'),
254 deleteEmpty
: '{!isCreate}',