Skip to content
Snippets Groups Projects
Commit ee5d8c60 authored by Cédric Roux's avatar Cédric Roux
Browse files

prepare forwarder

parent 2bd870af
No related branches found
No related tags found
No related merge requests found
......@@ -115,11 +115,24 @@ extern T_cache_t *T_cache;
#define T_ACTIVE(x) T_active[(intptr_t)x]
#ifdef T_USE_SHARED_MEMORY
#define T_SEND() \
T_cache[T_LOCAL_slot].busy = 1; \
T_cache[T_LOCAL_slot].length = T_LOCAL_size; \
T_send(T_LOCAL_buf, T_LOCAL_size)
#else /* T_USE_SHARED_MEMORY */
/* when not using shared memory, wait for send to finish */
#define T_SEND() \
T_cache[T_LOCAL_slot].busy = 1; \
T_cache[T_LOCAL_slot].length = T_LOCAL_size; \
T_send(T_LOCAL_buf, T_LOCAL_size); \
while (T_cache[T_LOCAL_slot].busy) usleep(1*1000)
#endif /* T_USE_SHARED_MEMORY */
#define T_CHECK_SIZE(len, argnum) \
if (T_LOCAL_size + (len) > T_BUFFER_MAX) { \
printf("%s:%d:%s: cannot put argument %d in T macro, not enough space" \
......
......@@ -10,7 +10,7 @@ CFLAGS += -DT_USE_SHARED_MEMORY
LIBS += -lrt
PROG=tracer
OBJS=main.o plot.o database.o
OBJS=main.o plot.o database.o forward.o
$(PROG): $(OBJS)
$(CC) $(CFLAGS) -o $(PROG) $(OBJS) $(LIBS)
......
......@@ -21,4 +21,7 @@ void list_ids(void *database);
void list_groups(void *database);
void on_off(void *d, char *item, int *a, int onoff);
void *forwarder(char *ip, int port);
void forward(void *forwarder, char *buf, int size);
#endif /* _TRACER_DEFS_H_ */
#include "defs.h"
void *forwarder(char *ip, int port)
{
return 0;
}
void forward(void *_fowarder, char *buf, int size)
{
}
......@@ -371,7 +371,7 @@ void init_shm(void)
void usage(void)
{
printf(
"options:\n"
"common options:\n"
" -d <database file> this option is mandatory\n"
" -li print IDs in the database\n"
" -lg print GROUPs in the database\n"
......@@ -383,6 +383,10 @@ void usage(void)
" -OFF turn all logs OFF\n"
"note: you may pass several -on/-off/-ON/-OFF, they will be processed in order\n"
" by default, all is off\n"
"\n"
"remote mode options: in this mode you run a local tracer and a remote one\n"
" -r remote side\n"
" -l <IP address> <port> local side (forwards packets to remote IP:port)\n"
);
exit(1);
}
......@@ -403,6 +407,13 @@ int main(int n, char **v)
int *on_off_action;
int on_off_n = 0;
int is_on[T_NUMBER_OF_IDS];
int remote_local = 0;
int remote_remote = 0;
char *remote_ip = NULL;
int remote_port = -1;
#ifdef T_USE_SHARED_MEMORY
void *f;
#endif
memset(is_on, 0, sizeof(is_on));
......@@ -425,10 +436,43 @@ int main(int n, char **v)
{ on_off_name[on_off_n]=NULL; on_off_action[on_off_n++]=1; continue; }
if (!strcmp(v[i], "-OFF"))
{ on_off_name[on_off_n]=NULL; on_off_action[on_off_n++]=0; continue; }
if (!strcmp(v[i], "-r")) { remote_remote = 1; continue; }
if (!strcmp(v[i], "-l")) { if (i > n-3) usage(); remote_local = 1;
remote_ip = v[++i]; remote_port = atoi(v[++i]); continue; }
printf("ERROR: unknown option %s\n", v[i]);
usage();
}
#ifndef T_USE_SHARED_MEMORY
/* gcc shut up */
(void)remote_port;
(void)remote_ip;
#endif
#ifdef T_USE_SHARED_MEMORY
if (remote_remote) {
printf("ERROR: remote 'remote side' does not run with shared memory\n");
printf("recompile without T_USE_SHARED_MEMORY (edit Makefile)\n");
exit(1);
}
#endif
if (remote_remote) {
/* TODO: setup 'secure' connection with remote part */
}
#ifndef T_USE_SHARED_MEMORY
if (remote_local) {
printf("ERROR: remote 'local side' does not run without shared memory\n");
printf("recompile with T_USE_SHARED_MEMORY (edit Makefile)\n");
exit(1);
}
#endif
#ifdef T_USE_SHARED_MEMORY
if (remote_local) f = forwarder(remote_ip, remote_port);
#endif
if (database_filename == NULL) {
printf("ERROR: provide a database file (-d)\n");
exit(1);
......@@ -479,6 +523,18 @@ int main(int n, char **v)
#ifdef T_USE_SHARED_MEMORY
wait_message();
#endif
#ifdef T_USE_SHARED_MEMORY
if (remote_local) {
forward(f, T_cache[T_busylist_head].buffer,
T_cache[T_busylist_head].length);
T_cache[T_busylist_head].busy = 0;
T_busylist_head++;
T_busylist_head &= T_CACHE_SIZE - 1;
continue;
}
#endif
get_message(s);
}
return 0;
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment