हैप्पी एंड वीव के साथ शुरुआत करना

1 परिचय

मुबारक नकली नेटवर्क स्थलाकृतिक विज्ञान के हल्के आर्केस्ट्रा के लिए घोंसला प्रयोगशालाओं द्वारा बनाई गई एक उपकरण है। IoT होम एरिया नेटवर्क के विकास और परीक्षण के लिए हैप्पी उपयोगी है।

हैप्पी के साथ, आप कर सकते हैं:

  • IoT डिवाइस हार्डवेयर का उपयोग किए बिना एकल Linux विकास मशीन पर नेटवर्क प्रोटोकॉल और अन्य वितरित निष्पादन प्रोग्राम का परीक्षण करें
  • एक नेटवर्क पर स्वचालित कार्यात्मक परीक्षण करें
  • परीक्षण थ्रूपुट में सुधार के लिए एक ही सिस्टम पर कई समवर्ती, समानांतर नेटवर्क चलाएं

इस Codelab में, आप यह जानेंगे खुश है, साथ ही की मूल बातें के साथ कैसे शुरुआत की जाए Weave IOT उपकरणों के लिए। Weave कार्यान्वयन आप इस्तेमाल करेंगे है OpenWeave , एक खुला स्रोत संस्करण नेस्ट द्वारा जारी।

f6996428fb06dede.png

आप क्या सीखेंगे

  • हैप्पी और ओपन वीव का निर्माण कैसे करें
  • मैन्युअल रूप से एक नकली IoT नेटवर्क कैसे बनाएं
  • कस्टम टोपोलॉजी को कैसे प्रबंधित करें
  • नकली हैप्पी नेटवर्क को इंटरनेट से कैसे कनेक्ट करें
  • बुनाई की मूल बातें

आपको किस चीज़ की ज़रूरत पड़ेगी

  • एक Linux मशीन, भौतिक या आभासी
  • गिट क्लाइंट या क्लि
  • पायथन 2.7
  • नेटवर्किंग और रूटिंग अवधारणाओं की एक बुनियादी समझ

2. आरंभ करें

टूलचेन और निर्भरताएँ स्थापित करें

हैप्पी एंड वीव बनाने के लिए, सुनिश्चित करें कि आपके पास एक समर्थित टूलचेन और सभी निर्भरताएँ स्थापित हैं।

$ sudo apt-get update
$ sudo apt-get install -y autotools-dev build-essential git lcov \
                           libdbus-1-dev libglib2.0-dev libssl-dev \
                           libudev-dev make python2.7 software-properties-common \
                           python-setuptools bridge-utils python-lockfile \
                           python-psutil
$ sudo apt-get install -y --force-yes gcc-arm-none-eabi
$ sudo apt-get update -qq

स्रोत कोड प्राप्त करें

कमांड लाइन से Happy and OpenWeave Git रिपॉजिटरी को क्लोन करें:

$ cd ~
$ git clone https://github.com/openweave/happy.git
$ git clone https://github.com/openweave/openweave-core.git

हैप्पी स्थापित करें

हैप्पी रूट डायरेक्टरी से, हैप्पी स्थापित करें:

$ cd ~/happy
$ make

हैप्पी इंस्टॉलेशन सत्यापित करें

हैप्पी कमांड अब कमांड लाइन से सुलभ होनी चाहिए:

$ happy-state
State Name:  happy

NETWORKS   Name         Type   State                                     Prefixes

NODES      Name    Interface    Type                                          IPs

OpenWeave स्थापित करें

OpenWeave रूट निर्देशिका से, OpenWeave स्थापित करें:

$ cd ~/openweave-core
$ make -f Makefile-Standalone

OpenWeave के साथ हैप्पी कॉन्फ़िगर करें

OpenWeave with Happy का उपयोग करने के लिए, आपको हैप्पी को यह बताना होगा कि वीव इंस्टॉलेशन कहां मिलेगा। अद्यतन करने के लिए पथ के साथ खुश विन्यास /src/test-apps अपने OpenWeave निर्माण के भीतर:

$ happy-configuration weave_path ~/openweave-core/build/x86_64-unknown-linux-gnu/src/test-apps

कॉन्फ़िगरेशन की पुष्टि करें:

$ happy-configuration
User Happy Configuration
        weave_path         ~/openweave-core/build/x86_64-unknown-linux-gnu/src/test-apps

OpenWeave स्थापना सत्यापित करें

इस कोडलैब में आवश्यक वेव कमांड कमांड लाइन से एक्सेस किए जा सकते हैं:

$ weave-fabric-add -h

    weave-fabric-add creates a weave fabric.

    weave-fabric-add [-h --help] [-q --quiet] [-i --id <FABRIC_ID>]

    Example:
    $ weave-fabric-add 123456
        Creates a Weave Fabric with id 123456

    return:
        0    success
        1    fail

आप त्रुटि मिलती है weave-fabric-add: command not found है, अपने को अद्यतन PATH मुबारक binaries के लिए इस्तेमाल किया पथ के साथ वातावरण चर:

$ export PATH=$PATH:~/openweave-core/src/test-apps/happy/bin

3. आपका पहला टोपोलॉजी

हैप्पी के साथ निम्नलिखित तीन-नोड टोपोलॉजी बनाते हैं।

a3295ee87fbd9764.png

यह टोपोलॉजी एक साधारण होम एरिया नेटवर्क (एचएएन) का एक उदाहरण है। इस एचएएन में, दो नोड्स एक थ्रेड नेटवर्क में एक साथ जुड़े हुए हैं, और उनमें से एक नोड वाई-फाई के माध्यम से तीसरे से जुड़ता है। पूरे एचएएन के लिए इंटरनेट कनेक्टिविटी प्रदान करने के लिए इस नोड को घर में वायरलेस राउटर से भी जोड़ा जा सकता है। इसके बारे में और बाद में।

सबसे पहले, तीन नोड बनाएं:

$ happy-node-add 01ThreadNode
$ happy-node-add 02BorderRouter
$ happy-node-add 03WiFiNode

आइए सुनिश्चित करें कि वे मौजूद हैं:

$ happy-node-list
01ThreadNode
02BorderRouter
03WiFiNode

अब कुछ नेटवर्क बनाते हैं:

$ happy-network-add ThreadNetwork thread
$ happy-network-add WiFiNetwork wifi

सत्यापित करें कि नेटवर्क मौजूद हैं:

$ happy-network-list
ThreadNetwork
WiFiNetwork

खुश राज्य की जाँच करें:

$ happy-state

State Name:  happy

NETWORKS   Name         Type   State                                     Prefixes
  ThreadNetwork       thread      UP
    WiFiNetwork         wifi      UP

NODES      Name    Interface    Type                                          IPs
   01ThreadNode
 02BorderRouter
     03WiFiNode

केवल एक नेटवर्क को ऊपर लाने के लिए पर्याप्त नहीं है - हमें नेटवर्क में नोड्स जोड़ना होगा। हमारे टोपोलॉजी आरेख के बाद, प्रत्येक नोड को उपयुक्त नेटवर्क में जोड़ें:

$ happy-node-join 01ThreadNode ThreadNetwork
$ happy-node-join 02BorderRouter ThreadNetwork
$ happy-node-join 02BorderRouter WiFiNetwork
$ happy-node-join 03WiFiNode WiFiNetwork

ध्यान दें कि 02BorderRouter दोनों को जोड़ा गया है ThreadNetwork और WiFiNetwork । ऐसा इसलिए है क्योंकि हमारे एचएएन के भीतर एक सीमा राउटर के रूप में, यह नोड दो अलग-अलग नेटवर्कों को एक साथ जोड़ता है।

हैप्पी स्टेट चेक करें। प्रत्येक नोड के इंटरफेस ऊपर हैं:

$ happy-state

State Name:  happy

NETWORKS   Name         Type   State                                     Prefixes
  ThreadNetwork       thread      UP
    WiFiNetwork         wifi      UP

NODES      Name    Interface    Type                                          IPs
   01ThreadNode        wpan0  thread
 02BorderRouter        wpan0  thread
                       wlan0    wifi
     03WiFiNode        wlan0    wifi

हमारी टोपोलॉजी अब इस तरह दिखती है:

2d054e6c4e54089c.png

हमारे हैप्पी नेटवर्क को लाने का अंतिम चरण प्रत्येक नोड पर प्रत्येक इंटरफ़ेस को आईपी पते निर्दिष्ट करना है। एक नेटवर्क के लिए आईपी उपसर्ग निर्दिष्ट करें, और हैप्पी स्वचालित रूप से आपके लिए आईपी पते निर्दिष्ट करता है।

चूंकि थ्रेड प्रोटोकॉल IPv6 का उपयोग करता है, इसलिए थ्रेड नेटवर्क में IPv6 उपसर्ग जोड़ें:

$ happy-network-address ThreadNetwork 2001:db8:1:2::

हैप्पी स्टेट चेक करें। प्रत्येक थ्रेड नोड पर थ्रेड इंटरफ़ेस में IP पते होते हैं:

$ happy-state

State Name:  happy

NETWORKS   Name         Type   State                                     Prefixes
  ThreadNetwork       thread      UP                       2001:0db8:0001:0002/64

    WiFiNetwork         wifi      UP

NODES      Name    Interface    Type                                          IPs
   01ThreadNode        wpan0  thread   2001:0db8:0001:0002:3e36:13ff:fe33:732e/64

 02BorderRouter        wpan0  thread   2001:0db8:0001:0002:a651:3eff:fe92:6dbc/64

                       wlan0    wifi
     03WiFiNode        wlan0    wifi

वाईफाई नेटवर्क के लिए, IPv4 और IPv6 दोनों उपसर्ग जोड़ें:

$ happy-network-address WiFiNetwork 2001:db8:a:b::
$ happy-network-address WiFiNetwork 10.0.1.0

एक बार फिर हैप्पी स्टेट चेक करें। सभी इंटरफेस ने प्रत्येक वाई-फाई इंटरफेस के लिए दो के साथ आईपी पते निर्दिष्ट किए हैं:

$ happy-state

State Name:  happy

NETWORKS   Name         Type   State                                     Prefixes
  ThreadNetwork       thread      UP                       2001:0db8:0001:0002/64

    WiFiNetwork         wifi      UP                       2001:0db8:000a:000b/64
                                                                        10.0.1/24


NODES      Name    Interface    Type                                          IPs
   01ThreadNode        wpan0  thread   2001:0db8:0001:0002:3e36:13ff:fe33:732e/64

 02BorderRouter        wpan0  thread   2001:0db8:0001:0002:a651:3eff:fe92:6dbc/64

                       wlan0    wifi                                  10.0.1.2/24
                                       2001:0db8:000a:000b:426c:38ff:fe90:01e6/64

     03WiFiNode        wlan0    wifi   2001:0db8:000a:000b:9aae:2bff:fe71:62fa/64
                                                                      10.0.1.3/24

यहाँ हमारी अद्यतन टोपोलॉजी है:

84eecd23871618ca.png

4. कनेक्टिविटी का परीक्षण करें

अब जब कि हमारे मुबारक नेटवर्क और चल रही है, चलो से अन्य नोड पिंग द्वारा अपने कनेक्टिविटी का परीक्षण करते हैं 01ThreadNode :

$ happy-ping 01ThreadNode 02BorderRouter
[Ping] ping from 01ThreadNode to 02BorderRouter on address
    10.0.1.2 -> 100% packet loss
[Ping] ping from 01ThreadNode to 02BorderRouter on address
    2001:0db8:0001:0002:a651:3eff:fe92:6dbc -> 0% packet loss
[Ping] ping from 01ThreadNode to 02BorderRouter on address
    2001:0db8:000a:000b:426c:38ff:fe90:01e6 -> 100% packet loss

$ happy-ping 01ThreadNode 03WiFiNode
[Ping] ping from 01ThreadNode to 03WiFiNode on address
    2001:0db8:000a:000b:9aae:2bff:fe71:62fa -> 100% packet loss
[Ping] ping from 01ThreadNode to 03WiFiNode on address
    10.0.1.3 -> 100% packet loss

