المحتويات

المقدمة

المتطلبات الأساسية

المتطلبات

المكونات المستخدمة

معلومات أساسية

تعريف gNMI

ميزات gNMI

التكوين الأساسي ل Cisco IOS XR

يانغ كموثق

أستكشاف الأخطاء وإصلاحها:

المقدمة

يصف هذا وثيقة موجز عن NMI في cisco IOS® XR وكيفية إستخدام Pyang وفحص أشجار النموذج.

المتطلبات الأساسية

المتطلبات

توصي Cisco بأن تكون لديك معرفة بالمواضيع التالية:

- النظام الأساسي Cisco IOS XR.

- بايثون.

- بروتوكولات إدارة الشبكة.

المكونات المستخدمة

لا يقتصر هذا المستند على إصدارات أجهزة معينة يطبقها على إصدار 64 بت (eXR).

تم إنشاء المعلومات الواردة في هذا المستند من الأجهزة الموجودة في بيئة معملية خاصة. بدأت جميع الأجهزة المُستخدمة في هذا المستند بتكوين ممسوح (افتراضي). إذا كانت شبكتك قيد التشغيل، فتأكد من فهمك للتأثير المحتمل لأي أمر.

معلومات أساسية

تعريف gNMI

وبشكل عام، هناك بروتوكولات مختلفة لتكوين الشبكة، من NETconf و RESTCONF و gNMI (مكالمات الإجراء عن بعد ل Google (gRPC) و gRPC Network Management Interface)، من بين أمور أخرى. ويتم إستخدام هذه الطرز للتكوين لإدارة أجهزة الشبكة وتهدف دائما إلى أتمتة العمليات التي يمكن أن تكون ميكانيكية.

تستخدم هذه البروتوكولات نماذج بيانات مختلفة للسماح للمستخدمين بفهم ما هي عملية جهاز الشبكة، وبعبارة أخرى، فهي عبارة عن معلومات منظمة ومخطط يقوم بتطبيع المعلومات وكيفية إستهلاكها بواسطة الجهاز، وفي هذه الحالة، الموجه.

تقوم شركة GNMI بمراقبة تسليم البيانات وتوفير RPC (مكالمات الإجراء البعيد) للتحكم في الأجهزة المختلفة في الشبكة.

تعمل واجهة إدارة الشبكة (NMI) على أربع وظائف:

- الإمكانات: اطلب من الموجه توضيح الطرز التي تم تثبيتها في الموجه، ويشرح هذا الأمر بشكل أكبر في هذا المستند.

- الحصول: يمكن طلب كل مكون طرفي في شجرة البيانات إلى الموجه، تتطلب هذه العملية المعلومات المطلوبة.

- المجموعة: تعتبر المنشورات متغيرات، ما يوفر لها قدرات التغيير، تعيين مساعدة عملية على هذا يسمح للمستخدم بتحديث قيمة في نموذج البيانات.

- الاشتراك: تستخدم هذه الوظيفة في القياس عن بعد، وهي تساعد في سحب البيانات من وحدة نمطية معينة في النموذج.

ملاحظة: شاركت Cisco الكثير من المعلومات حول هذا الموضوع. لمزيد من المعلومات من gRPC، انقر فوق الارتباط التالي: مدونة xrdocs - OpenConfigNMI

ميزات gNMI

بروتوكول إدارة الشبكة

gNMI

النقل المستخدم

HTTP/2

مدعوم من قبل

بائع محايد

ترميز

بروتو بف

Proto Buff هي طريقة محايدة للغات، محايدة للنظام الأساسي، لإزالة تسلسل البيانات وتسلسلها بين جهازين، حيث يكون لكل طلب رد.

ملاحظة: لمزيد من التفاصيل في بروتوكول RCP وبروتو Port Buff انقر فوق الارتباط التالي: دليل بروتوكول GRPC.

التكوين الأساسي ل Cisco IOS XR

