Penetapan Alamat

Ringkasan

Pendahuluan:

Karena ada sejumlah dependensi antar-antarmuka dan karena konfigurasi Perangkat yang berbeda dapat memerlukan alamat TCP/IP dan penetapan rute yang berbeda, logika untuk mengontrol alamat IP dan penetapan Rute dianggap perlu digabungkan ke dalam satu modul. WARM berfungsi untuk menambahkan dan menghapus alamat TCP/IP dan Rute ke antarmuka IP terkait Weave dengan benar saat antarmuka tersebut bertransisi dari aktif<->tidak aktif.

WARM dimaksudkan untuk dikonfigurasi pada waktu kompilasi melalui WarmProjectConfig.h dan WarmConfig.h. WarmProjectConfig.h harus secara akurat mencerminkan fitur perangkat yang didukung yang akan menjalankan WARM.

WARM adalah modul portabel yang membatasi dependensinya pada konfigurasi stack TCP/IP dan Antarmuka Thread. Untuk tujuan ini, WARM bergantung pada Set of Platform API yang harus diimplementasikan oleh Platform Integrator. Selain itu, Platform Integrator bertanggung jawab untuk melakukan berbagai panggilan nl::Warm API dari titik eksekusi yang sesuai dalam code base Platform.

Teori Operasi:

Basis kode Platform akan memanggil nl::Warm API guna mengumumkan perubahan Status untuk fitur terkait seperti antarmuka WiFi dan antarmuka Thread. Panggilan ke salah satu dari nl::Warm API ini dapat mengakibatkan panggilan oleh WARM ke Platform::RequestInvokeActions(). Platform::RequestInvokeActions() harus diimplementasikan untuk melakukan operasi yang diperlukan yang akan memanggil Warm::InvokeActions(). Proses ini mungkin terlihat tidak langsung secara sekilas. Mengapa WARM tidak memanggil InvokeActions secara langsung? Jawaban untuk pertanyaan itu, adalah untuk mengizinkan tugas apa pun dalam sistem multi-tasking untuk memanggil nl::Warm State Change API, dan untuk menyediakan mekanisme sehingga hanya tugas tertentu yang akan memanggil Platform:: API. Setelah mempertimbangkan persyaratan Platform, Integrator Platform dapat memilih untuk mengimplementasikan Platform::RequestInvokeActions() sehingga memposting peristiwa ke tugas yang sesuai, yang akan bereaksi dengan memanggil Warm::InvokeActions(). Jika, untuk platform tertentu, diputuskan bahwa masalah multi-tasking semacam itu tidak ada, Platform::RequestInvokeActions() dapat diimplementasikan untuk memanggil Warm::InvokeActions() secara langsung.

Saat Warm::InvokeActions() dipanggil, logika WARM akan memeriksa Status Sistem saat ini dan melakukan panggilan Platform:: API yang diperlukan untuk membawa alamat dan Status perutean sesuai dengan Status Sistem dan Konfigurasi. Panggilan ini dibuat dalam urutan yang telah ditentukan dan jika salah satu kPlatformResultInProgress yang ditampilkan API ini, eksekusi daftar yang diurutkan akan ditangguhkan dan keluar. Selain itu, saat salah satu API ini menampilkan kPlatformResultInProgress, akan ditafsirkan bahwa operasi akan selesai secara asinkron dan logika WARM harus menunggu operasi tersebut selesai. Setelah operasi selesai, kode Platform akan memanggil Warm::ReportActionComplete(), yang meneruskan hasil kPlatformResultSuccess atau kPlatformResultFailure. Setelah menerima panggilan ini, logika WARM akan kembali memanggil Platform::RequestInvokeActions() untuk memulai ulang eksekusi daftar tindakan yang diurutkan.

Dengan cara ini, WARM tidak memerlukan tugasnya sendiri, tetapi dapat mengandalkan tugas lain untuk dipanggil ke Warm sebagaimana mestinya. Selain itu, tugas apa pun dapat memanggil satu atau beberapa API perubahan Status Sistem, sehingga menyederhanakan integrasi.