تشغيل شريط إرساء OTBR

عرض المصدر على GitHub

يتطلب جهاز توجيه حدود OpenThread (OTBR) عقدة Thread RCP من أجل الانضمام إلى شبكة Thread. يوفّر OTBR Docker دعمًا لكل من وحدة التحكّم عن بُعد (RCP) المادية (دونجل OpenThread) أو وحدة التحكّم عن بُعد المحاكية.

إذا كنت تريد توصيل OTBR Docker بأجهزة Thread أخرى، استخدِم وحدة تحكم برمجية قابلة للبرمجة (RCP). إذا كنت تريد اختبار التوجيه على الحدود باستخدام شبكة Thread محاكاة، استخدِم RCP محاكَى.

RCP المادي

استخدِم أي منصّة OpenThread متوافقة لجهاز RCP المادي. اطّلِع على خطوة إنشاء وحدة التحكّم في حدود الشبكة وفلاشها من دليل إنشاء وضبط OpenThread Border Router لمزيد من المعلومات.

إرفاق ملف RCP

  1. بعد إنشاء الجهاز وفلاشه، اربط جهاز RCP بالجهاز الذي يعمل على IDE Docker عبر USB.
  2. حدِّد اسم المنفذ التسلسلي لجهاز RCP من خلال وضع علامة في المربّع "/dev":
    ls /dev/tty*
    /dev/ttyACMO
    

بدء تشغيل حاوية Docker الخاصة ببرنامج OTBR

في نافذة محطة طرفية جديدة، ابدأ OTBR Docker، مع الإشارة إلى المنفذ التسلسلي لوحدة التحكّم عن بُعد. على سبيل المثال، إذا تم تثبيت وحدة التحكّم في الطاقة (RCP) على /dev/ttyACM0:

docker run --sysctl "net.ipv6.conf.all.disable_ipv6=0 net.ipv4.conf.all.forwarding=1 net.ipv6.conf.all.forwarding=1" -p 8080:80 --dns=127.0.0.1 -it --volume /dev/ttyACM0:/dev/ttyACM0 --privileged openthread/otbr --radio-url spinel+hdlc+uart:///dev/ttyACM0

بعد نجاح العملية، من المفترض أن تظهر لك نتيجة مماثلة لما يلي:

WARNING: Localhost DNS setting (--dns=127.0.0.1) may fail in containers.
RADIO_URL: spinel+hdlc+uart:///dev/ttyACM0
TUN_INTERFACE_NAME: wpan0
NAT64_PREFIX: 64:ff9b::/96
AUTO_PREFIX_ROUTE: true
AUTO_PREFIX_SLAAC: true
Current platform is ubuntu
* Applying /etc/sysctl.d/10-console-messages.conf ...
kernel.printk = 4 4 1 7
* Applying /etc/sysctl.d/10-ipv6-privacy.conf ...
net.ipv6.conf.all.use_tempaddr = 2
net.ipv6.conf.default.use_tempaddr = 2
* Applying /etc/sysctl.d/10-kernel-hardening.conf ...
kernel.kptr_restrict = 1
* Applying /etc/sysctl.d/10-link-restrictions.conf ...
fs.protected_hardlinks = 1
fs.protected_symlinks = 1
* Applying /etc/sysctl.d/10-magic-sysrq.conf ...
kernel.sysrq = 176
* Applying /etc/sysctl.d/10-network-security.conf ...
net.ipv4.conf.default.rp_filter = 1
net.ipv4.conf.all.rp_filter = 1
net.ipv4.tcp_syncookies = 1
* Applying /etc/sysctl.d/10-ptrace.conf ...
kernel.yama.ptrace_scope = 1
* Applying /etc/sysctl.d/10-zeropage.conf ...
vm.mmap_min_addr = 65536
* Applying /etc/sysctl.d/60-otbr-ip-forward.conf ...
net.ipv6.conf.all.forwarding = 1
net.ipv4.ip_forward = 1
* Applying /etc/sysctl.conf ...
 * Starting userspace NAT64 tayga             [ OK ]
/usr/sbin/service
 * Starting domain name service... bind9      [ OK ]
/usr/sbin/service
 * dbus is not running
 * Starting system message bus dbus           [ OK ]
   ...fail!
otWeb[155]: border router web started on wpan0
otbr-agent[224]: Thread interface wpan0
otbr-agent[224]: Thread is down
otbr-agent[224]: Check if Thread is up: OK
otbr-agent[224]: Stop publishing service
otbr-agent[224]: PSKc is not initialized
otbr-agent[224]: Check if PSKc is initialized: OK
otbr-agent[224]: Initialize OpenThread Border Router Agent: OK
otbr-agent[224]: Border router agent started.

OTBR Docker قيد التشغيل الآن. اترك نافذة المحطة الطرفية هذه مفتوحة وشغّلها في الخلفية. في حال إنهاء العملية أو إغلاق النافذة، سيتوقف OTBR Docker.

انتقِل إلى اختبار الاتصال لمتابعة عملية إعداد Docker في OTBR.

تكلفة التجديد الافتراضي

استخدِم إصدارًا محاكيًا من OpenThread RCP لـ RCP المحاكي. يكون هذا مفيدًا إذا أردت اختبار التوجيه على الحدود باستخدام شبكة Thread محاكية على جهاز واحد.

إنشاء تطبيق RCP المحاكي

  1. استنسِخ مستودع OpenThread:

    cd ~
    git clone https://github.com/openthread/openthread
    

  2. التمهيد وإنشاء التطبيق الذي تمت محاكاته:

    cd openthread
    ./script/bootstrap
    ./script/cmake-build simulation
    

