diff --git a/test/infamy/dhcp.py b/test/infamy/dhcp.py new file mode 100644 index 00000000..bce40a4f --- /dev/null +++ b/test/infamy/dhcp.py @@ -0,0 +1,55 @@ +"""Start a DHCP server in the background""" +import os +import subprocess +import ipaddress + +class Server: + config_file = '/tmp/udhcpd.conf' + leases_file = '/tmp/udhcpd.leases' + + def __init__(self, netns, subnet='192.168.0.0', netmask='255.255.255.0', ip='192.168.0.20'): + self.process = None + self.netns = netns + self._create_files(subnet, netmask, ip) + + def __del__(self): + print(self.config_file) + #os.unlink(self.config_file) + #os.unlink(self.leases_file) + + def __enter__(self): + self.start() + + def __exit__(self, _, __, ___): + self.stop() + + def _create_files(self, subnet, netmask, ip): + f = open(self.leases_file, "w") + f.close() + + with open(self.config_file, 'w') as f: + f.write(f'''# Generated by Infamy DHCP +lease_file {self.leases_file} +interface iface +start {ip} +end {ip} +max_leases 1 +option subnet {netmask} +option lease 864000 +''') + + def get_pid(self): + return self.process.pid + + def start(self): + if not os.path.exists(self.config_file): + raise Exception("Config file does not exist. Please create it first.") + cmd = f"udhcpd -f {self.config_file}" + print(f"Starting: {cmd}") + self.process = self.netns.popen(cmd.split(" ")) + + def stop(self): + if self.process: + self.process.terminate() + self.process.wait() + self.process = None