VMPS support

Phil Mayers p.mayers at imperial.ac.uk
Tue Feb 26 19:05:02 CET 2008


Phil Mayers wrote:
> All,
> 
> I'm moving our legacy switches over to the VMPS support in FreeRadius 2 
> and I'm aware there are others on the list who have done this.
> 
> I'm seeing several different formats of VMPS request. The "easy" ones 
> are from older switches e.g. cisco 1900s:
> 
> VMPS-Packet-Type = VMPS-Join-Request
> VMPS-Error-Code = VMPS-No-Error
> VMPS-Sequence-Number = 2207055872
> VMPS-Client-IP-Address = 172.28.72.65
> VMPS-Port-Name = "22"
> VMPS-VLAN-Name = "PROD"
> VMPS-Domain-Name = "HOR-PG"
> VMPS-Unknown = 0x00
> VMPS-MAC = 00:01:4a:f8:93:e5
> 
> However, newer switches e.g. Cisco 3500XL are sending Reconfirm-Request 
> packets with no MAC (but with a cookie):
> 
> VMPS-Packet-Type = VMPS-Reconfirm-Request
> VMPS-Error-Code = VMPS-No-Error
> VMPS-Sequence-Number = 13320
> VMPS-Client-IP-Address = 172.28.72.50
> VMPS-Port-Name = "Fa0/1"
> VMPS-VLAN-Name = "PROD"
> VMPS-Unknown = 0x01
> VMPS-Cookie = 00:1b:78:a5:96:e0
> 
> How do I need to respond to these? It seems that if I return a 
> Join-Response it will simply be obeyed, but I'm worried it will explode 

All,

 From what I can tell, the following is true:

The actual value of reply:VMPS-Packet-Type seems to be irrelevant - VMPS 
replies do not contain anything to distinguish between Join and 
Reconfirm responses

> later. Do I need to return a Reconfirm-Reponse with a Deny if the 

The value of VQP-Error-Code may make a difference; the code in OpenVMPS 
seems to work like this:

  * request comes in
  * extract ethernet address from mac field (0xc06) other mac field 
(0xc08, which FreeRadius calls VMPS-Cookie) or packet header
  * lookup vlan for this ethernet address
  * if lookup.vlan not defined:
     fail
  * if lookup.vlan=='' or lookup.vlan=='--NONE--':
     fail
  * if request.vlan!='' and request.vlan!='--NONE--' and 
request.vlan!=lookup.vlan:
     fail
    else:
     ok

So broadly, if there is a vlan in the request other than '' (empty 
string) or '--NONE--' it must match the returned vlan; else a deny (vmps 
mode == open) or shutdown (vmps mode == closed) error code is returned.

HOWEVER - at least on Cisco 3500XL running the IOS I have, returning a 
permit with a different vlan than the request seems to work...

> requested vlan is different to the desired on, or a permit otherwise?
> 
> We're also seeing from the newer switches join packets with no MAC or 
> cookie, but an ethernet header:
> 
> VMPS-Packet-Type = VMPS-Join-Request
> VMPS-Error-Code = VMPS-No-Error
> VMPS-Sequence-Number = 13329
> VMPS-Client-IP-Address = 172.28.72.50
> VMPS-Port-Name = "Fa0/3"
> VMPS-VLAN-Name = "--NONE--"
> VMPS-Unknown = 0x00
> VMPS-Ethernet-Frame = 0xffffffffffff001636e46d1b08004500015...
> 
> What's the easiest way to get the MAC address out of these?

I used this in the end:

# the mac address can be in several places...
if ("%{VMPS-Ethernet-Frame}" =~ 
/0x............(..)(..)(..)(..)(..)(..).*/) {
         update request {
                 MyMac = "%{1}:%{2}:%{3}:%{4}:%{5}:%{6}"
         }
}
else {
         update request {
                 MyMac = "%{%{VMPS-Cookie}:-%{VMPS-MAC}}"
         }
}




More information about the Freeradius-Users mailing list