<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=Windows-1252">
</head>
<body style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space; color: rgb(0, 0, 0); font-size: 14px; font-family: Calibri, sans-serif;">
<div>Hi,</div>
<div><br>
</div>
<div>while trying to integrate dibbler client with neutron to support PD, we countered a few issues with the dibbler client (and server). With a neutron router, we have the qg-xxx interface that is connected to the public network, on which a dhcp server is
 running on the delegating router. For each subnet with PD enabled, a router port will be created in the neutron router. As a result, a new PD request will be sent that asks for a prefix from the delegating router. Keep in mind that the subnet is added into
 the router dynamically.</div>
<div><br>
</div>
<div>We thought about the following options:</div>
<ol>
<li>use a single dibbler client to support the above requirement. This means, the client should be able to accept new requests on the fly either through configuration reload or other interfaces. Unfortunately, dibbler client doesn’t support it.</li><li>start a dibbler client per subnet. All of the dibbler clients will be using the same outgoing interface (which is the qg-xxx interface). Unfortunately, dibbler client uses /etc/dibbler and /var/lib/dibbler for its state (in which it saves duid file, pid
 file, and other internal states). This means it can only support one client per network node. </li><li>run a single dibbler client that requests a smaller prefix (say /56) and splits it among the subnets with PD enabled (neutron subnet requires /64). Depending on the neutron router setup, this may result in significant waste of prefixes.</li></ol>
<div>Given the significant drawback with 3, we are left with 1 and 2. After looking at the dibbler source code, we found that 2 is easier to achieve for now by making some small changes in the dibbler code. In the long run, we think option 1 is better. </div>
<div><br>
</div>
<div>The changes we made to the linux dibbler client code, and the dibbler server code can be found in here:
<a href="https://github.com/johndavidge/dibbler/tree/cloud-dibbler">https://github.com/johndavidge/dibbler/tree/cloud-dibbler</a>. Basically it does a few things:</div>
<div>  — create a unique working area per dibbler client</div>
<div>  — since all the clients use the same outgoing interface, we’d like each dibbler client to use a unique LLA as its source address when sending messages. This would avoid clients to receive server messages that are not intended for them.</div>
<div>  — we found that dibbler server uses transaction ID alone to identify a match between a request and an answer. This would require that unique transaction IDs be used among all the existing clients. We found that clients could use the same transaction
 IDs in our environment. Therefore, a little change is made in the server code so that it will take the request sender into consideration while looking up a match. </div>
<div><br>
</div>
<div><br>
</div>
<div>Option 1 requires better understanding of the dibbler code, and we think that it may not be possible to make it happen in the kilo timeframe. But we think it has significant advantages over option 2. Regardless, changes made for 2 is also needed since
 we need to run one dibbler client per neutron router.</div>
<div><br>
</div>
<div>Now the issue is how to make those changes (possible with further revision) into an official dibbler release ASAP so that we can use them for kilo release. John Davidge has contacted the dibbler authors, and hasn’t received response so far.</div>
<div><br>
</div>
<div>Comments and thoughts are welcome.</div>
<div><br>
</div>
<div>Cheers,</div>
<div>—Robert</div>
</body>
</html>