happy-ping कमांड की कोशिश करता लक्ष्य नोड पर हर अंतरफलक के लिए हर आईपी पते पिंग करने। हम IPv4 पतों को अनदेखा कर सकते हैं क्योंकि थ्रेड केवल IPv6 का उपयोग करता है।

ध्यान दें कि केवल एक IPv6 पिंग सफल रहा था: पर एक 02BorderRouter के wpan0 इंटरफ़ेस है, जो केवल पता है 01ThreadNode सीधे तक पहुँच सकते हैं:

5447bcbdf7d539df.png

अन्य IPv6 पतों विफल हो गया क्योंकि अग्रेषण के बीच सक्षम नहीं किया गया wpan0 और wlan0 पर 02BorderRouter । इस प्रकार, 01ThreadNode पता नहीं है 03WiFiNode मौजूद है, या यह कैसे तक पहुँचने के लिए। हैप्पी ने नकली नेटवर्क लाया है, लेकिन नोड्स के बीच सभी रूटिंग और अग्रेषण को सक्षम नहीं किया है।

मार्ग जोड़ें

IPv6 ट्रैफ़िक को HAN में रूट करने के लिए, प्रत्येक नेटवर्क में प्रत्येक नोड के लिए दोनों दिशाओं में उचित मार्ग जोड़ें (ताकि पिंग जानता हो कि स्रोत नोड पर कैसे वापस जाना है)।

प्रत्येक नोड के लिए, आपको यह जानना होगा:

  • निकटतम नेटवर्क प्रवेश द्वार-इस मामले में, 02BorderRouter दोनों के लिए
  • लक्ष्य नेटवर्क—गेटवे के बाद कहां जाना है

हमारे तीन नोड नेटवर्क के लिए, जो हमें निम्नलिखित देता है:

स्रोत नेटवर्क से

नेटवर्क को लक्षित करने के लिए

गेटवे के माध्यम से

ThreadNetwork

WiFiNetwork

02BorderRouter wlan0 2001:db8:1:2::/64 prefix

WiFiNetwork

ThreadNetwork

02BorderRouter wpan0 2001:db8:a:b::/64 prefix

यह व्यक्तिगत के साथ प्रत्येक नोड के लिए किया जा सकता है happy-node-route है, लेकिन इसके साथ प्रत्येक नेटवर्क में सभी नोड्स के लिए यह करने के लिए आसान है happy-network-route

$ happy-network-route -a -i ThreadNetwork -t default -v 02BorderRouter -p 2001:db8:1:2::/64
$ happy-network-route -a -i WiFiNetwork -t default -v 02BorderRouter -p 2001:db8:a:b::/64

कमांड लाइन झंडे की एक विवरण के लिए, का उपयोग happy-network-route -h

happy-network-route आदेश भी आवश्यकतानुसार प्रत्येक नोड के लिए IPv4 और IPv6 अग्रेषण चालू करता है। यह ट्रैफ़िक को एक नोड के भीतर एक इंटरफ़ेस से दूसरे इंटरफ़ेस तक रूट करने की अनुमति देता है।

अब पिंग पुनः प्रयास करें:

$ happy-ping 01ThreadNode 02BorderRouter
[Ping] ping from 01ThreadNode to 02BorderRouter on address
    10.0.1.2 -> 100% packet loss
[Ping] ping from 01ThreadNode to 02BorderRouter on address
    2001:0db8:0001:0002:a651:3eff:fe92:6dbc -> 0% packet loss
[Ping] ping from 01ThreadNode to 02BorderRouter on address
    2001:0db8:000a:000b:426c:38ff:fe90:01e6 -> 0% packet loss

दोनों IPv6 पिंग काम करते हैं! पर अग्रेषित करने के साथ, यह जानता है तक पहुँचने के लिए कैसे wlan0 इंटरफ़ेस। IPv4 पिंग अभी भी विफल है, क्योंकि हमने केवल IPv6 मार्गों और अग्रेषण को कॉन्फ़िगर किया है (क्योंकि थ्रेड IPv4 पर नहीं चलता है)।

चूंकि हमने दोनों तरफ नेटवर्क रूट जोड़े हैं, आइए नेटवर्क पर पिंग करें:

$ happy-ping 01ThreadNode 03WiFiNode
[Ping] ping from 01ThreadNode to 03WiFiNode on address
    2001:0db8:000a:000b:9aae:2bff:fe71:62fa -> 0% packet loss
[Ping] ping from 01ThreadNode to 03WiFiNode on address
    10.0.1.3 -> 100% packet loss

IPv6 पिंग अपेक्षा के अनुरूप काम करता है। अब आपके पास पूरी तरह कार्यात्मक, नकली IPv6 HAN है।

5bb53be0280b3320.png

सब कुछ एक साथ जोड़ने का एक अधिक सुरक्षित और विश्वसनीय तरीका सक्षम करने के लिए, आइए HAN के ऊपर Weave जोड़ें।

5. बुनाई जोड़ें

वीव एक नेटवर्क एप्लिकेशन परत है जो नेस्ट उत्पादों के लिए सुरक्षित और विश्वसनीय संचार बैकबोन प्रदान करती है। हम Weave के ओपन-सोर्स संस्करण OpenWeave के साथ Weave कार्यक्षमता जोड़ सकते हैं।

बुनाई के कार्यान्वयन को "कपड़ा" कहा जाता है। वीव फैब्रिक एक ऐसा नेटवर्क है जिसमें सभी एचएएन नोड्स, नेस्ट सर्विस और एचएएन में भाग लेने वाले किसी भी मोबाइल डिवाइस शामिल हैं। यह एचएएन के शीर्ष पर बैठता है और विभिन्न अंतर्निहित नेटवर्क लिंक प्रौद्योगिकियों (उदाहरण के लिए, थ्रेड या वाई-फाई) में आसान रूटिंग को सक्षम बनाता है।

अपने हान के लिए Weave कपड़े बनाने का उपयोग कर, fab1 , कपड़ा आईडी के रूप में तो Weave के लिए सभी नोड्स कॉन्फ़िगर करें:

$ weave-fabric-add fab1
$ weave-node-configure

अब जब बुन कॉन्फ़िगर हो गया है, तो हैप्पी स्टेट की जाँच करें:

$ happy-state

State Name:  happy

NETWORKS   Name         Type   State                                     Prefixes
  ThreadNetwork       thread      UP                       2001:0db8:0001:0002/64

    WiFiNetwork         wifi      UP                       2001:0db8:000a:000b/64
                                                                        10.0.1/24


NODES      Name    Interface    Type                                          IPs
   01ThreadNode        wpan0  thread   2001:0db8:0001:0002:3e36:13ff:fe33:732e/64
                                       fd00:0000:fab1:0006:6bca:9502:eb69:11e7/64

 02BorderRouter        wpan0  thread   fd00:0000:fab1:0006:6a6a:f236:eb69:11e7/64
                                       2001:0db8:0001:0002:a651:3eff:fe92:6dbc/64

                       wlan0    wifi   fd00:0000:fab1:0001:6a6a:f236:eb69:11e7/64
                                                                      10.0.1.2/24
                                       2001:0db8:000a:000b:426c:38ff:fe90:01e6/64

     03WiFiNode        wlan0    wifi   2001:0db8:000a:000b:9aae:2bff:fe71:62fa/64
                                                                      10.0.1.3/24
                                       fd00:0000:fab1:0001:6b82:6e60:eb69:11e7/64

प्रत्येक नोड Weave कपड़े में जोड़ा गया है, और प्रत्येक इंटरफ़ेस एक नया IPv6 पता के साथ शुरू है fd00 । Weave कपड़े पर और अधिक जानकारी प्राप्त करने के लिए, का उपयोग weave-state आदेश:

$ weave-state

State Name: weave

NODES           Name       Weave Node Id    Pairing Code
        01ThreadNode    69ca9502eb6911e7          8ZJB5Q
      02BorderRouter    686af236eb6911e7          B5YV3P
          03WiFiNode    69826e60eb6911e7          L3VT3A

FABRIC     Fabric Id           Global Prefix
                fab1     fd00:0000:fab1::/48

यहाँ हमारी अद्यतन टोपोलॉजी है, जिसमें नीले रंग में बुनें मान हैं:

CE3fa9082408355b.png

कपड़ा बुनें

वीव एंड हैप्पी स्टेट्स में बहुत सी नई जानकारी है। से कपड़े के साथ आइए शुरू weave-state :

FABRIC     Fabric Id           Global Prefix
                fab1     fd00:0000:fab1::/48

बुनाई का उपयोग करता है की एक IPv6 उपसर्ग fd00::/48 प्रत्येक नोड के लिए। इस ब्लॉक के पतों को विशिष्ट स्थानीय पता कहा जाता है और इन्हें निजी नेटवर्क जैसे HAN के भीतर उपयोग के लिए निर्दिष्ट किया जाता है। इसे फैब्रिक आईडी के साथ मिलाकर ऊपर दिखाया गया वेव ग्लोबल प्रीफिक्स जेनरेट होता है।

बुनाई नोड्स

वेव फैब्रिक में प्रत्येक नोड को एक पेयरिंग कोड के साथ एक अद्वितीय नोड आईडी दी गई है:

NODES           Name       Weave Node Id    Pairing Code
        01ThreadNode    69ca9502eb6911e7          8ZJB5Q
      02BorderRouter    686af236eb6911e7          B5YV3P
          03WiFiNode    69826e60eb6911e7          L3VT3A

नोड आईडी विश्व स्तर पर वेव फैब्रिक में एक नोड की पहचान करता है। पेयरिंग प्रक्रिया के दौरान पेयरिंग कोड का उपयोग "जॉइनर क्रेडेंशियल" के रूप में किया जाता है, और आमतौर पर इसे उत्पाद के क्यूआर कोड के साथ प्रिंट किया जाएगा।

उदाहरण के लिए, यदि आप नेस्ट प्रोटेक्ट या नेस्ट कैम पर क्यूआर कोड देखते हैं, तो आपको एक 6-वर्ण वाली स्ट्रिंग दिखाई देगी, जिसे अक्सर एंट्री कुंजी कहा जाता है। यह वेव पेयरिंग कोड है।

e7c6fa3e24d61d1b.png

वेव फैब्रिक में प्रत्येक नोड और इंटरफेस के लिए वीव-विशिष्ट IPv6 पते बनाने के लिए ग्लोबल प्रीफिक्स, फैब्रिक आईडी और नोड आईडी के संयोजन का उपयोग करता है।

बुनाई के पते

नोट चार मुबारक टोपोलॉजी में नया IPv6 पतों देखते हैं कि, सभी के बारे में हमारी Weave वैश्विक उपसर्ग के साथ शुरू fd00:0000:fab1::/48

NODES      Name    Interface    Type                                          IPs
   01ThreadNode        wpan0  thread   2001:0db8:0001:0002:3e36:13ff:fe33:732e/64
                                       fd00:0000:fab1:0006:6bca:9502:eb69:11e7/64

 02BorderRouter        wpan0  thread   fd00:0000:fab1:0006:6a6a:f236:eb69:11e7/64
                                       2001:0db8:0001:0002:a651:3eff:fe92:6dbc/64

                       wlan0    wifi   fd00:0000:fab1:0001:6a6a:f236:eb69:11e7/64
                                                                      10.0.1.2/24
                                       2001:0db8:000a:000b:426c:38ff:fe90:01e6/64

     03WiFiNode        wlan0    wifi   2001:0db8:000a:000b:9aae:2bff:fe71:62fa/64
                                                                      10.0.1.3/24
                                       fd00:0000:fab1:0001:6b82:6e60:eb69:11e7/64

प्रत्येक नोड को निर्दिष्ट मानक IPv6 पतों के बजाय, वीव प्रोटोकॉल इन पतों का उपयोग वेव फैब्रिक में संचार करने के लिए करते हैं।

नेटवर्क गेटवे बुनें

थ्रेड नेटवर्क पर वेव नोड्स को यह जानने की जरूरत है कि उस नेटवर्क से कहां से बाहर निकलना है। एक वीव नेटवर्क गेटवे—आमतौर पर थ्रेड बॉर्डर राउटर पर—यह कार्यक्षमता प्रदान करता है।