التالي هو التكوين الأساسي للموجه:

RP/0/RSP0/CPU0:XR(config)#grpc

RP/0/RSP0/CPU0:XR(config-grpc)#address-family ipv4

RP/0/RSP0/CPU0:XR(config-grpc)#max-request-total 256

RP/0/RSP0/CPU0:XR(config-grpc)#max-request-per-user 32

grpc

address-family ipv4

max-request-total 256

max-request-per-user 32

ملاحظة: يمكن تكوين منفذ استنادا إلى الإعداد، الإعداد الافتراضي، دون إستخدام TLS هو 57400، للحصول على مزيد من المعلومات انقر: github - GRPC يتم بدء التشغيل

يانغ كموثق

ان pYANG هو موثق يانغ مكتوب بلغة بايثون. هذه المكتبة المخصصة ل Python تساعد في التحقق من نماذج YANG وأيضا، معرفتها.

لكي يعمل هذا كما في الوثائق (وثائق PYANG)، يقترح إنشاء بيئة افتراضية في الكمبيوتر.

البيئة الظاهرية لتشغيل وثائق VP

مطلوب للتشغيل:

python -m venv <name of the directory>

على سبيل المثال (في وحدة MacOS الطرفية):

% mkdir test

% cd test

% python3 -m venv virtual_env

% ls

virtual_env

لتثبيت pYANG في قرص البيئة الافتراضية هذا إلى الدليل ولصق التالي:

% cd virual_env

% git clone https://github.com/mbj4668/pyang.git

% cd pyang

% pip install -e .

لهذا العرض التوضيحي، تم إستخدام pip python3، بمجرد إصدار تثبيت PIP -e، قم بتنشيط الواجهة: مصدر <دليل البيئة الظاهرية>/bin/activate (لنظام التشغيل MacOS).

% source virtual_env/bin/activate

% python3 -m pip install pyang

Collecting pyang

Downloading pyang-2.6.0-py2.py3-none-any.whl (594 kB)

|████████████████████████████████| 594 kB 819 kB/s

Collecting lxml

Downloading lxml-5.1.0-cp39-cp39-macosx_11_0_arm64.whl (4.5 MB)

|████████████████████████████████| 4.5 MB 14.2 MB/s

Installing collected packages: lxml, pyang

Successfully installed lxml-5.1.0 pyang-2.6.0

% pyang -h

Usage: pyang [options] [<filename>...]

Validates the YANG module in <filename> (or stdin), and all its dependencies.

Options:

-h, --help            Show this help message and exit

-v, --version         Show version number and exit

<snip>

مع تركيب برنامج يانغ وتشغيله، استمر في تنزيل النماذج.

في الارتباط التالي، توجد جميع الطرز التي يشغلها Cisco IOS XR: الطرز Cisco IOS XR.

يقترح إستنساخ هذه النماذج في دليل VV باستخدام إرتباط الرمز التالي: https://github.com/YangModels/yang.git

ملاحظة: لم يتم القيام بذلك باستخدام البيئة الظاهرية التي تم تنشيطها.

% git clone https://github.com/YangModels/yang.git

Cloning into 'yang'...

remote: Enumerating objects: 54289, done.

remote: Counting objects: 100% (1910/1910), done.

remote: Compressing objects: 100% (323/323), done.

remote: Total 54289 (delta 1643), reused 1684 (delta 1586), pack-reused 52379

Receiving objects: 100% (54289/54289), 116.64 MiB | 8.98 MiB/s, done.

Resolving deltas: 100% (42908/42908), done.

Updating files: 100% (112197/112197), done.

قم بتنشيط البيئة الافتراضية مرة أخرى واختبر الاستعلام التالي: شجرة Pyang -f yang/vendor/cisco/xr/711/Cisco-IOS-XR-ifmgr-cfg.yang.

(virtual_env) % pyang -f tree yang/vendor/cisco/xr/711/Cisco-IOS-XR-ifmgr-cfg.yang

