تخصیص آدرس

خلاصه

معرفی:

از آنجا که تعدادی وابستگی متقابل بین اینترفیس ها وجود دارد و به دلیل اینکه پیکربندی های مختلف دستگاه می تواند به آدرس TCP/IP و تخصیص مسیر متفاوتی نیاز داشته باشد، ضروری تلقی می شود که منطق کنترل آدرس IP و تخصیص مسیر در یک ماژول واحد ادغام شود. WARM به منظور افزودن و حذف صحیح آدرس‌های TCP/IP و مسیرها برای بافتن رابط‌های IP مرتبط به عنوان این رابط‌ها از فعال<->غیرفعال در خدمت است.

WARM قرار است در زمان کامپایل از طریق WarmProjectConfig.h و WarmConfig.h پیکربندی شود. WarmProjectConfig.h باید به دقت ویژگی های پشتیبانی شده دستگاهی را که WARM بر اساس آن اجرا می شود منعکس کند.

WARM یک ماژول قابل حمل است که وابستگی خود را به نحوه پیکربندی پشته TCP/IP و Thread Interface محدود می کند. برای این منظور WARM به مجموعه‌ای از APIهای پلتفرم متکی است که باید توسط یکپارچه‌ساز پلتفرم پیاده‌سازی شوند. علاوه بر این، Platform Integrator مسئول برقراری تماس های مختلف nl::Warm API از نقاط اجرای مناسب در پایگاه کد پلت فرم است.

تئوری عملیات:

پایگاه کد پلت فرم با nl::Warm API تماس می گیرد تا تغییر حالت را برای ویژگی های مرتبط مانند رابط WiFi و رابط Thread اعلام کند. تماس با هر یک از این nl::Warm API ممکن است منجر به تماس WARM با Platform::RequestInvokeActions شود. Platform::RequestInvokeActions() باید برای انجام عملیات لازم که Warm::InvokeActions() را فراخوانی می کند، پیاده سازی شود. این فرآیند در نگاه اول ممکن است غیرضروری غیر مستقیم به نظر برسد. چرا WARM مستقیماً با InvokeActions تماس نمی گیرد؟ پاسخ به این سوال، اجازه دادن به هر وظیفه ای در یک سیستم چند وظیفه ای برای فراخوانی nl::Warm State Change APIها و ارائه مکانیزمی است که فقط یک وظیفه خاص، Platform:: API را فراخوانی کند. پس از در نظر گرفتن الزامات پلتفرم، انتگرال‌کننده پلتفرم ممکن است انتخاب کند که Platform::RequestInvokeActions() را پیاده‌سازی کند تا رویدادی را برای وظیفه مناسب ارسال کند که با فراخوانی Warm::InvokeActions () واکنش نشان دهد. اگر برای یک پلتفرم معین، تصمیم گرفته شود که چنین نگرانی های چندوظیفه ای وجود نداشته باشد، Platform::RequestInvokeActions() می تواند برای فراخوانی مستقیم Warm::InvokeActions () پیاده سازی شود.

هنگامی که Warm::InvokeActions () نامیده می شود، منطق WARM وضعیت فعلی سیستم را بررسی می کند و هر نوع API لازم را برای پلتفرم:: فراخوانی می کند تا آدرس و وضعیت مسیریابی را با وضعیت سیستم و پیکربندی هماهنگ کند. این تماس‌ها به ترتیب از پیش تعریف‌شده انجام می‌شوند و اگر هر یک از این API kPlatformResultInProgress را برگرداند، اجرای فهرست سفارش‌داده‌شده به حالت تعلیق درآمده و خارج می‌شود. علاوه بر این، هنگامی که یکی از این API ها kPlatformResultInProgress را برمی گرداند، تفسیر می شود که عملیات به صورت ناهمزمان کامل می شود و منطق WARM باید منتظر تکمیل آن عملیات باشد. پس از اتمام عملیات، کد پلتفرم باید Warm::ReportActionComplete() را فراخوانی کند و در نتیجه kPlatformResultSuccess یا kPlatformResultFailure ارسال شود. پس از دریافت این تماس، منطق WARM مجدداً Platform::RequestInvokeActions() را فراخوانی می کند تا اجرای لیست اقدامات سفارش داده شده را مجدداً شروع کند.

به این ترتیب WARM به وظیفه خود نیاز ندارد، اما در عوض می تواند به وظیفه دیگری برای فراخوانی Warm در صورت لزوم تکیه کند. علاوه بر این، هر وظیفه ای ممکن است یک یا چند API تغییر وضعیت سیستم را فراخوانی کند، بنابراین یکپارچگی را ساده می کند.