Use a separate thread for periodic RAs
[snf-nfdhcpd] / nfdhcpd
diff --git a/nfdhcpd b/nfdhcpd
index d735d9f..fc2c6c3 100755 (executable)
--- a/nfdhcpd
+++ b/nfdhcpd
@@ -25,6 +25,7 @@ import glob
 import time
 import logging
 import logging.handlers
+import threading
 import subprocess
 
 import daemon
@@ -482,7 +483,12 @@ class VMNetProxy(object):
 
         payload.set_verdict(nfqueue.NF_DROP)
 
-        resp = Ether(src=ifmac, dst=ns.lladdr)/\
+        try:
+            client_lladdr = ns.lladdr
+        except AttributeError:
+            return 1
+
+        resp = Ether(src=ifmac, dst=client_lladdr)/\
                IPv6(src=str(ifll), dst=ns.src)/\
                ICMPv6ND_NA(R=1, O=0, S=1, tgt=ns.tgt)/\
                ICMPv6NDOptDstLLAddr(lladdr=ifmac)
@@ -492,6 +498,11 @@ class VMNetProxy(object):
         return 1
 
     def send_periodic_ra(self):
+        # Use a separate thread as this may take a _long_ time with
+        # many interfaces and we want to be responsive in the mean time
+        threading.Thread(target=self._send_periodic_ra).start()
+
+    def _send_periodic_ra(self):
         logging.debug("Sending out periodic RAs")
         start = time.time()
         i = 0