تشغيل OTBR Docker

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

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

إذا كنت تريد توصيل OTBR Docker بأجهزة أخرى تعمل بسلاسل المحادثات، استخدِم RCP فعليًّا. إذا كنت تريد اختبار توجيه الحدود باستخدام شبكة سلسلة محادثات مُحاكاة، يمكنك استخدام محاكاة سرعة عرض الإعلانات.

سرعة عرض الصفحة على الصفحة

استخدام أي نظام أساسي مفتوح لـ Openthread لـ RCP راجِع خطوة إنشاء RCP وفلاش، واطّلِع على دليل إنشاء وضبط جهاز توجيه Openthread. للحصول على مزيد من المعلومات.

إرفاق RCP

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

بدء تشغيل حاوية OTBR Docker

في نافذة محطة الدفع الجديدة، شغِّل OTBR Docker، مع الإشارة إلى المنفذ التسلسلي لـ RCP. على سبيل المثال، إذا تم تثبيت 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 على النزول.

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

محاكاة RCP

استخدام إصدار OpenCP RCP مُحاكَى لترميز RCP. ويُعدّ هذا مفيدًا إذا كنت تريد اختبار توجيه الحدود باستخدام شبكة سلاسل محادثات على جهاز واحد.

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

  1. إنشاء نسخة طبق الأصل من مستودع Openthread:

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

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

    cd openthread
    ./bootstrap
    make -f examples/Makefile-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. افتح نافذة طرفية جديدة لتشغيل RCP الذي تمت محاكاته، حيث يجب تركه قيد التشغيل أثناء تشغيل OTBR Docker.

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

    ~/openthread/output/simulation/bin/ot-rcp 1 > /dev/pts/2 < /dev/pts/2
    

ما مِن نتائج لهذا الأمر. اترك نافذة الوحدة الطرفية مفتوحة وتشغيلها في الخلفية.

بدء تشغيل حاوية OTBR Docker

في نافذة محطة طرفية جديدة، ابدأ بروتوكول 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 على النزول.