हमारे नमूना टोपोलॉजी में, हम सीमा राउटर नोड को वीव नेटवर्क गेटवे के रूप में नामित करते हैं:

$ weave-network-gateway ThreadNetwork 02BorderRouter

यह आदेश Weave कपड़े सबनेट करने के लिए सभी थ्रेड नोड से एक मार्ग कहते हैं ( fd:0:fab1::/48 ) के माध्यम से BorderRouter नोड के थ्रेड इंटरफेस ( wpan0 ), कि थ्रेड नेटवर्क से परे किसी भी Weave नोड तक पहुँचने के लिए प्रत्येक थ्रेड नोड सक्षम बनाता है। इस के अनुरूप है happy-network-route आदेश जैसा कि हम पहले थे, लेकिन Weave कपड़े मार्गों के लिए विशिष्ट।

6. टोपोलॉजी रखरखाव

क्या हैप्पी इतना शक्तिशाली बनाता है कि यह एक नकली टोपोलॉजी के सभी सेटअप और टियरडाउन को आसानी से कैसे प्रबंधित करता है।

बाद में उपयोग के लिए अपनी हैप्पी टोपोलॉजी को सेव करें:

$ happy-state -s codelab.json

यह स्थानों अपनी जड़ में पूरी टोपोलॉजी के साथ एक JSON फ़ाइल ~/ फ़ोल्डर। JSON फ़ाइल अपने वर्तमान मुबारक राज्य, में पाया जाता है जो की एक प्रति है ~/.happy_state.json

एक बार सहेजे जाने के बाद, वर्तमान टोपोलॉजी हटाएं:

$ happy-state-delete

यह सभी नेटवर्क नामस्थान और संबंधित विन्यास में पाया हटाता ~/.happy-state.json फ़ाइल। चेक happy-state और weave-state एक खाली विन्यास पुष्टि करने के लिए:

$ happy-state

State Name:  happy

NETWORKS   Name         Type   State                                     Prefixes

NODES      Name    Interface    Type                                          IPs


$ weave-state

State Name: weave

NODES           Name       Weave Node Id    Pairing Code

FABRIC     Fabric Id           Global Prefix

सहेजे गए कॉन्फ़िगरेशन को पुनः लोड करने के लिए, दो आदेशों में से एक का उपयोग करें:

  • happy-state-load - Weave प्लगइन का समर्थन नहीं करता
  • weave-state-load - का समर्थन करता है Weave प्लगइन

इसलिए यदि आपके टोपोलॉजी Weave भी शामिल है, हमेशा उपयोग weave-state-load कमांड ताकि Weave कपड़े और संबद्ध विन्यास लागू किया जाता है।

सहेजे गए हैप्पी टोपोलॉजी को पुनः लोड करें:

$ weave-state-load codelab.json

सफल लोडिंग की पुष्टि करने के लिए सभी राज्यों की जाँच करें:

$ happy-state

State Name:  happy

NETWORKS   Name         Type   State                                     Prefixes
  ThreadNetwork       thread      UP                       2001:0db8:0001:0002/64

    WiFiNetwork         wifi      UP                       2001:0db8:000a:000b/64
                                                                        10.0.1/24


NODES      Name    Interface    Type                                          IPs
   01ThreadNode        wpan0  thread   2001:0db8:0001:0002:eef6:a0ff:feca:6697/64
                                       fd00:0000:fab1:0006:6bca:9502:eb69:11e7/64

 02BorderRouter        wpan0  thread   fd00:0000:fab1:0006:6a6a:f236:eb69:11e7/64
                                       2001:0db8:0001:0002:5e53:bbff:fe05:484b/64

                       wlan0    wifi   2001:0db8:000a:000b:2e61:fdff:fed9:4fbc/64
                                       fd00:0000:fab1:0001:6a6a:f236:eb69:11e7/64
                                                                      10.0.1.2/24

     03WiFiNode        wlan0    wifi   fd00:0000:fab1:0001:6b82:6e60:eb69:11e7/64
                                                                      10.0.1.3/24
                                       2001:0db8:000a:000b:5e8e:c9ff:fed2:bdd1/64


$ weave-state

State Name: weave

NODES           Name       Weave Node Id    Pairing Code
        01ThreadNode    69ca9502eb6911e7          8ZJB5Q
      02BorderRouter    686af236eb6911e7          B5YV3P
          03WiFiNode    69826e60eb6911e7          L3VT3A

FABRIC     Fabric Id           Global Prefix
                fab1     fd00:0000:fab1::/48

शेल-स्क्रिप्ट और JSON प्रारूप दोनों में, हैप्पी रिपॉजिटरी में कई पूर्व-निर्धारित टोपोलॉजी प्रदान की गई हैं। उन पर खोजें ~/happy/topologies

OpenWeave भी परीक्षण उद्देश्यों के लिए चुनिंदा पूर्व-परिभाषित हैप्पी टोपोलॉजी के साथ आता है। उन पर खोजें ~/openweave-core/src/test-apps/happy/topologies/standalone

7. यह कैसे काम करता है

हैप्पी जटिल टोपोलॉजी का अनुकरण करने के लिए लिनक्स नेटवर्क नेमस्पेस का उपयोग करता है। आमतौर पर, एक नेटवर्क कॉन्फ़िगरेशन पूरे Linux OS पर लागू होता है। नेटवर्क नेमस्पेस आपको नेटवर्क कॉन्फ़िगरेशन को विभाजित करने की अनुमति देता है ताकि प्रत्येक नेमस्पेस में इंटरफेस और रूटिंग टेबल का अपना सेट हो।

हैप्पी में प्रत्येक नोड और नेटवर्क एक नेटवर्क नेमस्पेस है, जबकि उनके बीच के लिंक नेटवर्क इंटरफेस हैं।

उदाहरण के लिए, हमारी टोपोलॉजी का उपयोग करना:

7d6654c2e4907f2a.png

आइए देखें कि हैप्पी ने इसके लिए कौन से नेमस्पेस बनाए हैं:

$ ip netns list
happy004
happy003
happy002
happy001
happy000

