On Fri, Jul 11, 2014 at 5:49 AM, Nehal J Wani <nehaljw.kkd1(a)gmail.com> wrote:
This patch enables the helper program to detect event(s) triggered
when there
is a change in lease length or expiry and client-id. This transfers complete
control of leases database to libvirt and suppresses use of the lease database
file (<network-name>.leases). That file will not be created, read, or written.
This is achieved by adding the option --leasefile-ro to dnsmasq and applying
the symlink technique, which helps us map events related to leases with their
corresponding network bridges.
Example:
/var/lib/libvirt/dnsmasq/virbr0.helper -> /home/wani/libvirt/src/libvirt_leaseshelper
/var/lib/libvirt/dnsmasq/virbr3.helper -> /home/wani/libvirt/src/libvirt_leaseshelper
Also, this requires the addition of a new non-lease entry in our custom lease
database: "server-duid". It is required to identify a DHCPv6 server.
Now that dnsmasq doesn't maintain its own leases database, it relies on our
helper program to tell it about previous leases and server duid. Thus, this
patch makes our leases program honor an extra action: "init", in which it
sends
the known info in a particular format to dnsmasq by printing it to stdout.
---
src/network/bridge_driver.c | 43 +++++++++++-
src/network/leaseshelper.c | 156 +++++++++++++++++++++++++++++++++++++-------
2 files changed, 175 insertions(+), 24 deletions(-)
make syntax-check reported two flaws. Following diff rectifies it:
diff --git a/src/network/leaseshelper.c b/src/network/leaseshelper.c
index 3d6c773..bdc1b77 100644
--- a/src/network/leaseshelper.c
+++ b/src/network/leaseshelper.c
@@ -30,6 +30,7 @@
#include <stdlib.h>
#include <sys/stat.h>
+#include "dirname.h"
#include "virutil.h"
#include "virthread.h"
#include "virfile.h"
@@ -54,7 +55,7 @@
* Use this when passing possibly-NULL strings to printf-a-likes.
* Required for unkown parameters during init call.
*/
-# define EMPTY_STR(s) ((s) ? (s) : "*")
+#define EMPTY_STR(s) ((s) ? (s) : "*")
static const char *program_name;
@@ -181,7 +182,7 @@ main(int argc, char **argv)
* expired leases. Our symlink hack provides us an alternative method to
* find it */
if (!interface) {
- interface = basename(argv[0]);
+ interface = last_component(argv[0]);
*(strchr(interface, '.')) = '\0';
}
Regards,
Nehal J Wani