Exemple #1
0
void genInterfaceDetail(const IP_ADAPTER_ADDRESSES* adapter, Row& r) {
  r["interface"] = INTEGER(adapter->IfIndex);
  r["mtu"] = INTEGER(adapter->Mtu);
  r["type"] = INTEGER(adapter->IfType);
  r["description"] = wstringToString(adapter->Description);

  std::vector<std::string> toks;
  for (size_t i = 0; i < adapter->PhysicalAddressLength; i++) {
    std::stringstream ss;
    ss << std::hex;
    ss << static_cast<unsigned int>(adapter->PhysicalAddress[i]);
    auto s = ss.str();
    if (s.size() < 2_sz) {
      s = '0' + s;
    }
    toks.push_back(s);
  }
  r["mac"] = osquery::join(toks, ":");
  r["flags"] = INTEGER(adapter->Flags);
  r["metric"] = INTEGER(adapter->Ipv4Metric);

  // TODO: These values will need an equivalent on Windows systems
  r["last_change"] = BIGINT("-1");
  r["collisions"] = BIGINT("-1");

  // Grab the remaining table values from WMI
  auto query =
      "SELECT * FROM Win32_PerfRawData_Tcpip_NetworkInterface WHERE "
      "Name = \"" +
      r["description"] + "\"";

  WmiRequest req1(query);
  if (req1.getStatus().ok()) {
    auto& results = req1.results();
    if (!results.empty()) {
      std::string sPlaceHolder;
      unsigned long long ullPlaceHolder = 0;

      results[0].GetString("PacketsReceivedPerSec", sPlaceHolder);
      safeStrtoull(sPlaceHolder, 10, ullPlaceHolder);
      r["ipackets"] = BIGINT(ullPlaceHolder);
      results[0].GetString("PacketsSentPerSec", sPlaceHolder);
      safeStrtoull(sPlaceHolder, 10, ullPlaceHolder);
      r["opackets"] = BIGINT(ullPlaceHolder);

      results[0].GetString("BytesReceivedPerSec", sPlaceHolder);
      safeStrtoull(sPlaceHolder, 10, ullPlaceHolder);
      r["ibytes"] = BIGINT(ullPlaceHolder);
      results[0].GetString("BytesSentPerSec", sPlaceHolder);
      safeStrtoull(sPlaceHolder, 10, ullPlaceHolder);
      r["obytes"] = BIGINT(ullPlaceHolder);

      results[0].GetString("PacketsReceivedErrors", sPlaceHolder);
      safeStrtoull(sPlaceHolder, 10, ullPlaceHolder);
      r["ierrors"] = BIGINT(ullPlaceHolder);
      results[0].GetString("PacketsOutboundErrors", sPlaceHolder);
      safeStrtoull(sPlaceHolder, 10, ullPlaceHolder);
      r["oerrors"] = BIGINT(ullPlaceHolder);

      results[0].GetString("PacketsReceivedDiscarded", sPlaceHolder);
      safeStrtoull(sPlaceHolder, 10, ullPlaceHolder);
      r["idrops"] = BIGINT(ullPlaceHolder);
      results[0].GetString("PacketsOutboundDiscarded", sPlaceHolder);
      safeStrtoull(sPlaceHolder, 10, ullPlaceHolder);
      r["odrops"] = BIGINT(ullPlaceHolder);
    } else {
      LOG(INFO) << "Failed to retrieve network statistics for interface "
                << r["interface"];
    }
  }

  query =
      "SELECT * FROM Win32_NetworkAdapter WHERE "
      "InterfaceIndex = " +
      r["interface"];
  WmiRequest req2(query);
  if (req2.getStatus().ok()) {
    auto& results = req2.results();
    if (!results.empty()) {
      bool bPlaceHolder;
      long lPlaceHolder = 0;
      unsigned __int64 ullPlaceHolder = 0;
      results[0].GetString("Manufacturer", r["manufacturer"]);
      results[0].GetString("NetConnectionID", r["connection_id"]);
      results[0].GetLong("NetConnectionStatus", lPlaceHolder);
      r["connection_status"] = INTEGER(lPlaceHolder);
      results[0].GetBool("NetEnabled", bPlaceHolder);
      r["enabled"] = INTEGER(bPlaceHolder);
      results[0].GetBool("PhysicalAdapter", bPlaceHolder);
      r["physical_adapter"] = INTEGER(bPlaceHolder);
      results[0].GetString("ServiceName", r["service"]);
      results[0].GetUnsignedLongLong("Speed", ullPlaceHolder);
      r["speed"] = INTEGER(ullPlaceHolder);
    } else {
      LOG(INFO) << "Failed to retrieve physical state for interface "
                << r["interface"];
    }
  }

  query =
      "SELECT * FROM win32_networkadapterconfiguration WHERE "
      "InterfaceIndex = " +
      r["interface"];
  WmiRequest req3(query);
  if (req3.getStatus().ok()) {
    auto& results = req3.results();
    if (!results.empty()) {
      bool bPlaceHolder;
      std::vector<std::string> vPlaceHolder;
      results[0].GetBool("DHCPEnabled", bPlaceHolder);
      r["dhcp_enabled"] = INTEGER(bPlaceHolder);
      results[0].GetString("DHCPLeaseExpires", r["dhcp_lease_expires"]);
      results[0].GetString("DHCPLeaseObtained", r["dhcp_lease_obtained"]);
      results[0].GetString("DHCPServer", r["dhcp_server"]);
      results[0].GetString("DNSDomain", r["dns_domain"]);
      results[0].GetVectorOfStrings("DNSDomainSuffixSearchOrder", vPlaceHolder);
      r["dns_domain_suffix_search_order"] = osquery::join(vPlaceHolder, ", ");
      results[0].GetString("DNSHostName", r["dns_host_name"]);
      results[0].GetVectorOfStrings("DNSServerSearchOrder", vPlaceHolder);
      r["dns_server_search_order"] = osquery::join(vPlaceHolder, ", ");
    } else {
      LOG(INFO) << "Failed to retrieve DHCP and DNS information for interface "
                << r["interface"];
    }
  }
}
Exemple #2
0
END_TEST


