1- المقدمة
ما هو جهاز توجيه حدود سلسلة المحادثات؟
إنّ سلسلة المحادثات هي بروتوكول شبكة لاسلكية منخفضة الطاقة ومستندة إلى عنوان IP، وتوفّر اتصالات آمنة من جهاز لجهاز إلى جهاز آخر. يمكن أن تتكيّف شبكات المحادثات مع التغييرات في المخططات الهيكلية لتجنُّب نقطة واحدة من التعذُّر.
يربط جهاز توجيه سلسلة محادثات شبكة بين سلسلة محادثات بشبكات أخرى تستند إلى عنوان IP، مثل شبكة Wi-Fi أو إيثرنت. تتطلب شبكة Thread استخدام جهاز توجيه الحدود للاتصال بشبكات أخرى. إنّ جهاز توجيه حدود سلسلة المحادثات يتيح الحد الأدنى من الوظائف التالية:
- اتصال IP ثنائي الاتجاه بين شبكات Thread وWi-Fi/إيثرنت
- اكتشاف الخدمة ثنائي الاتجاه عبر mDNS (على شبكة Wi-Fi/Ethernet) وSRP (على شبكة Thread).
- البنية الأساسية لسلسلة المحادثات التي تدمج أقسام سلسلة المحادثات عبر الروابط المستندة إلى عنوان IP.
- تفويض سلاسل المحادثات الخارجية (على سبيل المثال، الهاتف الجوّال) لمصادقة جهاز Thread والانضمام إليه إلى شبكة Thread.
جهاز توجيه حدود سلسلة المحادثات (OTBR) الذي أصدرته Google هو تنفيذ مفتوح المصدر لجهاز توجيه سلسلة المحادثات.
التصميمات التي ستنشئها
في هذا الدرس التطبيقي حول الترميز، عليك إعداد جهاز توجيه حدود سلسلة المحادثات وربط هاتفك الجوّال بجهاز نهاية سلسلة محادثات من خلال جهاز توجيه الحدود.
ما ستتعرَّف عليه
- كيفية إعداد OTBR
- كيفية إنشاء شبكة مترابطة باستخدام OTBR
- كيفية إنشاء جهاز OpenThread CLI باستخدام ميزة SRP
- كيفية تسجيل خدمة من خلال صفحة SRP
- كيفية اكتشاف جهاز نهاية سلسلة المحادثات والوصول إليه
المتطلبات
- جهاز Raspberry Pi 3/4 وبطاقة SD بسعة تخزين 8 غيغابايت على الأقل
- لوحان تطويري نصف نوردي nRF52840
- تم تفعيل نقطة وصول Wi-Fi بدون جهاز IPv6 Routing الإعلانs Guard على جهاز التوجيه.
- هاتف iOS يعمل بنظام التشغيل iOS 14 أو هاتف Android يعمل بالإصدار 8.1 من نظام التشغيل Android على الأقل
2. إعداد OTBR
إعداد Raspberry Pi
من السهل إعداد جهاز Raspberry Pi الجديد باستخدام أداة rpi-imager
عن طريق اتّباع التعليمات الواردة على rspberrypi.org (بدلاً من استخدام أحدث نظام تشغيل Raspberry Pi في الأداة، يمكنك تنزيل 2021-05-07-rspios-buster-armhf-lite بنفسك). لإكمال خطوات الهاتف الجوّال في هذا الدرس التطبيقي حول الترميز، عليك ربط Raspberry Pi بنقطة اتصال Wi-Fi. يمكنك الاطّلاع على هذا الدليل لإعداد الاتصال اللاسلكي. من السهل تسجيل الدخول إلى Raspberry Pi باستخدام SSH، ويمكنك العثور على التعليمات هنا.
الحصول على رمز OTBR
سجِّل الدخول إلى Raspberry Pi ونسخة طبق الأصل من ot-br-posix
من GitHub:
$ git clone https://github.com/openthread/ot-br-posix.git --depth 1
إنشاء ملف OTBR وتثبيته
يحتوي OTBR على نصين برمجيَّين يتم تشغيلهما وإعداد جهاز توجيه الحدود في سلسلة محادثات:
$ cd ot-br-posix $ ./script/bootstrap $ INFRA_IF_NAME=wlan0 ./script/setup
تعمل تقنية OTBR على كل من واجهة Thread وواجهة شبكة البنية الأساسية (مثل Wi-Fi/إيثرنت) المحدّدة باستخدام INFRA_IF_NAME
. يتم إنشاء واجهة Thread بواسطة OTBR نفسها وتسمّى wpan0
تلقائيًا وتكون لواجهة البنية الأساسية القيمة التلقائية wlan0
إذا لم يتم تحديد INFRA_IF_NAME
بشكل صريح. في حال توصيل Raspberry Pi باستخدام كابل إيثرنت، حدِّد اسم واجهة إيثرنت (مثل eth0
):
$ INFRA_IF_NAME=eth0 ./script/setup
تحقّق من تثبيت بروتوكول OTBR بنجاح:
$ sudo service otbr-agent status ● otbr-agent.service - Border Router Agent Loaded: loaded (/lib/systemd/system/otbr-agent.service; enabled; vendor preset: enabled) Active: activating (auto-restart) (Result: exit-code) since Mon 2021-03-01 05:43:38 GMT; 2s ago Process: 2444 ExecStart=/usr/sbin/otbr-agent $OTBR_AGENT_OPTS (code=exited, status=2) Main PID: 2444 (code=exited, status=2)
من المتوقّع أن تكون خدمة otbr-agent
غير نشطة، لأنها تتطلّب تشغيل شريحة RCP
.
أعِد تشغيل Raspberry Pi لتنفيذ التغييرات حتى تصبح سارية.
إنشاء برامج ثابتة مستندة إلى RCP لتشغيلها
تتوافق تقنية OTBR مع شريحة راديو بحجم 15.4 في وضع المعالج المشترك للراديو (RCP). في هذا الوضع، تعمل تكدس OpenThread على جانب المضيف ويرسل الإطارات أو يستلمها على جهاز إرسال واستقبال IEEE802.15.4.
اتّبِع الخطوة 4 من إنشاء شبكة سلسلة محادثات باستخدام ألواح nRF52840 ودرس تطبيقي حول ترميز OpenThread لإنشاء جهاز nRF52840 RCP وعرضه:
$ script/build nrf52840 USB_trans
بدء OTBR والتحقُّق من الحالة
اربط لوح nRF52840 بجهاز Raspberry Pi وابدأ خدمة otbr-agent
:
$ sudo service otbr-agent restart
تأكَّد من أنّ خدمة otbr-agent
نشطة:
$ sudo service otbr-agent status ● otbr-agent.service - Border Router Agent Loaded: loaded (/lib/systemd/system/otbr-agent.service; enabled; vendor preset: enabled) Active: active (running) since Mon 2021-03-01 05:46:26 GMT; 2s ago Main PID: 2997 (otbr-agent) Tasks: 1 (limit: 4915) CGroup: /system.slice/otbr-agent.service └─2997 /usr/sbin/otbr-agent -I wpan0 -B wlan0 spinel+hdlc+uart:///dev/ttyACM0 Mar 01 05:46:26 raspberrypi otbr-agent[2997]: Stop publishing service Mar 01 05:46:26 raspberrypi otbr-agent[2997]: [adproxy] Stopped Mar 01 05:46:26 raspberrypi otbr-agent[2997]: PSKc is not initialized Mar 01 05:46:26 raspberrypi otbr-agent[2997]: Check if PSKc is initialized: OK Mar 01 05:46:26 raspberrypi otbr-agent[2997]: Initialize OpenThread Border Router Agent: OK Mar 01 05:46:26 raspberrypi otbr-agent[2997]: Border router agent started. Mar 01 05:46:26 raspberrypi otbr-agent[2997]: [INFO]-CORE----: Notifier: StateChanged (0x00038200) [NetData PanId NetName ExtPanId] Mar 01 05:46:26 raspberrypi otbr-agent[2997]: [INFO]-PLAT----: Host netif is down
3. تكوين شبكة Thread
هناك أمر ot-ctl
يمكن استخدامه للتحكّم في خدمة otbr-agent
. للحصول على مزيد من التفاصيل، يقبل ot-ctl
جميع أوامر واجهة سطر الأوامر في OpenThread، يُرجى الاطّلاع على دليل واجهة سطر الأوامر في OpenThread.
تكوين شبكة سلسلة محادثات باستخدام OTBR:
$ sudo ot-ctl dataset init new Done $ sudo ot-ctl dataset commit active Done $ sudo ot-ctl ifconfig up Done $ sudo ot-ctl thread start Done
انتظِر بضع ثوانٍ، من المفترض أن نرى أنّ الدالة OTBR تعمل كسلسلة محادثات leader
وهناك بادئة off-mesh-routable
(OMR) في بيانات شبكة Thread:
$ sudo ot-ctl state leader Done $ sudo ot-ctl netdata show Prefixes: Prefixes: fd76:a5d1:fcb0:1707::/64 paos med 4000 Routes: fd49:7770:7fc5:0::/64 s med 4000 Services: 44970 5d c000 s 4000 44970 01 9a04b000000e10 s 4000 Done $ sudo ot-ctl ipaddr fda8:5ce9:df1e:6620:0:ff:fe00:fc11 fda8:5ce9:df1e:6620:0:0:0:fc38 fda8:5ce9:df1e:6620:0:ff:fe00:fc10 fd76:a5d1:fcb0:1707:f3c7:d88c:efd1:24a9 fda8:5ce9:df1e:6620:0:ff:fe00:fc00 fda8:5ce9:df1e:6620:0:ff:fe00:4000 fda8:5ce9:df1e:6620:3593:acfc:10db:1a8d fe80:0:0:0:a6:301c:3e9f:2f5b Done
4- إعداد الجهاز النهائي لعميل SRP
إنشاء واجهة سطر الأوامر (OTC) ووميضها
اتّبِع الخطوة 5 من إنشاء شبكة سلسلة محادثات باستخدام ألواح nRF52840 ودرس تطبيقي حول ترميز OpenThread لإنشاء جهاز نهاية nRF52840 CLI وعرضه.
وبدلاً من تفعيل OT_COMMISSIONER
وOT_JOINER
، تتطلّب عقدة واجهة سطر الأوامر (CLI) ميزتَي OT_SRP_CLIENT
وOT_ECDSA
.
لذا يجب أن يظهر الاستدعاء الكامل للإصدار على النحو التالي:
$ script/build nrf52840 USB_trans -DOT_SRP_CLIENT=ON -DOT_ECDSA=ON
الانضمام إلى شبكة OTBR
للانضمام إلى شبكة Thread التي تم إنشاؤها بواسطة خدمة otbr-agent
، نحتاج إلى الحصول على مجموعة بيانات عمليات التشغيل النشطة من جهاز OTBR. لنعود إلى سطر الأوامر otbr-agent
ونحصل على مجموعة البيانات النشطة:
$ sudo ot-ctl dataset active -x 0e080000000000010000000300001235060004001fffe002083d3818dc1c8db63f0708fda85ce9df1e662005101d81689e4c0a32f3b4aa112994d29692030f4f70656e5468726561642d35326532010252e204103f23f6b8875d4b05541eeb4f9718d2f40c0302a0ff Done
ارجع إلى جلسة شاشة عقدة عميل SRP واضبط مجموعة البيانات النشطة:
> dataset set active 0e080000000000010000000300001235060004001fffe002083d3818dc1c8db63f0708fda85ce9df1e662005101d81689e4c0a32f3b4aa112994d29692030f4f70656e5468726561642d35326532010252e204103f23f6b8875d4b05541eeb4f9718d2f40c0302a0ff Done
بعد ذلك، يمكنك بدء واجهة "سلسلة المحادثات":
> ifconfig up Done > thread start Done
انتظِر بضع ثوانٍ وتحقّق من الانضمام إلى شبكة Thread بنجاح:
> state child Done > netdata show Prefixes: fd76:a5d1:fcb0:1707::/64 paos med 4000 Routes: fd49:7770:7fc5:0::/64 s med 4000 Services: 44970 5d c000 s 4000 44970 01 9a04b000000e10 s 4000 Done > ipaddr fd76:a5d1:fcb0:1707:d3dc:26d3:f70b:b927 fda8:5ce9:df1e:6620:0:ff:fe00:4001 fda8:5ce9:df1e:6620:ed74:123:cc5d:74ba fe80:0:0:0:d4a9:39a0:abce:b02e Done
تأكد من تطابق بيانات الشبكة مع البيانات المطبوعة على OTBR. يمكننا الآن فحص عنوان OMR في شبكة OTBR:
> ping fd76:a5d1:fcb0:1707:f3c7:d88c:efd1:24a9 Done > 16 bytes from fd76:a5d1:fcb0:1707:f3c7:d88c:efd1:24a9: icmp_seq=1 hlim=64 time=49ms
5. نشر الخدمة على الجهاز النهائي
تم استخدام mDNS على نطاق واسع لنشر خدمة DNS-SD على الرابط المحلي. ومع ذلك، تستهلك الرسائل ذات البث المتعدد الكثير من معدل نقل البيانات وستستنفد بطارية الأجهزة ذات الطاقة المنخفضة بسرعة. تستخدم سلسلة محادثات بروتوكول SRP للبث من أجل تسجيل خدماتها باستخدام جهاز توجيه الحدود، وهي تعتمد على جهاز توجيه الحدود للإعلان عن الخدمات على رابط Wi-Fi أو إيثرنت.
يمكننا تسجيل خدمة باستخدام الأمر srp client
.
انتقِل إلى جلسة شاشة جهاز عميل SRP وابدأ التشغيل التلقائي لبرنامج SRP:
> srp client autostart enable Done
اضبط اسم المضيف الذي سيتم الإعلان عنه على رابط شبكة Wi-Fi/إيثرنت.
> srp client host name ot-host Done
بالنسبة إلى أي جهاز على رابط شبكة Wi-Fi أو إيثرنت للوصول إلى جهاز نهاية Thread، يجب الإعلان عن عنوان OMR للجهاز النهائي:
> srp client host address fd76:a5d1:fcb0:1707:d3dc:26d3:f70b:b927 Done
في النهاية، سجِّل خدمة _ipps._tcp
مزيّفة:
> srp client service add ot-service _ipps._tcp 12345 Done
يُرجى الانتظار بضع ثوانٍ ومن المفترض أن نرى الخدمة مسجّلة:
> srp client service instance:"ot-service", name:"_ipps._tcp", state:Registered, port:12345, priority:0, weight:0 Done
لقد أكملنا جميع أعمال الإعداد، ومن المفترض أن يكون قد تم الإعلان عن الخدمة _ipps._tcp
على رابط Wi-Fi/إيثرنت. حان وقت اكتشاف الجهاز النهائي والوصول إليه الآن.
6- استكشاف الخدمة
التعرّف على الخدمة باستخدام هاتف جوّال
نستخدم تطبيق متصفّح الخدمة لاكتشاف خدمات mDNS مع هاتف Android، ويمكن أيضًا العثور على تطبيق مكافئ للأجهزة الجوّالة التي تعمل بنظام التشغيل iOS. افتح التطبيق ومن المفترض أن تظهر الخدمة _ipps._tcp
فقط.
التعرّف على الخدمة من خلال مضيف نظام التشغيل Linux
إذا كنت تريد اكتشاف الخدمة من مضيف آخر يعمل بنظام التشغيل Linux، يمكنك استخدام الأمر avahi-browse
.
تثبيت avahi-daemon
وavahi-utils
:
$ sudo apt-get install -y avahi-daemon avahi-utils
حل الخدمة:
$ sudo service avahi-daemon start # Ensure the avahi daemon is started. $ avahi-browse -r _ipps._tcp + wlan0 IPv6 ot-service Secure Internet Printer local = wlan0 IPv6 ot-service Secure Internet Printer local hostname = [ot-host.local] address = [fd76:a5d1:fcb0:1707:d3dc:26d3:f70b:b927] port = [12345] txt = [] ...
التعرّف على الخدمة من خلال مضيف نظام التشغيل macOS
يمكنك استخدام dns-sd
على نظام التشغيل macOS لحل الخدمة:
$ dns-sd -Z _ipps._tcp local. Browsing for _ipps._tcp.local. DATE: ---Sun 14 Mar 2021--- 21:31:42.125 ...STARTING... ; To direct clients to browse a different domain, substitute that domain in place of '@' lb._dns-sd._udp PTR @ ; In the list of services below, the SRV records will typically reference dot-local Multicast DNS names. ; When transferring this zone file data to your unicast DNS server, you'll need to replace those dot-local ; names with the correct fully-qualified (unicast) domain name of the target host offering the service. _ipps._tcp PTR ot-service._ipps._tcp ot-service._ipps._tcp SRV 0 0 12345 ot-host.local. ; Replace with unicast FQDN of target host ot-service._ipps._tcp TXT "" ...
7- فحص اتصال الجهاز النهائي
إشعارات من هاتف جوّال
لنأخذ هاتف Pixel كمثال على ذلك، يمكننا العثور على عنوان OMR للخدمة المسجّلة سابقًا في الخدمة (ot-service) في صفحة التفاصيل لمثيل الخدمة في تطبيق Service (تطبيق المتصفِّح).
يمكننا الآن فحص عنوان OMR باستخدام تطبيق Network Analyzer آخر.
للأسف، لا يتوافق إصدار Android من تطبيق أداة تحليل الشبكة مع طلبات بحث mDNS لأداة مساعدة فحص الاتصال، ولا يمكننا فحص اسم المضيف ot-host.local
مباشرةً (يمكننا فحص اسم المضيف باستخدام إصدار iOS من التطبيق).
فحص الاتصال من مضيف Linux/macOS
يُرسِل جهاز توجيه حدود سلسلة المحادثات إعلانات جهاز التوجيه ICMPv6 (RA) للإعلان عن البادئات (عبر خيار معلومات بادئة الخيار) والمسارات (عبر خيار معلومات المسار) على رابط Wi-Fi/إيثرنت.
إعداد مضيف Linux
من المهم التأكد من تفعيل الحسابات التي يتم اكتسابها مؤخرًا وتطبيق RIO على مضيفك:
- يجب أن تكون قيمة
net.ipv6.conf.wlan0.accept_ra
على الأقل1
في حال عدم تفعيل ميزة إعادة توجيه عناوين IP، و2
على الأقل. - يجب ألا يقل حجم
net.ipv6.conf.wlan0.accept_ra_rt_info_max_plen
عن64
.
يتم ضبط accept_ra
تلقائيًا على 1
لمعظم التوزيعات. إلا أنّه قد تكون هناك عمليات خفية أخرى للشبكة تلغي هذا الخيار (على سبيل المثال، سيلغي dhcpcd
في Raspberry Pi accept_ra
إلى 0
). يمكنك التحقّق من القيمة accept_ra
باستخدام:
$ sudo sysctl -n net.ipv6.conf.wlan0.accept_ra 0
اضبط القيمة على 1
(أو 2
في حال تفعيل إعادة توجيه عناوين IP) باستخدام:
$ sudo sysctl -w net.ipv6.conf.wlan0.accept_ra=1 Net.ipv6.conf.wlan0.accept_ra = 1
يكون الخيار accept_ra_rt_info_max_plen
في معظم توزيعات Linux هو الإعداد التلقائي في 0
، ويمكنك ضبطه على 64
باستخدام:
$ sudo sysctl -w net.ipv6.conf.wlan0.accept_ra_rt_info_max_plen=64 net.ipv6.conf.wlan0.accept_ra_rt_info_max_plen = 64
سيتم فقد التغيير بعد إعادة تشغيل المضيف. على سبيل المثال، يمكنك إلحاق الأوامر أدناه إلى /etc/sysctl.conf
لتفعيل RIO بشكل دائم:
$ net.ipv6.conf.wlan0.accept_ra_rt_info_max_plen = 64
قد يكون هناك وقت متأخر لتغيير عمليات الضبط هذه لأنّ OTBR يرسل حاليًا رسائل من الحسابات التي يتم اكتسابها مؤخرًا، وقد يستغرق الفاصل الزمني بين رسالتَي "RA" غير المرغوب فيهما عدّة ثوانٍ. تتمثل إحدى الطرق في قطع الاتصال بشبكة AP Wi-Fi وإعادة الاتصال بها لإرسال رسائل طلب جهاز التوجيه حتى تستجيب شبكة OTBR لطلبات الحسابات التي يتم اكتسابها مؤخرًا. يمكنك أيضًا إعادة تشغيل وظيفة "توجيه الحدود" على جهاز توجيه الحدود:
$ sudo ot-ctl br disable Done $ sudo ot-ctl br enable Done
إذا كنت تحاول إعادة الاتصال بشبكة Wi-Fi أو إعادة تشغيل واجهة إيثرنت، تأكَّد من عدم استخدام dhcpcd لإدارة شبكة WiFi-/Ethernet IPv6. نظرًا لأنّ استراتيجية dhcpc تلغي دائمًا الخيار accept_ra
في كل مرة تتم فيها إعادة تشغيل الواجهة وستفقد إعدادات accept_ra
. يمكنك إلحاق الأسطر التالية بملف الإعداد dhcpcd (مثل /etc/dhcpcd.conf
) لإيقاف IPv6 صراحةً في dhcpcd:
noipv6 noipv6rs
يجب إعادة تشغيل الجهاز لتطبيق التغيير.
إعداد مضيف نظام التشغيل macOS
يتم تفعيل كلا الخيارين accept_ra*
تلقائيًا، ولكن عليك ترقية نظامك إلى نظام التشغيل macOS Big Sur على الأقل.
فحص اسم المضيف أو عنوان IPv6
يمكننا الآن فحص اسم المضيف ot-host.local
باستخدام الأمر ping -6
(ping6
لنظام التشغيل macOS):
$ ping -6 ot-host.local. PING ot-host.local.(fd76:a5d1:fcb0:1707:d3dc:26d3:f70b:b927 (fd76:a5d1:fcb0:1707:d3dc:26d3:f70b:b927)) 56 data bytes 64 bytes from fd76:a5d1:fcb0:1707:d3dc:26d3:f70b:b927 (fd76:a5d1:fcb0:1707:d3dc:26d3:f70b:b927): icmp_seq=1 ttl=63 time=170 ms 64 bytes from fd76:a5d1:fcb0:1707:d3dc:26d3:f70b:b927 (fd76:a5d1:fcb0:1707:d3dc:26d3:f70b:b927): icmp_seq=2 ttl=63 time=64.2 ms 64 bytes from fd76:a5d1:fcb0:1707:d3dc:26d3:f70b:b927 (fd76:a5d1:fcb0:1707:d3dc:26d3:f70b:b927): icmp_seq=3 ttl=63 time=22.8 ms 64 bytes from fd76:a5d1:fcb0:1707:d3dc:26d3:f70b:b927 (fd76:a5d1:fcb0:1707:d3dc:26d3:f70b:b927): icmp_seq=4 ttl=63 time=37.7 ms 64 bytes from fd76:a5d1:fcb0:1707:d3dc:26d3:f70b:b927 (fd76:a5d1:fcb0:1707:d3dc:26d3:f70b:b927): icmp_seq=5 ttl=63 time=28.7 ms ...
قد يتعذّر تنفيذ هذا الأمر على مضيفي نظام التشغيل Linux الذين يظهر لهم الخطأ "Name or service not known"
. ويرجع ذلك إلى أنّ الأمر ping
لا يحلّ اسم ot-host.local.
باستخدام طلبات بحث mDNS. افتح /etc/nsswitch.conf
وأضِف mdns6_minimal
إلى السطر الذي يبدأ بـ hosts
:
hosts: files mdns4_minimal mdns6_minimal dns
يمكنك دائمًا فحص اتصال عنوان IPv6 مباشرةً:
$ ping -6 fd76:a5d1:fcb0:1707:d3dc:26d3:f70b:b927 PING fd76:a5d1:fcb0:1707:d3dc:26d3:f70b:b927(fd76:a5d1:fcb0:1707:d3dc:26d3:f70b:b927) 56 data bytes 64 bytes from fd76:a5d1:fcb0:1707:d3dc:26d3:f70b:b927: icmp_seq=1 ttl=63 time=32.9 ms 64 bytes from fd76:a5d1:fcb0:1707:d3dc:26d3:f70b:b927: icmp_seq=2 ttl=63 time=27.8 ms 64 bytes from fd76:a5d1:fcb0:1707:d3dc:26d3:f70b:b927: icmp_seq=3 ttl=63 time=29.9 ms 64 bytes from fd76:a5d1:fcb0:1707:d3dc:26d3:f70b:b927: icmp_seq=4 ttl=63 time=73.5 ms 64 bytes from fd76:a5d1:fcb0:1707:d3dc:26d3:f70b:b927: icmp_seq=5 ttl=63 time=26.4 ms ...
8- إنهاء الجهاز وإلغاء نشر الخدمة
لإزالة العنوان والخدمة المسجَّلين من عقدة عميل SRP:
> srp client host remove Done
من المفترض أن لا تتمكّن من استكشاف خدمة _ipps._tcp
الآن.
9. تهانينا
لقد تمكّنت من إعداد OTBR بنجاح باعتباره جهاز توجيه الحدود في سلسلة محادثات من أجل توفير إمكانية الاتصال عبر بروتوكول IP الثنائي الاتجاه واكتشاف الخدمة للأجهزة النهائية.
الخطوة التالية:
اطّلِع على بعض هذه الدروس التطبيقية حول الترميز...