Rename project to umdns
[project/mdnsd.git] / main.c
diff --git a/main.c b/main.c
index f07b9e6..02d13f5 100644 (file)
--- a/main.c
+++ b/main.c
@@ -25,7 +25,6 @@
 #include <sys/socket.h>
 #include <netinet/in.h>
 #include <arpa/nameser.h>
-#include <asm/byteorder.h>
 
 #include <libubus.h>
 #include <libubox/uloop.h>
 #include "announce.h"
 #include "interface.h"
 
-char *iface_name = "eth0";
+int cfg_proto = 0;
+int cfg_no_subnet = 0;
+
+static void
+signal_shutdown(int signal)
+{
+       uloop_end();
+}
 
 int
 main(int argc, char **argv)
 {
        int ch, ttl;
 
-       while ((ch = getopt(argc, argv, "t:i:d")) != -1) {
+       uloop_init();
+
+       while ((ch = getopt(argc, argv, "t:i:d46n")) != -1) {
                switch (ch) {
                case 't':
                        ttl = atoi(optarg);
@@ -58,33 +66,39 @@ main(int argc, char **argv)
                        debug++;
                        break;
                case 'i':
-                       iface_name = optarg;
+                       interface_add(optarg);
+                       break;
+               case '4':
+                       cfg_proto = 4;
+                       break;
+               case '6':
+                       cfg_proto = 6;
+                       break;
+               case 'n':
+                       cfg_no_subnet = 1;
                        break;
-               }
-       }
-
-       if (!iface_name)
-               return -1;
-
-       uloop_init();
 
-       if (interface_add(iface_name)) {
-               fprintf(stderr, "Failed to add interface %s\n", iface_name);
-               return -1;
+               default:
+                       return -1;
+               }
        }
 
-       signal_setup();
+       signal(SIGPIPE, SIG_IGN);
+       signal(SIGTERM, signal_shutdown);
+       signal(SIGKILL, signal_shutdown);
 
        if (cache_init())
                return -1;
 
-       service_init();
-
        ubus_startup();
+
+       service_init(0);
+
        uloop_run();
        uloop_done();
 
-       cache_cleanup();
+       interface_shutdown();
+       cache_cleanup(NULL);
        service_cleanup();
        vlist_flush(&interfaces);