On Wed, Nov 13, 2013 at 11:22:56PM +0200, Patrik Flykt wrote: > Print out the event received and possibly also IP related data. > --- > src/dhcp/dhcp-example-client.c | 53 > ++++++++++++++++++++++++++++++++++++++++ > 1 file changed, 53 insertions(+) > > diff --git a/src/dhcp/dhcp-example-client.c b/src/dhcp/dhcp-example-client.c > index afb7102..3635bd8 100644 > --- a/src/dhcp/dhcp-example-client.c > +++ b/src/dhcp/dhcp-example-client.c > @@ -24,6 +24,9 @@ > #include <unistd.h> > #include <net/ethernet.h> > #include <errno.h> > +#include <sys/socket.h> > +#include <netinet/in.h> > +#include <arpa/inet.h> > > #include "client.h" > > @@ -79,6 +82,52 @@ static int get_index(char *ifname) > return ifr.ifr_ifindex; > } > > +static const char *print_event(int event) Can this be called event_to_string?
> +{ > + if (event < 0) > + return strerror(-event); > + > + switch (event) { > + case DHCP_EVENT_STOP: > + return "Stopped"; > + case DHCP_EVENT_NAK: > + return "DHCP NAK"; > + case DHCP_EVENT_IP_ACQUIRE: > + return "DHCP address acquired"; > + case DHCP_EVENT_IP_CHANGE: > + return "DHCP address changed"; > + case DHCP_EVENT_EXPIRED: > + return "DHCP lease expired"; > + default: > + break; > + } > + > + return "unknown"; > +} > + > +static void print_state(DHCPClient *client, int event, void *userdata) > +{ > + sd_event *e = userdata; > + struct in_addr addr; > + > + if (event < 0) { > + printf("Error %d %s\n", event, print_event(event)); > + sd_event_unref(e); > + return; > + } So e is unrefed only sometimes... This seems confusing. > + > + printf("Event %s\n", print_event(event)); > + > + if (dhcp_client_get_address(client, &addr) >= 0) > + printf("Address %s\n", inet_ntoa(addr)); > + > + if (dhcp_client_get_netmask(client, &addr) >= 0) > + printf("Netmask %s\n", inet_ntoa(addr)); > + > + if (dhcp_client_get_router(client, &addr) >= 0) > + printf("Default router %s\n", inet_ntoa(addr)); > +} > + > int main(int argc, char **argv) > { > DHCPClient *client; > @@ -109,9 +158,13 @@ int main(int argc, char **argv) > printf("Interface %s index %d\n", argv[1], index); > dhcp_client_set_index(client, index); > dhcp_client_set_mac(client, &mac); > + dhcp_client_set_callback(client, print_state, &event); > > dhcp_client_start(client); > sd_event_loop(event); > > + dhcp_client_free(client); > + printf("Exit\n"); > + > return 0; > } Hm, since this is just example code, then probably it doesn't matter that much :) Zbyszek _______________________________________________ systemd-devel mailing list systemd-devel@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/systemd-devel