eap-radius: Add option to set interval for interim accounting updates
authorTobias Brunner <tobias@strongswan.org>
Thu, 9 Oct 2014 08:10:23 +0000 (10:10 +0200)
committerTobias Brunner <tobias@strongswan.org>
Fri, 10 Oct 2014 07:51:13 +0000 (09:51 +0200)
Any interval returned by the RADIUS server in the Access-Accept message
overrides the configured interval.  But it might be useful if RADIUS is
only used for accounting.

conf/plugins/eap-radius.opt
src/libcharon/plugins/eap_radius/eap_radius_accounting.c

index 0df6a0d..2a6786d 100644 (file)
@@ -5,12 +5,16 @@ charon.plugins.eap-radius.accounting_close_on_timeout = yes
        Close the IKE_SA if there is a timeout during interim RADIUS accounting
        updates.
 
+charon.plugins.eap-radius.accounting_interval = 0
+       Interval for interim RADIUS accounting updates, if not specified by the
+       RADIUS server in the Access-Accept message.
+
 charon.plugins.eap-radius.accounting_requires_vip = no
        If enabled, accounting is disabled unless an IKE_SA has at least one
        virtual IP.
 
 charon.plugins.eap-radius.class_group = no
-       Use class attributes in RADIUS-Accept messages as group membership
+       Use class attributes in Access-Accept messages as group membership
        information.
 
        Use the _class_ attribute sent in the RADIUS-Accept message as group
index 0020c5d..31c96d2 100644 (file)
@@ -488,6 +488,16 @@ static void send_start(private_eap_radius_accounting_t *this, ike_sa_t *ike_sa)
        message->add(message, RAT_ACCT_SESSION_ID,
                                 chunk_create(entry->sid, strlen(entry->sid)));
 
+       if (!entry->interim.interval)
+       {
+               entry->interim.interval = lib->settings->get_time(lib->settings,
+                                       "%s.plugins.eap-radius.accounting_interval", 0, lib->ns);
+               if (entry->interim.interval)
+               {
+                       DBG1(DBG_CFG, "scheduling RADIUS Interim-Updates every %us",
+                                entry->interim.interval);
+               }
+       }
        schedule_interim(this, entry);
        this->mutex->unlock(this->mutex);