Android 12 में, वाई-फ़ाई/सेल्युलर कोएक्स चैनल से बचने की सुविधा पेश की गई थी. यह सुविधा, असुरक्षित वाई-फ़ाई चैनलों की पहचान करती है और उनका इस्तेमाल करने से बचती है. ऐसा उन मामलों में किया जाता है जहां सेल्युलर चैनलों से इंटरफ़ेरेंस हो सकता है. इसमें STA, SoftAp, Wi-Fi Direct (P2P), Wi-Fi Aware (NAN) जैसे इंटरफ़ेस शामिल हैं.
इस पेज पर इनके बारे में बताया गया है:
- ऐसी जानकारी जिसे सेल्युलर मॉडेम को Android फ़्रेमवर्क को देनी होगी
- वाई-फ़ाई फ़्रेमवर्क, वाई-फ़ाई चैनलों का हिसाब लगाने के लिए इन एल्गोरिदम का इस्तेमाल करता है, ताकि उनसे बचा जा सके
- कॉन्फ़िगरेशन टेबल, जिन्हें डिवाइस बनाने वाली कंपनियों को वाई-फ़ाई फ़्रेमवर्क के लिए उपलब्ध कराना होगा
- चैनल बदलने से रोकने की सुविधा से जुड़े सिस्टम एपीआई, कॉन्फ़िगरेशन, और एचएएल एपीआई
- चैनल से बचने की सुविधा को मैनेज करने के लिए फ़्रेमवर्क का तरीका
- चैनल को स्किप करने की सुविधा को मैनेज करने के लिए, चिप वेंडर का तरीका
- चैनल को ब्लॉक करने की सुविधा लागू करने से जुड़ी जानकारी
- चैनल को स्किप करने के व्यवहार की पुष्टि करने के लिए टेस्ट
बैकग्राउंड
एलटीई, 5G एनआर, और लाइसेंस असिस्टेड ऐक्सेस (एलएए) जैसी सेल्युलर टेक्नोलॉजी वाले डिवाइसों में, इस्तेमाल किए जा रहे सेल्युलर चैनल, इस्तेमाल किए जा रहे वाई-फ़ाई चैनल में रुकावट डाल सकते हैं. ऐसा तब होता है, जब सेल्यूलर और वाई-फ़ाई चैनल के बीच फ़्रीक्वेंसी का अंतर कम होता है (आस-पास के चैनल) या जब हार्मोनिक और इंटरमॉड्यूलेशन इंटरफ़ेरेंस होता है.
इस तरह की रुकावट तब समस्या बन जाती है, जब एक ऐंटीना ट्रांसमिट कर रहा हो और दूसरा उसी समय सिग्नल पा रहा हो. इस मामले में, ट्रांसमिटिंग ऐंटीना, सिग्नल पाने वाले ऐंटीना को ओवरलोड कर देता है. इससे सिग्नल पाने वाले ऐंटीना की क्वालिटी पर असर पड़ता है.
इस दस्तावेज़ में, सिग्नल में रुकावट डालने वाले ट्रांसमीटर को एग्रेसर और रुकावट का सामना करने वाले रिसीवर को पीड़ित कहा गया है. जिस वाई-फ़ाई चैनल पर हमला किया गया है या जिस चैनल से हमला किया गया है उसे असुरक्षित चैनल कहा जाता है.
Wi-Fi/सेल्युलर कोएक्स चैनल से बचने की सुविधा, चैनल से बचने के लिए एक जैसा तरीका उपलब्ध कराती है. इससे, Wi-Fi फ़्रेमवर्क से अलग होने वाले मालिकाना हक वाले कोड की ज़रूरत कम हो जाती है. इसके अलावा, इस सुविधा की मदद से डिवाइस बनाने वाली कंपनियां, सुविधा को कॉन्फ़िगर, चालू, और बंद कर सकती हैं. साथ ही, सुविधा को बदल सकती हैं.
यह सुविधा, वाई-फ़ाई चैनलों को कंट्रोल करके चैनल से बचने की सुविधा देती है. Wi-Fi चैनल से बचने की स्कीम को चार चरणों में बांटा जा सकता है:
- मॉडम, सेल्युलर फ़्रीक्वेंसी में बदलाव की रिपोर्ट करता है
- कोएक्स अवॉइडेंस एल्गोरिदम, असुरक्षित वाई-फ़ाई चैनलों का हिसाब लगाता है
- कोएक्स अवॉइडेंस एल्गोरिदम, वाई-फ़ाई सेवा को सूचना देता है
- फ़्रेमवर्क या ड्राइवर, वाई-फ़ाई से जुड़ी सही कार्रवाई करता है
पहली इमेज. चैनल को ब्लॉक करने की सुविधा
सेलुलर फ़्रीक्वेंसी में हुए बदलाव की रिपोर्ट करना
टेलीफ़ोनी सेवा, फ़िलहाल इस्तेमाल किए जा रहे मोबाइल नेटवर्क वाले चैनलों की जानकारी देती है. जब सेल्यूलर फ़्रीक्वेंसी बदलती है, तो मॉडेम इस जानकारी को टेलीफ़ोनी सेवा को IRadio::PhysicalChannelConfig
के ज़रिए भेजता है.
इस जानकारी में, लाइसेंस वाले असिस्टेड ऐक्सेस (एलएए) और कैरियर एग्रीगेशन (सीए) के इंडिकेटर शामिल होते हैं.
Android 12 से, 1.6 IRadio::PhysicalChannelConfig
में मौजूद इन फ़ील्ड से, कोएक्स फ़ॉर्मूला के लिए ज़रूरी जानकारी मिलती है. इस जानकारी को मॉडम को भरना होता है.
struct PhysicalChannelConfig {
/** Connection status for cell. Valid values are PRIMARY_SERVING and SECONDARY_SERVING */
CellConnectionStatus status;
/** The radio technology for this physical channel */
RadioTechnology rat;
/** Downlink Absolute Radio Frequency Channel Number */
int32_t channelNumberDownlink;
/** Uplink Absolute Radio Frequency Channel Number */
int32_t channelNumberUplink;
/** Downlink cell bandwidth, in kHz */
int32_t cellBandwidthDownlink;hte
/** Uplink cell bandwidth, in kHz */
int32_t cellBandwidthUplink;
}
सुरक्षित नहीं माने जाने वाले वाई-फ़ाई चैनलों का पता लगाना
जब मॉडेम, सेल्युलर फ़्रीक्वेंसी में बदलाव की सूचना देता है, तब कोएक्स चैनल एल्गोरिदम, सेल्युलर और वाई-फ़ाई चैनलों के बीच होने वाली रुकावट का हिसाब लगाता है. साथ ही, यह तय करता है कि वाई-फ़ाई के कौनसे चैनल सुरक्षित नहीं हैं.
कई तरह की रुकावटें होती हैं, जिनके लिए अलग-अलग फ़ॉर्मूले की ज़रूरत होती है: आस-पास की फ़्रीक्वेंसी से होने वाली रुकावट और हार्मोनिक/इंटरमॉड्यूलेशन से होने वाली रुकावट. डिवाइसों के बीच ऐंटीना और लेआउट में फ़िज़िकल अंतर होने की वजह से, हर डिवाइस के लिए आस-पास के और हार्मोनिक/इंटरमॉड्यूलेशन इंटरफ़ेरेंस के पैटर्न अलग-अलग होते हैं. इस समस्या को ठीक करने के लिए, डिवाइस बनाने वाली कंपनियों को लुकअप टेबल उपलब्ध करानी होगी, ताकि दो तरह की रुकावटों के लिए सामान्य फ़ॉर्मूलों में पैरामीटर जोड़े जा सकें. ये पैरामीटर, हर सेल बैंड के लिए तय किए जाते हैं. साथ ही, इन्हें ऐक्टिव सेल चैनलों के बैंड से रेफ़र किया जाता है.
लुकअप टेबल में, ज़्यादा से ज़्यादा पावर कैप तय किया जा सकता है. अगर ज़्यादा से ज़्यादा पावर कैप तय की गई है, तो असुरक्षित चैनल, तय की गई पावर कैप के साथ ट्रांसमिट करता है. अगर कोई पावर कैप नहीं है, तो चैनल पूरी पावर के साथ ट्रांसमिट करता है.
आम तौर पर, चैनल से बचने की सुविधा, परफ़ॉर्मेंस को ऑप्टिमाइज़ करने के लिए, असुरक्षित वाई-फ़ाई चैनलों से बचने के लिए सबसे अच्छे तरीके का इस्तेमाल करती है. हालांकि, कुछ मामलों में (उदाहरण के लिए, कैरियर की ज़रूरी शर्तों की वजह से), कुछ इंटरफ़ेस के लिए यह ज़रूरी है कि वे कुछ सेल्यूलर बैंड के लिए असुरक्षित चैनलों का इस्तेमाल न करें. ऐसे मामलों में, mandatory restrictions को बिटमास्क के तौर पर दिखाया जाता है. इसमें यह तय करने के लिए वैल्यू होती हैं कि वाई-फ़ाई डायरेक्ट (P2P), SoftAp, और वाई-फ़ाई अवेयर (NAN) जैसे कुछ चैनलों को अनुमति देनी है या नहीं. सुरक्षित न होने पर, किसी चैनल को सभी इस्तेमाल के उदाहरणों के लिए इस्तेमाल न करने का सुझाव दिया जाता है. वहीं, ज़रूरी पाबंदियां, इस्तेमाल के कुछ उदाहरणों को ज़रूरी तौर पर न इस्तेमाल करने के लिए मार्क करती हैं.
अगर 2.4 गीगाहर्ट्ज़ या 5 गीगाहर्ट्ज़ बैंड के हर चैनल को असुरक्षित के तौर पर मार्क किया गया है, तो लुकअप टेबल, हस्तक्षेप करने वाले हर सेल बैंड के लिए, डिफ़ॉल्ट 2.4 गीगाहर्ट्ज़ चैनल या डिफ़ॉल्ट 5 गीगाहर्ट्ज़ चैनल को सबसे सुरक्षित विकल्प के तौर पर तय कर सकती है. अगर बैंड के बाकी सदस्यों के चैनल को असुरक्षित के तौर पर रिपोर्ट किया जाता है, तो इन डिफ़ॉल्ट चैनलों को असुरक्षित के तौर पर रिपोर्ट नहीं किया जाता.
बदलावों की सूची
फ़ॉर्मूला आधारित तरीका, उन मामलों में सीमित होता है जहां इंटरफ़ेरेंस, बैंडविड्थ पर बहुत ज़्यादा निर्भर करता है. इसलिए, ज़्यादा बैंडविड्थ वाले चैनल असुरक्षित हो सकते हैं, लेकिन कम बैंडविड्थ वाले चैनल नहीं. एलएए जैसे मामलों में, कैलकुलेशन को स्किप करना और असुरक्षित चैनलों की तय की गई सूची का इस्तेमाल करना फ़ायदेमंद होता है.
इसके लिए, कुछ एंट्री के लिए लुकअप टेबल में, असुरक्षित चैनलों की बदली गई सूची दी जा सकती है. टेबल एंट्री में मौजूद ओवरराइड सूची से पता चलता है कि उस सेल चैनल के लिए कैलकुलेशन को स्किप कर दिया गया है. साथ ही, इससे यह भी पता चलता है कि मिलते-जुलते सेल चैनल के लिए असुरक्षित वाई-फ़ाई चैनल, ओवरराइड सूची में दिए गए हैं.
बैंडविड्थ की ज़रूरत वाले मामलों में, कुछ बैंडविड्थ से बचा जा सकता है. इसके लिए, ओवरराइड सूची में कुछ बैंडविड्थ वाले कुछ चैनल तय करें. ऐसा इसलिए होता है, क्योंकि हर वाई-फ़ाई चैनल नंबर, तय किए गए बैंडविड्थ से जुड़ा होता है.
बदले गए चैनलों की सूची को, हर वाई-फ़ाई बैंड के लिए चैनल नंबर या पहले से तय किए गए कैटगरी कीवर्ड की सूची के तौर पर दिखाया जाता है:
2g कैटगरी:
all
(पूरा 2.4 गीगाहर्ट्ज़ बैंड)
5g कैटगरी:
all
(पूरा 5 गीगाहर्ट्ज़ बैंड)20mhz
(5 GHz 20 MHz चैनल)40mhz
(5 गीगाहर्ट्ज़ 40 मेगाहर्ट्ज़ चैनल)80mhz
(5 गीगाहर्ट्ज़ 80 मेगाहर्ट्ज़ चैनल)160mhz
(5 गीगाहर्ट्ज़ 160 मेगाहर्ट्ज़ चैनल)
आस-पास के चैनल से होने वाला इंटरफ़ेरेंस
आस-पास के चैनल से होने वाले इंटरफ़ेरंस का पता लगाने के लिए, कोएक्स अवॉइडेंस एल्गोरिदम यह पक्का करता है कि एग्रेसर और विक्टिम चैनल के बीच की दूरी ΔF, तय किए गए थ्रेशोल्ड से कम न हो.
दूसरी इमेज. हमला करने वाले और पीड़ित चैनल के बीच की दूरी
थ्रेशोल्ड, डिवाइस के फ़िज़िकल कॉन्फ़िगरेशन और लुकअप टेबल की एंट्री में दिए गए थ्रेशोल्ड वैल्यू के हिसाब से तय किया जाता है. यह थ्रेशोल्ड वैल्यू, हर इंटरफ़ेयरिंग बैंड के लिए होती है. जिन बैंड को नॉन-इंटरफ़ेयरिंग माना जाता है उनके लिए टेबल एंट्री नहीं होती. साथ ही, असुरक्षित चैनलों का हिसाब लगाने की ज़रूरत नहीं होती (ज़्यादातर मामलों में ऐसा ही होता है).
आस-पास के इंटरफ़ेरेंस के पैरामीटर
wifiVictimMhz
: वाई-फ़ाई के लिए मेगाहर्ट्ज़ की दूरी का थ्रेशोल्ड (सेल अपलिंक)cellVictimMhz
: सेल विक्टिम (सेल डाउनलिंक) के लिए मेगाहर्ट्ज़ में दूरी का थ्रेशोल्ड
हर चालू सेल चैनल के लिए, एल्गोरिदम इस तरह काम करता है:
- चैनल के बैंड के लिए, लुकअप टेबल की एंट्री ढूंढने की कोशिश करता है. अगर कोई टेबल एंट्री नहीं मिलती है, तो उस सेल चैनल के लिए असुरक्षित चैनलों के बिना नतीजे दिखाता है.
- सेलुलर बैंड के आधार पर, यह पता लगाता है कि कौनसे वाई-फ़ाई बैंड पर खतरा है. साथ ही, यह भी पता लगाता है कि बैंड के किस हिस्से से रुकावट आ रही है. उदाहरण के लिए, 2.4 गीगाहर्ट्ज़ के निचले चैनल, 2.4 गीगाहर्ट्ज़ के ऊपरी चैनल, 5 गीगाहर्ट्ज़ के निचले चैनल.
अगर
wifiVictimMhz
मौजूद है और सेल चैनल में अपलिंक औरअगर वाई-फ़ाई बैंड का निचला हिस्सा जोखिम में है
- यह फ़ंक्शन, सेल अपलिंक की सबसे ज़्यादा फ़्रीक्वेंसी में
wifiVictimMhz
जोड़कर, असुरक्षित चैनलों की ऊपरी सीमा का पता लगाता है. - यह फ़ंक्शन, 20 मेगाहर्ट्ज़ वाले पहले ऐसे वाई-फ़ाई चैनल का पता लगाता है जिसकी निचली सीमा, तय सीमा से ज़्यादा है.
- यह वाई-फ़ाई चैनल, ज़्यादा बैंडविड्थ वाले हर उस चैनल को मार्क करता है जिसमें यह शामिल है. उदाहरण के लिए, 40 मेगाहर्ट्ज़, 80 मेगाहर्ट्ज़. साथ ही, यह उसी बैंड के हर ऐसे चैनल को भी मार्क करता है जो असुरक्षित चैनल से कम है.
- यह फ़ंक्शन, सेल अपलिंक की सबसे ज़्यादा फ़्रीक्वेंसी में
अगर वाई-फ़ाई बैंड के ऊपरी हिस्से में जोखिम है
- यह फ़ंक्शन, सेल्युलर अपलिंक की सबसे कम फ़्रीक्वेंसी से wifiVictimMhz को घटाकर, असुरक्षित चैनलों की निचली सीमा का पता लगाता है.
- यह फ़ंक्शन, उस पहले वाई-फ़ाई चैनल का पता लगाता है जिसका ऊपरी किनारा सीमा से ओवरलैप होता है.
- यह वाई-फ़ाई चैनल, इसमें शामिल हर बड़े चैनल (उदाहरण के लिए, 40 मेगाहर्ट्ज़, 80 मेगाहर्ट्ज़) और उसी बैंड के हर बड़े चैनल को असुरक्षित चैनल के तौर पर मार्क करता है.
अगर
cellVictimMhz
मौजूद है और सेल चैनल में डाउनलिंक है.- यह फ़ंक्शन, थ्रेशोल्ड के तौर पर
cellVictimMhz
का इस्तेमाल करके तीसरे चरण को पूरा करता है. साथ ही, सेल अपलिंक के बजाय सेल डाउनलिंक से तुलना करता है.
- यह फ़ंक्शन, थ्रेशोल्ड के तौर पर
यह टेबल एंट्री की पावर कैप को, असुरक्षित माने गए चैनलों पर लागू करता है.
तीसरी इमेज. आस-पास के चैनल के इंटरफ़ेरेंस के लिए, चैनल की असुरक्षित फ़्रीक्वेंसी का हिसाब लगाना
हार्मोनिक या इंटरमॉड्यूलेशन डिस्टॉर्शन
हार्मोनिक या इंटरमॉड्यूलेशन डिस्टॉर्शन के लिए, कोएक्स इंजन हार्मोनिक या इंटरमॉड्यूलेशन सिग्नल की रेंज का हिसाब लगाता है. साथ ही, यह आकलन करता है कि संभावित विक्टिम चैनल के साथ इसका कितना प्रतिशत ओवरलैप होता है. अगर ओवरलैप, ओवरलैप थ्रेशोल्ड से ज़्यादा होता है, तो एल्गोरिदम इसे असुरक्षित स्थिति मानता है. पीड़ित चैनल पर हार्मोनिक या इंटरमॉड्यूलेशन डिस्टॉर्शन के प्रतिशत ओवरलैप की गणना, इस समीकरण की मदद से की जाती है:
हार्मोनिक डिस्टॉर्शन के मामले में, एल्गोरिदम, सेल अपलिंक चैनल के हार्मोनिक डिस्टॉर्शन पर विचार करता है. इससे वाई-फ़ाई चैनल पर असर पड़ता है. इसके बाद, यह सेल अपलिंक फ़्रीक्वेंसी और हार्मोनिक डिग्री $ N $ के आधार पर, डिस्टॉर्शन हाई और डिस्टॉर्शन लो को हार्मोनिक वैल्यू से बदल देता है.
चौथी इमेज. हार्मोनिक डिस्टॉर्शन के लिए, असुरक्षित चैनल की कैलकुलेशन
इंटरमॉड्यूलेशन के मामले में, एल्गोरिदम सेल अपलिंक के इंटरमॉड्यूलेशन डिस्टॉर्शन और सेल डाउनलिंक चैनल को नुकसान पहुंचाने वाले वाई-फ़ाई चैनल पर विचार करता है. इसके बाद, यह सेल अपलिंक फ़्रीक्वेंसी, वाई-फ़ाई फ़्रीक्वेंसी, और दो इंटरमॉड्यूलेशन कोएफ़िशिएंट $ M $, $ N $ के आधार पर, डिस्टॉर्शन हाई और डिस्टॉर्शन लो को इंटरमॉड्यूलेशन वैल्यू से बदल देता है.
पांचवीं इमेज. इंटरमॉड्यूलेशन डिस्टॉर्शन के लिए, असुरक्षित चैनल की कैलकुलेशन
लुकअप टेबल में, हर इंटरफ़ेयरिंग सेल बैंड के लिए $ M $, $ N $ और ओवरलैप वैल्यू तय की जा सकती हैं. अगर किसी बैंड के लिए कोई रुकावट नहीं है, तो उस बैंड की एंट्री के लिए टेबल से वैल्यू हटा दी जाती हैं. वाई-फ़ाई के 2.4 गीगाहर्ट्ज़ और 5 गीगाहर्ट्ज़ बैंड के लिए, इन वैल्यू के दो सेट अलग-अलग तय किए जा सकते हैं.
यह ऐल्गोरिदम, आस-पास के सेल की वजह से होने वाली रुकावट के लिए इस्तेमाल किए जाने वाले ऐल्गोरिदम की तरह ही काम करता है. यह रुकावट पैदा करने वाले हर सेल बैंड के लिए तय की गई पावर कैप की वैल्यू का फिर से इस्तेमाल करता है.
हर चालू सेल चैनल के लिए, एल्गोरिदम इस तरह काम करता है:
- यह सेल चैनल के बैंड के लिए, लुकअप टेबल की एंट्री ढूंढने की कोशिश करता है. अगर कोई टेबल एंट्री नहीं मिलती है, तो इस चैनल के लिए ऐसे चैनल दिखाता है जिनमें आपत्तिजनक कॉन्टेंट नहीं है.
अगर पैरामीटर तय किए गए हैं, तो यह फ़ंक्शन हार्मोनिक से असुरक्षित 2.4 GHz चैनल ढूंढता है.
- यह 2.4 गीगाहर्ट्ज़ के लिए, हार्मोनिक डिग्री N का पता लगाता है.
- यह फ़ंक्शन, N और सेल अपलिंक के आधार पर, हार्मोनिक हाई फ़्रीक्वेंसी और हार्मोनिक लो फ़्रीक्वेंसी का हिसाब लगाता है.
- यह फ़ंक्शन, 20 मेगाहर्ट्ज़ वाला पहला ऐसा वाई-फ़ाई चैनल ढूंढता है जो नीचे से आने वाली हार्मोनिक के निचले बाउंड के अंदर हो.
- यह कुकी, वाई-फ़ाई चैनल पर हार्मोनिक के ओवरलैप का हिसाब लगाती है. अगर ओवरलैप, 2.4 गीगाहर्ट्ज़ वाई-फ़ाई ओवरलैप थ्रेशोल्ड से ज़्यादा होता है, तो यह चैनल को असुरक्षित के तौर पर मार्क करती है.
- यह फ़ंक्शन, 20 मेगाहर्ट्ज़ वाला पहला ऐसा वाई-फ़ाई चैनल ढूंढता है जो ऊपर से आ रही हार्मोनिक के ऊपरी सीमा के अंदर हो.
- यह कुकी, वाई-फ़ाई चैनल पर हार्मोनिक के ओवरलैप का हिसाब लगाती है. अगर ओवरलैप, 2.4 गीगाहर्ट्ज़ वाई-फ़ाई ओवरलैप थ्रेशोल्ड से ज़्यादा होता है, तो यह चैनल को असुरक्षित के तौर पर मार्क करती है.
- इसके बीच के हर 20 मेगाहर्ट्ज़ चैनल को असुरक्षित चैनल के तौर पर मार्क करता है.
अगर पैरामीटर तय किए गए हैं, तो यह फ़ंक्शन हार्मोनिक से असुरक्षित 5 GHz चैनल ढूंढता है.
- यह फ़ंक्शन, 5 गीगाहर्ट्ज़ के लिए हार्मोनिक डिग्री N का पता लगाता है. अगर N की वैल्यू 0 है, तो सीधे पांचवें चरण पर जाएं.
- यह फ़ंक्शन, N और सेल अपलिंक के आधार पर, हार्मोनिक हाई फ़्रीक्वेंसी और हार्मोनिक लो फ़्रीक्वेंसी का हिसाब लगाता है.
यह 20 मेगाहर्ट्ज़ वाले ऐसे चैनल ढूंढता है जो सुरक्षित नहीं हैं.
- यह फ़ंक्शन, 20 मेगाहर्ट्ज़ वाला पहला ऐसा वाई-फ़ाई चैनल ढूंढता है जो नीचे से आ रही हार्मोनिक के लोअर बाउंड के अंदर हो.
- यह कुकी, वाई-फ़ाई चैनल पर हार्मोनिक के ओवरलैप का हिसाब लगाती है. अगर ओवरलैप, 2.4 गीगाहर्ट्ज़ वाई-फ़ाई ओवरलैप थ्रेशोल्ड से ज़्यादा होता है, तो यह चैनल को असुरक्षित के तौर पर मार्क करती है.
- यह फ़ंक्शन, 20 मेगाहर्ट्ज़ वाला पहला ऐसा वाई-फ़ाई चैनल ढूंढता है जो ऊपर से आ रही हार्मोनिक के ऊपरी सीमा के अंदर हो.
- यह कुकी, वाई-फ़ाई चैनल पर हार्मोनिक के ओवरलैप का हिसाब लगाती है. अगर ओवरलैप, 2.4 गीगाहर्ट्ज़ वाई-फ़ाई ओवरलैप थ्रेशोल्ड से ज़्यादा होता है, तो यह चैनल को असुरक्षित के तौर पर मार्क करती है.
- यह बीच के हर 20 मेगाहर्ट्ज़ चैनल को, तय की गई पावर कैप के साथ असुरक्षित चैनल के तौर पर मार्क करता है.
40 मेगाहर्ट्ज़, 80 मेगाहर्ट्ज़, और 160 मेगाहर्ट्ज़ के असुरक्षित चैनलों का पता लगाता है
- इसमें चरण 3a को दोहराया जाता है, लेकिन 40 मेगाहर्ट्ज़, 80 मेगाहर्ट्ज़, 160 मेगाहर्ट्ज़ के साथ.
- यह हार्मोनिक एज पर मौजूद चैनलों के ओवरलैप कैलकुलेट करने के बजाय, छोटे चैनलों के ओवरलैप का फिर से इस्तेमाल करता है. उदाहरण के लिए, अगर दो 20 मेगाहर्ट्ज़ चैनल मिलकर एक 40 मेगाहर्ट्ज़ चैनल बनाते हैं और उनके बीच 30% और 90% ओवरलैप होता है, तो 40 मेगाहर्ट्ज़ चैनल के लिए औसत ओवरलैप 60% होगा.
अगर पैरामीटर तय किए गए हैं, तो इंटरमॉड्यूलेशन से असुरक्षित 2.4 गीगाहर्ट्ज़ चैनल ढूंढता है.
- यह 2.4 GHz के लिए इंटरमॉड्यूलेशन कोएफ़िशिएंट N, M का पता लगाता है.
हर 2.4 GHz वाई-फ़ाई चैनल के लिए:
- यह फ़ंक्शन, N, M, सेल्युलर अपलिंक, और वाई-फ़ाई चैनल के आधार पर इंटरमॉड्यूलेशन की कम फ़्रीक्वेंसी और इंटरमॉड्यूलेशन की ज़्यादा फ़्रीक्वेंसी का हिसाब लगाता है.
- यह फ़ंक्शन, सेल के डाउनलिंक पर इंटरमॉड्यूलेशन के ओवरलैप का हिसाब लगाता है. अगर ओवरलैप, 2.4 GHz सेल ओवरलैप थ्रेशोल्ड से ज़्यादा होता है, तो चैनल को असुरक्षित के तौर पर मार्क करता है.
अगर पैरामीटर तय किए गए हैं, तो इंटरमॉड्यूलेशन से असुरक्षित 5 गीगाहर्ट्ज़ चैनल ढूंढता है.
- यह 5 GHz वाई-फ़ाई चैनलों और 5 GHz सेल ओवरलैप थ्रेशोल्ड का इस्तेमाल करके, चौथे चरण को दोहराता है.
यह टेबल एंट्री की पावर कैप को, असुरक्षित माने गए चैनलों पर लागू करता है.
आखिरी नतीजा
आस-पास के चैनलों और हार्मोनिक इंटरफ़ेरेंस से जुड़े असुरक्षित चैनलों के दोनों सेट का हिसाब लगाने के बाद, फ़ाइनल सेट का हिसाब लगाया जाता है. इसके लिए, दोनों सेट का यूनियन लिया जाता है. अगर टकराव होते हैं, तो कम पावर कैप चुना जाता है. साथ ही, अगर कोई ज़रूरी पाबंदी लागू नहीं होती है, तो सेट से डिफ़ॉल्ट चैनलों को हटा दिया जाता है.
एल्गोरिदम इस तरह काम करता है:
- अगर 2.4 गीगाहर्ट्ज़ के हर वाई-फ़ाई चैनल को असुरक्षित चैनल के तौर पर मार्क किया गया है, तो सेट से 2.4 गीगाहर्ट्ज़ के डिफ़ॉल्ट वाई-फ़ाई चैनल को हटा देता है.
- अगर 5 गीगाहर्ट्ज़ वाले सभी वाई-फ़ाई चैनल को असुरक्षित चैनल के तौर पर मार्क किया गया है, तो सेट से 5 गीगाहर्ट्ज़ वाले डिफ़ॉल्ट वाई-फ़ाई चैनल को हटा देता है.
- यह फ़ंक्शन, असुरक्षित चैनलों का फ़ाइनल सेट दिखाता है.
लुकअप टेबल का फ़ॉर्मैट
लुकअप टेबल को एक्सएमएल फ़ाइल में दिखाया जाता है. यह फ़ाइल, ओवरले की जा सकने वाली कॉन्फ़िगरेशन स्ट्रिंग config_wifiCoexTableFilepath
में मौजूद होती है. इसे यहां दिए गए XSD से तय किया जाता है.
<?xml version="1.0" encoding="UTF-8"?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
version="1.0">
<xsd:element name="table">
<xsd:complexType>
<xsd:sequence>
<xsd:element ref="entry" minOccurs="1" maxOccurs="unbounded"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
<xsd:element name="entry">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="rat" type="ratType"/>
<xsd:element name="band" type="xsd:int"/>
<xsd:element name="powerCapDbm" type="xsd:int" minOccurs="0"/>
<xsd:choice>
<xsd:element ref="params"/>
<xsd:element ref="override"/>
</xsd:choice>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
<xsd:simpleType name="ratType">
<xsd:restriction base="xsd:string">
<xsd:enumeration value="LTE"/>
<xsd:enumeration value="NR"/>
</xsd:restriction>
</xsd:simpleType>
<!-- Define coex algorithm parameters -->
<xsd:element name="params">
<xsd:complexType>
<xsd:sequence>
<xsd:element ref="neighborThresholds" minOccurs="0"/>
<xsd:element name="harmonicParams2g" type="harmonicParams" minOccurs="0"/>
<xsd:element name="harmonicParams5g" type="harmonicParams" minOccurs="0"/>
<xsd:element name="intermodParams2g" type="intermodParams" minOccurs="0"/>
<xsd:element name="intermodParams5g" type="intermodParams" minOccurs="0"/>
<xsd:element ref="defaultChannels" minOccurs="0"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
<xsd:element name="neighborThresholds">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="wifiVictimMhz" type="xsd:int" minOccurs="0"/>
<xsd:element name="cellVictimMhz" type="xsd:int" minOccurs="0"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
<xsd:complexType name="harmonicParams">
<xsd:sequence>
<xsd:element name="N" type="xsd:int"/>
<xsd:element name="overlap" type="xsd:int"/>
</xsd:sequence>
</xsd:complexType>
<xsd:complexType name="intermodParams">
<xsd:sequence>
<xsd:element name="N" type="xsd:int"/>
<xsd:element name="M" type="xsd:int"/>
<xsd:element name="overlap" type="xsd:int"/>
</xsd:sequence>
</xsd:complexType>
<xsd:element name="defaultChannels">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="default2g" type="xsd:int" minOccurs="0"/>
<xsd:element name="default5g" type="xsd:int" minOccurs="0"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
<!-- Define algorithm override lists -->
<xsd:element name="override">
<xsd:complexType>
<xsd:sequence>
<xsd:element ref="override2g" minOccurs="0"/>
<xsd:element ref="override5g" minOccurs="0"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
<xsd:element name="override2g">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="category" type="overrideCategory2g" minOccurs="0" maxOccurs="unbounded"/>
<xsd:element name="channel" type="xsd:int" minOccurs="0" maxOccurs="unbounded"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
<xsd:element name="override5g">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="category" type="overrideCategory5g" minOccurs="0" maxOccurs="unbounded"/>
<xsd:element name="channel" type="xsd:int" minOccurs="0" maxOccurs="unbounded"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
<xsd:simpleType name="overrideCategory2g">
<xsd:restriction base="xsd:string">
<xsd:enumeration value="all"/>
</xsd:restriction>
</xsd:simpleType>
<xsd:simpleType name="overrideCategory5g">
<xsd:restriction base="xsd:string">
<xsd:enumeration value="all"/>
<xsd:enumeration value="20Mhz"/>
<xsd:enumeration value="40Mhz"/>
<xsd:enumeration value="80Mhz"/>
<xsd:enumeration value="160Mhz"/>
</xsd:restriction>
</xsd:simpleType>
</xsd:schema>
एक्सएमएल टेबल का उदाहरण
यहां एक्सएमएल लुकअप टेबल का एक उदाहरण दिया गया है:
<table>
<!-- Entry using algorithm parameters -->
<entry>
<rat>LTE</rat>
<band>40</band>
<powerCapDbm>50</powerCapDbm>
<params>
<neighborThresholds>
<wifiVictimMhz>25</wifiVictimMhz>
<cellVictimMhz>40</cellVictimMhz>
</neighborThresholds>
<harmonicParams2g>
<N>3</N>
<overlap>50</overlap>
</harmonicParams2g>
<harmonicParams5g>
<N>3</N>
<overlap>50</overlap>
</harmonicParams5g>
<intermodParams2g>
<N>-2</N>
<M>1</M>
<overlap>75</overlap>
</intermodParams2g>
<intermodParams5g>
<N>-2</N>
<M>1</M>
<overlap>75</overlap>
</intermodParams5g>
<defaultChannels>
<default2g>6</default2g>
<default5g>36</default5g>
</defaultChannels>
</params>
</entry>
<!-- Entry using the override list -->
<entry>
<rat>LTE</rat>
<band>41</band>
<powerCapDbm>50</powerCapDbm>
<override>
<override2g>
<channel>6</channel>
<channel>11</channel>
...
</override2g>
<override5g>
<category>40Mhz</category>
<channel>34</channel>
...
</override5g>
</override>
</entry>
</table>
कैरियर एग्रीगेशन
कैरियर एग्रीगेशन (सीए) के लिए, हर अपलिंक या डाउनलिंक के लिए हार्मोनिक या इंटरमॉड्यूलेशन रेंज, अलग-अलग तौर पर इंटरफ़ेरेंस पैदा करने के लिए काफ़ी ओवरलैप नहीं कर सकती. हालांकि, एक साथ इस्तेमाल करने पर यह काफ़ी ओवरलैप कर सकती है. यह एल्गोरिदम, हर हार्मोनिक या इंटरमॉड्यूलेशन रेंज पर अलग-अलग विचार करता है. साथ ही, असुरक्षित चैनलों के यूनीयन को वापस लाता है. इंटरमॉड्यूलेशन के मामले में, इसका मतलब है कि हर यूएल की इंटरमॉड्यूलेशन रेंज का आकलन हर डीएल पर किया जाता है.
यह एल्गोरिदम, PCELL, PSCELL या SCELL के बीच कोई अंतर नहीं करता है और इन सभी को एक जैसा मानता है.
लाइसेंस के साथ ऐक्सेस की सुविधा
लाइसेंस असिस्टेड ऐक्सेस (एलएए) को बैंड #46 के तौर पर पहचाना जाता है. यह बैंड, अन्य बैंड की तरह ही काम करता है. इस मामले में, 5 गीगाहर्ट्ज़ वाले सभी चैनलों को लुकअप टेबल में ओवरराइड सूची के तौर पर सेट किया जा सकता है.
कैरियर की ज़रूरी शर्तों के आधार पर, चैनल से बचने का एल्गोरिदम, पूरे 5 गीगाहर्ट्ज़ वाई-फ़ाई बैंड के लिए SoftAP और Wi-Fi Direct (P2P) पर ज़रूरी पाबंदियां लगाता है. इस इस्तेमाल के उदाहरण को एल्गोरिदम से हैंडल कराने के लिए, carrier
config वैल्यू restrict_5g_softap_wifi_direct_for_laa
तय की जानी चाहिए. अगर सेल चैनल एलएए पर है और restrict_5g_softap_wifi_direct_for_laa
true
है, तो एल्गोरिदम, असुरक्षित चैनलों का सेट दिखाता है. इसमें पूरा 5 गीगाहर्ट्ज़ बैंड शामिल होता है. साथ ही, SoftAP और Wi-Fi Direct (P2P) के लिए, ज़रूरी पाबंदी वाले फ़्लैग सेट करता है.
वाई-फ़ाई सेवा के बारे में जानकारी देना
कोएक्स चैनल एल्गोरिदम के असुरक्षित चैनलों का हिसाब लगाने के बाद, अपने सिस्टम ऐप्लिकेशन को असुरक्षित चैनलों और उन पर लगी पाबंदियों की जानकारी देने के लिए, Android फ़्रेमवर्क में तय किए गए @SystemApi डेटा स्ट्रक्चर का इस्तेमाल करें.
public final class CoexUnsafeChannel {
public static final int POWER_CAP_NONE
public @WifiAnnotations.WifiBandBasic int getBand();
public int getChannel();
// Returns the specified power cap in dBm, or POWER_CAP_NONE if not specified.
public int getPowerCapDbm();
}
जब असुरक्षित चैनल बदलते हैं, तब ऐप्लिकेशन को अपडेट की गई वैल्यू पाने की सुविधा चालू करने के लिए, WifiManager
@SystemApi के इन तरीकों और कॉलबैक का इस्तेमाल करें.
public static final int COEX_RESTRICTION_WIFI_DIRECT;
public static final int COEX_RESTRICTION_SOFTAP;
public static final int COEX_RESTRICTION_WIFI_AWARE;
// Register a CoexCallback to listen on onCoexUnsafeChannelsChanged callbacks. The callback will be called whenever the unsafe channels change, as well as immediately after registering to get the current values.
public void registerCoexCallback(Executor executor, CoexCallback callback);
public void unregisterCoexCallback(CoexCallback callback);
public abstract static class CoexCallback {
//Gets called whenever getCoexUnsafeChannels()/getCoexRestrictions() have updated values
public void onCoexUnsafeChannelsChanged(List<CoexUnsafeChannels> unsafeChannels, int restrictions);
}
वाई-फ़ाई से जुड़ी कार्रवाई करना
जब वाई-फ़ाई सेवा को असुरक्षित चैनलों के सेट के बारे में जानकारी मिलती है, तो वह यह पक्का करने के लिए ज़रूरी कार्रवाई करती है कि उन चैनलों से बचा जाए. इस सेक्शन में, अलग-अलग स्थितियों में वाई-फ़ाई सेवा के काम करने के तरीके के बारे में बताया गया है.
ड्राइवर को इसकी सूचना दें
चैनल से बचने की सुविधा को चालू करने में ड्राइवर की अहम भूमिका होती है. इसलिए, ड्राइवर और फ़र्मवेयर को असुरक्षित चैनलों के बारे में बताना ज़रूरी है. इसके लिए, IWifiChip
HAL API का इस्तेमाल करें.
एआईडीएल के लिए:
void setCoexUnsafeChannels(in CoexUnsafeChannel[] unsafeChannels,
in int restrictions)
HIDL (1.5 या इसके बाद के वर्शन) के लिए:
setCoexUnsafeChannels(vec<CoexUnsafeChannel> unsafeChannels,
bitfield<IfaceType> restrictions);
SoftAP
SoftAP, असुरक्षित चैनल से बचने के लिए मुख्य तौर पर इस्तेमाल किया जाता है. यहां दिए गए सेक्शन में, SoftAp के मुख्य उदाहरणों के बारे में बताया गया है. इनमें ACS की मदद से, चैनल बदलने की सुविधा का इस्तेमाल किया जा सकता है. इन स्थितियों में, चैनल से बचने के लिए इस्तेमाल होने वाले एल्गोरिदम और ड्राइवर या फ़र्मवेयर के काम करने के तरीके के बारे में बताया गया है.
एसीएस की सुविधा चालू करके SoftAP शुरू करें (अभी तक कोई SoftAP चालू नहीं है)
अगर चैनल सुरक्षित नहीं हैं और SoftAP पर पाबंदी लगी है
- यह फ़्रेमवर्क, एसीएस की सूची से असुरक्षित चैनलों को हटा देता है.
- अगर सूची खाली है, तो फ़्रेमवर्क SoftAP को बंद कर देता है.
अगर चैनल असुरक्षित हैं और उन पर कोई पाबंदी नहीं है
- वेंडर ड्राइवर या फ़र्मवेयर, असुरक्षित चैनलों के बजाय सुरक्षित चैनलों को प्राथमिकता देता है.
सॉफ़्टएपी चालू है और एसीएस की सुविधा चालू है. साथ ही, असुरक्षित चैनलों को अपडेट किया गया है
अगर SoftAP चैनल सुरक्षित नहीं है और SoftAP पर पाबंदी लगी है
- फ़्रेमवर्क, असुरक्षित चैनलों को हटाकर, एसीएस सूची को अपडेट करता है.
- अगर सूची खाली है, तो फ़्रेमवर्क SoftAP को बंद कर देता है.
अगर SoftAP चैनल सुरक्षित नहीं है और कोई पाबंदी नहीं है
- फ़्रेमवर्क कोई कार्रवाई नहीं करता है. वेंडर ड्राइवर या फ़र्मवेयर, असुरक्षित चैनलों से बचने या ऐसा न होने पर पावर कैप लागू करने की सुविधा को मैनेज करता है.
Wi-Fi Direct (P2P)
अगर वाई-फ़ाई डायरेक्ट (P2P) की पाबंदियों वाले असुरक्षित चैनल मौजूद हैं.
- फ़्रेमवर्क, एचएएल तरीके
ISupplicantP2pIface::setDisallowedFrequencies()
का इस्तेमाल करके असुरक्षित चैनलों से बचने के लिएwpa_supplicant
का अनुरोध करता है.
- फ़्रेमवर्क, एचएएल तरीके
अगर बिना पाबंदी वाले असुरक्षित चैनल मौजूद हैं.
- अगर Wi-Fi Direct (P2P) की पाबंदी के बिना असुरक्षित चैनल का इस्तेमाल किया जाता है, तो वेंडर ड्राइवर या फ़र्मवेयर, पावर कैप लागू करता है.
Wi-Fi Aware (NAN)
यह फ़्रेमवर्क, Wi-Fi Aware (NAN) के लिए चैनल चुनने में शामिल नहीं होता है. साथ ही, कोई फ़्रेमवर्क कार्रवाई नहीं की जाती है. Wi-Fi Aware (NAN) चैनल से बचने के लिए, वेंडर ड्राइवर या फ़र्मवेयर ज़िम्मेदार होता है.
एल्गोरिदम बंद करना
अगर आपको डिफ़ॉल्ट एल्गोरिदम को लागू करने की सुविधा बंद करनी है और उन चैनलों की अपनी सूची पास करनी है जिन्हें आपको ब्लॉक करना है, तो ओवरले config_wifiDefaultCoexAlgorithmEnabled
को कॉन्फ़िगर करें. अगर ओवरले को 'गलत है' पर सेट किया जाता है, तो डिफ़ॉल्ट एल्गोरिदम बंद हो जाता है. इसके बाद, अपने मालिकाना हक वाले आउट-ऑफ़-बैंड एल्गोरिदम का इस्तेमाल करके, असुरक्षित चैनलों की सूची जनरेट की जा सकती है. इसके लिए, आपको यहां दिए गए सिस्टम एपीआई का इस्तेमाल करके फ़्रेमवर्क में प्लंब करना होगा.
public void setCoexUnsafeChannels(Set<CoexUnsafeChannel> coexUnsafeChannels,
int coexRestrictions);
लागू करने की पुष्टि करना
Wi-Fi/सेल्युलर कोएक्स चैनल से बचने की सुविधा को लागू करने की पुष्टि करने के लिए, इन टेस्ट का इस्तेमाल करें.
सीटीएस टेस्ट
WifiManagerTest.java
testCoexMethodsShouldFailNoPermission()
testListenOnCoexUnsafeChannels()
ACTS टेस्ट
WifiManagerTest.py
test_set_get_coex_unsafe_channels()
वीटीएस टेस्ट
अगर एआईडीएल लागू किया गया है, तो:
wifi_chip_aidl_test.cpp
TEST_P(WifiChipAidlTest, SetCoexUnsafeChannels)
अगर एचआईडीएल लागू किया गया है, तो:
wifi_chip_hidl_test.cpp
TEST_P(WifiChipHidlTest, setCoexUnsafeChannels)