[OpenPower-Firmware] [PATCH 4/7] udhcpc: Store hardware address length and type

Walter Harms wharms at bfs.de
Fri Apr 17 17:30:46 AEST 2020


hi Daniel,
nice,work. I was just looking at the change an this caught my attention:

would it be possible just to use *client_config instead of sending the
all the elements individually ? IMHO that would reduce the stress for the stack
and improve readability.

      if (udhcp_read_interface(client_config.interface,
                         &client_config.ifindex,
                         NULL,
-                       client_config.client_mac)
+                       client_config.client_mac,
+                       &client_config.client_hlen,
+                       &client_config.client_htype)

btw: In busybox is a lot of talking about size, it would be nice when you
         could send a before/after size comparison.

jm2c,
 re,
  wh
________________________________________
Von: busybox <busybox-bounces at busybox.net> im Auftrag von Daniel M. Weeks <weeksd2 at rpi.edu>
Gesendet: Donnerstag, 16. April 2020 22:19:14
An: busybox at busybox.net
Cc: openpower-firmware at lists.ozlabs.org
Betreff: [PATCH 4/7] udhcpc: Store hardware address length and type

Store the hardware address length and type for constructing DHCP
requests on non-MAC interfaces.

Signed-off-by: Daniel M. Weeks <weeksd2 at rpi.edu>
---
 networking/udhcp/common.h    |  2 +-
 networking/udhcp/dhcpc.c     |  8 ++++++--
 networking/udhcp/dhcpd.c     |  4 +++-
 networking/udhcp/dhcprelay.c |  4 ++--
 networking/udhcp/socket.c    | 12 ++++++++++--
 5 files changed, 22 insertions(+), 8 deletions(-)

diff --git a/networking/udhcp/common.h b/networking/udhcp/common.h
index 72bdaff7b..6c7d3cc65 100644
--- a/networking/udhcp/common.h
+++ b/networking/udhcp/common.h
@@ -324,7 +324,7 @@ void udhcp_sp_setup(void) FAST_FUNC;
 void udhcp_sp_fd_set(struct pollfd *pfds, int extra_fd) FAST_FUNC;
 int udhcp_sp_read(void) FAST_FUNC;

-int udhcp_read_interface(const char *interface, int *ifindex, uint32_t *nip, uint8_t *mac) FAST_FUNC;
+int udhcp_read_interface(const char *interface, int *ifindex, uint32_t *nip, uint8_t *mac, uint8_t *hlen, uint8_t *htype) FAST_FUNC;

 int udhcp_listen_socket(/*uint32_t ip,*/ int port, const char *inf) FAST_FUNC;

diff --git a/networking/udhcp/dhcpc.c b/networking/udhcp/dhcpc.c
index c2805a009..41c1e70e5 100644
--- a/networking/udhcp/dhcpc.c
+++ b/networking/udhcp/dhcpc.c
@@ -1341,7 +1341,9 @@ int udhcpc_main(int argc UNUSED_PARAM, char **argv)
        if (udhcp_read_interface(client_config.interface,
                        &client_config.ifindex,
                        NULL,
-                       client_config.client_mac)
+                       client_config.client_mac,
+                       &client_config.client_hlen,
+                       &client_config.client_htype)
        ) {
                return 1;
        }
@@ -1446,7 +1448,9 @@ int udhcpc_main(int argc UNUSED_PARAM, char **argv)
                        if (udhcp_read_interface(client_config.interface,
                                        &client_config.ifindex,
                                        NULL,
-                                       client_config.client_mac)
+                                       client_config.client_mac,
+                                       &client_config.client_hlen,
+                                       &client_config.client_htype)
                        ) {
                                goto ret0; /* iface is gone? */
                        }
diff --git a/networking/udhcp/dhcpd.c b/networking/udhcp/dhcpd.c
index a8cd3f03b..e2bd84444 100644
--- a/networking/udhcp/dhcpd.c
+++ b/networking/udhcp/dhcpd.c
@@ -890,7 +890,9 @@ int udhcpd_main(int argc UNUSED_PARAM, char **argv)
        if (udhcp_read_interface(server_config.interface,
                        &server_config.ifindex,
                        (server_config.server_nip == 0 ? &server_config.server_nip : NULL),
-                       server_config.server_mac)
+                       server_config.server_mac,
+                       server_config.server_hlen,
+                       server_config.server_htype)
        ) {
                retval = 1;
                goto ret;
diff --git a/networking/udhcp/dhcprelay.c b/networking/udhcp/dhcprelay.c
index 86dcb1af0..68c9c670b 100644
--- a/networking/udhcp/dhcprelay.c
+++ b/networking/udhcp/dhcprelay.c
@@ -284,7 +284,7 @@ int dhcprelay_main(int argc UNUSED_PARAM, char **argv)
        max_socket = init_sockets(iface_list, num_sockets, fds);

        /* Get our IP on server_iface */
-       if (udhcp_read_interface(argv[2], NULL, &our_nip, NULL))
+       if (udhcp_read_interface(argv[2], NULL, &our_nip, NULL, NULL, NULL))
                return 1;

        /* Main loop */
@@ -364,7 +364,7 @@ int dhcprelay_main(int argc UNUSED_PARAM, char **argv)
 //   of the 'giaddr' field does not match one of the relay agent's
 //   directly-connected logical interfaces, the BOOTREPLY message MUST be
 //   silently discarded.
-                               if (udhcp_read_interface(iface_list[i], NULL, &dhcp_msg.gateway_nip, NULL)) {
+                               if (udhcp_read_interface(iface_list[i], NULL, &dhcp_msg.gateway_nip, NULL, NULL, NULL)) {
                                        /* Fall back to our IP on server iface */
 // this makes more sense!
                                        dhcp_msg.gateway_nip = our_nip;
diff --git a/networking/udhcp/socket.c b/networking/udhcp/socket.c
index 60ec0e3c0..b165d1b1c 100644
--- a/networking/udhcp/socket.c
+++ b/networking/udhcp/socket.c
@@ -27,7 +27,7 @@
 #include <ifaddrs.h>
 #include <netpacket/packet.h>

-int FAST_FUNC udhcp_read_interface(const char *interface, int *ifindex, uint32_t *nip, uint8_t *mac)
+int FAST_FUNC udhcp_read_interface(const char *interface, int *ifindex, uint32_t *nip, uint8_t *mac, uint8_t *hlen, uint8_t *htype)
 {
        struct ifaddrs *ifap, *ifa;
        struct sockaddr_ll *sll;
@@ -54,7 +54,15 @@ int FAST_FUNC udhcp_read_interface(const char *interface, int *ifindex, uint32_t
                        log1("IP %s", inet_ntoa(sip->sin_addr));
                }

-               retval = sll->sll_hatype;
+               if (hlen) {
+                       *hlen = sll->sll_halen;
+               }
+
+               if (htype) {
+                       *htype = sll->sll_hatype;
+               }
+
+               retval = 0;
        }
        freeifaddrs(ifap);

--
Daniel M. Weeks


--
Daniel M. Weeks
Lead HPC Developer
Center for Computational Innovations
Rensselaer Polytechnic Institute
Troy, NY 12180
518-276-4458
_______________________________________________
busybox mailing list
busybox at busybox.net
http://lists.busybox.net/mailman/listinfo/busybox


More information about the OpenPower-Firmware mailing list