Commit b5d9ee5c authored by Martin Mareš's avatar Martin Mareš

Added UNIX implementation of both timers and sockets. Timers should work,

sockets were tested only in TCP mode. main.c now contains some test
cases for socket code.
parent 6d45cf21
This diff is collapsed.
......@@ -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");
}
/*
* BIRD -- Declarations Common to Unix Port
*
* (c) 1998 Martin Mares <mj@ucw.cz>
*
* Can be freely distributed and used under the terms of the GNU GPL.
*/
#ifndef _BIRD_UNIX_H_
#define _BIRD_UNIX_H_
/* io.c */
void io_init(void);
void io_loop(void);
#endif
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment