aboutsummaryrefslogtreecommitdiffstats
path: root/Source/charon/threads/kernel_interface.c
diff options
context:
space:
mode:
Diffstat (limited to 'Source/charon/threads/kernel_interface.c')
-rw-r--r--Source/charon/threads/kernel_interface.c47
1 files changed, 21 insertions, 26 deletions
diff --git a/Source/charon/threads/kernel_interface.c b/Source/charon/threads/kernel_interface.c
index 54fe4d1b1..63a499715 100644
--- a/Source/charon/threads/kernel_interface.c
+++ b/Source/charon/threads/kernel_interface.c
@@ -39,6 +39,9 @@
typedef struct netlink_message_t netlink_message_t;
+/**
+ * Representation of ANY netlink message used
+ */
struct netlink_message_t {
/**
@@ -58,6 +61,9 @@ struct netlink_message_t {
typedef struct netlink_algo_t netlink_algo_t;
+/**
+ * Add length and type to xfrm_algo
+ */
struct netlink_algo_t {
u_int16_t length;
u_int16_t type;
@@ -80,7 +86,6 @@ struct private_kernel_interface_t {
* Netlink communication socket.
*/
int socket;
- int bc_socket;
pid_t pid;
/**
@@ -107,7 +112,6 @@ struct private_kernel_interface_t {
* Condvar allows signaling of threads waiting for a reply.
*/
pthread_cond_t condvar;
- logger_t *logger;
/**
* Function for the thread, receives messages.
@@ -115,7 +119,7 @@ struct private_kernel_interface_t {
void (*receive_messages) (private_kernel_interface_t *this);
/**
- * Sends a netlink_message_t down to the kernel.
+ * Sends a netlink_message_t down to the kernel and wait for reply.
*/
status_t (*send_message) (private_kernel_interface_t *this, netlink_message_t *request, netlink_message_t **response);
};
@@ -258,20 +262,12 @@ static status_t add_sa( private_kernel_interface_t *this,
allocator_free(response);
return FAILED;
}
-
- printf("received message type: %d\n", response->hdr.nlmsg_type);
-
- if (response->hdr.nlmsg_type == NLMSG_ERROR)
- {
- printf("received error: %s\n", strerror(-response->e.error));
- }
allocator_free(response);
return SUCCESS;
}
-
static status_t send_message(private_kernel_interface_t *this, netlink_message_t *request, netlink_message_t **response)
{
size_t length;
@@ -311,17 +307,17 @@ static status_t send_message(private_kernel_interface_t *this, netlink_message_t
if (listed_response->hdr.nlmsg_seq == request->hdr.nlmsg_seq)
{
/* matches our request, this is the reply */
- *response = listed_response;
- found = TRUE;
- break;
- }
- }
- iterator->destroy(iterator);
-
- if (found)
- {
- break;
- }
+ *response = listed_response;
+ found = TRUE;
+ break;
+ }
+ }
+ iterator->destroy(iterator);
+
+ if (found)
+ {
+ break;
+ }
/* we should time out, if something goes wrong */
pthread_cond_wait(&(this->condvar), &(this->mutex));
}
@@ -363,14 +359,14 @@ static void receive_messages(private_kernel_interface_t *this)
}
if (addr.nl_pid != 0)
{
- /* not interested, try another one */
+ /* not from kernel. not interested, try another one */
continue;
}
break;
}
/* got a valid message.
- * requests are handled on or own,
+ * requests are handled on our own,
* responses are listed for the requesters
*/
if (response.hdr.nlmsg_flags & NLM_F_REQUEST)
@@ -386,7 +382,7 @@ static void receive_messages(private_kernel_interface_t *this)
pthread_mutex_lock(&(this->mutex));
this->responses->insert_last(this->responses, (void*)listed_response);
pthread_mutex_unlock(&(this->mutex));
- /* signal LEVEL3 waiting threads */
+ /* signal ALL waiting threads */
pthread_cond_broadcast(&(this->condvar));
}
/* get the next one */
@@ -444,7 +440,6 @@ kernel_interface_t *kernel_interface_create()
charon->kill(charon, "Unable to create netlink thread");
}
- this->logger = charon->logger_manager->create_logger(charon->logger_manager, TESTER, NULL);
charon->logger_manager->enable_logger_level(charon->logger_manager, TESTER, FULL);
return (&this->public);
}