זיהוי ג'אם

הצגת המקור ב-GitHub

כדי לספק מנגנון להגדרה של זיהוי חסימות אות בכל צומת של OpenThread, צריך להפעיל את התכונה של זיהוי Jam.

התכונה הזו שימושית לאישורים של מכשירים שדורשים זיהוי של קליטת אותות בערוץ ספציפי. אפשר להגדיר אותו כך שיעמוד בדרישות של כל סוג הסמכה.

איך זה עובד

התכונה Jam Detect מפקחת על ה-RSSI (האות שהתקבל בעוצמת האות של אות) עבור צומת במהלך חלונות זמן ספציפיים, כדי לקבוע אם הערוץ נתקע.

כשזיהוי ה-Jam מופעל:

  1. מצב זיהוי ה-Jam מוגדר ל-false.
  2. הצומת דוגם את ה-RSSI מספר פעמים במרווחי זמן של שנייה אחת.
  3. אם ה-RSSI על פני כל המרווח הזה במשך שנייה נשאר מעל הסף שהוגדר ל-RSSI עבור כל דגימה, המרווח הזה של שנייה נחשב תקוע.
  4. אם אחד מהחלקים התקפים של שנייה אחת תקועה יותר או שווה למספר המצטבר של התקופות העמוסות בחלון הזיהוי הקודם שהוגדר בכל נקודת זמן, מצב זיהוי ה-Jam בנקודת הזמן הזו יהיה true.
  5. אם מספר הפעמים שמרווחי הזמן בין שני כלים תקועים נמוך ממספר השניות המצטבר של התקופה העמוסה שהוגדרו בשעת חלון הזיהוי הקודם שהוגדר בכל נקודת זמן, מצב זיהוי ה-Jam בנקודת הזמן הזו יהיה false.

מפת סיביות של ההיסטוריה

בממשקי ה-API של OpenThread ובנכסים של wpantund, אפשר לאחזר מפת סיביות של 63 השניות הקודמות. מפת סיביות זו מציינת אם ה-RSSI חצה את הסף המוגדר של RSSI בכל אחת מ-63 השניות הקודמות.

לדוגמה, אפשר לאחזר את מפת הסיביות הבאה:

0xC248068C416E7FF0

המרה לבינארי מובילה לכל מופע שה-RSSI חרג מסף ה-RSSI שהוגדר במהלך 63 השניות הקודמות:

11000010 01001000 00000110 10001100 01000001 01101110 01111111 11110000

אם חלון הזיהוי מוגדר ל-16 שניות ותקופת הזיהוי העמוסה מוגדרת ל-8 שניות, מצב זיהוי ה-Jam הופך ל-true ב-51 שניות. זהו המקרה הראשון שבו חריגה מסף 'RSSI' במשך 8 שניות לפחות ב-16 השניות הקודמות. בדוגמה הזו, מצב זיהוי ה-Jam נשאר true למשך 13 השניות הבאות.

11000010 01001000 00000110 10001100 01000001 01101110 01111111 11110000
                                      [00001 01101110 011] = 8 in 16

ייתכן שמפת סיביות זו מיוצגת על ידי התרשים הבא, אם -45 dBm היה סף ה-RSSI שהוגדר:

זיהוי OT לזיהוי Jam

איך מפעילים את התכונה

תכונה זו מושבתת כברירת מחדל.

לפי הגדרה

כדי להפעיל את זיהוי ה-Jam, צריך להגדיר את OPENTHREAD_CONFIG_JAM_DETECTION_ENABLE בקובץ 1, openthread/src/core/config/openthread-core-default-config.h, לפני Open OpenThread:

#ifndef OPENTHREAD_CONFIG_JAM_DETECTION_ENABLE
#define OPENTHREAD_CONFIG_JAM_DETECTION_ENABLE 1
#endif

לפי אפשרות

לחלופין, יש להשתמש באפשרות ה-build של -DOT_JAM_DETECTION=ON כשבונים את פרוטוקול OpenThread:

./script/build -DOT_JAM_DETECTION=ON

פרמטרים

אפשר להגדיר פרמטרים לזיהוי Jam רק דרך OpenThread API, באמצעות פרוטוקול Spinel או באמצעות wpanctl, כלי שורת הפקודה של wpantund לניהול של רשת משותפת במעבדים (NCP). ערכי ברירת המחדל מוחלים אם התכונה מופעלת ללא הגדרות נוספות.

