/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. * */ #include "qpid/sys/SystemInfo.h" #include #include #include #include #include #include #include #ifndef HOST_NAME_MAX # define HOST_NAME_MAX 256 #endif using namespace std; namespace qpid { namespace sys { long SystemInfo::concurrency() { #ifdef _SC_NPROCESSORS_ONLN // Linux specific. return sysconf(_SC_NPROCESSORS_ONLN); #else return -1; #endif } bool SystemInfo::getLocalHostname (TcpAddress &address) { char name[HOST_NAME_MAX]; if (::gethostname(name, sizeof(name)) != 0) return false; address.host = name; return true; } void SystemInfo::getLocalIpAddresses (uint16_t port, std::vector
&addrList) { static const string LOCALHOST("127.0.0.1"); int s = socket (PF_INET, SOCK_STREAM, 0); for (int i=1;;i++) { struct ifreq ifr; ifr.ifr_ifindex = i; if (::ioctl (s, SIOCGIFNAME, &ifr) < 0) break; /* now ifr.ifr_name is set */ if (::ioctl (s, SIOCGIFADDR, &ifr) < 0) continue; struct sockaddr_in *sin = (struct sockaddr_in *) &ifr.ifr_addr; string addr(inet_ntoa(sin->sin_addr)); if (addr != LOCALHOST) addrList.push_back(TcpAddress(addr, port)); } close (s); } void SystemInfo::getSystemId (std::string &osName, std::string &nodeName, std::string &release, std::string &version, std::string &machine) { struct utsname _uname; if (uname (&_uname) == 0) { osName = _uname.sysname; nodeName = _uname.nodename; release = _uname.release; version = _uname.version; machine = _uname.machine; } } }} // namespace qpid::sys