זיהוי ג'אם

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

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

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

איך זה עובד

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

כשמפעילים את התכונה 'זיהוי של Jam':

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

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

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

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

0xC248068C416E7FF0

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

11000010 01001000 00000110 10001100 01000001 01101110 01111111 11110000

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

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

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

זיהוי שגיאת OT

איך מפעילים

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

לפי הגדרה

כדי להפעיל זיהוי Jam, יש להגדיר OPENTHREAD_CONFIG_JAM_DETECTION_ENABLE בתור 1 openthread/src/core/config/openthread-core-default-config.h לפני בניית 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 כדי להפעיל את זיהוי ההפרעה. הערך צריך להיות קטן יותר מחלון הזיהוי. טווח: 1-63.

API

OpenThread

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

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

עמוד שדרה

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

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

CLI

OpenThread

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

wpantund

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

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

מאפיינים
JamDetection:Status
אופן הלימוד
בוליאני
תיאור
קריאה בלבד. מצב הזיהוי של אירוע Jam. מציין אם מזוהה כרגע חסימה של אותות.
JamDetection:Enable
אופן הלימוד
בוליאני
תיאור
הפעלה או השבתה של התכונה 'זיהוי 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-bit
תיאור
מספק מידע על היסטוריית המצב של זיהוי התקלה לצורכי מעקב וניפוי באגים.

לדוגמה, כדי לקבל את מצב הזיהוי של מסמך 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 זמין במאגר GitHub של wpantund.