ניתן להתאים אישית את התכונה הזו באמצעות הפרמטרים הבאים:

פרמטרים
סף RSSI
ערך ברירת מחדל
0 dBm
תיאור
מציינת את רמת הסף של RSSI ב-dBm שממנה יש להתייחס לערוץ התקוע.
חלון זיהוי
ערך ברירת מחדל
63 שניות
תיאור
מציינת את החלון בשניות שבו יש לבדוק אם יש תקינות אות. טווח: 1-63.
תקופה עמוסה
ערך ברירת מחדל
63 שניות
תיאור
המדיניות מציינת את מספר השניות המצטברות בחלון הזיהוי שבו ה-RSSI צריך להיות מעל לסף ה-RSSI כדי להפעיל זיהוי Jam. חייב להיות קטן יותר מחלון הזיהוי. טווח: 1-63.

API

OpenThread

להשתמש ב-Jam Detection API כדי לנהל את תכונת זיהוי ה-Jam ישירות באפליקציית OpenThread. ה-Open API API מספק את הפונקציונליות הבאה:

  • הפעלה והפסקה של התכונה
  • הצגת מצב זיהוי ה-Jam
  • ניהול כל הפרמטרים
  • אחזור של מפת סיביות הקיימת של זיהוי Jam
  • רישום פונקציית קריאה חוזרת לזיהוי Jam

ספינל

פרוטוקול Spinel מאפשר למכשיר מארח לתקשר ישירות עם NCP. בפרוטוקול הזה נחשפים נכסים לזיהוי Jam ב-openthread/src/lib/spinel/spinel.h, שמספקים את הפונקציונליות הבאה:

  • הפעלה והפסקה של התכונה
  • הצגת מצב זיהוי ה-Jam
  • ניהול כל הפרמטרים
  • אחזור של מפת סיביות הקיימת של זיהוי Jam

CLI

OpenThread

אין פקודות CLI של OpenThread הקשורות לתכונה הזו.

Wpantund

ב-CLI של wpanctl אפשר לנהל את התכונה לזיהוי Jam לתצורה של OpenThread NCP. כל ההגדרות של זיהוי ה-Jam נשמרות על ידי wpantund אחרי איפוס ה-NCP.

wpanctl מספק גישה ל-wpantund הנכסים הבאים:

נכסים
JamDetection:Status
אופן הלימוד
boolean
תיאור
קריאה בלבד. מצב זיהוי של Jam. מציין אם אותרה פקק אות.
JamDetection:Enable
אופן הלימוד
boolean
תיאור
הפעלה או השבתה של התכונה 'זיהוי Jam'.
JamDetection:RssiThreshold
אופן הלימוד
dBm
תיאור
המדיניות מציינת את רמת הסף של RSSI ב-dBm שממנה יש לשקול את חסימת הערוץ.
JamDetection:Window
אופן הלימוד
שניות
תיאור
מציינת את החלון בשניות שבו יש לבדוק אם יש תקינות אות. טווח: 1-63.
JamDetection:BusyPeriod
אופן הלימוד
שניות
תיאור
המדיניות מציינת את מספר השניות המצטברות ב-JamDetection:Window שבהן ה-RSSI צריך להיות גדול מ-JamDetection:RssiThreshold כדי להפעיל את זיהוי ה-Jam. הערך חייב להיות קטן מ-JamDetection:Window. טווח: 1-63.
JamDetection:Debug:HistoryBitmap
אופן הלימוד
ערך של 64 ביט
תיאור
המדיניות מספקת מידע על ההיסטוריה של מצב זיהוי ה-Jam לצורכי מעקב וניפוי באגים.

לדוגמה, כדי לקבל את מצב זיהוי ה-Jam ב-NCP:

sudo wpanctl getprop JamDetection:Status
JamDetection:Status = false

כדי להגדיר את סף ה-RSSI לזיהוי של Jam בשיעור של -45 dBm ב-NCP:

sudo wpanctl setprop JamDetection:RssiThreshold -45
sudo wpanctl getprop JamDetection:RssiThreshold
JamDetection:RssiThreshold = -45

מידע נוסף על הנכסים של wpantund זמין במאגר GitHubwpantund.