All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.veraxsystems.vxipmi.coding.DecoderRunner Maven / Gradle / Ivy

The newest version!
/*
 * DecoderRunner.java 
 * Created on 2011-07-21
 *
 * Copyright (c) Verax Systems 2011.
 * All rights reserved.
 *
 * This software is furnished under a license. Use, duplication,
 * disclosure and all other uses are restricted to the rights
 * specified in the written license agreement.
 */
package com.veraxsystems.vxipmi.coding;

import com.veraxsystems.vxipmi.coding.commands.IpmiVersion;
import com.veraxsystems.vxipmi.coding.commands.PrivilegeLevel;
import com.veraxsystems.vxipmi.coding.commands.chassis.GetChassisStatus;
import com.veraxsystems.vxipmi.coding.commands.chassis.GetChassisStatusResponseData;
import com.veraxsystems.vxipmi.coding.commands.fru.BaseUnit;
import com.veraxsystems.vxipmi.coding.commands.fru.GetFruInventoryAreaInfo;
import com.veraxsystems.vxipmi.coding.commands.fru.GetFruInventoryAreaInfoResponseData;
import com.veraxsystems.vxipmi.coding.commands.fru.ReadFruData;
import com.veraxsystems.vxipmi.coding.commands.fru.ReadFruDataResponseData;
import com.veraxsystems.vxipmi.coding.commands.fru.record.BoardInfo;
import com.veraxsystems.vxipmi.coding.commands.fru.record.ChassisInfo;
import com.veraxsystems.vxipmi.coding.commands.fru.record.FruRecord;
import com.veraxsystems.vxipmi.coding.commands.fru.record.ProductInfo;
import com.veraxsystems.vxipmi.coding.commands.sdr.GetSdr;
import com.veraxsystems.vxipmi.coding.commands.sdr.GetSdrRepositoryInfo;
import com.veraxsystems.vxipmi.coding.commands.sdr.GetSdrRepositoryInfoResponseData;
import com.veraxsystems.vxipmi.coding.commands.sdr.GetSdrResponseData;
import com.veraxsystems.vxipmi.coding.commands.sdr.GetSensorReading;
import com.veraxsystems.vxipmi.coding.commands.sdr.GetSensorReadingResponseData;
import com.veraxsystems.vxipmi.coding.commands.sdr.ReserveSdrRepository;
import com.veraxsystems.vxipmi.coding.commands.sdr.ReserveSdrRepositoryResponseData;
import com.veraxsystems.vxipmi.coding.commands.sdr.record.CompactSensorRecord;
import com.veraxsystems.vxipmi.coding.commands.sdr.record.FruDeviceLocatorRecord;
import com.veraxsystems.vxipmi.coding.commands.sdr.record.FullSensorRecord;
import com.veraxsystems.vxipmi.coding.commands.sdr.record.RateUnit;
import com.veraxsystems.vxipmi.coding.commands.sdr.record.ReadingType;
import com.veraxsystems.vxipmi.coding.commands.sdr.record.SensorRecord;
import com.veraxsystems.vxipmi.coding.commands.sel.GetSelEntry;
import com.veraxsystems.vxipmi.coding.commands.sel.GetSelEntryResponseData;
import com.veraxsystems.vxipmi.coding.commands.sel.GetSelInfo;
import com.veraxsystems.vxipmi.coding.commands.sel.GetSelInfoResponseData;
import com.veraxsystems.vxipmi.coding.commands.sel.ReserveSel;
import com.veraxsystems.vxipmi.coding.commands.sel.ReserveSelResponseData;
import com.veraxsystems.vxipmi.coding.commands.sel.SelRecord;
import com.veraxsystems.vxipmi.coding.commands.session.CloseSession;
import com.veraxsystems.vxipmi.coding.commands.session.GetChannelAuthenticationCapabilities;
import com.veraxsystems.vxipmi.coding.commands.session.GetChannelAuthenticationCapabilitiesResponseData;
import com.veraxsystems.vxipmi.coding.commands.session.GetChannelCipherSuites;
import com.veraxsystems.vxipmi.coding.commands.session.GetChannelCipherSuitesResponseData;
import com.veraxsystems.vxipmi.coding.commands.session.OpenSession;
import com.veraxsystems.vxipmi.coding.commands.session.OpenSessionResponseData;
import com.veraxsystems.vxipmi.coding.commands.session.Rakp1;
import com.veraxsystems.vxipmi.coding.commands.session.Rakp1ResponseData;
import com.veraxsystems.vxipmi.coding.commands.session.Rakp3;
import com.veraxsystems.vxipmi.coding.commands.session.Rakp3ResponseData;
import com.veraxsystems.vxipmi.coding.protocol.AuthenticationType;
import com.veraxsystems.vxipmi.coding.protocol.decoder.PlainCommandv20Decoder;
import com.veraxsystems.vxipmi.coding.protocol.decoder.Protocolv15Decoder;
import com.veraxsystems.vxipmi.coding.protocol.decoder.Protocolv20Decoder;
import com.veraxsystems.vxipmi.coding.protocol.encoder.Protocolv15Encoder;
import com.veraxsystems.vxipmi.coding.protocol.encoder.Protocolv20Encoder;
import com.veraxsystems.vxipmi.coding.security.CipherSuite;
import com.veraxsystems.vxipmi.coding.security.SecurityConstants;
import com.veraxsystems.vxipmi.common.TypeConverter;
import org.apache.log4j.Logger;

