Initial import
[project/qosify.git] / main.c
1 // SPDX-License-Identifier: GPL-2.0+
2 /*
3 * Copyright (C) 2021 Felix Fietkau <nbd@nbd.name>
4 */
5 #include <stdio.h>
6 #include <unistd.h>
7 #include <stdint.h>
8
9 #include <libubox/uloop.h>
10
11 #include "qosify.h"
12
13 static int usage(const char *progname)
14 {
15 fprintf(stderr, "Usage: %s [options]\n"
16 "Options:\n"
17 " -f: force reload of BPF programs\n"
18 " -l <file> Load defaults from <file>\n"
19 " -o only load program/maps without running as daemon\n"
20 "\n", progname);
21
22 return 1;
23 }
24
25 int main(int argc, char **argv)
26 {
27 const char *load_file = NULL;
28 bool force_init = false;
29 bool oneshot = false;
30 int ch;
31
32 while ((ch = getopt(argc, argv, "fl:o")) != -1) {
33 switch (ch) {
34 case 'f':
35 force_init = true;
36 break;
37 case 'l':
38 load_file = optarg;
39 break;
40 case 'o':
41 oneshot = true;
42 break;
43 default:
44 return usage(argv[0]);
45 }
46 }
47
48 if (qosify_loader_init(force_init))
49 return 2;
50
51 if (qosify_map_init())
52 return 2;
53
54 if (qosify_map_load_file(load_file))
55 return 2;
56
57 if (oneshot)
58 return 0;
59
60 ulog_open(ULOG_SYSLOG, LOG_DAEMON, "qosify");
61 uloop_init();
62
63 if (qosify_ubus_init() ||
64 qosify_iface_init())
65 return 2;
66
67 uloop_run();
68
69 qosify_ubus_stop();
70 qosify_iface_stop();
71
72 uloop_done();
73
74 return 0;
75 }