NESTA PÁGINA
Variáveis definidas pelo usuário em perfis dinâmicos
Variáveis definidas pelo usuário
Em perfis de serviço dinâmicos, o Junos OS permite configurar variáveis personalizadas no nível de [edit dynamic-profiles profile-name variables] hierarquia e usar essas variáveis na [edit dynamic-profiles] hierarquia. O perfil dinâmico obtém e substitui dados para essas variáveis de um servidor externo (por exemplo, RADIUS) durante o processo de autenticação do assinante. Em tempo de execução, as variáveis são substituídas por valores reais e usadas para configurar interfaces de assinante.
Você pode usar qualquer uma das seguintes instruções para configurar variáveis definidas pelo usuário:
default-value— Configure um valor padrão para uma variável definida pelo usuário em um perfil dinâmico. Os valores que o sistema usa para essas variáveis são aplicados quando o assinante é autenticado. A especificação de um valor padrão fornece uma configuração independente para a instrução associada ou um backup para a configuração da instrução se o servidor externo estiver inacessível ou não contiver um valor para a variável.equals— Configure uma expressão para uma variável definida pelo usuário que é avaliada em tempo de execução e retornada como o valor da variável.mandatory— Especifique que um servidor externo (por exemplo, RADIUS) deve retornar um valor para a variável definida pelo usuário. Se o servidor externo não retornar um valor para a variável, o perfil dinâmico falhará.uid— Configure um ID exclusivo para filtros com parâmetros e CoS em um perfil dinâmico criado para serviços.uid-reference— Configure uma variável que faça referência a um ID exclusivo para filtros com parâmetros ou CoS em um perfil dinâmico criado para serviços.
A ordem na qual você define como as variáveis são obtidas é importante. Para garantir que você obtenha quaisquer variáveis obrigatórias de um servidor externo e não derive valores de padrões ou por meio de expressões de variável, você deve definir quaisquer variáveis obrigatórias primeiro.
Configuração de variáveis dinâmicas definidas pelo usuário em perfis dinâmicos
Este tópico discute como configurar uma variável dinâmica definida pelo usuário em um perfil de serviço dinâmico. É possível definir uma variável no [edit dynamic-profiles profile-name variables] nível de hierarquia que é usada em outro lugar no perfil de serviço dinâmico. Opcionalmente, é possível especificar um valor padrão para qualquer variável dinâmica que apareça no corpo do perfil dinâmico. Os valores de variáveis padrão são usados caso o roteador não consiga acessar um servidor externo (por exemplo, RADIUS) ou obter um valor para uso como variável dinâmica. Como alternativa, você pode especificar que o uso de um valor retornado por RADIUS é obrigatório; Se esse valor não for recebido, o perfil falhará.
Antes de configurar qualquer valor padrão de variável dinâmica:
Crie um perfil dinâmico básico.
Consulte Configurando um Perfil Dinâmico Básico.
Certifique-se de que o roteador esteja configurado para permitir a comunicação entre o cliente e o servidor RADIUS.
Consulte Especificando os métodos de autenticação e contabilidade para acesso ao assinante.
Configure todos os valores RADIUS que você deseja que os perfis usem ao validar assinantes.
Consulte Servidores RADIUS e Parâmetros para Acesso de Assinante
Para configurar variáveis em um perfil de serviço dinâmico:
Usando expressões de variável em variáveis definidas pelo usuário
O Junos OS permite que você crie expressões — grupos de operadores aritméticos, operadores de string e operandos — para uso como variáveis dentro de perfis dinâmicos. Você configura expressões variáveis no nível da [dynamic-profiles profile-name variables] hierarquia. Em tempo de execução, as expressões variáveis são calculadas e usadas como valores variáveis para configurar interfaces dinâmicas de assinantes.
Ao configurar expressões em perfis dinâmicos, você deve seguir as seguintes regras:
-
Você pode configurar expressões somente dentro de uma estrofe variável de um perfil dinâmico.
-
Os perfis dinâmicos que contêm expressões para variáveis definidas pelo usuário devem ser usados apenas para ativação de serviço.
-
Geralmente, você atribui expressões apenas a variáveis definidas pelo usuário. Não é possível atribuir expressões a variáveis internas ou variáveis predefinidas.
-
Os valores de expressão têm precedência sobre os valores padrão.
-
Expressões inteiras devem estar contidas entre aspas (" ").
-
As cadeias de caracteres dentro das expressões devem ser colocadas entre aspas simples (' ') e as aspas simples podem conter apenas cadeias de caracteres.
-
O espaço em branco é tratado como um delimitador para todos os operandos e operadores. As cadeias de caracteres que contêm espaços que você cria dentro de expressões são tratadas como cadeias de caracteres únicas e incluem qualquer espaço em branco à esquerda ou à direita. Por exemplo, para criar um perfil de serviço:
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 } } } -
A expressão deve ser todos os operadores aritméticos ou todos os operadores de cadeia de caracteres; A mistura de operadores aritméticos e operadores de cadeia de caracteres não é permitida, a menos que seja convertida corretamente para o tipo correto.
-
As expressões podem se referir a outras variáveis predefinidas do sistema ou outras variáveis definidas pelo usuário. No entanto, nenhuma referência circular entre variáveis é permitida. Por exemplo, a seguinte referência está incorreta:
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 criar uma interface dinâmica e um conjunto de interfaces para o plano de usuário BNG-CUPS, use o seguinte 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>; } } } }Você pode configurar a precedência do filtro de serviço para o plano de usuário BNG-CUPS para controlar a ordem de avaliação de serviço para os pacotes. Você pode adicionar a configuração de precedência ao 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"; } } } } … } -
Qualquer variável obrigatória que não contenha um valor "padrão" ou uma expressão "igual" deve conter um valor como parte da ativação do serviço. Por exemplo, um VSA de serviço RADIUS como "service-video( value1, value2)" que contém duas ou menos variáveis obrigatórias na definição de perfil de serviço dinâmico "service-video" é bem-sucedido. A ativação do serviço falhará se pelo menos uma variável obrigatória não tiver nenhum valor associado a ela, seja por meio da avaliação do atributo "default" ou "equals".
A Tabela 1 lista os operadores e funções com suporte que você pode usar para criar expressões. A precedência 5 é o nível mais alto.
| Divisão de |
Operador |
Associatividade |
Precedência |
Ação |
|---|---|---|---|---|
| Adição aritmética |
+ |
Esquerda |
1 |
Adiciona os elementos à direita e à esquerda do operador juntos. |
| Subtração aritmética |
- |
Esquerda |
1 |
Subtrai o elemento à direita do operador do elemento à esquerda do operador. |
| Multiplicação aritmética |
* |
Esquerda |
2 |
Multiplica o elemento à esquerda do operador pelo elemento à direita do operador. |
| Divisão de Aritmética |
/ |
Esquerda |
2 |
Divide o elemento à esquerda do operador pelo elemento à direita do operador. |
| Módulo aritmético |
% |
Esquerda |
2 |
Divide o elemento à esquerda do operador pelo elemento à direita do operador e retorna o inteiro restante. Se o elemento à esquerda do operador for menor que o elemento à direita do operador, o resultado será o elemento à esquerda do operador. |
| Concatenação |
## |
Esquerda |
3 |
Cria uma nova cadeia de caracteres unindo os valores de cadeia de caracteres à esquerda do operador e os valores à direita do operador. |
| Máximo |
max(param1,param2) |
Esquerda |
4 |
Usa o máximo dos dois valores passados como parâmetros. |
| Mínimos |
min (param1, param2) |
Esquerda |
4 |
Usa o mínimo dos dois valores passados como parâmetros. |
| Redondo |
rodada(param1) |
- |
4 |
Arredonda o valor para o número inteiro mais próximo. |
| Truncar |
trunc(param1) |
- |
4 |
Trunca um valor não inteiro para o valor à esquerda da vírgula decimal. |
| Converter em cadeia de caracteres |
toStr(param1) |
- |
4 |
Converte a variável dentro dos parênteses em uma cadeia de caracteres terminada nula. |
| Converter em inteiro |
toInt(param1) |
- |
4 |
Converte o parâmetro em um número inteiro. Uma única string ou variável é permitida como parâmetro. |
| Aleatório |
rand() |
- |
4 |
Gera um valor numérico aleatório. |
| Se não for zero |
ifNotZero(param1, param2) |
Esquerda |
4 |
Retorna o segundo parâmetro se o primeiro parâmetro não for zero. Retorna NULL se o primeiro parâmetro for zero. |
| Parênteses |
( ) |
- |
5 |
Agrupa operandos e operadores para obter resultados diferentes da precedência simples; efetivamente tem a mais alta precedência. |
As expressões são avaliadas depois que as variáveis são preenchidas com valores. A avaliação é realizada imediatamente antes da instanciação do perfil e inclui a verificação de valor. Se os valores calculados não forem aceitáveis ou as regras que regem a sintaxe da expressão forem quebradas, a avaliação da expressão falhará, a instanciação do perfil não ocorrerá e as mensagens serão registradas para descrever os erros.
A Tabela 2 lista os possíveis cenários de erro de expressão e a ação tomada pelo software do roteador.
| Erro |
Ocorrência |
Ação |
Valor da variável |
|---|---|---|---|
| Erro de análise |
Fase de verificação de commit |
Falha no commit |
Não aplicável |
| Erro de dependência de variável circular |
Fase de verificação de commit |
Falha no commit |
Não aplicável |
| As variáveis dentro das expressões não são definidas |
Fase de verificação de commit |
Falha no commit |
Não aplicável |
| Dividir por zero |
Instanciação de perfil |
Falha na instanciação de perfil |
Zero (0) |
| Adicionar string a um número |
Instanciação de perfil |
Falha na instanciação de perfil |
Zero (0) |
| Erro de estouro |
Instanciação de perfil |
Falha na instanciação de perfil |
Indefinido |
| Erro de estouro negativo |
Instanciação de perfil |
Falha na instanciação de perfil |
Indefinido |
Você também pode configurar as variáveis definidas pelo usuário com um valor padrão. O valor padrão fornece uma configuração independente para a instrução associada ou um backup para a configuração da instrução se o servidor RADIUS estiver inacessível ou o atributo VSA não contiver um valor.
Histórico de alterações para expressões de variáveis em variáveis definidas pelo usuário
A compatibilidade com recursos é determinada pela plataforma e versão utilizada. Use o Explorador de recursos para determinar se um recurso é compatível com sua plataforma.
| Descrição | da versão |
|---|---|
| 19.3 | A partir do Junos OS Release 19.3R1, você pode configurar expressões na Você também pode configurar um número limitado de expressões para estabelecer valores padrão para variáveis predefinidas. Consulte Padrões de variáveis predefinidas para perfis dinâmicos de clientes. |
| 25.2 Junos OS Evolved | A partir do Junos OS Evolved Release 25.2R1, você pode configurar a precedência do filtro de entrada ou saída do conjunto de interfaces e da família (inet, inet6) para perfis dinâmicos no modo de plano de usuário BNG-CUPS. |
Veja também
Configuração de expressões variáveis em perfis dinâmicos
Você pode criar expressões — grupos de operadores aritméticos, operadores de cadeia de caracteres e operandos — para uso como variáveis em perfis dinâmicos. Essas expressões são usadas como valores de variáveis para configurar interfaces dinâmicas de assinante.
Para configurar expressões de variáveis de perfil dinâmico:
A Tabela 4 fornece vários exemplos de expressões que você pode criar usando os operadores e funções com suporte.
Exemplo |
Descrição |
|---|---|
filtro de vídeo é igual a "' Filtro1' " |
Atribui a cadeia de caracteres " Filter1" à variável dinâmica $video-filter. |
video-filter2 é igual a "$video-filter ## ' Filter2' " |
Converte a variável dinâmica "$video-filter" em uma string e concatena a nova string com a string " Filter2". O resultado é a cadeia de caracteres "$video-filter Filter2" atribuída à variável $video-filter2. |
tempvar é igual a "120" |
Converte "120" em um número inteiro e atribui o número inteiro à variável $tempvar. |
taxa de transmissão2 é igual a "($transmit-taxa1 * 2)/3 + $tempvar)" |
Multiplica a variável "taxa de transmissão1" por 2 e divide esse valor pela soma de 3 e o valor de "$tempvar". O resultado é atribuído à variável $transmit-rate2. |
host-ip é igual a " '203.0.113.2' " |
Atribui a cadeia de caracteres "203.0.113.2" à variável $host-ip. |
max-val "max($max 1,$max 2)" |
Atribui o maior valor "max1" ou "max2" à variável $max-val. |
min-val "$min($var 1,30)" |
Atribua o menor valor "var1" e "30" à variável $min-val. |
var arredondada é igual a "round($var 1 )" |
Arredonda o valor da variável "$var 1" para o inteiro mais próximo e atribui o valor à variável $rounded-var. |
trunc-var é igual a "trunc(1234.5)" |
Trunca o valor entre parênteses para o lado esquerdo do decimal e atribui o valor resultante à variável $trunc-var. |
bwg-shape-rate é igual a "$ancp-downstream - ($ancp-downstream % 2 * (1 - $sp-qos-cell-mode))" |
Avalia a expressão de acordo com a precedência definida entre parênteses. |
temp-filter1 é igual a " 'Filter1' ## toStr($filter)" |
Converte a variável "$filter" em um valor de cadeia de caracteres e concatena a cadeia de caracteres convertida na cadeia de caracteres "Filter1". A cadeia de caracteres combinada resultante é atribuída à variável $temp-filter1. |
Configuração condicional para visão geral do perfil dinâmico
É possível configurar declarações de configuração condicionais para perfis dinâmicos para obter dinamicamente informações de assinante para um cliente ou serviço.
A configuração condicional envolve duas etapas principais:
Definindo a variável condicional
Referenciando a variável condicional em uma instrução de configuração
Uma variável condicional é definida como uma expressão ifNotZero (param1, param2). Nesta expressão, param1 é uma variável definida pelo usuário cujo valor é derivado de um servidor externo, como RADIUS, e param2 pode ser uma variável definida pelo usuário, uma função, operação, número ou string. Uma variável condicional pode ser definida pelo usuário ou variável de ID exclusivo (UID). reference Não pode ser uma variável predefinida ou UID. No Junos OS, as variáveis condicionais são suportadas apenas para os perfis dinâmicos de serviço.
As instruções de configuração nas quais as variáveis condicionais são referenciadas são chamadas de conditional instruções de configuração. Depois que a variável condicional é definida, ela é referenciada em dynamic-profiles instruções de configuração e processada quando o perfil de serviço é instanciado. As seguintes instruções de configuração de perfil de serviço oferecem suporte a variáveis condicionais:
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
O sistema segue o seguinte conjunto de regras ao avaliar as variáveis condicionais e as instruções de configuração condicionais durante a instanciação do perfil de serviço:
Na função
ifNotZero(param1, param2), se o valor de a param1 não for recebido de um servidor externo e se o valor padrão não estiver configurado, o valor da variável será tratado como diferente de zero e param2 será avaliado.Se o valor de param1 na função
ifNotZero(param1, param2) for 0, NULL será retornado como o valor da expressão e param2 não será avaliado. Nesse caso, o valor da variável condicional se torna NULL e a instrução de configuração na qual a variável condicional é referenciada é ignorada.Se o valor de for diferente de param1 zero, então param2 é avaliado e seu valor é retornado como o valor da expressão.
Os exemplos de configuração a seguir filter-service cos-service mostram como as regras são aplicadas:
Exemplo de configuração do serviço 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;
}
}
}
No exemplo de filter-service configuração, , output-filter-ref, policer1-ref, e term1 são variáveis condicionais, input-filter-refenquanto input "$input-filter-ref" precedence 50, output "$output-filter-ref" precedence 50, term $term1, e policer "$policer1-ref" são instruções de configuração condicionais. Neste exemplo, se o valor de input-filter-var for 0, o valor da variável input-filter-ref condicional se tornará NULL. Assim, toda a instrução de configuração, input “$input-filter-ref” precedence 50, na qual a variável condicional é referenciada, é ignorada. Se, no entanto, o valor da variável for diferente de zero, a instrução de configuração será processada durante a instanciação do perfil de serviço.
Exemplo de configuração de serviço 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;
}
}
}
}
No exemplo de cos-service configuração, sch1_ref and sch2_ref são variáveis condicionais while forwarding-class best-effort scheduler "$sch1_ref" e forwarding-class assured-forwarding scheduler "$sch2_ref" são instruções de configuração condicionais. Semelhante à avaliação no exemplo de configuração, se o valor de qualquer variável referenciada filter-service em uma variável condicional for 0, a instrução de configuração na qual a variável condicional é referenciada será ignorada e não processada durante a instanciação do perfil de serviço CoS.