import javax.crypto.NoSuchPaddingException;
import java.io.FileInputStream;
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.security.InvalidKeyException;
import java.security.NoSuchAlgorithmException;
import java.text.DateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Properties;

/**
 * Test driver for Encoder/Decoder
 */
public class DecoderRunner extends Thread {

    private DatagramSocket socket;

    private static int managedSeqNum;
    private static boolean lock;

    private static Rakp1 r1;
    private static Rakp1ResponseData r1rd;
    private static CipherSuite cs = new CipherSuite((byte) 0,
            SecurityConstants.AA_RAKP_HMAC_SHA1, (byte) 0, (byte) 0);

    private static Logger logger = Logger.getLogger(DecoderRunner.class);

    private static int cssrcv = 16;

    private static int reservation;

    private static int nextRecId = 0;

    private static byte[] cssrec;

    private static int fruId = 0;

    private static int fruSize = 528;

    public static void main(String[] args) throws IOException, InterruptedException, NoSuchAlgorithmException, InvalidKeyException {

        logger.info(DateFormat.getInstance().format(
                new Date(new Date().getTime())));

        lock = true;

        DecoderRunner dr = new DecoderRunner();

        dr.socket = new DatagramSocket(6666);

        dr.start();

        Properties properties = new Properties();
        properties.load(new FileInputStream("src/test/resources/test.properties"));

        Thread.sleep(100);

        InetAddress ad = InetAddress.getByName((String)properties.get("testIp"));

        byte index = 0;

        while (cssrcv >= 16) {

            Thread.sleep(300);

            lock = true;

            byte[] outmsg = Encoder.encode(new Protocolv20Encoder(),
                    new GetChannelCipherSuites(TypeConverter.intToByte(0xE),
                            index), 0, 0,0);

            ++index;
            DatagramPacket packet = new DatagramPacket(outmsg, outmsg.length,
                    ad, 0x26F);

            dr.socket.send(packet);

            while (lock) {
                Thread.sleep(1);
            }
        }

        List csl = CipherSuite.getCipherSuites(cssrec);

        for (CipherSuite c : csl) {
            try {
                logger.info(c.getId() + ": "
                        + c.getAuthenticationAlgorithm().getCode() + " "
                        + c.getIntegrityAlgorithm().getCode() + " "
                        + c.getConfidentialityAlgorithm().getCode());
            } catch (Exception e) {
                logger.error(e.getMessage(), e);
            }
        }

        cs = csl.get(2);

        Thread.sleep(300);

        byte[] outmsg = Encoder
                .encode(new Protocolv15Encoder(),
                        new GetChannelAuthenticationCapabilities(IpmiVersion.V15,
                                IpmiVersion.V20, cs, PrivilegeLevel.User,
                                TypeConverter.intToByte(14)), 0, 0, 0);

        DatagramPacket packet = new DatagramPacket(outmsg, outmsg.length, ad,
                0x26F);

        dr.socket.send(packet);

        Thread.sleep(150);

        outmsg = Encoder.encode(new Protocolv20Encoder(), new OpenSession(44,
                PrivilegeLevel.MaximumAvailable, cs), 0, 0, 0);

        packet = new DatagramPacket(outmsg, outmsg.length, ad, 0x26F);

        dr.socket.send(packet);

        Thread.sleep(300);

        while (lock) {
            Thread.sleep(1);
        }

        lock = true;


        r1 = new Rakp1(managedSeqNum, PrivilegeLevel.User, (String)properties.get("username"), (String)properties.get("password"),
                null, cs);

        outmsg = Encoder.encode(new Protocolv20Encoder(), r1, 1, 1,0);

        packet = new DatagramPacket(outmsg, outmsg.length, ad, 0x26F);

        dr.socket.send(packet);

        Thread.sleep(150);

        while (lock) {
            Thread.sleep(1);
        }

        try {
            cs.initializeAlgorithms(r1.calculateSik(r1rd));
        } catch (NoSuchPaddingException e) {
            logger.error(e.getMessage(), e);
        }

        outmsg = Encoder.encode(new Protocolv20Encoder(), new Rakp3((byte) 0,
                managedSeqNum, cs, r1, r1rd), 1, 1, 0);

        packet = new DatagramPacket(outmsg, outmsg.length, ad, 0x26F);

        dr.socket.send(packet);

        Thread.sleep(150);

        outmsg = Encoder.encode(new Protocolv20Encoder(), new GetChassisStatus(
                IpmiVersion.V20, cs, AuthenticationType.RMCPPlus), 1, 1, r1
                .getManagedSystemSessionId());

        packet = new DatagramPacket(outmsg, outmsg.length, ad, 0x26F);

        dr.socket.send(packet);

        Thread.sleep(300);

        outmsg = Encoder.encode(new Protocolv20Encoder(),
                new GetSdrRepositoryInfo(IpmiVersion.V20, cs,
                        AuthenticationType.RMCPPlus), 2, 2, r1
                        .getManagedSystemSessionId());

        packet = new DatagramPacket(outmsg, outmsg.length, ad, 0x26F);

        dr.socket.send(packet);
        Thread.sleep(300);

        outmsg = Encoder.encode(new Protocolv20Encoder(),
                new ReserveSdrRepository(IpmiVersion.V20, cs,
                        AuthenticationType.RMCPPlus), 3, 3, r1
                        .getManagedSystemSessionId());

        packet = new DatagramPacket(outmsg, outmsg.length, ad, 0x26F);

        dr.socket.send(packet);

        int seq = 4;

        lock = true;

        while (lock) {
            Thread.sleep(1);
        }

        while (nextRecId < 65535) {

            Thread.sleep(200);

            logger.info(">>Sending request for record " + nextRecId);

            int sequence = seq++;

            outmsg = Encoder.encode(new Protocolv20Encoder(), new GetSdr(
                    IpmiVersion.V20, cs, AuthenticationType.RMCPPlus,
                    reservation, nextRecId), sequence, sequence, r1
                    .getManagedSystemSessionId());

            packet = new DatagramPacket(outmsg, outmsg.length, ad, 0x26F);

            dr.socket.send(packet);
            lock = true;

            while (lock) {
                Thread.sleep(1);
            }

            if (nextRecId > 0) {
                logger.info(">>Sending request for reading " + nextRecId);

                sequence = seq++;

                outmsg = Encoder.encode(new Protocolv20Encoder(),
                        new GetSensorReading(IpmiVersion.V20, cs,
                                AuthenticationType.RMCPPlus, nextRecId), sequence, sequence,
                        r1.getManagedSystemSessionId());

                packet = new DatagramPacket(outmsg, outmsg.length, ad, 0x26F);

                dr.socket.send(packet);

                lock = true;

                while (lock && nextRecId < 65535) {
                    Thread.sleep(1);
                }
            }

        }

         nextRecId = 0;

        Thread.sleep(300);

        logger.info(">>Sending GetSelInfo");

        int sequence = seq++;

        outmsg = Encoder.encode(new Protocolv20Encoder(), new GetSelInfo(
                IpmiVersion.V20, cs, AuthenticationType.RMCPPlus), sequence, sequence, r1
                .getManagedSystemSessionId());

        packet = new DatagramPacket(outmsg, outmsg.length, ad, 0x26F);

        dr.socket.send(packet);

        Thread.sleep(300);

        logger.info(">>Sending Reserve SEL");

        sequence = seq++;

        outmsg = Encoder.encode(new Protocolv20Encoder(), new ReserveSel(
                IpmiVersion.V20, cs, AuthenticationType.RMCPPlus), sequence, sequence, r1
                .getManagedSystemSessionId());

        packet = new DatagramPacket(outmsg, outmsg.length, ad, 0x26F);

        dr.socket.send(packet);

        lock = true;

        while (lock) {
            Thread.sleep(1);
        }

        while (nextRecId < 65535) {

            Thread.sleep(200);

            logger.info(">>Sending request for SEL record " + nextRecId);

            sequence = seq++;

            outmsg = Encoder.encode(new Protocolv20Encoder(), new GetSelEntry(
                    IpmiVersion.V20, cs, AuthenticationType.RMCPPlus,
                    reservation, nextRecId), sequence, sequence, r1
                    .getManagedSystemSessionId());

            packet = new DatagramPacket(outmsg, outmsg.length, ad, 0x26F);

            dr.socket.send(packet);
            lock = true;

            while (lock) {
                Thread.sleep(1);
            }
        }

        Thread.sleep(300);

        logger.info(">>Sending GetFruInventoryAreaInfo");

        sequence = seq++;

        outmsg = Encoder.encode(new Protocolv20Encoder(),
                new GetFruInventoryAreaInfo(IpmiVersion.V20, cs,
                        AuthenticationType.RMCPPlus, fruId), sequence, sequence, r1
                        .getManagedSystemSessionId());

        packet = new DatagramPacket(outmsg, outmsg.length, ad, 0x26F);

        dr.socket.send(packet);

        for(int i = 0; i < fruSize; i += 100) {


            Thread.sleep(300);

            logger.info(">>Sending ReadFruData");

            int cnt = 100;
            if(i + cnt > fruSize) {
                cnt = fruSize % 100;
            }

            sequence = seq++;

            outmsg = Encoder.encode(new Protocolv20Encoder(),
                    new ReadFruData(IpmiVersion.V20, cs,
                            AuthenticationType.RMCPPlus, fruId, BaseUnit.Bytes, i, cnt), sequence, sequence, r1
                            .getManagedSystemSessionId());

            packet = new DatagramPacket(outmsg, outmsg.length, ad, 0x26F);

            dr.socket.send(packet);

        }

        Thread.sleep(300);

        sequence = seq + 1;

        outmsg = Encoder.encode(
                new Protocolv20Encoder(),
                new CloseSession(IpmiVersion.V20, cs,
                        AuthenticationType.RMCPPlus, r1
                                .getManagedSystemSessionId()), sequence, sequence, r1
                        .getManagedSystemSessionId());

        packet = new DatagramPacket(outmsg, outmsg.length, ad, 0x26F);

        dr.socket.send(packet);

        Thread.sleep(1000);

        dr.socket.close();

    }

