os: Include netmask in os.networkInterfaces()
re #3765 and #5432 fixes #4743
This commit is contained in:
parent
fbf4641462
commit
8a407f58b9
@ -127,17 +127,24 @@ Example inspection of os.cpus:
|
|||||||
|
|
||||||
Get a list of network interfaces:
|
Get a list of network interfaces:
|
||||||
|
|
||||||
{ lo0:
|
{ lo0:
|
||||||
[ { address: '::1', family: 'IPv6', internal: true },
|
[ { address: 'fe80::1', netmask: 'ffff:ffff:ffff:ffff::',
|
||||||
{ address: 'fe80::1', family: 'IPv6', internal: true },
|
family: 'IPv6', internal: true },
|
||||||
{ address: '127.0.0.1', family: 'IPv4', internal: true } ],
|
{ address: '127.0.0.1', netmask: '255.0.0.0',
|
||||||
en1:
|
family: 'IPv4', internal: true },
|
||||||
[ { address: 'fe80::cabc:c8ff:feef:f996', family: 'IPv6',
|
{ address: '::1', netmask: 'ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff',
|
||||||
internal: false },
|
family: 'IPv6', internal: true } ],
|
||||||
{ address: '10.0.1.123', family: 'IPv4', internal: false } ],
|
en1:
|
||||||
vmnet1: [ { address: '10.99.99.254', family: 'IPv4', internal: false } ],
|
[ { address: 'fe80::226:8ff:fedc:1dd', netmask: 'ffff:ffff:ffff:ffff::',
|
||||||
vmnet8: [ { address: '10.88.88.1', family: 'IPv4', internal: false } ],
|
family: 'IPv6', internal: false },
|
||||||
ppp0: [ { address: '10.2.0.231', family: 'IPv4', internal: false } ] }
|
{ address: '10.0.1.6', netmask: '255.255.255.0',
|
||||||
|
family: 'IPv4', internal: false } ],
|
||||||
|
vmnet1:
|
||||||
|
[ { address: '192.168.252.1', netmask: '255.255.255.0',
|
||||||
|
family: 'IPv4', internal: false } ],
|
||||||
|
vmnet8:
|
||||||
|
[ { address: '192.168.207.1', netmask: '255.255.255.0',
|
||||||
|
family: 'IPv4', internal: false } ] }
|
||||||
|
|
||||||
## os.EOL
|
## os.EOL
|
||||||
|
|
||||||
|
@ -204,6 +204,7 @@ static Handle<Value> GetInterfaceAddresses(const Arguments& args) {
|
|||||||
uv_interface_address_t* interfaces;
|
uv_interface_address_t* interfaces;
|
||||||
int count, i;
|
int count, i;
|
||||||
char ip[INET6_ADDRSTRLEN];
|
char ip[INET6_ADDRSTRLEN];
|
||||||
|
char netmask[INET6_ADDRSTRLEN];
|
||||||
Local<Object> ret, o;
|
Local<Object> ret, o;
|
||||||
Local<String> name, family;
|
Local<String> name, family;
|
||||||
Local<Array> ifarr;
|
Local<Array> ifarr;
|
||||||
@ -226,9 +227,11 @@ static Handle<Value> GetInterfaceAddresses(const Arguments& args) {
|
|||||||
|
|
||||||
if (interfaces[i].address.address4.sin_family == AF_INET) {
|
if (interfaces[i].address.address4.sin_family == AF_INET) {
|
||||||
uv_ip4_name(&interfaces[i].address.address4,ip, sizeof(ip));
|
uv_ip4_name(&interfaces[i].address.address4,ip, sizeof(ip));
|
||||||
|
uv_ip4_name(&interfaces[i].netmask.netmask4, netmask, sizeof(netmask));
|
||||||
family = String::New("IPv4");
|
family = String::New("IPv4");
|
||||||
} else if (interfaces[i].address.address4.sin_family == AF_INET6) {
|
} else if (interfaces[i].address.address4.sin_family == AF_INET6) {
|
||||||
uv_ip6_name(&interfaces[i].address.address6, ip, sizeof(ip));
|
uv_ip6_name(&interfaces[i].address.address6, ip, sizeof(ip));
|
||||||
|
uv_ip6_name(&interfaces[i].netmask.netmask6, netmask, sizeof(netmask));
|
||||||
family = String::New("IPv6");
|
family = String::New("IPv6");
|
||||||
} else {
|
} else {
|
||||||
strncpy(ip, "<unknown sa family>", INET6_ADDRSTRLEN);
|
strncpy(ip, "<unknown sa family>", INET6_ADDRSTRLEN);
|
||||||
@ -237,6 +240,7 @@ static Handle<Value> GetInterfaceAddresses(const Arguments& args) {
|
|||||||
|
|
||||||
o = Object::New();
|
o = Object::New();
|
||||||
o->Set(String::New("address"), String::New(ip));
|
o->Set(String::New("address"), String::New(ip));
|
||||||
|
o->Set(String::New("netmask"), String::New(netmask));
|
||||||
o->Set(String::New("family"), family);
|
o->Set(String::New("family"), family);
|
||||||
|
|
||||||
const bool internal = interfaces[i].is_internal;
|
const bool internal = interfaces[i].is_internal;
|
||||||
|
@ -85,13 +85,18 @@ switch (platform) {
|
|||||||
case 'linux':
|
case 'linux':
|
||||||
var filter = function(e) { return e.address == '127.0.0.1'; };
|
var filter = function(e) { return e.address == '127.0.0.1'; };
|
||||||
var actual = interfaces.lo.filter(filter);
|
var actual = interfaces.lo.filter(filter);
|
||||||
var expected = [{ address: '127.0.0.1', family: 'IPv4', internal: true }];
|
var expected = [{ address: '127.0.0.1', netmask: '255.0.0.0',
|
||||||
|
family: 'IPv4', internal: true }];
|
||||||
assert.deepEqual(actual, expected);
|
assert.deepEqual(actual, expected);
|
||||||
break;
|
break;
|
||||||
case 'win32':
|
case 'win32':
|
||||||
var filter = function(e) { return e.address == '127.0.0.1'; };
|
var filter = function(e) { return e.address == '127.0.0.1'; };
|
||||||
var actual = interfaces['Loopback Pseudo-Interface 1'].filter(filter);
|
var actual = interfaces['Loopback Pseudo-Interface 1'].filter(filter);
|
||||||
var expected = [{ address: '127.0.0.1', family: 'IPv4', internal: true }];
|
// NOTE: Windows does not set a prefix or netmask on 127.0.0.1, so we
|
||||||
|
// default to /32 here. We could put in a special case to force
|
||||||
|
// to /8 if desired.
|
||||||
|
var expected = [{ address: '127.0.0.1', netmask: '255.255.255.255',
|
||||||
|
family: 'IPv4', internal: true }];
|
||||||
assert.deepEqual(actual, expected);
|
assert.deepEqual(actual, expected);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user