
مجموعة بروتوكولات توجيه مبنية بلغة Rust تدعم BGP وOSPF وIS-IS وRIP وVRRP مع تكوين بنموذج YANG وأتمتة gNMI/gRPC واختبار تشويش مدمج للشبكات عالية السعة والقائمة على الأتمتة.
Holo هي مجموعة من بروتوكولات التوجيه صُمّمت لدعم الشبكات عالية السعة والقائمة على الأتمتة.
للحصول على شرح لماهية بروتوكول التوجيه، يُرجى الرجوع إلى صفحة ويكيبيديا هذه.
الهدف الرئيسي لـ Holo هو إنشاء قاعدة أكواد موثوقة، سهلة الصيانة، وقابلة للتوسيع. مع التعقيد المتزايد باستمرار لبروتوكولات التوجيه وامتداداتها، من الضروري وجود تطبيقات لبروتوكولات التوجيه مبنية على أساس متين. لتحقيق ذلك، تعطي قاعدة أكواد Holo الأولوية للبساطة، والنمطية، والتوثيق الشامل. بفضل صرامة مترجم Rust واختبارات الوحدة المكثفة، من المتوقع اكتشاف معظم الانحدارات (regressions) في وقت مبكر من دورة تطوير الميزات الجديدة. لمزيد من التفاصيل، يُرجى الرجوع إلى صفحة الهندسة المعمارية.
تم تطوير Holo خصيصًا للشبكات عالية السعة والقائمة على الأتمتة التي تتطلب تكوينًا ومراقبة قابلين للبرمجة باستخدام بيانات منظمة ونمذجة. ينفذ Holo بشكل أصلي وحدات YANG القياسية من IETF ويدعم واجهات إدارة متعددة، بما في ذلك gRPC و gNMI الأصليين. بالإضافة إلى ذلك، يتميز Holo بواجهة سطر أوامر (CLI) مستقلة تعرض الأوامر ديناميكيًا من وحدات YANG وتتواصل مع برنامج Holo الخفي عبر gRPC.
تتم معالجة التغييرات التي تُجرى على التكوين كمعاملات (transactions)، مما يضمن تطبيق جميع التغييرات أو عدم تطبيق أي منها على الإطلاق. هذه الميزة هي عامل تسهيل كبير لأتمتة الشبكة لأنها تلغي الحاجة إلى استرداد الأخطاء في تطبيقات الإدارة. يدعم Holo أيضًا المعاملات على مستوى الشبكة بالكامل والتي تشمل أجهزة شبكة متعددة. تشمل قدرات أتمتة الشبكة الإضافية دعم الالتزام المؤكد (confirmed commits) والتراجع عن التكوين (configuration rollback).
بفضل كونه مكتوبًا بلغة آمنة للذاكرة، فإن Holo محصن ضد مجموعة واسعة من الأخطاء المتعلقة بالذاكرة والثغرات الأمنية. بالإضافة إلى ضمانات السلامة التي يوفرها Rust، يقوم برنامج Holo الخفي أيضًا بإسقاط الصلاحيات (drops privileges) عند بدء التشغيل. بالنسبة لعمليات معينة، مثل ربط المقابس (binding sockets)، يتم استخدام إمكانيات (capabilities) لينكس للحصول على الحد الأدنى من الإذن المطلوب لأقل قدر من الوقت.
يوفر Holo أيضًا حماية قوية ضد ناقل الهجوم الأكثر شيوعًا في أكوام بروتوكولات التوجيه: هجمات حرمان الخدمة (DoS) عبر إدخال حزم ضارة. يتم فك تشفير الحزم الواردة في مهام غير متزامنة منفصلة وخاضعة للإشراف، مما يسمح لتطبيقات البروتوكول بالتعافي بأمان من حالات الذعر (panics)، مثل تجاهل الحزم غير الصالحة أو إغلاق دفق TCP المتأثر فقط، دون المساس باستقرار البرنامج الخفي بأكمله. بالإضافة إلى ذلك، بفضل التصميم المعياري لـ Holo والدعم المدمج للاختبار التوجيهي المُغطّى (coverage-guided fuzzing)، من المتوقع اكتشاف معظم أخطاء التحليل ومعالجتها أثناء التطوير.
بعض البروتوكولات، مثل OSPF و RIP، لها إصدارات مختلفة منتشرة على نطاق واسع، عادةً واحد لـ IPv4 وآخر لـ IPv6. يستفيد Holo من القوالب العامة (generics) في Rust للحصول على تطبيقات بروتوكول مستقلة عن الإصدار، حيث يتم مشاركة معظم الكود بواسطة إصدارات البروتوكول المختلفة. يقلل هذا الأسلوب من تكلفة صيانة هذه البروتوكولات ويسهل تقديم ميزات جديدة تفيد جميع إصدارات البروتوكول.
يستخدم Holo على نطاق واسع العمليات غير المتزامنة ويعتمد على وقت تشغيل Tokio لجدولة المهام وتشغيلها على تجمع من الخيوط. لتحقيق أداء أفضل، يتم نقل كل من طلبات الإدخال/الإخراج والخوارزميات كثيفة الاستخدام لوحدة المعالجة المركزية إلى مهام منفصلة، مما يزيد من الاستفادة من جميع نوى المعالجة المتاحة. دعم الكود المستقل عن وقت التشغيل مخطط له في المستقبل، بمجرد توحيد التجريدات اللازمة من قبل فريق لغة Rust.
يقوم Holo بإنشاء رسائل سجل تحتوي على بيانات منظمة، يمكن تقديمها بتنسيقات مختلفة مثل JSON والنص وما إلى ذلك. نظرًا لأن التسجيل يتم من خلال واجهة tracing، يمكن استخدام مشتركي tracing متنوعين لتلبية متطلبات المستخدم المختلفة. على سبيل المثال، يمكن توجيه التسجيل إلى ملف، أو journald، أو مجمع OpenTelemetry مركزي، أو أي مزيج من هذه الخيارات بمستويات تسجيل قد تختلف.
يوفر Holo وظيفة التسجيل وإعادة التشغيل (record-and-replay)، مما يسهل إعادة إنتاج أي خطأ يبلغ عنه المستخدم. يمكن ضبط برنامج Holo الخفي لتسجيل دورة الحياة الكاملة لمثيل بروتوكول في ملف. يمكن بعد ذلك تشغيل هذا الملف على جهاز آخر، مما يعيد إنتاج نفس تسلسل الأحداث. بينما قد تستغرق جلسة التسجيل ساعات أو أيامًا، يجب أن تستغرق عملية إعادة التشغيل بضع ثوانٍ فقط. هذا ممكن بفضل الهندسة المعمارية المعيارية لـ Holo، حيث يتم تنفيذ جميع العمليات المتعلقة بالوقت والإدخال/الإخراج في مهام منفصلة ويتم تجريدها كرسائل حدث.
للحصول على تعليمات مفصلة حول التثبيت، يُرجى الرجوع إلى ملف INSTALL.md.
في الوقت الحالي، Holo متوافق فقط مع أنظمة تشغيل لينكس. دعم WebAssembly مخطط له في المستقبل.
أسهل طريقة لبدء استخدام Holo هي باستخدام حاويات Docker مُعدة مسبقًا مع برنامج containerlab. يمكنك العثور على مجموعة متنوعة من طوبولوجيا الشبكات المكونة مسبقًا على هذا الرابط. يمكن نشر هذه الطوبولوجيات بأمر واحد، مما يسمح لك باختبار Holo في إعدادات شبكة مختلفة، بما في ذلك اختبار قابلية التشغيل البيني مع التطبيقات الأخرى.
بالإضافة إلى ذلك، يمكن استخدام Holo أينما كانت هناك حاجة إلى كومة توجيه، مثل أجهزة التوجيه البرمجية، بشرط أن تتوافق مجموعة الميزات مع احتياجاتك الخاصة.
يدعم Holo المعايير التالية للإنترنت:
نتائج اختبارات المطابقة التي تم إجراؤها باستخدام Ixia IxANVL RFC Compliance Tester متاحة هنا.
هذا المشروع ممول من خلال NGI Zero Core، وهو صندوق أنشأته NLnet بدعم مالي من برنامج الجيل القادم للإنترنت التابع للمفوضية الأوروبية. تعرف على المزيد على صفحة مشروع NLnet.
هذا المشروع مرخص بموجب ترخيص MIT.
نرحب بأي مساهمات، من تقارير الأخطاء إلى طلبات السحب. يُرجى الرجوع إلى قائمة أمنيات مشروعنا للحصول على أفكار حول أين يمكن المساهمة.
ما لم تذكر صراحةً خلاف ذلك، فإن أي مساهمة تُقدم عمدًا لإدراجها في Holo بواسطتك، ستكون مرخصة بموجب MIT، دون أي شروط أو أحكام إضافية.
| الوحدة النمطية | التكوين | الحالة | RPCs | الإشعارات | الإجمالي |
|---|
| ietf-bfd-ip-mh@2022-09-22 | 100.00% | 100.00% | - | 100.00% | 100.00% |
| ietf-bfd-ip-sh@2022-09-22 | 100.00% | 100.00% | - | 100.00% | 100.00% |
| ietf-bfd@2022-09-22 | 100.00% | 100.00% | - | - | 100.00% |
| ietf-bgp-policy@2023-07-05 | 100.00% | - | - | - | 100.00% |
| ietf-bgp@2023-07-05 | 32.38% | 85.95% | - | - | 60.40% |
| ietf-bier@2023-09-12 | 100.00% | - | - | 0.00% | 72.50% |
| ietf-if-extensions@2023-01-26 | 100.00% | 0.00% | - | - | 50.00% |
| ietf-if-vlan-encapsulation@2023-01-26 | 42.86% | - | - | - | 42.86% |
| ietf-igmp-mld@2019-11-01 | 84.62% | 100.00% | - | - | 95.83% |
| ietf-interfaces@2018-02-20 | 100.00% | 0.00% | - | - | 22.22% |
| ietf-ip@2018-02-22 | 52.17% | 0.00% | - | - | 40.00% |
| ietf-ipv4-unicast-routing@2018-03-13 | 100.00% | 100.00% | - | - | 100.00% |
| ietf-ipv6-unicast-routing@2018-03-13 | 40.62% | 100.00% | - | - | 45.71% |
| ietf-isis-flex-algo@2026-06-26 | 0.00% | 100.00% | - | 0.00% | 74.00% |
| ietf-isis-link-attr@2026-06-26 | 81.82% | 78.43% | - | - | 78.76% |
| ietf-isis-msd@2024-09-02 | - | 100.00% | - | - | 100.00% |
| ietf-isis-sr-mpls@2025-12-09 | 15.38% | 57.27% | - | - | 52.85% |
| ietf-isis@2022-10-19 | 93.62% | 80.09% | 100.00% | 100.00% | 86.77% |
| ietf-key-chain@2017-06-15 | 100.00% | 100.00% | - | - | 100.00% |
| ietf-mpls-ldp@2022-03-14 | 86.96% | 92.31% | 100.00% | 100.00% | 92.38% |
| ietf-mpls@2020-12-18 | 0.00% | 57.14% | - | - | 35.29% |
| ietf-ospf-anycast-flag@2026-05-19 | 100.00% | - | - | - | 100.00% |
| ietf-ospf-sr-mpls@2025-12-09 | 21.43% | 51.36% | - | - | 49.82% |
| ietf-ospf@2022-10-19 | 95.70% | 85.04% | 100.00% | 58.06% | 83.89% |
| ietf-ospfv3-extended-lsa@2024-06-07 | 50.00% | 85.28% | - | - | 84.85% |
| ietf-rip@2020-02-20 | 27.91% | 93.33% | 100.00% | - | 55.41% |
| ietf-routing-policy@2021-10-11 | 100.00% | 0.00% | - | - | 98.11% |
| ietf-routing@2018-03-13 | 100.00% | 85.71% | - | - | 92.31% |
| ietf-segment-routing-mpls@2021-05-26 | 62.50% | 0.00% | - | 23.53% | 32.76% |
| ietf-segment-routing@2021-05-26 | 100.00% | - | - | - | 100.00% |
| ietf-system@2014-08-06 | 26.67% | 60.00% | 0.00% | - | 38.24% |
| ietf-vrrp@2018-03-13 | 53.19% | 80.00% | - | 66.67% | 66.35% |