إعداد مصدر بيانات ثنائي الاتجاه

استخدِم الأداة socat لسطر الأوامر لإنشاء بث بيانات ثنائي الاتجاه لنقل البيانات بين RCP المحاكي وOTBR Docker.

  1. افتح نافذة محطة طرفية جديدة لتنفيذ هذه العملية، إذ يجب إبقاءها قيد التشغيل أثناء تشغيل OTBR Docker.

  2. تثبيت socat:

    sudo apt-get install socat
    

  3. بدء socat:

    socat -d -d pty,raw,echo=0 pty,raw,echo=0
    2018/09/06 09:58:29 socat[242994] N PTY is /dev/pts/2
    2018/09/06 09:58:29 socat[242994] N PTY is /dev/pts/7
    2018/09/06 09:58:29 socat[242994] N starting data transfer loop with FDs [5,5] and [7,7]
    

دوِّن المنافذ التسلسلية التي تظهر بخط عريض في الإخراج. استخدم الأول لـ RCP المحاكي والثاني لـ OTBR Docker. في مثال الإخراج أعلاه:

  • /dev/pts/2 = منفذ RCP الذي تمت محاكاته
  • /dev/pts/7 = OTBR Docker

يُرجى ترك نافذة المحطة الطرفية هذه مفتوحة وتعمل في الخلفية.

بدء محاكاة RCP

  1. افتح نافذة طرفية جديدة لتشغيل عملية إعادة التعيين التلقائية التي تمّت محاكاتها، إذ يجب إبقاءها مشغّلة أثناء تشغيل OTBR Docker.

  2. باستخدام المنفذ التسلسلي الأول في socat output، ابدأ تطبيق RCP المحاكي. على سبيل المثال، في حال استخدام /dev/pts/2 من إخراج socat:

    ~/openthread/build/simulation/examples/apps/ncp/ot-rcp 1 > /dev/pts/2 < /dev/pts/2
    

لم تظهر أي نتيجة لهذا الأمر. اترك هذه النافذة الطرفية مفتوحة وتعمل في الخلفية.

بدء حاوية Docker في OTBR

في نافذة طرفية جديدة، ابدأ تشغيل OTBR Docker باستخدام المنفذ التسلسلي الثاني في ناتج socat. على سبيل المثال، في حال استخدام /dev/pts/7 من الناتج socat:

docker run --sysctl "net.ipv6.conf.all.disable_ipv6=0 net.ipv4.conf.all.forwarding=1 net.ipv6.conf.all.forwarding=1" -p 8080:80 --dns=127.0.0.1 -it --volume /dev/pts/7:/dev/ttyUSB0 --privileged openthread/otbr

يُرجى العِلم أنّ الأمر يستخدم أيضًا المنفذ /dev/ttyUSB0. هذه هي نقطة الربط التلقائية داخل حاوية Docker.

بعد نجاح العملية، من المفترض أن تظهر لك نتيجة مماثلة لما يلي:

WARNING: Localhost DNS setting (--dns=127.0.0.1) may fail in containers.
RADIO_URL: spinel+hdlc+uart:///dev/ttyUSB0
TUN_INTERFACE_NAME: wpan0
NAT64_PREFIX: 64:ff9b::/96
AUTO_PREFIX_ROUTE: true
AUTO_PREFIX_SLAAC: true
Current platform is ubuntu
* Applying /etc/sysctl.d/10-console-messages.conf ...
kernel.printk = 4 4 1 7
* Applying /etc/sysctl.d/10-ipv6-privacy.conf ...
net.ipv6.conf.all.use_tempaddr = 2
net.ipv6.conf.default.use_tempaddr = 2
* Applying /etc/sysctl.d/10-kernel-hardening.conf ...
kernel.kptr_restrict = 1
* Applying /etc/sysctl.d/10-link-restrictions.conf ...
fs.protected_hardlinks = 1
fs.protected_symlinks = 1
* Applying /etc/sysctl.d/10-magic-sysrq.conf ...
kernel.sysrq = 176
* Applying /etc/sysctl.d/10-network-security.conf ...
net.ipv4.conf.default.rp_filter = 1
net.ipv4.conf.all.rp_filter = 1
net.ipv4.tcp_syncookies = 1
* Applying /etc/sysctl.d/10-ptrace.conf ...
kernel.yama.ptrace_scope = 1
* Applying /etc/sysctl.d/10-zeropage.conf ...
vm.mmap_min_addr = 65536
* Applying /etc/sysctl.d/60-otbr-ip-forward.conf ...
net.ipv6.conf.all.forwarding = 1
net.ipv4.ip_forward = 1
* Applying /etc/sysctl.conf ...
 * Starting userspace NAT64 tayga             [ OK ]
/usr/sbin/service
 * Starting domain name service... bind9      [ OK ]
/usr/sbin/service
 * dbus is not running
 * Starting system message bus dbus           [ OK ]
   ...fail!
otWeb[155]: border router web started on wpan0
otbr-agent[224]: Thread interface wpan0
otbr-agent[224]: Thread is down
otbr-agent[224]: Check if Thread is up: OK
otbr-agent[224]: Stop publishing service
otbr-agent[224]: PSKc is not initialized
otbr-agent[224]: Check if PSKc is initialized: OK
otbr-agent[224]: Initialize OpenThread Border Router Agent: OK
otbr-agent[224]: Border router agent started.

يعمل الآن برنامج OTBR Docker. اترك نافذة المحطة الطرفية هذه مفتوحة وشغّلها في الخلفية. في حال إنهاء العملية أو إغلاق النافذة، سيتم إغلاق أداة OTBR Docker.