Updated LMS metadata available to meshcore and server

Bryan Roe committed Aug 11, 2020 at 18:38 UTC e6639df37144e417694f7980869ac1a301251246
2 files changed +82 -4
agents/meshcore.js
+46 -2
@@ -435,9 +435,34 @@ function createMeshCore(agent) {
435 if (mesh.isControlChannelConnected) { mesh.SendCommand({ action: 'smbios', value: SMBiosTablesRaw }); }
436
437 // If SMBios tables say that Intel AMT is present, try to connect MEI
438 - if (SMBiosTables.amtInfo && (SMBiosTables.amtInfo.AMT == true)) {
438 + if (SMBiosTables.amtInfo && (SMBiosTables.amtInfo.AMT == true))
439 + {
440 var amtmodule = require('amt-manage');
441 amt = new amtmodule(mesh, db, false);
442 + amt.on('portBinding_LMS', function (map)
443 + {
444 + var j = { action: 'lmsinfo', value: { ports: map.keys() } };
445 + mesh.SendCommand(j);
446 + });
447 + amt.on('stateChange_LMS', function (v)
448 + {
449 + if (!meshCoreObj.intelamt) { meshCoreObj.intelamt = {}; }
450 + switch(v)
451 + {
452 + case 0:
453 + meshCoreObj.intelamt.microlms = 'DISABLED';
454 + break;
455 + case 1:
456 + meshCoreObj.intelamt.microlms = 'CONNECTING';
457 + break;
458 + case 2:
459 + meshCoreObj.intelamt.microlms = 'CONNECTED';
460 + break;
461 + default:
462 + break;
463 + }
464 + mesh.SendCommand(meshCoreObj);
465 + });
466 amt.onStateChange = function (state) { if (state == 2) { sendPeriodicServerUpdate(1); } }
467 if (amtPolicy != null) { amt.setPolicy(amtPolicy); }
468 amt.start();
@@ -3492,7 +3517,26 @@ function createMeshCore(agent) {
3517 amt.getAmtInfo(function (meinfo) {
3518 try {
3519 if (meinfo == null) return;
3495 - var intelamt = {}, p = false;
3520 + var intelamt = {};
3521 + if (amt != null)
3522 + {
3523 + switch(amt.lmsstate)
3524 + {
3525 + case 0:
3526 + intelamt.microlms = 'DISABLED'
3527 + break;
3528 + case 1:
3529 + intelamt.microlms = 'CONNECTING'
3530 + break;
3531 + case 2:
3532 + intelamt.microlms = 'CONNECTED'
3533 + break;
3534 + default:
3535 + intelamt.microlms = 'unknown'
3536 + break;
3537 + }
3538 + }
3539 + var p = false;
3540 if ((meinfo.Versions != null) && (meinfo.Versions.AMT != null)) { intelamt.ver = meinfo.Versions.AMT; p = true; if (meinfo.Versions.Sku != null) { intelamt.sku = parseInt(meinfo.Versions.Sku); } }
3541 if (meinfo.ProvisioningState != null) { intelamt.state = meinfo.ProvisioningState; p = true; }
3542 if (meinfo.Flags != null) { intelamt.flags = meinfo.Flags; p = true; }
agents/modules_meshcore/amt-manage.js
+36 -2
@@ -36,8 +36,38 @@ function AmtManager(agent, db, isdebug) {
36 var obj = this;
37 var mestate;
38 var trustedHashes = null;;
39 +
40 + require('events').EventEmitter.call(obj, true)
41 + .createEvent('stateChange_LMS')
42 + .createEvent('portBinding_LMS');
43 + obj._lmsstate = 0;
44 + obj._mapping = [];
45 +
46 + obj.on('newListener', function (name, callback)
47 + {
48 + if(name == 'portBinding_LMS')
49 + {
50 + callback.call(this, this._mapping);
51 + }
52 + });
53 +
54 + Object.defineProperty(obj, 'lmsstate',
55 + {
56 + get: function ()
57 + {
58 + return (this._lmsstate);
59 + },
60 + set: function (value)
61 + {
62 + if (this._lmsstate != value)
63 + {
64 + this._lmsstate = value;
65 + this.emit('stateChange_LMS', value);
66 + }
67 + }
68 + });
69 +
70 obj.state = 0;
40 - obj.lmsstate = 0;
71 obj.onStateChange = null;
72 obj.setDebug = function (x) { isdebug = x; }
73
@@ -124,7 +154,11 @@ function AmtManager(agent, db, isdebug) {
154 amtLms = new lme_heci();
155 amtLms.on('error', function (e) { amtLmsState = 0; obj.lmsstate = 0; amtLms = null; debug("LMS error: " + e); setupMeiOsAdmin(1); });
156 amtLms.on('connect', function () { amtLmsState = 2; obj.lmsstate = 2; debug("LMS connected"); setupMeiOsAdmin(2); });
127 - //amtLms.on('bind', function (map) { });
157 + amtLms.on('bind', function (map)
158 + {
159 + obj._mapping = map;
160 + obj.emit('portBinding_LMS', map);
161 + });
162 amtLms.on('notify', function (data, options, str, code) {
163 //debug('LMS notify');
164 if (code == 'iAMT0052-3') {