Import dhcpcd-5.2.10 with the following change:
* -r, --request <address> now works again
This commit is contained in:
parent
6fd00c3f62
commit
0524c4d0bb
|
@ -4,4 +4,3 @@
|
|||
#define LIBEXECDIR "/libexec"
|
||||
#define DBDIR "/var/db"
|
||||
#define RUNDIR "/var/run"
|
||||
#include "compat/getline.h"
|
||||
|
|
|
@ -28,7 +28,7 @@
|
|||
#define CONFIG_H
|
||||
|
||||
#define PACKAGE "dhcpcd"
|
||||
#define VERSION "5.2.9"
|
||||
#define VERSION "5.2.10"
|
||||
|
||||
#ifndef CONFIG
|
||||
# define CONFIG SYSCONFDIR "/" PACKAGE ".conf"
|
||||
|
|
|
@ -892,7 +892,6 @@ make_message(struct dhcp_message **message,
|
|||
|
||||
if (lease->addr.s_addr && lease->cookie == htonl(MAGIC_COOKIE)) {
|
||||
if (type == DHCP_DECLINE ||
|
||||
type == DHCP_DISCOVER ||
|
||||
(type == DHCP_REQUEST &&
|
||||
lease->addr.s_addr != iface->addr.s_addr))
|
||||
{
|
||||
|
@ -915,6 +914,9 @@ make_message(struct dhcp_message **message,
|
|||
p += len;
|
||||
}
|
||||
|
||||
if (type == DHCP_DISCOVER && ifo->options & DHCPCD_REQUEST)
|
||||
PUTADDR(DHO_IPADDRESS, ifo->req_addr);
|
||||
|
||||
if (type == DHCP_DISCOVER ||
|
||||
type == DHCP_INFORM ||
|
||||
type == DHCP_REQUEST)
|
||||
|
|
|
@ -1107,9 +1107,6 @@ start_interface(void *arg)
|
|||
return;
|
||||
}
|
||||
|
||||
/* We don't want to read the old lease if we NAK an old test */
|
||||
nolease = iface->state->offer && options & DHCPCD_TEST;
|
||||
|
||||
iface->start_uptime = uptime();
|
||||
free(iface->state->offer);
|
||||
iface->state->offer = NULL;
|
||||
|
@ -1134,21 +1131,9 @@ start_interface(void *arg)
|
|||
delete_timeout(NULL, iface);
|
||||
return;
|
||||
}
|
||||
if (ifo->req_addr.s_addr) {
|
||||
iface->state->offer =
|
||||
dhcp_message_new(&ifo->req_addr, &ifo->req_mask);
|
||||
if (ifo->options & DHCPCD_REQUEST)
|
||||
ifo->req_addr.s_addr = 0;
|
||||
else {
|
||||
iface->state->reason = "STATIC";
|
||||
iface->state->new = iface->state->offer;
|
||||
iface->state->offer = NULL;
|
||||
get_lease(&iface->state->lease, iface->state->new);
|
||||
configure(iface);
|
||||
start_inform(iface);
|
||||
return;
|
||||
}
|
||||
} else if (!nolease)
|
||||
/* We don't want to read the old lease if we NAK an old test */
|
||||
nolease = iface->state->offer && options & DHCPCD_TEST;
|
||||
if (!nolease)
|
||||
iface->state->offer = read_lease(iface);
|
||||
if (iface->state->offer) {
|
||||
get_lease(&iface->state->lease, iface->state->offer);
|
||||
|
@ -1207,6 +1192,10 @@ init_state(struct interface *iface, int argc, char **argv)
|
|||
configure_interface(iface, argc, argv);
|
||||
if (!(options & DHCPCD_TEST))
|
||||
run_script(iface);
|
||||
/* We need to drop the leasefile so that start_interface
|
||||
* doesn't load it. */
|
||||
if (ifs->options->options & DHCPCD_REQUEST)
|
||||
unlink(iface->leasefile);
|
||||
|
||||
if (ifs->options->options & DHCPCD_LINK) {
|
||||
switch (carrier_status(iface)) {
|
||||
|
|
|
@ -39,6 +39,8 @@
|
|||
#include <netinet/in.h>
|
||||
#ifdef __DragonFly__
|
||||
# include <netproto/802_11/ieee80211_ioctl.h>
|
||||
#elif __APPLE__
|
||||
/* FIXME: Add apple includes so we can work out SSID */
|
||||
#else
|
||||
# include <net80211/ieee80211_ioctl.h>
|
||||
#endif
|
||||
|
@ -342,6 +344,7 @@ manage_link(int fd)
|
|||
for (p = link_buf; p < e; p += rtm->rtm_msglen) {
|
||||
rtm = (struct rt_msghdr *)(void *)p;
|
||||
switch(rtm->rtm_type) {
|
||||
#ifdef RTM_IFANNOUNCE
|
||||
case RTM_IFANNOUNCE:
|
||||
ifan = (struct if_announcemsghdr *)(void *)p;
|
||||
switch(ifan->ifan_what) {
|
||||
|
@ -353,6 +356,7 @@ manage_link(int fd)
|
|||
break;
|
||||
}
|
||||
break;
|
||||
#endif
|
||||
case RTM_IFINFO:
|
||||
ifm = (struct if_msghdr *)(void *)p;
|
||||
memset(ifname, 0, sizeof(ifname));
|
||||
|
|
|
@ -420,14 +420,12 @@ parse_option(struct if_options *ifo, int opt, const char *arg)
|
|||
ifo->options |= DHCPCD_QUIET;
|
||||
break;
|
||||
case 'r':
|
||||
ifo->options |= DHCPCD_REQUEST;
|
||||
if (parse_addr(&ifo->req_addr, NULL, arg) != 0)
|
||||
return -1;
|
||||
ifo->options |= DHCPCD_REQUEST;
|
||||
ifo->req_mask.s_addr = 0;
|
||||
break;
|
||||
case 's':
|
||||
ifo->options |= DHCPCD_INFORM | DHCPCD_PERSISTENT;
|
||||
ifo->options &= ~(DHCPCD_ARP | DHCPCD_STATIC);
|
||||
if (arg && *arg != '\0') {
|
||||
if (parse_addr(&ifo->req_addr, &ifo->req_mask,
|
||||
arg) != 0)
|
||||
|
@ -436,6 +434,8 @@ parse_option(struct if_options *ifo, int opt, const char *arg)
|
|||
ifo->req_addr.s_addr = 0;
|
||||
ifo->req_mask.s_addr = 0;
|
||||
}
|
||||
ifo->options |= DHCPCD_INFORM | DHCPCD_PERSISTENT;
|
||||
ifo->options &= ~(DHCPCD_ARP | DHCPCD_STATIC);
|
||||
break;
|
||||
case 't':
|
||||
ifo->timeout = atoint(arg);
|
||||
|
|
|
@ -31,6 +31,10 @@
|
|||
|
||||
#include "platform.h"
|
||||
|
||||
#ifndef SYS_NMLN /* OSX */
|
||||
# define SYS_NMLN 256
|
||||
#endif
|
||||
|
||||
static char march[SYS_NMLN];
|
||||
|
||||
char *
|
||||
|
|
Loading…
Reference in New Issue