@@ -67,6 +67,7 @@ static void PrintLoadedLibraries(JSONWriter* writer);
67
67
static void PrintComponentVersions (JSONWriter* writer);
68
68
static void PrintRelease (JSONWriter* writer);
69
69
static void PrintCpuInfo (JSONWriter* writer);
70
+ static void PrintNetworkInterfaceInfo (JSONWriter* writer);
70
71
71
72
// External function to trigger a report, writing to file.
72
73
// The 'name' parameter is in/out: an input filename is used
@@ -318,6 +319,7 @@ static void PrintVersionInformation(JSONWriter* writer) {
318
319
}
319
320
320
321
PrintCpuInfo (writer);
322
+ PrintNetworkInterfaceInfo (writer);
321
323
322
324
char host[UV_MAXHOSTNAMESIZE];
323
325
size_t host_size = sizeof (host);
@@ -348,6 +350,57 @@ static void PrintCpuInfo(JSONWriter* writer) {
348
350
}
349
351
}
350
352
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
+
351
404
// Report the JavaScript stack.
352
405
static void PrintJavaScriptStack (JSONWriter* writer,
353
406
Isolate* isolate,
0 commit comments