SUR CETTE PAGE
Configuration de variables dynamiques définies par l’utilisateur dans des profils dynamiques
Utilisation d’expressions de variable dans des variables définies par l’utilisateur
Configuration d’expressions de variable dans les profils dynamiques
Vue d’ensemble de la configuration conditionnelle pour le profil dynamique
Variables définies par l’utilisateur dans des 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 d’utiliser ces variables 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 abonnés.
Vous pouvez utiliser l’une des instructions suivantes pour configurer des variables définies par l’utilisateur :
default-value
: permet de configurer la valeur par défaut d’une variable définie par l’utilisateur dans un profil dynamique. Les valeurs utilisées par le système 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
: configurez 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
: spécifie 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
: configurez un ID unique pour les filtres et les CoS paramétrés dans un profil dynamique créé pour les services.uid-reference
: configurez 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 la façon dont 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 à partir de valeurs par défaut ou via des expressions de variables, 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 n’est pas en mesure 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 retourné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.
Reportez-vous à la section Configuration d’un profil dynamique de base.
Assurez-vous que le routeur est configuré pour permettre la communication entre le client et le serveur RADIUS.
Reportez-vous à la section Spécification des méthodes d’authentification et de comptabilisation de 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 variable dans des variables définies par l’utilisateur
Junos OS vous permet de créer des expressions (groupes d’opérateurs arithmétiques, d’opérateurs de chaîne et d’opérandes) à utiliser en tant que variables dans des profils dynamiques. Vous configurez des 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 sont prioritaires sur les valeurs par défaut.
-
Les expressions entières doivent être placées entre guillemets ( » « ).
-
Les chaînes à l’intérieur des expressions doivent être entre guillemets simples (' ') et les guillemets simples ne peuvent contenir que des chaînes.
-
Les espaces blancs sont traités comme un délimiteur pour tous les opérandes et opérateurs. Les chaînes contenant des espaces que vous créez dans des 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 soit tous les opérateurs arithmétiques, soit 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 type correct.
-
Les expressions peuvent faire référence à d’autres variables prédéfinies par le 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 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é du filtre de service pour le plan utilisateur BNG-CUPS, afin de contrôler l’ordre d’évaluation du service pour les paquets. Vous pouvez ajouter la configuration de priorité 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 « default » ou d’expression « equals » 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 deux variables obligatoires ou moins 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’est associée à aucune valeur, que ce soit par le biais de l’évaluation de l’attribut « default » ou « equals ».
Le tableau 1 répertorie les opérateurs et les fonctions pris en charge que vous pouvez utiliser pour créer des expressions. La priorité 5 est le niveau le plus élevé.
Opération |
Opérateur |
Associativité |
Préséance |
Action |
---|---|---|---|---|
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 à gauche de l’opérateur. |
Multiplication arithmétique |
* |
Gauche |
2 |
Multiplie l’élément à gauche de l’opérateur par l’élément à droite de l’opérateur. |
Division arithmétique |
/ |
Gauche |
2 |
Divise l’élément à gauche de l’opérateur par l’élément à droite de l’opérateur. |
Arithmétique modulo |
% |
Gauche |
2 |
Divise l’élément à gauche de l’opérateur par l’élément à 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 nouvelle 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 une valeur nulle. |
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. |
Si ce n’est pas zéro |
ifNotZero(param1, param2) |
Gauche |
4 |
Renvoie le deuxième paramètre si le premier paramètre n’est pas nul. Renvoie la valeur 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écédence ; a effectivement la priorité la plus élevée. |
Les expressions sont évaluées une fois que les variables sont renseignées 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 ne se produit pas et des messages sont consignés pour décrire les erreurs.
Le Tableau 2 répertorie les scénarios d’erreur d’expression possibles et les mesures prises par le logiciel du routeur.
Erreur |
Occurrence |
Action |
Valeur variable |
---|---|---|---|
Erreur d’analyse |
Phase de vérification de la validation |
Échec de la validation |
sans objet |
Erreur de dépendance de variable circulaire |
Phase de vérification de la validation |
Échec de la validation |
sans objet |
Les variables à l’intérieur des expressions ne sont pas définies |
Phase de vérification de la validation |
Échec de la validation |
sans objet |
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 de capacité |
Instanciation de profil |
Échec de l’instanciation du profil |
Indéfini |
Erreur de sous-débit |
Instanciation de profil |
Échec de l’instanciation du profil |
Indé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 des 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 afin d’établir des valeurs par défaut pour des variables prédéfinies. Reportez-vous à la section Valeurs par défaut des variables prédéfinies pour les profils client dynamiques. |
25.2 Junos OS Evolved | À partir de Junos OS Evolved version 25.2R1, vous pouvez configurer la priorité des filtres d’entrée ou de sortie de l’ensemble d’interfaces et de la famille (inet, inet6) pour les profils dynamiques en mode plan utilisateur BNG-CUPS. |
Voir aussi
Configuration d’expressions de variable dans les profils dynamiques
Vous pouvez créer des expressions (groupes d’opérateurs arithmétiques, d’opérateurs de chaîne et d’opérandes) à utiliser en tant que variables dans des profils dynamiques. Ces expressions sont utilisées comme valeurs de variable pour configurer des interfaces d’abonnés dynamiques.
Pour configurer des expressions de variables de profil dynamiques, procédez comme suit :
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 |
Description |
---|---|
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 de caractères 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 entier et l’assigne à la variable $tempvar. |
taux d’émission2 est égal à " ( $transmit-taux1 * 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) » |
Attribue la valeur la plus élevée entre « max1 » ou « max2 » à la variable $max-val. |
min-val « $min($var 1,30) » |
Affectez la valeur 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 sur le côté gauche de la décimale et affecte la valeur résultante à la variable $trunc-var. |
bwg-shaping-rate est égal à « $ancp en aval - ($ancp % en aval 2 * (1 - $sp-qos-cell-mode)) » |
Évalue l’expression selon la priorité définie entre parenthèses. |
temp-filter1 est égal à " 'Filter1' ## toStr($filter) » |
Convertit la variable « $filter » en 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. |
Vue d’ensemble de la configuration conditionnelle pour le profil dynamique
Vous pouvez configurer des instructions de configuration conditionnelle pour les profils dynamiques afin d’obtenir de manière dynamique des 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 il s’agit d’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 d’une variable 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 lors de l’instanciation du profil de service. 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-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
Le système suit l’ensemble de règles suivant lors de l’évaluation des variables conditionnelles et des instructions de configuration conditionnelles 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 différente de zéro et param2 est évaluée.Si la valeur de param1 dans la fonction
ifNotZero
(param1, param2) est 0, la valeur NULL est renvoyée comme valeur de l’expression et param2 n’est pas évaluée. 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 est différente de param1 zéro, elle param2 est évaluée et sa valeur est renvoyée en tant que valeur de l’expression.
Les exemples de configuration suivants filter-service cos-service montrent comment les règles sont appliquées :
Exemple de configuration du 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
, output-filter-ref
, policer1-ref
et term1
sont des variables conditionnelles tandis que input "$input-filter-ref" precedence 50
, output "$output-filter-ref" precedence 50
, term $term1
et policer "$policer1-ref"
sont des instructions de configuration conditionnelles. Dans cet exemple, si la valeur de input-filter-var
est 0, la valeur de la variable input-filter-ref
conditionnelle devient NULL. Ainsi, toute l’instruction de configuration, 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 d’un 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 conditionnelles. Comme pour l’évaluation dans l’exemple filter-service de 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.