यदि आप इसे netns मुबारक राज्य JSON फ़ाइल की धारा, तुम क्या नोड्स और नेटवर्क प्रत्येक नाम स्थान मेल खाती है के लिए देख सकते हैं:

$ happy-state -j | grep "netns" -A 5
"netns": {
    "01ThreadNode": "000",
    "02BorderRouter": "001",
    "03WiFiNode": "002",
    "ThreadNetwork": "003",
    "WiFiNetwork": "004",

49cfdce6ff9dd745.png

रन-टाइम लॉग

नोड्स को जारी किए गए कमांड प्रत्येक नोड के नामस्थान के भीतर से निष्पादित मूल टर्मिनल कमांड हैं। इसे देखने का एक आसान तरीका हैप्पी रन-टाइम लॉग्स को सक्षम करना है।

दूसरी टर्मिनल विंडो खोलें और लॉग ऑन करें, वे इस विंडो पर लगातार चलेंगे:

$ happy-state -l

पहली विंडो पर वापस जाएँ और हैप्पी पिंग चलाएँ:

$ happy-ping 01ThreadNode 02BorderRouter

दूसरी टर्मिनल विंडो में नवीनतम लॉग प्रविष्टियों की जाँच करें। आपको लॉग में इस तरह की एक लाइन देखनी चाहिए:

DEBUG [Driver:CallCmd():416] Happy [happy]: > sudo ip netns exec happy000 ping6 -c 1 2001:0db8:0001:0002:5e53:bbff:fe05:484b

happy-ping चल मुबारक से आदेश ज्यादा कुछ नहीं है ping6 में आदेश happy000 नाम स्थान ( 01ThreadNode )।

एक नोड दर्ज करें

का प्रयोग करें happy-shell गैर मुबारक आदेशों को चलाने के लिए के रूप में यदि नोड्स (नेटवर्क नामस्थान) में से एक में लॉग इन किया:

$ happy-shell 01ThreadNode
root@01ThreadNode:#

सिम्युलेटेड डिवाइस प्रत्येक नेमस्पेस के भीतर चलाए जाते हैं, और उनके पास केवल हैप्पी के माध्यम से निर्दिष्ट नेटवर्क कॉन्फ़िगरेशन तक पहुंच होती है।

नोड के लिए इंटरफ़ेस कॉन्फ़िगरेशन की जाँच करें। यह आपके OS-व्यापी कॉन्फ़िगरेशन से भिन्न होगा और हैप्पी स्टेट में सूचीबद्ध चीज़ों को प्रतिबिंबित करना चाहिए:

root@01ThreadNode:# ifconfig
lo        Link encap:Local Loopback
          inet addr:127.0.0.1  Mask:255.0.0.0
          inet6 addr: ::1/128 Scope:Host
          UP LOOPBACK RUNNING  MTU:65536  Metric:1
          RX packets:1 errors:0 dropped:0 overruns:0 frame:0
          TX packets:1 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1
          RX bytes:152 (152.0 B)  TX bytes:152 (152.0 B)

wpan0     Link encap:Ethernet  HWaddr ec:f6:a0:ca:66:97
          inet6 addr: fd00:0:fab1:6:6bca:9502:eb69:11e7/64 Scope:Global
          inet6 addr: 2001:db8:1:2:eef6:a0ff:feca:6697/64 Scope:Global
          inet6 addr: fe80::eef6:a0ff:feca:6697/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:32 errors:0 dropped:0 overruns:0 frame:0
          TX packets:26 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:2832 (2.8 KB)  TX bytes:2348 (2.3 KB)

का प्रयोग करें exit नोड के नाम स्थान छोड़ने के लिए:

root@01ThreadNode:# exit

8. किसी सेवा से कनेक्ट करें

हैप्पी लिनक्स नेटवर्क नेमस्पेस का उपयोग कैसे करता है, इसकी समझ के साथ, अब आप महसूस कर सकते हैं कि नकली हैप्पी नेटवर्क को इंटरनेट से कनेक्ट करना और नकली नोड्स के भीतर से सार्वजनिक पते तक पहुंचना संभव है। यह आपके सिम्युलेटेड डिवाइस को वास्तविक सेवा (जैसे नेस्ट सर्विस ओवर वीव) से जोड़ने के लिए उपयोगी है।

वीव में सेवा एक क्लाउड-आधारित बुनियादी ढांचा है जो एचएएन नोड्स को डेटा मॉडल में जोड़ता है, रिमोट एक्सेस प्रदान करता है, और एक व्यापक पारिस्थितिकी तंत्र बनाने के लिए बुद्धिमान नियंत्रकों को लागू करता है।

सेवा को हैप्पी के साथ दो प्राथमिक तरीकों से दर्शाया जा सकता है:

  • अपने स्वयं के नेटवर्क नेमस्पेस (हैप्पी नोड) में एक नकली सेवा के रूप में
  • इंटरनेट पर वास्तविक क्लाउड सेवा के रूप में

पूर्व परिभाषित टोपोलोजी में प्रदान किया गया है ~/happy/topologies प्रत्येक सेवा परिदृश्य का एक उदाहरण के रूप में।

हैप्पी नोड पर नकली सेवा

किसी भी मौजूदा हैप्पी टोपोलॉजी को हटा दें:

$ happy-state-delete

के साथ एक खाली राज्य की पुष्टि happy-state और weave-state आदेशों।

एक्सेस प्वाइंट (एपी) और सर्विस नोड्स के साथ एक पूर्व-निर्धारित टोपोलॉजी लोड करें:

$ weave-state-load ~/happy/topologies/thread_wifi_ap_service.json

6d04cbfcc84038e2.png

टोपोलॉजी की पुष्टि करने के लिए हैप्पी एंड वीव स्टेट्स की जाँच करें। इस टोपोलॉजी में, onhub एपी, जबकि cloud नकली सेवा है। नोट दोनों एक से जुड़े हैं Internet प्रकार के नेटवर्क wan :

$ happy-state

State Name:  happy

NETWORKS   Name         Type   State                                     Prefixes
     HomeThread       thread      UP                       2001:0db8:0111:0001/64

       HomeWiFi         wifi      UP                       2001:0db8:0222:0002/64
                                                                        10.0.1/24

       Internet          wan      UP                               192.168.100/24


NODES      Name    Interface    Type                                          IPs
   BorderRouter        wpan0  thread   2001:0db8:0111:0001:f624:13ff:fe4a:6def/64
                                       fd00:0000:fab1:0006:1ab4:3000:0000:0005/64

                       wlan0    wifi                                  10.0.1.2/24
                                       fd00:0000:fab1:0001:1ab4:3000:0000:0005/64
                                       2001:0db8:0222:0002:9e31:97ff:fe73:29f0/64

     ThreadNode        wpan0  thread   2001:0db8:0111:0001:c237:fbff:fecc:b082/64
                                       fd00:0000:fab1:0006:1ab4:3000:0000:0009/64

          cloud         eth0     wan                             192.168.100.3/24

          onhub        wlan0    wifi                                  10.0.1.3/24
                                       2001:0db8:0222:0002:3266:20ff:fe98:6ee2/64

                        eth0     wan                             192.168.100.2/24


$ weave-state

State Name: weave

NODES           Name       Weave Node Id    Pairing Code
        BorderRouter    18B4300000000005          AAA123
          ThreadNode    18B4300000000009          AAA123

FABRIC     Fabric Id           Global Prefix
                fab1     fd00:0000:fab1::/48

बुनाई सुरंग

एक वेव टनल वेव फैब्रिक को एक सर्विस से जोड़ती है। यह एक सुरक्षित मार्ग है जो HAN और सेवा के बीच IPv6 UDP संदेशों को स्थानांतरित करता है। इस टोपोलॉजी में, BorderRouter नोड Weave नेटवर्क प्रवेश द्वार है, जो हान पर सुरंग समाप्ति बिंदु के रूप में कार्य करता है।

बुनाई सुरंग बनाएं:

$ weave-tunnel-start BorderRouter cloud

हैप्पी स्टेट को रीचेक करें। आप पर एक Weave IPv6 पता के साथ एक नई सुरंग इंटरफ़ेस देखना चाहिए cloud नोड:

NODES      Name    Interface    Type                                          IPs

          cloud service-tun0     tun   fd00:0000:fab1:0005:1ab4:3002:0000:0011/64

                        eth0     wan                             192.168.100.3/24

c5ffca09d7cd3208.png

अब आप वीव फैब्रिक पर नोड्स और सर्विस के वीव ग्लोबल प्रीफिक्स के बीच सफलतापूर्वक पिंग कर सकते हैं:

$ happy-ping ThreadNode cloud
[Ping] ping from ThreadNode to cloud on address
    fd00:0000:fab1:0005:1ab4:3002:0000:0011 -> 0% packet loss

इंटरनेट पर वास्तविक क्लाउड सेवा

किसी भी मौजूदा हैप्पी टोपोलॉजी को हटा दें:

$ happy-state-delete

के साथ एक खाली राज्य की पुष्टि happy-state और weave-state आदेशों।

एक्सेस प्वाइंट (एपी) नोड के साथ पूर्व-निर्धारित टोपोलॉजी लोड करें:

$ weave-state-load ~/happy/topologies/thread_wifi_ap_internet.json

c75127417ef3833a.png

इस टोपोलॉजी में, onhub एपी है। हैप्पी स्टेट चेक करें। यह बिना पिछले टोपोलॉजी के समान है, Internet नेटवर्क और cloud नोड:

$ happy-state

State Name:  happy

NETWORKS   Name         Type   State                                     Prefixes
     HomeThread       thread      UP                       2001:0db8:0111:0001/64

       HomeWiFi         wifi      UP                       2001:0db8:0222:0002/64
                                                                        10.0.1/24


NODES      Name    Interface    Type                                          IPs
   BorderRouter        wpan0  thread   2001:0db8:0111:0001:ca3f:71ff:fe53:1559/64
                                       fd00:0000:fab1:0006:1ab4:3000:0000:0006/64

                       wlan0    wifi   2001:0db8:0222:0002:32e7:dfff:fee2:107a/64
                                       fd00:0000:fab1:0001:1ab4:3000:0000:0006/64
                                                                      10.0.1.2/24

     ThreadNode        wpan0  thread   2001:0db8:0111:0001:c2fb:97ff:fe04:64bd/64
                                       fd00:0000:fab1:0006:1ab4:3000:0000:000a/64

          onhub        wlan0    wifi                                  10.0.1.3/24
                                       2001:0db8:0222:0002:3a3c:8dff:fe38:999b/64


$ weave-state

State Name: weave

NODES           Name       Weave Node Id    Pairing Code
        BorderRouter    18B4300000000006          AAA123
          ThreadNode    18B430000000000A          AAA123

FABRIC     Fabric Id           Global Prefix
                fab1     fd00:0000:fab1::/48

चूंकि प्रत्येक हैप्पी नोड एक नेटवर्क नेमस्पेस है, वे डिफ़ॉल्ट रूप से सार्वजनिक इंटरनेट से विभाजित होते हैं। हैप्पी नोड दर्ज करके और सार्वजनिक इंटरनेट पते को पिंग करके इसका परीक्षण करें। हम इस्तेमाल करेंगे 8.8.8.8 , google.com के IPv4 पतों में से एक।

$ happy-shell onhub
root@onhub:# ping -c2 8.8.8.8
connect: Network is unreachable

कनेक्ट करने के लिए onhub इंटरनेट नोड, यह लिनक्स ओएस स्तर के विन्यास पर कि इंटरफेस को पाट किया जाना चाहिए।

नोड से बाहर निकलें:

root@onhub:# exit

साथ अपने इंटरनेट कनेक्शन के लिए इंटरफ़ेस निर्धारित route आदेश:

$ route
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
default         192.168.1.0     0.0.0.0         UG    0      0        0 em1

खोजें default मार्ग। यह आपके Linux मशीन के लिए इंटरनेट कनेक्शन है। Iface कॉलम यह दर्शाता है जो इंटरफेस है कि कनेक्टिविटी के लिए इस्तेमाल किया जा रहा है। उपरोक्त उदाहरण में, यह है em1

का प्रयोग करें happy-internet , पुल स्थापित करने के लिए अपने डिफ़ॉल्ट मार्ग के लिए इंटरफ़ेस का उपयोग कर। के लिए --isp झंडा, संख्या अनुगामी बिना इंटरफ़ेस नाम का उपयोग करें। इस उदाहरण में, यह em । अपने डिफ़ॉल्ट इंटरफ़ेस है eth1 , --isp झंडा होगा eth

$ happy-internet --node onhub --interface em1 --isp em --seed 249

में नहीं दिखाई परिवर्तन नहीं होगा happy-state उत्पादन, लेकिन onhub नोड इंटरनेट कनेक्टिविटी होनी चाहिए। आइए नोड में वापस जाएं और जांचें:

$ happy-shell onhub
root@onhub:# ping -c2 8.8.8.8
PING 8.8.8.8 (8.8.8.8) 56(84) bytes of data.
64 bytes from 8.8.8.8: icmp_seq=1 ttl=56 time=1.81 ms
64 bytes from 8.8.8.8: icmp_seq=2 ttl=56 time=1.81 ms

--- 8.8.8.8 ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 1001ms
rtt min/avg/max/mdev = 1.814/1.816/1.819/0.042 ms

सफलता!

c4d411ab1734131.png

डीएनएस

हैप्पी नोड्स में अंतर्निहित DNS क्षमताएं नहीं होती हैं। यदि आप google.com को पिंग करने का प्रयास करते हैं, तो यह विफल हो जाता है:

root@onhub:# ping -c2 google.com
ping: unknown host google.com

सौभाग्य से, हैप्पी डीएनएस के लिए समर्थन प्रदान करता है। नोड से बाहर निकलें और अपने Linux मशीन के लिए DNS सर्वर खोजें। उपयुक्त डिफ़ॉल्ट इंटरफ़ेस का उपयोग करना सुनिश्चित करें:

root@onhub:# exit
$ nmcli dev list iface em1 | grep domain_name_servers
DHCP4.OPTION[13]:                       domain_name_servers = 172.16.255.1 172.16.255.153 172.16.255.53

के साथ इन DNS पतों का उपयोग करें happy-dns :

$ happy-dns 172.16.255.1 172.16.255.153 172.16.255.53

अब भीतर से google.com पिंग कोशिश onhub नोड:

$ happy-shell onhub
root@onhub:# ping -c2 google.com
PING google.com (64.233.191.113) 56(84) bytes of data.
64 bytes from ja-in-f113.1e100.net (64.233.191.113): icmp_seq=1 ttl=46 time=36.9 ms
64 bytes from ja-in-f113.1e100.net (64.233.191.113): icmp_seq=2 ttl=46 time=37.0 ms

--- google.com ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 1001ms
rtt min/avg/max/mdev = 36.978/36.995/37.013/0.193 ms

बाहर निकलें onhub नोड आपका काम पूरा हो:

root@onhub:# exit

बुनाई सुरंग

सिम्युलेटेड सर्विस की तरह, हैप्पी में सिम्युलेटेड HAN और सर्विस के बीच एक वीव टनल स्थापित की जानी चाहिए। वास्तविक क्लाउड सेवा के साथ, सुरंग सेटअप में सेवा के आईपी पते या यूआरएल का उपयोग करें। उदाहरण के लिए:

$ weave-tunnel-start BorderRouter mycloud.service.com

3ed2c3c0df67f4d2.png

9. सफाई

अपने Linux नेटवर्क कॉन्फ़िगरेशन के साथ समस्याओं से बचने के लिए, जब आप उनके साथ काम कर रहे हों, तो हैप्पी टोपोलॉजी को हमेशा साफ़ करना महत्वपूर्ण है।

आप अपने टोपोलॉजी में डीएनएस समर्थन सक्षम हैं, तो इसके साथ कि आदेश का पुनर्प्रसारण से हटाने -d (नष्ट) झंडा पहले। यह सुनिश्चित करने के लिए कि नेटवर्क कॉन्फ़िगरेशन ठीक से अपडेट किया गया है, किसी भी हैप्पी नोड्स को हटाने से पहले इसे चलाया जाना चाहिए।

$ happy-dns -d 172.16.255.1 172.16.255.153 172.16.255.53

इसके बाद, हैप्पी स्टेट को डिलीट करें:

$ happy-state-delete

कभी-कभी, कुछ राज्य फ़ाइलें किसी राज्य को हटाने के बाद भी रह सकती हैं। यदि आपको समस्याएं आ और मुबारक के रूप में की उम्मीद नहीं काम कर रहा है, के साथ राज्य को नष्ट happy-state-delete और उसके बाद निम्न आदेश का उपयोग किसी भी शेष साफ अप के लिए मजबूर करने:

$ ip netns | xargs -I {} sudo ip netns delete {}
$ rm -rf ~/.*state.json
$ rm -rf ~/.*state.json.lock

आपकी मशीन अपने सामान्य नेटवर्क कॉन्फ़िगरेशन पर वापस आ जानी चाहिए।

10. बधाई!

अब आप जानते हैं:

  • अपने स्वयं के IoT होम एरिया नेटवर्क का अनुकरण करने के लिए हैप्पी का उपयोग कैसे करें
  • हैप्पी टोपोलॉजीज को इंटरनेट से कैसे कनेक्ट करें
  • OpenWeave के माध्यम से Weave की मूल बातें, Nest का Weave . का ओपन-सोर्स संस्करण

अगला कदम

इस कोडलैब का निर्माण, निम्नलिखित अभ्यासों का प्रयास करें:

  • प्रत्येक थ्रेड और वाई-फाई नेटवर्क में एकाधिक नोड्स के साथ एक बड़ा टोपोलॉजी बनाएं, और सभी नोड्स के बीच कनेक्टिविटी स्थापित करें
  • के माध्यम से टोपोलॉजी लोड करने के लिए एक पार्टी स्क्रिप्ट बनाएं happy-state-load या weave-state-load
  • जैसे अन्य मुबारक आदेश, अन्वेषण happy-traceroute और happy-process-*

आगे की पढाई

चेक openweave.io संदर्भ, सहित की एक किस्म के लिए:

f6996428fb06dede.png