summaryrefslogtreecommitdiffstats
path: root/freebsd/sbin/ifconfig
diff options
context:
space:
mode:
authorSebastian Huber <sebastian.huber@embedded-brains.de>2016-12-09 14:19:03 +0100
committerSebastian Huber <sebastian.huber@embedded-brains.de>2017-01-10 09:53:34 +0100
commit75b706fde4cbf82bcd41a1cec319778aa0f8eb2d (patch)
treeea39a351a1f6337b5a5dd6036314693adef5ffe6 /freebsd/sbin/ifconfig
parentVMSTAT(8): Port to RTEMS (diff)
downloadrtems-libbsd-75b706fde4cbf82bcd41a1cec319778aa0f8eb2d.tar.bz2
Update to FreeBSD head 2016-12-10
Git mirror commit 80c55f08a05ab3b26a73b226ccb56adc3122a55c.
Diffstat (limited to 'freebsd/sbin/ifconfig')
-rw-r--r--freebsd/sbin/ifconfig/af_inet.c2
-rw-r--r--freebsd/sbin/ifconfig/af_inet6.c2
-rw-r--r--freebsd/sbin/ifconfig/af_link.c25
3 files changed, 20 insertions, 9 deletions
diff --git a/freebsd/sbin/ifconfig/af_inet.c b/freebsd/sbin/ifconfig/af_inet.c
index d464df52..040da216 100644
--- a/freebsd/sbin/ifconfig/af_inet.c
+++ b/freebsd/sbin/ifconfig/af_inet.c
@@ -100,7 +100,7 @@ in_status(int s __unused, const struct ifaddrs *ifa)
sin = (struct sockaddr_in *)ifa->ifa_dstaddr;
if (sin == NULL)
sin = &null_sin;
- printf(" --> %s ", inet_ntoa(sin->sin_addr));
+ printf(" --> %s", inet_ntoa(sin->sin_addr));
}
sin = (struct sockaddr_in *)ifa->ifa_netmask;
diff --git a/freebsd/sbin/ifconfig/af_inet6.c b/freebsd/sbin/ifconfig/af_inet6.c
index f743ee8f..d3d58ade 100644
--- a/freebsd/sbin/ifconfig/af_inet6.c
+++ b/freebsd/sbin/ifconfig/af_inet6.c
@@ -250,7 +250,7 @@ in6_status(int s __unused, const struct ifaddrs *ifa)
if (error != 0)
inet_ntop(AF_INET6, &sin->sin6_addr, addr_buf,
sizeof(addr_buf));
- printf(" --> %s ", addr_buf);
+ printf(" --> %s", addr_buf);
}
}
diff --git a/freebsd/sbin/ifconfig/af_link.c b/freebsd/sbin/ifconfig/af_link.c
index 1c37496e..5fa2545d 100644
--- a/freebsd/sbin/ifconfig/af_link.c
+++ b/freebsd/sbin/ifconfig/af_link.c
@@ -102,13 +102,24 @@ link_getaddr(const char *addr, int which)
if (which != ADDR)
errx(1, "can't set link-level netmask or broadcast");
- if ((temp = malloc(strlen(addr) + 2)) == NULL)
- errx(1, "malloc failed");
- temp[0] = ':';
- strcpy(temp + 1, addr);
- sdl.sdl_len = sizeof(sdl);
- link_addr(temp, &sdl);
- free(temp);
+ if (!strcmp(addr, "random")) {
+ sdl.sdl_len = sizeof(sdl);
+ sdl.sdl_alen = ETHER_ADDR_LEN;
+ sdl.sdl_nlen = 0;
+ sdl.sdl_family = AF_LINK;
+ arc4random_buf(&sdl.sdl_data, ETHER_ADDR_LEN);
+ /* Non-multicast and claim it is locally administered. */
+ sdl.sdl_data[0] &= 0xfc;
+ sdl.sdl_data[0] |= 0x02;
+ } else {
+ if ((temp = malloc(strlen(addr) + 2)) == NULL)
+ errx(1, "malloc failed");
+ temp[0] = ':';
+ strcpy(temp + 1, addr);
+ sdl.sdl_len = sizeof(sdl);
+ link_addr(temp, &sdl);
+ free(temp);
+ }
if (sdl.sdl_alen > sizeof(sa->sa_data))
errx(1, "malformed link-level address");
sa->sa_family = AF_LINK;