From 2a31c8fcd974862023a4541fef7cf96a412598cd Mon Sep 17 00:00:00 2001 From: Aaron <10217842+byteduck@users.noreply.github.com> Date: Wed, 20 Mar 2024 19:11:24 -0700 Subject: [PATCH] dhcpclient: Start on boot --- base/etc/init/services/dhcpclient.service | 4 ++++ services/dhcpclient/Client.cpp | 9 +++++++++ 2 files changed, 13 insertions(+) create mode 100644 base/etc/init/services/dhcpclient.service diff --git a/base/etc/init/services/dhcpclient.service b/base/etc/init/services/dhcpclient.service new file mode 100644 index 00000000..5722287e --- /dev/null +++ b/base/etc/init/services/dhcpclient.service @@ -0,0 +1,4 @@ +[service] +name=DHCP Client +exec=dhcpclient +after=boot \ No newline at end of file diff --git a/services/dhcpclient/Client.cpp b/services/dhcpclient/Client.cpp index 4284bf4b..5d4639c6 100644 --- a/services/dhcpclient/Client.cpp +++ b/services/dhcpclient/Client.cpp @@ -59,6 +59,9 @@ Client::Client(int socket, std::vector interfaces): } void Client::loop() { + if (m_interfaces.empty()) + return; + for (auto& interface : m_interfaces) discover(interface); @@ -90,6 +93,7 @@ void Client::loop() { switch (type.value()) { case Ack: res = do_ack(buf); + return; // TODO: For now, we don't renew leases or anything so might as well exit break; case Offer: @@ -186,6 +190,11 @@ Duck::Result Client::setup_interface(const Client::Interface& interface, const I ifreq req; strncpy(req.ifr_name, interface.name.c_str(), IFNAMSIZ); + if (gateway.has_value()) + Duck::Log::infof("Setting up {} as {} with subnet {} and gateway {}", interface.name, addr, subnet, gateway.value()); + else + Duck::Log::infof("Setting up {} as {} with subnet {}", interface.name, addr, subnet); + // Set IP *((sockaddr_in*) &req.ifr_addr) = addr.as_sockaddr(0); if (ioctl(sockid, SIOCSIFADDR, &req) < 0) {