Proxy / reply translation
    Alan DeKok 
    aland at deployingradius.com
       
    Thu Nov  9 14:34:48 CET 2017
    
    
  
On Nov 9, 2017, at 8:19 AM, Richard J Palmer <richard at merula.net> wrote:
> This is where my skills are not great (regex) most other areas I can work with. Ultimately I am happy to pay someone to help write the little bit of code that does this. I do need to cope with Netmasks from  /32 to /24 so a few switch cases.
  It shouldn't be difficult.
> Alternatively if someone can provide a few pointers on that bit I can probably build from there.
  If you have:
>>>    Cisco-AVPair = "ip:route=1.2.3.1 255.255.255.240"
  Step 1, split it into pieces:
	if (&Cisco-AVPair =~ /ip:route=([^ ]+) ([^ ]+)/) {
  This matches the "ip:route" prefix.  It then matches non-space data, then a space, and more non-space data.  As per the FR documentation, the first match goes into %{1}, and the second into %{2}.
  As there are only a limited number of net masks, you can expand the net mask, and switch over it (inside of the "if" block from above)
	switch "%{2}" {
		case "255.255.255.255" {
			update reply {
				Framed-Route = "%{1}/32"
			}
		}
		case "255.255.255.254" {
			update reply {
				Framed-Route = "%{1}/31"
			}
		}
		case "255.255.255.252" {
			update reply {
				Framed-Route = "%{1}/30"
			}
		}
		... etc...
		# and the "catch all" case, just mash it to /28
		case {
			update reply {
				Framed-Route = "%{1}/28"
			}
		}
	}
  A little verbose, but it should work.
  Alan DeKok.
    
    
More information about the Freeradius-Users
mailing list