Erlang 21 - 4. The MIB Compiler

4 MIB कंपाइलर




erlang

4 MIB कंपाइलर

अध्याय MIB कंपाइलर MIB कंपाइलर का वर्णन करता है और इसमें निम्नलिखित विषय होते हैं:

  • ऑपरेशन
  • आयात
  • MIBs के बीच संगति जाँच
  • .hrl फ़ाइल पीढ़ी
  • एकीकरण एकीकरण
  • मानक से विचलन
ध्यान दें

MIBs आयात करते समय, सुनिश्चित करें कि आयातित MIB और साथ ही साथ आयात MIB SNMP-compiler के समान संस्करण का उपयोग करके संकलित किए गए हैं।

4.1 ऑपरेशन

MIB को संकलित करने से पहले ASN.1 संकेतन का उपयोग करके SMIv1 या SMIv2 में एक पाठ फ़ाइल के रूप में लिखा जाना चाहिए। इस टेक्स्ट फ़ाइल का MIB जैसा ही नाम होना चाहिए, लेकिन प्रत्यय .mib । यह महत्वपूर्ण विवरण को संभालने के लिए आवश्यक है।

एसोसिएशन फ़ाइल, जिसमें MIB के लिए इंस्ट्रूमेंटेशन फ़ंक्शंस के नाम हैं, प्रत्यय होना चाहिए। यदि कंपाइलर को एसोसिएशन फ़ाइल नहीं मिलती है, तो यह एक चेतावनी संदेश देता है और डिफ़ॉल्ट इंस्ट्रूमेंटेशन फ़ंक्शन का उपयोग करता है। (अधिक जानकारी के लिए Default Instrumentation देखें)।

MIB कंपाइलर को snmpc:compile(<mibname>). कॉल करने के साथ शुरू किया जाता है snmpc:compile(<mibname>). उदाहरण के लिए:

snmpc:compile("RFC1213-MIB").

आउटपुट एक नई फ़ाइल है जिसे <mibname>.bin कहा जाता है।

MIB कंपाइलर SMIv1 और SMIv2 MIB दोनों को समझता है। यह निर्धारित करने के लिए MODULE- पहचान कथन का उपयोग करता है यदि MIB को SMI संस्करण 1 या 2 में लिखा गया है।

4.2 MIBs आयात करना

संकलक IMPORT विवरण संभालता है। संकलित फ़ाइल को आयात करना महत्वपूर्ण है न कि ASN.1 (स्रोत) फ़ाइल। आयात करने वाले अन्य MIB को दिखाई देने वाले परिवर्तनों को बनाने के लिए एक MIB को फिर से जोड़ा जाना चाहिए।

आयातित MIB की संकलित फ़ाइलें वर्तमान निर्देशिका या वर्तमान पथ में एक निर्देशिका में मौजूद होनी चाहिए। पथ को उदाहरण के लिए {i, Path} विकल्प के साथ दिया गया है:

snmpc:compile("MY-MIB", 
       [{i, ["friend_mibs/", "../standard_mibs/"]}]).

ओआईएल अनुप्रयोगों से एमआईबी को "include_lib" विकल्प के साथ फैशन "include_lib" जैसे "include_lib" में आयात करना भी संभव है। उदाहरण:

snmpc:compile("MY-MIB", 
       [{il, ["snmp/priv/mibs/", "myapp/priv/mibs/"]}]).

ओटीपी सिस्टम में myapp और myapp एप्लिकेशन के नवीनतम संस्करण को खोजता है और विस्तारित पथों का उपयोग करता है जैसे पथ शामिल हैं।

ध्यान दें कि एक SMIv2 MIB एक SMIv1 MIB आयात कर सकता है और इसके विपरीत।

निम्नलिखित MIBs Erlang SNMP संकलक के अंतर्निहित इन्स हैं: SNMPv2-SMI, RFC-1215, RFC-1212, SNMPv2-TC, SNMPv2-CONF और PFC1155-SMI। इसलिए उन्हें अलग से संकलित नहीं किया जा सकता है।

4.3 MIB संगति जाँच

जब कोई MIB संकलित किया जाता है, तो संकलक यह पता लगाता है कि कई प्रबंधित ऑब्जेक्ट एक ही OBJECT IDENTIFIER उपयोग करते हैं। यदि ऐसा है, तो यह एक त्रुटि संदेश जारी करता है। हालाँकि, कंपाइलर विभिन्न MIB के बीच Oid टकराव का पता नहीं लगा सकता है। इस प्रकार के संघर्ष लोड समय पर एक त्रुटि उत्पन्न करते हैं। इससे बचने के लिए, निम्न फ़ंक्शन का उपयोग MIBs के बीच स्थिरता जाँच करने के लिए किया जा सकता है:

erl>snmpc:is_consistent(ListOfMibNames).
    

ListOfMibNames संकलित ListOfMibNames की सूची है, उदाहरण के लिए ["RFC1213-MIB", "MY-MIB"] । फ़ंक्शन जाल परिभाषाओं की निरंतरता जाँच भी करता है।

4.4 .hrl फ़ाइल जनरेशन

