preliminary support of Mobile IPv6
This commit is contained in:
@@ -199,6 +199,7 @@ static const token_info_t token_info[] =
|
||||
{ ARG_MISC, 0, NULL /* KW_TYPE */ },
|
||||
{ ARG_MISC, 0, NULL /* KW_PFS */ },
|
||||
{ ARG_MISC, 0, NULL /* KW_COMPRESS */ },
|
||||
{ ARG_ENUM, offsetof(starter_conn_t, install_policy), LST_bool },
|
||||
{ ARG_MISC, 0, NULL /* KW_AUTH */ },
|
||||
{ ARG_MISC, 0, NULL /* KW_AUTHBY */ },
|
||||
{ ARG_MISC, 0, NULL /* KW_EAP */ },
|
||||
|
||||
@@ -79,6 +79,7 @@ static void default_values(starter_config_t *cfg)
|
||||
cfg->conn_default.sa_keying_tries = SA_REPLACEMENT_RETRIES_DEFAULT;
|
||||
cfg->conn_default.addr_family = AF_INET;
|
||||
cfg->conn_default.tunnel_addr_family = AF_INET;
|
||||
cfg->conn_default.install_policy = TRUE;
|
||||
cfg->conn_default.dpd_delay = 30; /* seconds */
|
||||
cfg->conn_default.dpd_timeout = 150; /* seconds */
|
||||
|
||||
@@ -497,15 +498,29 @@ load_conn(starter_conn_t *conn, kw_list_t *kw, starter_config_t *cfg)
|
||||
case KW_TYPE:
|
||||
conn->policy &= ~(POLICY_TUNNEL | POLICY_SHUNT_MASK);
|
||||
if (streq(kw->value, "tunnel"))
|
||||
{
|
||||
conn->policy |= POLICY_TUNNEL;
|
||||
}
|
||||
else if (streq(kw->value, "beet"))
|
||||
{
|
||||
conn->policy |= POLICY_BEET;
|
||||
}
|
||||
else if (streq(kw->value, "transport_proxy"))
|
||||
{
|
||||
conn->policy |= POLICY_PROXY;
|
||||
}
|
||||
else if (streq(kw->value, "passthrough") || streq(kw->value, "pass"))
|
||||
{
|
||||
conn->policy |= POLICY_SHUNT_PASS;
|
||||
}
|
||||
else if (streq(kw->value, "drop"))
|
||||
{
|
||||
conn->policy |= POLICY_SHUNT_DROP;
|
||||
}
|
||||
else if (streq(kw->value, "reject"))
|
||||
{
|
||||
conn->policy |= POLICY_SHUNT_REJECT;
|
||||
}
|
||||
else if (strcmp(kw->value, "transport") != 0)
|
||||
{
|
||||
plog("# bad policy value: %s=%s", kw->entry->name, kw->value);
|
||||
@@ -530,21 +545,33 @@ load_conn(starter_conn_t *conn, kw_list_t *kw, starter_config_t *cfg)
|
||||
char *second = strchr(kw->value, '|');
|
||||
|
||||
if (second != NULL)
|
||||
{
|
||||
*second = '\0';
|
||||
}
|
||||
|
||||
/* also handles the cases secret|rsasig and rsasig|secret */
|
||||
for (;;)
|
||||
{
|
||||
if (streq(value, "rsa") || streq(value, "rsasig"))
|
||||
{
|
||||
conn->policy |= POLICY_RSASIG | POLICY_ENCRYPT;
|
||||
}
|
||||
else if (streq(value, "secret") || streq(value, "psk"))
|
||||
{
|
||||
conn->policy |= POLICY_PSK | POLICY_ENCRYPT;
|
||||
}
|
||||
else if (streq(value, "ecdsa") || streq(value, "ecdsasig"))
|
||||
{
|
||||
conn->policy |= POLICY_ECDSASIG | POLICY_ENCRYPT;
|
||||
}
|
||||
else if (streq(value, "xauthrsasig"))
|
||||
{
|
||||
conn->policy |= POLICY_XAUTH_RSASIG | POLICY_ENCRYPT;
|
||||
}
|
||||
else if (streq(value, "xauthpsk"))
|
||||
{
|
||||
conn->policy |= POLICY_XAUTH_PSK | POLICY_ENCRYPT;
|
||||
}
|
||||
else
|
||||
{
|
||||
plog("# bad policy value: %s=%s", kw->entry->name, kw->value);
|
||||
@@ -552,7 +579,9 @@ load_conn(starter_conn_t *conn, kw_list_t *kw, starter_config_t *cfg)
|
||||
break;
|
||||
}
|
||||
if (second == NULL)
|
||||
{
|
||||
break;
|
||||
}
|
||||
value = second;
|
||||
second = NULL; /* traverse the loop no more than twice */
|
||||
}
|
||||
|
||||
@@ -114,7 +114,7 @@ struct starter_conn {
|
||||
unsigned long sa_rekey_fuzz;
|
||||
sa_family_t addr_family;
|
||||
sa_family_t tunnel_addr_family;
|
||||
|
||||
bool install_policy;
|
||||
starter_end_t left, right;
|
||||
|
||||
unsigned long id;
|
||||
|
||||
@@ -68,6 +68,7 @@ typedef enum {
|
||||
KW_TYPE,
|
||||
KW_PFS,
|
||||
KW_COMPRESS,
|
||||
KW_INSTALLPOLICY,
|
||||
KW_AUTH,
|
||||
KW_AUTHBY,
|
||||
KW_EAP,
|
||||
|
||||
@@ -61,6 +61,7 @@ keyexchange, KW_KEYEXCHANGE
|
||||
type, KW_TYPE
|
||||
pfs, KW_PFS
|
||||
compress, KW_COMPRESS
|
||||
installpolicy, KW_INSTALLPOLICY
|
||||
auth, KW_AUTH
|
||||
authby, KW_AUTHBY
|
||||
keylife, KW_KEYLIFE
|
||||
|
||||
@@ -24,6 +24,7 @@
|
||||
#include <errno.h>
|
||||
#include <netinet/in.h>
|
||||
#include <arpa/inet.h>
|
||||
#include <linux/xfrm.h>
|
||||
|
||||
#include <freeswan.h>
|
||||
|
||||
@@ -242,17 +243,22 @@ int starter_stroke_add_conn(starter_config_t *cfg, starter_conn_t *conn)
|
||||
|
||||
if (conn->policy & POLICY_TUNNEL)
|
||||
{
|
||||
msg.add_conn.mode = 1; /* XFRM_MODE_TRANSPORT */
|
||||
msg.add_conn.mode = XFRM_MODE_TUNNEL;
|
||||
}
|
||||
else if (conn->policy & POLICY_BEET)
|
||||
{
|
||||
msg.add_conn.mode = 4; /* XFRM_MODE_BEET */
|
||||
msg.add_conn.mode = XFRM_MODE_BEET;
|
||||
}
|
||||
else if (conn->policy & POLICY_PROXY)
|
||||
{
|
||||
msg.add_conn.mode = XFRM_MODE_TRANSPORT;
|
||||
msg.add_conn.proxy = TRUE;
|
||||
}
|
||||
else
|
||||
{
|
||||
msg.add_conn.mode = 0; /* XFRM_MODE_TUNNEL */
|
||||
msg.add_conn.mode = XFRM_MODE_TRANSPORT;
|
||||
}
|
||||
|
||||
|
||||
if (!(conn->policy & POLICY_DONT_REKEY))
|
||||
{
|
||||
msg.add_conn.rekey.reauth = (conn->policy & POLICY_DONT_REAUTH) == LEMPTY;
|
||||
@@ -265,6 +271,7 @@ int starter_stroke_add_conn(starter_config_t *cfg, starter_conn_t *conn)
|
||||
msg.add_conn.mobike = conn->policy & POLICY_MOBIKE;
|
||||
msg.add_conn.force_encap = conn->policy & POLICY_FORCE_ENCAP;
|
||||
msg.add_conn.ipcomp = conn->policy & POLICY_COMPRESS;
|
||||
msg.add_conn.install_policy = conn->install_policy;
|
||||
msg.add_conn.crl_policy = cfg->setup.strictcrlpolicy;
|
||||
msg.add_conn.unique = cfg->setup.uniqueids;
|
||||
msg.add_conn.algorithms.ike = push_string(&msg, conn->ike);
|
||||
|
||||
Reference in New Issue
Block a user