X-Git-Url: https://git.saurik.com/apple/xnu.git/blobdiff_plain/39236c6e673c41db228275375ab7fdb0f837b292..a39ff7e25e19b3a8c3020042a3872ca9ec9659f1:/bsd/kern/netboot.c?ds=sidebyside diff --git a/bsd/kern/netboot.c b/bsd/kern/netboot.c index 22e6497d2..e8bdddb34 100644 --- a/bsd/kern/netboot.c +++ b/bsd/kern/netboot.c @@ -53,7 +53,6 @@ #include #include #include -#include #include #include @@ -603,6 +602,40 @@ find_interface(void) return (ifp); } +static const struct sockaddr_in blank_sin = { + sizeof(struct sockaddr_in), + AF_INET, + 0, + { 0 }, + { 0, 0, 0, 0, 0, 0, 0, 0 } +}; + +static int +inet_aifaddr(struct socket * so, const char * name, + const struct in_addr * addr, + const struct in_addr * mask, + const struct in_addr * broadcast) +{ + struct ifaliasreq ifra; + + bzero(&ifra, sizeof(ifra)); + strlcpy(ifra.ifra_name, name, sizeof(ifra.ifra_name)); + if (addr) { + *((struct sockaddr_in *)(void *)&ifra.ifra_addr) = blank_sin; + ((struct sockaddr_in *)(void *)&ifra.ifra_addr)->sin_addr = *addr; + } + if (mask) { + *((struct sockaddr_in *)(void *)&ifra.ifra_mask) = blank_sin; + ((struct sockaddr_in *)(void *)&ifra.ifra_mask)->sin_addr = *mask; + } + if (broadcast) { + *((struct sockaddr_in *)(void *)&ifra.ifra_broadaddr) = blank_sin; + ((struct sockaddr_in *)(void *)&ifra.ifra_broadaddr)->sin_addr = *broadcast; + } + return (ifioctl(so, SIOCAIFADDR, (caddr_t)&ifra, current_proc())); +} + + int netboot_mountroot(void) { @@ -642,12 +675,8 @@ netboot_mountroot(void) /* grab information from the registry */ if (get_ip_parameters(&iaddr, &netmask, &router) == FALSE) { - /* use DHCP to retrieve IP address, netmask and router */ - error = dhcp(ifp, &iaddr, 64, &netmask, &router, procp); - if (error) { - printf("netboot: DHCP failed %d\n", error); - goto failed; - } + printf("netboot: can't retrieve IP parameters\n"); + goto failed; } printf("netboot: IP address " IP_FORMAT, IP_LIST(&iaddr)); if (netmask.s_addr) {