support of ModeCfg Push mode

This commit is contained in:
Andreas Steffen 2006-10-25 08:51:39 +00:00
parent cae6b97f0a
commit 80d35dd6d3
3 changed files with 366 additions and 531 deletions

View File

@ -463,7 +463,17 @@ static const struct state_microcode state_microcode_table[] = {
{ STATE_MODE_CFG_I1, STATE_MODE_CFG_I2
, SMF_ALL_AUTH | SMF_ENCRYPTED | SMF_RELEASE_PENDING_P2
, P(ATTR) | P(HASH), P(VID), PT(HASH)
, EVENT_SA_REPLACE, modecfg_inR1 },
, EVENT_SA_REPLACE, modecfg_inI1 },
{ STATE_MODE_CFG_I2, STATE_MODE_CFG_I3
, SMF_ALL_AUTH | SMF_ENCRYPTED | SMF_REPLY | SMF_RELEASE_PENDING_P2
, P(ATTR) | P(HASH), P(VID), PT(HASH)
, EVENT_SA_REPLACE, modecfg_inI2 },
{ STATE_MODE_CFG_I3, STATE_UNDEFINED
, SMF_ALL_AUTH | SMF_ENCRYPTED
, LEMPTY, LEMPTY, PT(NONE)
, EVENT_NULL, unexpected },
#undef P
#undef PT
@ -1421,7 +1431,7 @@ process_packet(struct msg_digest **mdp)
{
st->st_state = STATE_MAIN_R3; /* ISAKMP is up... */
}
set_cur_state(st);
if (!IS_ISAKMP_SA_ESTABLISHED(st->st_state))
@ -1451,7 +1461,7 @@ process_packet(struct msg_digest **mdp)
}
else
{
set_cur_state(st);
set_cur_state(st);
from_state = st->st_state;
}
@ -1543,7 +1553,7 @@ process_packet(struct msg_digest **mdp)
else if (st->st_connection->spd.this.modecfg
&& IS_PHASE1(st->st_state))
{
from_state = STATE_MODE_CFG_R1;
from_state = STATE_MODE_CFG_I2;
}
else
{
@ -2296,38 +2306,39 @@ complete_state_transition(struct msg_digest **mdp, stf_status result)
, story, sadetails);
}
/* Should we start Mode Config as a client */
/* Should we start ModeConfig as a client? */
if (st->st_connection->spd.this.modecfg
&& IS_ISAKMP_SA_ESTABLISHED(st->st_state)
&& !(st->st_connection->policy & POLICY_MODECFG_PUSH)
&& !st->st_modecfg.started)
{
DBG(DBG_CONTROL,
DBG_log("modecfg client is starting")
DBG_log("starting ModeCfg client in pull mode")
)
modecfg_send_request(st);
break;
}
/* Should we set the peer's IP address regardless? */
/* if (st->st_connection->spd.that.modecfg
/* Should we start ModeConfig as a server? */
if (st->st_connection->spd.that.modecfg
&& IS_ISAKMP_SA_ESTABLISHED(st->st_state)
&& !st->st_modecfg.vars_set
&& !(st->st_connection->policy & POLICY_MODECFG_PULL))
&& !st->st_modecfg.started
&& (st->st_connection->policy & POLICY_MODECFG_PUSH))
{
st->st_state = STATE_MODE_CFG_R1;
set_cur_state(st);
plog("Sending MODE CONFIG set");
modecfg_start_set(st);
DBG(DBG_CONTROL,
DBG_log("starting ModeCfg server in push mode")
)
modecfg_send_set(st);
break;
}
*/
/* wait for modecfg_set */
/* Wait for ModeConfig set from server */
if (st->st_connection->spd.this.modecfg
&& IS_ISAKMP_SA_ESTABLISHED(st->st_state)
&& !st->st_modecfg.vars_set)
{
DBG(DBG_CONTROL,
DBG_log("waiting for modecfg set from server")
DBG_log("waiting for ModeCfg set from server")
)
break;
}

File diff suppressed because it is too large Load Diff

View File

@ -17,17 +17,12 @@
struct state;
stf_status modecfg_resp(struct state *st
, u_int resp
, pb_stream *s, u_int16_t cmd
, bool hackthat, u_int16_t id);
stf_status modecfg_send_set(struct state *st);
extern stf_status modecfg_start_set(struct state *st);
/* Mode Config States */
/* ModeConfig starting functions */
extern stf_status modecfg_send_request(struct state *st);
extern stf_status modecfg_send_set(struct state *st);
/* ModeConfig state transition functions */
extern stf_status modecfg_inR0(struct msg_digest *md);
extern stf_status modecfg_inR1(struct msg_digest *md);
extern stf_status modecfg_send_request(struct state *st);
extern stf_status modecfg_inI1(struct msg_digest *md);
extern stf_status modecfg_inI2(struct msg_digest *md);