*/
int socket;
+ /**
+ * Process id of kernel thread
+ */
pid_t pid;
+
/**
* Sequence number for messages.
*/
*/
pthread_cond_t condvar;
+ /**
+ * Logger for XFRM stuff
+ */
+ logger_t *logger;
+
/**
* Function for the thread, receives messages.
*/
{MAPPING_END, NULL}
};
+
/**
* Implementation of kernel_interface_t.get_spi.
*/
netlink_message_t request, *response;
status_t status = SUCCESS;
+
+ this->logger->log(this->logger, CONTROL|LEVEL2, "getting spi");
+
memset(&request, 0, sizeof(request));
request.hdr.nlmsg_len = NLMSG_ALIGN(NLMSG_LENGTH(sizeof(request.spi)));
request.hdr.nlmsg_flags = NLM_F_REQUEST;
if (this->send_message(this, &request, &response) != SUCCESS)
{
- status = FAILED;
+ this->logger->log(this->logger, ERROR, "netlink communication failed");
+ return FAILED;
}
else if (response->hdr.nlmsg_type == NLMSG_ERROR)
{
+ this->logger->log(this->logger, ERROR, "netlink request XFRM_MSG_ALLOCSPI got an error: %s",
+ strerror(-response->e.error));
status = FAILED;
}
else if (response->hdr.nlmsg_type != XFRM_MSG_NEWSA)
{
+ this->logger->log(this->logger, ERROR, "netlink request XFRM_MSG_ALLOCSPI got a unknown reply");
status = FAILED;
}
else if (response->hdr.nlmsg_len < NLMSG_LENGTH(sizeof(response->sa)))
{
+ this->logger->log(this->logger, ERROR, "netlink request XFRM_MSG_ALLOCSPI got an invalid reply");
status = FAILED;
}
-
- *spi = response->sa.id.spi;
+ else
+ {
+ *spi = response->sa.id.spi;
+ }
free(response);
return status;
{
netlink_message_t request, *response;
memset(&request, 0, sizeof(request));
- status_t status;
+ status_t status = SUCCESS;
+
+ this->logger->log(this->logger, CONTROL|LEVEL2, "adding SA");
request.hdr.nlmsg_flags = NLM_F_REQUEST | NLM_F_ACK;
request.hdr.nlmsg_type = replace ? XFRM_MSG_UPDSA : XFRM_MSG_NEWSA;
if (this->send_message(this, &request, &response) != SUCCESS)
{
- status = FAILED;
+ this->logger->log(this->logger, ERROR, "netlink communication failed");
+ return FAILED;
}
else if (response->hdr.nlmsg_type != NLMSG_ERROR)
{
+ this->logger->log(this->logger, ERROR, "netlink request XFRM_MSG_NEWSA not acknowledged");
status = FAILED;
}
else if (response->e.error)
{
+ this->logger->log(this->logger, ERROR, "netlink request XFRM_MSG_NEWSA got error %s",
+ strerror(-response->e.error));
status = FAILED;
}
free(response);
- return SUCCESS;
+ return status;
}
static status_t del_sa( private_kernel_interface_t *this,
{
netlink_message_t request, *response;
memset(&request, 0, sizeof(request));
- status_t status;
+ status_t status = SUCCESS;
+
+ this->logger->log(this->logger, CONTROL|LEVEL2, "deleting SA");
request.hdr.nlmsg_flags = NLM_F_REQUEST | NLM_F_ACK;
request.hdr.nlmsg_type = XFRM_MSG_DELSA;
if (this->send_message(this, &request, &response) != SUCCESS)
{
- status = FAILED;
+ return FAILED;
}
else if (response->hdr.nlmsg_type != NLMSG_ERROR)
{
}
free(response);
- return SUCCESS;
+ return status;
}
/**
netlink_message_t request, *response;
status_t status = SUCCESS;
+ this->logger->log(this->logger, CONTROL|LEVEL2, "adding policy");
+
memset(&request, 0, sizeof(request));
request.hdr.nlmsg_flags = NLM_F_REQUEST | NLM_F_ACK;
if (this->send_message(this, &request, &response) != SUCCESS)
{
- status = FAILED;
+ this->logger->log(this->logger, ERROR, "netlink communication failed");
+ return FAILED;
}
else if (response->hdr.nlmsg_type != NLMSG_ERROR)
{
+ this->logger->log(this->logger, ERROR, "netlink request XFRM_MSG_NEWPOLICY not acknowledged");
status = FAILED;
}
else if (response->e.error)
{
+ this->logger->log(this->logger, ERROR, "netlink request XFRM_MSG_NEWPOLICY got error %s",
+ strerror(-response->e.error));
status = FAILED;
}
netlink_message_t request, *response;
status_t status = SUCCESS;
+
+ this->logger->log(this->logger, CONTROL|LEVEL2, "deleting policy");
+
memset(&request, 0, sizeof(request));
request.hdr.nlmsg_flags = NLM_F_REQUEST | NLM_F_ACK;
if (this->send_message(this, &request, &response) != SUCCESS)
{
- status = FAILED;
+ return FAILED;
}
else if (response->hdr.nlmsg_type != NLMSG_ERROR)
{
this->send_message = send_message;
this->pid = getpid();
this->responses = linked_list_create();
+ this->logger = logger_manager->get_logger(logger_manager, XFRM);
pthread_mutex_init(&(this->mutex),NULL);
pthread_cond_init(&(this->condvar),NULL);
this->seq = 0;
this->socket = socket(PF_NETLINK, SOCK_RAW, NETLINK_XFRM);
if (this->socket <= 0)
{
+ this->responses->destroy(this->responses);
free(this);
charon->kill(charon, "Unable to create netlink socket");
}
if (pthread_create(&(this->thread), NULL, (void*(*)(void*))this->receive_messages, this) != 0)
{
+ this->responses->destroy(this->responses);
close(this->socket);
free(this);
charon->kill(charon, "Unable to create netlink thread");
}
- logger_manager->enable_log_level(logger_manager, TESTER, FULL);
return (&this->public);
}
rsa_private_key_t *private_key = NULL;
iterator_t *iterator;
+ this->logger->log(this->logger, CONTROL|LEVEL2, "Looking up private key by public key...");
+
iterator = this->private_keys->create_iterator(this->private_keys, TRUE);
while (iterator->has_next(iterator))
{
iterator->current(iterator, (void**)&private_key);
if (private_key->belongs_to(private_key, public_key))
{
+ this->logger->log(this->logger, CONTROL|LEVEL2, "found a match");
break;
- }
+ }
+ this->logger->log(this->logger, CONTROL|LEVEL2, "this one did not match");
}
iterator->destroy(iterator);
return private_key;
}
else
{
- this->logger->log(this->logger, CONTROL|LEVEL1, "private key \"%s%s\" invalid, skipped",
+ this->logger->log(this->logger, ERROR, "private key \"%s%s\" invalid, skipped",
PRIVATE_KEY_DIR, entry->d_name);
}
}
{
pop_string(msg, &(msg->loglevel.context));
- this->logger->log(this->logger, CONTROL, "received stroke: log_level for %s", msg->loglevel.context);
+ this->logger->log(this->logger, CONTROL, "received stroke: loglevel for %s", msg->loglevel.context);
log_level_t level;
logger_context_t context = get_context(msg->loglevel.context);
if (this->log_thread_id)
{
- snprintf(buffer, MAX_LOG, "[%c%c] [%s] @%u %s", log_type, log_details, this->name, (int)pthread_self(), string);
+ snprintf(buffer, MAX_LOG, "[%c%c:%s] @%u %s", log_type, log_details, this->name, (int)pthread_self(), string);
}
else
{
- snprintf(buffer, MAX_LOG, "[%c%c] [%s] %s", log_type, log_details, this->name, string);
+ snprintf(buffer, MAX_LOG, "[%c%c:%s] %s", log_type, log_details, this->name, string);
}
}
buffer_pos = buffer;
if (this->output == NULL)
{
- syslog(LOG_INFO, "[=>] [%5d] %s %s", line_start, buffer, ascii_buffer);
+ syslog(LOG_INFO, "[ :%5d] %s %s", line_start, buffer, ascii_buffer);
}
else
{
- fprintf(this->output, "[=>] [%5d] %s %s\n", line_start, buffer, ascii_buffer);
+ fprintf(this->output, "[ :%5d] %s %s\n", line_start, buffer, ascii_buffer);
}
memset(ascii_buffer, 0, 16);
line_start += 16;
buffer_pos = buffer;
if (this->output == NULL)
{
- syslog(LOG_INFO, "[=>] [%5d] %s %16s", line_start, buffer, ascii_buffer);
+ syslog(LOG_INFO, "[ :%5d] %s %16s", line_start, buffer, ascii_buffer);
}
else
{
- fprintf(this->output, "[=>] [%5d] %s %16s\n", line_start, buffer, ascii_buffer);
+ fprintf(this->output, "[ :%5d] %s %16s\n", line_start, buffer, ascii_buffer);
}
}
pthread_mutex_unlock(&mutex);