On Mon, Jan 20, 2014 at 9:58 AM, Umut Tezduyar Lindskog <[email protected]> wrote: > --- > src/libsystemd/sd-dhcp-client.c | 147 > ++++++++++----------------------------- > 1 files changed, 36 insertions(+), 111 deletions(-) > > diff --git a/src/libsystemd/sd-dhcp-client.c b/src/libsystemd/sd-dhcp-client.c > index a057852..3b7b9f4 100644 > --- a/src/libsystemd/sd-dhcp-client.c > +++ b/src/libsystemd/sd-dhcp-client.c > @@ -33,6 +33,15 @@ > > #define DHCP_CLIENT_MIN_OPTIONS_SIZE 312 > > +#define client_state_machine_check(s, r) \ > + do { \ > + if (s != DHCP_STATE_BOUND && \ > + s != DHCP_STATE_RENEWING && \ > + s != DHCP_STATE_REBINDING) { \ > + return (r); \ > + } \ > + } while (false) > + > struct DHCPLease { > uint32_t t1; > uint32_t t2; > @@ -166,21 +175,9 @@ int sd_dhcp_client_get_address(sd_dhcp_client *client, > struct in_addr *addr) { > assert_return(client, -EINVAL); > assert_return(addr, -EINVAL); > > - switch (client->state) { > - case DHCP_STATE_INIT: > - case DHCP_STATE_SELECTING: > - case DHCP_STATE_INIT_REBOOT: > - case DHCP_STATE_REBOOTING: > - case DHCP_STATE_REQUESTING: > - return -EADDRNOTAVAIL; > - > - case DHCP_STATE_BOUND: > - case DHCP_STATE_RENEWING: > - case DHCP_STATE_REBINDING: > - addr->s_addr = client->lease->address; > + client_state_machine_check (client->state, -EADDRNOTAVAIL); > > - break; > - } > + addr->s_addr = client->lease->address; > > return 0; > } > @@ -189,24 +186,12 @@ int sd_dhcp_client_get_mtu(sd_dhcp_client *client, > uint16_t *mtu) { > assert_return(client, -EINVAL); > assert_return(mtu, -EINVAL); > > - switch (client->state) { > - case DHCP_STATE_INIT: > - case DHCP_STATE_SELECTING: > - case DHCP_STATE_INIT_REBOOT: > - case DHCP_STATE_REBOOTING: > - case DHCP_STATE_REQUESTING: > - return -EADDRNOTAVAIL; > - > - case DHCP_STATE_BOUND: > - case DHCP_STATE_RENEWING: > - case DHCP_STATE_REBINDING: > - if (client->lease->mtu) > - *mtu = client->lease->mtu; > - else > - return -ENOENT; > + client_state_machine_check (client->state, -EADDRNOTAVAIL); > > - break; > - } > + if (client->lease->mtu) > + *mtu = client->lease->mtu; > + else > + return -ENOENT; > > return 0; > } > @@ -216,25 +201,13 @@ int sd_dhcp_client_get_dns(sd_dhcp_client *client, > struct in_addr **addr, size_t > assert_return(addr, -EINVAL); > assert_return(addr_size, -EINVAL); > > - switch (client->state) { > - case DHCP_STATE_INIT: > - case DHCP_STATE_SELECTING: > - case DHCP_STATE_INIT_REBOOT: > - case DHCP_STATE_REBOOTING: > - case DHCP_STATE_REQUESTING: > - return -EADDRNOTAVAIL; > - > - case DHCP_STATE_BOUND: > - case DHCP_STATE_RENEWING: > - case DHCP_STATE_REBINDING: > - if (client->lease->dns_size) { > - *addr_size = client->lease->dns_size; > - *addr = client->lease->dns; > - } else > - return -ENOENT; > + client_state_machine_check (client->state, -EADDRNOTAVAIL); > > - break; > - } > + if (client->lease->dns_size) { > + *addr_size = client->lease->dns_size; > + *addr = client->lease->dns; > + } else > + return -ENOENT; > > return 0; > } > @@ -243,24 +216,12 @@ int sd_dhcp_client_get_domainname(sd_dhcp_client > *client, const char **domainnam > assert_return(client, -EINVAL); > assert_return(domainname, -EINVAL); > > - switch (client->state) { > - case DHCP_STATE_INIT: > - case DHCP_STATE_SELECTING: > - case DHCP_STATE_INIT_REBOOT: > - case DHCP_STATE_REBOOTING: > - case DHCP_STATE_REQUESTING: > - return -EADDRNOTAVAIL; > - > - case DHCP_STATE_BOUND: > - case DHCP_STATE_RENEWING: > - case DHCP_STATE_REBINDING: > - if (client->lease->domainname) > - *domainname = client->lease->domainname; > - else > - return -ENOENT; > + client_state_machine_check (client->state, -EADDRNOTAVAIL); > > - break; > - } > + if (client->lease->domainname) > + *domainname = client->lease->domainname; > + else > + return -ENOENT; > > return 0; > } > @@ -269,24 +230,12 @@ int sd_dhcp_client_get_hostname(sd_dhcp_client *client, > const char **hostname) { > assert_return(client, -EINVAL); > assert_return(hostname, -EINVAL); > > - switch (client->state) { > - case DHCP_STATE_INIT: > - case DHCP_STATE_SELECTING: > - case DHCP_STATE_INIT_REBOOT: > - case DHCP_STATE_REBOOTING: > - case DHCP_STATE_REQUESTING: > - return -EADDRNOTAVAIL; > - > - case DHCP_STATE_BOUND: > - case DHCP_STATE_RENEWING: > - case DHCP_STATE_REBINDING: > - if (client->lease->hostname) > - *hostname = client->lease->hostname; > - else > - return -ENOENT; > + client_state_machine_check (client->state, -EADDRNOTAVAIL); > > - break; > - } > + if (client->lease->hostname) > + *hostname = client->lease->hostname; > + else > + return -ENOENT; > > return 0; > } > @@ -310,21 +259,9 @@ int sd_dhcp_client_get_router(sd_dhcp_client *client, > struct in_addr *addr) { > assert_return(client, -EINVAL); > assert_return(addr, -EINVAL); > > - switch (client->state) { > - case DHCP_STATE_INIT: > - case DHCP_STATE_SELECTING: > - case DHCP_STATE_INIT_REBOOT: > - case DHCP_STATE_REBOOTING: > - case DHCP_STATE_REQUESTING: > - return -EADDRNOTAVAIL; > - > - case DHCP_STATE_BOUND: > - case DHCP_STATE_RENEWING: > - case DHCP_STATE_REBINDING: > - addr->s_addr = client->lease->router; > + client_state_machine_check (client->state, -EADDRNOTAVAIL); > > - break; > - } > + addr->s_addr = client->lease->router; > > return 0; > } > @@ -333,21 +270,9 @@ int sd_dhcp_client_get_netmask(sd_dhcp_client *client, > struct in_addr *addr) { > assert_return(client, -EINVAL); > assert_return(addr, -EINVAL); > > - switch (client->state) { > - case DHCP_STATE_INIT: > - case DHCP_STATE_SELECTING: > - case DHCP_STATE_INIT_REBOOT: > - case DHCP_STATE_REBOOTING: > - case DHCP_STATE_REQUESTING: > - return -EADDRNOTAVAIL; > - > - case DHCP_STATE_BOUND: > - case DHCP_STATE_RENEWING: > - case DHCP_STATE_REBINDING: > - addr->s_addr = client->lease->subnet_mask; > + client_state_machine_check (client->state, -EADDRNOTAVAIL); > > - break; > - } > + addr->s_addr = client->lease->subnet_mask; > > return 0; > } > -- > 1.7.2.5 > > _______________________________________________ > systemd-devel mailing list > [email protected] > http://lists.freedesktop.org/mailman/listinfo/systemd-devel
Applied. Thanks! Tom _______________________________________________ systemd-devel mailing list [email protected] http://lists.freedesktop.org/mailman/listinfo/systemd-devel
