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 jerárquico [edit dynamic-profiles profile-name variables] y utilizar esas variables en la [edit dynamic-profiles] jerarquía. El perfil dinámico obtiene y sustituye los datos de 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 sustituyen por valores reales y se utilizan para configurar interfaces de suscriptor.
Puede utilizar cualquiera de las instrucciones siguientes 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. La especificación de un 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 el servidor externo no es accesible 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 y CoS parametrizados 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 deriva valores de valores predeterminados o a través de expresiones 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 utiliza 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 variable se utilizan en caso de que el enrutador no pueda tener acceso a un servidor externo (por ejemplo, RADIUS) u obtener de otro modo un valor para utilizarlo como variable dinámica. Como alternativa, puede especificar que el uso de un valor devuelto por RADIUS es obligatorio; Si no se recibe ese valor, se produce un error en el perfil.
Antes de configurar cualquier valor predeterminado de variable dinámica:
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 de RADIUS.
Consulte Especificación de los métodos de autenticación y contabilidad para el acceso de suscriptores.
Configure todos los valores de RADIUS que desea que utilicen los perfiles al validar suscriptores.
Consulte Servidores y parámetros de RADIUS para 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 le permite crear expresiones (grupos de operadores aritméticos, operadores de cadena y operandos) para usarlas como variables dentro de perfiles dinámicos. Las expresiones de variables se configuran en el nivel de [dynamic-profiles profile-name variables] jerarquía. En tiempo de ejecución, las expresiones variables se calculan y se utilizan como valores variables para configurar interfaces dinámicas de suscriptores.
Al configurar expresiones en perfiles dinámicos, debe cumplir las siguientes reglas:
-
Solo puede configurar expresiones dentro de una estrofa de variable de un perfil dinámico.
-
Los perfiles dinámicos que contienen expresiones para variables definidas por el usuario solo se deben utilizar para la activación del servicio.
-
Por lo general, las expresiones solo se asignan a las variables definidas por el usuario. No puede asignar expresiones a variables internas o variables predefinidas.
-
Los valores de expresión tienen prioridad sobre los valores predeterminados.
-
Las expresiones completas deben estar entre comillas (" ").
-
Las cadenas dentro de las expresiones deben estar entre comillas simples (' ') y las comillas simples solo 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 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 operadores aritméticos o todos los operadores de cadena; No se permite mezclar operadores aritméticos y operadores de cadena a menos que se conviertan correctamente al tipo correcto.
-
Las expresiones pueden hacer referencia a otras variables predefinidas por el sistema u otras variables definidas por el usuario. Sin embargo, no se permite ninguna 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 a fin de 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 de RADIUS como "service-video( value1, value2)" que contiene dos o menos variables obligatorias en la definición de perfil de servicio dinámico "service-video" se realiza correctamente. La activación del servicio falla si al menos una variable obligatoria no tiene ningún valor asociado, ya sea a través de la evaluación de atributo "default" o "equals".
En la tabla 1 se enumeran los operadores y las funciones admitidos 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 juntos. |
| sustracción 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 |
Multiplique el elemento a la izquierda del operador por el elemento 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 |
ronda (param1) |
- |
4 |
Redondea el valor al entero más cercano. |
| Truncar |
trunc(param1) |
- |
4 |
Truncate un valor no entero al valor a la izquierda del punto decimal. |
| Convertir en cadena |
toStr(param1) |
- |
4 |
Convierte la variable dentro de los 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 mayor prioridad. |
Las expresiones se evalúan después de rellenar las variables con valores. La evaluación se lleva a cabo inmediatamente antes de la creación de instancias del perfil e incluye la comprobación de valores. Si los valores calculados no son aceptables o se infringen las reglas que rigen la sintaxis de expresión, se produce un error en la evaluación de la expresión, no se crea una instancia del perfil y se registran mensajes para describir los errores.
La tabla 2 enumera los posibles escenarios de error de expresión y la acción tomada por el software del enrutador.
| Error |
Ocurrencia |
Acción |
Valor de la variable |
|---|---|---|---|
| Error de análisis |
Fase de verificación de confirmación |
Error en la confirmación |
No aplica |
| Error de dependencia de variable circular |
Fase de verificación de confirmación |
Error en la confirmación |
No aplica |
| Las variables dentro de las expresiones no están definidas |
Fase de verificación de confirmación |
Error en la confirmación |
No aplica |
| Dividir por cero |
Creación de instancias de perfil |
Se produce un error en la creación de instancias de perfil |
Cero (0) |
| Agregar cadena a un número |
Creación de instancias de perfil |
Se produce un error en la creación de instancias de perfil |
Cero (0) |
| Error de desbordamiento |
Creación de instancias de perfil |
Se produce un error en la creación de instancias de perfil |
Indefinido |
| Error de subdesbordamiento |
Creación de instancias de perfil |
Se produce un error en la creación de instancias de perfil |
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 acceder 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 de la función depende de la plataforma y la versión que utilice. 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 predefinidas para perfiles de cliente dinámicos. |
| 25.2 Junos OS evolucionado | A partir de la versión 25.2R1 de Junos OS evolucionado, puede configurar la precedencia del filtro de entrada o salida del conjunto de interfaces y la 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 utilizarlas como variables dentro de perfiles dinámicos. Estas expresiones se utilizan como valores de variable para configurar interfaces dinámicas de suscriptores.
Para configurar expresiones de variables de perfil dinámicas:
En la tabla 4 se proporcionan varios ejemplos de expresiones que se pueden crear mediante los operadores y funciones admitidos.
Ejemplo |
Descripción |
|---|---|
video-filter es igual a "' Filter1' " |
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 número entero y asigna el número entero a la variable $tempvar. |
velocidad de transmisión2 es igual a " (velocidad de $transmit 1 * 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 el valor menor "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 número entero más cercano y asigna el valor a la variable $rounded-var. |
trunc-var es igual a "trunc(1234.5)" |
Truncate 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 condicionales para perfiles dinámicos a fin de obtener dinámicamente información del suscriptor de 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 una 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-namedynamic-profiles profile-name interfaces interface-name unit unit-no family type filter output filter-namedynamic-profiles profile-name firewall family type filter filter-name term term-namedynamic-profiles profile-name firewall family type filter filter-name term term-name then policer policer-namedynamic-profiles profile-name firewall family type filter filter-name term term-name then hierarchical-policer policer-namedynamic-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 condicionales durante la creación de instancias del perfil 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 el 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 es distinto de param1 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 de 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, , output-filter-ref, policer1-refy term1 son variables condicionales, input-filter-refmientras que input "$input-filter-ref" precedence 50, output "$output-filter-ref" precedence 50, term $term1y 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 de servicio de 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 manera 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 de CoS.