added a PASSIVE IKE_SA state to manage it externally

This commit is contained in:
Martin Willi
2008-11-28 10:49:14 +00:00
parent ddef455219
commit c610f42430
2 changed files with 25 additions and 4 deletions
+20 -4
View File
@@ -66,6 +66,7 @@ ENUM(ike_sa_state_names, IKE_CREATED, IKE_DESTROYING,
"CREATED", "CREATED",
"CONNECTING", "CONNECTING",
"ESTABLISHED", "ESTABLISHED",
"PASSIVE",
"REKEYING", "REKEYING",
"DELETING", "DELETING",
"DESTROYING", "DESTROYING",
@@ -1214,11 +1215,17 @@ static status_t acquire(private_ike_sa_t *this, u_int32_t reqid)
iterator_t *iterator; iterator_t *iterator;
child_sa_t *current, *child_sa = NULL; child_sa_t *current, *child_sa = NULL;
if (this->state == IKE_DELETING) switch (this->state)
{ {
DBG1(DBG_IKE, "acquiring CHILD_SA {reqid %d} failed: " case IKE_DELETING:
"IKE_SA is deleting", reqid); DBG1(DBG_IKE, "acquiring CHILD_SA {reqid %d} failed: "
return FAILED; "IKE_SA is deleting", reqid);
return FAILED;
case IKE_PASSIVE:
/* do not process acquires if passive */
return FAILED;
default:
break;
} }
/* find CHILD_SA */ /* find CHILD_SA */
@@ -1280,6 +1287,7 @@ static status_t route(private_ike_sa_t *this, child_cfg_t *child_cfg)
case IKE_CREATED: case IKE_CREATED:
case IKE_CONNECTING: case IKE_CONNECTING:
case IKE_ESTABLISHED: case IKE_ESTABLISHED:
case IKE_PASSIVE:
default: default:
break; break;
} }
@@ -1368,6 +1376,11 @@ static status_t process_message(private_ike_sa_t *this, message_t *message)
status_t status; status_t status;
bool is_request; bool is_request;
if (this->state == IKE_PASSIVE)
{ /* do not handle messages in passive state */
return FAILED;
}
is_request = message->get_request(message); is_request = message->get_request(message);
status = message->parse_body(message, status = message->parse_body(message,
@@ -1685,6 +1698,8 @@ static status_t delete_(private_ike_sa_t *this)
case IKE_CREATED: case IKE_CREATED:
DBG1(DBG_IKE, "deleting unestablished IKE_SA"); DBG1(DBG_IKE, "deleting unestablished IKE_SA");
break; break;
case IKE_PASSIVE:
break;
default: default:
DBG1(DBG_IKE, "destroying IKE_SA in state %N " DBG1(DBG_IKE, "destroying IKE_SA in state %N "
"without notification", ike_sa_state_names, this->state); "without notification", ike_sa_state_names, this->state);
@@ -1958,6 +1973,7 @@ static status_t roam(private_ike_sa_t *this, bool address)
{ {
case IKE_CREATED: case IKE_CREATED:
case IKE_DELETING: case IKE_DELETING:
case IKE_PASSIVE:
return SUCCESS; return SUCCESS;
default: default:
break; break;
+5
View File
@@ -199,6 +199,11 @@ enum ike_sa_state_t {
*/ */
IKE_ESTABLISHED, IKE_ESTABLISHED,
/**
* IKE_SA is managed externally and does not process messages
*/
IKE_PASSIVE,
/** /**
* IKE_SA rekeying in progress * IKE_SA rekeying in progress
*/ */