.TH MIB2C.CONF 5 "28 Apr 2004" VVERSIONINFO "Net-SNMP" .SH "نام (NAME)" mib2c.conf \- چگونگی نوشتن پرونده‌های mib2c.conf برای انجام هر کاری بر پایه ورودی‌های MIB. .SH "خلاصه دستور (SYNOPSIS)" % cat > mib2c.test.conf << EOF @foreach $t table@ Starting table $t @foreach $c column@ echo $t has column $c which has a syntax of $c.syntax @end@ @end@ EOF % mib2c \-c mib2c.test.conf internet .SH "توضیحات (DESCRIPTION)" زبان اسکریپت‌نویسی mib2c.conf زبانی مختص MIB است که برای پردازش آسان گره‌های MIB به شیوه‌های دلخواه شما طراحی شده است. نام mib2c (به دلایل تاریخی) تا حدی گمراه‌کننده است، چرا که می‌توانید هر چیزی (نه فقط کدهای C) با آن تولید کنید. به دایرکتوری "local" در Net-SNMP برای مجموعه‌ای از پرونده‌های نمونه mib2c.*.conf نگاهی بیندازید تا از قدرت آن شگفت‌زده شوید. .SH "دستورها (COMMANDS)" .PP تمام دستورها در پرونده‌های mib2c.conf بین علامت‌های @ قرار می‌گیرند. هر خطی که در ابتدا و انتهای آن علامت @ وجود داشته باشد، عموماً به عنوان یک دستور اختصاصی mib2c در نظر گرفته می‌شود. جزئیات این دستورها در زیر آمده است: .IP "@open FILE@" خروجی تولید شده را در FILE می‌نویسد. توجه داشته باشید که در مشخصات پرونده، باز کردن '-' در خروجی استاندارد (stdout) چاپ خواهد شد. .IP "@append FILE@" به انتهای FILE داده‌شده می‌افزاید. .IP "@close FILE@" پرونده FILE داده‌شده را می‌بندد. .IP "@push@" خروجی‌های فعلی را ذخیره کرده و سپس خروجی‌ها را پاک می‌کند. همراه با @open@ و @pop@ برای نوشتن در یک پرونده جدید بدون تداخل با خروجی‌های جاری استفاده می‌شود. .IP "@pop@" پشته فراخوانی ()process را یک سطح بالا می‌برد. پس از یک @push@ برای بازگشت به مجموعه پرونده‌های باز پیشین استفاده می‌شود. .IP "@foreach $VAR scalar@" کد را تا @end@ تکرار می‌کند و $VAR را برابر با تمام اسکالرهای شناخته‌شده قرار می‌دهد. .IP "@foreach $VAR table@" کد را تا @end@ تکرار می‌کند و $VAR را برابر با تمام جدول‌های شناخته‌شده قرار می‌دهد. .IP "@foreach $VAR column@" کد را تا @end@ تکرار می‌کند و $VAR را برابر با تمام ستون‌های شناخته‌شده درون یک جدول معین قرار می‌دهد. بدیهی است که این دستور باید در درون یک عبارت foreach-table فراخوانی شود. .IP "@foreach $VAR nonindex@" کد را تا @end@ تکرار می‌کند و $VAR را برابر با تمام ستون‌های غیر-اندیسِ شناخته‌شده درون یک جدول معین قرار می‌دهد. بدیهی است که این دستور باید درون یک عبارت foreach-table فراخوانی شود. .IP "@foreach $VAR internalindex@" کد را تا @end@ تکرار می‌کند و $VAR را برابر با تمام ستون‌های اندیس داخلیِ شناخته‌شده درون یک جدول معین قرار می‌دهد. بدیهی است که این دستور باید درون یک عبارت foreach-table فراخوانی شود. .IP "@foreach $VAR externalindex@" کد را تا @end@ تکرار می‌کند و $VAR را برابر با تمام ستون‌های اندیس خارجیِ شناخته‌شده درون یک جدول معین قرار می‌دهد. بدیهی است که این دستور باید درون یک عبارت foreach-table فراخوانی شود. .IP "@foreach $VAR index@" کد را تا @end@ تکرار می‌کند و $VAR را برابر با تمام اندیس‌های شناخته‌شده درون یک جدول معین قرار می‌دهد. بدیهی است که این دستور باید درون یک عبارت foreach-table فراخوانی شود. .IP "@foreach $VAR notifications@" کد را تا @end@ تکرار می‌کند و $VAR را برابر با تمام اعلان‌های (notifications) شناخته‌شده قرار می‌دهد. .IP "@foreach $VAR varbinds@" کد را تا @end@ تکرار می‌کند و $VAR را برابر با تمام varbindهای شناخته‌شده قرار می‌دهد. بدیهی است که این دستور باید درون یک عبارت foreach-notifications فراخوانی شود. .IP "@foreach $LABEL, $VALUE enum@" کد را تا @end@ تکرار می‌کند و $LABEL و $VALUE را برابر با برچسب و مقادیر برگرفته از فهرست enum قرار می‌دهد. .IP "@foreach $RANGE_START, $RANGE_END range NODE@" کد را تا @end@ تکرار می‌کند و $RANGE_START و $RANGE_END را برابر با محدوده مجاز پذیرفته‌شده برای یک گره MIB داده‌شده (NODE) قرار می‌دهد. .IP "@foreach $var stuff a b c d@" روی مقادیر a، b، c و d به صورت عمومی پیمایش می‌کند (یعنی مقادیر مستقیماً از فهرست بدون گسترش mib و غیره گرفته می‌شوند). .IP "@while expression@" تا زمانی که عبارت (expression) نادرست (false) شود، کد را تکرار می‌کند. .IP "@eval $VAR = expression@" عبارت expression را ارزیابی کرده و نتیجه را به $VAR اختصاص می‌دهد. این یک eval کامل در perl نیست، بلکه نوعی "شبه-ارزیابی" (pseudo eval) مفید برای عبارت‌های ساده ضمن حفظ فضای نام متغیر یکسان است. برای برون‌ریزی کامل به perl موارد زیر را ببینید. .IP "@perleval STUFF@" عبارت STUFF را مستقیماً در perl ارزیابی می‌کند. توجه داشته باشید که تمام متغیرهای mib2c که در پرونده‌های .conf تفسیر می‌شوند در {vars{NAME$ قرار دارند و اگر STUFF مقدار 0 را برنگرداند، یک هشدار چاپ خواهد شد (افزودن عبارت 'return 0;' در انتهای STUFF یک راه حل است). .IP "@startperl@" .IP "@endperl@" همه چیز بین این برچسب‌ها را به عنوان کد perl در نظر گرفته و آن را ارزیابی می‌کند. .IP "@next@" راه‌اندازی مجدد foreach؛ فقط باید در داخل یک شرط استفاده شود. از شرط فعلی خارج شده و به پرش تا انتهای عبارت foreach جاری ادامه می‌دهد. .IP "@if expression@" عبارت expression را ارزیابی می‌کند و در صورت درست بودن (true)، بخش درون آن را تا رسیدن به @end@ مناسب پردازش می‌کند. اگر عبارت نادرست باشد، عبارت @elsif expression@ بعدی (در صورت وجود) ارزیابی خواهد شد تا زمانی که یک عبارت درست شود. اگر چنین عبارتی وجود نداشته باشد و بند @else@ یافت شود، آن ارزیابی خواهد شد. .IP "@ifconf file@" اگر پرونده مشخص‌شده در مسیر جستجوی پرونده‌های conf یافت شود، بخش درون آن را تا رسیدن به یک @end@ مناسب پردازش می‌کند. همانند @if expression@ معمولی، می‌توان از @elsif expression@ و @else@ نیز استفاده کرد. .IP "@ifdir dir@" اگر دایرکتوری مشخص‌شده وجود داشته باشد، بخش درون آن را تا رسیدن به یک @end@ مناسب پردازش می‌کند. همانند @if expression@ معمولی، می‌توان از @elsif expression@ و @else@ نیز استفاده کرد. .IP "@define NAME@" .IP "@enddefine@" موارد بین برچسب‌های define و enddefine را به خاطر می‌سپارد تا بعداً با @calldefine NAME@ با نام NAME فراخوانی شوند. .IP "@calldefine NAME@" مواردی را که قبلاً به عنوان NAME به خاطر سپرده شده بودند، اجرا می‌کند. .IP "@printf ""expression"" stuff1, stuff2, ...@" مانند تمام دستورهای printf دیگر که می‌شناسید و دوست دارید. .IP "@run FILE@" محتویات FILE را به عنوان یک پرونده mib2c اجرا (source) می‌کند، اما پرونده‌های باز جاری را تحت تأثیر قرار نمی‌دهد. .IP "@include FILE@" محتویات FILE را به عنوان یک پرونده mib2c اجرا کرده و خروجی آن را به خروجی جاری اضافه می‌کند. .IP "@prompt $var QUESTION@" پرسش QUESTION را به کاربر نمایش می‌دهد، منتظر پاسخ می‌ماند و آن را در var$ قرار می‌دهد. .IP "@print STUFF@" مطالب را مستقیماً روی صفحه نمایش کاربر چاپ می‌کند (یعنی نه در جایی که خروجی عادی mib2c ارسال می‌شود). .IP "@quit@" خروج (بی‌صدا). .IP "@exit@" خروج فوری! .SH "متغیرها (VARIABLES)" .PP متغیرها در زبان mib2c بسیار شبیه به متغیرهای perl هستند، به این صورت که با "$" شروع می‌شوند. آن‌ها را می‌توان برای هر کاری که می‌خواهید استفاده کرد، اما معمولاً نام گره‌های MIB را که توسط عبارت‌های @foreach ...@ پردازش می‌شوند نگه می‌دارند. .PP همچنین هنگامی که آن‌ها یک گره MIB هستند دارای یک ویژگی خاص می‌باشند، به طوری که افزودن پسوندهای خاص به آن‌ها اجازه می‌دهد به شیوه‌های مختلف تفسیر شوند. ساده‌ترین راه برای درک این موضوع از طریق یک مثال است. اگر متغیر 'x' شامل کلمه 'ifType' باشد، چند اتفاق شگفت‌انگیز رخ می‌دهد. در خروجی mib2c، هر زمان که x$ دیده شود، با "ifType" جایگزین می‌شود. با این حال، می‌توان از پسوندهای اضافی برای به دست آوردن جنبه‌های دیگر آن گره MIB استفاده کرد. اگر x.objectID$ دیده شود، با OID مربوط به ifType جایگزین خواهد شد: ".1.3.6.1.2.1.2.2.1.3". سایر پسوندهایی که می‌توانند پس از یک نقطه بیایند در زیر فهرست شده‌اند. .PP یک نکته نهایی: می‌توانید از مواردی مانند vartext$ که بلافاصله به متن دیگری ختم می‌شوند استفاده کنید؛ می‌توانید از {} برای گسترش مناسب تنها بخشی از ورودی mib2c استفاده کنید. یعنی xtext$ مقدار "xtext$" را تولید می‌کند، اما {x}text$ به جای آن "ifTypetext" را تولید خواهد کرد. .IP "$var.uc" نسخه تمام حروف بزرگ var$ .IP "$var.objectID" شناسه OID عددی، نقطه‌دار و کاملاً واجد شرایط (fully-qualified) .IP "$var.commaoid" شناسه OID عددی جدا شده با کاما برای مقداردهی اولیه آرایه .IP "$var.oidlength" طول oid .IP "$var.subid" آخرین بخش عددی oid .IP "$var.module" نام MIB که شیء از آن می‌آید .IP "$var.parent" حاوی برچسب گره والد var$ .IP "$var.isscalar" اگر var حاوی نام یک اسکالر باشد مقدار 1 را برمی‌گرداند .IP "$var.iscolumn" اگر var حاوی نام یک ستون باشد مقدار 1 را برمی‌گرداند .IP "$var.children" اگر var دارای فرزند باشد مقدار 1 را برمی‌گرداند .IP "$var.perltype" ساختار نحو (SYNTAX) شیء در perl ($SNMP::MIB{node}{'syntax'}) .IP "$var.type" نوع ASN_XXX گره (تعریف اختصاصی Net-SNMP به صورت define#) .IP "$var.decl" نوع داده در C (مانند char، u_long، ...) .IP "$var.readable" 1 اگر شیء خواندنی باشد، در غیر این صورت 0 .IP "$var.settable" 1 اگر شیء قابل نوشتن باشد، در غیر این صورت 0 .IP "$var.creatable" 1 اگر شیء ستونی بتواند به عنوان بخشی از یک سطر جدید ایجاد شود، در غیر این صورت 0 .IP "$var.noaccess" 1 اگر غیرقابل دسترسی باشد، در غیر این صورت 0 .IP "$var.accessible" 1 اگر قابل دسترسی باشد، در غیر این صورت 0 .IP "$var.storagetype" 1 اگر شیء از نوع StorageType باشد، در غیر این صورت 0 .IP "$var.rowstatus" 1 اگر شیء از نوع RowStatus باشد، در غیر این صورت 0 \&'settable'، 'creatable'، 'lastchange'، 'storagetype' و 'rowstatus' را می‌توان با متغیرهای جدول نیز استفاده کرد تا مشخص شود که آیا حاوی اشیاء ستونی قابل نوشتن، قابل ایجاد، LastChange، StorageType یا RowStatus هستند یا خیر. .IP "$var.hasdefval" اگر var دارای یک بند DEFVAL باشد مقدار 1 را برمی‌گرداند .IP "$var.defval" مقدار DEFVAL گره .IP "$var.hashint" اگر var دارای یک بند HINT باشد مقدار 1 را برمی‌گرداند .IP "$var.hint" مقدار HINT گره .IP "$var.ranges" اگر var دارای محدوده مقادیر تعریف‌شده باشد مقدار 1 را برمی‌گرداند .IP "$var.enums" اگر var دارای enums تعریف‌شده باشد مقدار 1 را برمی‌گرداند .IP "$var.access" نوع دسترسی گره .IP "$var.status" وضعیت (status) گره .IP "$var.syntax" ساختار نحو (syntax) گره .IP "$var.reference" ارجاع (reference) گره .IP "$var.description" توضیحات (description) گره .SH "همچنین ببینید (SEE ALSO)" .PP mib2c(1)