[systemd-devel] [PATCH] sd-dhcp-client: support non-Ethernet hardware addresses
Dan Williams
dcbw at redhat.com
Fri Oct 3 08:04:51 PDT 2014
On Fri, 2014-10-03 at 16:10 +0300, Patrik Flykt wrote:
> On Fri, 2014-10-03 at 15:48 +0300, Patrik Flykt wrote:
> > On Fri, 2014-09-26 at 15:15 -0500, Dan Williams wrote:
> > > /* RFC2132 section 4.1.1:
> > > The client MUST include its hardware address in the ’chaddr’ field, if
> > > - necessary for delivery of DHCP reply messages.
> > > + necessary for delivery of DHCP reply messages. Non-Ethernet
> > > + interfaces will leave 'chaddr' empty and use the client identifier
> > > + instead (eg, RFC 4390 section 2.1).
> > > */
> > > - memcpy(&packet->dhcp.chaddr, &client->client_id.mac_addr, ETH_ALEN);
> > > + if (client->mac_addr_len == ETH_ALEN)
> > > + memcpy(&packet->dhcp.chaddr, &client->mac_addr, ETH_ALEN);
> >
> > Sorry about the late review, but shouldn't this be more generic if
> > written:
> > if (client->mac_addr_len)
> > memcpy(&packet->dhcp.chaddr, &client->mac_addr, client->mac_addr_len);
> >
> > With that, all cases are covered. Which, AFAIK, are none in addition to
> > ethernet. An assert() should check the given MAC address length at some
> > point in the code so that it cannot be > 16.
>
> And then I notice that infiniband has a MAC address length of 20. For
> all practical purposes this works as expected. Except if we want to go
> nitpicking when setting the MAC address and also require the address
> type to be supplied? Probably not...
sd_dhcp_client_set_mac() does have an 'arp_type' parameter that's cached
in the client struct, so that could be changed to:
if (client->arp_type == ARPHRD_ETHER)
if you'd like.
Dan
More information about the systemd-devel
mailing list