    @Override
    public void run() {

        super.run();

        cssrec = new byte[0];

        byte[] buffer = null;

        while (cssrcv >= 16) {
            DatagramPacket resp = new DatagramPacket(new byte[256], 256);

            try {
                socket.receive(resp);
                buffer = new byte[resp.getLength()];
                System.arraycopy(resp.getData(), 0, buffer, 0, buffer.length);
            } catch (IOException e) {
                logger.error(e.getMessage(), e);
            }

            GetChannelCipherSuitesResponseData data = null;

            try {
                data = (GetChannelCipherSuitesResponseData) Decoder.decode(
                        buffer, new Protocolv20Decoder(CipherSuite.getEmpty()),
                        new GetChannelCipherSuites());
            } catch (Exception e) {
                logger.error(e.getMessage(), e);
            }

            if (data != null && data.getCipherSuiteData() != null) {
                cssrcv = data.getCipherSuiteData().length;

                logger.info(data.getCipherSuiteData().length);

                byte[] temp = new byte[cssrec.length + cssrcv];

                System.arraycopy(cssrec, 0, temp, 0, cssrec.length);
                System.arraycopy(data.getCipherSuiteData(), 0, temp,
                        cssrec.length, cssrcv);
                cssrec = temp;

            } else {
                cssrcv = 0;
                logger.info(0);
            }

            lock = false;
        }

        DatagramPacket resp = new DatagramPacket(new byte[256], 256);

        try {
            socket.receive(resp);
            buffer = new byte[resp.getLength()];
            System.arraycopy(resp.getData(), 0, buffer, 0, buffer.length);
        } catch (IOException e) {
            logger.error(e.getMessage(), e);
        }

        GetChannelAuthenticationCapabilitiesResponseData data = null;

        try {
            data = (GetChannelAuthenticationCapabilitiesResponseData) Decoder
                    .decode(buffer, new Protocolv15Decoder(),
                            new GetChannelAuthenticationCapabilities(
                                    IpmiVersion.V15, IpmiVersion.V20, cs));
        } catch (Exception e) {
            logger.error(e.getMessage(), e);
        }

        logger.info("---------------------------------------------");

        logger.info(data.getChannelNumber());
        logger.info(data.isIpmiv20Support());
        logger.info(data.getAuthenticationTypes().toString());
        logger.info(data.isKgEnabled());
        logger.info(data.isPerMessageAuthenticationEnabled());
        logger.info(data.isUserLevelAuthenticationEnabled());
        logger.info(data.isNonNullUsernamesEnabled());
        logger.info(data.isNullUsernamesEnabled());
        logger.info(data.isAnonymusLoginEnabled());
        logger.info(data.getOemId());
        logger.info(data.getOemData());

        logger.info("##############################################");

        resp = new DatagramPacket(new byte[256], 256);

        try {
            socket.receive(resp);
            buffer = new byte[resp.getLength()];
            System.arraycopy(resp.getData(), 0, buffer, 0, buffer.length);
            logger.info(">>>> " + resp.getLength());
        } catch (IOException e) {
            logger.error(e.getMessage(), e);
        }

        OpenSessionResponseData data2 = null;

        try {
            data2 = (OpenSessionResponseData) Decoder.decode(buffer,
                    new PlainCommandv20Decoder(CipherSuite.getEmpty()),
                    new OpenSession(CipherSuite.getEmpty()));
        } catch (Exception e) {
            logger.error(e.getMessage(), e);
        }

        logger.info(data2.getMessageTag());
        logger.info(data2.getStatusCode());
        logger.info(data2.getPrivilegeLevel());
        logger.info(data2.getRemoteConsoleSessionId());
        logger.info(data2.getManagedSystemSessionId());
        logger.info(data2.getAuthenticationAlgorithm());
        logger.info(data2.getConfidentialityAlgorithm());
        logger.info(data2.getIntegrityAlgorithm());

        managedSeqNum = data2.getManagedSystemSessionId();
        lock = false;

        logger.info("---------------------------------------------");

        resp = new DatagramPacket(new byte[256], 256);

        try {
            socket.receive(resp);
            buffer = new byte[resp.getLength()];
            System.arraycopy(resp.getData(), 0, buffer, 0, buffer.length);
        } catch (IOException e) {
            logger.error(e.getMessage(), e);
        }

        Rakp1ResponseData data3 = null;

        try {
            data3 = (Rakp1ResponseData) Decoder.decode(buffer,
                    new PlainCommandv20Decoder(CipherSuite.getEmpty()), r1);
        } catch (Exception e) {
            logger.error(e.getMessage(), e);
        }

        r1rd = data3;

        logger.info(data3.getMessageTag());
        logger.info(data3.getStatusCode());
        logger.info(data3.getRemoteConsoleSessionId());
        logger.info(data3.getManagedSystemGuid());

        logger.info("---------------------------------------------");
        lock = false;

        resp = new DatagramPacket(new byte[256], 256);

        try {
            socket.receive(resp);
            buffer = new byte[resp.getLength()];
            System.arraycopy(resp.getData(), 0, buffer, 0, buffer.length);
        } catch (IOException e) {
            logger.error(e.getMessage(), e);
        }

        Rakp3ResponseData data4 = null;

        try {
            data4 = (Rakp3ResponseData) Decoder.decode(buffer,
                    new PlainCommandv20Decoder(CipherSuite.getEmpty()),
                    new Rakp3(cs, r1, r1rd));
        } catch (Exception e) {
            logger.error(e.getMessage(), e);
        }

        logger.info(data4.getMessageTag());
        logger.info(data4.getStatusCode());
        logger.info(data4.getConsoleSessionId());

        logger.info("---------------------------------------------");

        resp = new DatagramPacket(new byte[256], 256);

        try {
            socket.receive(resp);
            buffer = new byte[resp.getLength()];
            System.arraycopy(resp.getData(), 0, buffer, 0, buffer.length);
        } catch (IOException e) {
            logger.error(e.getMessage(), e);
        }

        GetChassisStatusResponseData data5 = null;

        try {
            data5 = (GetChassisStatusResponseData) Decoder.decode(buffer,
                    new Protocolv20Decoder(cs), new GetChassisStatus(
                            IpmiVersion.V20, cs, AuthenticationType.RMCPPlus));
        } catch (Exception e) {
            logger.error(e.getMessage(), e);
        }

        logger.info(data5.getPowerRestorePolicy());
        logger.info(data5.isPowerControlFault());
        logger.info(data5.isPowerFault());
        logger.info(data5.isInterlock());
        logger.info(data5.isPowerOverload());
        logger.info(data5.isPowerOn());

        logger.info("________");

        logger.info(data5.wasIpmiPowerOn());
        logger.info(data5.wasPowerFault());
        logger.info(data5.wasInterlock());
        logger.info(data5.wasPowerOverload());

        logger.info("________");

        logger.info(data5.isChassisIdentifyCommandSupported());
        if (data5.isChassisIdentifyCommandSupported()) {
            logger.info(data5.getChassisIdentifyState());
        }
        logger.info(data5.coolingFaultDetected());
        logger.info(data5.driveFaultDetected());
        logger.info(data5.isFrontPanelLockoutActive());
        logger.info(data5.isChassisIntrusionActive());

        logger.info("________");

        logger.info(data5.isFrontPanelButtonCapabilitiesSet());

        if (data5.isFrontPanelButtonCapabilitiesSet()) {
            try {
                logger.info(data5.isStandbyButtonDisableAllowed());
                logger.info(data5
                        .isDiagnosticInterruptButtonDisableAllowed());
                logger.info(data5.isResetButtonDisableAllowed());
                logger.info(data5.isPowerOffButtonDisableAllowed());
                logger.info(data5.isStandbyButtonDisabled());
                logger.info(data5.isDiagnosticInterruptButtonDisabled());
                logger.info(data5.isResetButtonDisabled());
                logger.info(data5.isPowerOffButtonDisabled());
            } catch (IllegalAccessException e) {
                logger.error(e.getMessage(), e);
            }

        }

        logger.info("---------------------------------------------");

        resp = new DatagramPacket(new byte[256], 256);

        try {
            socket.receive(resp);
            buffer = new byte[resp.getLength()];
            System.arraycopy(resp.getData(), 0, buffer, 0, buffer.length);
        } catch (IOException e) {
            logger.error(e.getMessage(), e);
        }

        GetSdrRepositoryInfoResponseData data6 = null;

        try {
            data6 = (GetSdrRepositoryInfoResponseData) Decoder.decode(buffer,
                    new Protocolv20Decoder(cs), new GetSdrRepositoryInfo(
                            IpmiVersion.V20, cs, AuthenticationType.RMCPPlus));
        } catch (Exception e) {
            logger.error(e.getMessage(), e);
        }

        logger.info(data6.getSdrVersion());
        logger.info(data6.getRecordCount());
        logger.info(data6.getAddTimestamp());
        logger.info(data6.getDelTimestamp());
        logger.info(data6.isReserveSupported());

        logger.info("---------------------------------------------");

        resp = new DatagramPacket(new byte[256], 256);

        try {
            socket.receive(resp);
            buffer = new byte[resp.getLength()];
            System.arraycopy(resp.getData(), 0, buffer, 0, buffer.length);
        } catch (IOException e) {
            logger.error(e.getMessage(), e);
        }

        ReserveSdrRepositoryResponseData data7 = null;

        try {
            data7 = (ReserveSdrRepositoryResponseData) Decoder.decode(buffer,
                    new Protocolv20Decoder(cs), new ReserveSdrRepository(
                            IpmiVersion.V20, cs, AuthenticationType.RMCPPlus));
        } catch (Exception e) {
            logger.error(e.getMessage(), e);
        }

        logger.info(data7.getReservationId());

        reservation = data7.getReservationId();

        logger.info("< 0) {
                resp = new DatagramPacket(new byte[256], 256);

                try {
                    socket.receive(resp);
                    buffer = new byte[resp.getLength()];
                    System.arraycopy(resp.getData(), 0, buffer, 0,
                            buffer.length);
                } catch (IOException e) {
                    logger.error(e.getMessage(), e);
                }
                GetSensorReadingResponseData data9 = null;

                try {
                    data9 = (GetSensorReadingResponseData) Decoder.decode(
                            buffer, new Protocolv20Decoder(cs),
                            new GetSensorReading(IpmiVersion.V20, cs, AuthenticationType.RMCPPlus, 0));

                    if (record instanceof FullSensorRecord) {
                        FullSensorRecord rec = (FullSensorRecord) record;
                        logger.info(data9.getSensorReading(rec)
                                + " "
                                + rec.getSensorBaseUnit().toString()
                                + (rec.getRateUnit() != RateUnit.None ? " per "
                                        + rec.getRateUnit() : ""));
                    }
                    if (record instanceof CompactSensorRecord) {
                        CompactSensorRecord rec = (CompactSensorRecord) record;
                        List events = data9.getStatesAsserted(
                                rec.getSensorType(), rec.getEventReadingType());
                        StringBuilder s = new StringBuilder();
                        for (int i = 0; i < events.size(); ++i) {
                            s.append(events.get(i)).append(", ");
                        }
                        logger.info(s.toString());

                    }
                } catch (Exception e) {
                    logger.error(e.getMessage(), e);
                }
            }

            try {
                Thread.sleep(100);
            } catch (InterruptedException e) {
                logger.error(e.getMessage(), e);
            }

            nextRecId = data8.getNextRecordId();

            logger.info("---------------------------------------------");

            lock = false;
        }

