summaryrefslogtreecommitdiff
path: root/src/tools/cbr
diff options
context:
space:
mode:
authordimitri staessens <dimitri.staessens@intec.ugent.be>2016-06-13 13:48:17 +0200
committerdimitri staessens <dimitri.staessens@intec.ugent.be>2016-06-13 13:48:17 +0200
commit7834e92b218da69cd934679dec9c2d714d89d15e (patch)
treee2174dd2810a20e90050481e2fd54ce61e414baf /src/tools/cbr
parentddfc7091d2698d36c1cfec49eaaad96b278bb37b (diff)
downloadouroboros-7834e92b218da69cd934679dec9c2d714d89d15e.tar.gz
ouroboros-7834e92b218da69cd934679dec9c2d714d89d15e.zip
lib, irmd, tools, ipcpd: updates to dev API.
The registration function has been moved to the irm tool, applications now need to be registered by an administrator. Currently only supports one instance per registered name, and an AP can be registered under only one name. The irmd can now start a registered server application on demand. For the full functionality of the tool, execute "irm register". AP name removed from flow allocation. Flow allocation does not send the source ap name as it is quite useless. The accept() call now only returns the AE name.
Diffstat (limited to 'src/tools/cbr')
-rw-r--r--src/tools/cbr/cbr.c42
-rw-r--r--src/tools/cbr/cbr_client.c16
-rw-r--r--src/tools/cbr/cbr_server.c30
3 files changed, 40 insertions, 48 deletions
diff --git a/src/tools/cbr/cbr.c b/src/tools/cbr/cbr.c
index e36b1856..750b5a15 100644
--- a/src/tools/cbr/cbr.c
+++ b/src/tools/cbr/cbr.c
@@ -30,9 +30,6 @@
#include <time.h>
#include <stdbool.h>
-#define SERVER_AP_NAME "cbr-server"
-#define CLIENT_AP_NAME "cbr-client"
-
#define BUF_SIZE 1500
#include "cbr_client.c"
@@ -49,6 +46,7 @@ static void usage(void)
printf("Usage: cbr [OPTION]...\n"
"Sends SDU's from client to server at a constant bit rate.\n\n"
" -l, --listen Run in server mode\n"
+ " -n, --server_apn Specify the name of the server.\n"
"\n"
"Server options:\n"
" -i, --interval Server report interval (s)\n"
@@ -66,14 +64,20 @@ static void usage(void)
int main(int argc, char ** argv)
{
- int duration = 60; /* One minute test */
- int size = 1000; /* 1000 byte SDU's */
- long rate = 1000000; /* 1 Mb/s */
- bool flood = false;
- bool sleep = false;
- char * rem;
+ int duration = 60; /* One minute test */
+ int size = 1000; /* 1000 byte SDU's */
+ long rate = 1000000; /* 1 Mb/s */
+ bool flood = false;
+ bool sleep = false;
+ int ret = 0;
+ char * rem = NULL;
+ char * s_apn = NULL;
bool server = false;
+
+ /* FIXME: should be argv[0] */
+ ap_init(argv[0]);
+
server_settings.interval = 1; /* One second reporting interval */
server_settings.timeout = 1;
@@ -88,6 +92,10 @@ int main(int argc, char ** argv)
strcmp(*argv, "--timeout") == 0) {
server_settings.timeout = strtol(*(++argv), &rem, 10);
--argc;
+ } else if (strcmp(*argv, "-n") == 0 ||
+ strcmp(*argv, "--server_apn") == 0) {
+ s_apn = *(++argv);
+ --argc;
} else if (strcmp(*argv, "-d") == 0 ||
strcmp(*argv, "--duration") == 0) {
duration = strtol(*(++argv), &rem, 10);
@@ -123,8 +131,20 @@ int main(int argc, char ** argv)
}
if (server) {
- return server_main();
+ ret = server_main();
+
+ } else {
+
+ if (s_apn == NULL) {
+ printf("No server specified.\n");
+ usage();
+ return 0;
+ }
+
+ ret = client_main(s_apn, duration, size, rate, flood, sleep);
}
- return client_main(duration, size, rate, flood, sleep);
+ ap_fini();
+
+ return ret;
}
diff --git a/src/tools/cbr/cbr_client.c b/src/tools/cbr/cbr_client.c
index b0c04f39..1cc325b8 100644
--- a/src/tools/cbr/cbr_client.c
+++ b/src/tools/cbr/cbr_client.c
@@ -35,7 +35,12 @@ static void busy_wait_until(const struct timespec * deadline)
clock_gettime(CLOCK_REALTIME, &now);
}
-int client_main(int duration, int size, long rate, bool flood, bool sleep)
+int client_main(char * server,
+ int duration,
+ int size,
+ long rate,
+ bool flood,
+ bool sleep)
{
int fd = 0;
int result = 0;
@@ -49,15 +54,10 @@ int client_main(int duration, int size, long rate, bool flood, bool sleep)
struct timespec intv = {(gap / BILLION), gap % BILLION};
int ms;
- if (ap_init(CLIENT_AP_NAME)) {
- printf("Failed to init AP.\n");
- return -1;
- }
-
printf("Client started, duration %d, rate %lu b/s, size %d B.\n",
duration, rate, size);
- fd = flow_alloc(SERVER_AP_NAME, NULL, NULL);
+ fd = flow_alloc(server, NULL, NULL);
if (fd < 0) {
printf("Failed to allocate flow.\n");
ap_fini();
@@ -122,7 +122,5 @@ int client_main(int duration, int size, long rate, bool flood, bool sleep)
flow_dealloc(fd);
- ap_fini();
-
return 0;
}
diff --git a/src/tools/cbr/cbr_server.c b/src/tools/cbr/cbr_server.c
index eef1acc9..3a1d8d5c 100644
--- a/src/tools/cbr/cbr_server.c
+++ b/src/tools/cbr/cbr_server.c
@@ -30,7 +30,6 @@
#include <ouroboros/dev.h>
#include <ouroboros/time_utils.h>
-#define DIF_NAME "*"
#define THREADS_SIZE 10
pthread_t listen_thread;
@@ -43,19 +42,12 @@ pthread_cond_t fds_signal;
void shutdown_server(int signo, siginfo_t * info, void * c)
{
- char * dif = DIF_NAME;
int i;
switch(signo) {
case SIGINT:
case SIGTERM:
case SIGHUP:
- if (ap_unreg(&dif, 1)) {
- printf("Failed to unregister application.\n");
- ap_fini();
- exit(EXIT_FAILURE);
- }
-
pthread_cancel(listen_thread);
for (i = 0; i < THREADS_SIZE; i++) {
@@ -157,36 +149,20 @@ void * worker(void * o)
void * listener(void * o)
{
- char * dif = DIF_NAME;
- int server_fd;
- char * client_name = NULL;
int client_fd = 0;
int response = 0;
- if (ap_init(SERVER_AP_NAME)) {
- printf("Failed to init AP.\n");
- exit(EXIT_FAILURE);
- }
-
- server_fd = ap_reg(&dif, 1);
- if (server_fd < 0) {
- printf("Failed to register application.\n");
- ap_fini();
- exit(EXIT_FAILURE);
- }
-
printf("Server started, interval is %ld s, timeout is %ld s.\n",
server_settings.interval, server_settings.timeout);
while (true) {
- client_fd = flow_accept(server_fd,
- &client_name, NULL);
+ client_fd = flow_accept(NULL);
if (client_fd < 0) {
printf("Failed to accept flow.\n");
break;
}
- printf("New flow from %s.\n", client_name);
+ printf("New flow.\n");
pthread_mutex_lock(&fds_lock);
@@ -259,7 +235,5 @@ int server_main()
pthread_join(threads[i], NULL);
}
- ap_fini();
-
return 0;
}