yang/vendor/cisco/xr/711/Cisco-IOS-XR-ifmgr-cfg.yang:5: error: module "Cisco-IOS-XR-types" not found in search path

yang/vendor/cisco/xr/711/Cisco-IOS-XR-ifmgr-cfg.yang:8: error: module "cisco-semver" not found in search path

module: Cisco-IOS-XR-ifmgr-cfg

+--rw global-interface-configuration

|  +--rw link-status?   Link-status-enum

+--rw interface-configurations

+--rw interface-configuration* [active interface-name]

+--rw dampening

|  +--rw args?                 enumeration

|  +--rw half-life?            uint32

|  +--rw reuse-threshold?      uint32

|  +--rw suppress-threshold?   uint32

|  +--rw suppress-time?        uint32

|  +--rw restart-penalty?      uint32

+--rw mtus

|  +--rw mtu* [owner]

|     +--rw owner    xr:Cisco-ios-xr-string

|     +--rw mtu      uint32

+--rw encapsulation

|  +--rw encapsulation?         string

|  +--rw capsulation-options?   uint32

+--rw shutdown?                      empty

+--rw interface-virtual?             empty

+--rw secondary-admin-state?         Secondary-admin-state-enum

+--rw interface-mode-non-physical?   Interface-mode-enum

+--rw bandwidth?                     uint32

+--rw link-status?                   empty

+--rw description?                   string

+--rw active                         Interface-active

+--rw interface-name                 xr:Interface-name

ملاحظة: لاحظ أن المنشورات لها شكل بيانات مثل String، UiInt32، إلى آخره وما إلى ذلك؛ بينما لا تعرض Root هذه المعلومات. تم تخصيص عمليات مثل GET و SET لسحب/تحديث هذه القيم.

ملاحظة أخرى هي أن معظم الطرز تتطلب عمليات زيادة للحصول على التكوين الكامل، في إخراج واجهة سطر الأوامر (CLI) هناك تكوين إدارة الواجهة الأساسي، في حالة الحاجة إلى عرض IPv4، أستخدم التالي:

% pyang -f tree yan2/vendor/cisco/xr/711/Cisco-IOS-XR-ifmgr-cfg.yang  yan2/vendor/cisco/xr/711/Cisco-IOS-XR-ipv4-io-cfg.yang --path=yan2/vendor/cisco/xr/711

module: Cisco-IOS-XR-ifmgr-cfg

+--rw global-interface-configuration

|  +--rw link-status?   Link-status-enum

+--rw interface-configurations

+--rw interface-configuration* [active interface-name]

+--rw dampening

|  +--rw args?                 enumeration

|  +--rw half-life?            uint32

|  +--rw reuse-threshold?      uint32

|  +--rw suppress-threshold?   uint32

|  +--rw suppress-time?        uint32

|  +--rw restart-penalty?      uint32

+--rw mtus

|  +--rw mtu* [owner]

|     +--rw owner    xr:Cisco-ios-xr-string

|     +--rw mtu      uint32

+--rw encapsulation

|  +--rw encapsulation?         string

|  +--rw capsulation-options?   uint32

+--rw shutdown?                              empty

+--rw interface-virtual?                     empty

+--rw secondary-admin-state?                 Secondary-admin-state-enum

+--rw interface-mode-non-physical?           Interface-mode-enum

+--rw bandwidth?                             uint32

+--rw link-status?                           empty

+--rw description?                           string

+--rw active                                 Interface-active

+--rw interface-name                         xr:Interface-name

+--rw ipv4-io-cfg:ipv4-network

|  +--rw ipv4-io-cfg:bgp-pa

|  |  +--rw ipv4-io-cfg:input

|  |  |  +--rw ipv4-io-cfg:source-accounting?        boolean

|  |  |  +--rw ipv4-io-cfg:destination-accounting?   boolean

