aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorMartin Willi <martin@revosec.ch>2012-02-24 11:15:11 +0100
committerMartin Willi <martin@revosec.ch>2012-02-24 11:20:16 +0100
commit3a2660f1897903d6e354b06c17485d7aa35d0b0b (patch)
treea5eaea760b39ca8c88bf7e77be3ba7adc053a707 /src
parentd15ae70c8c08e0d7f0a5ddac245d5fb9eb097cb2 (diff)
downloadstrongswan-3a2660f1897903d6e354b06c17485d7aa35d0b0b.tar.bz2
strongswan-3a2660f1897903d6e354b06c17485d7aa35d0b0b.tar.xz
Encode IPv6 virtual IPs in a Framed-IPv6-Prefix attribute
Diffstat (limited to 'src')
-rw-r--r--src/libcharon/plugins/eap_radius/eap_radius_accounting.c10
1 files changed, 9 insertions, 1 deletions
diff --git a/src/libcharon/plugins/eap_radius/eap_radius_accounting.c b/src/libcharon/plugins/eap_radius/eap_radius_accounting.c
index d2e2cb341..613569ffb 100644
--- a/src/libcharon/plugins/eap_radius/eap_radius_accounting.c
+++ b/src/libcharon/plugins/eap_radius/eap_radius_accounting.c
@@ -146,16 +146,24 @@ static void add_ike_sa_parameters(radius_message_t *message, ike_sa_t *ike_sa)
{
host_t *vip;
char buf[64];
+ chunk_t data;
snprintf(buf, sizeof(buf), "%Y", ike_sa->get_other_eap_id(ike_sa));
message->add(message, RAT_USER_NAME, chunk_create(buf, strlen(buf)));
snprintf(buf, sizeof(buf), "%#H", ike_sa->get_other_host(ike_sa));
message->add(message, RAT_CALLING_STATION_ID, chunk_create(buf, strlen(buf)));
vip = ike_sa->get_virtual_ip(ike_sa, FALSE);
- if (vip)
+ if (vip && vip->get_family(vip) == AF_INET)
{
message->add(message, RAT_FRAMED_IP_ADDRESS, vip->get_address(vip));
}
+ if (vip && vip->get_family(vip) == AF_INET6)
+ {
+ /* we currently assign /128 prefixes, only (reserved, length) */
+ data = chunk_from_chars(0, 128);
+ data = chunk_cata("cc", data, vip->get_address(vip));
+ message->add(message, RAT_FRAMED_IPV6_PREFIX, data);
+ }
}
/**