mirror of
https://git.rwth-aachen.de/acs/public/villas/node/
synced 2025-03-23 00:00:01 +01:00
git-svn-id: https://zerberus.eonerc.rwth-aachen.de:8443/svn/s2ss/trunk@165 8ec27952-4edc-4aab-86aa-e87bb2611832
89 lines
1.9 KiB
C
89 lines
1.9 KiB
C
/** Nodes
|
|
*
|
|
* The S2SS server connects multiple nodes.
|
|
* There are multiple types of nodes:
|
|
* - simulators
|
|
* - servers
|
|
* - workstations
|
|
*
|
|
* @author Steffen Vogel <stvogel@eonerc.rwth-aachen.de>
|
|
* @copyright 2014, Institute for Automation of Complex Power Systems, EONERC
|
|
* @file
|
|
*/
|
|
|
|
#ifndef _NODE_H_
|
|
#define _NODE_H_
|
|
|
|
#include <sys/socket.h>
|
|
#include <netinet/in.h>
|
|
#include <libconfig.h>
|
|
|
|
#include "msg.h"
|
|
#include "tc.h"
|
|
|
|
/** Static node initialization */
|
|
#define NODE_INIT(n) { \
|
|
.sd = -1, \
|
|
.name = n \
|
|
}
|
|
|
|
/** The datastructure for a node.
|
|
*
|
|
* Every entity which exchanges messages is represented by a node.
|
|
*/
|
|
struct node
|
|
{
|
|
/** The socket descriptor */
|
|
int sd;
|
|
|
|
/** A short identifier of the node, only used for configuration and logging */
|
|
const char *name;
|
|
|
|
/** Local address of the socket */
|
|
struct sockaddr_in local;
|
|
/** Remote address of the socket */
|
|
struct sockaddr_in remote;
|
|
|
|
/** The egress interface */
|
|
struct interface *interface;
|
|
|
|
/** Network emulator settings */
|
|
struct netem *netem;
|
|
|
|
/** Socket mark for netem, routing and filtering */
|
|
int mark;
|
|
|
|
/** A pointer to the libconfig object which instantiated this node */
|
|
config_setting_t *cfg;
|
|
|
|
/** Linked list pointer */
|
|
struct node *next;
|
|
};
|
|
|
|
/** Connect and bind the UDP socket of this node.
|
|
*
|
|
* @param n A pointer to the node structure
|
|
* @return
|
|
* - 0 on success
|
|
* - otherwise on error occured
|
|
*/
|
|
int node_connect(struct node *n);
|
|
|
|
/** Disconnect the UDP socket of this node.
|
|
*
|
|
* @param n A pointer to the node structure
|
|
* @return
|
|
* - 0 on success
|
|
* - otherwise on error occured
|
|
*/
|
|
int node_disconnect(struct node *n);
|
|
|
|
/** Search list of nodes for a name.
|
|
*
|
|
* @param str The name of the wanted node
|
|
* @param nodes A linked list of all nodes
|
|
* @return A pointer to the node or NULL if not found
|
|
*/
|
|
struct node* node_lookup_name(const char *str, struct node *nodes);
|
|
|
|
#endif /* _NODE_H_ */
|