add Framed-Route entries to RADIUS records
authorBrendan O'Dea <bod@optus.net>
Wed, 19 Oct 2005 03:09:29 +0000 (03:09 +0000)
committerBrendan O'Dea <bod@optus.net>
Wed, 19 Oct 2005 03:09:29 +0000 (03:09 +0000)
Changes
l2tpns.spec
radius.c

diff --git a/Changes b/Changes
index 220ba22..0a0e445 100644 (file)
--- a/Changes
+++ b/Changes
@@ -1,6 +1,7 @@
-* Tue Oct 18 2005 Brendan O'Dea <bod@optus.net> 2.1.10
+* Wed Oct 19 2005 Brendan O'Dea <bod@optus.net> 2.1.10
 - Add scripts/l2tpns-capture.
 - Fix LCP Echo frequency.
+- Add Framed-Route entries to RADIUS records.
 
 * Tue Oct 11 2005 Brendan O'Dea <bod@optus.net> 2.1.9
 - Fix Calling-Station-Id in RADIUS accounting records (Slobodan Tomic).
index de1cc46..53cd8c5 100644 (file)
@@ -43,5 +43,5 @@ rm -rf %{buildroot}
 %attr(644,root,root) /usr/share/man/man[58]/*
 
 %changelog
-* Tue Oct 18 2005 Brendan O'Dea <bod@optus.net> 2.1.10-1
+* Wed Oct 19 2005 Brendan O'Dea <bod@optus.net> 2.1.10-1
 - 2.1.10 release, see /usr/share/doc/l2tpns-2.1.10/Changes
index f2eebb8..98941cb 100644 (file)
--- a/radius.c
+++ b/radius.c
@@ -1,6 +1,6 @@
 // L2TPNS Radius Stuff
 
-char const *cvs_id_radius = "$Id: radius.c,v 1.44 2005-10-11 09:04:53 bodea Exp $";
+char const *cvs_id_radius = "$Id: radius.c,v 1.45 2005-10-19 03:09:30 bodea Exp $";
 
 #include <time.h>
 #include <stdio.h>
@@ -326,6 +326,30 @@ void radiussend(uint16_t r, uint8_t state)
                *(uint32_t *) (p + 2) = htonl(session[s].ip);
                p += p[1];
        }
+       if (s && session[s].route[0].ip)
+       {
+               int r;
+               for (r = 0; s && r < MAXROUTE && session[s].route[r].ip; r++)
+               {
+                       int width = 32;
+                       if (session[s].route[r].mask)
+                       {
+                           int mask = session[s].route[r].mask;
+                           while (!(mask & 1))
+                           {
+                               width--;
+                               mask >>= 1;
+                           }
+                       }
+
+                       *p = 22;        // Framed-Route
+                       p[1] = sprintf((char *) p + 2, "%s/%d %s 1",
+                               fmtaddr(htonl(session[s].route[r].ip), 0),
+                               width, fmtaddr(htonl(session[s].ip), 1)) + 2;
+
+                       p += p[1];
+               }
+       }
        if (*session[s].called)
        {
                *p = 30;                // called