START_TEST(test_constructors)
  {
  req r;
  std::vector<std::string> l;

  fail_unless(r.getHostlist(l) == PBSE_EMPTY);
  fail_unless(l.size() == 0);
  fail_unless(r.getTaskCount() == 1);
  fail_unless(r.getPlacementType() == "");
  fail_unless(r.getNodeAccessPolicy().size() == 0, r.getNodeAccessPolicy().c_str());
  fail_unless(r.getOS().size() == 0);
  fail_unless(r.getGres().size() == 0);
  fail_unless(r.getDisk() == 0);
  fail_unless(r.getSwap() == 0);
  fail_unless(r.getMemory() == 0);
  fail_unless(r.getExecutionSlots() == 1, "slots: %d", r.getExecutionSlots());

  std::string req2("5:lprocs=4:memory=12gb:place=socket=2:usecores:pack:gpus=2:mics=1:gres=matlab=1:feature=fast");
  req r2(req2);
  fail_unless(r2.getTaskCount() == 5, "task count is %d", r2.getTaskCount());
  fail_unless(r2.getPlacementType() == "socket=2", "value %s", r2.getPlacementType().c_str());
  fail_unless(r2.getNodeAccessPolicy().size() == 0);
  fail_unless(r2.getOS().size() == 0);
  fail_unless(r2.getGres() == "matlab=1");
  fail_unless(r2.getDisk() == 0);
  fail_unless(r2.getSwap() == 0);
  fail_unless(r2.getMemory() == 12 * 1024 * 1024);
  fail_unless(r2.getExecutionSlots() == 4);
  fail_unless(r2.getFeatures() == "fast", "features '%s'", r2.getFeatures().c_str());

  req copy_r2(r2);
  fail_unless(copy_r2.getTaskCount() == 5);
  fail_unless(copy_r2.getPlacementType() == r2.getPlacementType(), "copy value '%s' first value '%s'", copy_r2.getPlacementType().c_str(), r2.getPlacementType().c_str());
  fail_unless(copy_r2.getNodeAccessPolicy().size() == 0);
  fail_unless(copy_r2.getOS().size() == 0);
  fail_unless(copy_r2.getGres() == "matlab=1");
  fail_unless(copy_r2.getDisk() == 0);
  fail_unless(copy_r2.getSwap() == 0);
  fail_unless(copy_r2.getMemory() == 12 * 1024 * 1024);
  fail_unless(copy_r2.getExecutionSlots() == 4);
  fail_unless(copy_r2.getFeatures() == "fast", "features '%s'", copy_r2.getFeatures().c_str());
 
  std::string req3("5:lprocs=4:memory=12gb:place=node:mics=1:feature=fast");
  req r3(req3);
  fail_unless(r3.getPlacementType() == "node");

  std::string req4("5:lprocs=4:memory=12gb:place=numanode=1:mics=1:feature=fast");
  req r4(req4);
  fail_unless(r4.getPlacementType() == "numanode=1", r4.getPlacementType().c_str());
 
  std::string req5("5:lprocs=4:memory=12gb:place=core:mics=1:feature=fast");
  req r5(req5);
  fail_unless(r5.getThreadUsageString() == "usecores", "thread usage '%s'", r5.getThreadUsageString().c_str());

  std::string req6("5:lprocs=4:place=thread");
  req r6(req6);
  fail_unless(r6.getThreadUsageString() == "usethreads", "thread usage '%s'", r6.getThreadUsageString().c_str());

  // make sure miss-spellings are caught
  std::string error;
  req str_set;

  fail_unless(str_set.set_from_submission_string(strdup("5:lproc=2"), error) != PBSE_NONE);
  good_err = true;
  fail_unless(str_set.set_from_submission_string(strdup("5:lprocs=2:place=sockets=2"), error) != PBSE_NONE);

  fail_unless(str_set.set_from_submission_string(strdup("4:lprocs=all"), error) != PBSE_NONE);
  fail_unless(str_set.set_from_submission_string(strdup("4:memory=12gb:memory=1024mb"), error) != PBSE_NONE);
  fail_unless(str_set.set_from_submission_string(strdup("-1:lprocs=4"), error) != PBSE_NONE);
  fail_unless(str_set.set_from_submission_string(strdup("1:lprocs=-4"), error) != PBSE_NONE);
  fail_unless(str_set.set_from_submission_string(strdup("1:lprocs=4:memory=0"), error) != PBSE_NONE);
  fail_unless(str_set.set_from_submission_string(strdup("3:gpus=2:reseterr:exclusive_thread:opsys=cent6"), error) == PBSE_NONE);
  fail_unless(str_set.set_from_submission_string(strdup("1:lprocs=all:place=core"), error) != PBSE_NONE);
  fail_unless(str_set.set_from_submission_string(strdup("1:lprocs=all:place=thread=2"), error) != PBSE_NONE);

  std::string req7("2:place=numanode");
  req r7(req7);
  r7.set_index(0);

  std::vector<std::string> names;
  std::vector<std::string> values;
  r7.get_values(names, values);

  fail_unless(names[0] == "task_count.0", names[0].c_str());
  fail_unless(names[1] == "lprocs.0", names[1].c_str());
  fail_unless(names[2] == "numanode.0", names[2].c_str());
  fail_unless(values[0] == "2");
  fail_unless(values[1] == "1");
  fail_unless(values[2] == "1");

  std::string req8("2:place=core");
  req r8(req8);
  r8.set_index(0);

  names.clear();
  values.clear();
  r8.get_values(names, values);

  fail_unless(names[0] == "task_count.0", names[0].c_str());
  fail_unless(names[1] == "lprocs.0", names[1].c_str());
  fail_unless(values[0] == "2");
  fail_unless(values[1] == "1");
  }