        resp = new DatagramPacket(new byte[256], 256);

        try {
            socket.receive(resp);
            buffer = new byte[resp.getLength()];
            System.arraycopy(resp.getData(), 0, buffer, 0, buffer.length);
        } catch (IOException e) {
            logger.error(e.getMessage(), e);
        }

        GetSelInfoResponseData data10 = null;

        try {
            data10 = (GetSelInfoResponseData) Decoder.decode(buffer,
                    new Protocolv20Decoder(cs), new GetSelInfo(IpmiVersion.V20,
                            cs, AuthenticationType.RMCPPlus));
        } catch (Exception e) {
            logger.error(e.getMessage(), e);
        }

        logger.info(data10.getSelVersion());
        logger.info(data10.getEntriesCount());
        logger.info(DateFormat.getInstance().format(
                data10.getAdditionTimestamp()));
        logger.info(DateFormat.getInstance().format(
                data10.getEraseTimestamp()));

        logger.info("---------------------------------------------");

        resp = new DatagramPacket(new byte[256], 256);

        try {
            socket.receive(resp);
            buffer = new byte[resp.getLength()];
            System.arraycopy(resp.getData(), 0, buffer, 0, buffer.length);
        } catch (IOException e) {
            logger.error(e.getMessage(), e);
        }

