1
0
Fork 0
mirror of https://git.rwth-aachen.de/acs/public/villas/node/ synced 2025-03-09 00:00:00 +01:00

simplified code: removed {node,path}_create

git-svn-id: https://zerberus.eonerc.rwth-aachen.de:8443/svn/s2ss/trunk@72 8ec27952-4edc-4aab-86aa-e87bb2611832
This commit is contained in:
Steffen Vogel 2014-06-25 01:53:35 +00:00
parent 7367b533dd
commit 4bf40bbb03
8 changed files with 97 additions and 158 deletions

View file

@ -38,6 +38,9 @@ enum node_type
*/
struct node
{
/** A system-wide unique id per node */
int id;
/** The socket descriptor */
int sd;
@ -66,24 +69,6 @@ struct node
struct node *next;
};
/** Create a new node.
*
* Memory is allocated dynamically and has to be freed by node_destroy()
*
* @param n A pointer to the node structure.
* @param name An acroynm which describes the node.
* @param type The type of a node (server, simulator, workstation).
* @param local The local address of this node.
* This is where to server is listening for the arrival of new messages.
* @param remote The local address of this node.
* This is where messages are sent to.
* @return
* - 0 on success
* - otherwise on error occured
*/
int node_create(struct node *n, const char *name, enum node_type type,
struct sockaddr_in local, struct sockaddr_in remote);
/** Connect and bind the UDP socket of this node
*
* @param n A pointer to the node structure

View file

@ -51,17 +51,6 @@ struct path
struct path *next;
};
/** Setup a new path.
*
* @param p A pointer to the path structure
* @param in The node we are receiving messages from
* @param out The destination node
* @return
* - 0 on success
* - otherwise an error occured
*/
int path_create(struct path *p, struct node *in, struct node *out);
/** Start a path.
*
* Start a new pthread for receiving/sending messages over this path.

119
src/cfg.c
View file

@ -12,6 +12,7 @@
#include <grp.h>
#include <pwd.h>
#include "if.h"
#include "cfg.h"
#include "node.h"
#include "path.h"
@ -100,8 +101,6 @@ int config_parse_global(config_setting_t *cfg, struct settings *set)
int config_parse_path(config_setting_t *cfg,
struct path **paths, struct node *nodes)
{
struct path *path;
struct node *in, *out;
const char *in_str = NULL;
const char *out_str = NULL;
int enabled = 1;
@ -111,6 +110,12 @@ int config_parse_path(config_setting_t *cfg,
config_setting_lookup_bool(cfg, "enabled", &enabled);
config_setting_lookup_bool(cfg, "reverse", &reverse);
struct path *path = (struct path *) malloc(sizeof(struct path));
if (!path)
error("Failed to allocate memory for path");
else
memset(path, 0, sizeof(struct path));
/* Required settings */
if (!config_setting_lookup_string(cfg, "in", &in_str))
cerror(cfg, "Missing input node for path");
@ -120,85 +125,93 @@ int config_parse_path(config_setting_t *cfg,
info("Loading path from '%s' to '%s'", in_str, out_str);
in = node_lookup_name(in_str, nodes);
if (!in)
path->in = node_lookup_name(in_str, nodes);
if (!path->in)
cerror(cfg, "Invalid input node '%s'");
out = node_lookup_name(out_str, nodes);
if (!out)
path->out = node_lookup_name(out_str, nodes);
if (!path->out)
cerror(cfg, "Invalid output node '%s'", out_str);
path->cfg = cfg;
if (enabled) {
path = (struct path *) malloc(sizeof(struct path));
if (!path)
error("Failed to allocate memory for path");
if (path_create(path, in, out))
cerror(cfg, "Failed to parse path");
path->cfg = cfg;
list_add(*paths, path);
if (reverse) {
path = (struct path *) malloc(sizeof(struct path));
if (!path)
struct path *path_rev = (struct path *) malloc(sizeof(struct path));
if (!path_rev)
error("Failed to allocate memory for path");
else
memcpy(path_rev, path, sizeof(struct path));
if (path_create(path, out, in))
cerror(cfg, "Failed to parse path");
path->cfg = cfg;
list_add(*paths, path);
path_rev->in = path->out; /* Swap in/out */
path_rev->out = path->in;
list_add(*paths, path_rev);
}
}
else
else {
free(path);
warn(" Path is not enabled");
}
return 0;
}
int config_parse_node(config_setting_t *cfg, struct node **nodes)
{
const char *name = NULL;
const char *type_str = NULL;
const char *remote_str = NULL;
const char *local_str = NULL;
struct node *node;
struct sockaddr_in local, remote;
enum node_type type;
/* Required settings */
name = config_setting_name(cfg);
if (!name)
cerror(cfg, "Missing node name");
if (!config_setting_lookup_string(cfg, "type", &type_str))
cerror(cfg, "Missing node type");
if (!config_setting_lookup_string(cfg, "remote", &remote_str))
cerror(cfg, "Missing node remote address");
if (!config_setting_lookup_string(cfg, "local", &local_str))
cerror(cfg, "Missing node local address");
type = node_lookup_type(type_str);
if (type == NODE_INVALID)
cerror(cfg, "Invalid node type '%s'", type);
info("Loading %s node '%s'", type_str, name);
if (resolve_addr(local_str, &local, 0))
cerror(cfg, "Failed to resolve local address '%s' of node '%s'", local_str, name);
if (resolve_addr(remote_str, &remote, 0))
cerror(cfg, "Failed to resolve remote address '%s' of node '%s'", remote_str, name);
/* Allocate memory */
node = (struct node *) malloc(sizeof(struct node));
if (!node)
error("Failed to allocate memory for node");
else
memset(node, 0, sizeof(struct node));
if (node_create(node, name, type, local, remote))
cerror(cfg, "Failed to parse node");
/* Required settings */
node->name = config_setting_name(cfg);
if (!node->name)
cerror(cfg, "Missing node name");
if (!config_setting_lookup_int(cfg, "id", &node->id))
cerror(cfg, "Missing id for node '%s'", node->name);
if (!config_setting_lookup_string(cfg, "type", &type_str))
cerror(cfg, "Missing type for node '%s'", node->name);
if (!config_setting_lookup_string(cfg, "remote", &remote_str))
cerror(cfg, "Missing remote address for node '%s'", node->name);
if (!config_setting_lookup_string(cfg, "local", &local_str))
cerror(cfg, "Missing local address for node '%s'", node->name);
node->type = node_lookup_type(type_str);
if (node->type == NODE_INVALID)
cerror(cfg, "Invalid type '%s' for node '%s'", type_str, node->name);
if (resolve_addr(local_str, &node->local, 0))
cerror(cfg, "Failed to resolve local address '%s' of node '%s'", local_str, node->name);
if (resolve_addr(remote_str, &node->remote, 0))
cerror(cfg, "Failed to resolve remote address '%s' of node '%s'", remote_str, node->name);
if (!config_setting_lookup_string(cfg, "interface", &node->ifname)) {
node->ifname = if_addrtoname((struct sockaddr*) &node->local);
}
node->cfg = cfg;
node->ifindex = if_nametoindex(node->ifname);
node->mark = node->ifindex + 8000;
list_add(*nodes, node);
node->cfg = cfg;
debug(3, "Loaded %s node '%s'", type_str, node->name);
return 0;
}

