@Override
  public String getBiosVersion() {
    String override = this.m_kuraProperties.getProperty(KEY_BIOS_VERSION);
    if (override != null) {
      return override;
    }

    String biosVersion = UNSUPPORTED;

    if (OS_LINUX.equals(this.getOsName())) {
      if ("2.6.34.9-WR4.2.0.0_standard".equals(getOsVersion())
          || "2.6.34.12-WR4.3.0.0_standard".equals(getOsVersion())) {
        biosVersion = runSystemInfoCommand("eth_vers_bios");
      } else {
        String biosTmp = runSystemInfoCommand("dmidecode -s bios-version");
        if (biosTmp.length() > 0 && !biosTmp.contains("Permission denied")) {
          biosVersion = biosTmp;
        }
      }
    } else if (OS_MAC_OSX.equals(this.getOsName())) {
      String[] cmds = {"/bin/sh", "-c", "system_profiler SPHardwareDataType | grep 'Boot ROM'"};
      String biosTmp = runSystemInfoCommand(cmds);
      if (biosTmp.contains(": ")) {
        biosVersion = biosTmp.split(":\\s+")[1];
      }
    }

    return biosVersion;
  }
  @Override
  public String getSerialNumber() {
    String override = this.m_kuraProperties.getProperty(KEY_SERIAL_NUM);
    if (override != null) {
      return override;
    }

    String serialNum = UNKNOWN;

    if (OS_MAC_OSX.equals(this.getOsName())) {
      String[] cmds = {
        "/bin/sh", "-c", "system_profiler SPHardwareDataType | grep 'Serial Number'"
      };
      String serialTmp = runSystemInfoCommand(cmds);
      if (serialTmp.contains(": ")) {
        serialNum = serialTmp.split(":\\s+")[1];
      }
    } else if (OS_LINUX.equals(this.getOsName())) {
      String serialTmp = runSystemInfoCommand("dmidecode -t system");
      if (serialTmp.contains("Serial Number: ")) {
        serialNum = serialTmp.split("Serial Number:\\s+")[1].split("\n")[0];
      }
    }

    return serialNum;
  }
 @Override
 public String getPrimaryNetworkInterfaceName() {
   if (m_kuraProperties.getProperty(KEY_PRIMARY_NET_IFACE) != null) {
     return this.m_kuraProperties.getProperty(KEY_PRIMARY_NET_IFACE);
   } else {
     if (OS_MAC_OSX.equals(getOsName())) {
       return "en0";
     } else if (OS_LINUX.equals(getOsName())) {
       return "eth0";
     } else {
       s_logger.error("Unsupported platform");
       return null;
     }
   }
 }
  @Override
  public String getOsVersion() {
    String override = this.m_kuraProperties.getProperty(KEY_OS_VER);
    if (override != null) {
      return override;
    }

    StringBuilder sbOsVersion = new StringBuilder();
    sbOsVersion.append(System.getProperty(KEY_OS_VER));
    if (OS_LINUX.equals(getOsName())) {
      BufferedReader in = null;
      File linuxKernelVersion = null;
      FileReader fr = null;
      try {
        linuxKernelVersion = new File("/proc/sys/kernel/version");
        if (linuxKernelVersion.exists()) {
          StringBuilder kernelVersionData = new StringBuilder();
          fr = new FileReader(linuxKernelVersion);
          in = new BufferedReader(fr);
          String tempLine = null;
          while ((tempLine = in.readLine()) != null) {
            kernelVersionData.append(" ");
            kernelVersionData.append(tempLine);
          }
          sbOsVersion.append(kernelVersionData.toString());
        }
      } catch (FileNotFoundException e) {
      } catch (IOException e) {
      } finally {
        try {
          if (fr != null) {
            fr.close();
          }
          if (in != null) {
            in.close();
          }
        } catch (IOException e) {
          s_logger.error("Exception while closing resources!", e);
        }
      }
    }

    return sbOsVersion.toString();
  }
  @Override
  public String getPartNumber() {
    String override = this.m_kuraProperties.getProperty(KEY_PART_NUMBER);
    if (override != null) {
      return override;
    }

    String partNumber = UNSUPPORTED;

    if (OS_LINUX.equals(this.getOsName())) {
      if ("2.6.34.9-WR4.2.0.0_standard".equals(getOsVersion())
          || "2.6.34.12-WR4.3.0.0_standard".equals(getOsVersion())) {
        partNumber =
            runSystemInfoCommand("eth_partno_bsp") + " " + runSystemInfoCommand("eth_partno_epr");
      }
    }

    return partNumber;
  }
  @Override
  public String getFirmwareVersion() {
    String override = this.m_kuraProperties.getProperty(KEY_FIRMWARE_VERSION);
    if (override != null) {
      return override;
    }

    String fwVersion = UNSUPPORTED;

    if (OS_LINUX.equals(getOsName()) && (getOsVersion() != null)) {
      if (getOsVersion().startsWith("2.6.34.9-WR4.2.0.0_standard")
          || getOsVersion().startsWith("2.6.34.12-WR4.3.0.0_standard")) {
        fwVersion =
            runSystemInfoCommand("eth_vers_cpld") + " " + runSystemInfoCommand("eth_vers_uctl");
      } else if (getOsVersion().startsWith("3.0.35-12.09.01+yocto")) {
        fwVersion = runSystemInfoCommand("eth_vers_avr");
      }
    }
    return fwVersion;
  }
  @Override
  public String getDeviceName() {
    String override = this.m_kuraProperties.getProperty(KEY_DEVICE_NAME);
    if (override != null) {
      return override;
    }

    String deviceName = UNKNOWN;
    if (OS_MAC_OSX.equals(this.getOsName())) {
      String displayTmp = runSystemInfoCommand("scutil --get ComputerName");
      if (displayTmp.length() > 0) {
        deviceName = displayTmp;
      }
    } else if (OS_LINUX.equals(this.getOsName()) || OS_CLOUDBEES.equals(this.getOsName())) {
      String displayTmp = runSystemInfoCommand("hostname");
      if (displayTmp.length() > 0) {
        deviceName = displayTmp;
      }
    }
    return deviceName;
  }
  @Override
  public String getModelId() {
    String override = this.m_kuraProperties.getProperty(KEY_MODEL_ID);
    if (override != null) {
      return override;
    }

    String modelId = UNKNOWN;

    if (OS_MAC_OSX.equals(this.getOsName())) {
      String modelTmp = runSystemInfoCommand("sysctl -b hw.model");
      if (modelTmp.length() > 0) {
        modelId = modelTmp;
      }
    } else if (OS_LINUX.equals(this.getOsName())) {
      String modelTmp = runSystemInfoCommand("dmidecode -t system");
      if (modelTmp.contains("Version: ")) {
        modelId = modelTmp.split("Version:\\s+")[1].split("\n")[0];
      }
    }

    return modelId;
  }
  @Override
  public String getModelName() {
    String override = this.m_kuraProperties.getProperty(KEY_MODEL_NAME);
    if (override != null) {
      return override;
    }

    String modelName = UNKNOWN;

    if (OS_MAC_OSX.equals(this.getOsName())) {
      String[] cmds = {"/bin/sh", "-c", "system_profiler SPHardwareDataType | grep 'Model Name'"};
      String modelTmp = runSystemInfoCommand(cmds);
      if (modelTmp.contains(": ")) {
        modelName = modelTmp.split(":\\s+")[1];
      }
    } else if (OS_LINUX.equals(this.getOsName())) {
      String modelTmp = runSystemInfoCommand("dmidecode -t system");
      if (modelTmp.contains("Product Name: ")) {
        modelName = modelTmp.split("Product Name:\\s+")[1].split("\n")[0];
      }
    }

    return modelName;
  }