        ReserveSelResponseData data11 = null;

        try {
            data11 = (ReserveSelResponseData) Decoder.decode(buffer,
                    new Protocolv20Decoder(cs), new ReserveSel(IpmiVersion.V20,
                            cs, AuthenticationType.RMCPPlus));
        } catch (Exception e) {
            logger.error(e.getMessage(), e);
        }

        logger.info(data11.getReservationId());

        reservation = data11.getReservationId();
        reservation = 0;

        lock = false;

        logger.info("---------------------------------------------");

        while (nextRecId < 65535) {

            resp = new DatagramPacket(new byte[256], 256);

            try {
                socket.receive(resp);
                buffer = new byte[resp.getLength()];
                System.arraycopy(resp.getData(), 0, buffer, 0, buffer.length);
            } catch (IOException e) {
                logger.error(e.getMessage(), e);
            }
            GetSelEntryResponseData data12 = null;

            try {
                data12 = (GetSelEntryResponseData) Decoder.decode(buffer,
                        new Protocolv20Decoder(cs), new GetSelEntry(
                                IpmiVersion.V20, cs, AuthenticationType.RMCPPlus, 0, 0));
            } catch (Exception e) {
                logger.error(e.getMessage(), e);
            }

            logger.info(data12.getSelRecord().toString());

            SelRecord rec = data12.getSelRecord();

            logger.info("Sensor: " + rec.getSensorType());
            logger.info(rec.getTimestamp());
            logger.info(rec.getEventDirection());
            logger.info(rec.getEvent());

            nextRecId = data12.getNextRecordId();

            lock = false;

            logger.info("---------------------------------------------");
        }

