badvpn/ncd/examples/router/dhcp_server.ncdi
2013-10-13 21:02:10 +00:00

61 lines
1.9 KiB
Plaintext

include_guard "dhcp_server"
template dhcp_server {
alias("_arg0") addr;
alias("_arg1") prefix;
alias("_arg2") range_start;
alias("_arg3") range_end;
alias("_arg4") routers;
alias("_arg5") dns_servers;
# Choose lease file.
concat("/var/lib/dhcp/dhcpd-", addr, ".leases") leases_file;
# Create leases file if it doesn't exist.
file_stat(leases_file) stat;
If (stat.succeeded) { print(); } Else {
file_write(leases_file, "");
};
# Create a temporary directory.
concat("/run/ncd-dhcp-server-", addr) run_dir;
run({"/bin/rm", "-rf", run_dir}, {});
run({"/bin/mkdir", run_dir}, {"/bin/rm", "-rf", run_dir});
# Compute path for dhcp.conf.
concat(run_dir, "/dhcp.conf") dhcp_conf_path;
# This is a template for dhcp.conf.
var("
default-lease-time 43200;
max-lease-time 43200;
log-facility local7;
ddns-update-style none;
local-address <LOCAL_ADDRESS>;
subnet <NETWORK> netmask <NETMASK> {
authoritative;
range <RANGE_START> <RANGE_END>;
option routers <ROUTERS>;
option domain-name-servers <DNS_SERVERS>;
}
" ) config_template;
# Compute some of the variables.
ipv4_net_from_addr_and_prefix(addr, prefix) network;
ipv4_prefix_to_mask(prefix) netmask;
implode(", ", routers) routers_str;
implode(", ", dns_servers) dns_servers_str;
# Perform substitutions.
var({"<LOCAL_ADDRESS>", "<NETWORK>", "<NETMASK>", "<RANGE_START>", "<RANGE_END>", "<ROUTERS>", "<DNS_SERVERS>"}) regex;
var({addr, network, netmask, range_start, range_end, routers_str, dns_servers_str}) replace;
regex_replace(config_template, regex, replace) config_data;
# Write dhcp.conf.
file_write(dhcp_conf_path, config_data);
# Start dhcpd.
daemon({"/usr/sbin/dhcpd", "-f", "-cf", dhcp_conf_path, "-user", "dhcp", "-group", "dhcp", "--no-pid", "-lf", leases_file});
}