summaryrefslogtreecommitdiff
path: root/sysdep/unix/main.c
diff options
context:
space:
mode:
Diffstat (limited to 'sysdep/unix/main.c')
-rw-r--r--sysdep/unix/main.c89
1 files changed, 87 insertions, 2 deletions
diff --git a/sysdep/unix/main.c b/sysdep/unix/main.c
index 076a872c..b6b783b2 100644
--- a/sysdep/unix/main.c
+++ b/sysdep/unix/main.c
@@ -7,11 +7,72 @@
*/
#include <stdio.h>
+#include <sys/signal.h>
#include "nest/bird.h"
#include "lib/lists.h"
#include "lib/resource.h"
+#include "lib/socket.h"
#include "nest/route.h"
+#include "nest/protocol.h"
+
+#include "unix.h"
+
+/*
+ * Debugging
+ */
+
+static void
+handle_sigusr(int sig)
+{
+ debug("SIGUSR1: Debugging dump...\n\n");
+
+ sk_dump_all();
+ tm_dump_all();
+ rta_dump_all();
+ rt_dump_all();
+
+ debug("\n");
+}
+
+static void
+signal_init(void)
+{
+ static struct sigaction sa;
+
+ sa.sa_handler = handle_sigusr;
+ sa.sa_flags = SA_RESTART;
+ if (sigaction(SIGUSR1, &sa, NULL) < 0)
+ die("sigaction: %m");
+ signal(SIGPIPE, SIG_IGN);
+}
+
+/*
+ * Hic Est main()
+ */
+
+void erro(sock *s, int e)
+{
+ debug("errrr e=%d\n", e);
+ rfree(s);
+}
+
+void bla(sock *s)
+{
+ puts("W");
+ strcpy(s->tbuf, "RAM!\r\n");
+ sk_send(s, 6);
+}
+
+int xxx(sock *s, int h)
+{
+ puts("R");
+ do {
+ strcpy(s->tbuf, "Hello, world!\r\n");
+ }
+ while (sk_send(s, 15) > 0);
+ return 1;
+}
int
main(void)
@@ -20,8 +81,32 @@ main(void)
log_init_debug(NULL);
resource_init();
+ io_init();
rt_init();
- proto_init();
+ protos_init();
+ signal_init();
+
+ {
+ sock *s = sk_new(&root_pool);
+
+ if (!s)
+ die("no socket");
+ s->type = SK_UDP_MC;
+ s->sport = 7899;
+ s->saddr = _MI(0x3ea80015);
+ s->daddr = _MI(0xe0000001);
+ s->dport = 7890;
+ s->rx_hook = xxx;
+ s->tx_hook = bla;
+ s->err_hook = erro;
+ s->rbsize = 1024;
+ s->tbsize = 1024;
+ s->ttl = 1;
+ if (sk_open(s))
+ die("open failed");
+ bla(s);
+ }
- return 0;
+ io_loop();
+ die("I/O loop died");
}