        resp = new DatagramPacket(new byte[256], 256);

        try {
            socket.receive(resp);
            buffer = new byte[resp.getLength()];
            System.arraycopy(resp.getData(), 0, buffer, 0, buffer.length);
        } catch (IOException e) {
            logger.error(e.getMessage(), e);
        }

        GetFruInventoryAreaInfoResponseData data13 = null;

        try {
            data13 = (GetFruInventoryAreaInfoResponseData) Decoder.decode(
                    buffer, new Protocolv20Decoder(cs),
                    new GetFruInventoryAreaInfo(IpmiVersion.V20, cs, AuthenticationType.RMCPPlus, 0));
        } catch (Exception e) {
            logger.error(e.getMessage(), e);
        }

        logger.info("FRU inventory area size: "
                + data13.getFruInventoryAreaSize());

        logger.info("FRU Unit: " + data13.getFruUnit());

        logger.info("---------------------------------------------");

        List rd = new ArrayList();

        for(int i = 0; i < fruSize; i +=100) {
            resp = new DatagramPacket(new byte[256], 256);

            try {
                socket.receive(resp);
                buffer = new byte[resp.getLength()];
                System.arraycopy(resp.getData(), 0, buffer, 0, buffer.length);
            } catch (IOException e) {
                logger.error(e.getMessage(), e);
            }

            ReadFruDataResponseData data14 = null;

            try {
                data14 = (ReadFruDataResponseData) Decoder.decode(buffer,
                        new Protocolv20Decoder(cs), new ReadFruData(IpmiVersion.V20,
                                cs, AuthenticationType.RMCPPlus, 0, BaseUnit.Bytes, 0, 0));
            } catch (Exception e) {
                logger.error(e.getMessage(), e);
            }

            rd.add(data14);

            logger.info(data14.getFruData().length);

            logger.info("---------------------------------------------");

        }