View file

@ -21,22 +21,6 @@
#include "node.h"
#include "if.h"
int node_create(struct node *n, const char *name, enum node_type type,
struct sockaddr_in local, struct sockaddr_in remote)
{
n->name = name;
n->type = type;
n->local = local;
n->remote = remote;
/* We use to local address to determine the outgoing interface */
//n->ifname = if_addrtoname((struct sockaddr*) &local);
//n->ifindex = if_nametoindex(n->ifname);
return 0;
}
int node_connect(struct node *n)
{
/* Create socket */

View file

@ -13,21 +13,6 @@
#include "utils.h"
#include "path.h"
int path_create(struct path *p, struct node *in, struct node *out)
{
/* Reset counters */
p->received = 0;
p->delayed = 0;
p->duplicated = 0;
p->hook = NULL;
p->in = in;
p->out = out;
return 0;
}
/**
* @brief This is the main thread function per path
*/

View file

@ -30,6 +30,10 @@ void quit(int sig, siginfo_t *si, void *ptr)
int main(int argc, char *argv[])
{
struct node n;
struct msg m;
memset(&n, 0, sizeof(struct node));
struct sockaddr_in sa;
if (argc != 2) {
@ -40,8 +44,6 @@ int main(int argc, char *argv[])
exit(EXIT_FAILURE);
}
const char *local_str = argv[1];
/* Setup signals */
struct sigaction sa_quit = {
.sa_flags = SA_SIGINFO,
@ -53,21 +55,14 @@ int main(int argc, char *argv[])
sigaction(SIGINT, &sa_quit, NULL);
/* Resolve addresses */
struct sockaddr_in local;
struct sockaddr_in remote;
if (resolve_addr(local_str, &local, 0))
error("Failed to resolve remote address: %s", local_str);
if (resolve_addr(argv[1], &n.local, 0))
error("Failed to resolve local address: %s", argv[1]);
/* Print header */
fprintf(stderr, "# %-6s %-8s %-12s\n", "dev_id", "seq_no", "data");
/* Create node */
struct node n;
node_create(&n, NULL, NODE_SERVER, local, remote);
node_connect(&n);
struct msg m;
while (1) {
msg_recv(&m, &n);
msg_fprint(stdout, &m);

View file

@ -42,9 +42,12 @@ int main(int argc, char *argv[])
exit(EXIT_FAILURE);
}
int values = atoi(argv[1]);
const char *remote_str = argv[2];
const char *local_str = argv[3];
struct node n;
struct msg m = {
.length = atoi(argv[1]) * sizeof(double)
};
memset(&n, 0, sizeof(struct node));
/* Setup signals */
struct sigaction sa_quit = {
@ -57,28 +60,19 @@ int main(int argc, char *argv[])
sigaction(SIGINT, &sa_quit, NULL);
/* Resolve addresses */
struct sockaddr_in local;
struct sockaddr_in remote;
if (resolve_addr(argv[2], &n.remote, 0))
error("Failed to resolve remote address: %s", argv[2]);
if (argc == 4 && resolve_addr(remote_str, &remote, 0))
error("Failed to resolve local address: %s", local_str);
if (argc == 4 && resolve_addr(argv[3], &n.local, 0))
error("Failed to resolve local address: %s", argv[3]);
else {
local.sin_family = AF_INET;
local.sin_addr.s_addr = INADDR_ANY;
local.sin_port = 0;
n.local.sin_family = AF_INET;
n.local.sin_addr.s_addr = INADDR_ANY;
n.local.sin_port = 0;
}
if (resolve_addr(remote_str, &remote, 0))
error("Failed to resolve remote address: %s", remote_str);
/* Create node */
struct node n;
node_create(&n, NULL, NODE_SERVER, local, remote);
node_connect(&n);
struct msg m;
m.length = values * sizeof(double);
while (!feof(stdin)) {
msg_fscan(stdin, &m);
msg_send(&m, &n);

View file

@ -27,6 +27,10 @@ void quit(int sig, siginfo_t *si, void *ptr)
int main(int argc, char *argv[])
{
struct node n;
memset(&n, 0, sizeof(struct node));
if (argc != 4) {
printf("Usage: %s TEST LOCAL REMOTE\n", argv[0]);
printf(" TEST has to be 'latency' for now\n");
@ -37,10 +41,6 @@ int main(int argc, char *argv[])
exit(EXIT_FAILURE);
}
const char *test = argv[1];
const char *local_str = argv[2];
const char *remote_str = argv[3];
/* Setup signals */
struct sigaction sa_quit = {
.sa_flags = SA_SIGINFO,
@ -52,24 +52,18 @@ int main(int argc, char *argv[])
sigaction(SIGINT, &sa_quit, NULL);
/* Resolve addresses */
struct sockaddr_in local;
struct sockaddr_in remote;
if (resolve_addr(argv[2], &n.local, 0))
error("Failed to resolve local address: %s", argv[2]);
if (resolve_addr(local_str, &local, 0))
error("Failed to resolve local address: %s", local_str);
if (resolve_addr(argv[3], &n.remote, 0))
error("Failed to resolve remote address: %s", argv[3]);
if (resolve_addr(remote_str, &remote, 0))
error("Failed to resolve remote address: %s", remote_str);
/* Create node */
struct node n;
node_create(&n, NULL, NODE_SERVER, local, remote);
node_connect(&n);
debug(1, "We listen at %s:%u", inet_ntoa(n.local.sin_addr), ntohs(n.local.sin_port));
debug(1, "We sent to %s:%u", inet_ntoa(n.remote.sin_addr), ntohs(n.remote.sin_port));
if (!strcmp(test, "latency")) {
if (!strcmp(argv[1], "latency")) {
struct msg m2, m1 = {
.device = 99,
.sequence = 0