VMPS with MySQL default VLAN
Good afternoon. I've got problem with configuring VMPS with MySQL and default VLAN. This is relevant part of vmps config which i use: update reply { &VMPS-Packet-Type = VMPS-Join-Response &VMPS-Cookie = &VMPS-Mac &VMPS-VLAN-Name = "Public_INET" # If you have VLAN's in a database, you can select # the VLAN name based on the MAC address. # &VMPS-VLAN-Name = "%{sql:select vlan from mac2vlan where mac='%{VMPS-Mac}'}" } In this configuration, VMPS always return VLAN value as Public_INET. Even if i use MAC address which is in MySQL database. In debug output i can see that VLAN is successfully returned from MySQL, but return from FreeRADIUS is Public_INET. Debug output is as follows : VMPS-Packet-Type = VMPS-Join-Request VMPS-Error-Code = VMPS-No-Error VMPS-Sequence-Number = 4660 VMPS-Client-IP-Address = 127.0.0.1 VMPS-Port-Name = "Fa0/1" VMPS-VLAN-Name = "" VMPS-Domain-Name = "" VMPS-Unknown = 0x00 VMPS-MAC = 68:f7:28:e7:d8:ec (1) Received Access-Request Id 4660 from 127.0.0.1:59323 to 127.0.0.1:1589 length 60 (1) VMPS-Packet-Type = VMPS-Join-Request (1) VMPS-Error-Code = VMPS-No-Error (1) VMPS-Sequence-Number = 4660 (1) VMPS-Client-IP-Address = 127.0.0.1 (1) VMPS-Port-Name = "Fa0/1" (1) VMPS-VLAN-Name = "" (1) VMPS-Domain-Name = "" (1) VMPS-Unknown = 0x00 (1) VMPS-MAC = 68:f7:28:e7:d8:ec Doing VMPS (1) vmps { (1) if (!&VMPS-Mac) { (1) if (!&VMPS-Mac) -> FALSE (1) [mac2vlan] = ok (1) update reply { (1) &VMPS-Packet-Type = VMPS-Join-Response (1) &VMPS-Cookie = &VMPS-Mac -> 68:f7:28:e7:d8:ec (1) &VMPS-VLAN-Name = "Public_INET" (1) EXPAND %{User-Name} (1) --> (1) SQL-User-Name set to '' rlm_sql (sql): Reserved connection (2) (1) Executing select query: select vlan from mac2vlan where mac='68:f7:28:e7:d8:ec' rlm_sql (sql): Released connection (2) rlm_sql (sql): Need 4 more connections to reach 10 spares rlm_sql (sql): Opening additional connection (6), 1 of 26 pending slots used rlm_sql_mysql: Starting connect to MySQL server rlm_sql_mysql: Connected to database 'radius' on Localhost via UNIX socket, server version 5.1.73, protocol version 10 (1) EXPAND %{sql:select vlan from mac2vlan where mac='%{VMPS-Mac}'} (1) --> OFFICE (1) VMPS-VLAN-Name = OFFICE (1) } # update reply = noop (1) if (&VMPS-Packet-Type == VMPS-Reconfirm-Request){ (1) if (&VMPS-Packet-Type == VMPS-Reconfirm-Request) -> FALSE (1) } # vmps = ok Done VMPS (1) vmps { (1) if (!&VMPS-Mac) { (1) if (!&VMPS-Mac) -> FALSE (1) [mac2vlan] = ok (1) update reply { (1) &VMPS-Packet-Type = VMPS-Join-Response (1) &VMPS-Cookie = &VMPS-Mac -> 68:f7:28:e7:d8:ec (1) &VMPS-VLAN-Name = "Public_INET" (1) EXPAND %{User-Name} (1) --> (1) SQL-User-Name set to '' rlm_sql (sql): Reserved connection (3) (1) Executing select query: select vlan from mac2vlan where mac='68:f7:28:e7:d8:ec' rlm_sql (sql): Released connection (3) (1) EXPAND %{sql:select vlan from mac2vlan where mac='%{VMPS-Mac}'} (1) --> OFFICE (1) VMPS-VLAN-Name = OFFICE (1) } # update reply = noop (1) if (&VMPS-Packet-Type == VMPS-Reconfirm-Request){ (1) if (&VMPS-Packet-Type == VMPS-Reconfirm-Request) -> FALSE (1) } # vmps = ok (1) Sent Access-Accept Id 4660 from 127.0.0.1:1589 to 127.0.0.1:59323 length 0 VMPS-VLAN-Name = "Public_INET" VMPS-Cookie = 68:f7:28:e7:d8:ec (1) Finished request (1) Cleaning up request packet ID 4660 with timestamp +24 Ready to process requests When i place first mysql request and then i set default VLAN, than returned VLAN from VMPS is correct when i use MAC address which is in DB, but when i use other MAC returned VLAN is empty. Config as follows: update reply { &VMPS-Packet-Type = VMPS-Join-Response &VMPS-Cookie = &VMPS-Mac # If you have VLAN's in a database, you can select # the VLAN name based on the MAC address. # &VMPS-VLAN-Name = "%{sql:select vlan from mac2vlan where mac='%{VMPS-Mac}'}" &VMPS-VLAN-Name = "Public_INET" } Debug output with MAC from DB: VMPS-Packet-Type = VMPS-Join-Request VMPS-Error-Code = VMPS-No-Error VMPS-Sequence-Number = 4660 VMPS-Client-IP-Address = 127.0.0.1 VMPS-Port-Name = "Fa0/1" VMPS-VLAN-Name = "" VMPS-Domain-Name = "" VMPS-Unknown = 0x00 VMPS-MAC = 68:f7:28:e7:d8:ec (0) Received Access-Request Id 4660 from 127.0.0.1:60360 to 127.0.0.1:1589 length 60 (0) VMPS-Packet-Type = VMPS-Join-Request (0) VMPS-Error-Code = VMPS-No-Error (0) VMPS-Sequence-Number = 4660 (0) VMPS-Client-IP-Address = 127.0.0.1 (0) VMPS-Port-Name = "Fa0/1" (0) VMPS-VLAN-Name = "" (0) VMPS-Domain-Name = "" (0) VMPS-Unknown = 0x00 (0) VMPS-MAC = 68:f7:28:e7:d8:ec Doing VMPS (0) vmps { (0) if (!&VMPS-Mac) { (0) if (!&VMPS-Mac) -> FALSE (0) [mac2vlan] = ok (0) update reply { (0) &VMPS-Packet-Type = VMPS-Join-Response (0) &VMPS-Cookie = &VMPS-Mac -> 68:f7:28:e7:d8:ec (0) EXPAND %{User-Name} (0) --> (0) SQL-User-Name set to '' rlm_sql (sql): Reserved connection (0) (0) Executing select query: select vlan from mac2vlan where mac='68:f7:28:e7:d8:ec' rlm_sql (sql): Released connection (0) rlm_sql (sql): Need 5 more connections to reach 10 spares rlm_sql (sql): Opening additional connection (5), 1 of 27 pending slots used rlm_sql_mysql: Starting connect to MySQL server rlm_sql_mysql: Connected to database 'radius' on Localhost via UNIX socket, server version 5.1.73, protocol version 10 (0) EXPAND %{sql:select vlan from mac2vlan where mac='%{VMPS-Mac}'} (0) --> OFFICE (0) VMPS-VLAN-Name = OFFICE (0) &VMPS-VLAN-Name = "Public_INET" (0) } # update reply = noop (0) if (&VMPS-Packet-Type == VMPS-Reconfirm-Request){ (0) if (&VMPS-Packet-Type == VMPS-Reconfirm-Request) -> FALSE (0) } # vmps = ok Done VMPS (0) vmps { (0) if (!&VMPS-Mac) { (0) if (!&VMPS-Mac) -> FALSE (0) [mac2vlan] = ok (0) update reply { (0) &VMPS-Packet-Type = VMPS-Join-Response (0) &VMPS-Cookie = &VMPS-Mac -> 68:f7:28:e7:d8:ec (0) EXPAND %{User-Name} (0) --> (0) SQL-User-Name set to '' rlm_sql (sql): Reserved connection (1) (0) Executing select query: select vlan from mac2vlan where mac='68:f7:28:e7:d8:ec' rlm_sql (sql): Released connection (1) (0) EXPAND %{sql:select vlan from mac2vlan where mac='%{VMPS-Mac}'} (0) --> OFFICE (0) VMPS-VLAN-Name = OFFICE (0) &VMPS-VLAN-Name = "Public_INET" (0) } # update reply = noop (0) if (&VMPS-Packet-Type == VMPS-Reconfirm-Request){ (0) if (&VMPS-Packet-Type == VMPS-Reconfirm-Request) -> FALSE (0) } # vmps = ok (0) Sent Access-Accept Id 4660 from 127.0.0.1:1589 to 127.0.0.1:60360 length 0 VMPS-VLAN-Name = "OFFICE" VMPS-Cookie = 68:f7:28:e7:d8:ec (0) Finished request (0) Cleaning up request packet ID 4660 with timestamp +5 Ready to process requests This is debug output with MAC not present in DB: VMPS-Packet-Type = VMPS-Join-Request VMPS-Error-Code = VMPS-No-Error VMPS-Sequence-Number = 4660 VMPS-Client-IP-Address = 127.0.0.1 VMPS-Port-Name = "Fa0/1" VMPS-VLAN-Name = "" VMPS-Domain-Name = "" VMPS-Unknown = 0x00 VMPS-MAC = 68:f7:28:e7:d8:ea (1) Received Access-Request Id 4660 from 127.0.0.1:58809 to 127.0.0.1:1589 length 60 (1) VMPS-Packet-Type = VMPS-Join-Request (1) VMPS-Error-Code = VMPS-No-Error (1) VMPS-Sequence-Number = 4660 (1) VMPS-Client-IP-Address = 127.0.0.1 (1) VMPS-Port-Name = "Fa0/1" (1) VMPS-VLAN-Name = "" (1) VMPS-Domain-Name = "" (1) VMPS-Unknown = 0x00 (1) VMPS-MAC = 68:f7:28:e7:d8:ea Doing VMPS (1) vmps { (1) if (!&VMPS-Mac) { (1) if (!&VMPS-Mac) -> FALSE (1) [mac2vlan] = ok (1) update reply { (1) &VMPS-Packet-Type = VMPS-Join-Response (1) &VMPS-Cookie = &VMPS-Mac -> 68:f7:28:e7:d8:ea (1) EXPAND %{User-Name} (1) --> (1) SQL-User-Name set to '' rlm_sql (sql): Reserved connection (2) (1) Executing select query: select vlan from mac2vlan where mac='68:f7:28:e7:d8:ea' (1) SQL query returned no results rlm_sql (sql): Released connection (2) rlm_sql (sql): Need 4 more connections to reach 10 spares rlm_sql (sql): Opening additional connection (6), 1 of 26 pending slots used rlm_sql_mysql: Starting connect to MySQL server rlm_sql_mysql: Connected to database 'radius' on Localhost via UNIX socket, server version 5.1.73, protocol version 10 (1) EXPAND %{sql:select vlan from mac2vlan where mac='%{VMPS-Mac}'} (1) --> (1) VMPS-VLAN-Name = (1) &VMPS-VLAN-Name = "Public_INET" (1) } # update reply = noop (1) if (&VMPS-Packet-Type == VMPS-Reconfirm-Request){ (1) if (&VMPS-Packet-Type == VMPS-Reconfirm-Request) -> FALSE (1) } # vmps = ok Done VMPS (1) vmps { (1) if (!&VMPS-Mac) { (1) if (!&VMPS-Mac) -> FALSE (1) [mac2vlan] = ok (1) update reply { (1) &VMPS-Packet-Type = VMPS-Join-Response (1) &VMPS-Cookie = &VMPS-Mac -> 68:f7:28:e7:d8:ea (1) EXPAND %{User-Name} (1) --> (1) SQL-User-Name set to '' rlm_sql (sql): Reserved connection (3) (1) Executing select query: select vlan from mac2vlan where mac='68:f7:28:e7:d8:ea' (1) SQL query returned no results rlm_sql (sql): Released connection (3) (1) EXPAND %{sql:select vlan from mac2vlan where mac='%{VMPS-Mac}'} (1) --> (1) VMPS-VLAN-Name = (1) &VMPS-VLAN-Name = "Public_INET" (1) } # update reply = noop (1) if (&VMPS-Packet-Type == VMPS-Reconfirm-Request){ (1) if (&VMPS-Packet-Type == VMPS-Reconfirm-Request) -> FALSE (1) } # vmps = ok (1) Sent Access-Accept Id 4660 from 127.0.0.1:1589 to 127.0.0.1:58809 length 0 VMPS-VLAN-Name = "" VMPS-Cookie = 68:f7:28:e7:d8:ea (1) Finished request (1) Cleaning up request packet ID 4660 with timestamp +44 Ready to process requests It looks like first value set to attribute &VMPS-VLAN-Name is mandatory and it cant be overwrited. Is there any possibility to read VLANs from DB but if MAC is not in DB table to set some default VLAN? Thank You Daniel
participants (1)
-
Daniel Pogac