'\" t .\" Title: libnftables-json .\" Author: Phil Sutter .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: 09/01/2026 .\" Manual: \ \& .\" Source: \ \& .\" Language: Persian .\" .TH "LIBNFTABLES\-JSON" "5" "09/01/2026" "\ \&" "\ \&" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "نام (NAME)" libnftables-json \- رابط ساختاریافته JSON برای مدیریت قوانین فایروال nftables .SH "خلاصه دستور (SYNOPSIS)" .sp \fB{ "nftables": [\fR \fIOBJECTS\fR \fB] }\fR .sp \fIOBJECTS\fR := \fILIST_OBJECTS\fR | \fICMD_OBJECTS\fR .sp \fILIST_OBJECTS\fR := \fILIST_OBJECT\fR [ \fB,\fR \fILIST_OBJECTS\fR ] .sp \fICMD_OBJECTS\fR := \fICMD_OBJECT\fR [ \fB,\fR \fICMD_OBJECTS\fR ] .sp \fICMD_OBJECT\fR := \fB{\fR \fICMD\fR\fB:\fR \fILIST_OBJECT\fR \fB}\fR | \fIMETAINFO_OBJECT\fR .sp \fICMD\fR := \fB"add"\fR | \fB"replace"\fR | \fB"create"\fR | \fB"insert"\fR | \fB"delete"\fR | \fB"list"\fR | \fB"reset"\fR | \fB"flush"\fR | \fB"rename"\fR .sp \fILIST_OBJECT\fR := \fITABLE\fR | \fICHAIN\fR | \fIRULE\fR | \fISET\fR | \fIMAP\fR | \fIELEMENT\fR | \fIFLOWTABLE\fR | \fICOUNTER\fR | \fIQUOTA\fR | \fICT_HELPER\fR | \fILIMIT\fR | \fIMETAINFO_OBJECT\fR | \fICT_TIMEOUT\fR | \fICT_EXPECTATION\fR .SH "توضیحات (DESCRIPTION)" .sp کتابخانه libnftables از ورودی و خروجی در قالب JSON پشتیبانی می‌کند\&. این قابلیت به عنوان یک پیشانه (frontend) جایگزین برای تجزیه‌کننده نحو استاندارد CLI پیاده‌سازی شده است، بنابراین رفتار پایه‌ای کاملاً یکسان بوده و تقریباً برای هر عملیاتی که در نحو استاندارد در دسترس است، یک معادل در نحو JSON وجود دارد\&. .sp ورودی JSON می‌تواند در قالب یک رشته تکی به عنوان پارامتر به تابع \fBnft_run_cmd_from_buffer()\fR داده شود یا در فایلی قرار گیرد که با پارامتر \fIfilename\fR در تابع \fBnft_run_cmd_from_filename()\fR مشخص می‌شود\&. .sp خروجی JSON باید از طریق تابع \fBnft_ctx_output_set_json()\fR فعال شود که خروجی استاندارد کتابخانه را به قالب JSON تبدیل می‌کند\&. خروجی خطاها تحت تأثیر این تنظیم قرار نمی‌گیرد و دست‌نخورده می‌ماند\&. .SH "ساختار کلی (GLOBAL STRUCTURE)" .sp به طور کلی، هر ورودی یا خروجی JSON درون شیئی قرار دارد که شامل یک ویژگی منفرد به نام \fInftables\fR است\&. مقدار این ویژگی آرایه‌ای شامل دستورها (برای ورودی) یا عناصر مجموعه قوانین (ruleset) (برای خروجی) می‌باشد\&. .sp یک دستور، شیئی با یک ویژگی منفرد است که نام آن نوع دستور را مشخص می‌کند\&. مقدار آن یک عنصر از مجموعه قوانین است \- که اساساً با عناصر خروجی یکسان است، به جز ویژگی‌های خاصی که ممکن است به شکل متفاوتی تفسیر شوند یا در ورودی الزامی باشند در حالی که خروجی به طور معمول آن‌ها را حذف می‌کند\&. .SH "شیء متاداده (METAINFO OBJECT)" .sp در خروجی، اولین شیء در آرایه \fBnftables\fR یک شیء ویژه حاوی اطلاعات کتابخانه است\&. محتوای آن به صورت زیر است: .sp .if n \{\ .RS 4 .\} .nf \fB{ "metainfo": { "version":\fR \fISTRING\fR\fB, "release_name":\fR \fISTRING\fR\fB, "json_schema_version":\fR \fINUMBER\fR \fB}}\fR .fi .if n \{\ .RE .\} .sp مقادیر ویژگی‌های \fBversion\fR و \fBrelease_name\fR برابر با نسخه بسته و نام انتشار همان‌طور که توسط دستور \fBnft \-v\fR چاپ می‌شود است\&. مقدار ویژگی \fBjson_schema_version\fR یک عدد صحیح است که نسخه شِمای JSON را نشان می‌دهد\&. .sp اگر در ورودی کتابخانه ارائه شود، تجزیه‌کننده بررسی می‌کند که مقدار \fBjson_schema_version\fR از نسخه کدگذاری‌شده درون کتابخانه فراتر نرود (تا اطمینان حاصل شود که شِمای ارائه‌شده کاملاً پشتیبانی می‌شود)\&. در آینده، عددی کمتر از مقدار داخلی ممکن است حالت سازگاری را فعال کند تا ورودی‌های قدیمی و ناسازگار JSON را پردازش نماید\&. .SH "اشیای دستور (COMMAND OBJECTS)" .sp این ساختار تعداد دلخواهی از دستورها را می‌پذیرد که به ترتیب ظاهر شدن تفسیر می‌شوند\&. برای نمونه، ورودی با نحو استاندارد زیر: .sp .if n \{\ .RS 4 .\} .nf flush ruleset add table inet mytable add chain inet mytable mychain add rule inet mytable mychain tcp dport 22 accept .fi .if n \{\ .RE .\} .sp به شکل زیر به JSON ترجمه می‌شود: .sp .if n \{\ .RS 4 .\} .nf { "nftables": [ { "flush": { "ruleset": null }}, { "add": { "table": { "family": "inet", "name": "mytable" }}}, { "add": { "chain": { "family": "inet", "table": "mytable", "name": "mychain" }}}, { "add": { "rule": { "family": "inet", "table": "mytable", "chain": "mychain", "expr": [ { "match": { "op": "==", "left": { "payload": { "protocol": "tcp", "field": "dport" }}, "right": 22 }}, { "accept": null } ] }}} ]} .fi .if n \{\ .RE .\} .SS "ADD" .sp .if n \{\ .RS 4 .\} .nf \fB{ "add":\fR \fIADD_OBJECT\fR \fB}\fR \fIADD_OBJECT\fR := \fITABLE\fR | \fICHAIN\fR | \fIRULE\fR | \fISET\fR | \fIMAP\fR | \fIELEMENT\fR | \fIFLOWTABLE\fR | \fICOUNTER\fR | \fIQUOTA\fR | \fICT_HELPER\fR | \fILIMIT\fR | \fICT_TIMEOUT\fR | \fICT_EXPECTATION\fR .fi .if n \{\ .RE .\} .sp افزودن یک عنصر جدید از مجموعه قوانین به کرنل\&. برای قوانین، این دستور به طور پیش‌فرض قانون را به انتهای زنجیره اضافه می‌کند\&. اگر قانون حاوی ویژگی \fBhandle\fR یا \fBindex\fR باشد، \fBپس از\fR قانونی که توسط این ویژگی‌ها مشخص شده درج می‌شود\&. .SS "REPLACE" .sp .if n \{\ .RS 4 .\} .nf \fB{ "replace":\fR \fIRULE\fR \fB}\fR .fi .if n \{\ .RE .\} .sp جایگزینی یک قانون\&. در \fIRULE\fR، ویژگی \fBhandle\fR الزامی است و قانونی را که باید جایگزین شود مشخص می‌کند\&. .SS "CREATE" .sp .if n \{\ .RS 4 .\} .nf \fB{ "create":\fR \fIADD_OBJECT\fR \fB}\fR .fi .if n \{\ .RE .\} .sp مشابه دستور \fBadd\fR است، اما اگر شیء از قبل وجود داشته باشد خطا برمی‌گرداند\&. .SS "INSERT" .sp .if n \{\ .RS 4 .\} .nf \fB{ "insert":\fR \fIRULE\fR \fB}\fR .fi .if n \{\ .RE .\} .sp این دستور برای قوانین مشابه \fBadd\fR است، اما به جای الحاق قانون به انتهای زنجیره، آن را در موقعیت اول درج می‌کند\&. اگر ویژگی \fBhandle\fR یا \fBindex\fR داده شده باشد، قانون \fBقبل از\fR قانونی که با این ویژگی‌ها مشخص شده درج می‌گردد\&. .if n \{\ .sp .\} .RS 4 .it 1 an-trap .nr an-no-space-flag 1 .nr an-break-flag 1 .br .ps +1 \fBنکته\fR .ps -1 .br .sp در دستورهای صریح (\fBadd\fR، \fBinsert\fR، \fBcreate\fR با پوشش دستور)، فیلد \fBhandle\fR برای موقعیت‌یابی استفاده می‌شود\&. در دستورهای ضمنی (اشیای خام \fBrule\fR بدون پوشش دستور، مانند آنچه در صدور/ورود استفاده می‌شود)، فیلد \fBhandle\fR برای تضمین سازگاری در سیستم‌های مختلف نادیده گرفته می‌شود\&. .sp .5v .RE .SS "DELETE" .sp .if n \{\ .RS 4 .\} .nf \fB{ "delete":\fR \fIADD_OBJECT\fR \fB}\fR .fi .if n \{\ .RE .\} .sp حذف یک شیء از مجموعه قوانین\&. به طور معمول در \fIADD_OBJECT\fR تنها حداقل تعداد ویژگی‌های لازم برای شناسایی یکتای شیء مورد نیاز است\&. برای بیشتر عناصر مجموعه قوانین، این ویژگی‌ها شامل \fBfamily\fR و \fBtable\fR به همراه \fBhandle\fR یا \fBname\fR است (به جز قوانین، زیرا نام ندارند)\&. .SS "LIST" .sp .if n \{\ .RS 4 .\} .nf \fB{ "list":\fR \fILIST_OBJECT\fR \fB}\fR \fILIST_OBJECT\fR := \fITABLE\fR | \fITABLES\fR | \fICHAIN\fR | \fICHAINS\fR | \fISET\fR | \fISETS\fR | \fIMAP\fR | \fIMAPS | COUNTER\fR | \fICOUNTERS\fR | \fIQUOTA\fR | \fIQUOTAS\fR | \fICT_HELPER\fR | \fICT_HELPERS\fR | \fILIMIT\fR | \fILIMITS\fR | \fIRULESET\fR | \fIMETER\fR | \fIMETERS\fR | \fIFLOWTABLE\fR | \fIFLOWTABLES\fR | \fICT_TIMEOUT\fR | \fICT_EXPECTATION\fR .fi .if n \{\ .RE .\} .sp فهرست کردن عناصر مجموعه قوانین\&. فرم‌های جمع برای فهرست کردن همه اشیای آن نوع استفاده می‌شوند، که اختیاری بر اساس \fBfamily\fR و برای برخی موارد بر اساس \fBtable\fR فیلتر می‌شوند\&. .SS "RESET" .sp .if n \{\ .RS 4 .\} .nf \fB{ "reset":\fR \fIRESET_OBJECT\fR \fB}\fR \fIRESET_OBJECT\fR := \fICOUNTER\fR | \fICOUNTERS\fR | \fIQUOTA\fR | \fIQUOTAS\fR | \fIRULE\fR | \fIRULES\fR | \fISET\fR | \fIMAP\fR | \fIELEMENT\fR .fi .if n \{\ .RE .\} .sp بازنشانی وضعیت در اشیای سازگار، یعنی صفر کردن شمارنده داخلی آن‌ها\&. .SS "FLUSH" .sp .if n \{\ .RS 4 .\} .nf \fB{ "flush":\fR \fIFLUSH_OBJECT\fR \fB}\fR \fIFLUSH_OBJECT\fR := \fITABLE\fR | \fICHAIN\fR | \fISET\fR | \fIMAP\fR | \fIMETER\fR | \fIRULESET\fR .fi .if n \{\ .RE .\} .sp خالی کردن محتوای شیء داده‌شده، به عنوان مثال حذف همه زنجیره‌ها از یک \fBtable\fR مشخص یا حذف همه عناصر از یک \fBset\fR داده‌شده\&. .SS "RENAME" .sp .if n \{\ .RS 4 .\} .nf \fB{ "rename":\fR \fICHAIN\fR \fB}\fR .fi .if n \{\ .RE .\} .sp تغییر نام یک زنجیره\&. نام جدید در ویژگی اختصاصی با نام \fBnewname\fR انتظار می‌رود\&. .SH "عناصر مجموعه قوانین (RULESET ELEMENTS)" .SS "RULESET" .sp .if n \{\ .RS 4 .\} .nf \fB{ "ruleset":\fR \fIRULSET_PROPERTIES\fR \fB}\fR \fIRULESET_PROPERTIES\fR := \fBnull\fR | \fB{ "family":\fR \fISTRING\fR \fB}\fR .fi .if n \{\ .RE .\} .sp این یک شیء ویژه برای استفاده با دستورهای \fBlist\fR و \fBflush\fR است که روی کل مجموعه قوانین یا بخش‌هایی از آن که متعلق به خانواده داده‌شده هستند اعمال می‌شود\&. .SS "TABLE" .sp .if n \{\ .RS 4 .\} .nf \fB{ "table": { "family":\fR \fISTRING\fR\fB, "name":\fR \fISTRING\fR\fB, "handle":\fR \fINUMBER\fR\fB, "flags":\fR \fITABLE_FLAGS\fR \fB}}\fR \fITABLE_FLAGS\fR := \fITABLE_FLAG\fR | \fB[\fR \fITABLE_FLAG_LIST\fR \fB]\fR \fITABLE_FLAG_LIST\fR := \fITABLE_FLAG\fR [\fB,\fR \fITABLE_FLAG_LIST\fR ] \fITABLE_FLAG\fR := \fB"dormant"\fR | \fB"owner"\fR | \fB"persist"\fR .fi .if n \{\ .RE .\} .sp این شیء یک جدول را توصیف می‌کند\&. .PP \fBfamily\fR .RS 4 خانواده جدول، مانند \fB"ip"\fR یا \fB"ip6"\fR\&. .RE .PP \fBname\fR .RS 4 نام جدول\&. .RE .PP \fBhandle\fR .RS 4 دستگیره (handle) جدول\&. در ورودی، تنها در دستور \fBdelete\fR به عنوان جایگزینی برای \fBname\fR استفاده می‌شود\&. .RE .PP \fBflags\fR .RS 4 پرچم‌ها (flags) جدول\&. .RE .SS "CHAIN" .sp .if n \{\ .RS 4 .\} .nf \fB{ "chain": { "family":\fR \fISTRING\fR\fB, "table":\fR \fISTRING\fR\fB, "name":\fR \fISTRING\fR\fB, "newname":\fR \fISTRING\fR\fB, "handle":\fR \fINUMBER\fR\fB, "type":\fR \fISTRING\fR\fB, "hook":\fR \fISTRING\fR\fB, "prio":\fR \fINUMBER\fR\fB, "dev":\fR \fISTRING\fR\fB, "policy":\fR \fISTRING\fR \fB}}\fR .fi .if n \{\ .RE .\} .sp این شیء یک زنجیره را توصیف می‌کند\&. .PP \fBfamily\fR .RS 4 خانواده جدول مربوطه\&. .RE .PP \fBtable\fR .RS 4 نام جدول مربوطه\&. .RE .PP \fBname\fR .RS 4 نام زنجیره\&. .RE .PP \fBhandle\fR .RS 4 دستگیره (handle) زنجیره\&. در ورودی، تنها در دستور \fBdelete\fR به عنوان جایگزینی برای \fBname\fR استفاده می‌شود\&. .RE .PP \fBnewname\fR .RS 4 نام جدید برای زنجیره، که فقط در دستور \fBrename\fR کاربرد دارد\&. .RE .sp ویژگی‌های زیر برای زنجیره‌های پایه (base chains) الزامی هستند: .PP \fBtype\fR .RS 4 نوع زنجیره\&. .RE .PP \fBhook\fR .RS 4 قلاب (hook) زنجیره\&. .RE .PP \fBprio\fR .RS 4 اولویت زنجیره\&. .RE .PP \fBdev\fR .RS 4 رابط متصل‌شده به زنجیره (در صورتی که در خانواده netdev باشد)\&. .RE .PP \fBpolicy\fR .RS 4 سیاست (policy) زنجیره\&. .RE .SS "RULE" .sp .if n \{\ .RS 4 .\} .nf \fB{ "rule": { "family":\fR \fISTRING\fR\fB, "table":\fR \fISTRING\fR\fB, "chain":\fR \fISTRING\fR\fB, "expr": [\fR \fISTATEMENTS\fR \fB], "handle":\fR \fINUMBER\fR\fB, "index":\fR \fINUMBER\fR\fB, "comment":\fR \fISTRING\fR \fB}}\fR \fISTATEMENTS\fR := \fISTATEMENT\fR [\fB,\fR \fISTATEMENTS\fR ] .fi .if n \{\ .RE .\} .sp این شیء یک قانون را توصیف می‌کند\&. بلوک‌های سازنده اساسی قوانین، گزاره‌ها (statements) هستند\&. هر قانون حداقل از یک گزاره تشکیل شده است\&. .PP \fBfamily\fR .RS 4 خانواده جدول\&. .RE .PP \fBtable\fR .RS 4 نام جدول\&. .RE .PP \fBchain\fR .RS 4 نام زنجیره\&. .RE .PP \fBexpr\fR .RS 4 آرایه‌ای از گزاره‌ها که این قانون از آن‌ها تشکیل شده است\&. در ورودی، این ویژگی تنها در دستورهای \fBadd\fR/\fBinsert\fR/\fBreplace\fR استفاده می‌شود\&. .RE .PP \fBhandle\fR .RS 4 دستگیره (handle) قانون\&. در دستورهای \fBdelete\fR/\fBreplace\fR به عنوان شناسه قانونی که باید حذف یا جایگزین شود عمل می‌کند\&. در دستورهای \fBadd\fR/\fBinsert\fR/\fBcreate\fR در صورت وجود، موقعیت‌یابی را نسبت به یک قانون موجود مشخص می‌کند: \fBadd\fR قانون جدید را \fBپس از\fR دستگیره مشخص‌شده درج می‌کند، و \fBinsert\fR آن را \fBقبل از\fR آن درج می‌نماید\&. هنگامی که چندین قانون در یک موقعیت دستگیره یکسان اضافه می‌شوند، موقعیت آن‌ها نسبت به قانون اولیه سنجیده می‌شود، نه نسبت به قوانینی که پیش‌تر درج شده‌اند\&. در اشیای قانون ضمنی (بدون پوشش دستور، همان‌طور که در خروجی \fBnft \-j list\fR استفاده می‌شود)، فیلد handle وجود دارد اما در ورودی نادیده گرفته می‌شود تا قابلیت حمل صادرات/واردات تضمین گردد\&. .RE .PP \fBindex\fR .RS 4 موقعیت قانون برای دستورهای \fBadd\fR/\fBinsert\fR\&. در این حالت به عنوان جایگزینی برای \fBhandle\fR استفاده می‌شود\&. .RE .PP \fBcomment\fR .RS 4 توضیح (کامنت) اختیاری قانون\&. .RE .SS "SET / MAP" .sp .if n \{\ .RS 4 .\} .nf \fB{ "set": { "family":\fR \fISTRING\fR\fB, "table":\fR \fISTRING\fR\fB, "name":\fR \fISTRING\fR\fB, "handle":\fR \fINUMBER\fR\fB, "type":\fR \fISET_TYPE\fR\fB, "policy":\fR \fISET_POLICY\fR\fB, "flags":\fR \fISET_FLAGS\fR\fB, "elem":\fR \fISET_ELEMENTS\fR\fB, "timeout":\fR \fINUMBER\fR\fB, "gc\-interval":\fR \fINUMBER\fR\fB, "size":\fR \fINUMBER\fR\fB, "count":\fR \fINUMBER\fR\fB, "auto\-merge":\fR \fIBOOLEAN\fR \fB}}\fR \fB{ "map": { "family":\fR \fISTRING\fR\fB, "table":\fR \fISTRING\fR\fB, "name":\fR \fISTRING\fR\fB, "handle":\fR \fINUMBER\fR\fB, "type":\fR \fISET_TYPE\fR\fB, "map":\fR \fISTRING\fR\fB, "policy":\fR \fISET_POLICY\fR\fB, "flags":\fR \fISET_FLAGS\fR\fB, "elem":\fR \fISET_ELEMENTS\fR\fB, "timeout":\fR \fINUMBER\fR\fB, "gc\-interval":\fR \fINUMBER\fR\fB, "size":\fR \fINUMBER\fR\fB, "count":\fR \fINUMBER\fR\fB, "auto\-merge":\fR \fIBOOLEAN\fR \fB}}\fR \fISET_TYPE\fR := \fISTRING\fR | \fB[\fR \fISET_TYPE_LIST\fR \fB]\fR | \fB{ "typeof":\fR \fIEXPRESSION\fR \fB}\fR \fISET_TYPE_LIST\fR := \fISTRING\fR [\fB,\fR \fISET_TYPE_LIST\fR ] \fISET_POLICY\fR := \fB"performance"\fR | \fB"memory"\fR \fISET_FLAGS\fR := \fISET_FLAG\fR | \fB[\fR \fISET_FLAG_LIST\fR \fB]\fR \fISET_FLAG_LIST\fR := \fISET_FLAG\fR [\fB,\fR \fISET_FLAG_LIST\fR ] \fISET_FLAG\fR := \fB"constant"\fR | \fB"interval"\fR | \fB"timeout"\fR \fISET_ELEMENTS\fR := \fIEXPRESSION\fR | \fB[\fR \fIEXPRESSION_LIST\fR \fB]\fR \fIEXPRESSION_LIST\fR := \fIEXPRESSION\fR [\fB,\fR \fIEXPRESSION_LIST\fR ] .fi .if n \{\ .RE .\} .sp این اشیاء یک مجموعه (set) یا نگاشت (map) نام‌گذاری‌شده را توصیف می‌کنند\&. نگاشت‌ها شکل خاصی از مجموعه‌ها هستند که یک کلید یکتا را به یک مقدار ترجمه می‌کنند\&. .PP \fBfamily\fR .RS 4 خانواده جدول\&. .RE .PP \fBtable\fR .RS 4 نام جدول\&. .RE .PP \fBname\fR .RS 4 نام مجموعه\&. .RE .PP \fBhandle\fR .RS 4 دستگیره مجموعه\&. در ورودی، تنها در دستور \fBdelete\fR استفاده می‌شود\&. .RE .PP \fBtype\fR .RS 4 نوع داده مجموعه، بخش زیر را ببینید\&. .RE .PP \fBmap\fR .RS 4 نوع مقادیری که این مجموعه به آن‌ها نگاشت می‌شود (یعنی این مجموعه یک نگاشت است)\&. .RE .PP \fBpolicy\fR .RS 4 سیاست مجموعه\&. .RE .PP \fBflags\fR .RS 4 پرچم‌های مجموعه\&. .RE .PP \fBelem\fR .RS 4 عنصر یا عناصر اولیه مجموعه، بخش زیر را ببینید\&. .RE .PP \fBtimeout\fR .RS 4 مهلت زمانی عنصر بر حسب ثانیه\&. .RE .PP \fBgc\-interval\fR .RS 4 فاصله زمانی زباله‌روب (garbage collector) بر حسب ثانیه\&. .RE .PP \fBsize\fR .RS 4 حداکثر تعداد عناصر پشتیبانی‌شده\&. .RE .PP \fBcount\fR .RS 4 تعداد فعلی عناصر\&. در ورودی استفاده نمی‌شود\&. .RE .PP \fBauto\-merge\fR .RS 4 ادغام خودکار عناصر مجاور یا همپوشان در مجموعه‌های بازه‌ای (interval sets)\&. .RE .sp .it 1 an-trap .nr an-no-space-flag 1 .nr an-break-flag 1 .br .ps +1 \fBTYPE\fR .RS 4 .sp نوع مجموعه ممکن است یک رشته مانند \fB"ipv4_addr"\fR، آرایه‌ای متشکل از رشته‌ها (برای انواع الحاق‌شده) یا یک شیء \fBtypeof\fR حاوی عبارتی برای استخراج نوع باشد\&. .RE .sp .it 1 an-trap .nr an-no-space-flag 1 .nr an-break-flag 1 .br .ps +1 \fBELEM\fR .RS 4 .sp یک عنصر منفرد مجموعه برای موارد ساده ممکن است به صورت یک رشته، عدد صحیح یا مقدار بولی مشخص شود\&. اگر ویژگی‌های بیشتری لازم باشد، می‌توان از یک شیء رسمی \fBelem\fR استفاده کرد\&. .sp چندین عنصر را می‌توان در یک آرایه قرار داد\&. .RE .SS "ELEMENT" .sp .if n \{\ .RS 4 .\} .nf \fB{ "element": { "family":\fR \fISTRING\fR\fB, "table":\fR \fISTRING\fR\fB, "name":\fR \fISTRING\fR\fB, "elem":\fR \fISET_ELEM\fR \fB}}\fR \fISET_ELEM\fR := \fIEXPRESSION\fR | \fB[\fR \fIEXPRESSION_LIST\fR \fB]\fR \fIEXPRESSION_LIST\fR := \fIEXPRESSION\fR [\fB,\fR \fIEXPRESSION\fR ] .fi .if n \{\ .RE .\} .sp دستکاری عنصر یا عناصر در یک مجموعه نام‌گذاری‌شده\&. .PP \fBfamily\fR .RS 4 خانواده جدول\&. .RE .PP \fBtable\fR .RS 4 نام جدول\&. .RE .PP \fBname\fR .RS 4 نام مجموعه\&. .RE .PP \fBelem\fR .RS 4 ویژگی elem در شیء set را ببینید\&. .RE .SS "FLOWTABLE" .sp .if n \{\ .RS 4 .\} .nf \fB{ "flowtable": { "family":\fR \fISTRING\fR\fB, "table":\fR \fISTRING\fR\fB, "name":\fR \fISTRING\fR\fB, "handle":\fR \fINUMBER\fR\fB, "hook":\fR \fISTRING\fR\fB, "prio":\fR \fINUMBER\fR\fB, "dev":\fR \fIFT_INTERFACE\fR \fB}}\fR \fIFT_INTERFACE\fR := \fISTRING\fR | \fB[\fR \fIFT_INTERFACE_LIST\fR \fB]\fR \fIFT_INTERFACE_LIST\fR := \fISTRING\fR [\fB,\fR \fISTRING\fR ] .fi .if n \{\ .RE .\} .sp این شیء یک جدول جریان (flowtable) نام‌گذاری‌شده را نشان می‌دهد\&. .PP \fBfamily\fR .RS 4 خانواده جدول\&. .RE .PP \fBtable\fR .RS 4 نام جدول\&. .RE .PP \fBname\fR .RS 4 نام جدول جریان\&. .RE .PP \fBhandle\fR .RS 4 دستگیره جدول جریان\&. در ورودی، تنها توسط دستور \fBdelete\fR استفاده می‌شود\&. .RE .PP \fBhook\fR .RS 4 قلاب جدول جریان\&. .RE .PP \fBprio\fR .RS 4 اولویت جدول جریان\&. .RE .PP \fBdev\fR .RS 4 رابط یا رابط‌های جدول جریان\&. .RE .SS "COUNTER" .sp .if n \{\ .RS 4 .\} .nf \fB{ "counter": { "family":\fR \fISTRING\fR\fB, "table":\fR \fISTRING\fR\fB, "name":\fR \fISTRING\fR\fB, "handle":\fR \fINUMBER\fR\fB, "packets":\fR \fINUMBER\fR\fB, "bytes":\fR \fINUMBER\fR \fB}}\fR .fi .if n \{\ .RE .\} .sp این شیء یک شمارنده (counter) نام‌گذاری‌شده را نشان می‌دهد\&. .PP \fBfamily\fR .RS 4 خانواده جدول\&. .RE .PP \fBtable\fR .RS 4 نام جدول\&. .RE .PP \fBname\fR .RS 4 نام شمارنده\&. .RE .PP \fBhandle\fR .RS 4 دستگیره شمارنده\&. در ورودی، تنها توسط دستور \fBdelete\fR استفاده می‌شود\&. .RE .PP \fBpackets\fR .RS 4 مقدار شمارنده بسته‌ها\&. .RE .PP \fBbytes\fR .RS 4 مقدار شمارنده بایت‌ها\&. .RE .SS "QUOTA" .sp .if n \{\ .RS 4 .\} .nf \fB{ "quota": { "family":\fR \fISTRING\fR\fB, "table":\fR \fISTRING\fR\fB, "name":\fR \fISTRING\fR\fB, "handle":\fR \fINUMBER\fR\fB, "bytes":\fR \fINUMBER\fR\fB, "used":\fR \fINUMBER\fR\fB, "inv":\fR \fIBOOLEAN\fR \fB}}\fR .fi .if n \{\ .RE .\} .sp این شیء یک سهمیه (quota) نام‌گذاری‌شده را نشان می‌دهد\&. .PP \fBfamily\fR .RS 4 خانواده جدول\&. .RE .PP \fBtable\fR .RS 4 نام جدول\&. .RE .PP \fBname\fR .RS 4 نام سهمیه\&. .RE .PP \fBhandle\fR .RS 4 دستگیره سهمیه\&. در ورودی، تنها توسط دستور \fBdelete\fR استفاده می‌شود\&. .RE .PP \fBbytes\fR .RS 4 آستانه سهمیه\&. .RE .PP \fBused\fR .RS 4 سهمیه مصرف‌شده تا این لحظه\&. .RE .PP \fBinv\fR .RS 4 در صورت مقدار true، اگر سهمیه فراتر رفته باشد مطابقت برقرار می‌شود\&. .RE .SS "CT HELPER" .sp .if n \{\ .RS 4 .\} .nf \fB{ "ct helper": { "family":\fR \fISTRING\fR\fB, "table":\fR \fISTRING\fR\fB, "name":\fR \fISTRING\fR\fB, "handle":\fR \fI\&... \*(Aq\fR\fI\fB, "type":\fR\fR\fI \*(AqSTRING\fR\fB, "protocol":\fR \fICTH_PROTO\fR\fB, "l3proto":\fR \fISTRING\fR \fB}}\fR \fICTH_PROTO\fR := \fB"tcp"\fR | \fB"udp"\fR .fi .if n \{\ .RE .\} .sp این شیء یک دستیار ردیابی اتصال (conntrack helper) نام‌گذاری‌شده را نشان می‌دهد\&. .PP \fBfamily\fR .RS 4 خانواده جدول\&. .RE .PP \fBtable\fR .RS 4 نام جدول\&. .RE .PP \fBname\fR .RS 4 نام ct helper\&. .RE .PP \fBhandle\fR .RS 4 دستگیره ct helper\&. در ورودی، تنها توسط دستور \fBdelete\fR استفاده می‌شود\&. .RE .PP \fBtype\fR .RS 4 نام نوع ct helper، مانند \fB"ftp"\fR یا \fB"tftp"\fR\&. .RE .PP \fBprotocol\fR .RS 4 پروتکل لایه ۴ مربوط به ct helper\&. .RE .PP \fBl3proto\fR .RS 4 پروتکل لایه ۳ مربوط به ct helper، مانند \fB"ip"\fR یا \fB"ip6"\fR\&. .RE .SS "LIMIT" .sp .if n \{\ .RS 4 .\} .nf \fB{ "limit": { "family":\fR \fISTRING\fR\fB, "table":\fR \fISTRING\fR\fB, "name":\fR \fISTRING\fR\fB, "handle":\fR \fINUMBER\fR\fB, "rate":\fR \fINUMBER\fR\fB, "per":\fR \fISTRING\fR\fB, "burst":\fR \fINUMBER\fR\fB, "unit":\fR \fILIMIT_UNIT\fR\fB, "inv":\fR \fIBOOLEAN\fR \fB}}\fR \fILIMIT_UNIT\fR := \fB"packets"\fR | \fB"bytes"\fR .fi .if n \{\ .RE .\} .sp این شیء یک محدودیت (limit) نام‌گذاری‌شده را نشان می‌دهد\&. .PP \fBfamily\fR .RS 4 خانواده جدول\&. .RE .PP \fBtable\fR .RS 4 نام جدول\&. .RE .PP \fBname\fR .RS 4 نام محدودیت\&. .RE .PP \fBhandle\fR .RS 4 دستگیره محدودیت\&. در ورودی، تنها توسط دستور \fBdelete\fR استفاده می‌شود\&. .RE .PP \fBrate\fR .RS 4 مقدار نرخ محدودیت\&. .RE .PP \fBper\fR .RS 4 واحد زمانی اعمال محدودیت، مانند \fB"week"\fR، \fB"day"\fR، \fB"hour"\fR و غیره\&. در صورت عدم ذکر، پیش‌فرض \fB"second"\fR است\&. .RE .PP \fBburst\fR .RS 4 مقدار جهش (burst) محدودیت\&. در صورت عدم ذکر، پیش‌فرض \fB0\fR است\&. .RE .PP \fBunit\fR .RS 4 واحد مقادیر نرخ و جهش\&. در صورت حذف، پیش‌فرض \fB"packets"\fR است\&. .RE .PP \fBinv\fR .RS 4 در صورت مقدار true، اگر از حد مجاز فراتر رود مطابقت برقرار می‌شود\&. در صورت عدم ذکر، پیش‌فرض \fBfalse\fR است\&. .RE .SS "CT TIMEOUT" .sp .if n \{\ .RS 4 .\} .nf \fB{ "ct timeout": { "family":\fR \fISTRING\fR\fB, "table":\fR \fISTRING\fR\fB, "name":\fR \fISTRING\fR\fB, "handle":\fR \fINUMBER\fR\fB, "protocol":\fR \fICTH_PROTO\fR\fB, "state":\fR \fISTRING\fR\fB, "value:\fR \fINUMBER\fR\fB, "l3proto":\fR \fISTRING\fR \fB}}\fR \fICTH_PROTO\fR := \fB"tcp"\fR | \fB"udp"\fR | \fB"dccp"\fR | \fB"sctp"\fR | \fB"gre"\fR | \fB"icmpv6"\fR | \fB"icmp"\fR | \fB"generic"\fR .fi .if n \{\ .RE .\} .sp این شیء یک سیاست مهلت زمانی ردیابی اتصال (conntrack timeout policy) نام‌گذاری‌شده را نشان می‌دهد\&. .PP \fBfamily\fR .RS 4 خانواده جدول\&. .RE .PP \fBtable\fR .RS 4 نام جدول\&. .RE .PP \fBname\fR .RS 4 نام شیء ct timeout\&. .RE .PP \fBhandle\fR .RS 4 دستگیره شیء ct timeout\&. در ورودی، تنها توسط دستور \fBdelete\fR استفاده می‌شود\&. .RE .PP \fBprotocol\fR .RS 4 پروتکل لایه ۴ مربوط به شیء ct timeout\&. .RE .PP \fBstate\fR .RS 4 نام وضعیت اتصال، مانند \fB"established"\fR، \fB"syn_sent"\fR، \fB"close"\fR یا \fB"close_wait"\fR، که مقدار مهلت زمانی برای آن باید به‌روزرسانی شود\&. .RE .PP \fBvalue\fR .RS 4 مقدار مهلت زمانی به‌روزرسانی‌شده برای وضعیت اتصال مشخص‌شده\&. .RE .PP \fBl3proto\fR .RS 4 پروتکل لایه ۳ مربوط به شیء ct timeout، مانند \fB"ip"\fR یا \fB"ip6"\fR\&. .RE .SS "CT EXPECTATION" .sp .if n \{\ .RS 4 .\} .nf \fB{ "ct expectation": { "family":\fR \fISTRING\fR\fB, "table":\fR \fISTRING\fR\fB, "name":\fR \fISTRING\fR\fB, "handle":\fR \fINUMBER\fR\fB, "l3proto":\fR \fISTRING\fR "protocol":* \fICTH_PROTO\fR\fB, "dport":\fR \fINUMBER\fR\fB, "timeout:\fR \fINUMBER\fR\fB, "size:\fR \fINUMBER\fR\fB, *}}\fR \fICTH_PROTO\fR := \fB"tcp"\fR | \fB"udp"\fR | \fB"dccp"\fR | \fB"sctp"\fR | \fB"gre"\fR | \fB"icmpv6"\fR | \fB"icmp"\fR | \fB"generic"\fR .fi .if n \{\ .RE .\} .sp این شیء یک انتظار ردیابی اتصال (conntrack expectation) نام‌گذاری‌شده را نشان می‌دهد\&. .PP \fBfamily\fR .RS 4 خانواده جدول\&. .RE .PP \fBtable\fR .RS 4 نام جدول\&. .RE .PP \fBname\fR .RS 4 نام شیء ct expectation\&. .RE .PP \fBhandle\fR .RS 4 دستگیره شیء ct expectation\&. در ورودی، تنها توسط دستور \fBdelete\fR استفاده می‌شود\&. .RE .PP \fBl3proto\fR .RS 4 پروتکل لایه ۳ شیء ct expectation، مانند \fB"ip"\fR یا \fB"ip6"\fR\&. .RE .PP \fBprotocol\fR .RS 4 پروتکل لایه ۴ شیء ct expectation\&. .RE .PP \fBdport\fR .RS 4 درگاه مقصد اتصال مورد انتظار\&. .RE .PP \fBtimeout\fR .RS 4 مدت زمان بر حسب میلی‌ثانیه که این انتظار فعال خواهد ماند\&. .RE .PP \fBsize\fR .RS 4 حداکثر تعداد انتظاراتی که می‌توانند به طور همزمان وجود داشته باشند\&. .RE .SH "گزاره‌ها (STATEMENTS)" .sp گزاره‌ها (statements) بلوک‌های سازنده قوانین هستند\&. هر قانون حداقل از یک گزاره تشکیل شده است\&. .SS "VERDICT" .sp .if n \{\ .RS 4 .\} .nf \fB{ "accept": null }\fR \fB{ "drop": null }\fR \fB{ "continue": null }\fR \fB{ "return": null }\fR \fB{ "jump": { "target": * \fR\fB\fISTRING\fR\fR\fB *}}\fR \fB{ "goto": { "target": * \fR\fB\fISTRING\fR\fR\fB *}}\fR .fi .if n \{\ .RE .\} .sp یک حکم (verdict) یا عبور بسته از زنجیره فعلی را خاتمه می‌دهد یا آن را به زنجیره دیگری واگذار می‌کند\&. .sp گزاره‌های \fBjump\fR و \fBgoto\fR به نام زنجیره مقصد نیاز دارند\&. .SS "MATCH" .sp .if n \{\ .RS 4 .\} .nf \fB{ "match": { "left":\fR \fIEXPRESSION\fR\fB, "right":\fR \fIEXPRESSION\fR\fB, "op":\fR \fISTRING\fR \fB}}\fR .fi .if n \{\ .RE .\} .sp این گزاره عبارت سمت چپ (معمولاً هدر بسته یا اطلاعات فراداده بسته) را با عبارت سمت راست (معمولاً یک مقدار ثابت) تطبیق می‌دهد\&. اگر گزاره مقدار true ارزیابی شود، گزاره بعدی در این قانون بررسی می‌شود\&. در غیر این صورت، پردازش با قانون بعدی در همان زنجیره ادامه می‌یابد\&. .PP \fBleft\fR .RS 4 سمت چپ این تطبیق\&. .RE .PP \fBright\fR .RS 4 سمت راست این تطبیق\&. .RE .PP \fBop\fR .RS 4 عملگری که نوع مقایسه را مشخص می‌کند\&. .RE .sp .it 1 an-trap .nr an-no-space-flag 1 .nr an-break-flag 1 .br .ps +1 \fBعملگرها (OPERATORS)\fR .RS 4 .TS tab(:); lt lt lt lt lt lt lt lt lt lt lt lt lt lt. T{ .sp \fB==\fR T}:T{ .sp برابر (Equal) T} T{ .sp \fB!=\fR T}:T{ .sp نابرابر (Not equal) T} T{ .sp \fB<\fR T}:T{ .sp کوچک‌تر از (Less than) T} T{ .sp \fB>\fR T}:T{ .sp بزرگ‌تر از (Greater than) T} T{ .sp \fB<=\fR T}:T{ .sp کوچک‌تر یا مساوی (Less than or equal to) T} T{ .sp \fB>=\fR T}:T{ .sp بزرگ‌تر یا مساوی (Greater than or equal to) T} T{ .sp \fBin\fR T}:T{ .sp انجام جستجو، یعنی بررسی اینکه آیا بیت‌های RHS در مقدار LHS وجود دارند یا خیر T} .TE .sp 1 .sp برخلاف API استاندارد، عملگر در اینجا الزامی است\&. در API استاندارد، عملگر حذف‌شده ممکن است به دو روش بسته به نوع عبارت در سمت راست (RHS) حل شود: .sp .RS 4 .ie n \{\ \h'-04'\(bu\h'+03'\c .\} .el \{\ .sp -1 .IP \(bu 2.3 .\} اگر RHS یک ماسک بیتی یا فهرستی از ماسک‌های بیتی باشد، عبارت به یک عملیات دودویی با عملگر نابرابری تبدیل می‌شود، به این صورت: \fILHS & RHS != 0\fR\&. .RE .sp .RS 4 .ie n \{\ \h'-04'\(bu\h'+03'\c .\} .el \{\ .sp -1 .IP \(bu 2.3 .\} در هر حالت دیگر، عملگر برابری به سادگی درج می‌شود\&. .RE .sp برای حالت اول غیربدیهی، JSON API از عملگر \fBin\fR پشتیبانی می‌کند\&. .RE .SS "COUNTER" .sp .if n \{\ .RS 4 .\} .nf \fB{ "counter": { "packets":\fR \fINUMBER\fR\fB, "bytes":\fR \fINUMBER\fR \fB}}\fR \fB{ "counter":\fR \fISTRING\fR \fB}\fR .fi .if n \{\ .RE .\} .sp این شیء یک شمارنده بایت/بسته را نشان می‌دهد\&. در ورودی، هیچ ویژگی‌ای الزامی نیست\&. در صورت ارائه، به عنوان مقادیر اولیه برای شمارنده عمل می‌کنند\&. .sp فرم اول یک شمارنده ناشناس ایجاد می‌کند که درون قانونی که در آن ظاهر شده زندگی می‌کند\&. فرم دوم ارجاعی به یک شیء شمارنده نام‌گذاری‌شده را مشخص می‌نماید\&. .PP \fBpackets\fR .RS 4 بسته‌های شمارش‌شده\&. .RE .PP \fBbytes\fR .RS 4 بایت‌های شمارش‌شده\&. .RE .SS "MANGLE" .sp .if n \{\ .RS 4 .\} .nf \fB{ "mangle": { "key":\fR \fIEXPRESSION\fR\fB, "value":\fR \fIEXPRESSION\fR \fB}}\fR .fi .if n \{\ .RE .\} .sp این گزاره داده‌های بسته یا اطلاعات فراداده (meta info) آن را تغییر می‌دهد\&. .PP \fBkey\fR .RS 4 داده بسته‌ای که باید تغییر کند، ارائه‌شده به عنوان یک عبارت \fBexthdr\fR، \fBpayload\fR، \fBmeta\fR، \fBct\fR یا \fBct helper\fR\&. .RE .PP \fBvalue\fR .RS 4 مقدار جدید برای تغییر داده‌ها\&. .RE .SS "QUOTA" .sp .if n \{\ .RS 4 .\} .nf \fB{ "quota": { "val":\fR \fINUMBER\fR\fB, "val_unit":\fR \fISTRING\fR\fB, "used":\fR \fINUMBER\fR\fB, "used_unit":\fR \fISTRING\fR\fB, "inv":\fR \fIBOOLEAN\fR \fB}}\fR \fB{ "quota":\fR \fISTRING\fR \fB}\fR .fi .if n \{\ .RE .\} .sp فرم اول یک سهمیه ناشناس ایجاد می‌کند که در قانونی که در آن ظاهر شده قرار دارد\&. فرم دوم ارجاعی به یک شیء سهمیه نام‌گذاری‌شده را مشخص می‌کند\&. .PP \fBval\fR .RS 4 مقدار سهمیه\&. .RE .PP \fBval_unit\fR .RS 4 واحد \fBval\fR، مانند \fB"kbytes"\fR یا \fB"mbytes"\fR\&. در صورت عدم ذکر، پیش‌فرض \fB"bytes"\fR است\&. .RE .PP \fBused\fR .RS 4 سهمیه مصرف‌شده تا این لحظه\&. در ورودی اختیاری است\&. در صورت ارائه، به عنوان مقدار اولیه عمل می‌کند\&. .RE .PP \fBused_unit\fR .RS 4 واحد \fBused\fR\&. پیش‌فرض \fB"bytes"\fR است\&. .RE .PP \fBinv\fR .RS 4 در صورت مقدار \fBtrue\fR، اگر سهمیه فراتر رفته باشد مطابقت داده می‌شود\&. پیش‌فرض \fBfalse\fR است\&. .RE .SS "LIMIT" .sp .if n \{\ .RS 4 .\} .nf \fB{ "limit": { "rate":\fR \fINUMBER\fR\fB, "rate_unit":\fR \fISTRING\fR\fB, "per":\fR \fISTRING\fR\fB, "burst":\fR \fINUMBER\fR\fB, "burst_unit":\fR \fISTRING\fR\fB, "inv":\fR \fIBOOLEAN\fR \fB}}\fR \fB{ "limit":\fR \fISTRING\fR \fB}\fR .fi .if n \{\ .RE .\} .sp فرم اول یک محدودیت ناشناس ایجاد می‌کند که درون قانونی که در آن ظاهر شده قرار دارد\&. فرم دوم ارجاعی به یک شیء محدودیت نام‌گذاری‌شده را مشخص می‌کند\&. .PP \fBrate\fR .RS 4 مقدار نرخ محدودسازی\&. .RE .PP \fBrate_unit\fR .RS 4 واحد \fBrate\fR، مانند \fB"packets"\fR یا \fB"mbytes"\fR\&. پیش‌فرض \fB"packets"\fR است\&. .RE .PP \fBper\fR .RS 4 مخرج \fBrate\fR، مانند \fB"week"\fR یا \fB"minutes"\fR\&. .RE .PP \fBburst\fR .RS 4 مقدار جهش (burst)\&. پیش‌فرض \fB0\fR است\&. .RE .PP \fBburst_unit\fR .RS 4 واحد \fBburst\fR، در صورتی که \fBrate_unit\fR برابر با \fB"packets"\fR باشد نادیده گرفته می‌شود\&. پیش‌فرض \fB"bytes"\fR است\&. .RE .PP \fBinv\fR .RS 4 در صورت مقدار \fBtrue\fR، اگر از حد مجاز فراتر رود مطابقت برقرار می‌شود\&. پیش‌فرض \fBfalse\fR است\&. .RE .SS "FWD" .sp .if n \{\ .RS 4 .\} .nf \fB{ "fwd": { "dev":\fR \fIEXPRESSION\fR\fB, "family":\fR \fIFWD_FAMILY\fR\fB, "addr":\fR \fIEXPRESSION\fR \fB}}\fR \fIFWD_FAMILY\fR := \fB"ip"\fR | \fB"ip6"\fR .fi .if n \{\ .RE .\} .sp هدایت بسته به مقصدی متفاوت\&. .PP \fBdev\fR .RS 4 رابطی که بسته باید روی آن هدایت شود\&. .RE .PP \fBfamily\fR .RS 4 خانواده \fBaddr\fR\&. .RE .PP \fBaddr\fR .RS 4 آدرس IP(v6) که بسته باید به آن هدایت شود\&. .RE .sp هر دو ویژگی \fBfamily\fR و \fBaddr\fR اختیاری هستند، اما اگر حداقل یکی از آن‌ها داده شود، هر دو باید وجود داشته باشند\&. .SS "NOTRACK" .sp .if n \{\ .RS 4 .\} .nf \fB{ "notrack": null }\fR .fi .if n \{\ .RE .\} .sp غیرفعال کردن ردیابی اتصال (connection tracking) برای بسته\&. .SS "DUP" .sp .if n \{\ .RS 4 .\} .nf \fB{ "dup": { "addr":\fR \fIEXPRESSION\fR\fB, "dev":\fR \fIEXPRESSION\fR \fB}}\fR .fi .if n \{\ .RE .\} .sp تکثیر یک بسته به مقصدی متفاوت\&. .PP \fBaddr\fR .RS 4 آدرسی که بسته باید به آن تکثیر شود\&. .RE .PP \fBdev\fR .RS 4 رابطی که بسته باید روی آن تکثیر شود\&. می‌توان آن را حذف کرد تا رابط به طور صریح مشخص نشود\&. .RE .SS "ترجمه نشانی شبکه (NETWORK ADDRESS TRANSLATION)" .sp .if n \{\ .RS 4 .\} .nf \fB{ "snat": { "addr":\fR \fIEXPRESSION\fR\fB, "family":\fR \fISTRING\fR\fB, "port":\fR \fIEXPRESSION\fR\fB, "flags":\fR \fIFLAGS\fR \fB}}\fR \fB{ "dnat": { "addr":\fR \fIEXPRESSION\fR\fB, "family":\fR \fISTRING\fR\fB, "port":\fR \fIEXPRESSION\fR\fB, "flags":\fR \fIFLAGS\fR \fB}}\fR \fB{ "masquerade": { "port":\fR \fIEXPRESSION\fR\fB, "flags":\fR \fIFLAGS\fR \fB}}\fR \fB{ "redirect": { "port":\fR \fIEXPRESSION\fR\fB, "flags":\fR \fIFLAGS\fR \fB}}\fR \fIFLAGS\fR := \fIFLAG\fR | \fB[\fR \fIFLAG_LIST\fR \fB]\fR \fIFLAG_LIST\fR := \fIFLAG\fR [\fB,\fR \fIFLAG_LIST\fR ] \fIFLAG\fR := \fB"random"\fR | \fB"fully\-random"\fR | \fB"persistent"\fR .fi .if n \{\ .RE .\} .sp انجام ترجمه نشانی شبکه (NAT)\&. .PP \fBaddr\fR .RS 4 آدرسی که باید به آن ترجمه شود\&. .RE .PP \fBfamily\fR .RS 4 خانواده \fBaddr\fR، یا \fBip\fR یا \fBip6\fR\&. در خانواده جدول \fBinet\fR الزامی است\&. .RE .PP \fBport\fR .RS 4 درگاهی که باید به آن ترجمه شود\&. .RE .PP \fBflags\fR .RS 4 پرچم یا پرچم‌ها (flags)\&. .RE .sp همه ویژگی‌ها اختیاری هستند و پیش‌فرض آن‌ها none است\&. .SS "REJECT" .sp .if n \{\ .RS 4 .\} .nf \fB{ "reject": { "type":\fR \fISTRING\fR\fB, "expr":\fR \fIEXPRESSION\fR \fB}}\fR .fi .if n \{\ .RE .\} .sp رد کردن بسته و ارسال پاسخ خطای مشخص‌شده\&. .PP \fBtype\fR .RS 4 نوع رد کردن، یکی از مقادیر \fB"tcp reset"\fR، \fB"icmpx"\fR، \fB"icmp"\fR یا \fB"icmpv6"\fR\&. .RE .PP \fBexpr\fR .RS 4 کد ICMP که بسته با آن رد می‌شود\&. .RE .sp همه ویژگی‌ها اختیاری هستند\&. .SS "SET" .sp .if n \{\ .RS 4 .\} .nf \fB{ "set": { "op":\fR \fISTRING\fR\fB, "elem":\fR \fIEXPRESSION\fR\fB, "set":\fR \fISTRING\fR \fB}}\fR .fi .if n \{\ .RE .\} .sp افزودن یا به‌روزرسانی پویای عناصر در یک مجموعه\&. .PP \fBop\fR .RS 4 عملگر روی مجموعه، یکی از مقادیر \fB"add"\fR یا \fB"update"\fR\&. .RE .PP \fBelem\fR .RS 4 عنصر مجموعه برای افزودن یا به‌روزرسانی\&. .RE .PP \fBset\fR .RS 4 ارجاع به مجموعه\&. .RE .SS "LOG" .sp .if n \{\ .RS 4 .\} .nf \fB{ "log": { "prefix":\fR \fISTRING\fR\fB, "group":\fR \fINUMBER\fR\fB, "snaplen":\fR \fINUMBER\fR\fB, "queue\-threshold":\fR \fINUMBER\fR\fB, "level":\fR \fILEVEL\fR\fB, "flags":\fR \fIFLAGS\fR \fB}}\fR \fILEVEL\fR := \fB"emerg"\fR | \fB"alert"\fR | \fB"crit"\fR | \fB"err"\fR | \fB"warn"\fR | \fB"notice"\fR | \fB"info"\fR | \fB"debug"\fR | \fB"audit"\fR \fIFLAGS\fR := \fIFLAG\fR | \fB[\fR \fIFLAG_LIST\fR \fB]\fR \fIFLAG_LIST\fR := \fIFLAG\fR [\fB,\fR \fIFLAG_LIST\fR ] \fIFLAG\fR := \fB"tcp sequence"\fR | \fB"tcp options"\fR | \fB"ip options"\fR | \fB"skuid"\fR | \fB"ether"\fR | \fB"all"\fR .fi .if n \{\ .RE .\} .sp ثبت گزارش (لاگ) از بسته\&. .PP \fBprefix\fR .RS 4 پیشوند ورودی‌های گزارش (لاگ)\&. .RE .PP \fBgroup\fR .RS 4 گروه گزارش‌گیری\&. .RE .PP \fBsnaplen\fR .RS 4 طول اسنپ (snaplen) برای ثبت لاگ\&. .RE .PP \fBqueue\-threshold\fR .RS 4 آستانه صف\&. .RE .PP \fBlevel\fR .RS 4 سطح لاگ\&. پیش‌فرض \fB"warn"\fR است\&. .RE .PP \fBflags\fR .RS 4 پرچم‌های لاگ\&. .RE .sp همه ویژگی‌ها اختیاری هستند\&. .SS "CT HELPER" .sp .if n \{\ .RS 4 .\} .nf \fB{ "ct helper":\fR \fIEXPRESSION\fR \fB}\fR .fi .if n \{\ .RE .\} .sp فعال کردن دستیار conntrack مشخص‌شده برای این بسته\&. .PP \fBct helper\fR .RS 4 ارجاع به ct helper\&. .RE .SS "METER" .sp .if n \{\ .RS 4 .\} .nf \fB{ "meter": { "name":\fR \fISTRING\fR\fB, "key":\fR \fIEXPRESSION\fR\fB, "stmt":\fR \fISTATEMENT\fR \fB}}\fR .fi .if n \{\ .RE .\} .sp اعمال یک گزاره مشخص با استفاده از یک سنجش‌گر (meter)\&. .PP \fBname\fR .RS 4 نام meter\&. .RE .PP \fBkey\fR .RS 4 کلید meter\&. .RE .PP \fBstmt\fR .RS 4 گزاره meter\&. .RE .SS "QUEUE" .sp .if n \{\ .RS 4 .\} .nf \fB{ "queue": { "num":\fR \fIEXPRESSION\fR\fB, "flags":\fR \fIFLAGS\fR \fB}}\fR \fIFLAGS\fR := \fIFLAG\fR | \fB[\fR \fIFLAG_LIST\fR \fB]\fR \fIFLAG_LIST\fR := \fIFLAG\fR [\fB,\fR \fIFLAG_LIST\fR ] \fIFLAG\fR := \fB"bypass"\fR | \fB"fanout"\fR .fi .if n \{\ .RE .\} .sp ارسال بسته به صف در فضای کاربری (userspace)\&. .PP \fBnum\fR .RS 4 شماره صف\&. .RE .PP \fBflags\fR .RS 4 پرچم‌های صف\&. .RE .SS "VERDICT MAP" .sp .if n \{\ .RS 4 .\} .nf \fB{ "vmap": { "key":\fR \fIEXPRESSION\fR\fB, "data":\fR \fIEXPRESSION\fR \fB}}\fR .fi .if n \{\ .RE .\} .sp اعمال شرطی یک حکم (verdict)\&. .PP \fBkey\fR .RS 4 کلید نگاشت\&. .RE .PP \fBdata\fR .RS 4 عبارت نگاشت شامل جفت‌های مقدار/حکم\&. .RE .SS "CT COUNT" .sp .if n \{\ .RS 4 .\} .nf \fB{ "ct count": { "val":\fR \fINUMBER\fR\fB, "inv":\fR \fIBOOLEAN\fR \fB}}\fR .fi .if n \{\ .RE .\} .sp محدود کردن تعداد اتصالات با استفاده از conntrack\&. .PP \fBval\fR .RS 4 آستانه تعداد اتصالات\&. .RE .PP \fBinv\fR .RS 4 در صورت مقدار \fBtrue\fR، اگر از \fBval\fR فراتر رود مطابقت داده می‌شود\&. در صورت عدم ذکر، پیش‌فرض \fBfalse\fR است\&. .RE .SS "CT TIMEOUT" .sp .if n \{\ .RS 4 .\} .nf \fB{ "ct timeout":\fR \fIEXPRESSION\fR \fB}\fR .fi .if n \{\ .RE .\} .sp اختصاص سیاست مهلت زمانی ردیابی اتصال (conntrack timeout policy)\&. .PP \fBct timeout\fR .RS 4 ارجاع به CT timeout\&. .RE .SS "CT EXPECTATION" .sp .if n \{\ .RS 4 .\} .nf \fB{ "ct expectation":\fR \fIEXPRESSION\fR \fB}\fR .fi .if n \{\ .RE .\} .sp اختصاص انتظار ردیابی اتصال (conntrack expectation)\&. .PP \fBct expectation\fR .RS 4 ارجاع به CT expectation\&. .RE .SS "XT" .sp .if n \{\ .RS 4 .\} .nf \fB{ "xt": { "type":\fR \fITYPENAME\fR\fB, "name":\fR \fISTRING\fR \fB}}\fR \fITYPENAME\fR := \fBmatch\fR | \fBtarget\fR | \fBwatcher\fR .fi .if n \{\ .RE .\} .sp این گزاره نمایانگر یک گزاره xt از رابط سازگاری xtables است\&. این یک سازوکار جایگزین (fallback) برای مواقعی است که ترجمه در دسترس نبوده یا کامل نیست\&. .sp مشاهده این ساختار به این معنی است که مجموعه قوانین (یا بخش‌هایی از آن) توسط \fBiptables\-nft\fR ایجاد شده‌اند و باید از همان ابزار برای مدیریت آن استفاده شود\&. .sp \fBهشدار:\fR ابزار nftables این گزاره‌ها را بازیابی نخواهد کرد\&. .SH "عبارت‌ها (EXPRESSIONS)" .sp عبارت‌ها (expressions) بلوک‌های سازنده (اکثر) گزاره‌ها هستند\&. در پایه‌ای‌ترین شکل، آن‌ها صرفاً مقادیر بی‌واسطه‌ای هستند که به صورت نوع رشته‌ای، عددی یا بولی در JSON نمایش داده می‌شوند\&. .SS "IMMEDIATES" .sp .if n \{\ .RS 4 .\} .nf \fISTRING\fR \fINUMBER\fR \fIBOOLEAN\fR .fi .if n \{\ .RE .\} .sp عبارت‌های بی‌واسطه (immediate) معمولاً برای مقادیر ثابت استفاده می‌شوند\&. برای رشته‌ها، دو حالت خاص وجود دارد: .PP \fB@STRING\fR .RS 4 بخش باقی‌مانده به عنوان نام مجموعه برای ایجاد ارجاع به مجموعه در نظر گرفته می‌شود\&. .RE .PP \fB\e\fR* .RS 4 ساخت یک عبارت نویسه عمومی (wildcard)\&. .RE .SS "LISTS" .sp .if n \{\ .RS 4 .\} .nf \fIARRAY\fR .fi .if n \{\ .RE .\} .sp عبارت‌های فهرستی توسط آرایه‌های معمولی شامل تعداد دلخواهی از عبارت‌ها ساخته می‌شوند\&. .SS "CONCAT" .sp .if n \{\ .RS 4 .\} .nf \fB{ "concat":\fR \fICONCAT\fR \fB}\fR \fICONCAT\fR := \fB[\fR \fIEXPRESSION_LIST\fR \fB]\fR \fIEXPRESSION_LIST\fR := \fIEXPRESSION\fR [\fB,\fR \fIEXPRESSION_LIST\fR ] .fi .if n \{\ .RE .\} .sp الحاق چندین عبارت به یکدیگر\&. .SS "SET" .sp .if n \{\ .RS 4 .\} .nf \fB{ "set":\fR \fISET\fR \fB}\fR \fISET\fR := \fIEXPRESSION\fR | \fB[\fR \fIEXPRESSION_LIST\fR \fB]\fR .fi .if n \{\ .RE .\} .sp این شیء یک مجموعه ناشناس می‌سازد\&. برای نگاشت‌ها، آرایه‌ای از آرایه‌ها با دقیقاً دو عنصر انتظار می‌رود\&. .SS "MAP" .sp .if n \{\ .RS 4 .\} .nf \fB{ "map": { "key":\fR \fIEXPRESSION\fR\fB, "data":\fR \fIEXPRESSION\fR \fB}}\fR .fi .if n \{\ .RE .\} .sp نگاشت یک کلید به یک مقدار\&. .PP \fBkey\fR .RS 4 کلید نگاشت\&. .RE .PP \fBdata\fR .RS 4 عبارت نگاشت شامل جفت‌های مقدار/مقصد\&. .RE .SS "PREFIX" .sp .if n \{\ .RS 4 .\} .nf \fB{ "prefix": { "addr":\fR \fIEXPRESSION\fR\fB, "len":\fR \fINUMBER\fR \fB}}\fR .fi .if n \{\ .RE .\} .sp ساخت یک پیشوند IPv4 یا IPv6 شامل بخش نشانی در \fBaddr\fR و طول پیشوند در \fBlen\fR\&. .SS "RANGE" .sp .if n \{\ .RS 4 .\} .nf \fB{ "range": [\fR \fIEXPRESSION\fR \fB,\fR \fIEXPRESSION\fR \fB] }\fR .fi .if n \{\ .RE .\} .sp ساخت بازه‌ای از مقادیر\&. عنصر اول آرایه نشان‌دهنده کران پایین و عنصر دوم نشان‌دهنده کران بالا است\&. .SS "PAYLOAD" .sp .if n \{\ .RS 4 .\} .nf \fB{ "payload": { "base":\fR \fIBASE\fR\fB, "offset":\fR \fINUMBER\fR\fB, "len":\fR \fINUMBER\fR \fB}}\fR \fB{ "payload": { "protocol":\fR \fISTRING\fR\fB, "field":\fR \fISTRING\fR \fB}}\fR \fIBASE\fR := \fB"ll"\fR | \fB"nh"\fR | \fB"th"\fR .fi .if n \{\ .RE .\} .sp ساخت یک عبارت بار داده (payload)، یعنی ارجاع به بخش خاصی از داده‌های بسته\&. فرم اول یک عبارت بار داده خام ایجاد می‌کند تا به تعداد دلخواهی از بیت‌ها (\fBlen\fR) در انحراف مشخص (\fBoffset\fR) از یک نقطه مبنای داده‌شده (\fBbase\fR) اشاره کند\&. مقادیر \fBbase\fR زیر پذیرفته می‌شوند: .PP \fB"ll"\fR .RS 4 انحراف (offset) نسبت به شروع هدر لایه پیوند داده (Link Layer) سنجیده می‌شود\&. .RE .PP \fB"nh"\fR .RS 4 انحراف نسبت به شروع هدر لایه شبکه (Network Layer) سنجیده می‌شود\&. .RE .PP \fB"th"\fR .RS 4 انحراف نسبت به شروع هدر لایه انتقال (Transport Layer) سنجیده می‌شود\&. .RE .sp فرم دوم امکان ارجاع به یک فیلد را بر اساس نام (\fBfield\fR) در یک هدر بسته مشخص (\fBprotocol\fR) فراهم می‌کند\&. .SS "EXTHDR" .sp .if n \{\ .RS 4 .\} .nf \fB{ "exthdr": { "name":\fR \fISTRING\fR\fB, "field":\fR \fISTRING\fR\fB, "offset":\fR \fINUMBER\fR \fB}}\fR .fi .if n \{\ .RE .\} .sp ایجاد ارجاع به یک فیلد (\fBfield\fR) در یک هدر توسعه IPv6 با نام (\fBname\fR)\&. مقدار \fBoffset\fR تنها برای پروتکل \fBrt0\fR استفاده می‌شود\&. .sp اگر ویژگی \fBfield\fR داده نشود، این عبارت به عنوان بررسی وجود هدر در گزاره \fBmatch\fR به همراه مقدار بولی در سمت راست استفاده می‌شود\&. .SS "TCP OPTION" .sp .if n \{\ .RS 4 .\} .nf \fB{ "tcp option": { "name":\fR \fISTRING\fR\fB, "field":\fR \fISTRING\fR \fB}}\fR .fi .if n \{\ .RE .\} .sp ایجاد ارجاع به یک فیلد (\fBfield\fR) از یک هدر گزینه TCP با نام (\fBname\fR)\&. .sp اگر ویژگی \fBfield\fR داده نشود، عبارت به عنوان بررسی وجود گزینه TCP در یک گزاره \fBmatch\fR به همراه یک مقدار بولی در سمت راست استفاده می‌شود\&. .SS "SCTP CHUNK" .sp .if n \{\ .RS 4 .\} .nf \fB{ "sctp chunk": { "name":\fR \fISTRING\fR\fB, "field":\fR \fISTRING\fR \fB}}\fR .fi .if n \{\ .RE .\} .sp ایجاد ارجاع به یک فیلد (\fBfield\fR) از یک قطعه (chunk) پروتکل SCTP با نام (\fBname\fR)\&. .sp اگر ویژگی \fBfield\fR داده نشود، عبارت به عنوان بررسی وجود قطعه SCTP در یک گزاره \fBmatch\fR به همراه یک مقدار بولی در سمت راست استفاده می‌شود\&. .SS "DCCP OPTION" .sp .if n \{\ .RS 4 .\} .nf \fB{ "dccp option": { "type":\fR \fINUMBER\fR* \fB}}\fR .fi .if n \{\ .RE .\} .sp ایجاد ارجاع به یک گزینه DCCP بر اساس (\fBtype\fR)\&. .sp این عبارت به عنوان بررسی وجود گزینه DCCP در یک گزاره \fBmatch\fR با یک مقدار بولی در سمت راست استفاده می‌شود\&. .SS "META" .sp .if n \{\ .RS 4 .\} .nf \fB{ "meta": { "key":\fR \fIMETA_KEY\fR \fB}}\fR \fIMETA_KEY\fR := \fB"length"\fR | \fB"protocol"\fR | \fB"priority"\fR | \fB"random"\fR | \fB"mark"\fR | \fB"iif"\fR | \fB"iifname"\fR | \fB"iiftype"\fR | \fB"oif"\fR | \fB"oifname"\fR | \fB"oiftype"\fR | \fB"skuid"\fR | \fB"skgid"\fR | \fB"nftrace"\fR | \fB"rtclassid"\fR | \fB"ibrname"\fR | \fB"obrname"\fR | \fB"ibridgename"\fR | \fB"obridgename"\fR | \fB"pkttype"\fR | \fB"cpu"\fR | \fB"iifgroup"\fR | \fB"oifgroup"\fR | \fB"cgroup"\fR | \fB"nfproto"\fR | \fB"l4proto"\fR | \fB"secpath"\fR .fi .if n \{\ .RE .\} .sp ایجاد ارجاع به فراداده (meta data) بسته\&. .SS "RT" .sp .if n \{\ .RS 4 .\} .nf \fB{ "rt": { "key":\fR \fIRT_KEY\fR\fB, "family":\fR \fIRT_FAMILY\fR \fB}}\fR \fIRT_KEY\fR := \fB"classid"\fR | \fB"nexthop"\fR | \fB"mtu"\fR \fIRT_FAMILY\fR := \fB"ip"\fR | \fB"ip6"\fR .fi .if n \{\ .RE .\} .sp ایجاد ارجاع به داده‌های مسیریابی (routing data) بسته\&. .sp ویژگی \fBfamily\fR اختیاری است و به طور پیش‌فرض نامشخص رها می‌شود\&. .SS "CT" .sp .if n \{\ .RS 4 .\} .nf \fB{ "ct": { "key":\fR \fISTRING\fR\fB, "family":\fR \fICT_FAMILY\fR\fB, "dir":\fR \fICT_DIRECTION\fR \fB}}\fR \fICT_FAMILY\fR := \fB"ip"\fR | \fB"ip6"\fR \fICT_DIRECTION\fR := \fB"original"\fR | \fB"reply"\fR .fi .if n \{\ .RE .\} .sp ایجاد ارجاع به داده‌های ردیابی اتصال (conntrack) بسته\&. .sp برخی از کلیدهای CT از جهت (direction) پشتیبانی نمی‌کنند\&. در این حالت، \fBdir\fR نباید داده شود\&. .SS "NUMGEN" .sp .if n \{\ .RS 4 .\} .nf \fB{ "numgen": { "mode":\fR \fING_MODE\fR\fB, "mod":\fR \fINUMBER\fR\fB, "offset":\fR \fINUMBER\fR \fB}}\fR \fING_MODE\fR := \fB"inc"\fR | \fB"random"\fR .fi .if n \{\ .RE .\} .sp ایجاد یک تولیدکننده عدد (number generator)\&. .sp ویژگی \fBoffset\fR اختیاری است و مقدار پیش‌فرض آن 0 می‌باشد\&. .SS "HASH" .sp .if n \{\ .RS 4 .\} .nf \fB{ "jhash": { "mod":\fR \fINUMBER\fR\fB, "offset":\fR \fINUMBER\fR\fB, "expr":\fR \fIEXPRESSION\fR\fB, "seed":\fR \fINUMBER\fR \fB}}\fR \fB{ "symhash": { "mod":\fR \fINUMBER\fR\fB, "offset":\fR \fINUMBER\fR \fB}}\fR .fi .if n \{\ .RE .\} .sp درهم‌سازی (هش کردن) داده‌های بسته\&. .sp ویژگی‌های \fBoffset\fR و \fBseed\fR اختیاری هستند و پیش‌فرض آن‌ها 0 است\&. .SS "FIB" .sp .if n \{\ .RS 4 .\} .nf \fB{ "fib": { "result":\fR \fIFIB_RESULT\fR\fB, "flags":\fR \fIFIB_FLAGS\fR \fB}}\fR \fIFIB_RESULT\fR := \fB"oif"\fR | \fB"oifname"\fR | \fB"type"\fR \fIFIB_FLAGS\fR := \fIFIB_FLAG\fR | \fB[\fR \fIFIB_FLAG_LIST\fR \fB]\fR \fIFIB_FLAG_LIST\fR := \fIFIB_FLAG\fR [\fB,\fR \fIFIB_FLAG_LIST\fR ] \fIFIB_FLAG\fR := \fB"saddr"\fR | \fB"daddr"\fR | \fB"mark"\fR | \fB"iif"\fR | \fB"oif"\fR .fi .if n \{\ .RE .\} .sp انجام جستجو در پایگاه اطلاعات هدایت کرنل (FIB - Forwarding Information Base)\&. .SS "عملیات دودویی (BINARY OPERATION)" .sp .if n \{\ .RS 4 .\} .nf \fB{ "|": [\fR \fIEXPRESSION\fR\fB,\fR \fIEXPRESSIONS\fR \fB] }\fR \fB{ "^": [\fR \fIEXPRESSION\fR\fB,\fR \fIEXPRESSIONS\fR \fB] }\fR \fB{ "&": [\fR \fIEXPRESSION\fR\fB,\fR \fIEXPRESSIONS\fR \fB] }\fR \fB{ "\fR\fB<<\fR\fB": [\fR \fIEXPRESSION\fR\fB,\fR \fIEXPRESSIONS\fR \fB] }\fR \fB{ ">>": [\fR \fIEXPRESSION\fR\fB,\fR \fIEXPRESSIONS\fR \fB] }\fR \fIEXPRESSIONS\fR := \fIEXPRESSION\fR | \fIEXPRESSION\fR\fB,\fR \fIEXPRESSIONS\fR .fi .if n \{\ .RE .\} .sp تمام عملیات دودویی نیازمند آرایه‌ای شامل حداقل دو عبارت هستند که عنصر اول نشان‌دهنده سمت چپ و عنصر دوم نشان‌دهنده سمت راست است\&. عناصر اضافی در آرایه ارائه‌شده پذیرفته می‌شوند و به همان ترتیب به عبارت الحاق می‌گردند\&. .SS "VERDICT" .sp .if n \{\ .RS 4 .\} .nf \fB{ "accept": null }\fR \fB{ "drop": null }\fR \fB{ "continue": null }\fR \fB{ "return": null }\fR \fB{ "jump": { "target":\fR \fISTRING\fR \fB}}\fR \fB{ "goto": { "target":\fR \fISTRING\fR \fB}}\fR .fi .if n \{\ .RE .\} .sp مشابه گزاره \fBverdict\fR است، اما برای استفاده در نگاشت‌های حکم (verdict maps)\&. .sp حکم‌های \fBjump\fR و \fBgoto\fR به نام زنجیره مقصد نیاز دارند\&. .SS "ELEM" .sp .if n \{\ .RS 4 .\} .nf \fB{ "elem": { "val":\fR \fIEXPRESSION\fR\fB, "timeout":\fR \fINUMBER\fR\fB, "expires":\fR \fINUMBER\fR\fB, "comment":\fR \fISTRING\fR \fB}}\fR .fi .if n \{\ .RE .\} .sp شیء عنصر صریح، در صورتی که ویژگی‌های \fBtimeout\fR، \fBexpires\fR یا \fBcomment\fR مورد نظر باشند\&. در غیر این صورت، می‌توان آن را با مقدار \fBval\fR جایگزین کرد\&. .SS "SOCKET" .sp .if n \{\ .RS 4 .\} .nf \fB{ "socket": { "key":\fR \fISOCKET_KEY\fR \fB}}\fR \fISOCKET_KEY\fR := \fB"transparent"\fR .fi .if n \{\ .RE .\} .sp ایجاد ارجاع به سوکت بسته\&. .SS "OSF" .sp .if n \{\ .RS 4 .\} .nf \fB{ "osf": { "key":\fR \fIOSF_KEY\fR\fB, "ttl":\fR \fIOSF_TTL\fR \fB}}\fR \fIOSF_KEY\fR := \fB"name"\fR \fIOSF_TTL\fR := \fB"loose"\fR | \fB"skip"\fR .fi .if n \{\ .RE .\} .sp انجام انگشت‌نگاری سیستم‌عامل (OS fingerprinting)\&. این عبارت معمولاً در سمت چپ یک گزاره \fBmatch\fR استفاده می‌شود\&. .PP \fBkey\fR .RS 4 کدام بخش از اطلاعات انگشت‌نگاری باید تطبیق داده شود\&. در حال حاضر، فقط نام سیستم‌عامل پشتیبانی می‌شود\&. .RE .PP \fBttl\fR .RS 4 تعیین نحوه تطبیق مقدار TTL بسته\&. این ویژگی اختیاری است\&. در صورت حذف، مقدار TTL باید دقیقاً مطابقت داشته باشد\&. مقدار \fBloose\fR مقادیر TTL کمتر از مقدار انگشت‌نگاری را می‌پذیرد\&. مقدار \fBskip\fR مقایسه مقدار TTL را به طور کامل نادیده می‌گیرد\&. .RE .SH "نویسنده (AUTHOR)" .PP \fBPhil Sutter\fR <\&phil@nwl\&.cc\&> .RS 4 نویسنده. .RE