تخصيص العنوان
ملخّص
المقدمة:
نظرًا لوجود عدد من التبعيات المشتركة بين الواجهات ولأن تهيئات الأجهزة المختلفة قد تتطلب عنوان TCP/IP مختلف وتعيين المسار، فقد كان من الضروري دمج منطق التحكم في عنوان IP وتعيين المسار في وحدة واحدة. تهدف سياسة WARM إلى إضافة وإزالة عناوين TCP/IP والمسارات إلى واجهات IP ذات الصلة بخدمة Weave حيث تنتقل هذه الواجهات من حالة نشطة<->غير نشطة.
يتم إعداد تنسيق WARM في وقت التجميع من خلال مشروع WARM التالي وWarmConfig.h. يجب أن يعكس تنسيق WARM بدقة الميزات المتوافقة للجهاز التي سيتم تنفيذ نظام WARM عليها.
WARM هي وحدة محمولة تحد من تبعيتها على كيفية تكوين تكديس TCP/IP وواجهة سلسلة التعليمات. لهذا الغرض، تعتمد WARM على مجموعة من واجهات برمجة التطبيقات Platform التي يجب أن تنفّذها شركة تكامل الأنظمة الأساسية. بالإضافة إلى ذلك، تكون "وحدة تكامل النظام الأساسي" مسؤولة عن إجراء طلبات nl::Warm API المختلفة من نقاط التنفيذ المناسبة ضمن قاعدة رموز النظام الأساسي.
نظرية العملية:
ستتصل قاعدة رموز النظام الأساسي بواجهة nl::Warm API للإعلان عن تغيير الحالة للميزات ذات الصلة، مثل واجهة Wi-Fi وواجهة سلسلة المحادثات. قد يؤدي استدعاء أي من واجهات برمجة التطبيقات التالية nl::Warm API إلى استدعاء من خلال WARM إلى النظام الأساسي::RequestInvokeActions(). يجب تنفيذ النظام الأساسي::RequestInvokeActions() لإجراء العمليات الضرورية التي ستستدعي Warm::InvokeActions(). وقد تبدو هذه العملية للوهلة الأولى غير مباشرة. لماذا لا يستدعي WARM استدعاء InvokeActions مباشرةً؟ تكمن الإجابة عن هذا السؤال في السماح لأي مهمة في نظام متعدد المهام باستدعاء واجهة برمجة التطبيقات nl::Warm State Change API، فضلاً عن توفير آلية تتيح لمهمة محددة فقط استدعاء النظام الأساسي:: واجهة برمجة التطبيقات. بعد وضع متطلبات النظام الأساسي في الاعتبار، قد تختار عملية تكامل النظام الأساسي تنفيذ Platform::RequestInvokeActions() بحيث تنشر حدثًا للمهمة المناسبة التي ستتفاعل من خلال استدعاء Warm::InvokeActions(). وإذا قرر نظام أساسي معيّن عدم وجود مثل هذه المخاوف بشأن تعدد المهام، يمكن تنفيذ الإجراء Platform::RequestInvokeActions() لاستدعاء Warm::InvokeActions() لاستدعاء Warm::Invoke Actions() مباشرةً في أي نظام أساسي.
عند استدعاء Warm::InvokeActions() لمنطق WARM، سيفحص حالة النظام الحالية ويُجري أي استدعاءات Platform:: API ضرورية من أجل توفيق حالة العنوان والتوجيه مع حالة النظام والإعدادات. يتم إجراء عمليات الاستدعاء هذه بترتيب محدد مسبقًا وإذا كان أي من واجهات برمجة التطبيقات هذه يعرض kPlatformResultInProgress، فسيتم تعليق تنفيذ القائمة المرتبة والخروج منها. علاوة على ذلك، عندما تعرض إحدى واجهات برمجة التطبيقات هذه kPlatformResultInProgress، يتم تفسير العملية على أنها ستكتمل بشكل غير متزامن وأنّ منطق WARM يجب أن ينتظر حتى تكتمل العملية. عند اكتمال العملية، من المفترض أن يؤدي الرمز البرمجي للنظام الأساسي إلى استدعاء Warm::ReportActionComplete()، فيتجاوز الإجراء نتيجة kPlatformResultSuccess أو kPlatformResultFailure. عند تلقّي هذا الطلب، سيطلب منطق WARM مرة أخرى النظام الأساسي::RequestInvokeActions() لإعادة تنفيذ قائمة الإجراءات المطلوبة.
بهذه الطريقة، لا تتطلب WARM مهمتها الخاصة ولكن يمكنها بدلاً من ذلك الاعتماد على مهمة أخرى للاتصال بها في مريح حسب الحاجة. بالإضافة إلى ذلك، قد تستدعي أي مهمة واجهةً من واجهات برمجة التطبيقات (API) لتغيير حالة النظام، وبالتالي تبسيط عملية الدمج.