एक .hrl फ़ाइल को .hrl संभव है जिसमें एक संकलित MIB फ़ाइल से Erlang स्थिरांक की परिभाषाएँ हैं। यह फ़ाइल तब एर्लांग स्रोत कोड में शामिल की जा सकती है। फ़ाइल में इसके लिए स्थिरांक होंगे:

  • टेबल, टेबल प्रविष्टियों और चर के लिए ऑब्जेक्ट पहचानकर्ता
  • कॉलम संख्या
  • संस्कारित मूल्य
  • चर और तालिका स्तंभों के लिए डिफ़ॉल्ट मान।

एक MIB से .hrl फ़ाइल बनाने के लिए निम्न आदेश का उपयोग करें:

erl>snmpc:mib_to_hrl(MibName).
    

4.5 Emacs एकीकरण

Emacs संपादक के साथ, next-error ( CX ` ) फ़ंक्शन का उपयोग इंगित किया जा सकता है जहां एक संकलन त्रुटि हुई, बशर्ते त्रुटि संदेश एक पंक्ति संख्या द्वारा वर्णित हो।

Emacs के अंदर से MIB Mx compile करने के लिए Mx compile का उपयोग करें, और दर्ज करें:

erl -s snmpc compile <MibName> -noshell
   

<MibName> का एक उदाहरण RFC1213-MIB

4.6 शेल या मेकफाइल से संकलन

erlc कमांड का उपयोग SNMP erlc को संकलित करने के लिए किया जा सकता है। उदाहरण:

erlc MY-MIB.mib
   

सभी मानक erlc झंडे समर्थित हैं, उदाहरण के लिए

erlc -I mymibs -o mymibs -W MY-MIB.mib
   

MIB संकलक के लिए विशिष्ट झंडे + वाक्य रचना का उपयोग करके निर्दिष्ट किया जा सकता है:

erlc +'{group_check,false}' MY-MIB.mib
   

4.7 मानक से विचलन

कुछ पहलुओं में Erlang MIB कंपाइलर SMI का पूरी तरह से पालन या कार्यान्वयन नहीं करता है। यहाँ अंतर हैं:

  • तालिकाएँ निम्न क्रम में लिखी जानी चाहिए: tableObject , entryObject , column1 , ..., columnN (क्रम में)।

  • पूर्णांक मान, उदाहरण के लिए SIZE अभिव्यक्ति को दशमलव सिंटैक्स में दर्ज किया जाना चाहिए, हेक्स या बिट सिंटैक्स में नहीं।

  • एक MIB के भीतर और एक सिस्टम के भीतर प्रतीकात्मक नाम अद्वितीय होने चाहिए।

  • SMIv2 (एक व्यावहारिक दृष्टिकोण) में हाइफ़न की अनुमति है। इसका कारण यह है कि SMIv2 के अनुसार, SMIv1 से परिवर्तित वस्तुओं के लिए हाइफ़न की अनुमति है, लेकिन दूसरों के लिए नहीं। संकलक के लिए जांचना असंभव है।

  • यदि कोई शब्द SMIv1 या SMIv2 में से किसी में एक कीवर्ड है, तो यह कंपाइलर में एक कीवर्ड है (केवल SMIv1 से विचलित होता है)।

  • एक तालिका में अनुक्रमित वस्तुएं होनी चाहिए, प्रकार नहीं (केवल SMIv1 से विचलन)।

  • प्रकारों पर सभी शब्दार्थ जांचों का एक सबसेट कार्यान्वित किया जाता है। उदाहरण के लिए, सख्ती से TimeTicks को उप-वर्गीकृत नहीं किया जा सकता है, लेकिन संकलक इसे अनुमति देता है (मानक MIBs को संकलक से गुजरना चाहिए) (केवल SMIv2 से विचलन)।

  • MIB.Object सिंटैक्स कार्यान्वित नहीं किया जाता है (चूंकि सभी ऑब्जेक्ट किसी भी तरह अद्वितीय होना चाहिए)।

  • दो अलग-अलग नाम समान OBJECT IDENTIFIER को परिभाषित नहीं कर सकते हैं।

  • SEQUENCE निर्माण में चेकिंग का प्रकार गैर-सख्त है (यानी उप-निर्दिष्ट निर्दिष्ट किया जा सकता है)। इसका कारण यह है कि कुछ मानक MIB इसका उपयोग करते हैं।

  • एक परिभाषा में सामान्य रूप से एक स्थिति फ़ील्ड होती है। जब स्थिति फ़ील्ड का मान घटाया जाता है, तो MIB- कंपाइलर इस परिभाषा को अनदेखा कर देगा। MIB- कंपाइलर विकल्प {deprecated,true} के साथ MIB- कंपाइलर पदावनत परिभाषाओं को अनदेखा नहीं करता है।
  • ऑब्जेक्ट में DESCRIPTIONS फ़ील्ड है। विवरण-फ़ील्ड को डिफ़ॉल्ट रूप से संकलित mib में शामिल नहीं किया जाएगा। विवरण प्राप्त करने के लिए, mib को विकल्प description साथ संकलित किया जाना चाहिए।