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

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

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

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

RCP مادي

استخدِم أي منصة OpenThread متوافقة مع RCP الفعلي. لمعرفة المزيد من المعلومات، يُرجى الاطّلاع على خطوة Build and Flash RCP من دليل إنشاء وإعداد جهاز توجيه الحدود في OpenThread للحصول على مزيد من المعلومات.

إرفاق RCP

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

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

في نافذة طرفية جديدة، ابدأ تشغيل 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

يمكنك استخدام إصدار 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

عليك إبقاء نافذة المحطة الطرفية هذه مفتوحة وتعمل في الخلفية.

بدء محاكاة RCP

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

  2. باستخدام المنفذ التسلسلي الأول في إخراج socat، يمكنك بدء تطبيق 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.