<div dir="ltr">> <span style="color:rgb(0,0,0);font-family:arial,sans-serif;font-size:13px">I'd really hope we could avoid setting broadcast everywhere, as that</span><br style="color:rgb(0,0,0);font-family:arial,sans-serif;font-size:13px">

<span style="color:rgb(0,0,0);font-family:arial,sans-serif;font-size:13px">>seems very wasteful...</span><div><span style="color:rgb(0,0,0);font-family:arial,sans-serif;font-size:13px"><br></span></div><div><span style="color:rgb(0,0,0);font-family:arial,sans-serif;font-size:13px">I agree with you, broadcasting everywhere it's clearly not convenient. </span></div>

<div><span style="color:rgb(0,0,0);font-family:arial,sans-serif;font-size:13px"><br></span></div><div><span style="color:rgb(0,0,0);font-family:arial,sans-serif;font-size:13px">It seems to me the ideal path to move forward looks like this:</span></div>

<div><ol><li><span style="color:rgb(0,0,0);font-family:arial,sans-serif;font-size:13px">Use platform specific raw sockets for the first attempt of getting a DHCPOFFER, through unicast and without ARP. Just like ISC's </span><a href="https://kb.isc.org/article/AA-00379/0/How-DHCP-uses-raw-sockets.html" style="font-family:arial,sans-serif;font-size:13px">does</a><span style="color:rgb(0,0,0);font-family:arial,sans-serif;font-size:13px">.</span></li>

<li><span style="font-size:13px;color:rgb(0,0,0);font-family:arial,sans-serif">If <b>1</b> doesn't work, fall back to normal BSD sockets setting the broadcast flag on. This is done by ISC's impl too, as I showed in my previous email. See </span><a href="https://cloudup.com/cAneyImU2H2" target="_blank" style="font-size:13px;font-family:arial,sans-serif">https://cloudup.com/cAneyImU2H2</a> and <a href="https://gist.github.com/c4milo/017a50a6f5d329887707" target="_blank" style="font-size:13px;font-family:arial,sans-serif">https://gist.github.com/c4milo/017a50a6f5d329887707</a>  </li>

<li>Use Tom's patch for qeth devices setting <span style="color:rgb(51,51,51);font-family:Consolas,'Liberation Mono',Courier,monospace;font-size:12px">/sys/class/net/%s/device/layer2 </span>to 0 which seems to <a href="https://github.com/bldewolf/dhcpcd/commit/3bc21a1a09852407df89a363c67d7575efa081c8 ">happen</a> but it will be nice to confirm.</li>

<li><span style="color:rgb(0,0,0);font-family:arial,sans-serif;font-size:13px">Provide a configuration parameter for administrators to set the broadcast flag manually. </span></li></ol></div><div><span style="color:rgb(0,0,0);font-family:arial,sans-serif;font-size:13px"><br>

</span></div><div><span style="color:rgb(0,0,0);font-family:arial,sans-serif;font-size:13px">In essence, Patrik's proposal is the same as 1 and 2, just a different implementation.</span></div><div><span style="color:rgb(0,0,0);font-family:arial,sans-serif;font-size:13px"><br>

