1 package org.metricshub.ipmi.core.coding;
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25 import org.metricshub.ipmi.core.coding.commands.IpmiVersion;
26 import org.metricshub.ipmi.core.coding.commands.PrivilegeLevel;
27 import org.metricshub.ipmi.core.coding.commands.chassis.GetChassisStatus;
28 import org.metricshub.ipmi.core.coding.commands.chassis.GetChassisStatusResponseData;
29 import org.metricshub.ipmi.core.coding.commands.fru.BaseUnit;
30 import org.metricshub.ipmi.core.coding.commands.fru.GetFruInventoryAreaInfo;
31 import org.metricshub.ipmi.core.coding.commands.fru.GetFruInventoryAreaInfoResponseData;
32 import org.metricshub.ipmi.core.coding.commands.fru.ReadFruData;
33 import org.metricshub.ipmi.core.coding.commands.fru.ReadFruDataResponseData;
34 import org.metricshub.ipmi.core.coding.commands.fru.record.BoardInfo;
35 import org.metricshub.ipmi.core.coding.commands.fru.record.ChassisInfo;
36 import org.metricshub.ipmi.core.coding.commands.fru.record.FruRecord;
37 import org.metricshub.ipmi.core.coding.commands.fru.record.ProductInfo;
38 import org.metricshub.ipmi.core.coding.commands.sdr.GetSdr;
39 import org.metricshub.ipmi.core.coding.commands.sdr.GetSdrRepositoryInfo;
40 import org.metricshub.ipmi.core.coding.commands.sdr.GetSdrRepositoryInfoResponseData;
41 import org.metricshub.ipmi.core.coding.commands.sdr.GetSdrResponseData;
42 import org.metricshub.ipmi.core.coding.commands.sdr.GetSensorReading;
43 import org.metricshub.ipmi.core.coding.commands.sdr.GetSensorReadingResponseData;
44 import org.metricshub.ipmi.core.coding.commands.sdr.ReserveSdrRepository;
45 import org.metricshub.ipmi.core.coding.commands.sdr.ReserveSdrRepositoryResponseData;
46 import org.metricshub.ipmi.core.coding.commands.sdr.record.CompactSensorRecord;
47 import org.metricshub.ipmi.core.coding.commands.sdr.record.FruDeviceLocatorRecord;
48 import org.metricshub.ipmi.core.coding.commands.sdr.record.FullSensorRecord;
49 import org.metricshub.ipmi.core.coding.commands.sdr.record.RateUnit;
50 import org.metricshub.ipmi.core.coding.commands.sdr.record.ReadingType;
51 import org.metricshub.ipmi.core.coding.commands.sdr.record.SensorRecord;
52 import org.metricshub.ipmi.core.coding.commands.sel.GetSelEntry;
53 import org.metricshub.ipmi.core.coding.commands.sel.GetSelEntryResponseData;
54 import org.metricshub.ipmi.core.coding.commands.sel.GetSelInfo;
55 import org.metricshub.ipmi.core.coding.commands.sel.GetSelInfoResponseData;
56 import org.metricshub.ipmi.core.coding.commands.sel.ReserveSel;
57 import org.metricshub.ipmi.core.coding.commands.sel.ReserveSelResponseData;
58 import org.metricshub.ipmi.core.coding.commands.sel.SelRecord;
59 import org.metricshub.ipmi.core.coding.commands.session.CloseSession;
60 import org.metricshub.ipmi.core.coding.commands.session.GetChannelAuthenticationCapabilities;
61 import org.metricshub.ipmi.core.coding.commands.session.GetChannelAuthenticationCapabilitiesResponseData;
62 import org.metricshub.ipmi.core.coding.commands.session.GetChannelCipherSuites;
63 import org.metricshub.ipmi.core.coding.commands.session.GetChannelCipherSuitesResponseData;
64 import org.metricshub.ipmi.core.coding.commands.session.OpenSession;
65 import org.metricshub.ipmi.core.coding.commands.session.OpenSessionResponseData;
66 import org.metricshub.ipmi.core.coding.commands.session.Rakp1;
67 import org.metricshub.ipmi.core.coding.commands.session.Rakp1ResponseData;
68 import org.metricshub.ipmi.core.coding.commands.session.Rakp3;
69 import org.metricshub.ipmi.core.coding.commands.session.Rakp3ResponseData;
70 import org.metricshub.ipmi.core.coding.protocol.AuthenticationType;
71 import org.metricshub.ipmi.core.coding.protocol.decoder.PlainCommandv20Decoder;
72 import org.metricshub.ipmi.core.coding.protocol.decoder.Protocolv15Decoder;
73 import org.metricshub.ipmi.core.coding.protocol.decoder.Protocolv20Decoder;
74 import org.metricshub.ipmi.core.coding.protocol.encoder.Protocolv15Encoder;
75 import org.metricshub.ipmi.core.coding.protocol.encoder.Protocolv20Encoder;
76 import org.metricshub.ipmi.core.coding.security.CipherSuite;
77 import org.metricshub.ipmi.core.coding.security.SecurityConstants;
78 import org.metricshub.ipmi.core.common.TypeConverter;
79
80 import javax.crypto.NoSuchPaddingException;
81
82 import org.slf4j.Logger;
83 import org.slf4j.LoggerFactory;
84
85 import java.io.FileInputStream;
86 import java.io.IOException;
87 import java.net.DatagramPacket;
88 import java.net.DatagramSocket;
89 import java.net.InetAddress;
90 import java.security.InvalidKeyException;
91 import java.security.NoSuchAlgorithmException;
92 import java.text.DateFormat;
93 import java.util.ArrayList;
94 import java.util.Date;
95 import java.util.List;
96 import java.util.Properties;
97
98
99
100
101 public class DecoderRunner extends Thread {
102
103 private DatagramSocket socket;
104
105 private static int managedSeqNum;
106 private static boolean lock;
107
108 private static Rakp1 r1;
109 private static Rakp1ResponseData r1rd;
110 private static CipherSuite cs = new CipherSuite((byte) 0,
111 SecurityConstants.AA_RAKP_HMAC_SHA1, (byte) 0, (byte) 0);
112
113 private static Logger logger = LoggerFactory.getLogger(DecoderRunner.class);
114
115 private static int cssrcv = 16;
116
117 private static int reservation;
118
119 private static int nextRecId = 0;
120
121 private static byte[] cssrec;
122
123 private static int fruId = 0;
124
125 private static int fruSize = 528;
126
127 public static void main(String[] args) throws IOException, InterruptedException, NoSuchAlgorithmException, InvalidKeyException {
128
129 logger.info(DateFormat.getInstance().format(
130 new Date(new Date().getTime())));
131
132 lock = true;
133
134 DecoderRunner dr = new DecoderRunner();
135
136 dr.socket = new DatagramSocket(6666);
137
138 dr.start();
139
140 Properties properties = new Properties();
141 properties.load(new FileInputStream("src/test/resources/test.properties"));
142
143 Thread.sleep(100);
144
145 InetAddress ad = InetAddress.getByName((String)properties.get("testIp"));
146
147 byte index = 0;
148
149 while (cssrcv >= 16) {
150
151 Thread.sleep(300);
152
153 lock = true;
154
155 byte[] outmsg = Encoder.encode(new Protocolv20Encoder(),
156 new GetChannelCipherSuites(TypeConverter.intToByte(0xE),
157 index), 0, 0,0);
158
159 ++index;
160 DatagramPacket packet = new DatagramPacket(outmsg, outmsg.length,
161 ad, 0x26F);
162
163 dr.socket.send(packet);
164
165 while (lock) {
166 Thread.sleep(1);
167 }
168 }
169
170 List<CipherSuite> csl = CipherSuite.getCipherSuites(cssrec);
171
172 for (CipherSuite c : csl) {
173 try {
174 logger.info(c.getId() + ": "
175 + c.getAuthenticationAlgorithm().getCode() + " "
176 + c.getIntegrityAlgorithm().getCode() + " "
177 + c.getConfidentialityAlgorithm().getCode());
178 } catch (Exception e) {
179 logger.error(e.getMessage(), e);
180 }
181 }
182
183 cs = csl.get(2);
184
185 Thread.sleep(300);
186
187 byte[] outmsg = Encoder
188 .encode(new Protocolv15Encoder(),
189 new GetChannelAuthenticationCapabilities(IpmiVersion.V15,
190 IpmiVersion.V20, cs, PrivilegeLevel.User,
191 TypeConverter.intToByte(14)), 0, 0, 0);
192
193 DatagramPacket packet = new DatagramPacket(outmsg, outmsg.length, ad,
194 0x26F);
195
196 dr.socket.send(packet);
197
198 Thread.sleep(150);
199
200 outmsg = Encoder.encode(new Protocolv20Encoder(), new OpenSession(44,
201 PrivilegeLevel.MaximumAvailable, cs), 0, 0, 0);
202
203 packet = new DatagramPacket(outmsg, outmsg.length, ad, 0x26F);
204
205 dr.socket.send(packet);
206
207 Thread.sleep(300);
208
209 while (lock) {
210 Thread.sleep(1);
211 }
212
213 lock = true;
214
215
216 r1 = new Rakp1(managedSeqNum, PrivilegeLevel.User, (String)properties.get("username"), (String)properties.get("password"),
217 null, cs);
218
219 outmsg = Encoder.encode(new Protocolv20Encoder(), r1, 1, 1,0);
220
221 packet = new DatagramPacket(outmsg, outmsg.length, ad, 0x26F);
222
223 dr.socket.send(packet);
224
225 Thread.sleep(150);
226
227 while (lock) {
228 Thread.sleep(1);
229 }
230
231 try {
232 cs.initializeAlgorithms(r1.calculateSik(r1rd));
233 } catch (NoSuchPaddingException e) {
234 logger.error(e.getMessage(), e);
235 }
236
237 outmsg = Encoder.encode(new Protocolv20Encoder(), new Rakp3((byte) 0,
238 managedSeqNum, cs, r1, r1rd), 1, 1, 0);
239
240 packet = new DatagramPacket(outmsg, outmsg.length, ad, 0x26F);
241
242 dr.socket.send(packet);
243
244 Thread.sleep(150);
245
246 outmsg = Encoder.encode(new Protocolv20Encoder(), new GetChassisStatus(
247 IpmiVersion.V20, cs, AuthenticationType.RMCPPlus), 1, 1, r1
248 .getManagedSystemSessionId());
249
250 packet = new DatagramPacket(outmsg, outmsg.length, ad, 0x26F);
251
252 dr.socket.send(packet);
253
254 Thread.sleep(300);
255
256 outmsg = Encoder.encode(new Protocolv20Encoder(),
257 new GetSdrRepositoryInfo(IpmiVersion.V20, cs,
258 AuthenticationType.RMCPPlus), 2, 2, r1
259 .getManagedSystemSessionId());
260
261 packet = new DatagramPacket(outmsg, outmsg.length, ad, 0x26F);
262
263 dr.socket.send(packet);
264 Thread.sleep(300);
265
266 outmsg = Encoder.encode(new Protocolv20Encoder(),
267 new ReserveSdrRepository(IpmiVersion.V20, cs,
268 AuthenticationType.RMCPPlus), 3, 3, r1
269 .getManagedSystemSessionId());
270
271 packet = new DatagramPacket(outmsg, outmsg.length, ad, 0x26F);
272
273 dr.socket.send(packet);
274
275 int seq = 4;
276
277 lock = true;
278
279 while (lock) {
280 Thread.sleep(1);
281 }
282
283 while (nextRecId < 65535) {
284
285 Thread.sleep(200);
286
287 logger.info(">>Sending request for record " + nextRecId);
288
289 int sequence = seq++;
290
291 outmsg = Encoder.encode(new Protocolv20Encoder(), new GetSdr(
292 IpmiVersion.V20, cs, AuthenticationType.RMCPPlus,
293 reservation, nextRecId), sequence, sequence, r1
294 .getManagedSystemSessionId());
295
296 packet = new DatagramPacket(outmsg, outmsg.length, ad, 0x26F);
297
298 dr.socket.send(packet);
299 lock = true;
300
301 while (lock) {
302 Thread.sleep(1);
303 }
304
305 if (nextRecId > 0) {
306 logger.info(">>Sending request for reading " + nextRecId);
307
308 sequence = seq++;
309
310 outmsg = Encoder.encode(new Protocolv20Encoder(),
311 new GetSensorReading(IpmiVersion.V20, cs,
312 AuthenticationType.RMCPPlus, nextRecId), sequence, sequence,
313 r1.getManagedSystemSessionId());
314
315 packet = new DatagramPacket(outmsg, outmsg.length, ad, 0x26F);
316
317 dr.socket.send(packet);
318
319 lock = true;
320
321 while (lock && nextRecId < 65535) {
322 Thread.sleep(1);
323 }
324 }
325
326 }
327
328 nextRecId = 0;
329
330 Thread.sleep(300);
331
332 logger.info(">>Sending GetSelInfo");
333
334 int sequence = seq++;
335
336 outmsg = Encoder.encode(new Protocolv20Encoder(), new GetSelInfo(
337 IpmiVersion.V20, cs, AuthenticationType.RMCPPlus), sequence, sequence, r1
338 .getManagedSystemSessionId());
339
340 packet = new DatagramPacket(outmsg, outmsg.length, ad, 0x26F);
341
342 dr.socket.send(packet);
343
344 Thread.sleep(300);
345
346 logger.info(">>Sending Reserve SEL");
347
348 sequence = seq++;
349
350 outmsg = Encoder.encode(new Protocolv20Encoder(), new ReserveSel(
351 IpmiVersion.V20, cs, AuthenticationType.RMCPPlus), sequence, sequence, r1
352 .getManagedSystemSessionId());
353
354 packet = new DatagramPacket(outmsg, outmsg.length, ad, 0x26F);
355
356 dr.socket.send(packet);
357
358 lock = true;
359
360 while (lock) {
361 Thread.sleep(1);
362 }
363
364 while (nextRecId < 65535) {
365
366 Thread.sleep(200);
367
368 logger.info(">>Sending request for SEL record " + nextRecId);
369
370 sequence = seq++;
371
372 outmsg = Encoder.encode(new Protocolv20Encoder(), new GetSelEntry(
373 IpmiVersion.V20, cs, AuthenticationType.RMCPPlus,
374 reservation, nextRecId), sequence, sequence, r1
375 .getManagedSystemSessionId());
376
377 packet = new DatagramPacket(outmsg, outmsg.length, ad, 0x26F);
378
379 dr.socket.send(packet);
380 lock = true;
381
382 while (lock) {
383 Thread.sleep(1);
384 }
385 }
386
387 Thread.sleep(300);
388
389 logger.info(">>Sending GetFruInventoryAreaInfo");
390
391 sequence = seq++;
392
393 outmsg = Encoder.encode(new Protocolv20Encoder(),
394 new GetFruInventoryAreaInfo(IpmiVersion.V20, cs,
395 AuthenticationType.RMCPPlus, fruId), sequence, sequence, r1
396 .getManagedSystemSessionId());
397
398 packet = new DatagramPacket(outmsg, outmsg.length, ad, 0x26F);
399
400 dr.socket.send(packet);
401
402 for(int i = 0; i < fruSize; i += 100) {
403
404
405 Thread.sleep(300);
406
407 logger.info(">>Sending ReadFruData");
408
409 int cnt = 100;
410 if(i + cnt > fruSize) {
411 cnt = fruSize % 100;
412 }
413
414 sequence = seq++;
415
416 outmsg = Encoder.encode(new Protocolv20Encoder(),
417 new ReadFruData(IpmiVersion.V20, cs,
418 AuthenticationType.RMCPPlus, fruId, BaseUnit.Bytes, i, cnt), sequence, sequence, r1
419 .getManagedSystemSessionId());
420
421 packet = new DatagramPacket(outmsg, outmsg.length, ad, 0x26F);
422
423 dr.socket.send(packet);
424
425 }
426
427 Thread.sleep(300);
428
429 sequence = seq + 1;
430
431 outmsg = Encoder.encode(
432 new Protocolv20Encoder(),
433 new CloseSession(IpmiVersion.V20, cs,
434 AuthenticationType.RMCPPlus, r1
435 .getManagedSystemSessionId()), sequence, sequence, r1
436 .getManagedSystemSessionId());
437
438 packet = new DatagramPacket(outmsg, outmsg.length, ad, 0x26F);
439
440 dr.socket.send(packet);
441
442 Thread.sleep(1000);
443
444 dr.socket.close();
445
446 }
447
448 @Override
449 public void run() {
450
451 super.run();
452
453 cssrec = new byte[0];
454
455 byte[] buffer = null;
456
457 while (cssrcv >= 16) {
458 DatagramPacket resp = new DatagramPacket(new byte[256], 256);
459
460 try {
461 socket.receive(resp);
462 buffer = new byte[resp.getLength()];
463 System.arraycopy(resp.getData(), 0, buffer, 0, buffer.length);
464 } catch (IOException e) {
465 logger.error(e.getMessage(), e);
466 }
467
468 GetChannelCipherSuitesResponseData data = null;
469
470 try {
471 data = (GetChannelCipherSuitesResponseData) Decoder.decode(
472 buffer, new Protocolv20Decoder(CipherSuite.getEmpty()),
473 new GetChannelCipherSuites());
474 } catch (Exception e) {
475 logger.error(e.getMessage(), e);
476 }
477
478 if (data != null && data.getCipherSuiteData() != null) {
479 cssrcv = data.getCipherSuiteData().length;
480
481 logger.info("{}", data.getCipherSuiteData().length);
482
483 byte[] temp = new byte[cssrec.length + cssrcv];
484
485 System.arraycopy(cssrec, 0, temp, 0, cssrec.length);
486 System.arraycopy(data.getCipherSuiteData(), 0, temp,
487 cssrec.length, cssrcv);
488 cssrec = temp;
489
490 } else {
491 cssrcv = 0;
492 logger.info("{}", 0);
493 }
494
495 lock = false;
496 }
497
498 DatagramPacket resp = new DatagramPacket(new byte[256], 256);
499
500 try {
501 socket.receive(resp);
502 buffer = new byte[resp.getLength()];
503 System.arraycopy(resp.getData(), 0, buffer, 0, buffer.length);
504 } catch (IOException e) {
505 logger.error(e.getMessage(), e);
506 }
507
508 GetChannelAuthenticationCapabilitiesResponseData data = null;
509
510 try {
511 data = (GetChannelAuthenticationCapabilitiesResponseData) Decoder
512 .decode(buffer, new Protocolv15Decoder(),
513 new GetChannelAuthenticationCapabilities(
514 IpmiVersion.V15, IpmiVersion.V20, cs));
515 } catch (Exception e) {
516 logger.error(e.getMessage(), e);
517 }
518
519 logger.info("---------------------------------------------");
520
521 logger.info("{}", data.getChannelNumber());
522 logger.info("{}", data.isIpmiv20Support());
523 logger.info("{}", data.getAuthenticationTypes().toString());
524 logger.info("{}", data.isKgEnabled());
525 logger.info("{}", data.isPerMessageAuthenticationEnabled());
526 logger.info("{}", data.isUserLevelAuthenticationEnabled());
527 logger.info("{}", data.isNonNullUsernamesEnabled());
528 logger.info("{}", data.isNullUsernamesEnabled());
529 logger.info("{}", data.isAnonymusLoginEnabled());
530 logger.info("{}", data.getOemId());
531 logger.info("{}", data.getOemData());
532
533 logger.info("##############################################");
534
535 resp = new DatagramPacket(new byte[256], 256);
536
537 try {
538 socket.receive(resp);
539 buffer = new byte[resp.getLength()];
540 System.arraycopy(resp.getData(), 0, buffer, 0, buffer.length);
541 logger.info(">>>> " + resp.getLength());
542 } catch (IOException e) {
543 logger.error(e.getMessage(), e);
544 }
545
546 OpenSessionResponseData data2 = null;
547
548 try {
549 data2 = (OpenSessionResponseData) Decoder.decode(buffer,
550 new PlainCommandv20Decoder(CipherSuite.getEmpty()),
551 new OpenSession(CipherSuite.getEmpty()));
552 } catch (Exception e) {
553 logger.error(e.getMessage(), e);
554 }
555
556 logger.info("{}", data2.getMessageTag());
557 logger.info("{}", data2.getStatusCode());
558 logger.info("{}", data2.getPrivilegeLevel());
559 logger.info("{}", data2.getRemoteConsoleSessionId());
560 logger.info("{}", data2.getManagedSystemSessionId());
561 logger.info("{}", data2.getAuthenticationAlgorithm());
562 logger.info("{}", data2.getConfidentialityAlgorithm());
563 logger.info("{}", data2.getIntegrityAlgorithm());
564
565 managedSeqNum = data2.getManagedSystemSessionId();
566 lock = false;
567
568 logger.info("---------------------------------------------");
569
570 resp = new DatagramPacket(new byte[256], 256);
571
572 try {
573 socket.receive(resp);
574 buffer = new byte[resp.getLength()];
575 System.arraycopy(resp.getData(), 0, buffer, 0, buffer.length);
576 } catch (IOException e) {
577 logger.error(e.getMessage(), e);
578 }
579
580 Rakp1ResponseData data3 = null;
581
582 try {
583 data3 = (Rakp1ResponseData) Decoder.decode(buffer,
584 new PlainCommandv20Decoder(CipherSuite.getEmpty()), r1);
585 } catch (Exception e) {
586 logger.error(e.getMessage(), e);
587 }
588
589 r1rd = data3;
590
591 logger.info("{}", data3.getMessageTag());
592 logger.info("{}", data3.getStatusCode());
593 logger.info("{}", data3.getRemoteConsoleSessionId());
594 logger.info("{}", data3.getManagedSystemGuid());
595
596 logger.info("---------------------------------------------");
597 lock = false;
598
599 resp = new DatagramPacket(new byte[256], 256);
600
601 try {
602 socket.receive(resp);
603 buffer = new byte[resp.getLength()];
604 System.arraycopy(resp.getData(), 0, buffer, 0, buffer.length);
605 } catch (IOException e) {
606 logger.error(e.getMessage(), e);
607 }
608
609 Rakp3ResponseData data4 = null;
610
611 try {
612 data4 = (Rakp3ResponseData) Decoder.decode(buffer,
613 new PlainCommandv20Decoder(CipherSuite.getEmpty()),
614 new Rakp3(cs, r1, r1rd));
615 } catch (Exception e) {
616 logger.error(e.getMessage(), e);
617 }
618
619 logger.info("{}", data4.getMessageTag());
620 logger.info("{}", data4.getStatusCode());
621 logger.info("{}", data4.getConsoleSessionId());
622
623 logger.info("---------------------------------------------");
624
625 resp = new DatagramPacket(new byte[256], 256);
626
627 try {
628 socket.receive(resp);
629 buffer = new byte[resp.getLength()];
630 System.arraycopy(resp.getData(), 0, buffer, 0, buffer.length);
631 } catch (IOException e) {
632 logger.error(e.getMessage(), e);
633 }
634
635 GetChassisStatusResponseData data5 = null;
636
637 try {
638 data5 = (GetChassisStatusResponseData) Decoder.decode(buffer,
639 new Protocolv20Decoder(cs), new GetChassisStatus(
640 IpmiVersion.V20, cs, AuthenticationType.RMCPPlus));
641 } catch (Exception e) {
642 logger.error(e.getMessage(), e);
643 }
644
645 logger.info("{}", data5.getPowerRestorePolicy());
646 logger.info("{}", data5.isPowerControlFault());
647 logger.info("{}", data5.isPowerFault());
648 logger.info("{}", data5.isInterlock());
649 logger.info("{}", data5.isPowerOverload());
650 logger.info("{}", data5.isPowerOn());
651
652 logger.info("________");
653
654 logger.info("{}", data5.wasIpmiPowerOn());
655 logger.info("{}", data5.wasPowerFault());
656 logger.info("{}", data5.wasInterlock());
657 logger.info("{}", data5.wasPowerOverload());
658
659 logger.info("________");
660
661 logger.info("{}", data5.isChassisIdentifyCommandSupported());
662 if (data5.isChassisIdentifyCommandSupported()) {
663 logger.info("{}", data5.getChassisIdentifyState());
664 }
665 logger.info("{}", data5.coolingFaultDetected());
666 logger.info("{}", data5.driveFaultDetected());
667 logger.info("{}", data5.isFrontPanelLockoutActive());
668 logger.info("{}", data5.isChassisIntrusionActive());
669
670 logger.info("________");
671
672 logger.info("{}", data5.isFrontPanelButtonCapabilitiesSet());
673
674 if (data5.isFrontPanelButtonCapabilitiesSet()) {
675 try {
676 logger.info("{}", data5.isStandbyButtonDisableAllowed());
677 logger.info("{}", data5
678 .isDiagnosticInterruptButtonDisableAllowed());
679 logger.info("{}", data5.isResetButtonDisableAllowed());
680 logger.info("{}", data5.isPowerOffButtonDisableAllowed());
681 logger.info("{}", data5.isStandbyButtonDisabled());
682 logger.info("{}", data5.isDiagnosticInterruptButtonDisabled());
683 logger.info("{}", data5.isResetButtonDisabled());
684 logger.info("{}", data5.isPowerOffButtonDisabled());
685 } catch (IllegalAccessException e) {
686 logger.error(e.getMessage(), e);
687 }
688
689 }
690
691 logger.info("---------------------------------------------");
692
693 resp = new DatagramPacket(new byte[256], 256);
694
695 try {
696 socket.receive(resp);
697 buffer = new byte[resp.getLength()];
698 System.arraycopy(resp.getData(), 0, buffer, 0, buffer.length);
699 } catch (IOException e) {
700 logger.error(e.getMessage(), e);
701 }
702
703 GetSdrRepositoryInfoResponseData data6 = null;
704
705 try {
706 data6 = (GetSdrRepositoryInfoResponseData) Decoder.decode(buffer,
707 new Protocolv20Decoder(cs), new GetSdrRepositoryInfo(
708 IpmiVersion.V20, cs, AuthenticationType.RMCPPlus));
709 } catch (Exception e) {
710 logger.error(e.getMessage(), e);
711 }
712
713 logger.info("{}", data6.getSdrVersion());
714 logger.info("{}", data6.getRecordCount());
715 logger.info("{}", data6.getAddTimestamp());
716 logger.info("{}", data6.getDelTimestamp());
717 logger.info("{}", data6.isReserveSupported());
718
719 logger.info("---------------------------------------------");
720
721 resp = new DatagramPacket(new byte[256], 256);
722
723 try {
724 socket.receive(resp);
725 buffer = new byte[resp.getLength()];
726 System.arraycopy(resp.getData(), 0, buffer, 0, buffer.length);
727 } catch (IOException e) {
728 logger.error(e.getMessage(), e);
729 }
730
731 ReserveSdrRepositoryResponseData data7 = null;
732
733 try {
734 data7 = (ReserveSdrRepositoryResponseData) Decoder.decode(buffer,
735 new Protocolv20Decoder(cs), new ReserveSdrRepository(
736 IpmiVersion.V20, cs, AuthenticationType.RMCPPlus));
737 } catch (Exception e) {
738 logger.error(e.getMessage(), e);
739 }
740
741 logger.info("{}", data7.getReservationId());
742
743 reservation = data7.getReservationId();
744
745 logger.info("<<Received ReserveSdrRepo response");
746
747 lock = false;
748
749 logger.info("---------------------------------------------");
750
751 while (nextRecId < 65535) {
752
753 resp = new DatagramPacket(new byte[256], 256);
754
755 try {
756 socket.receive(resp);
757 buffer = new byte[resp.getLength()];
758 System.arraycopy(resp.getData(), 0, buffer, 0, buffer.length);
759 } catch (IOException e) {
760 logger.error(e.getMessage(), e);
761 }
762 GetSdrResponseData data8 = null;
763
764 try {
765 data8 = (GetSdrResponseData) Decoder.decode(buffer,
766 new Protocolv20Decoder(cs), new GetSdr(IpmiVersion.V20,
767 cs, AuthenticationType.RMCPPlus, 0, 0));
768 } catch (Exception e) {
769 logger.error(e.getMessage(), e);
770 }
771
772 SensorRecord record = SensorRecord.populateSensorRecord(data8.getSensorRecordData());
773 logger.info(record.toString());
774
775 if (record instanceof FullSensorRecord) {
776 nextRecId = TypeConverter.byteToInt(((FullSensorRecord) record).getSensorNumber());
777 } else if (record instanceof CompactSensorRecord) {
778 nextRecId = TypeConverter
779 .byteToInt(((CompactSensorRecord) record).getSensorNumber());
780 } else {
781 nextRecId = -1;
782 }
783
784 logger.info("<<Reading Id " + nextRecId);
785
786 if (record instanceof FullSensorRecord) {
787 FullSensorRecord rec = (FullSensorRecord) record;
788 logger.info("*" + rec.getName());
789 logger.info("Reading type: " + rec.getEventReadingType());
790 logger.info("Lower critical threshold: "
791 + rec.getLowerCriticalThreshold());
792 logger.info("Upper critical threshold: "
793 + rec.getUpperCriticalThreshold());
794 logger.info("Tolerance: +/- "
795 + rec.getTolerance()
796 + " "
797 + rec.getSensorBaseUnit().toString()
798 + (rec.getRateUnit() != RateUnit.None ? " per "
799 + rec.getRateUnit() : ""));
800 logger.info("Resolution: "
801 + rec.getSensorResolution()
802 + " "
803 + rec.getSensorBaseUnit().toString()
804 + (rec.getRateUnit() != RateUnit.None ? " per "
805 + rec.getRateUnit() : ""));
806 }
807 if (record instanceof CompactSensorRecord) {
808 CompactSensorRecord rec = (CompactSensorRecord) record;
809 logger.info("*" + rec.getName());
810 logger.info("Reading type: " + rec.getEventReadingType());
811 logger.info("Sensor type: " + rec.getSensorType());
812 }
813 if (record instanceof FruDeviceLocatorRecord) {
814 FruDeviceLocatorRecord rec = (FruDeviceLocatorRecord) record;
815 logger.info(rec.getName());
816 logger.info("{}", rec.getDeviceType());
817 logger.info("FRU entity ID: " + rec.getFruEntityId());
818 logger.info("FRU access address: " + rec.getDeviceAccessAddress());
819 logger.info("FRU device ID: " + rec.getDeviceId());
820 logger.info("FRU logical: " + rec.isLogical());
821 }
822
823 lock = false;
824 if (nextRecId > 0) {
825 resp = new DatagramPacket(new byte[256], 256);
826
827 try {
828 socket.receive(resp);
829 buffer = new byte[resp.getLength()];
830 System.arraycopy(resp.getData(), 0, buffer, 0,
831 buffer.length);
832 } catch (IOException e) {
833 logger.error(e.getMessage(), e);
834 }
835 GetSensorReadingResponseData data9 = null;
836
837 try {
838 data9 = (GetSensorReadingResponseData) Decoder.decode(
839 buffer, new Protocolv20Decoder(cs),
840 new GetSensorReading(IpmiVersion.V20, cs, AuthenticationType.RMCPPlus, 0));
841
842 if (record instanceof FullSensorRecord) {
843 FullSensorRecord rec = (FullSensorRecord) record;
844 logger.info(data9.getSensorReading(rec)
845 + " "
846 + rec.getSensorBaseUnit().toString()
847 + (rec.getRateUnit() != RateUnit.None ? " per "
848 + rec.getRateUnit() : ""));
849 }
850 if (record instanceof CompactSensorRecord) {
851 CompactSensorRecord rec = (CompactSensorRecord) record;
852 List<ReadingType> events = data9.getStatesAsserted(
853 rec.getSensorType(), rec.getEventReadingType());
854 StringBuilder s = new StringBuilder();
855 for (int i = 0; i < events.size(); ++i) {
856 s.append(events.get(i)).append(", ");
857 }
858 logger.info(s.toString());
859
860 }
861 } catch (Exception e) {
862 logger.error(e.getMessage(), e);
863 }
864 }
865
866 try {
867 Thread.sleep(100);
868 } catch (InterruptedException e) {
869 logger.error(e.getMessage(), e);
870 }
871
872 nextRecId = data8.getNextRecordId();
873
874 logger.info("---------------------------------------------");
875
876 lock = false;
877 }
878
879 resp = new DatagramPacket(new byte[256], 256);
880
881 try {
882 socket.receive(resp);
883 buffer = new byte[resp.getLength()];
884 System.arraycopy(resp.getData(), 0, buffer, 0, buffer.length);
885 } catch (IOException e) {
886 logger.error(e.getMessage(), e);
887 }
888
889 GetSelInfoResponseData data10 = null;
890
891 try {
892 data10 = (GetSelInfoResponseData) Decoder.decode(buffer,
893 new Protocolv20Decoder(cs), new GetSelInfo(IpmiVersion.V20,
894 cs, AuthenticationType.RMCPPlus));
895 } catch (Exception e) {
896 logger.error(e.getMessage(), e);
897 }
898
899 logger.info("{}", data10.getSelVersion());
900 logger.info("{}", data10.getEntriesCount());
901 logger.info(DateFormat.getInstance().format(
902 data10.getAdditionTimestamp()));
903 logger.info(DateFormat.getInstance().format(
904 data10.getEraseTimestamp()));
905
906 logger.info("---------------------------------------------");
907
908 resp = new DatagramPacket(new byte[256], 256);
909
910 try {
911 socket.receive(resp);
912 buffer = new byte[resp.getLength()];
913 System.arraycopy(resp.getData(), 0, buffer, 0, buffer.length);
914 } catch (IOException e) {
915 logger.error(e.getMessage(), e);
916 }
917
918 ReserveSelResponseData data11 = null;
919
920 try {
921 data11 = (ReserveSelResponseData) Decoder.decode(buffer,
922 new Protocolv20Decoder(cs), new ReserveSel(IpmiVersion.V20,
923 cs, AuthenticationType.RMCPPlus));
924 } catch (Exception e) {
925 logger.error(e.getMessage(), e);
926 }
927
928 logger.info("{}", data11.getReservationId());
929
930 reservation = data11.getReservationId();
931 reservation = 0;
932
933 lock = false;
934
935 logger.info("---------------------------------------------");
936
937 while (nextRecId < 65535) {
938
939 resp = new DatagramPacket(new byte[256], 256);
940
941 try {
942 socket.receive(resp);
943 buffer = new byte[resp.getLength()];
944 System.arraycopy(resp.getData(), 0, buffer, 0, buffer.length);
945 } catch (IOException e) {
946 logger.error(e.getMessage(), e);
947 }
948 GetSelEntryResponseData data12 = null;
949
950 try {
951 data12 = (GetSelEntryResponseData) Decoder.decode(buffer,
952 new Protocolv20Decoder(cs), new GetSelEntry(
953 IpmiVersion.V20, cs, AuthenticationType.RMCPPlus, 0, 0));
954 } catch (Exception e) {
955 logger.error(e.getMessage(), e);
956 }
957
958 logger.info(data12.getSelRecord().toString());
959
960 SelRecord rec = data12.getSelRecord();
961
962 logger.info("Sensor: " + rec.getSensorType());
963 logger.info("{}", rec.getTimestamp());
964 logger.info("{}", rec.getEventDirection());
965 logger.info("{}", rec.getEvent());
966
967 nextRecId = data12.getNextRecordId();
968
969 lock = false;
970
971 logger.info("---------------------------------------------");
972 }
973
974 resp = new DatagramPacket(new byte[256], 256);
975
976 try {
977 socket.receive(resp);
978 buffer = new byte[resp.getLength()];
979 System.arraycopy(resp.getData(), 0, buffer, 0, buffer.length);
980 } catch (IOException e) {
981 logger.error(e.getMessage(), e);
982 }
983
984 GetFruInventoryAreaInfoResponseData data13 = null;
985
986 try {
987 data13 = (GetFruInventoryAreaInfoResponseData) Decoder.decode(
988 buffer, new Protocolv20Decoder(cs),
989 new GetFruInventoryAreaInfo(IpmiVersion.V20, cs, AuthenticationType.RMCPPlus, 0));
990 } catch (Exception e) {
991 logger.error(e.getMessage(), e);
992 }
993
994 logger.info("FRU inventory area size: "
995 + data13.getFruInventoryAreaSize());
996
997 logger.info("FRU Unit: " + data13.getFruUnit());
998
999 logger.info("---------------------------------------------");
1000
1001 List<ReadFruDataResponseData> rd = new ArrayList<ReadFruDataResponseData>();
1002
1003 for(int i = 0; i < fruSize; i += 100) {
1004 resp = new DatagramPacket(new byte[256], 256);
1005
1006 try {
1007 socket.receive(resp);
1008 buffer = new byte[resp.getLength()];
1009 System.arraycopy(resp.getData(), 0, buffer, 0, buffer.length);
1010 } catch (IOException e) {
1011 logger.error(e.getMessage(), e);
1012 }
1013
1014 ReadFruDataResponseData data14 = null;
1015
1016 try {
1017 data14 = (ReadFruDataResponseData) Decoder.decode(buffer,
1018 new Protocolv20Decoder(cs), new ReadFruData(IpmiVersion.V20,
1019 cs, AuthenticationType.RMCPPlus, 0, BaseUnit.Bytes, 0, 0));
1020 } catch (Exception e) {
1021 logger.error(e.getMessage(), e);
1022 }
1023
1024 rd.add(data14);
1025
1026 logger.info("{}", data14.getFruData().length);
1027
1028 logger.info("---------------------------------------------");
1029
1030 }
1031
1032 List<FruRecord> records = ReadFruData.decodeFruData(rd);
1033
1034 for(FruRecord r : records) {
1035 if(r instanceof ChassisInfo) {
1036 ChassisInfo chassisInfo = (ChassisInfo) r;
1037 logger.info("Chassis info:");
1038 logger.info("Chassis type: " + chassisInfo.getChassisType());
1039 logger.info("Chassis part number: " + chassisInfo.getChassisPartNumber());
1040 logger.info("Chassis serial number: " + chassisInfo.getChassisSerialNumber());
1041 for(String info : chassisInfo.getCustomChassisInfo()) {
1042 logger.info("Custom chassis info: " + info);
1043 }
1044 logger.info("---------------------------------------------");
1045 } else if(r instanceof BoardInfo) {
1046 BoardInfo boardInfo = (BoardInfo) r;
1047 logger.info("Board info:");
1048 logger.info("Board MFG date: " + boardInfo.getMfgDate().toString());
1049 logger.info("Board manufacturer: " + boardInfo.getBoardManufacturer());
1050 logger.info("Board product name: " + boardInfo.getBoardProductName());
1051 logger.info("Board part number: " + boardInfo.getBoardPartNumber());
1052 logger.info("Board serial number: " + boardInfo.getBoardSerialNumber());
1053 for(String info : boardInfo.getCustomBoardInfo()) {
1054 logger.info("Custom board info: " + info);
1055 }
1056 logger.info("---------------------------------------------");
1057 } else if(r instanceof ProductInfo) {
1058 ProductInfo productInfo = (ProductInfo) r;
1059 logger.info("Product info:");
1060 logger.info("Product manufacturer: " + productInfo.getManufacturerName());
1061 logger.info("Product product name: " + productInfo.getProductName());
1062 logger.info("Product part number: " + productInfo.getProductModelNumber());
1063 logger.info("Product version: " + productInfo.getProductVersion());
1064 logger.info("Product serial number: " + productInfo.getProductSerialNumber());
1065 logger.info("Product asset tag: " + productInfo.getAssetTag());
1066 for(String info : productInfo.getCustomProductInfo()) {
1067 logger.info("Custom board info: " + info);
1068 }
1069 logger.info("---------------------------------------------");
1070 }
1071 }
1072 }
1073 }