-// SPDX-License-Identifier: GPL-2.0+
+// SPDX-License-Identifier: GPL-2.0-or-later
/*
* Copyright (C) 2022 Felix Fietkau <nbd@nbd.name>
*/
static const char *hosts_file;
const char *mssfix_path = UNETD_MSS_BPF_PATH;
const char *data_dir = UNETD_DATA_DIR;
+int global_pex_port = UNETD_GLOBAL_PEX_PORT;
bool debug;
static void
avl_for_each_element(&net->hosts, host, node) {
inet_ntop(AF_INET6, &host->peer.local_addr, ip, sizeof(ip));
- fprintf(f, "%s\t%s\n", ip, network_host_name(host));
+ fprintf(f, "%s\t%s%s%s\n", ip, network_host_name(host),
+ net->config.domain ? "." : "",
+ net->config.domain ? net->config.domain : "");
}
}
if (!hosts_file)
return;
- asprintf(&tmpfile, "%s.XXXXXXXX", hosts_file);
+ if (asprintf(&tmpfile, "%s.XXXXXXXX", hosts_file) < 0)
+ return;
+
fd = mkstemp(tmpfile);
if (fd < 0) {
perror("mkstemp");
int main(int argc, char **argv)
{
struct cmdline_network *net;
+ const char *unix_socket = NULL;
int ch;
- while ((ch = getopt(argc, argv, "D:dh:M:N:")) != -1) {
+ while ((ch = getopt(argc, argv, "D:dh:u:M:N:P:")) != -1) {
switch (ch) {
case 'D':
data_dir = optarg;
case 'M':
mssfix_path = optarg;
break;
+ case 'P':
+ global_pex_port = atoi(optarg);
+ break;
+ case 'u':
+ unix_socket = optarg;
+ break;
}
}
uloop_init();
unetd_ubus_init();
unetd_write_hosts();
+ global_pex_open(unix_socket);
add_networks();
uloop_run();
+ pex_close();
network_free_all();
uloop_done();