            List records = ReadFruData.decodeFruData(rd);

            for(FruRecord r : records) {
                if(r instanceof ChassisInfo) {
                    ChassisInfo chassisInfo = (ChassisInfo) r;
                    logger.info("Chassis info:");
                    logger.info("Chassis type: " + chassisInfo.getChassisType());
                    logger.info("Chassis part number: " + chassisInfo.getChassisPartNumber());
                    logger.info("Chassis serial number: " + chassisInfo.getChassisSerialNumber());
                    for(String info : chassisInfo.getCustomChassisInfo()) {
                        logger.info("Custom chassis info: " + info);
                    }
                    logger.info("---------------------------------------------");
                } else if(r instanceof BoardInfo) {
                    BoardInfo boardInfo = (BoardInfo) r;
                    logger.info("Board info:");
                    logger.info("Board MFG date: " + boardInfo.getMfgDate().toString());
                    logger.info("Board manufacturer: " + boardInfo.getBoardManufacturer());
                    logger.info("Board product name: " + boardInfo.getBoardProductName());
                    logger.info("Board part number: " + boardInfo.getBoardPartNumber());
                    logger.info("Board serial number: " + boardInfo.getBoardSerialNumber());
                    for(String info : boardInfo.getCustomBoardInfo()) {
                        logger.info("Custom board info: " + info);
                    }
                    logger.info("---------------------------------------------");
                } else if(r instanceof ProductInfo) {
                    ProductInfo productInfo = (ProductInfo) r;
                    logger.info("Product info:");
                    logger.info("Product manufacturer: " + productInfo.getManufacturerName());
                    logger.info("Product product name: " + productInfo.getProductName());
                    logger.info("Product part number: " + productInfo.getProductModelNumber());
                    logger.info("Product version: " + productInfo.getProductVersion());
                    logger.info("Product serial number: " + productInfo.getProductSerialNumber());
                    logger.info("Product asset tag: " + productInfo.getAssetTag());
                    for(String info : productInfo.getCustomProductInfo()) {
                        logger.info("Custom board info: " + info);
                    }
                    logger.info("---------------------------------------------");
                }
            }
    }
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy