SUR CETTE PAGE
Configuration de variables dynamiques définies par l’utilisateur dans des profils dynamiques
Utilisation d’expressions de variables dans des variables définies par l’utilisateur
Configuration des expressions de variables dans les profils dynamiques
Configuration conditionnelle pour la présentation du profil dynamique
Variables définies par l’utilisateur dans les profils dynamiques
Variables définies par l’utilisateur
Dans les profils de service dynamiques, Junos OS vous permet de configurer des variables personnalisées au niveau de la [edit dynamic-profiles profile-name variables] hiérarchie et de les utiliser dans la [edit dynamic-profiles] hiérarchie. Le profil dynamique obtient et remplace les données de ces variables à partir d’un serveur externe (par exemple, RADIUS) pendant le processus d’authentification de l’abonné. Au moment de l’exécution, les variables sont remplacées par des valeurs réelles et utilisées pour configurer les interfaces des abonnés.
Vous pouvez utiliser l’une des instructions suivantes pour configurer des variables définies par l’utilisateur :
default-value: permet de configurer une valeur par défaut pour une variable définie par l’utilisateur dans un profil dynamique. Les valeurs que le système utilise pour ces variables sont appliquées lorsque l’abonné s’authentifie. La spécification d’une valeur par défaut fournit une configuration autonome pour l’instruction associée ou une sauvegarde pour la configuration de l’instruction si le serveur externe est inaccessible ou ne contient pas de valeur pour la variable.equals: permet de configurer une expression pour une variable définie par l’utilisateur qui est évaluée au moment de l’exécution et renvoyée en tant que valeur de variable.mandatory: indique qu’un serveur externe (par exemple, RADIUS) doit renvoyer une valeur pour la variable définie par l’utilisateur. Si le serveur externe ne renvoie pas de valeur pour la variable, le profil dynamique échoue.uid: permet de configurer un ID unique pour les filtres paramétrés et les CoS dans un profil dynamique créé pour les services.uid-reference: configure une variable qui fait référence à un ID unique pour les filtres paramétrés ou CoS dans un profil dynamique créé pour les services.
L’ordre dans lequel vous définissez comment les variables sont obtenues est important. Pour vous assurer que vous obtenez des variables obligatoires à partir d’un serveur externe et que vous ne dérivez pas de valeurs par défaut ou par le biais d’expressions de variable, vous devez d’abord définir les variables obligatoires.
Configuration de variables dynamiques définies par l’utilisateur dans des profils dynamiques
Cette rubrique explique comment configurer une variable dynamique définie par l’utilisateur dans un profil de service dynamique. Vous pouvez définir une variable au niveau de la [edit dynamic-profiles profile-name variables] hiérarchie qui est utilisée ailleurs dans le profil de service dynamique. Vous pouvez éventuellement spécifier une valeur par défaut pour toute variable dynamique qui apparaît dans le corps du profil dynamique. Les valeurs de variable par défaut sont utilisées dans le cas où le routeur est incapable d’accéder à un serveur externe (par exemple, RADIUS) ou d’obtenir une valeur à utiliser comme variable dynamique. Vous pouvez également spécifier que l’utilisation d’une valeur renvoyée par RADIUS est obligatoire ; Si cette valeur n’est pas reçue, le profil échoue.
Avant de configurer les valeurs par défaut des variables dynamiques :
Créez un profil dynamique de base.
Assurez-vous que le routeur est configuré pour permettre la communication entre le client et le serveur RADIUS.
Voir Spécification des méthodes d’authentification et de comptabilité pour l’accès abonné.
Configurez toutes les valeurs RADIUS que vous souhaitez que les profils utilisent lors de la validation des abonnés.
Pour configurer des variables dans un profil de service dynamique :
Utilisation d’expressions de variables dans des variables définies par l’utilisateur
Junos OS vous permet de créer des expressions (groupes d’opérateurs arithmétiques, opérateurs de chaîne et opérandes) à utiliser comme variables dans des profils dynamiques. Vous configurez les expressions de variable au niveau de la [dynamic-profiles profile-name variables] hiérarchie. Au moment de l’exécution, les expressions de variable sont calculées et utilisées comme valeurs de variable pour configurer des interfaces d’abonné dynamiques.
Lorsque vous configurez des expressions dans des profils dynamiques, vous devez respecter les règles suivantes :
-
Vous ne pouvez configurer des expressions qu’à l’intérieur d’une strophe variable d’un profil dynamique.
-
Les profils dynamiques qui contiennent des expressions pour des variables définies par l’utilisateur doivent être utilisés uniquement pour l’activation du service.
-
En règle générale, vous n’affectez des expressions qu’aux variables définies par l’utilisateur. Vous ne pouvez pas affecter d’expressions à des variables internes ou à des variables prédéfinies.
-
Les valeurs d’expression ont la priorité sur les valeurs par défaut.
-
Les expressions entières doivent être comprises entre guillemets (« »).
-
Les chaînes des expressions doivent être entre guillemets simples (' ') et les guillemets simples ne peuvent contenir que des chaînes.
-
L’espace blanc est traité comme un délimiteur pour tous les opérandes et opérateurs. Les chaînes contenant des espaces que vous créez dans les expressions sont traitées comme des chaînes simples et incluent tout espace blanc de début ou de fin. Par exemple, pour créer un profil de service :
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 } } } -
L’expression doit être composée soit d’opérateurs arithmétiques, soit de tous les opérateurs de chaîne ; Le mélange d’opérateurs arithmétiques et d’opérateurs de chaîne n’est pas autorisé à moins d’être correctement converti au bon type.
-
Les expressions peuvent faire référence à d’autres variables prédéfinies système ou à d’autres variables définies par l’utilisateur. Cependant, aucun référencement circulaire entre les variables n’est autorisé. Par exemple, la référence suivante est incorrecte :
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 } } } -
Pour créer une interface dynamique et un ensemble d’interfaces pour le plan d’utilisateur BNG-CUPS, utilisez le format suivant :
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>; } } } }Vous pouvez configurer la priorité des filtres de service pour le plan utilisateur BNG-CUPS, afin de contrôler l’ordre d’évaluation des services pour les paquets. Vous pouvez ajouter la configuration de précédence au profil dynamique.
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"; } } } } … } -
Toute variable obligatoire qui ne contient pas de valeur « par défaut » ou d’expression « égale » doit contenir une valeur dans le cadre de l’activation du service. Par exemple, un VSA de service RADIUS tel que « service-video( value1, value2) » qui contient au moins deux variables obligatoires dans la définition de profil de service dynamique « service-video » réussit. L’activation du service échoue si au moins une variable obligatoire n’a aucune valeur associée, que ce soit par l’évaluation d’attribut « par défaut » ou « égal à ».
Le Tableau 1 répertorie les opérateurs et les fonctions pris en charge que vous pouvez utiliser pour créer des expressions. La préséance 5 est le niveau le plus élevé.
| Fonctionnement |
Opérateur |
Associativité |
Préséance |
Mesures à prendre |
|---|---|---|---|---|
| Addition arithmétique |
+ |
Gauche |
1 |
Ajoute les éléments à droite et à gauche de l’opérateur. |
| Soustraction arithmétique |
- |
Gauche |
1 |
Soustrait l’élément à droite de l’opérateur de l’élément situé à gauche de l’opérateur. |
| Multiplication arithmétique |
* |
Gauche |
2 |
Multiplie l’élément à gauche de l’opérateur par l’élément situé à droite de l’opérateur. |
| Division arithmétique |
/ |
Gauche |
2 |
Divise l’élément à gauche de l’opérateur par l’élément situé à droite de l’opérateur. |
| Arithmétique Modulo |
% |
Gauche |
2 |
Divise l’élément à gauche de l’opérateur par l’élément situé à droite de l’opérateur et renvoie le reste entier. Si l’élément à gauche de l’opérateur est inférieur à l’élément à droite de l’opérateur, le résultat est l’élément à gauche de l’opérateur. |
| Concaténation |
## |
Gauche |
3 |
Crée une chaîne en joignant les valeurs de chaîne à gauche de l’opérateur et les valeurs à droite de l’opérateur. |
| Maximum |
max(param1,param2) |
Gauche |
4 |
Prend le maximum des deux valeurs passées en paramètres. |
| Minimum |
min(param1,param2) |
Gauche |
4 |
Prend le minimum des deux valeurs passées en paramètres. |
| Rond |
rond(param1) |
- |
4 |
Arrondit la valeur à l’entier le plus proche. |
| Tronquer |
trunc(param1) |
- |
4 |
Tronque une valeur non entière à la valeur à gauche de la virgule. |
| Convertir en chaîne |
toStr(param1) |
- |
4 |
Convertit la variable entre parenthèses en une chaîne terminée par un caractère NULL. |
| Convertir en entier |
toInt(param1) |
- |
4 |
Convertit le paramètre en entier. Une seule chaîne ou variable est autorisée en tant que paramètre. |
| Aléatoire |
rand() |
- |
4 |
Génère une valeur numérique aléatoire. |
| voire zéro |
ifNotZero(param1, param2) |
Gauche |
4 |
Renvoie le deuxième paramètre si le premier paramètre n’est pas nul. Renvoie NULL si le premier paramètre est égal à zéro. |
| Parenthèses |
( ) |
- |
5 |
Regroupe les opérandes et les opérateurs pour obtenir des résultats différents de la simple préséance ; a effectivement la plus haute préséance. |
Les expressions sont évaluées une fois que les variables sont remplies avec des valeurs. L’évaluation est effectuée immédiatement avant l’instanciation du profil et comprend une vérification de la valeur. Si les valeurs calculées ne sont pas acceptables ou si les règles régissant la syntaxe des expressions ne sont pas respectées, l’évaluation de l’expression échoue, l’instanciation du profil n’a pas lieu et les messages sont consignés pour décrire les erreurs.
Le Tableau 2 répertorie les scénarios d’erreur d’expression possibles et l’action entreprise par le logiciel du routeur.
| Erreur |
Occurrence |
Mesures à prendre |
Valeur variable |
|---|---|---|---|
| Erreur d’analyse |
Phase de vérification de la validation |
Échec de la validation |
Non applicable |
| Erreur de dépendance de variable circulaire |
Phase de vérification de la validation |
Échec de la validation |
Non applicable |
| Les variables à l’intérieur des expressions ne sont pas définies |
Phase de vérification de la validation |
Échec de la validation |
Non applicable |
| Diviser par zéro |
Instanciation de profil |
Échec de l’instanciation du profil |
Zéro (0) |
| Ajout d’une chaîne à un nombre |
Instanciation de profil |
Échec de l’instanciation du profil |
Zéro (0) |
| Erreur de dépassement |
Instanciation de profil |
Échec de l’instanciation du profil |
Non défini |
| Erreur de dépassement de débit |
Instanciation de profil |
Échec de l’instanciation du profil |
Non défini |
Vous pouvez également configurer les variables définies par l’utilisateur avec une valeur par défaut. La valeur par défaut fournit une configuration autonome pour l’instruction associée ou une sauvegarde pour la configuration de l’instruction si le serveur RADIUS est inaccessible ou si l’attribut VSA ne contient pas de valeur.
Historique des modifications pour les expressions de variable dans les variables définies par l’utilisateur
La prise en charge des fonctionnalités est déterminée par la plateforme et la version que vous utilisez. Utilisez l’explorateur de fonctionnalités pour déterminer si une fonctionnalité est prise en charge sur votre plateforme.
| Description de | la version |
|---|---|
| 19.3 | À partir de Junos OS version 19.3R1, vous pouvez configurer des expressions dans l’instruction Vous pouvez également configurer un nombre limité d’expressions pour établir des valeurs par défaut pour des variables prédéfinies. Voir Variables prédéfinies par défaut pour les profils client dynamiques. |
| 25.2 Junos OS Evolved | À partir de la version 25.2R1 de Junos OS Evolved, vous pouvez configurer la priorité des filtres d’entrée ou de sortie des ensembles d’interfaces et de la famille (inet, inet6) pour les profils dynamiques en mode plan utilisateur BNG-CUPS. |
Voir aussi
Configuration des expressions de variables dans les profils dynamiques
Vous pouvez créer des expressions (groupes d’opérateurs arithmétiques, opérateurs de chaîne et opérandes) à utiliser comme variables dans des profils dynamiques. Ces expressions sont utilisées comme valeurs variables pour configurer des interfaces d’abonnés dynamiques.
Pour configurer des expressions de variables de profil dynamique :
Le Tableau 4 fournit plusieurs exemples d’expressions que vous pouvez créer à l’aide des opérateurs et des fonctions pris en charge.
Exemple |
Descriptif |
|---|---|
video-filter est égal à « ' Filter1' » |
Affecte la chaîne « Filter1 » à la variable dynamique $video-filter. |
video-filter2 est égal à « $video-filter ## ' Filter2' » |
Convertit la variable dynamique « $video-filter » en chaîne et concatène la nouvelle chaîne avec la chaîne « Filter2 ». Le résultat est la chaîne « $video-filter Filter2 » affectée à la variable $video-filter2. |
tempvar est égal à « 120 » |
Convertit « 120 » en un entier et assigne l’entier à la variable $tempvar. |
transmit-rate2 est égal à " ( $transmit-rate1 * 2)/3 + $tempvar) » |
Multiplie la variable « transmit-rate1 » par 2 et divise cette valeur par la somme de 3 et la valeur de « $tempvar ». Le résultat est affecté à la variable $transmit-rate2. |
host-ip est égal à " '203.0.113.2' » |
Affecte la chaîne « 203.0.113.2 » à la variable $host-ip. |
max-val « max($max 1,$max 2) » |
Affecte la valeur la plus élevée des valeurs « max1 » ou « max2 » à la variable $max-val. |
min-val « $min($var 1,30) » |
Affectez la plus petite des valeurs « var1 » et « 30 » à la variable $min-val. |
rounded-var est égal à « round($var 1 ) » |
Arrondit la valeur de la variable « $var 1 » à l’entier le plus proche et affecte la valeur à la variable $rounded-var. |
trunc-var est égal à « trunc(1234.5) » |
Tronque la valeur entre parenthèses à gauche de la virgule et affecte la valeur résultante à la variable $trunc-var. |
bwg-shaping-rate est égal à « $ancp-aval - ($ancp-aval % 2 * (1 - $sp-qos-cell-mode)) » |
Évalue l’expression en fonction de la priorité définie entre parenthèses. |
temp-filter1 est égal à " 'Filter1' ## toStr($filter) » |
Convertit la variable « $filter » en une valeur de chaîne et concatène la chaîne convertie en chaîne « Filter1 ». La chaîne combinée résultante est affectée à la variable $temp-filter1. |
Configuration conditionnelle pour la présentation du profil dynamique
Vous pouvez configurer des instructions de configuration conditionnelle pour les profils dynamiques afin d’obtenir dynamiquement les informations sur l’abonné d’un client ou d’un service.
La configuration conditionnelle implique deux étapes principales :
Définition de la variable conditionnelle
Référencement de la variable conditionnelle dans une instruction de configuration
Une variable conditionnelle est définie comme une expression ifNotZero (param1, param2). Dans cette expression, param1 est une variable définie par l’utilisateur dont la valeur est dérivée d’un serveur externe tel que RADIUS et param2 peut être une variable définie par l’utilisateur, une fonction, une opération, un nombre ou une chaîne. Une variable conditionnelle peut être définie par l’utilisateur ou une variable d’ID unique (UID). reference Il ne peut pas s’agir d’une variable prédéfinie ou UID. Dans Junos OS, les variables conditionnelles sont prises en charge uniquement pour les profils dynamiques de service.
Les instructions de configuration dans lesquelles les variables conditionnelles sont référencées sont appelées conditional instructions de configuration. Une fois les variables conditionnelles définies, elles sont référencées dans dynamic-profiles les instructions de configuration et sont traitées lorsque le profil de service est instancié. Les instructions de configuration de profil de service suivantes prennent en charge les variables conditionnelles :
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
Le système suit l’ensemble de règles suivant lors de l’évaluation des variables conditionnelles et des instructions de configuration conditionnelle lors de l’instanciation du profil de service :
Dans la fonction
ifNotZero(param1, param2), si la valeur de a param1 n’est pas reçue d’un serveur externe et si la valeur par défaut n’est pas configurée, la valeur de la variable est traitée comme non nulle et param2 est évaluée.Si la valeur de param1 dans la fonction
ifNotZero(param1, param2) est 0, NULL est renvoyé comme valeur de l’expression et param2 n’est pas évalué. Dans ce cas, la valeur de la variable conditionnelle devient NULL et l’instruction de configuration dans laquelle la variable conditionnelle est référencée est ignorée.Si la valeur de param1 est différente de zéro, alors param2 est évalué et sa valeur est renvoyée comme valeur de l’expression.
Les exemples de configuration suivants filter-service cos-service montrent comment les règles sont appliquées :
Exemple de configuration d’un service de filtrage
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;
}
}
}
Dans l’exemple de filter-service configuration, input-filter-ref, , policer1-refoutput-filter-refet term1 sont des variables conditionnelles tandis que input "$input-filter-ref" precedence 50, output "$output-filter-ref" precedence 50, term $term1et policer "$policer1-ref" sont des instructions de configuration conditionnelle. Dans cet exemple, si la valeur de input-filter-var est 0, la valeur de la variable input-filter-ref conditionnelle devient NULL. Ainsi, l’instruction de configuration entière, input “$input-filter-ref” precedence 50, dans laquelle la variable conditionnelle est référencée, est ignorée. Toutefois, si la valeur de la variable est différente de zéro, l’instruction de configuration est traitée lors de l’instanciation du profil de service.
Exemple de configuration de service 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;
}
}
}
}
Dans l’exemple de cos-service configuration, sch1_ref et sch2_ref sont des variables conditionnelles tandis que forwarding-class best-effort scheduler "$sch1_ref" et forwarding-class assured-forwarding scheduler "$sch2_ref" sont des instructions de configuration conditionnelle. Comme pour l’évaluation de l’exemple de filter-service configuration, si la valeur d’une variable référencée dans une variable conditionnelle est 0, l’instruction de configuration dans laquelle la variable conditionnelle est référencée est ignorée et n’est pas traitée lors de l’instanciation du profil de service CoS.