</span></div><div><span style="color:rgb(0,0,0);font-family:arial,sans-serif;font-size:13px"><br></span></div><div><span style="color:rgb(0,0,0);font-family:arial,sans-serif;font-size:13px">>> + if (link->udev_device) {</span><br style="color:rgb(0,0,0);font-family:arial,sans-serif;font-size:13px">

<span style="color:rgb(0,0,0);font-family:arial,sans-serif;font-size:13px">>> +     const char *l2;</span><br style="color:rgb(0,0,0);font-family:arial,sans-serif;font-size:13px"><span style="color:rgb(0,0,0);font-family:arial,sans-serif;font-size:13px">>> +</span><br style="color:rgb(0,0,0);font-family:arial,sans-serif;font-size:13px">

<span style="color:rgb(0,0,0);font-family:arial,sans-serif;font-size:13px">>> +     l2 = udev_device_get_sysattr_value(</span><span style="color:rgb(0,0,0);font-family:arial,sans-serif;font-size:13px">link->udev_device, "layer2");</span><br style="color:rgb(0,0,0);font-family:arial,sans-serif;font-size:13px">

<span style="color:rgb(0,0,0);font-family:arial,sans-serif;font-size:13px">>> +     if (l2) {</span><br style="color:rgb(0,0,0);font-family:arial,sans-serif;font-size:13px"><span style="color:rgb(0,0,0);font-family:arial,sans-serif;font-size:13px">>> +             unsigned layer2;</span><br style="color:rgb(0,0,0);font-family:arial,sans-serif;font-size:13px">

<span style="color:rgb(0,0,0);font-family:arial,sans-serif;font-size:13px">>> +</span><br style="color:rgb(0,0,0);font-family:arial,sans-serif;font-size:13px"><span style="color:rgb(0,0,0);font-family:arial,sans-serif;font-size:13px">>> +             r = safe_atou(l2, &layer2);</span><br style="color:rgb(0,0,0);font-family:arial,sans-serif;font-size:13px">

<span style="color:rgb(0,0,0);font-family:arial,sans-serif;font-size:13px">>> +             if (r < 0)</span><br style="color:rgb(0,0,0);font-family:arial,sans-serif;font-size:13px"><span style="color:rgb(0,0,0);font-family:arial,sans-serif;font-size:13px">>> +                     return r;</span><br style="color:rgb(0,0,0);font-family:arial,sans-serif;font-size:13px">

<span style="color:rgb(0,0,0);font-family:arial,sans-serif;font-size:13px">>> +</span><br style="color:rgb(0,0,0);font-family:arial,sans-serif;font-size:13px"><span style="color:rgb(0,0,0);font-family:arial,sans-serif;font-size:13px">>> +             if (!layer2) {</span><br style="color:rgb(0,0,0);font-family:arial,sans-serif;font-size:13px">

<span style="color:rgb(0,0,0);font-family:arial,sans-serif;font-size:13px">>> +                     r = sd_dhcp_client_request_</span><span style="color:rgb(0,0,0);font-family:arial,sans-serif;font-size:13px">broadcast(link->dhcp_client);</span><br style="color:rgb(0,0,0);font-family:arial,sans-serif;font-size:13px">

<span style="color:rgb(0,0,0);font-family:arial,sans-serif;font-size:13px">>> +                     if (r < 0)</span><br style="color:rgb(0,0,0);font-family:arial,sans-serif;font-size:13px"><span style="color:rgb(0,0,0);font-family:arial,sans-serif;font-size:13px">>> +                             return r;</span><br style="color:rgb(0,0,0);font-family:arial,sans-serif;font-size:13px">

<span style="color:rgb(0,0,0);font-family:arial,sans-serif;font-size:13px">>> +             }</span><span style="color:rgb(0,0,0);font-family:arial,sans-serif;font-size:13px"><br></span></div><div><span style="color:rgb(0,0,0);font-family:arial,sans-serif;font-size:13px"><br>

</span></div><div><span style="color:rgb(0,0,0);font-family:arial,sans-serif;font-size:13px">>Am I now missing something if I can't find the</span><br style="color:rgb(0,0,0);font-family:arial,sans-serif;font-size:13px">

<span style="color:rgb(0,0,0);font-family:arial,sans-serif;font-size:13px">>file /sys/class/net/<device>/</span><span style="color:rgb(0,0,0);font-family:arial,sans-serif;font-size:13px">device/layer2 for a regular networking</span><br style="color:rgb(0,0,0);font-family:arial,sans-serif;font-size:13px">

<span style="color:rgb(0,0,0);font-family:arial,sans-serif;font-size:13px">>interface? The above enables broadcast only for virtual interfaces,</span><br style="color:rgb(0,0,0);font-family:arial,sans-serif;font-size:13px">

<span style="color:rgb(0,0,0);font-family:arial,sans-serif;font-size:13px">>right?</span><span style="color:rgb(0,0,0);font-family:arial,sans-serif;font-size:13px"><br></span></div><div><span style="color:rgb(0,0,0);font-family:arial,sans-serif;font-size:13px"><br>

</span></div><div><span style="color:rgb(0,0,0);font-family:arial,sans-serif;font-size:13px">Patrik, based on what Tom says, I think the above patch will only cover qeth devices setting </span><span style="color:rgb(51,51,51);font-family:Consolas,'Liberation Mono',Courier,monospace;font-size:12px">/sys/class/net/%s/device/layer2</span><span style="font-size:13px;color:rgb(0,0,0);font-family:arial,sans-serif"> in 0 which seems to happen in some cases: </span><font color="#000000" face="arial, sans-serif"><a href="https://github.com/bldewolf/dhcpcd/commit/3bc21a1a09852407df89a363c67d7575efa081c8">https://github.com/bldewolf/dhcpcd/commit/3bc21a1a09852407df89a363c67d7575efa081c8</a> </font></div>

<div><br></div><div>The issue that brought me here is consistently happening in VMware virtual machines using bridged networking: <a href="https://github.com/coreos/bugs/issues/12">https://github.com/coreos/bugs/issues/12</a> </div>

<div><br></div><div>Best, </div><div>Camilo</div></div><div class="gmail_extra"><br><br><div class="gmail_quote">On Fri, May 30, 2014 at 4:06 AM, Tom Gundersen <span dir="ltr"><<a href="mailto:teg@jklm.no" target="_blank">teg@jklm.no</a>></span> wrote:<br>

<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div class="">On Fri, May 30, 2014 at 3:24 AM, Camilo Aguilar<br>
<<a href="mailto:camilo.aguilar@gmail.com">camilo.aguilar@gmail.com</a>> wrote:<br>
> Hi Tom, the patch did not work because there is no layer2 file. Would it be<br>
> safe to assume that no file is the same as the file having 0? This is out of<br>
> my reach unfortunately, but I will be happy to read whatever link you throw<br>
> at me.<br>
<br>
</div>I don't think that would work, as only the qeth driver actually<br>
exposes the layer2 file (and to the best of my knowledge the other<br>
upstream drivers support unicast). If other drivers also can't do<br>
unicast, then they need to expose this information to us somehow, I'm<br>
afraid that I don't know anything about the VMWare driver, but<br>
hopefully we can find a way to get this info out of that driver too<br>
(would of course be nice if everyone used the same interface...).<br>
<div class=""><br>
> Also, to better clarify how ISC dhcp-4.3.0 works. It seems it uses raw<br>
> sockets as a first attempt (layer2 unicast) and falls back to normal BSD<br>
> sockets which will always set the broadcast flag on:<br>
> <a href="https://cloudup.com/cAneyImU2H2" target="_blank">https://cloudup.com/cAneyImU2H2</a> and<br>
> <a href="https://gist.github.com/c4milo/017a50a6f5d329887707" target="_blank">https://gist.github.com/c4milo/017a50a6f5d329887707</a><br>
<br>
</div>I'd really hope we could avoid setting broadcast everywhere, as that<br>
seems very wasteful...<br>
<br>
Cheers,<br>
<br>
Tom<br>
</blockquote></div><br><br clear="all"><div><br></div>-- <br><div dir="ltr"><div><b>Camilo Aguilar</b></div><div>Software Engineer</div><div><a href="http://github.com/c4milo" target="_blank">http://github.com/c4milo</a></div>

<br><br></div>
</div>