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;
}
Пример #2
0
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;
}