]>
git.proxmox.com Git - pve-manager.git/blob - www/manager6/window/PCIMapEdit.js
f243362b11564cdb94e36bafc906ab8e482f50d7
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 let configuredNodes
= [];
62 values
.map
= PVE
.Parser
.filterPropertyStringList(values
.map
, (e
) => {
63 configuredNodes
.push(e
.node
);
64 return e
.node
=== view
.nodename
;
67 me
.lookup('nodeselector').disallowedNodes
= configuredNodes
;
71 checkIommu: function(store
, records
, success
) {
73 if (!success
|| !records
.length
) {
76 me
.lookup('iommu_warning').setVisible(
77 records
.every((val
) => val
.data
.iommugroup
=== -1),
80 let value
= me
.lookup('pciselector').getValue();
81 me
.checkIsolated(value
);
84 checkIsolated: function(value
) {
87 let store
= me
.lookup('pciselector').getStore();
89 let isIsolated = function(entry
) {
91 let parsed
= PVE
.Parser
.parsePropertyString(entry
);
92 parsed
.iommugroup
= parseInt(parsed
.iommugroup
, 10);
93 if (!parsed
.iommugroup
) {
96 store
.each(({ data
}) => {
97 let isSubDevice
= data
.id
.startsWith(parsed
.path
);
98 if (data
.iommugroup
=== parsed
.iommugroup
&& data
.id
!== parsed
.path
&& !isSubDevice
) {
107 let showWarning
= false;
108 if (Ext
.isArray(value
)) {
109 for (const entry
of value
) {
110 if (!isIsolated(entry
)) {
116 showWarning
= isIsolated(value
);
118 me
.lookup('group_warning').setVisible(showWarning
);
121 mdevChange: function(mdevField
, value
) {
122 this.lookup('pciselector').setMdev(value
);
125 nodeChange: function(_field
, value
) {
126 this.lookup('pciselector').setNodename(value
);
129 pciChange: function(_field
, value
) {
131 me
.lookup('multiple_warning').setVisible(Ext
.isArray(value
) && value
.length
> 1);
132 me
.checkIsolated(value
);
136 'field[name=mdev]': {
137 change
: 'mdevChange',
140 change
: 'nodeChange',
142 'pveMultiPCISelector': {
151 onGetValues: function(values
) {
152 return this.up('window').getController().onGetValues(values
);
155 onSetValues: function(values
) {
156 return this.up('window').getController().onSetValues(values
);
161 xtype
: 'displayfield',
162 reference
: 'iommu_warning',
166 value
: 'No IOMMU detected, please activate it.' +
167 'See Documentation for further information.',
171 xtype
: 'displayfield',
172 reference
: 'multiple_warning',
176 value
: 'When multiple devices are selected, the first free one will be chosen' +
181 xtype
: 'displayfield',
182 reference
: 'group_warning',
186 itemId
: 'iommuwarning',
187 value
: 'The selected Device is not in a seperate IOMMU group, make sure this is intended.',
194 xtype
: 'pmxDisplayEditField',
195 fieldLabel
: gettext('Name'),
200 submitValue
: '{isCreate}',
206 xtype
: 'pmxDisplayEditField',
207 fieldLabel
: gettext('Mapping on Node'),
211 xtype
: 'pveNodeSelector',
212 reference
: 'nodeselector',
215 editable
: '{!nodename}',
225 xtype
: 'displayfield',
228 xtype
: 'proxmoxcheckbox',
229 fieldLabel
: gettext('Mediated Devices'),
234 deleteEmpty
: '{!isCreate}',
241 xtype
: 'pveMultiPCISelector',
242 fieldLabel
: gettext('Device'),
245 reference
: 'pciselector',
248 nodename
: '{nodename}',
251 onLoadCallBack
: 'checkIommu',
255 xtype
: 'proxmoxtextfield',
256 fieldLabel
: gettext('Comment'),
261 deleteEmpty
: '{!isCreate}',