summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/kiro-client.c228
-rw-r--r--src/kiro-client.h20
-rw-r--r--src/kiro-rdma.h188
-rw-r--r--src/kiro-server.c341
-rw-r--r--src/kiro-server.h14
-rw-r--r--src/kiro-trb.c226
-rw-r--r--src/kiro-trb.h68
7 files changed, 566 insertions, 519 deletions
diff --git a/src/kiro-client.c b/src/kiro-client.c
index 1fd7860..b930595 100644
--- a/src/kiro-client.c
+++ b/src/kiro-client.c
@@ -53,23 +53,25 @@ struct _KiroClientPrivate {
/* (Not accessible by properties) */
struct rdma_event_channel *ec; // Main Event Channel
struct rdma_cm_id *conn; // Connection to the Server
-
+
};
G_DEFINE_TYPE (KiroClient, kiro_client, G_TYPE_OBJECT);
-KiroClient*
-kiro_client_new (void) {
+KiroClient *
+kiro_client_new (void)
+{
return g_object_new (KIRO_TYPE_CLIENT, NULL);
}
-static void kiro_client_init (KiroClient *self)
+static void
+kiro_client_init (KiroClient *self)
{
- KiroClientPrivate *priv = KIRO_CLIENT_GET_PRIVATE(self);
- memset(priv, 0, sizeof(&priv));
+ KiroClientPrivate *priv = KIRO_CLIENT_GET_PRIVATE (self);
+ memset (priv, 0, sizeof (&priv));
}
static void
@@ -83,177 +85,183 @@ kiro_client_finalize (GObject *object)
static void
kiro_client_class_init (KiroClientClass *klass)
{
- GObjectClass *gobject_class = G_OBJECT_CLASS(klass);
+ GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
gobject_class->finalize = kiro_client_finalize;
- g_type_class_add_private(klass, sizeof(KiroClientPrivate));
+ g_type_class_add_private (klass, sizeof (KiroClientPrivate));
}
-int kiro_client_connect (KiroClient *self, char *address, char* port)
+int
+kiro_client_connect (KiroClient *self, char *address, char *port)
{
- KiroClientPrivate *priv = KIRO_CLIENT_GET_PRIVATE(self);
+ KiroClientPrivate *priv = KIRO_CLIENT_GET_PRIVATE (self);
- if(priv->conn)
- {
- printf("Already connected to server.\n");
+ if (priv->conn) {
+ printf ("Already connected to server.\n");
return -1;
}
-
+
struct rdma_addrinfo hints, *res_addrinfo;
- memset(&hints, 0, sizeof(hints));
+
+ memset (&hints, 0, sizeof (hints));
+
hints.ai_port_space = RDMA_PS_IB;
- if(rdma_getaddrinfo(address, port, &hints, &res_addrinfo))
- {
- printf("Failed to contruct address information for %s:%s\n",address, port);
+
+ if (rdma_getaddrinfo (address, port, &hints, &res_addrinfo)) {
+ printf ("Failed to contruct address information for %s:%s\n", address, port);
return -1;
}
- printf("Address information created.\n");
-
+
+ printf ("Address information created.\n");
struct ibv_qp_init_attr qp_attr;
- memset(&qp_attr, 0, sizeof(qp_attr));
+ memset (&qp_attr, 0, sizeof (qp_attr));
qp_attr.cap.max_send_wr = 10;
qp_attr.cap.max_recv_wr = 10;
qp_attr.cap.max_send_sge = 1;
qp_attr.cap.max_recv_sge = 1;
qp_attr.qp_context = priv->conn;
qp_attr.sq_sig_all = 1;
-
- if(rdma_create_ep(&(priv->conn), res_addrinfo, NULL, &qp_attr))
- {
- printf("Endpoint creation failed with error: %i\n", errno);
+
+ if (rdma_create_ep (& (priv->conn), res_addrinfo, NULL, &qp_attr)) {
+ printf ("Endpoint creation failed with error: %i\n", errno);
return -1;
}
- printf("Route to server resolved.\n");
-
- struct kiro_connection_context *ctx = (struct kiro_connection_context *)calloc(1,sizeof(struct kiro_connection_context));
- if(!ctx)
- {
- printf("Failed to create connection context.\n");
- rdma_destroy_ep(priv->conn);
+
+ printf ("Route to server resolved.\n");
+ struct kiro_connection_context *ctx = (struct kiro_connection_context *)calloc (1, sizeof (struct kiro_connection_context));
+
+ if (!ctx) {
+ printf ("Failed to create connection context.\n");
+ rdma_destroy_ep (priv->conn);
return -1;
}
-
- ctx->cf_mr_send = (struct kiro_rdma_mem *)calloc(1, sizeof(struct kiro_rdma_mem));
- ctx->cf_mr_recv = (struct kiro_rdma_mem *)calloc(1, sizeof(struct kiro_rdma_mem));
- if(!ctx->cf_mr_recv || !ctx->cf_mr_send)
- {
- printf("Failed to allocate Control Flow Memory Container.\n");
- kiro_destroy_connection_context(&ctx);
- rdma_destroy_ep(priv->conn);
+
+ ctx->cf_mr_send = (struct kiro_rdma_mem *)calloc (1, sizeof (struct kiro_rdma_mem));
+ ctx->cf_mr_recv = (struct kiro_rdma_mem *)calloc (1, sizeof (struct kiro_rdma_mem));
+
+ if (!ctx->cf_mr_recv || !ctx->cf_mr_send) {
+ printf ("Failed to allocate Control Flow Memory Container.\n");
+ kiro_destroy_connection_context (&ctx);
+ rdma_destroy_ep (priv->conn);
return -1;
}
-
- ctx->cf_mr_recv = kiro_create_rdma_memory(priv->conn->pd, sizeof(struct kiro_ctrl_msg), IBV_ACCESS_LOCAL_WRITE);
- ctx->cf_mr_send = kiro_create_rdma_memory(priv->conn->pd, sizeof(struct kiro_ctrl_msg), IBV_ACCESS_LOCAL_WRITE);
- if(!ctx->cf_mr_recv || !ctx->cf_mr_send)
- {
- printf("Failed to register control message memory.\n");
- kiro_destroy_connection_context(&ctx);
- rdma_destroy_ep(priv->conn);
+
+ ctx->cf_mr_recv = kiro_create_rdma_memory (priv->conn->pd, sizeof (struct kiro_ctrl_msg), IBV_ACCESS_LOCAL_WRITE);
+ ctx->cf_mr_send = kiro_create_rdma_memory (priv->conn->pd, sizeof (struct kiro_ctrl_msg), IBV_ACCESS_LOCAL_WRITE);
+
+ if (!ctx->cf_mr_recv || !ctx->cf_mr_send) {
+ printf ("Failed to register control message memory.\n");
+ kiro_destroy_connection_context (&ctx);
+ rdma_destroy_ep (priv->conn);
return -1;
}
- ctx->cf_mr_recv->size = ctx->cf_mr_send->size = sizeof(struct kiro_ctrl_msg);
+
+ ctx->cf_mr_recv->size = ctx->cf_mr_send->size = sizeof (struct kiro_ctrl_msg);
priv->conn->context = ctx;
-
- if(rdma_post_recv(priv->conn, priv->conn, ctx->cf_mr_recv->mem, ctx->cf_mr_recv->size, ctx->cf_mr_recv->mr))
- {
- printf("Posting preemtive receive for connection failed with error: %i\n", errno);
- kiro_destroy_connection_context(&ctx);
- rdma_destroy_ep(priv->conn);
+
+ if (rdma_post_recv (priv->conn, priv->conn, ctx->cf_mr_recv->mem, ctx->cf_mr_recv->size, ctx->cf_mr_recv->mr)) {
+ printf ("Posting preemtive receive for connection failed with error: %i\n", errno);
+ kiro_destroy_connection_context (&ctx);
+ rdma_destroy_ep (priv->conn);
return -1;
}
-
- if(rdma_connect(priv->conn, NULL))
- {
- printf("Failed to establish connection to the server.\n");
- kiro_destroy_connection_context(&ctx);
- rdma_destroy_ep(priv->conn);
+
+ if (rdma_connect (priv->conn, NULL)) {
+ printf ("Failed to establish connection to the server.\n");
+ kiro_destroy_connection_context (&ctx);
+ rdma_destroy_ep (priv->conn);
return -1;
}
- printf("Connected to server.\n");
-
-
+
+ printf ("Connected to server.\n");
struct ibv_wc wc;
- if(rdma_get_recv_comp(priv->conn, &wc) < 0)
- {
- printf("Failure waiting for POST from server.\n");
- rdma_disconnect(priv->conn);
- kiro_destroy_connection_context(&ctx);
- rdma_destroy_ep(priv->conn);
+
+ if (rdma_get_recv_comp (priv->conn, &wc) < 0) {
+ printf ("Failure waiting for POST from server.\n");
+ rdma_disconnect (priv->conn);
+ kiro_destroy_connection_context (&ctx);
+ rdma_destroy_ep (priv->conn);
return -1;
}
- printf("Got Message from Server.\n");
- ctx->peer_mr = (((struct kiro_ctrl_msg *)(ctx->cf_mr_recv->mem))->peer_mri);
- printf("Expected Memory Size is: %u\n",ctx->peer_mr.length);
-
- ctx->rdma_mr = kiro_create_rdma_memory(priv->conn->pd, ctx->peer_mr.length, IBV_ACCESS_LOCAL_WRITE);
- if(!ctx->rdma_mr)
- {
- printf("Failed to allocate memory for receive buffer.\n");
- rdma_disconnect(priv->conn);
- kiro_destroy_connection_context(&ctx);
- rdma_destroy_ep(priv->conn);
+
+ printf ("Got Message from Server.\n");
+ ctx->peer_mr = (((struct kiro_ctrl_msg *) (ctx->cf_mr_recv->mem))->peer_mri);
+ printf ("Expected Memory Size is: %u\n", ctx->peer_mr.length);
+ ctx->rdma_mr = kiro_create_rdma_memory (priv->conn->pd, ctx->peer_mr.length, IBV_ACCESS_LOCAL_WRITE);
+
+ if (!ctx->rdma_mr) {
+ printf ("Failed to allocate memory for receive buffer.\n");
+ rdma_disconnect (priv->conn);
+ kiro_destroy_connection_context (&ctx);
+ rdma_destroy_ep (priv->conn);
return -1;
}
- printf("Connection setup completed successfully!\n");
-
+
+ printf ("Connection setup completed successfully!\n");
return 0;
}
-int kiro_client_sync (KiroClient *self)
-{
- KiroClientPrivate *priv = KIRO_CLIENT_GET_PRIVATE(self);
+int
+kiro_client_sync (KiroClient *self)
+{
+ KiroClientPrivate *priv = KIRO_CLIENT_GET_PRIVATE (self);
struct kiro_connection_context *ctx = (struct kiro_connection_context *)priv->conn->context;
-
- if(rdma_post_read(priv->conn, priv->conn, ctx->rdma_mr->mem, ctx->peer_mr.length, ctx->rdma_mr->mr, 0, ctx->peer_mr.addr, ctx->peer_mr.rkey))
- {
- printf("Failed to read from server.\n");
- rdma_disconnect(priv->conn);
- kiro_destroy_connection_context(&ctx);
- rdma_destroy_ep(priv->conn);
+
+ if (rdma_post_read (priv->conn, priv->conn, ctx->rdma_mr->mem, ctx->peer_mr.length, ctx->rdma_mr->mr, 0, ctx->peer_mr.addr, ctx->peer_mr.rkey)) {
+ printf ("Failed to read from server.\n");
+ rdma_disconnect (priv->conn);
+ kiro_destroy_connection_context (&ctx);
+ rdma_destroy_ep (priv->conn);
return -1;
}
-
+
struct ibv_wc wc;
- if(rdma_get_send_comp(priv->conn, &wc) < 0)
- {
- printf("Failure reading from server.\n");
- rdma_disconnect(priv->conn);
- kiro_destroy_connection_context(&ctx);
- rdma_destroy_ep(priv->conn);
+
+ if (rdma_get_send_comp (priv->conn, &wc) < 0) {
+ printf ("Failure reading from server.\n");
+ rdma_disconnect (priv->conn);
+ kiro_destroy_connection_context (&ctx);
+ rdma_destroy_ep (priv->conn);
return -1;
}
+
return 0;
}
-void* kiro_client_get_memory (KiroClient *self)
+void *
+kiro_client_get_memory (KiroClient *self)
{
- KiroClientPrivate *priv = KIRO_CLIENT_GET_PRIVATE(self);
- if(!priv->conn)
+ KiroClientPrivate *priv = KIRO_CLIENT_GET_PRIVATE (self);
+
+ if (!priv->conn)
return NULL;
struct kiro_connection_context *ctx = (struct kiro_connection_context *)priv->conn->context;
- if(!ctx->rdma_mr)
+
+ if (!ctx->rdma_mr)
return NULL;
-
+
return ctx->rdma_mr->mem;
}
-size_t kiro_client_get_memory_size (KiroClient *self)
+size_t
+kiro_client_get_memory_size (KiroClient *self)
{
- KiroClientPrivate *priv = KIRO_CLIENT_GET_PRIVATE(self);
- if(!priv->conn)
+ KiroClientPrivate *priv = KIRO_CLIENT_GET_PRIVATE (self);
+
+ if (!priv->conn)
return 0;
struct kiro_connection_context *ctx = (struct kiro_connection_context *)priv->conn->context;
- if(!ctx->rdma_mr)
+
+ if (!ctx->rdma_mr)
return 0;
-
+
return ctx->rdma_mr->size;
}
diff --git a/src/kiro-client.h b/src/kiro-client.h
index fc98b3f..146845b 100644
--- a/src/kiro-client.h
+++ b/src/kiro-client.h
@@ -24,7 +24,7 @@
* KiroClient implements the client / active / consumer side of the the RDMA
* Communication Channel. It uses a KIRO-CLIENT to manage data read from the Server.
*/
-
+
#ifndef __KIRO_CLIENT_H
#define __KIRO_CLIENT_H
@@ -47,9 +47,9 @@ typedef struct _KiroClientPrivate KiroClientPrivate;
struct _KiroClient {
-
+
GObject parent;
-
+
/*< private >*/
KiroClientPrivate *priv;
};
@@ -62,9 +62,9 @@ struct _KiroClient {
*/
struct _KiroClientClass {
-
+
GObjectClass parent_class;
-
+
};
@@ -72,18 +72,18 @@ struct _KiroClientClass {
/* GObject and GType functions */
GType kiro_client_get_type (void);
-KiroClient* kiro_client_new (void);
+KiroClient *kiro_client_new (void);
/* client functions */
-int kiro_client_connect (KiroClient* client, char* dest_addr, char* dest_port);
+int kiro_client_connect (KiroClient *client, char *dest_addr, char *dest_port);
-int kiro_client_sync (KiroClient* client);
+int kiro_client_sync (KiroClient *client);
-void* kiro_client_get_memory (KiroClient* client);
+void *kiro_client_get_memory (KiroClient *client);
-size_t kior_client_get_memory_size (KiroClient* client);
+size_t kior_client_get_memory_size (KiroClient *client);
G_END_DECLS
diff --git a/src/kiro-rdma.h b/src/kiro-rdma.h
index 8779b2e..2ebbcf6 100644
--- a/src/kiro-rdma.h
+++ b/src/kiro-rdma.h
@@ -25,9 +25,9 @@
#include <rdma/rdma_cma.h>
-
+
struct kiro_connection_context {
-
+
// Information and necessary structurs
uint32_t identifier; // Unique Identifier for this connection (Application Specific)
struct kiro_rdma_mem *cf_mr_recv; // Control-Flow Memory Region Receive
@@ -35,52 +35,52 @@ struct kiro_connection_context {
struct kiro_rdma_mem *rdma_mr; // Memory Region for RDMA Operations
struct ibv_mr peer_mr; // RDMA Memory Region Information of the peer
-
+
enum {
KIRO_IDLE,
KIRO_MRI_REQUESTED, // Memory Region Information Requested
KIRO_RDMA_ESTABLISHED, // MRI Exchange complete. RDMA is ready
KIRO_RDMA_ACTIVE // RDMA Operation is being performed
} rdma_state;
-
+
};
struct kiro_ctrl_msg {
-
+
enum {
KIRO_REQ_RDMA, // Requesting RDMA Access to/from the peer
KIRO_ACK_RDMA, // acknowledge RDMA Request and provide Memory Region Information
KIRO_REJ_RDMA // RDMA Request rejected :( (peer_mri will be invalid)
} msg_type;
-
+
struct ibv_mr peer_mri;
-
+
};
struct kiro_rdma_mem {
-
- void *mem; // Pointer to the beginning of the memory block
+
+ void *mem; // Pointer to the beginning of the memory block
struct ibv_mr *mr; // Memory Region associated with the memory
size_t size; // Size in Bytes of the memory block
};
-static int kiro_attach_qp (struct rdma_cm_id *id)
+static int
+kiro_attach_qp (struct rdma_cm_id *id)
{
- if(!id)
+ if (!id)
return -1;
-
- id->pd = ibv_alloc_pd(id->verbs);
- id->send_cq_channel = ibv_create_comp_channel(id->verbs);
+
+ id->pd = ibv_alloc_pd (id->verbs);
+ id->send_cq_channel = ibv_create_comp_channel (id->verbs);
id->recv_cq_channel = id->send_cq_channel; //we use one shared completion channel
- id->send_cq = ibv_create_cq(id->verbs, 1, id, id->send_cq_channel, 0);
+ id->send_cq = ibv_create_cq (id->verbs, 1, id, id->send_cq_channel, 0);
id->recv_cq = id->send_cq; //we use one shared completion queue
-
struct ibv_qp_init_attr qp_attr;
- memset(&qp_attr, 0, sizeof(struct ibv_qp_init_attr));
+ memset (&qp_attr, 0, sizeof (struct ibv_qp_init_attr));
qp_attr.qp_context = (uintptr_t)id;
qp_attr.send_cq = id->send_cq;
qp_attr.recv_cq = id->recv_cq;
@@ -89,131 +89,129 @@ static int kiro_attach_qp (struct rdma_cm_id *id)
qp_attr.cap.max_recv_wr = 1;
qp_attr.cap.max_send_sge = 1;
qp_attr.cap.max_recv_sge = 1;
-
- return rdma_create_qp(id, id->pd, &qp_attr);
+ return rdma_create_qp (id, id->pd, &qp_attr);
}
-static int kiro_register_rdma_memory (struct ibv_pd *pd, struct ibv_mr **mr, void *mem, size_t mem_size, int access)
+static int
+kiro_register_rdma_memory (struct ibv_pd *pd, struct ibv_mr **mr, void *mem, size_t mem_size, int access)
{
-
- if(mem_size == 0)
- {
- printf("Cant allocate memory of size '0'.\n");
+ if (mem_size == 0) {
+ printf ("Cant allocate memory of size '0'.\n");
return -1;
}
-
+
void *mem_handle = mem;
-
- if(!mem_handle)
- mem_handle = malloc(mem_size);
-
- if(!mem_handle)
- {
- printf("Failed to allocate memory [Register Memory].");
+
+ if (!mem_handle)
+ mem_handle = malloc (mem_size);
+
+ if (!mem_handle) {
+ printf ("Failed to allocate memory [Register Memory].");
return -1;
- }
-
- *mr = ibv_reg_mr(pd, mem_handle, mem_size, access);
- if(!(*mr))
- {
+ }
+
+ *mr = ibv_reg_mr (pd, mem_handle, mem_size, access);
+
+ if (! (*mr)) {
// Memory Registration failed
- printf("Failed to register memory region!\n");
- free(mem_handle);
+ printf ("Failed to register memory region!\n");
+ free (mem_handle);
return -1;
}
-
+
return 0;
}
-static struct kiro_rdma_mem* kiro_create_rdma_memory (struct ibv_pd *pd, size_t mem_size, int access)
+static struct kiro_rdma_mem *
+kiro_create_rdma_memory (struct ibv_pd *pd, size_t mem_size, int access)
{
- if(mem_size == 0)
- {
- printf("Cant allocate memory of size '0'.\n");
+ if (mem_size == 0) {
+ printf ("Cant allocate memory of size '0'.\n");
return NULL;
}
-
- struct kiro_rdma_mem *krm = (struct kiro_rdma_mem *)calloc(1, sizeof(struct kiro_rdma_mem));
- if(!krm)
- {
- printf("Failed to create new KIRO RDMA Memory.\n");
+
+ struct kiro_rdma_mem *krm = (struct kiro_rdma_mem *)calloc (1, sizeof (struct kiro_rdma_mem));
+
+ if (!krm) {
+ printf ("Failed to create new KIRO RDMA Memory.\n");
return NULL;
}
-
- if(kiro_register_rdma_memory(pd, &(krm->mr), krm->mem, mem_size, access))
- {
- free(krm);
+
+ if (kiro_register_rdma_memory (pd, & (krm->mr), krm->mem, mem_size, access)) {
+ free (krm);
return NULL;
}
-
- if(!krm->mem)
+
+ if (!krm->mem)
krm->mem = krm->mr->addr;
-
-
+
return krm;
-
}
-static void kiro_destroy_rdma_memory (struct kiro_rdma_mem *krm)
+static void
+kiro_destroy_rdma_memory (struct kiro_rdma_mem *krm)
{
- if(!krm)
+ if (!krm)
return;
-
- if(krm->mr)
- ibv_dereg_mr(krm->mr);
-
- if(krm->mem)
- free(krm->mem);
-
- free(krm);
+
+ if (krm->mr)
+ ibv_dereg_mr (krm->mr);
+
+ if (krm->mem)
+ free (krm->mem);
+
+ free (krm);
krm = NULL;
}
-static void kiro_destroy_connection_context (struct kiro_connection_context **ctx)
+static void
+kiro_destroy_connection_context (struct kiro_connection_context **ctx)
{
- if(!ctx)
+ if (!ctx)
return;
-
- if(!(*ctx))
+
+ if (! (*ctx))
return;
-
- if((*ctx)->cf_mr_recv)
- kiro_destroy_rdma_memory((*ctx)->cf_mr_recv);
- if((*ctx)->cf_mr_send)
- kiro_destroy_rdma_memory((*ctx)->cf_mr_send);
-
+
+ if ((*ctx)->cf_mr_recv)
+ kiro_destroy_rdma_memory ((*ctx)->cf_mr_recv);
+
+ if ((*ctx)->cf_mr_send)
+ kiro_destroy_rdma_memory ((*ctx)->cf_mr_send);
+
//The RDMA-Memory Region normally contains allocated memory from the USER that has
//just been 'registered' for RDMA. DON'T free it! Just deregister it. The user is
- //responsible for freeing this memory.
- if((*ctx)->rdma_mr)
- {
- if((*ctx)->rdma_mr->mr)
- ibv_dereg_mr((*ctx)->rdma_mr->mr);
-
- free((*ctx)->rdma_mr);
+ //responsible for freeing this memory.
+ if ((*ctx)->rdma_mr) {
+ if ((*ctx)->rdma_mr->mr)
+ ibv_dereg_mr ((*ctx)->rdma_mr->mr);
+
+ free ((*ctx)->rdma_mr);
(*ctx)->rdma_mr = NULL;
}
- free(*ctx);
+ free (*ctx);
*ctx = NULL;
}
-static void kiro_destroy_connection (struct rdma_cm_id **conn)
+static void
+kiro_destroy_connection (struct rdma_cm_id **conn)
{
- if(!(*conn))
+ if (! (*conn))
return;
-
- rdma_disconnect(*conn);
- struct kiro_connection_context *ctx = (struct kiro_connection_context *)((*conn)->context);
- if(ctx)
- kiro_destroy_connection_context(&ctx);
-
- rdma_destroy_ep(*conn);
+
+ rdma_disconnect (*conn);
+ struct kiro_connection_context *ctx = (struct kiro_connection_context *) ((*conn)->context);
+
+ if (ctx)
+ kiro_destroy_connection_context (&ctx);
+
+ rdma_destroy_ep (*conn);
*conn = NULL;
}
diff --git a/src/kiro-server.c b/src/kiro-server.c
index 15a8ccb..c69b6e7 100644
--- a/src/kiro-server.c
+++ b/src/kiro-server.c
@@ -65,265 +65,261 @@ struct _KiroServerPrivate {
G_DEFINE_TYPE (KiroServer, kiro_server, G_TYPE_OBJECT);
-KiroServer*
-kiro_server_new (void) {
+KiroServer *
+kiro_server_new (void)
+{
return g_object_new (KIRO_TYPE_SERVER, NULL);
}
-static void kiro_server_init (KiroServer *self)
+static void
+kiro_server_init (KiroServer *self)
{
- KiroServerPrivate *priv = KIRO_SERVER_GET_PRIVATE(self);
- memset(priv, 0, sizeof(&priv));
+ KiroServerPrivate *priv = KIRO_SERVER_GET_PRIVATE (self);
+ memset (priv, 0, sizeof (&priv));
}
static void
kiro_server_finalize (GObject *object)
{
- KiroServer *self = KIRO_SERVER(object);
-
+ KiroServer *self = KIRO_SERVER (object);
//Clean up the server
- kiro_server_stop(self);
+ kiro_server_stop (self);
}
static void
kiro_server_class_init (KiroServerClass *klass)
{
- GObjectClass *gobject_class = G_OBJECT_CLASS(klass);
+ GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
gobject_class->finalize = kiro_server_finalize;
- g_type_class_add_private(klass, sizeof(KiroServerPrivate));
+ g_type_class_add_private (klass, sizeof (KiroServerPrivate));
}
-static int connect_client (struct rdma_cm_id *client)
+static int
+connect_client (struct rdma_cm_id *client)
{
- if(!client)
+ if (!client)
return -1;
-
- if( -1 == kiro_attach_qp(client))
- {
- printf("Could not create a QP for the new connection.\n");
- rdma_destroy_id(client);
+
+ if ( -1 == kiro_attach_qp (client)) {
+ printf ("Could not create a QP for the new connection.\n");
+ rdma_destroy_id (client);
return -1;
}
-
- struct kiro_connection_context *ctx = (struct kiro_connection_context *)calloc(1,sizeof(struct kiro_connection_context));
- if(!ctx)
- {
- printf("Failed to create connection context.\n");
- rdma_destroy_id(client);
+
+ struct kiro_connection_context *ctx = (struct kiro_connection_context *)calloc (1, sizeof (struct kiro_connection_context));
+
+ if (!ctx) {
+ printf ("Failed to create connection context.\n");
+ rdma_destroy_id (client);
return -1;
}
-
- ctx->cf_mr_send = (struct kiro_rdma_mem *)calloc(1, sizeof(struct kiro_rdma_mem));
- ctx->cf_mr_recv = (struct kiro_rdma_mem *)calloc(1, sizeof(struct kiro_rdma_mem));
- if(!ctx->cf_mr_recv || !ctx->cf_mr_send)
- {
- printf("Failed to allocate Control Flow Memory Container.\n");
+
+ ctx->cf_mr_send = (struct kiro_rdma_mem *)calloc (1, sizeof (struct kiro_rdma_mem));
+ ctx->cf_mr_recv = (struct kiro_rdma_mem *)calloc (1, sizeof (struct kiro_rdma_mem));
+
+ if (!ctx->cf_mr_recv || !ctx->cf_mr_send) {
+ printf ("Failed to allocate Control Flow Memory Container.\n");
goto error;
}
-
- ctx->cf_mr_recv = kiro_create_rdma_memory(client->pd, sizeof(struct kiro_ctrl_msg), IBV_ACCESS_LOCAL_WRITE);
- ctx->cf_mr_send = kiro_create_rdma_memory(client->pd, sizeof(struct kiro_ctrl_msg), IBV_ACCESS_LOCAL_WRITE);
- if(!ctx->cf_mr_recv || !ctx->cf_mr_send)
- {
- printf("Failed to register control message memory.\n");
+
+ ctx->cf_mr_recv = kiro_create_rdma_memory (client->pd, sizeof (struct kiro_ctrl_msg), IBV_ACCESS_LOCAL_WRITE);
+ ctx->cf_mr_send = kiro_create_rdma_memory (client->pd, sizeof (struct kiro_ctrl_msg), IBV_ACCESS_LOCAL_WRITE);
+
+ if (!ctx->cf_mr_recv || !ctx->cf_mr_send) {
+ printf ("Failed to register control message memory.\n");
goto error;
}
- ctx->cf_mr_recv->size = ctx->cf_mr_send->size = sizeof(struct kiro_ctrl_msg);
+
+ ctx->cf_mr_recv->size = ctx->cf_mr_send->size = sizeof (struct kiro_ctrl_msg);
client->context = ctx;
-
- if(rdma_post_recv(client, client, ctx->cf_mr_recv->mem, ctx->cf_mr_recv->size, ctx->cf_mr_recv->mr))
- {
- printf("Posting preemtive receive for connection failed.\n");
+
+ if (rdma_post_recv (client, client, ctx->cf_mr_recv->mem, ctx->cf_mr_recv->size, ctx->cf_mr_recv->mr)) {
+ printf ("Posting preemtive receive for connection failed.\n");
goto error;
}
-
- if(rdma_accept(client, NULL))
- {
- printf("Failed to establish connection to the client with error: %i.\n", errno);
+
+ if (rdma_accept (client, NULL)) {
+ printf ("Failed to establish connection to the client with error: %i.\n", errno);
goto error;
}
- printf("Client Connected.\n");
- return 0;
-
+ printf ("Client Connected.\n");
+ return 0;
error:
- rdma_reject(client, NULL, 0);
- kiro_destroy_connection_context(&ctx);
- rdma_destroy_id(client);
+ rdma_reject (client, NULL, 0);
+ kiro_destroy_connection_context (&ctx);
+ rdma_destroy_id (client);
return -1;
}
-static int welcome_client (struct rdma_cm_id *client, void *mem, size_t mem_size)
+static int
+welcome_client (struct rdma_cm_id *client, void *mem, size_t mem_size)
{
- struct kiro_connection_context *ctx = (struct kiro_connection_context *)(client->context);
- ctx->rdma_mr = (struct kiro_rdma_mem *)calloc(1, sizeof(struct kiro_rdma_mem));
- if(!ctx->rdma_mr)
- {
- printf("Failed to allocate RDMA Memory Container.\n");
+ struct kiro_connection_context *ctx = (struct kiro_connection_context *) (client->context);
+ ctx->rdma_mr = (struct kiro_rdma_mem *)calloc (1, sizeof (struct kiro_rdma_mem));
+
+ if (!ctx->rdma_mr) {
+ printf ("Failed to allocate RDMA Memory Container.\n");
return -1;
}
-
+
ctx->rdma_mr->mem = mem;
ctx->rdma_mr->size = mem_size;
- ctx->rdma_mr->mr = rdma_reg_read(client, ctx->rdma_mr->mem, ctx->rdma_mr->size);
- if(!ctx->rdma_mr->mr)
- {
- printf("Failed to register RDMA Memory Region.\n");
- kiro_destroy_rdma_memory(ctx->rdma_mr);
+ ctx->rdma_mr->mr = rdma_reg_read (client, ctx->rdma_mr->mem, ctx->rdma_mr->size);
+
+ if (!ctx->rdma_mr->mr) {
+ printf ("Failed to register RDMA Memory Region.\n");
+ kiro_destroy_rdma_memory (ctx->rdma_mr);
return -1;
}
-
- struct kiro_ctrl_msg *msg = (struct kiro_ctrl_msg *)(ctx->cf_mr_send->mem);
+
+ struct kiro_ctrl_msg *msg = (struct kiro_ctrl_msg *) (ctx->cf_mr_send->mem);
+
msg->msg_type = KIRO_ACK_RDMA;
- msg->peer_mri = *(ctx->rdma_mr->mr);
-
- if(rdma_post_send(client, client, ctx->cf_mr_send->mem, ctx->cf_mr_send->size, ctx->cf_mr_send->mr, IBV_SEND_SIGNALED))
- {
- printf("Failure while trying to post SEND.\n");
- kiro_destroy_rdma_memory(ctx->rdma_mr);
+
+ msg->peer_mri = * (ctx->rdma_mr->mr);
+
+ if (rdma_post_send (client, client, ctx->cf_mr_send->mem, ctx->cf_mr_send->size, ctx->cf_mr_send->mr, IBV_SEND_SIGNALED)) {
+ printf ("Failure while trying to post SEND.\n");
+ kiro_destroy_rdma_memory (ctx->rdma_mr);
return -1;
}
-
+
struct ibv_wc wc;
-
- if(rdma_get_send_comp(client, &wc) < 0)
- {
- printf("Failed to post RDMA MRI to client.\n");
- kiro_destroy_rdma_memory(ctx->rdma_mr);
+
+ if (rdma_get_send_comp (client, &wc) < 0) {
+ printf ("Failed to post RDMA MRI to client.\n");
+ kiro_destroy_rdma_memory (ctx->rdma_mr);
return -1;
}
- printf("RDMA MRI sent to client.\n");
+ printf ("RDMA MRI sent to client.\n");
return 0;
}
-void * event_loop (void *self)
+void *
+event_loop (void *self)
{
- KiroServerPrivate *priv = KIRO_SERVER_GET_PRIVATE((KiroServer *)self);
+ KiroServerPrivate *priv = KIRO_SERVER_GET_PRIVATE ((KiroServer *)self);
struct rdma_cm_event *active_event;
- while(0 == priv->close_signal) {
- if(0 <= rdma_get_cm_event(priv->ec, &active_event))
- {
+ while (0 == priv->close_signal) {
+ if (0 <= rdma_get_cm_event (priv->ec, &active_event)) {
//Disable cancellation to prevent undefined states during shutdown
- pthread_setcancelstate(PTHREAD_CANCEL_DISABLE, NULL);
-
- struct rdma_cm_event *ev = malloc(sizeof(*active_event));
- if(!ev)
- {
- printf("Unable to allocate memory for Event handling!\n");
- rdma_ack_cm_event(active_event);
+ pthread_setcancelstate (PTHREAD_CANCEL_DISABLE, NULL);
+ struct rdma_cm_event *ev = malloc (sizeof (*active_event));
+
+ if (!ev) {
+ printf ("Unable to allocate memory for Event handling!\n");
+ rdma_ack_cm_event (active_event);
continue;
}
- memcpy(ev, active_event, sizeof(*active_event));
- rdma_ack_cm_event(active_event);
-
- if (ev->event == RDMA_CM_EVENT_CONNECT_REQUEST)
- {
-
- if (0 != priv->close_signal)
- {
+
+ memcpy (ev, active_event, sizeof (*active_event));
+ rdma_ack_cm_event (active_event);
+
+ if (ev->event == RDMA_CM_EVENT_CONNECT_REQUEST) {
+ if (0 != priv->close_signal) {
//Main thread has signalled shutdown!
- //Don't connect this client any more
+ //Don't connect this client any more.
//Sorry mate!
- rdma_reject(ev->id, NULL, 0);
+ rdma_reject (ev->id, NULL, 0);
}
-
- if(0 == connect_client(ev->id)) {
+
+ if (0 == connect_client (ev->id)) {
// Post a welcoming "Recieve" for handshaking
- if (0 == welcome_client(ev->id, priv->mem, priv->mem_size)) {
+ if (0 == welcome_client (ev->id, priv->mem, priv->mem_size)) {
// Connection set-up successfully! (Server)
- struct kiro_connection_context *ctx = (struct kiro_connection_context *)(ev->id->context);
+ struct kiro_connection_context *ctx = (struct kiro_connection_context *) (ev->id->context);
ctx->identifier = priv->next_client_id++;
priv->clients = g_list_append (priv->clients, (gpointer)ev->id);
- printf("Client id %u connected\n", ctx->identifier);
- printf("Currently %u clients in total are connected.\n", g_list_length (priv->clients));
+ printf ("Client id %u connected\n", ctx->identifier);
+ printf ("Currently %u clients in total are connected.\n", g_list_length (priv->clients));
}
}
}
- else if(ev->event == RDMA_CM_EVENT_DISCONNECTED)
- {
+ else if (ev->event == RDMA_CM_EVENT_DISCONNECTED) {
GList *client = g_list_find (priv->clients, (gconstpointer) ev->id);
+
if (client) {
- struct kiro_connection_context *ctx = (struct kiro_connection_context *)(ev->id->context);
+ struct kiro_connection_context *ctx = (struct kiro_connection_context *) (ev->id->context);
printf ("Got disconnect request from client %u.\n", ctx->identifier);
priv->clients = g_list_delete_link (priv->clients, client);
}
else
- printf("Got disconnect request from unknown client.\n");
+ printf ("Got disconnect request from unknown client.\n");
- kiro_destroy_connection(&(ev->id));
- printf("Connection closed successfully. %u connected clients remaining.\n", g_list_length (priv->clients));
- }
- free(ev);
+ kiro_destroy_connection (& (ev->id));
+ printf ("Connection closed successfully. %u connected clients remaining.\n", g_list_length (priv->clients));
+ }
+
+ free (ev);
}
- pthread_setcancelstate(PTHREAD_CANCEL_ENABLE, NULL);
+
+ pthread_setcancelstate (PTHREAD_CANCEL_ENABLE, NULL);
}
- printf("Closing Event Listener Thread\n");
+ printf ("Closing Event Listener Thread\n");
return NULL;
}
-int kiro_server_start (KiroServer *self, char *address, char *port, void* mem, size_t mem_size)
+int
+kiro_server_start (KiroServer *self, char *address, char *port, void *mem, size_t mem_size)
{
- KiroServerPrivate *priv = KIRO_SERVER_GET_PRIVATE(self);
+ KiroServerPrivate *priv = KIRO_SERVER_GET_PRIVATE (self);
- if(priv->base)
- {
- printf("Server already started.\n");
+ if (priv->base) {
+ printf ("Server already started.\n");
return -1;
}
-
- if(!mem || mem_size == 0)
- {
- printf("Invalid memory given to provide.\n");
+
+ if (!mem || mem_size == 0) {
+ printf ("Invalid memory given to provide.\n");
return -1;
}
-
+
struct rdma_addrinfo hints, *res_addrinfo;
- memset(&hints, 0, sizeof(hints));
+ memset (&hints, 0, sizeof (hints));
hints.ai_port_space = RDMA_PS_IB;
hints.ai_flags = RAI_PASSIVE;
- if(rdma_getaddrinfo(address, port, &hints, &res_addrinfo))
- {
- printf("Failed to create address information.");
+
+ if (rdma_getaddrinfo (address, port, &hints, &res_addrinfo)) {
+ printf ("Failed to create address information.");
return -1;
}
-
+
struct ibv_qp_init_attr qp_attr;
- memset(&qp_attr, 0, sizeof(qp_attr));
+ memset (&qp_attr, 0, sizeof (qp_attr));
qp_attr.cap.max_send_wr = 10;
qp_attr.cap.max_recv_wr = 10;
qp_attr.cap.max_send_sge = 1;
qp_attr.cap.max_recv_sge = 1;
qp_attr.qp_context = priv->base;
qp_attr.sq_sig_all = 1;
-
- if(rdma_create_ep(&(priv->base), res_addrinfo, NULL, &qp_attr))
- {
- printf("Endpoint creation failed: %s.\n", strerror (errno));
+
+ if (rdma_create_ep (& (priv->base), res_addrinfo, NULL, &qp_attr)) {
+ printf ("Endpoint creation failed: %s.\n", strerror (errno));
return -1;
}
- printf("Endpoint created.\n");
-
+
+ printf ("Endpoint created.\n");
char *addr_local = NULL;
- struct sockaddr* src_addr = rdma_get_local_addr(priv->base);
- if(!src_addr)
- {
+ struct sockaddr *src_addr = rdma_get_local_addr (priv->base);
+
+ if (!src_addr) {
addr_local = "NONE";
}
- else
- {
- addr_local = inet_ntoa(((struct sockaddr_in *)src_addr)->sin_addr);
+ else {
+ addr_local = inet_ntoa (((struct sockaddr_in *)src_addr)->sin_addr);
/*
if(src_addr->sa_family == AF_INET)
addr_local = &(((struct sockaddr_in*)src_addr)->sin_addr);
@@ -331,32 +327,28 @@ int kiro_server_start (KiroServer *self, char *address, char *port, void* mem, s
addr_local = &(((struct sockaddr_in6*)src_addr)->sin6_addr);
*/
}
-
- printf("Bound to address %s:%s\n",addr_local, port);
-
- if(rdma_listen(priv->base, 0))
- {
- printf("Failed to put server into listening state.\n");
- rdma_destroy_ep(priv->base);
+
+ printf ("Bound to address %s:%s\n", addr_local, port);
+
+ if (rdma_listen (priv->base, 0)) {
+ printf ("Failed to put server into listening state.\n");
+ rdma_destroy_ep (priv->base);
return -1;
}
-
+
priv->mem = mem;
priv->mem_size = mem_size;
+ priv->ec = rdma_create_event_channel();
- priv->ec = rdma_create_event_channel();
- if(rdma_migrate_id(priv->base, priv->ec))
- {
- printf("Was unable to migrate connection to new Event Channel.\n");
- rdma_destroy_ep(priv->base);
+ if (rdma_migrate_id (priv->base, priv->ec)) {
+ printf ("Was unable to migrate connection to new Event Channel.\n");
+ rdma_destroy_ep (priv->base);
return -1;
}
- pthread_create(&(priv->event_listener), NULL, event_loop, self);
-
- printf("Enpoint listening.\n");
-
- sleep(1);
+ pthread_create (& (priv->event_listener), NULL, event_loop, self);
+ printf ("Enpoint listening.\n");
+ sleep (1);
return 0;
}
@@ -366,7 +358,7 @@ disconnect_client (gpointer data, gpointer user_data)
{
if (data) {
struct rdma_cm_id *id = (struct rdma_cm_id *)data;
- struct kiro_connection_context *ctx = (struct kiro_connection_context *)(id->context);
+ struct kiro_connection_context *ctx = (struct kiro_connection_context *) (id->context);
printf ("Disconnecting client: %u.\n", ctx->identifier);
rdma_disconnect ((struct rdma_cm_id *) data);
}
@@ -376,30 +368,29 @@ disconnect_client (gpointer data, gpointer user_data)
void
kiro_server_stop (KiroServer *self)
{
- if(!self)
+ if (!self)
return;
-
+
KiroServerPrivate *priv = KIRO_SERVER_GET_PRIVATE (self);
-
- if(!priv->base)
+
+ if (!priv->base)
return;
-
+
//Shut down the listener-thread
priv->close_signal = 1;
- pthread_cancel(priv->event_listener);
- pthread_join(priv->event_listener, NULL);
- printf("Event Listener Thread stopped.\n");
+ pthread_cancel (priv->event_listener);
+ pthread_join (priv->event_listener, NULL);
+ printf ("Event Listener Thread stopped.\n");
priv->close_signal = 0;
g_list_foreach (priv->clients, disconnect_client, NULL);
g_list_free (priv->clients);
-
- rdma_destroy_ep(priv->base);
+
+ rdma_destroy_ep (priv->base);
priv->base = NULL;
- rdma_destroy_event_channel(priv->ec);
+ rdma_destroy_event_channel (priv->ec);
priv->ec = NULL;
-
- printf("Server stopped successfully.\n");
+ printf ("Server stopped successfully.\n");
}
diff --git a/src/kiro-server.h b/src/kiro-server.h
index 9a70488..e0de71c 100644
--- a/src/kiro-server.h
+++ b/src/kiro-server.h
@@ -24,7 +24,7 @@
* KiroServer implements the server / passive / provider side of the the RDMA
* Communication Channel. It uses a KIRO-TRB to manage its data.
*/
-
+
#ifndef __KIRO_SERVER_H
#define __KIRO_SERVER_H
@@ -47,9 +47,9 @@ typedef struct _KiroServerPrivate KiroServerPrivate;
struct _KiroServer {
-
+
GObject parent;
-
+
/*< private >*/
KiroServerPrivate *priv;
};
@@ -62,9 +62,9 @@ struct _KiroServer {
*/
struct _KiroServerClass {
-
+
GObjectClass parent_class;
-
+
};
@@ -99,7 +99,7 @@ KiroServer* kiro_server_new (void);
* kiro_trb_reshape, kiro_trb_adopt,
* kiro_trb_clone
*/
-int kiro_server_start (KiroServer* server, char* bind_addr, char* bind_port, void* mem, size_t mem_size);
+int kiro_server_start (KiroServer *server, char *bind_addr, char *bind_port, void *mem, size_t mem_size);
/**
* kiro_server_stop - Stops the server
@@ -109,7 +109,7 @@ int kiro_server_start (KiroServer* server, char* bind_addr, char* bind_port, voi
* See also:
* kiro_server_start
*/
-void kiro_server_stop (KiroServer* server);
+void kiro_server_stop (KiroServer *server);
G_END_DECLS
diff --git a/src/kiro-trb.c b/src/kiro-trb.c
index bb4a769..6737f83 100644
--- a/src/kiro-trb.c
+++ b/src/kiro-trb.c
@@ -27,7 +27,7 @@
*/
#include <stdio.h>
-
+
#include <stdlib.h>
#include <string.h>
#include <glib.h>
@@ -51,10 +51,10 @@ struct _KiroTrbPrivate {
void *mem; // Access to the actual buffer in Memory
void *frame_top; // First byte of the buffer storage
void *current; // Pointer to the current fill state
- uint64_t element_size;
+ uint64_t element_size;
uint64_t max_elements;
uint64_t iteration; // How many times the buffer has wraped around
-
+
/* easy access */
uint64_t buff_size;
};
@@ -63,8 +63,9 @@ struct _KiroTrbPrivate {
G_DEFINE_TYPE (KiroTrb, kiro_trb, G_TYPE_OBJECT);
-KiroTrb*
-kiro_trb_new (void) {
+KiroTrb *
+kiro_trb_new (void)
+{
return g_object_new (KIRO_TYPE_TRB, NULL);
}
@@ -72,111 +73,131 @@ kiro_trb_new (void) {
static
void kiro_trb_init (KiroTrb *self)
{
- KiroTrbPrivate *priv = KIRO_TRB_GET_PRIVATE(self);
+ KiroTrbPrivate *priv = KIRO_TRB_GET_PRIVATE (self);
priv->initialized = 0;
}
static void
kiro_trb_finalize (GObject *object)
{
- KiroTrb *self = KIRO_TRB(object);
- KiroTrbPrivate *priv = KIRO_TRB_GET_PRIVATE(self);
- if(priv->mem)
- free(priv->mem);
+ KiroTrb *self = KIRO_TRB (object);
+ KiroTrbPrivate *priv = KIRO_TRB_GET_PRIVATE (self);
+
+ if (priv->mem)
+ free (priv->mem);
}
static void
kiro_trb_class_init (KiroTrbClass *klass)
{
- GObjectClass *gobject_class = G_OBJECT_CLASS(klass);
+ GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
gobject_class->finalize = kiro_trb_finalize;
- g_type_class_add_private(klass, sizeof(KiroTrbPrivate));
+ g_type_class_add_private (klass, sizeof (KiroTrbPrivate));
}
/* Privat functions */
-void write_header (KiroTrbPrivate* priv)
+void
+write_header (KiroTrbPrivate *priv)
{
- if(!priv)
+ if (!priv)
return;
- struct KiroTrbInfo* tmp_info = (struct KiroTrbInfo*)priv->mem;
+
+ struct KiroTrbInfo *tmp_info = (struct KiroTrbInfo *)priv->mem;
tmp_info->buffer_size_bytes = priv->buff_size;
tmp_info->element_size = priv->element_size;
tmp_info->offset = (priv->iteration * priv->max_elements) + ((priv->current - priv->frame_top) / priv->element_size);
- memcpy(priv->mem, tmp_info, sizeof(struct KiroTrbInfo));
+ memcpy (priv->mem, tmp_info, sizeof (struct KiroTrbInfo));
}
/* TRB functions */
-uint64_t kiro_trb_get_element_size (KiroTrb* self)
+uint64_t
+kiro_trb_get_element_size (KiroTrb *self)
{
- KiroTrbPrivate* priv = KIRO_TRB_GET_PRIVATE(self);
- if(priv->initialized != 1)
+ KiroTrbPrivate *priv = KIRO_TRB_GET_PRIVATE (self);
+
+ if (priv->initialized != 1)
return 0;
+
return priv->element_size;
}
-uint64_t kiro_trb_get_max_elements (KiroTrb* self)
+uint64_t
+kiro_trb_get_max_elements (KiroTrb *self)
{
- KiroTrbPrivate* priv = KIRO_TRB_GET_PRIVATE(self);
- if(priv->initialized != 1)
+ KiroTrbPrivate *priv = KIRO_TRB_GET_PRIVATE (self);
+
+ if (priv->initialized != 1)
return 0;
+
return priv->max_elements;
}
-uint64_t kiro_trb_get_raw_size (KiroTrb* self)
+uint64_t
+kiro_trb_get_raw_size (KiroTrb *self)
{
- KiroTrbPrivate* priv = KIRO_TRB_GET_PRIVATE(self);
- if(priv->initialized != 1)
+ KiroTrbPrivate *priv = KIRO_TRB_GET_PRIVATE (self);
+
+ if (priv->initialized != 1)
return 0;
+
return priv->buff_size;
}
-void* kiro_trb_get_raw_buffer (KiroTrb* self)
+void *
+kiro_trb_get_raw_buffer (KiroTrb *self)
{
- KiroTrbPrivate* priv = KIRO_TRB_GET_PRIVATE(self);
- if(priv->initialized != 1)
+ KiroTrbPrivate *priv = KIRO_TRB_GET_PRIVATE (self);
+
+ if (priv->initialized != 1)
return NULL;
- write_header(priv);
+
+ write_header (priv);
return priv->mem;
}
-void* kiro_trb_get_element (KiroTrb* self, uint64_t element)
+void *
+kiro_trb_get_element (KiroTrb *self, uint64_t element)
{
- KiroTrbPrivate* priv = KIRO_TRB_GET_PRIVATE(self);
- if(priv->initialized != 1)
+ KiroTrbPrivate *priv = KIRO_TRB_GET_PRIVATE (self);
+
+ if (priv->initialized != 1)
return NULL;
-
- uint64_t relative = 0;
- if(priv->iteration == 0)
+
+ uint64_t relative = 0;
+
+ if (priv->iteration == 0)
relative = element * priv->element_size;
else
- relative = ((priv->current - priv->frame_top) + (priv->element_size * element)) % (priv->buff_size - sizeof(struct KiroTrbInfo));
-
+ relative = ((priv->current - priv->frame_top) + (priv->element_size * element)) % (priv->buff_size - sizeof (struct KiroTrbInfo));
+
return priv->frame_top + relative;
}
-void kiro_trb_flush (KiroTrb *self)
+void
+kiro_trb_flush (KiroTrb *self)
{
- KiroTrbPrivate* priv = KIRO_TRB_GET_PRIVATE(self);
+ KiroTrbPrivate *priv = KIRO_TRB_GET_PRIVATE (self);
priv->iteration = 0;
priv->current = priv->frame_top;
- write_header(priv);
+ write_header (priv);
}
-void kiro_trb_purge (KiroTrb* self, gboolean free_memory)
+void
+kiro_trb_purge (KiroTrb *self, gboolean free_memory)
{
- KiroTrbPrivate *priv = KIRO_TRB_GET_PRIVATE(self);
+ KiroTrbPrivate *priv = KIRO_TRB_GET_PRIVATE (self);
priv->iteration = 0;
priv->current = NULL;
priv->initialized = 0;
@@ -184,114 +205,143 @@ void kiro_trb_purge (KiroTrb* self, gboolean free_memory)
priv->buff_size = 0;
priv->frame_top = NULL;
priv->element_size = 0;
- if(free_memory)
- free(priv->mem);
+
+ if (free_memory)
+ free (priv->mem);
+
priv->mem = NULL;
}
-int kiro_trb_is_setup (KiroTrb *self)
+int
+kiro_trb_is_setup (KiroTrb *self)
{
- KiroTrbPrivate* priv = KIRO_TRB_GET_PRIVATE(self);
+ KiroTrbPrivate *priv = KIRO_TRB_GET_PRIVATE (self);
return priv->initialized;
}
-int kiro_trb_reshape (KiroTrb *self, uint64_t element_size, uint64_t element_count)
+int
+kiro_trb_reshape (KiroTrb *self, uint64_t element_size, uint64_t element_count)
{
- if(element_size < 1 || element_count < 1)
+ if (element_size < 1 || element_count < 1)
return -1;
- size_t new_size = (element_size * element_count) + sizeof(struct KiroTrbInfo);
- void* newmem = malloc(new_size);
- if(!newmem)
+
+ size_t new_size = (element_size * element_count) + sizeof (struct KiroTrbInfo);
+ void *newmem = malloc (new_size);
+
+ if (!newmem)
return -1;
+
((struct KiroTrbInfo *)newmem)->buffer_size_bytes = new_size;
((struct KiroTrbInfo *)newmem)->element_size = element_size;
((struct KiroTrbInfo *)newmem)->offset = 0;
- kiro_trb_adopt(self, newmem);
+ kiro_trb_adopt (self, newmem);
return 0;
}
-int kiro_trb_push (KiroTrb *self, void *element_in)
+int
+kiro_trb_push (KiroTrb *self, void *element_in)
{
- KiroTrbPrivate* priv = KIRO_TRB_GET_PRIVATE(self);
- if(priv->initialized != 1)
+ KiroTrbPrivate *priv = KIRO_TRB_GET_PRIVATE (self);
+
+ if (priv->initialized != 1)
return -1;
- if((priv->current + priv->element_size) > (priv->mem + priv->buff_size))
+
+ if ((priv->current + priv->element_size) > (priv->mem + priv->buff_size))
return -1;
- memcpy(priv->current, element_in, priv->element_size);
+
+ memcpy (priv->current, element_in, priv->element_size);
priv->current += priv->element_size;
- if(priv->current >= priv->frame_top + (priv->element_size * priv->max_elements))
- {
+
+ if (priv->current >= priv->frame_top + (priv->element_size * priv->max_elements)) {
priv->current = priv->frame_top;
priv->iteration++;
}
- write_header(priv);
- return 0;
+
+ write_header (priv);
+ return 0;
}
-void* kiro_trb_dma_push (KiroTrb *self)
+void *
+kiro_trb_dma_push (KiroTrb *self)
{
- KiroTrbPrivate* priv = KIRO_TRB_GET_PRIVATE(self);
- if(priv->initialized != 1)
+ KiroTrbPrivate *priv = KIRO_TRB_GET_PRIVATE (self);
+
+ if (priv->initialized != 1)
return NULL;
- if((priv->current + priv->element_size) > (priv->mem + priv->buff_size))
+
+ if ((priv->current + priv->element_size) > (priv->mem + priv->buff_size))
return NULL;
+
void *mem_out = priv->current;
priv->current += priv->element_size;
- if(priv->current >= priv->frame_top + (priv->element_size * priv->max_elements))
- {
+
+ if (priv->current >= priv->frame_top + (priv->element_size * priv->max_elements)) {
priv->current = priv->frame_top;
priv->iteration++;
}
- write_header(priv);
- return mem_out;
+
+ write_header (priv);
+ return mem_out;
}
-void kiro_trb_refresh (KiroTrb *self)
+void
+kiro_trb_refresh (KiroTrb *self)
{
- KiroTrbPrivate* priv = KIRO_TRB_GET_PRIVATE(self);
- if(priv->initialized != 1)
+ KiroTrbPrivate *priv = KIRO_TRB_GET_PRIVATE (self);
+
+ if (priv->initialized != 1)
return;
+
struct KiroTrbInfo *tmp = (struct KiroTrbInfo *)priv->mem;
priv->buff_size = tmp->buffer_size_bytes;
priv->element_size = tmp->element_size;
- priv->max_elements = (tmp->buffer_size_bytes - sizeof(struct KiroTrbInfo)) / tmp->element_size;
+ priv->max_elements = (tmp->buffer_size_bytes - sizeof (struct KiroTrbInfo)) / tmp->element_size;
priv->iteration = tmp->offset / priv->max_elements;
- priv->frame_top = priv->mem + sizeof(struct KiroTrbInfo);
+ priv->frame_top = priv->mem + sizeof (struct KiroTrbInfo);
priv->current = priv->frame_top + ((tmp->offset % priv->max_elements) * priv->element_size);
priv->initialized = 1;
}
-void kiro_trb_adopt (KiroTrb *self, void *buff_in)
+void
+kiro_trb_adopt (KiroTrb *self, void *buff_in)
{
- if(!buff_in)
+ if (!buff_in)
return;
- KiroTrbPrivate* priv = KIRO_TRB_GET_PRIVATE(self);
- if(priv->mem)
- free(priv->mem);
+
+ KiroTrbPrivate *priv = KIRO_TRB_GET_PRIVATE (self);
+
+ if (priv->mem)
+ free (priv->mem);
+
priv->mem = buff_in;
priv->initialized = 1;
- kiro_trb_refresh(self);
+ kiro_trb_refresh (self);
}
-int kiro_trb_clone (KiroTrb *self, void *buff_in)
+int
+kiro_trb_clone (KiroTrb *self, void *buff_in)
{
- KiroTrbPrivate* priv = KIRO_TRB_GET_PRIVATE(self);
+ KiroTrbPrivate *priv = KIRO_TRB_GET_PRIVATE (self);
struct KiroTrbInfo *header = (struct KiroTrbInfo *)buff_in;
- void *newmem = malloc(header->buffer_size_bytes);
- if(!newmem)
+ void *newmem = malloc (header->buffer_size_bytes);
+
+ if (!newmem)
return -1;
- memcpy(newmem, buff_in, header->buffer_size_bytes);
- if(priv->mem)
- free(priv->mem);
+
+ memcpy (newmem, buff_in, header->buffer_size_bytes);
+
+ if (priv->mem)
+ free (priv->mem);
+
priv->mem = newmem;
priv->initialized = 1;
- kiro_trb_refresh(self);
+ kiro_trb_refresh (self);
return 0;
}
diff --git a/src/kiro-trb.h b/src/kiro-trb.h
index 3753b29..36d3b5e 100644
--- a/src/kiro-trb.h
+++ b/src/kiro-trb.h
@@ -25,7 +25,7 @@
* about its content inside itself, so its data can be exchanged between different
* instances of the KiroTrb Class and/or sent over a network.
*/
-
+
#ifndef __KIRO_TRB_H
#define __KIRO_TBR_H
@@ -48,7 +48,7 @@ typedef struct _KiroTrbPrivate KiroTrbPrivate;
struct _KiroTrb {
-
+
GObject parent;
};
@@ -61,20 +61,20 @@ struct _KiroTrb {
*/
struct _KiroTrbClass {
-
+
GObjectClass parent_class;
-
+
};
struct KiroTrbInfo {
-
+
/* internal information about the buffer */
uint64_t buffer_size_bytes; // Size in bytes INCLUDING this header
uint64_t element_size; // Size in bytes of one single element
uint64_t offset; // Current Offset to access the 'oldest' element (in element count!)
-
-} __attribute__((packed));
+
+} __attribute__ ((packed));
/* GObject and GType functions */
@@ -94,10 +94,10 @@ KiroTrb* kiro_trb_new (void);
* See also:
* kiro_trb_reshape, kiro_trb_adopt, kiro_trb_clone
*/
-uint64_t kiro_trb_get_element_size (KiroTrb* trb);
+uint64_t kiro_trb_get_element_size (KiroTrb *trb);
/**
- * kiro_trb_get_max_elements:
+ * kiro_trb_get_max_elements:
* Returns the capacity of the buffer
* @trb: #KiroTrb to perform the operation on
* Description:
@@ -107,11 +107,11 @@ uint64_t kiro_trb_get_element_size (KiroTrb* trb);
* kiro_trb_get_element_size, kiro_trb_reshape, kiro_trb_adopt,
* kiro_trb_clone
*/
-uint64_t kiro_trb_get_max_elements (KiroTrb* trb);
+uint64_t kiro_trb_get_max_elements (KiroTrb *trb);
/**
- * kiro_trb_get_raw_size:
+ * kiro_trb_get_raw_size:
* Returns the size of the buffer memory
* @trb: #KiroTrb to perform the operation on
* Description:
@@ -123,11 +123,11 @@ uint64_t kiro_trb_get_max_elements (KiroTrb* trb);
* kiro_trb_reshape, kiro_trb_adopt,
* kiro_trb_clone
*/
-uint64_t kiro_trb_get_raw_size (KiroTrb* trb);
+uint64_t kiro_trb_get_raw_size (KiroTrb *trb);
/**
- * kiro_trb_get_raw_buffer:
+ * kiro_trb_get_raw_buffer:
* @trb: #KiroTrb to perform the operation on
* Description:
* Returns a pointer to the memory structure of the given buffer.
@@ -148,11 +148,11 @@ uint64_t kiro_trb_get_raw_size (KiroTrb* trb);
* See also:
* kiro_trb_refesh, kiro_trb_reshape, kiro_trb_adopt, kiro_trb_clone
*/
-void* kiro_trb_get_raw_buffer (KiroTrb* trb);
+void* kiro_trb_get_raw_buffer (KiroTrb *trb);
/**
- * kiro_trb_get_element:
+ * kiro_trb_get_element:
* @trb: #KiroTrb to perform the operation on
* @index: Index of the element in the buffer to access
* Description:
@@ -172,11 +172,11 @@ void* kiro_trb_get_raw_buffer (KiroTrb* trb);
* See also:
* kiro_trb_get_element_size, kiro_trb_get_raw_buffer
*/
-void* kiro_trb_get_element (KiroTrb* trb, uint64_t index);
+void* kiro_trb_get_element (KiroTrb *trb, uint64_t index);
/**
- * kiro_trb_dma_push:
+ * kiro_trb_dma_push:
* Gives DMA to the next element and pushes the buffer
* @trb: #KiroTrb to perform the operation on
* Description:
@@ -198,11 +198,11 @@ void* kiro_trb_get_element (KiroTrb* trb, uint64_t index);
* See also:
* kiro_trb_push, kiro_trb_get_element_size, kiro_trb_get_raw_buffer
*/
-void* kiro_trb_dma_push (KiroTrb* trb);
+void* kiro_trb_dma_push (KiroTrb *trb);
/**
- * kiro_trb_flush:
+ * kiro_trb_flush:
* Flushes the buffer
* @trb: #KiroTrb to perform the operation on
* Description:
@@ -214,11 +214,11 @@ void* kiro_trb_dma_push (KiroTrb* trb);
* See also:
* kiro_trb_reshape, kiro_trb_adopt, kiro_trb_clone
*/
-void kiro_trb_flush (KiroTrb* trb);
+void kiro_trb_flush (KiroTrb *trb);
/**
- * kiro_trb_purge:
+ * kiro_trb_purge:
* Completely resets the Buffer
* @trb: #KiroTrb to perform the operation on
* @free_memory: True = internal memory will be free()'d,
@@ -233,11 +233,11 @@ void kiro_trb_flush (KiroTrb* trb);
* See also:
* kiro_trb_reshape, kiro_trb_adopt, kiro_trb_clone
*/
-void kiro_trb_purge (KiroTrb* trb, gboolean free_memory);
+void kiro_trb_purge (KiroTrb *trb, gboolean free_memory);
/**
- * kiro_trb_is_setup:
+ * kiro_trb_is_setup:
* Returns the setup status of the buffer
* @trb: #KiroTrb to perform the operation on
* Description:
@@ -250,11 +250,11 @@ void kiro_trb_purge (KiroTrb* trb, gboolean free_memory);
* See also:
* kiro_trb_reshape, kiro_trb_adopt, kiro_trb_clone
*/
-int kiro_trb_is_setup (KiroTrb* trb);
+int kiro_trb_is_setup (KiroTrb *trb);
/**
- * kiro_trb_reshape:
+ * kiro_trb_reshape:
* Reallocates internal memory and structures
* @trb: #KiroTrb to perform the operation on
* @element_size: Individual size of the elements to store in bytes
@@ -270,11 +270,11 @@ int kiro_trb_is_setup (KiroTrb* trb);
* See also:
* kiro_trb_is_setup, kiro_trb_reshape, kiro_trb_adopt, kiro_trb_clone
*/
-int kiro_trb_reshape (KiroTrb* trb, uint64_t element_size, uint64_t element_count);
+int kiro_trb_reshape (KiroTrb *trb, uint64_t element_size, uint64_t element_count);
/**
- * kiro_trb_clone:
+ * kiro_trb_clone:
* Clones the given memory into the internal memory
* @trb: #KiroTrb to perform the operation on
* @source: Pointer to the source memory to clone from
@@ -293,11 +293,11 @@ int kiro_trb_reshape (KiroTrb* trb, uint64_t element_size, uint64_t element_coun
* See also:
* kiro_trb_reshape, kiro_trb_adopt
*/
-int kiro_trb_clone (KiroTrb* trb, void* source);
+int kiro_trb_clone (KiroTrb *trb, void *source);
/**
- * kiro_trb_push:
+ * kiro_trb_push:
* Adds an element into the buffer
* @trb: #KiroTrb to perform the operation on
* @source: Pointer to the memory of the element to add
@@ -314,11 +314,11 @@ int kiro_trb_clone (KiroTrb* trb, void* source);
* kiro_trb_dma_push, kiro_trb_get_element_size, kiro_trb_clone,
* kiro_trb_adopt
*/
-int kiro_trb_push (KiroTrb* trb, void* source);
+int kiro_trb_push (KiroTrb *trb, void *source);
/**
- * kiro_trb_refresh:
+ * kiro_trb_refresh:
* Re-reads the TRBs memory header
* @trb: #KiroTrb to perform the operation on
* Description:
@@ -333,11 +333,11 @@ int kiro_trb_push (KiroTrb* trb, void* source);
* See also:
* kiro_trb_get_raw_buffer, kiro_trb_push_dma, kiro_trb_adopt
*/
-void kiro_trb_refresh (KiroTrb* trb);
+void kiro_trb_refresh (KiroTrb *trb);
/**
- * kiro_trb_adopt:
+ * kiro_trb_adopt:
* Adopts the given memory into the TRB
* @trb: #KiroTrb to perform the operation on
* @source: Pointer to the source memory to adopt
@@ -356,7 +356,7 @@ void kiro_trb_refresh (KiroTrb* trb);
* See also:
* kiro_trb_clone, kiro_trb_reshape
*/
-void kiro_trb_adopt (KiroTrb* trb, void* source);
+void kiro_trb_adopt (KiroTrb *trb, void *source);
G_END_DECLS