EN ESTA PÁGINA
Variables definidas por el usuario en perfiles dinámicos
Variables definidas por el usuario
En los perfiles de servicio dinámicos, Junos OS permite configurar variables personalizadas en el nivel de [edit dynamic-profiles profile-name variables]
jerarquía y utilizarlas en la [edit dynamic-profiles]
jerarquía. El perfil dinámico obtiene y reemplaza datos para estas variables de un servidor externo (por ejemplo, RADIUS) durante el proceso de autenticación del suscriptor. En tiempo de ejecución, las variables se reemplazan por valores reales y se utilizan para configurar interfaces de suscriptor.
Puede utilizar cualquiera de las siguientes instrucciones para configurar variables definidas por el usuario:
default-value
: configure un valor predeterminado para una variable definida por el usuario en un perfil dinámico. Los valores que el sistema utiliza para estas variables se aplican cuando el suscriptor se autentica. Al especificar un valor predeterminado, se proporciona una configuración independiente para la instrucción asociada o una copia de seguridad para la configuración de la instrucción si no se puede tener acceso al servidor externo o no contiene un valor para la variable.equals
: configure una expresión para una variable definida por el usuario que se evalúa en tiempo de ejecución y se devuelve como el valor de la variable.mandatory
: especifique que un servidor externo (por ejemplo, RADIUS) debe devolver un valor para la variable definida por el usuario. Si el servidor externo no devuelve un valor para la variable, se produce un error en el perfil dinámico.uid
: configure un ID único para filtros parametrizados y CoS en un perfil dinámico creado para servicios.uid-reference
: configure una variable que haga referencia a un ID único para filtros parametrizados o CoS en un perfil dinámico creado para servicios.
El orden en el que se define cómo se obtienen las variables es importante. Para asegurarse de que obtiene variables obligatorias de un servidor externo y no derivar valores de valores predeterminados o mediante expresiones de variables, primero debe definir las variables obligatorias.
Configuración de variables dinámicas definidas por el usuario en perfiles dinámicos
En este tema se explica cómo configurar una variable dinámica definida por el usuario en un perfil de servicio dinámico. Puede definir una variable en el nivel de [edit dynamic-profiles profile-name variables]
jerarquía que se utilice en otra parte del perfil de servicio dinámico. Opcionalmente, puede especificar un valor predeterminado para cualquier variable dinámica que aparezca en el cuerpo del perfil dinámico. Los valores predeterminados de las variables se utilizan en caso de que el enrutador no pueda acceder a un servidor externo (por ejemplo, RADIUS) u obtenga un valor para utilizarlo como variable dinámica. Como alternativa, puede especificar que sea obligatorio usar un valor devuelto por RADIUS; Si no se recibe ese valor, se produce un error en el perfil.
Antes de configurar los valores predeterminados de las variables dinámicas:
Cree un perfil dinámico básico.
Asegúrese de que el enrutador esté configurado para habilitar la comunicación entre el cliente y el servidor RADIUS.
Consulte Especificación de los métodos de autenticación y contabilidad para el acceso de suscriptores.
Configure todos los valores RADIUS que desea que usen los perfiles al validar suscriptores.
Consulte Servidores RADIUS y parámetros para el acceso de suscriptores
Para configurar variables en un perfil de servicio dinámico:
Uso de expresiones de variables en variables definidas por el usuario
Junos OS permite crear expresiones (grupos de operadores aritméticos, operadores de cadena y operandos) para utilizarlas como variables dentro de perfiles dinámicos. Las expresiones de variable se configuran en el nivel de [dynamic-profiles profile-name variables]
jerarquía. En tiempo de ejecución, las expresiones de variable se calculan y se utilizan como valores de variable para configurar interfaces de suscriptor dinámicas.
Al configurar expresiones en perfiles dinámicos, debe cumplir las siguientes reglas:
-
Solo puede configurar expresiones dentro de una estrofa variable de un perfil dinámico.
-
Los perfiles dinámicos que contienen expresiones para variables definidas por el usuario solo deben usarse para la activación del servicio.
-
Por lo general, las expresiones solo se asignan a variables definidas por el usuario. No puede asignar expresiones a variables internas ni predefinidas.
-
Los valores de expresión tienen prioridad sobre los valores predeterminados.
-
Las expresiones enteras deben estar entre comillas (" ").
-
Las cadenas dentro de las expresiones deben citarse entre comillas simples (' ') y las comillas simples sólo pueden contener cadenas.
-
El espacio en blanco se trata como un delimitador para todos los operandos y operadores. Las cadenas que contienen espacios que se crean dentro de las expresiones se tratan como cadenas simples e incluyen cualquier espacio en blanco inicial o final. Por ejemplo, para crear un perfil de servicio:
dynamic-profiles { service profile { variables { scheduler-name; video-filter equals “ ‘ Filter 1 ’ ” # Everything within the single quotation marks is considered a string, including the leading and trailing white space } } }
-
La expresión debe ser todos los operadores aritméticos o todos los operadores de cadena; No se permite mezclar operadores aritméticos y operadores de cadena a menos que se convierta correctamente al tipo correcto.
-
Las expresiones pueden hacer referencia a otras variables predefinidas del sistema u otras variables definidas por el usuario. Sin embargo, no se permite la referencia circular entre variables. Por ejemplo, la siguiente referencia es incorrecta:
dynamic-profiles { Service_Profile_1 { variables { scheduler-name; transmit-rate2 equals “ ( $transmit-rate1 * 2)/3” # refers to transmit-rate1 transmit-rate1 equals “ ( $transmit-rate2 * 2)/3” # refers to transmit-rate2 } } }
-
Para crear una interfaz dinámica y un conjunto de interfaces para el plano de usuario BNG-CUPS, utilice el siguiente formato:
dynamic-profile { <dprof_name> { interfaces { interface-set <dynamic interface-set Name> { interface <interface-name> { unit "$junos-interface-unit"; } } … class-of-service { … interfaces { interface-set <dynamic interface-set Name> { output-traffic-control-profile <TCP Name>; } } } }
Puede configurar la prioridad del filtro de servicio para el plano de usuario BNG-CUPS para controlar el orden de evaluación del servicio para los paquetes. Puede agregar la configuración de prioridad al perfil dinámico.
dynamic-profiles { <dprof_name> { ... interfaces { pp0 { unit "$junos-interface-unit" { ... family inet { filter { input "$in-filter" precedence 20; output "$out-filter" precedence 20; } unnumbered-address "$junos-loopback-interface"; } family inet6 { filter { input "$inv6-filter" precedence 20; output "$outv6-filter" precedence 20; } unnumbered-address "$junos-loopback-interface"; } } } } … }
-
Cualquier variable obligatoria que no contenga un valor "predeterminado" o una expresión "igual" debe contener un valor como parte de la activación del servicio. Por ejemplo, un VSA de servicio RADIUS como "service-video( value1, value2)" que contiene dos o menos variables obligatorias en la definición del perfil de servicio dinámico "service-video" se realiza correctamente. Se produce un error en la activación del servicio si al menos una variable obligatoria no tiene ningún valor asociado, ya sea mediante la evaluación de atributos "predeterminados" o "iguales".
En la tabla 1 se enumeran los operadores compatibles y las funciones que se pueden utilizar para crear expresiones. La precedencia 5 es el nivel más alto.
Operación |
Operador |
Asociatividad |
Precedencia |
Acción |
---|---|---|---|---|
Suma aritmética |
+ |
Izquierda |
1 |
Suma los elementos a la derecha y a la izquierda del operador. |
Resta aritmética |
- |
Izquierda |
1 |
Resta el elemento a la derecha del operador del elemento a la izquierda del operador. |
Multiplicación aritmética |
* |
Izquierda |
2 |
Multiplica el elemento situado a la izquierda del operador por el elemento situado a la derecha del operador. |
División aritmética |
/ |
Izquierda |
2 |
Divide el elemento a la izquierda del operador por el elemento a la derecha del operador. |
Módulo aritmético |
% |
Izquierda |
2 |
Divide el elemento a la izquierda del operador por el elemento a la derecha del operador y devuelve el resto entero. Si el elemento a la izquierda del operador es menor que el elemento a la derecha del operador, el resultado es el elemento a la izquierda del operador. |
Concatenación |
## |
Izquierda |
3 |
Crea una nueva cadena uniendo los valores de cadena a la izquierda del operador y los valores a la derecha del operador. |
Máximo |
max(param1,param2) |
Izquierda |
4 |
Toma el máximo de los dos valores pasados como parámetros. |
Mínimo |
min(param1;param2) |
Izquierda |
4 |
Toma el mínimo de los dos valores pasados como parámetros. |
Redondo |
redondo (param1) |
- |
4 |
Redondea el valor al entero más cercano. |
Truncar |
trunc(param1) |
- |
4 |
Trunca un valor no entero al valor izquierdo del punto decimal. |
Convertir en cadena |
toStr(param1) |
- |
4 |
Convierte la variable entre paréntesis en una cadena terminada en null. |
Convertir a entero |
toInt(param1) |
- |
4 |
Convierte el parámetro en un número entero. Se permite una sola cadena o variable como parámetro. |
Aleatorio |
rand() |
- |
4 |
Genera un valor numérico aleatorio. |
Si no es cero |
ifNotZero(param1, param2) |
Izquierda |
4 |
Devuelve el segundo parámetro si el primer parámetro no es cero. Devuelve NULL si el primer parámetro es cero. |
Paréntesis |
( ) |
- |
5 |
Agrupa operandos y operadores para lograr resultados diferentes de la precedencia simple; efectivamente tiene la prioridad más alta. |
Las expresiones se evalúan después de que las variables se rellenan con valores. La evaluación se lleva a cabo inmediatamente antes de la instanciación del perfil e incluye la comprobación del valor. Si los valores calculados no son aceptables o se rompen las reglas que rigen la sintaxis de expresión, se produce un error en la evaluación de la expresión, no se produce la creación de instancias de perfiles y se registran mensajes para describir los errores.
En la Tabla 2 se enumeran los posibles escenarios de error de expresión y las medidas realizadas por el software del enrutador.
Error |
Ocurrencia |
Acción |
Valor variable |
---|---|---|---|
Error de análisis |
Fase de comprobación de confirmación |
Error de confirmación |
No aplica |
Error de dependencia de variable circular |
Fase de comprobación de confirmación |
Error de confirmación |
No aplica |
Las variables dentro de las expresiones no están definidas |
Fase de comprobación de confirmación |
Error de confirmación |
No aplica |
Dividir por cero |
Creación de instancias de perfiles |
Error en la creación de instancias de perfiles |
Cero (0) |
Agregar cadena a un número |
Creación de instancias de perfiles |
Error en la creación de instancias de perfiles |
Cero (0) |
Error de desbordamiento |
Creación de instancias de perfiles |
Error en la creación de instancias de perfiles |
Indefinido |
Error de desbordamiento |
Creación de instancias de perfiles |
Error en la creación de instancias de perfiles |
Indefinido |
También puede configurar las variables definidas por el usuario con un valor predeterminado. El valor predeterminado proporciona una configuración independiente para la instrucción asociada o una copia de seguridad para la configuración de la instrucción si no se puede tener acceso al servidor RADIUS o si el atributo VSA no contiene un valor.
Historial de cambios para expresiones de variables en variables definidas por el usuario
La compatibilidad con las funciones viene determinada por la plataforma y la versión que esté utilizando. Utilice el Explorador de características para determinar si una característica es compatible con su plataforma.
Descripción de la versión | |
---|---|
19.3 | A partir de Junos OS versión 19.3R1, puede configurar expresiones en la También puede configurar un número limitado de expresiones para establecer valores predeterminados para variables predefinidas. Consulte Valores predeterminados de variables predefinidos para perfiles de cliente dinámicos. |
25.2 Junos OS evolucionado | A partir de Junos OS Evolved versión 25.2R1, puede configurar la prioridad de filtros de entrada o salida de conjunto de interfaces y familia (inet, inet6) para perfiles dinámicos en el modo de plano de usuario BNG-CUPS. |
Ver también
Configuración de expresiones variables en perfiles dinámicos
Puede crear expresiones (grupos de operadores aritméticos, operadores de cadena y operandos) para usarlas como variables dentro de perfiles dinámicos. Estas expresiones se utilizan como valores de variable para configurar interfaces de suscriptor dinámicas.
Para configurar expresiones de variables de perfil dinámico:
En la tabla 4 se proporcionan varios ejemplos de expresiones que se pueden crear mediante los operadores y las funciones compatibles.
Ejemplo |
Descripción |
---|---|
video-filtro es igual a "' Filtro1' " |
Asigna la cadena " Filter1" a la variable dinámica $video-filter. |
video-filter2 es igual a "$video-filter ## ' Filter2' " |
Convierte la variable dinámica "$video-filter" en una cadena y concatena la nueva cadena con la cadena "Filter2". El resultado es la cadena "$video-filter Filter2" asignada a la variable $video-filter2. |
tempvar es igual a "120" |
Convierte "120" en un entero y asigna el entero a la variable $tempvar. |
transmisión-rate2 es igual a " ( $transmit-rate1 * 2)/3 + $tempvar)" |
Multiplica la variable "transmit-rate1" por 2 y divide ese valor por la suma de 3 y el valor de "$tempvar". El resultado se asigna a la variable $transmit-rate2. |
host-ip es igual a " '203.0.113.2' " |
Asigna la cadena "203.0.113.2" a la variable $host-ip. |
max-val "max($max 1,$max 2)" |
Asigna el valor mayor "max1" o "max2" a la variable $max-val. |
min-val "$min($var 1,30)" |
Asigne los valores menores "var1" y "30" a la variable $min-val. |
rounded-var es igual a "round($var 1 )" |
Redondea el valor de la variable "$var 1" al entero más cercano y asigna el valor a la variable $rounded-var. |
trunc-var es igual a "trunc(1234.5)" |
Trunca el valor entre paréntesis al lado izquierdo del decimal y asigna el valor resultante a la variable $trunc-var. |
bwg-shaping-rate es igual a "$ancp-downstream - ($ancp-downstream % 2 * (1 - $sp-qos-cell-mode))" |
Evalúa la expresión según la prioridad establecida entre paréntesis. |
temp-filter1 es igual a " 'Filter1' ## toStr($filter)" |
Convierte la variable "$filter" en un valor de cadena y concatena la cadena convertida en la cadena "Filter1". La cadena combinada resultante se asigna a la variable $temp-filter1. |
Descripción general de la configuración condicional para perfiles dinámicos
Puede configurar instrucciones de configuración condicional para perfiles dinámicos a fin de obtener dinámicamente información de suscriptor para un cliente o servicio.
La configuración condicional implica dos pasos principales:
Definición de la variable condicional
Hacer referencia a la variable condicional en una instrucción de configuración
Una variable condicional se define como una expresión ifNotZero (param1, param2). En esta expresión, param1 es una variable definida por el usuario cuyo valor se deriva de un servidor externo como RADIUS y param2 puede ser una variable definida por el usuario, una función, operación, número o cadena. Una variable condicional puede ser definida por el usuario o variable de ID único (UID). reference No puede ser una variable predefinida o UID. En Junos OS, las variables condicionales solo se admiten para los perfiles dinámicos de servicio.
Las instrucciones de configuración en las que se hace referencia a las variables condicionales se denominan conditional instrucciones de configuración. Una vez definida la variable condicional, se hace referencia a ella en dynamic-profiles las instrucciones de configuración y se procesan cuando se crea una instancia del perfil de servicio. Las siguientes instrucciones de configuración de perfil de servicio admiten variables condicionales:
dynamic-profiles profile-name interfaces interface-name unit unit-no family type filter input filter-name
dynamic-profiles profile-name interfaces interface-name unit unit-no family type filter output filter-name
dynamic-profiles profile-name firewall family type filter filter-name term term-name
dynamic-profiles profile-name firewall family type filter filter-name term term-name then policer policer-name
dynamic-profiles profile-name firewall family type filter filter-name term term-name then hierarchical-policer policer-name
dynamic-profiles profile-name class-of-service scheduler-maps map-name forwarding-class class-name scheduler scheduler-name
El sistema sigue el siguiente conjunto de reglas al evaluar las variables condicionales y las instrucciones de configuración condicional durante la creación de instancias de perfiles de servicio:
En la función
ifNotZero
(param1, param2), si el valor de a param1 no se recibe de un servidor externo y si el valor predeterminado no está configurado, el valor de la variable se trata como distinto de cero y param2 se evalúa.Si el valor de param1 en la función
ifNotZero
(param1, param2) es 0, se devuelve NULL como valor de la expresión y param2 no se evalúa. En este caso, el valor de la variable condicional se convierte en NULL y se omite la instrucción de configuración en la que se hace referencia a la variable condicional.Si el valor de param1 es distinto de cero, se param2 evalúa y su valor se devuelve como el valor de la expresión.
Los siguientes filter-service ejemplos de configuración muestran cos-service cómo se aplican las reglas:
Ejemplo de configuración del servicio de filtro
filter-service { variables { input-filter-var mandatory; output-filter-var mandatory; bw-limit-var mandatory; term1-var default-value term1; input-filter-ref { equals "ifNotZero($input-filter-var,$input-filter-var)"; uid-reference; } output-filter-ref { equals "ifNotZero($output-filter-var,$output-filter-var)"; uid-reference; } policer1-ref { equals "ifNotZero($bw-limit-var,'policer1')"; uid-reference; } term1 equals "ifNotZero($term1-var,$term1-var)"; input-filter uid; output-filter uid; policer1 uid; } interfaces { pp0 { unit "$junos-interface-unit" { family inet { filter { input "$input-filter-ref" precedence 50; output "$output-filter-ref" precedence 50; } } } } } firewall { family inet { filter "$input-filter" { interface-specific; term $term1 { then { policer "$policer1-ref"; service-accounting; } } term rest { then accept; } } filter "$output-filter" { interface-specific; term rest { then accept; } } } policer "$policer1" { if-exceeding { bandwidth-limit "$bw-limit-var"; burst-size-limit 15k; } then discard; } } }
En el ejemplo de filter-service configuración, input-filter-ref
, output-filter-ref
, policer1-ref
y term1
son variables condicionales mientras que input "$input-filter-ref" precedence 50
, output "$output-filter-ref" precedence 50
, term $term1
, y policer "$policer1-ref"
son instrucciones de configuración condicionales. En este ejemplo, si el valor de input-filter-var
es 0, el valor de la variable input-filter-ref
condicional se convierte en NULL. Por lo tanto, se ignora toda la instrucción de configuración, input “$input-filter-ref” precedence 50
, en la que se hace referencia a la variable condicional. Sin embargo, si , el valor de la variable es distinto de cero, la instrucción de configuración se procesa durante la creación de instancias del perfil de servicio.
Ejemplo de configuración del servicio CoS
cos-service { variables { sch1_var mandatory; sch2_var mandatory; sch1_ref { equals "ifNotZero($sch1_var,$sch1_var)"; uid-reference; } sch2_ref { equals "ifNotZero($sch2_var,$sch2_var)"; uid-reference; } smap1 uid; sch1 uid; sch2 uid; } class-of-service { scheduler-maps { "$smap1" { forwarding-class best-effort scheduler "$sch1_ref"; forwarding-class assured-forwarding scheduler "$sch2_ref"; } } schedulers { "$sch1" { transmit-rate percent 30; buffer-size percent 30; priority low; } "$sch2" { transmit-rate percent 10; buffer-size percent 10; priority high; } } } }
En el ejemplo de cos-service configuración, sch1_ref
y sch2_ref
son variables condicionales while forwarding-class best-effort scheduler "$sch1_ref"
y forwarding-class assured-forwarding scheduler "$sch2_ref"
son instrucciones de configuración condicionales. De forma similar a la evaluación del filter-service ejemplo de configuración, si el valor de cualquier variable a la que se hace referencia en una variable condicional es 0, la instrucción de configuración en la que se hace referencia a la variable condicional se omite y no se procesa durante la creación de instancias del perfil de servicio CoS.