@@ -67,6 +67,7 @@ static void PrintLoadedLibraries(JSONWriter* writer);
6767static void PrintComponentVersions (JSONWriter* writer);
6868static void PrintRelease (JSONWriter* writer);
6969static void PrintCpuInfo (JSONWriter* writer);
70+ static void PrintNetworkInterfaceInfo (JSONWriter* writer);
7071
7172// External function to trigger a report, writing to file.
7273// The 'name' parameter is in/out: an input filename is used
@@ -318,6 +319,7 @@ static void PrintVersionInformation(JSONWriter* writer) {
318319 }
319320
320321 PrintCpuInfo (writer);
322+ PrintNetworkInterfaceInfo (writer);
321323
322324 char host[UV_MAXHOSTNAMESIZE];
323325 size_t host_size = sizeof (host);
@@ -348,6 +350,57 @@ static void PrintCpuInfo(JSONWriter* writer) {
348350 }
349351}
350352
353+ static void PrintNetworkInterfaceInfo (JSONWriter* writer) {
354+ uv_interface_address_t * interfaces;
355+ char ip[INET6_ADDRSTRLEN];
356+ char netmask[INET6_ADDRSTRLEN];
357+ char mac[18 ];
358+ int count;
359+
360+ if (uv_interface_addresses (&interfaces, &count) == 0 ) {
361+ writer->json_arraystart (" networkInterfaces" );
362+
363+ for (int i = 0 ; i < count; i++) {
364+ writer->json_start ();
365+ writer->json_keyvalue (" name" , interfaces[i].name );
366+ writer->json_keyvalue (" internal" , !!interfaces[i].is_internal );
367+ snprintf (mac,
368+ sizeof (mac),
369+ " %02x:%02x:%02x:%02x:%02x:%02x" ,
370+ static_cast <unsigned char >(interfaces[i].phys_addr [0 ]),
371+ static_cast <unsigned char >(interfaces[i].phys_addr [1 ]),
372+ static_cast <unsigned char >(interfaces[i].phys_addr [2 ]),
373+ static_cast <unsigned char >(interfaces[i].phys_addr [3 ]),
374+ static_cast <unsigned char >(interfaces[i].phys_addr [4 ]),
375+ static_cast <unsigned char >(interfaces[i].phys_addr [5 ]));
376+ writer->json_keyvalue (" mac" , mac);
377+
378+ if (interfaces[i].address .address4 .sin_family == AF_INET) {
379+ uv_ip4_name (&interfaces[i].address .address4 , ip, sizeof (ip));
380+ uv_ip4_name (&interfaces[i].netmask .netmask4 , netmask, sizeof (netmask));
381+ writer->json_keyvalue (" address" , ip);
382+ writer->json_keyvalue (" netmask" , netmask);
383+ writer->json_keyvalue (" family" , " IPv4" );
384+ } else if (interfaces[i].address .address4 .sin_family == AF_INET6) {
385+ uv_ip6_name (&interfaces[i].address .address6 , ip, sizeof (ip));
386+ uv_ip6_name (&interfaces[i].netmask .netmask6 , netmask, sizeof (netmask));
387+ writer->json_keyvalue (" address" , ip);
388+ writer->json_keyvalue (" netmask" , netmask);
389+ writer->json_keyvalue (" family" , " IPv6" );
390+ writer->json_keyvalue (" scopeid" ,
391+ interfaces[i].address .address6 .sin6_scope_id );
392+ } else {
393+ writer->json_keyvalue (" family" , " unknown" );
394+ }
395+
396+ writer->json_end ();
397+ }
398+
399+ writer->json_arrayend ();
400+ uv_free_interface_addresses (interfaces, count);
401+ }
402+ }
403+
351404// Report the JavaScript stack.
352405static void PrintJavaScriptStack (JSONWriter* writer,
353406 Isolate* isolate,
0 commit comments