|  |  +--rw ipv4-io-cfg:output

|  |     +--rw ipv4-io-cfg:source-accounting?        boolean

|  |     +--rw ipv4-io-cfg:destination-accounting?   boolean

|  +--rw ipv4-io-cfg:verify

|  |  +--rw ipv4-io-cfg:reachable?      Ipv4-reachable

|  |  +--rw ipv4-io-cfg:self-ping?      Ipv4-self-ping

|  |  +--rw ipv4-io-cfg:default-ping?   Ipv4-default-ping

|  +--rw ipv4-io-cfg:bgp

|  |  +--rw ipv4-io-cfg:qppb

|  |  |  +--rw ipv4-io-cfg:input

|  |  |     +--rw ipv4-io-cfg:source?        Ipv4-interface-qppb

|  |  |     +--rw ipv4-io-cfg:destination?   Ipv4-interface-qppb

|  |  +--rw ipv4-io-cfg:flow-tag

|  |     +--rw ipv4-io-cfg:flow-tag-input

|  |        +--rw ipv4-io-cfg:source?        boolean

|  |        +--rw ipv4-io-cfg:destination?   boolean

|  +--rw ipv4-io-cfg:addresses

|  |  +--rw ipv4-io-cfg:secondaries

|  |  |  +--rw ipv4-io-cfg:secondary* [address]

|  |  |     +--rw ipv4-io-cfg:address      inet:ipv4-address-no-zone

|  |  |     +--rw ipv4-io-cfg:netmask      inet:ipv4-address-no-zone

|  |  |     +--rw ipv4-io-cfg:route-tag?   uint32

|  |  +--rw ipv4-io-cfg:primary!

|  |  |  +--rw ipv4-io-cfg:address      inet:ipv4-address-no-zone

|  |  |  +--rw ipv4-io-cfg:netmask      inet:ipv4-address-no-zone

|  |  |  +--rw ipv4-io-cfg:route-tag?   uint32

|  |  +--rw ipv4-io-cfg:unnumbered?    xr:Interface-name

|  |  +--rw ipv4-io-cfg:dhcp?          empty

|  +--rw ipv4-io-cfg:helper-addresses

|  |  +--rw ipv4-io-cfg:helper-address* [address vrf-name]

|  |     +--rw ipv4-io-cfg:address     inet:ipv4-address-no-zone

|  |     +--rw ipv4-io-cfg:vrf-name    xr:Cisco-ios-xr-string

|  +--rw ipv4-io-cfg:forwarding-enable?       empty

|  +--rw ipv4-io-cfg:icmp-mask-reply?         empty

|  +--rw ipv4-io-cfg:tcp-mss-adjust-enable?   empty

|  +--rw ipv4-io-cfg:ttl-propagate-disable?   empty

|  +--rw ipv4-io-cfg:point-to-point?          empty

|  +--rw ipv4-io-cfg:mtu?                     uint32

+--rw ipv4-io-cfg:ipv4-network-forwarding

+--rw ipv4-io-cfg:directed-broadcast?   empty

+--rw ipv4-io-cfg:unreachables?         empty

+--rw ipv4-io-cfg:redirects?            empty

في هذا الاستعلام يتم إستخدام طرازين: Cisco-IOS-XR-ifmgr-cfg.yang و Cisco-IOS-XR-IPV4-io-cfg.yang، ويتم الآن عرض عنوان IPv4 كورقة.

ملاحظة: في حالة ظهور خطأ مثل: yang/vendor/cisco/xr/711/Cisco-IOS-XR-ifmgr-cfg.yang:5: خطأ: وحدة نمطية "Cisco-IOS-XR-types" لم يتم العثور عليها في مسار البحث" أضف —path= في الأمر.

مع تنفيذ هذا الإجراء والتحقق منه، يمكن لأي مستخدم طلب معلومات عن عمليات gNMI وتغيير التاريخ، ولمزيد من الأمثلة انقر فوق الارتباط التالي: دليل تكوين قابلية البرمجة

