mirror of
https://gitlab.freedesktop.org/NetworkManager/NetworkManager.git
synced 2026-05-05 08:48:07 +02:00
dhcp: introduce terminated dhcp-state
When the client terminates, we really don't care if it exited cleanly, with an error or killed by a signal. We expect the client to never exit and so all these situations are equally bad for us. Introduce a new TERMINATED state instead of reusing existing FAIL or DONE states, which are set when receiving particular events from the client.
This commit is contained in:
parent
81aa1a3bb3
commit
0a25b90813
3 changed files with 12 additions and 14 deletions
|
|
@ -7446,6 +7446,7 @@ dhcp4_state_changed (NMDhcpClient *client,
|
|||
/* fall through */
|
||||
case NM_DHCP_STATE_DONE:
|
||||
case NM_DHCP_STATE_FAIL:
|
||||
case NM_DHCP_STATE_TERMINATED:
|
||||
dhcp4_fail (self);
|
||||
break;
|
||||
default:
|
||||
|
|
@ -8203,7 +8204,7 @@ dhcp6_state_changed (NMDhcpClient *client,
|
|||
if (priv->ip6_state != IP_CONF)
|
||||
dhcp6_fail (self);
|
||||
break;
|
||||
case NM_DHCP_STATE_DONE:
|
||||
case NM_DHCP_STATE_TERMINATED:
|
||||
/* In IPv6 info-only mode, the client doesn't handle leases so it
|
||||
* may exit right after getting a response from the server. That's
|
||||
* normal. In that case we just ignore the exit.
|
||||
|
|
@ -8211,6 +8212,7 @@ dhcp6_state_changed (NMDhcpClient *client,
|
|||
if (priv->dhcp6.mode == NM_NDISC_DHCP_LEVEL_OTHERCONF)
|
||||
break;
|
||||
/* fall through */
|
||||
case NM_DHCP_STATE_DONE:
|
||||
case NM_DHCP_STATE_FAIL:
|
||||
dhcp6_fail (self);
|
||||
break;
|
||||
|
|
|
|||
|
|
@ -288,12 +288,13 @@ nm_dhcp_client_get_use_fqdn (NMDhcpClient *self)
|
|||
/*****************************************************************************/
|
||||
|
||||
static const char *state_table[NM_DHCP_STATE_MAX + 1] = {
|
||||
[NM_DHCP_STATE_UNKNOWN] = "unknown",
|
||||
[NM_DHCP_STATE_BOUND] = "bound",
|
||||
[NM_DHCP_STATE_TIMEOUT] = "timeout",
|
||||
[NM_DHCP_STATE_EXPIRE] = "expire",
|
||||
[NM_DHCP_STATE_DONE] = "done",
|
||||
[NM_DHCP_STATE_FAIL] = "fail",
|
||||
[NM_DHCP_STATE_UNKNOWN] = "unknown",
|
||||
[NM_DHCP_STATE_BOUND] = "bound",
|
||||
[NM_DHCP_STATE_TIMEOUT] = "timeout",
|
||||
[NM_DHCP_STATE_EXPIRE] = "expire",
|
||||
[NM_DHCP_STATE_DONE] = "done",
|
||||
[NM_DHCP_STATE_FAIL] = "fail",
|
||||
[NM_DHCP_STATE_TERMINATED] = "terminated",
|
||||
};
|
||||
|
||||
static const char *
|
||||
|
|
@ -449,7 +450,6 @@ daemon_watch_cb (GPid pid, int status, gpointer user_data)
|
|||
{
|
||||
NMDhcpClient *self = NM_DHCP_CLIENT (user_data);
|
||||
NMDhcpClientPrivate *priv = NM_DHCP_CLIENT_GET_PRIVATE (self);
|
||||
NMDhcpState new_state;
|
||||
|
||||
g_return_if_fail (priv->watch_id);
|
||||
priv->watch_id = 0;
|
||||
|
|
@ -465,14 +465,9 @@ daemon_watch_cb (GPid pid, int status, gpointer user_data)
|
|||
else
|
||||
_LOGW ("client died abnormally");
|
||||
|
||||
if (!WIFEXITED (status))
|
||||
new_state = NM_DHCP_STATE_FAIL;
|
||||
else
|
||||
new_state = NM_DHCP_STATE_DONE;
|
||||
|
||||
priv->pid = -1;
|
||||
|
||||
nm_dhcp_client_set_state (self, new_state, NULL, NULL);
|
||||
nm_dhcp_client_set_state (self, NM_DHCP_STATE_TERMINATED, NULL, NULL);
|
||||
}
|
||||
|
||||
void
|
||||
|
|
|
|||
|
|
@ -56,6 +56,7 @@ typedef enum {
|
|||
NM_DHCP_STATE_DONE, /* client quit or stopped */
|
||||
NM_DHCP_STATE_EXPIRE, /* lease expired or NAKed */
|
||||
NM_DHCP_STATE_FAIL, /* failed for some reason */
|
||||
NM_DHCP_STATE_TERMINATED, /* client is no longer running */
|
||||
__NM_DHCP_STATE_MAX,
|
||||
NM_DHCP_STATE_MAX = __NM_DHCP_STATE_MAX - 1,
|
||||
} NMDhcpState;
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue