diff options
author | Martin Willi <martin@strongswan.org> | 2006-10-18 11:46:13 +0000 |
---|---|---|
committer | Martin Willi <martin@strongswan.org> | 2006-10-18 11:46:13 +0000 |
commit | 60356f3375da67375e48691bb1d732c02d1681a1 (patch) | |
tree | 1bfa3bd28d46c4211a17a831094e7fcbceea8bb6 /src/charon/threads/kernel_interface.c | |
parent | 8cdce67afa4bc4b4ff1a05e956db08cddc5dc48e (diff) | |
download | strongswan-60356f3375da67375e48691bb1d732c02d1681a1.tar.bz2 strongswan-60356f3375da67375e48691bb1d732c02d1681a1.tar.xz |
introduced new logging subsystem using bus:
passive listeners can register on the bus
active listeners wait for signals actively
multiplexing allows multiple listeners to receive debug signals
a lot more...
Diffstat (limited to 'src/charon/threads/kernel_interface.c')
-rw-r--r-- | src/charon/threads/kernel_interface.c | 146 |
1 files changed, 65 insertions, 81 deletions
diff --git a/src/charon/threads/kernel_interface.c b/src/charon/threads/kernel_interface.c index c74cf8f27..5c220b0c8 100644 --- a/src/charon/threads/kernel_interface.c +++ b/src/charon/threads/kernel_interface.c @@ -230,11 +230,6 @@ struct private_kernel_interface_t { * Condvar allows signaling of threads waiting for a reply. */ pthread_cond_t condvar; - - /** - * Logger for XFRM stuff - */ - logger_t *logger; }; @@ -362,15 +357,12 @@ static void receive_messages(private_kernel_interface_t *this) } if (reqid == 0) { - this->logger->log(this->logger, ERROR, - "Received a XFRM_MSG_ACQUIRE, but no reqid found"); + DBG1(SIG_DBG_KNL, "received a XFRM_MSG_ACQUIRE, but no reqid found"); } else { - this->logger->log(this->logger, CONTROL|LEVEL1, - "Received a XFRM_MSG_ACQUIRE"); - this->logger->log(this->logger, CONTROL, - "creating acquire job for CHILD_SA with reqid %d", + DBG2(SIG_DBG_KNL, "received a XFRM_MSG_ACQUIRE"); + DBG1(SIG_DBG_KNL, "creating acquire job for CHILD_SA with reqid %d", reqid); job = (job_t*)acquire_job_create(reqid); charon->job_queue->add(charon->job_queue, job); @@ -389,12 +381,10 @@ static void receive_messages(private_kernel_interface_t *this) spi = expire->state.id.spi; reqid = expire->state.reqid; - this->logger->log(this->logger, CONTROL|LEVEL1, - "Received a XFRM_MSG_EXPIRE"); - this->logger->log(this->logger, CONTROL, - "creating %s job for %s CHILD_SA 0x%x (reqid %d)", + DBG2(SIG_DBG_KNL, "received a XFRM_MSG_EXPIRE"); + DBG1(SIG_DBG_KNL, "creating %s job for %N CHILD_SA 0x%x (reqid %d)", expire->hard ? "delete" : "rekey", - mapping_find(protocol_id_m, protocol), ntohl(spi), + protocol_id_names, protocol, ntohl(spi), reqid); if (expire->hard) { @@ -457,7 +447,7 @@ static status_t get_spi(private_kernel_interface_t *this, memset(&request, 0, sizeof(request)); status_t status = SUCCESS; - this->logger->log(this->logger, CONTROL|LEVEL2, "getting spi"); + DBG2(SIG_DBG_KNL, "getting spi"); hdr = (struct nlmsghdr*)request; hdr->nlmsg_flags = NLM_F_REQUEST; @@ -476,29 +466,29 @@ static status_t get_spi(private_kernel_interface_t *this, if (send_message(this, hdr, &response) != SUCCESS) { - this->logger->log(this->logger, ERROR, "netlink communication failed"); + DBG1(SIG_DBG_KNL, "netlink communication failed"); return FAILED; } else if (response->nlmsg_type == NLMSG_ERROR) { - this->logger->log(this->logger, ERROR, "netlink request XFRM_MSG_ALLOCSPI got an error: %s", + DBG1(SIG_DBG_KNL, "netlink request XFRM_MSG_ALLOCSPI got an error: %s", strerror(-((struct nlmsgerr*)NLMSG_DATA(response))->error)); status = FAILED; } else if (response->nlmsg_type != XFRM_MSG_NEWSA) { - this->logger->log(this->logger, ERROR, "netlink request XFRM_MSG_ALLOCSPI got a unknown reply"); + DBG1(SIG_DBG_KNL, "netlink request XFRM_MSG_ALLOCSPI got a unknown reply"); status = FAILED; } else if (response->nlmsg_len < NLMSG_LENGTH(sizeof(struct xfrm_usersa_info))) { - this->logger->log(this->logger, ERROR, "netlink request XFRM_MSG_ALLOCSPI got an invalid reply"); + DBG1(SIG_DBG_KNL, "netlink request XFRM_MSG_ALLOCSPI got an invalid reply"); status = FAILED; } else { *spi = ((struct xfrm_usersa_info*)NLMSG_DATA(response))->id.spi; - this->logger->log(this->logger, CONTROL|LEVEL1, "SPI is 0x%x", *spi); + DBG2(SIG_DBG_KNL, "SPI is 0x%x", *spi); } free(response); @@ -526,7 +516,7 @@ static status_t add_sa(private_kernel_interface_t *this, memset(&request, 0, sizeof(request)); status_t status = SUCCESS; - this->logger->log(this->logger, CONTROL|LEVEL2, "adding SA"); + DBG2(SIG_DBG_KNL, "adding SA"); hdr = (struct nlmsghdr*)request; hdr->nlmsg_flags = NLM_F_REQUEST | NLM_F_ACK; @@ -561,12 +551,12 @@ static status_t add_sa(private_kernel_interface_t *this, alg_name = lookup_algorithm(encryption_algs, enc_alg, &key_size); if (alg_name == NULL) { - this->logger->log(this->logger, ERROR, "Algorithm %s not supported by kernel!", - mapping_find(encryption_algorithm_m, enc_alg->algorithm)); + DBG1(SIG_DBG_KNL, "algorithm %N not supported by kernel!", + encryption_algorithm_names, enc_alg->algorithm); return FAILED; } - this->logger->log(this->logger, CONTROL|LEVEL2, " using encryption algorithm %s with key size %d", - mapping_find(encryption_algorithm_m, enc_alg->algorithm), key_size); + DBG2(SIG_DBG_KNL, " using encryption algorithm %N with key size %d", + encryption_algorithm_names, enc_alg->algorithm, key_size); rthdr->rta_len = RTA_LENGTH(sizeof(struct xfrm_algo) + key_size); hdr->nlmsg_len += rthdr->rta_len; @@ -589,12 +579,12 @@ static status_t add_sa(private_kernel_interface_t *this, alg_name = lookup_algorithm(integrity_algs, int_alg, &key_size); if (alg_name == NULL) { - this->logger->log(this->logger, ERROR, "Algorithm %s not supported by kernel!", - mapping_find(integrity_algorithm_m, int_alg->algorithm)); + DBG1(SIG_DBG_KNL, "algorithm %N not supported by kernel!", + integrity_algorithm_names, int_alg->algorithm); return FAILED; } - this->logger->log(this->logger, CONTROL|LEVEL2, " using integrity algorithm %s with key size %d", - mapping_find(integrity_algorithm_m, int_alg->algorithm), key_size); + DBG2(SIG_DBG_KNL, " using integrity algorithm %N with key size %d", + integrity_algorithm_names, int_alg->algorithm, key_size); rthdr->rta_len = RTA_LENGTH(sizeof(struct xfrm_algo) + key_size); hdr->nlmsg_len += rthdr->rta_len; @@ -644,18 +634,18 @@ static status_t add_sa(private_kernel_interface_t *this, if (send_message(this, hdr, &response) != SUCCESS) { - this->logger->log(this->logger, ERROR, "netlink communication failed"); + DBG1(SIG_DBG_KNL, "netlink communication failed"); return FAILED; } else if (response->nlmsg_type != NLMSG_ERROR) { - this->logger->log(this->logger, ERROR, "netlink request XFRM_MSG_NEWSA not acknowledged"); + DBG1(SIG_DBG_KNL, "netlink request XFRM_MSG_NEWSA not acknowledged"); status = FAILED; } else if (((struct nlmsgerr*)NLMSG_DATA(response))->error) { - this->logger->log(this->logger, ERROR, "netlink request XFRM_MSG_NEWSA got an error: %s", - strerror(-((struct nlmsgerr*)NLMSG_DATA(response))->error)); + DBG1(SIG_DBG_KNL, "netlink request XFRM_MSG_NEWSA got an error: %s", + strerror(-((struct nlmsgerr*)NLMSG_DATA(response))->error)); status = FAILED; } @@ -681,7 +671,7 @@ static status_t update_sa( memset(&request, 0, sizeof(request)); status_t status = SUCCESS; - this->logger->log(this->logger, CONTROL|LEVEL2, "getting SA"); + DBG2(SIG_DBG_KNL, "getting SA"); hdr = (struct nlmsghdr*)request; hdr->nlmsg_flags = NLM_F_REQUEST; @@ -696,30 +686,30 @@ static status_t update_sa( if (send_message(this, hdr, &update) != SUCCESS) { - this->logger->log(this->logger, ERROR, "netlink communication failed"); + DBG1(SIG_DBG_KNL, "netlink communication failed"); return FAILED; } else if (update->nlmsg_type == NLMSG_ERROR) { - this->logger->log(this->logger, ERROR, "netlink request XFRM_MSG_GETSA got an error: %s", - strerror(-((struct nlmsgerr*)NLMSG_DATA(update))->error)); + DBG1(SIG_DBG_KNL, "netlink request XFRM_MSG_GETSA got an error: %s", + strerror(-((struct nlmsgerr*)NLMSG_DATA(update))->error)); free(update); return FAILED; } else if (update->nlmsg_type != XFRM_MSG_NEWSA) { - this->logger->log(this->logger, ERROR, "netlink request XFRM_MSG_GETSA got a unknown reply"); + DBG1(SIG_DBG_KNL, "netlink request XFRM_MSG_GETSA got a unknown reply"); free(update); return FAILED; } else if (update->nlmsg_len < NLMSG_LENGTH(sizeof(struct xfrm_usersa_info))) { - this->logger->log(this->logger, ERROR, "netlink request XFRM_MSG_GETSA got an invalid reply"); + DBG1(SIG_DBG_KNL, "netlink request XFRM_MSG_GETSA got an invalid reply"); free(update); return FAILED; } - this->logger->log(this->logger, CONTROL|LEVEL2, "updating SA"); + DBG2(SIG_DBG_KNL, "updating SA"); update->nlmsg_flags = NLM_F_REQUEST | NLM_F_ACK; update->nlmsg_type = XFRM_MSG_UPDSA; @@ -731,7 +721,7 @@ static status_t update_sa( if (dst_changes & HOST_DIFF_ADDR) { - this->logger->log(this->logger, CONTROL|LEVEL2, "destination address changed! replacing SA"); + DBG2(SIG_DBG_KNL, "destination address changed! replacing SA"); update->nlmsg_type = XFRM_MSG_NEWSA; host2xfrm(new_dst, &sa->id.daddr); @@ -756,24 +746,24 @@ static status_t update_sa( if (send_message(this, update, &response) != SUCCESS) { - this->logger->log(this->logger, ERROR, "netlink communication failed"); + DBG1(SIG_DBG_KNL, "netlink communication failed"); free(update); return FAILED; } else if (response->nlmsg_type != NLMSG_ERROR) { - this->logger->log(this->logger, ERROR, "netlink request XFRM_MSG_XXXSA not acknowledged"); + DBG1(SIG_DBG_KNL, "netlink request XFRM_MSG_XXXSA not acknowledged"); status = FAILED; } else if (((struct nlmsgerr*)NLMSG_DATA(response))->error) { - this->logger->log(this->logger, ERROR, "netlink request XFRM_MSG_XXXSA got an error: %s", - strerror(-((struct nlmsgerr*)NLMSG_DATA(response))->error)); + DBG1(SIG_DBG_KNL, "netlink request XFRM_MSG_XXXSA got an error: %s", + strerror(-((struct nlmsgerr*)NLMSG_DATA(response))->error)); status = FAILED; } else if (dst_changes & HOST_DIFF_ADDR) { - this->logger->log(this->logger, CONTROL|LEVEL2, "deleting old SA"); + DBG2(SIG_DBG_KNL, "deleting old SA"); status = this->public.del_sa(&this->public, dst, spi, protocol); } @@ -794,7 +784,7 @@ static status_t query_sa(private_kernel_interface_t *this, host_t *dst, struct xfrm_usersa_id *sa_id; struct xfrm_usersa_info *sa_info; - this->logger->log(this->logger, CONTROL|LEVEL2, "querying SA"); + DBG2(SIG_DBG_KNL, "querying SA"); memset(&request, 0, sizeof(request)); hdr = (struct nlmsghdr*)request; @@ -810,18 +800,18 @@ static status_t query_sa(private_kernel_interface_t *this, host_t *dst, if (send_message(this, hdr, &response) != SUCCESS) { - this->logger->log(this->logger, ERROR, "netlink communication failed"); + DBG1(SIG_DBG_KNL, "netlink communication failed"); return FAILED; } else if (response->nlmsg_type != XFRM_MSG_NEWSA) { - this->logger->log(this->logger, ERROR, "netlink request XFRM_MSG_GETSA not acknowledged"); + DBG1(SIG_DBG_KNL, "netlink request XFRM_MSG_GETSA not acknowledged"); free(response); return FAILED; } else if (response->nlmsg_len < NLMSG_LENGTH(sizeof(struct xfrm_usersa_info))) { - this->logger->log(this->logger, ERROR, "netlink request XFRM_MSG_GETSA got an invalid reply"); + DBG1(SIG_DBG_KNL, "netlink request XFRM_MSG_GETSA got an invalid reply"); free(response); return FAILED; } @@ -847,7 +837,7 @@ static status_t del_sa(private_kernel_interface_t *this, host_t *dst, memset(&request, 0, sizeof(request)); status_t status = SUCCESS; - this->logger->log(this->logger, CONTROL|LEVEL2, "deleting SA"); + DBG2(SIG_DBG_KNL, "deleting SA"); hdr = (struct nlmsghdr*)request; hdr->nlmsg_flags = NLM_F_REQUEST | NLM_F_ACK; @@ -862,17 +852,17 @@ static status_t del_sa(private_kernel_interface_t *this, host_t *dst, if (send_message(this, hdr, &response) != SUCCESS) { - this->logger->log(this->logger, ERROR, "netlink communication failed"); + DBG1(SIG_DBG_KNL, "netlink communication failed"); return FAILED; } else if (response->nlmsg_type != NLMSG_ERROR) { - this->logger->log(this->logger, ERROR, "netlink request XFRM_MSG_DELSA not acknowledged"); + DBG1(SIG_DBG_KNL, "netlink request XFRM_MSG_DELSA not acknowledged"); status = FAILED; } else if (((struct nlmsgerr*)NLMSG_DATA(response))->error) { - this->logger->log(this->logger, ERROR, "netlink request XFRM_MSG_DELSA got an error: %s", + DBG1(SIG_DBG_KNL, "netlink request XFRM_MSG_DELSA got an error: %s", strerror(-((struct nlmsgerr*)NLMSG_DATA(response))->error)); status = FAILED; } @@ -1010,8 +1000,7 @@ static status_t add_policy(private_kernel_interface_t *this, if (!update) { current->refcount++; - this->logger->log(this->logger, CONTROL|LEVEL1, - "policy already exists, increasing refcount"); + DBG2(SIG_DBG_KNL, "policy already exists, increasing refcount"); if (!high_prio) { /* if added policy is for a ROUTED child_sa, do not @@ -1033,7 +1022,7 @@ static status_t add_policy(private_kernel_interface_t *this, policy->refcount = 1; } - this->logger->log(this->logger, CONTROL|LEVEL2, "adding policy"); + DBG2(SIG_DBG_KNL, "adding policy"); memset(&request, 0, sizeof(request)); hdr = (struct nlmsghdr*)request; @@ -1087,20 +1076,18 @@ static status_t add_policy(private_kernel_interface_t *this, if (send_message(this, hdr, &response) != SUCCESS) { - this->logger->log(this->logger, ERROR, "netlink communication failed"); + DBG1(SIG_DBG_KNL, "netlink communication failed"); return FAILED; } else if (response->nlmsg_type != NLMSG_ERROR) { - this->logger->log(this->logger, ERROR, - "netlink request XFRM_MSG_UPDPOLICY not acknowledged"); + DBG1(SIG_DBG_KNL, "netlink request XFRM_MSG_UPDPOLICY not acknowledged"); status = FAILED; } else if (((struct nlmsgerr*)NLMSG_DATA(response))->error) { - this->logger->log(this->logger, ERROR, - "netlink request XFRM_MSG_UPDPOLICY got an error: %s", - strerror(-((struct nlmsgerr*)NLMSG_DATA(response))->error)); + DBG1(SIG_DBG_KNL, "netlink request XFRM_MSG_UPDPOLICY got an error: %s", + strerror(-((struct nlmsgerr*)NLMSG_DATA(response))->error)); status = FAILED; } @@ -1125,7 +1112,7 @@ static status_t query_policy(private_kernel_interface_t *this, memset(&request, 0, sizeof(request)); status_t status = SUCCESS; - this->logger->log(this->logger, CONTROL|LEVEL2, "querying policy"); + DBG2(SIG_DBG_KNL, "querying policy"); hdr = (struct nlmsghdr*)request; hdr->nlmsg_flags = NLM_F_REQUEST; @@ -1138,25 +1125,25 @@ static status_t query_policy(private_kernel_interface_t *this, if (send_message(this, hdr, &response) != SUCCESS) { - this->logger->log(this->logger, ERROR, "netlink communication failed"); + DBG1(SIG_DBG_KNL, "netlink communication failed"); return FAILED; } else if (response->nlmsg_type == NLMSG_ERROR) { - this->logger->log(this->logger, ERROR, "netlink request XFRM_MSG_GETPOLICY got an error: %s", - strerror(-((struct nlmsgerr*)NLMSG_DATA(response))->error)); + DBG1(SIG_DBG_KNL, "netlink request XFRM_MSG_GETPOLICY got an error: %s", + strerror(-((struct nlmsgerr*)NLMSG_DATA(response))->error)); free(response); return FAILED; } else if (response->nlmsg_type != XFRM_MSG_NEWPOLICY) { - this->logger->log(this->logger, ERROR, "netlink request XFRM_MSG_GETPOLICY got an unknown reply"); + DBG1(SIG_DBG_KNL, "netlink request XFRM_MSG_GETPOLICY got an unknown reply"); free(response); return FAILED; } else if (response->nlmsg_len < NLMSG_LENGTH(sizeof(struct xfrm_userpolicy_info))) { - this->logger->log(this->logger, ERROR, "netlink request XFRM_MSG_GETPOLICY got an invalid reply"); + DBG1(SIG_DBG_KNL, "netlink request XFRM_MSG_GETPOLICY got an invalid reply"); free(response); return FAILED; } @@ -1185,7 +1172,7 @@ static status_t del_policy(private_kernel_interface_t *this, iterator_t *iterator; status_t status = SUCCESS; - this->logger->log(this->logger, CONTROL|LEVEL2, "deleting policy"); + DBG2(SIG_DBG_KNL, "deleting policy"); /* create a policy */ memset(&policy, 0, sizeof(kernel_policy_t)); @@ -1204,8 +1191,7 @@ static status_t del_policy(private_kernel_interface_t *this, if (--to_delete->refcount > 0) { /* is used by more SAs, keep in kernel */ - this->logger->log(this->logger, CONTROL|LEVEL1, - "is used by other SAs, not removed"); + DBG2(SIG_DBG_KNL, "is used by other SAs, not removed"); iterator->destroy(iterator); pthread_mutex_unlock(&this->pol_mutex); return SUCCESS; @@ -1219,8 +1205,7 @@ static status_t del_policy(private_kernel_interface_t *this, pthread_mutex_unlock(&this->pol_mutex); if (!to_delete) { - this->logger->log(this->logger, CONTROL|LEVEL2, - "no such policy found"); + DBG1(SIG_DBG_KNL, "no such policy found"); return NOT_FOUND; } @@ -1239,18 +1224,18 @@ static status_t del_policy(private_kernel_interface_t *this, if (send_message(this, hdr, &response) != SUCCESS) { - this->logger->log(this->logger, ERROR, "netlink communication failed"); + DBG1(SIG_DBG_KNL, "netlink communication failed"); return FAILED; } else if (response->nlmsg_type != NLMSG_ERROR) { - this->logger->log(this->logger, ERROR, "netlink request XFRM_MSG_DELPOLICY not acknowledged"); + DBG1(SIG_DBG_KNL, "netlink request XFRM_MSG_DELPOLICY not acknowledged"); status = FAILED; } else if (((struct nlmsgerr*)NLMSG_DATA(response))->error) { - this->logger->log(this->logger, ERROR, "netlink request XFRM_MSG_DELPOLICY got an error: %s", - strerror(-((struct nlmsgerr*)NLMSG_DATA(response))->error)); + DBG1(SIG_DBG_KNL, "netlink request XFRM_MSG_DELPOLICY got an error: %s", + strerror(-((struct nlmsgerr*)NLMSG_DATA(response))->error)); status = FAILED; } @@ -1294,7 +1279,6 @@ kernel_interface_t *kernel_interface_create() this->pid = getpid(); this->responses = linked_list_create(); this->policies = linked_list_create(); - this->logger = logger_manager->get_logger(logger_manager, XFRM); pthread_mutex_init(&(this->rep_mutex),NULL); pthread_mutex_init(&(this->pol_mutex),NULL); pthread_cond_init(&(this->condvar),NULL); |