في حالة رغبة المستخدم في تشغيل واجهة برمجة تطبيقات بسيطة، توجد أدوات مثل: grpcc.

يتم تثبيت واجهة برمجة التطبيقات هذه عبر NPM، وهذه هي الأداة المستخدمة في إرتباط دليل تكوين قابلية البرمجة، كما يقول الارتباط يشارك المزيد من الأمثلة للمستخدمين لاختبار الاستفسارات والردود.

أستكشاف الأخطاء وإصلاحها:

بالنسبة إلى GNMI، يلزم التحقق من الاستعلام قبل تجميع أي إدخال، ومعظم واجهات برمجة التطبيقات مثل:

- غنميك

- جي بي سي

- gRPC

الكل، قم بعرض الخطأ الذي قام الموجه بتكوينه.

على سبيل المثال:

"cisco-grpc:errors": {

"error": [

{

"error-type": "application",

"error-tag": "operation-failed",

"error-severity": "error",

"error-message": "'YANG framework' detected the 'fatal' condition 'Operation failed'"

}

]

}

}

أو

"error": [

{

"error-type": "application",

"error-tag": "operation-failed",

"error-severity": "error",

"error-path": <path>,

"error-message": "'sysdb' detected the 'warning' condition 'A verifier or EDM callback function returned: 'not found''"

}

]

هذه هي الأخطاء التابعة للنظام الأساسي التي يلزم التحقق منها على طول الموجه. من المقترح التحقق من إمكانية إصدار الأوامر الموجودة في الاستعلام أيضا في الموجه عبر CLI (واجهة سطر الأوامر).

ل هذا نوع الخطأ، أو أي آخر متصل ب ال cisco ios XR منصة مشاركة المعلومات التالية إلى TAC:

- الاستعلام المستخدم والعملية:

{

"Cisco-IOS-XR-ifmgr-cfg:interface-configurations":

{ "interface-configuration": [

{

"active": "act",

"interface-name": "Loopback0",

"description": "LOCAL TERMINATION ADDRESS",

"interface-virtual": [

null

],

"Cisco-IOS-XR-ipv4-io-cfg:ipv4-network": {

"addresses": {

"primary": {

"address": "172.16.255.1",

"netmask": "255.255.255.255"

}

}

}

}

]

}

}

- حدث خطأ معروض (أي من الأخطاء الموضحة أعلاه).

- أصدرت الأمر تالي:

show grpc trace all

الرجاء إختبار الاستعلام عدة مرات وتكرار الأمر "show grpc trace all".

الأخطاء متنوعة لكنها تظهر أيضا المكون الذي يمكن أن يولد إصدار:

على سبيل المثال:

- " كشفت 'sysdb' الشرط 'warning' الذي تم إرجاع دالة إستدعاء EDEDM أو EDEDM: 'not found': يصف هذا الخطأ sysdb هو مطلوب لجمع أوامر show tech لهذه العملية في الموجه.

يوضح المثال التالي عرض tech لعملية sysdb التي تظهر الخطأ.

show tech-support sysdb

بالنسبة لهذا الإخراج، يعرض الخطأ مكونا والخطأ، ويجمع أي show tech support الذي يمكن ربطه بالخطأ الذي يتم عرضه.

- "كشف "إطار عمل YANG" عن شرط 'فادح' 'فشلت العملية'": لا يعرض هذا الخطأ عملية في الموجه، مما يعني أن الاستعلام فشل في النموذج، قم بمشاركة هذه المعلومات إلى TAC لمراجعة ما يمكن أن يكون فاشلا.

بعد تجميع هذه المعلومات، قم أيضا بإضافة مجموعة الأوامر التالية:

في XR VM:

show tech-support tctcpsr

show tech-support grpcc

إظهار GSP للدعم الفني

إظهار الدعم الفني