long MACAddressUtility::GetMACAddress(unsigned char * result) { // Fill result with zeroes memset(result, 0, 6); // Call appropriate function for each platform #if defined(WIN32) || defined(UNDER_CE) return GetMACAddressMSW(result); #elif defined(__APPLE__) return GetMACAddressMAC(result); #elif defined(LINUX) || defined(linux) return GetMACAddressLinux(result); #endif // If platform is not supported then return error code return -1; }
int main(int argc, char **argv) { std::string vDNA; std::string vMAC_LAN; std::string vMAC_WIFI; std::string vIP_LAN; std::string vIP_WIFI; std::string vOS_VER; std::string vOS_BUILD; bool verbose = false; if (argc == 2) { std::string param(argv[1]); if (param == "-v" || param == "--verbose") verbose = true; } unsigned long long dna; char string_buffer[18]; int res; // Get DNA get_xilinx_dna(&dna); sprintf(string_buffer, "%llX", dna); vDNA = string_buffer; // Get MAC_LAN res = 0; sprintf(string_buffer, "00:00:00:00:00:00"); res = GetMACAddressLinux("/sys/class/net/eth0/address", string_buffer); if(!res) vMAC_LAN = string_buffer; // Get MAC_WIFI res = 0; sprintf(string_buffer, "00:00:00:00:00:00"); res = GetMACAddressLinux("/sys/class/net/wlan0/address", string_buffer); if(!res) vMAC_WIFI = string_buffer; // Get IP_LAN struct ifaddrs *addr; getifaddrs(&addr); std::map<std::string, std::string> ip_map; while(addr) { struct sockaddr_in *pAddr = (struct sockaddr_in *)addr->ifa_addr; ip_map[std::string(addr->ifa_name)] = std::string(inet_ntoa(pAddr->sin_addr)); addr = addr->ifa_next; } for (auto it = ip_map.begin(); it != ip_map.end(); ++it) { if(it->first == "eth0") vIP_LAN = it->second; if(it->first == "wlan0") vIP_WIFI = it->second; } vOS_VER = GetOSVersion("/opt/redpitaya/www/apps/info/info.json"); vOS_BUILD = GetOSBuild("/opt/redpitaya/www/apps/info/info.json"); /* std::cout << "DNA: " << vDNA << std::endl; std::cout << "LAN IP: " << vIP_LAN << std::endl; std::cout << "WIFI IP: " << vIP_WIFI << std::endl; std::cout << "LAN MAC: " << vMAC_LAN << std::endl; std::cout << "WIFI MAC: " << vMAC_WIFI << std::endl; std::cout << "OS VER: " << vOS_VER << std::endl; std::cout << "OS BUILD: " << vOS_BUILD << std::endl;*/ // Build curl command std::stringstream cmd; cmd << "curl '" << GetUrl() << "?dna=00" << vDNA << "&"; cmd << "ip_lan=" << vIP_LAN << "&"; cmd << "mac_lan=" << vMAC_LAN << "&"; cmd << "os_ver=" << vOS_VER << "&"; cmd << "os_build=" << vOS_BUILD; if(vIP_WIFI != "") cmd << "&ip_wifi=" << vIP_WIFI; if(vIP_WIFI != "") cmd << "&mac_wifi=" << vMAC_WIFI; cmd << "'"; if (verbose) std::cout << "Executing: " << cmd.str().c_str() << std::endl; system(cmd.str().c_str()); return 0; }