AUF DIESER SEITE
Benutzerdefinierte Variablen in dynamischen Profilen
Benutzerdefinierte Variablen
In dynamischen Serviceprofilen können Sie mit Junos OS benutzerdefinierte Variablen auf Hierarchieebene [edit dynamic-profiles profile-name variables]
konfigurieren und diese Variablen in der [edit dynamic-profiles]
Hierarchie verwenden. Das dynamische Profil ruft während der Abonnentenauthentifizierung Daten für diese Variablen von einem externen Server (z. B. RADIUS) ab und ersetzt sie. Zur Laufzeit werden die Variablen durch tatsächliche Werte ersetzt und zur Konfiguration von Anwenderschnittstellen verwendet.
Sie können eine der folgenden Anweisungen verwenden, um benutzerdefinierte Variablen zu konfigurieren:
default-value
: Konfigurieren Sie einen Standardwert für eine benutzerdefinierte Variable in einem dynamischen Profil. Die Werte, die das System für diese Variablen verwendet, werden bei der Authentifizierung des Abonnenten angewendet. Durch die Angabe eines Standardwerts wird eine eigenständige Konfiguration für die zugeordnete Anweisung oder eine Sicherung für die Anweisungskonfiguration bereitgestellt, wenn auf den externen Server nicht zugegriffen werden kann oder er keinen Wert für die Variable enthält.equals
– Konfigurieren Sie einen Ausdruck für eine benutzerdefinierte Variable, der zur Laufzeit ausgewertet und als Variablenwert zurückgegeben wird.mandatory
– Geben Sie an, dass ein externer Server (z. B. RADIUS) einen Wert für die benutzerdefinierte Variable zurückgeben muss. Wenn der externe Server keinen Wert für die Variable zurückgibt, schlägt das dynamische Profil fehl.uid
– Konfigurieren Sie eine eindeutige ID für parametrisierte Filter und CoS in einem dynamischen Profil, das für Services erstellt wurde.uid-reference
: Konfigurieren Sie eine Variable, die auf eine eindeutige ID für parametrisierte Filter oder CoS in einem dynamischen Profil verweist, das für Services erstellt wurde.
Die Reihenfolge, in der Sie definieren, wie Variablen abgerufen werden, ist wichtig. Um sicherzustellen, dass Sie alle obligatorischen Variablen von einem externen Server abrufen und keine Werte aus Standardwerten oder durch Variablenausdrücke ableiten, müssen Sie zuerst alle obligatorischen Variablen definieren.
Konfigurieren von benutzerdefinierten dynamischen Variablen in dynamischen Profilen
In diesem Thema wird erläutert, wie eine benutzerdefinierte dynamische Variable in einem dynamischen Dienstprofil konfiguriert wird. Sie können auf Hierarchieebene eine Variable definieren, die [edit dynamic-profiles profile-name variables]
an anderer Stelle im dynamischen Serviceprofil verwendet wird. Sie können optional einen Standardwert für jede dynamische Variable angeben, die im Text des dynamischen Profils angezeigt wird. Die Standardvariablenwerte werden verwendet, wenn der Router nicht in der Lage ist, auf einen externen Server (z. B. RADIUS) zuzugreifen oder anderweitig einen Wert für die Verwendung als dynamische Variable zu erhalten. Alternativ können Sie angeben, dass die Verwendung eines von RADIUS zurückgegebenen Werts obligatorisch ist. Wenn dieser Wert nicht empfangen wird, schlägt das Profil fehl.
Bevor Sie Standardwerte für dynamische Variablen konfigurieren:
Erstellen Sie ein dynamisches Basisprofil.
Weitere Informationen finden Sie unter Konfigurieren eines grundlegenden dynamischen Profils.
Stellen Sie sicher, dass der Router so konfiguriert ist, dass die Kommunikation zwischen dem Client und dem RADIUS-Server möglich ist.
Weitere Informationen finden Sie unter Angeben der Authentifizierungs- und Abrechnungsmethoden für den Abonnentenzugriff.
Konfigurieren Sie alle RADIUS-Werte, die die Profile bei der Überprüfung von Abonnenten verwenden sollen.
So konfigurieren Sie Variablen in einem dynamischen Dienstprofil:
Verwenden von Variablenausdrücken in benutzerdefinierten Variablen
Mit Junos OS können Sie Ausdrücke – Gruppen von arithmetischen Operatoren, Zeichenfolgenoperatoren und Operanden – für die Verwendung als Variablen in dynamischen Profilen erstellen. Sie konfigurieren Variablenausdrücke auf Hierarchieebene [dynamic-profiles profile-name variables]
. Zur Laufzeit werden die Variablenausdrücke berechnet und als Variablenwerte verwendet, um dynamische Anwenderschnittstellen zu konfigurieren.
Bei der Konfiguration von Ausdrücken in dynamischen Profilen müssen Sie die folgenden Regeln beachten:
-
Sie können Ausdrücke nur innerhalb eines variablen Zeilenbereichs eines dynamischen Profils konfigurieren.
-
Dynamische Profile, die Ausdrücke für benutzerdefinierte Variablen enthalten, dürfen nur für die Dienstaktivierung verwendet werden.
-
In der Regel weisen Sie Ausdrücke nur benutzerdefinierten Variablen zu. Sie können interne Variablen oder vordefinierten Variablen keine Ausdrücke zuweisen.
-
Ausdruckswerte haben Vorrang vor Standardwerten.
-
Ganze Ausdrücke müssen in Anführungszeichen (" ") gesetzt werden.
-
Zeichenfolgen in den Ausdrücken müssen in einfachen Anführungszeichen (' ' ) angegeben werden, und die einfachen Anführungszeichen dürfen nur Zeichenfolgen enthalten.
-
Leerzeichen werden als Trennzeichen für alle Operanden und Operatoren behandelt. Zeichenfolgen, die Leerzeichen enthalten, die Sie in Ausdrücken erstellen, werden als einzelne Zeichenfolgen behandelt und enthalten alle führenden oder nachfolgenden Leerzeichen. So erstellen Sie z. B. ein Serviceprofil:
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 } } }
-
Der Ausdruck muss entweder aus allen arithmetischen Operatoren oder aus allen Zeichenfolgenoperatoren bestehen. Das Mischen von arithmetischen Operatoren und Zeichenfolgenoperatoren ist nur zulässig, wenn sie ordnungsgemäß in den richtigen Typ konvertiert wurden.
-
Ausdrücke können sich auf andere vordefinierte Systemvariablen oder andere benutzerdefinierte Variablen beziehen. Es ist jedoch kein Zirkelverweis zwischen Variablen zulässig. Zum Beispiel ist die folgende Referenz falsch:
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 } } }
-
Verwenden Sie das folgende Format, um eine dynamische Schnittstelle und ein Schnittstellenset für die BNG-CUPS-Benutzerebene zu erstellen:
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>; } } } }
Sie können die Rangfolge von Dienstfiltern für die BNG-CUPS-Benutzerebene konfigurieren, um die Dienstauswertungsreihenfolge für die Pakete zu steuern. Sie können die Prioritätskonfiguration zum dynamischen Profil hinzufügen.
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"; } } } } … }
-
Jede obligatorische Variable, die keinen Standardwert oder keinen Gleichheitsausdruck enthält, muss im Rahmen der Dienstaktivierung einen Wert enthalten. Beispielsweise ist ein RADIUS-Dienst-VSA wie "service-video( value1, value2)" erfolgreich, der zwei oder weniger obligatorische Variablen in der dynamischen Serviceprofildefinition "service-video" enthält. Die Dienstaktivierung schlägt fehl, wenn mindestens einer obligatorischen Variablen kein Wert zugeordnet ist, entweder durch Attributauswertung "default" oder "equals".
In Tabelle 1 sind die unterstützten Operatoren und Funktionen aufgeführt, mit denen Sie Ausdrücke erstellen können. Rangfolge 5 ist die höchste Stufe.
Operation |
Operator |
Assoziativität |
Vorrang |
Aktion |
---|---|---|---|---|
Arithmetische Addition |
+ |
Links |
1 |
Addiert die Elemente rechts und links neben dem Operator zusammen. |
Arithmetische Subtraktion |
- |
Links |
1 |
Subtrahiert das Element rechts vom Operator von dem Element links vom Operator. |
Arithmetische Multiplikation |
* |
Links |
2 |
Multipliziert das Element links vom Operator mit dem Element rechts neben dem Operator. |
Arithmetische Division |
/ |
Links |
2 |
Teilt das Element links vom Operator durch das Element rechts neben dem Operator. |
Arithmetic Modulo |
% |
Links |
2 |
Teilt das Element links vom Operator durch das Element rechts neben dem Operator und gibt den ganzzahligen Rest zurück. Wenn das Element links vom Operator kleiner ist als das Element rechts vom Operator, ist das Ergebnis das Element links vom Operator. |
Verkettung |
## |
Links |
3 |
Erstellt eine neue Zeichenfolge, indem die Zeichenfolgenwerte links vom Operator und die Werte rechts vom Operator miteinander verbunden werden. |
Maximum |
max(param1,param2) |
Links |
4 |
Akzeptiert das Maximum der beiden Werte, die als Parameter übergeben werden. |
Minimum |
min(param1,param2) |
Links |
4 |
Akzeptiert das Minimum der beiden Werte, die als Parameter übergeben werden. |
Rund |
rund(param1) |
- |
4 |
Rundet den Wert auf die nächste ganze Zahl. |
Abschneiden |
trunc(param1) |
- |
4 |
Schneidet einen nicht ganzzahligen Wert auf den Wert links vom Dezimaltrennzeichen ab. |
In Zeichenfolge konvertieren |
toStr(param1) |
- |
4 |
Konvertiert die Variable in den Klammern in eine mit NULL abgeschlossene Zeichenfolge. |
In Ganzzahl konvertieren |
toInt(param1) |
- |
4 |
Konvertiert den Parameter in eine ganze Zahl. Ein einzelner String oder eine einzelne Variable ist als Parameter zulässig. |
Zufällig |
rand() |
- |
4 |
Generiert einen zufälligen numerischen Wert. |
Wenn nicht Null |
ifNotZero(param1; param2) |
Links |
4 |
Gibt den zweiten Parameter zurück, wenn der erste Parameter nicht Null ist. Gibt NULL zurück, wenn der erste Parameter Null ist. |
Runde Klammern |
( ) |
- |
5 |
Gruppiert Operanden und Operatoren, um Ergebnisse zu erzielen, die sich von der einfachen Rangfolge unterscheiden. hat effektiv die höchste Priorität. |
Ausdrücke werden ausgewertet, nachdem Variablen mit Werten aufgefüllt wurden. Die Auswertung erfolgt unmittelbar vor der Profilinstanziierung und beinhaltet eine Wertprüfung. Wenn die berechneten Werte nicht akzeptabel sind oder Regeln für die Ausdruckssyntax verletzt werden, schlägt die Ausdrucksauswertung fehl, die Profilinstanziierung findet nicht statt, und es werden Meldungen protokolliert, um die Fehler zu beschreiben.
Tabelle 2 listet die möglichen Ausdrucksfehlerszenarien und die von der Routersoftware ausgeführte Aktion auf.
Fehler |
Vorkommen |
Aktion |
Variablenwert |
---|---|---|---|
Parsing-Fehler |
Commit-Check-Phase |
Commit schlägt fehl |
nicht zutreffend |
Abhängigkeitsfehler bei zirkulären Variablen |
Commit-Check-Phase |
Commit schlägt fehl |
nicht zutreffend |
Variablen innerhalb der Ausdrücke sind nicht definiert |
Commit-Check-Phase |
Commit schlägt fehl |
nicht zutreffend |
Durch Null dividieren |
Profil-Instanziierung |
Fehler bei der Profilinstanziierung |
Null (0) |
Hinzufügen einer Zeichenfolge zu einer Zahl |
Profil-Instanziierung |
Fehler bei der Profilinstanziierung |
Null (0) |
Überlauffehler |
Profil-Instanziierung |
Fehler bei der Profilinstanziierung |
Undefiniert |
Unterlauffehler |
Profil-Instanziierung |
Fehler bei der Profilinstanziierung |
Undefiniert |
Sie können die benutzerdefinierten Variablen auch mit einem Standardwert konfigurieren. Der Standardwert bietet eine eigenständige Konfiguration für die zugeordnete Anweisung oder eine Sicherung für die Anweisungskonfiguration, wenn auf den RADIUS-Server nicht zugegriffen werden kann oder das VSA-Attribut keinen Wert enthält.
Änderungshistorie für Variablenausdrücke in benutzerdefinierten Variablen
Die Unterstützung der Funktion hängt von der Plattform und der Version ab, die Sie benutzen. Verwenden Sie Funktionen entdecken , um festzustellen, ob eine Funktion auf Ihrer Plattform unterstützt wird.
Versionsbeschreibung | |
---|---|
19.3 | Ab Junos OS Version 19.3R1 können Sie Ausdrücke in der Sie können auch eine begrenzte Anzahl von Ausdrücken konfigurieren, um Standardwerte für vordefinierte Variablen festzulegen. Weitere Informationen finden Sie unter Standardwerte für vordefinierte Variablen für dynamische Clientprofile. |
25.2 Junos OS weiterentwickelt | Ab Junos OS Evolved Version 25.2R1 können Sie die Rangfolge von Schnittstellensätzen und -familien (inet, inet6) für Eingabe- oder Ausgabefilter für dynamische Profile im BNG-CUPS-Benutzerebenenmodus konfigurieren. |
Siehe auch
Konfigurieren von Variablenausdrücken in dynamischen Profilen
Sie können Ausdrücke – Gruppen von arithmetischen Operatoren, Zeichenfolgenoperatoren und Operanden – für die Verwendung als Variablen in dynamischen Profilen erstellen. Diese Ausdrücke werden als Variablenwerte verwendet, um dynamische Teilnehmerschnittstellen zu konfigurieren.
So konfigurieren Sie dynamische Profilvariablenausdrücke:
Tabelle 4 enthält einige Beispiele für Ausdrücke, die Sie mit den unterstützten Operatoren und Funktionen erstellen können.
Beispiel |
Beschreibung |
---|---|
video-filter gleich "' Filter1' " |
Weist der dynamischen $video-Filter-Variablen die Zeichenfolge " Filter1" zu. |
video-filter2 gleich "$video-filter ## ' Filter2' " |
Konvertiert die dynamische Variable "$video-filter" in einen String und verkettet den neuen String mit dem String " Filter2". Das Ergebnis ist die Zeichenfolge "$video-filter Filter2", die der Variablen $video-filter2 zugewiesen ist. |
tempvar ist gleich "120" |
Konvertiert "120" in eine ganze Zahl und weist die ganze Zahl der $tempvar Variablen zu. |
Übertragungsrate2 ist gleich " ( $transmit-rate1 * 2)/3 + $tempvar)" |
Multipliziert die Variable "transmit-rate1" mit 2 und dividiert diesen Wert durch die Summe aus 3 und dem Wert von "$tempvar". Das Ergebnis wird der Variablen $transmit-rate2 zugewiesen. |
host-ip ist gleich " '203.0.113.2' " |
Weist der Variablen "$host-ip" die Zeichenfolge "203.0.113.2" zu. |
max-val "max($max 1,$max 2)" |
Weist der Variablen "$max-val" den Wert "max1" oder "max2" zu, je nachdem, welcher Wert größer ist. |
min-val "$min($var 1,30)" |
Weisen Sie der Variablen "$min-val" die Werte "var1" und "30" zu, je nachdem, welcher Wert kleiner ist. |
rounded-var ist gleich "round($var 1 )" |
Rundet den Wert der Variablen "$var 1" auf die nächste ganze Zahl ab und weist den Wert der Variablen $rounded-var zu. |
trunc-var ist gleich "trunc(1234.5)" |
Schneidet den Wert in Klammern auf der linken Seite des Dezimaltrennzeichens ab und weist den resultierenden Wert der Variablen $trunc-var zu. |
bwg-shaping-rate gleich "$ancp-downstream - ($ancp-downstream % 2 * (1 - $sp-qos-cell-mode))" |
Wertet den Ausdruck gemäß der in den Klammern festgelegten Rangfolge aus. |
temp-filter1 ist gleich " 'Filter1' ## toStr($filter)" |
Konvertiert die Variable "$filter" in einen Zeichenfolgenwert und verkettet die konvertierte Zeichenfolge mit der Zeichenfolge "Filter1". Die resultierende kombinierte Zeichenfolge wird der Variablen $temp-filter1 zugewiesen. |
Bedingte Konfiguration für dynamisches Profil – Übersicht
Sie können bedingte Konfigurationsanweisungen für dynamische Profile konfigurieren, um Abonnenteninformationen für einen Client oder Dienst dynamisch abzurufen.
Die bedingte Konfiguration umfasst zwei Hauptschritte:
Definieren der Bedingungsvariablen
Verweisen auf die Bedingungsvariable in einer Konfigurationsanweisung
Eine bedingte Variable wird als Ausdruck ifNotZero (param1, param2)definiert. In diesem Ausdruck ist eine benutzerdefinierte Variable, param1 deren Wert von einem externen Server wie RADIUS abgeleitet wird und param2 eine benutzerdefinierte Variable, eine Funktion, ein Vorgang, eine Zahl oder eine Zeichenfolge sein kann. Bei einer Bedingungsvariablen kann es sich um eine benutzerdefinierte Variable oder eine eindeutige ID (UID) reference handeln. Es darf sich nicht um eine vordefinierte oder UID-Variable handeln. In Junos OS werden bedingte Variablen nur für die dynamischen Serviceprofile unterstützt.
Die Konfigurationsanweisungen, in denen auf die Bedingungsvariablen verwiesen wird, werden als Konfigurationsanweisungen bezeichnet conditional . Nachdem die Bedingungsvariable definiert wurde, wird in dynamic-profiles Konfigurationsanweisungen auf sie verwiesen und sie werden verarbeitet, wenn das Dienstprofil instanziiert wird. Die folgenden Konfigurationsanweisungen für Dienstprofile unterstützen bedingte Variablen:
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
Das System befolgt die folgenden Regeln bei der Auswertung der bedingten Variablen und bedingten Konfigurationsanweisungen während der Instanziierung des Dienstprofils:
Wenn in der Funktion
ifNotZero
(param1, param2) der Wert von a param1 nicht von einem externen Server empfangen wird und der Standardwert nicht konfiguriert ist, wird der Wert der Variablen als ungleich Null behandelt und param2 ausgewertet.Wenn der Wert von param1 in der Funktion
ifNotZero
(param1, param2) 0 ist, wird NULL als Wert des Ausdrucks zurückgegeben und param2 nicht ausgewertet. In diesem Fall wird der Wert der bedingten Variablen NULL, und die Konfigurationsanweisung, in der auf die bedingte Variable verwiesen wird, wird ignoriert.Wenn der Wert von param1 ungleich Null ist, wird er ausgewertet, param2 und sein Wert wird als Wert des Ausdrucks zurückgegeben.
Die folgenden filter-service cos-service Konfigurationsbeispiele zeigen, wie die Regeln angewendet werden:
Konfigurationsbeispiel für Filterdienst
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; } } }
filter-service Im Konfigurationsbeispiel sind , output-filter-ref
, policer1-ref
und term1
bedingte Variablen, input-filter-ref
while input "$input-filter-ref" precedence 50
, output "$output-filter-ref" precedence 50
, term $term1
und policer "$policer1-ref"
sind bedingte Konfigurationsanweisungen. Wenn in diesem Beispiel der Wert von input-filter-var
0 ist, wird der Wert der bedingten Variablen input-filter-ref
zu NULL. Daher wird die gesamte Konfigurationsanweisung input “$input-filter-ref” precedence 50
, in der auf die Bedingungsvariable verwiesen wird, ignoriert. Wenn der Wert der Variablen jedoch ungleich Null ist, wird die Konfigurationsanweisung während der Instanziierung des Dienstprofils verarbeitet.
Konfigurationsbeispiel für CoS-Services
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; } } } }
cos-service Im Konfigurationsbeispiel sch1_ref
sind und sch2_ref
bedingte Variablen while forwarding-class best-effort scheduler "$sch1_ref"
und forwarding-class assured-forwarding scheduler "$sch2_ref"
sind bedingte Konfigurationsanweisungen. Ähnlich wie bei der filter-service Auswertung im Konfigurationsbeispiel wird die Konfigurationsanweisung, in der auf die bedingte Variable verwiesen wird, ignoriert und während der CoS-Serviceprofilinstanziierung nicht verarbeitet, wenn der Wert einer Variablen, auf die in einer bedingten Variablen verwiesen wird, 0 ist.