.TH "Flow filter in tc" 8 "20 Oct 2015" "iproute2" "Linux" .SH "نام (NAME)" tc-flow \- فیلتر کنترل ترافیک مبتنی بر جریان (flow) .SH "خلاصه دستور (SYNOPSIS)" .TP حالت نگاشت (Mapping mode): .RS .in +8 .ti -8 .BR tc " " filter " ... " "flow map key " .IR KEY " [ " OPS " ] [ " OPTIONS " ] " .RE .TP حالت درهم‌سازی (Hashing mode): .RS .in +8 .ti -8 .BR tc " " filter " ... " "flow hash keys " .IR KEY_LIST " [ " .B perturb .IR secs " ] [ " OPTIONS " ] " .RE .in +8 .ti -8 .IR OPS " := [ " OPS " ] " OP .ti -8 .IR OPTIONS " := [ " .B divisor .IR NUM " ] [ " .B baseclass .IR ID " ] [ " .B match .IR EMATCH_TREE " ] [ " .B action .IR ACTION_SPEC " ]" .ti -8 .IR KEY_LIST " := [ " KEY_LIST " ] " KEY .ti -8 .IR OP " := { " .BR or " | " and " | " xor " | " rshift " | " addend " } " .I NUM .ti -8 .IR ID " := " X : Y .ti -8 .IR KEY " := { " .BR src " | " dst " | " proto " | " proto-src " | " proto-dst " | " iif " | " .BR priority " | " mark " | " nfct " | " nfct-src " | " nfct-dst " | " .BR nfct-proto-src " | " nfct-proto-dst " | " rt-classid " | " sk-uid " | " .BR sk-gid " | " vlan-tag " | " rxhash " }" .SH "توضیحات (DESCRIPTION)" دسته‌بند .B flow برای گسترش قابلیت‌های درهم‌سازی (hashing) الگوریتم .B SFQ بدون نیاز به کدنویسی توابع درهم‌سازی جدید در هسته طراحی شده است. این دسته‌بند همچنین امکان نگاشت قطعی کلیدها به کلاس‌ها را فراهم می‌کند. .SH "گزینه‌ها (OPTIONS)" .TP .BI action " ACTION_SPEC" اعمال یک عملیات (action) از چارچوب عملیات‌های عمومی روی بسته‌های منطبق. .TP .BI baseclass " ID" یک آفست (میزان جابه‌جایی) برای شناسه کلاس (class ID) حاصل. .I ID می‌تواند .BR root "، " none یا یک شناسه کلاس در مبنای شانزده (هگزادسیمال) به فرم [\fIX\fB:\fR]\fIY\fR باشد. مقدار \fIX\fR باید با هندل اصلی qdisc یا کلاس مطابقت داشته باشد (در صورت حذف، مقدار مناسب به‌طور خودکار انتخاب می‌شود). اگر کل .B baseclass حذف شود، مقدار \fIY\fR به‌طور پیش‌فرض برابر با 1 خواهد بود. .TP .BI divisor " NUM" تعداد باکت‌ها (بخش‌ها) جهت مرتب‌سازی و دسته‌بندی. کلیدها به پیمانه (modulo) .I NUM محاسبه می‌شوند. .TP .BI "hash keys " KEY-LIST اجرای یک عملیات .B jhash2 روی کلیدهای مشخص‌شده در .IR KEY-LIST . نتیجه (به پیمانه .B divisor در صورت تعیین) به عنوان شناسه کلاس در نظر گرفته می‌شود که به صورت اختیاری با مقدار .B baseclass آفست می‌گیرد. می‌توان با استفاده از پارامتر .B perturb یک بازه زمانی (بر حسب ثانیه) تعیین کرد که پس از آن منبع آنتروپی .B jhash2 مجدداً بازسازی شود. .TP .BI "map key " KEY داده‌های بسته که توسط .I KEY مشخص شده‌اند، به شناسه‌های کلاسی که بسته باید به آن‌ها هدایت شود ترجمه می‌شوند. این مقدار می‌تواند قبل از استفاده برای نگاشت، توسط .I OPS دستکاری و دگرگون شود. این عملیات‌ها به ترتیبی که در اینجا ذکر شده اعمال می‌شوند: .RS .TP 4 .BI and " NUM" انجام عملیات بیتی .B AND با مقدار عددی .IR NUM . .TP .BI or " NUM" انجام عملیات بیتی .B OR با مقدار عددی .IR NUM . .TP .BI xor " NUM" انجام عملیات بیتی .B XOR با مقدار عددی .IR NUM . .TP .BI rshift " NUM" شیفت دادن مقدار .I KEY به سمت راست به اندازه .I NUM بیت. .TP .BI addend " NUM" افزودن .I NUM به مقدار .IR KEY . .RE .RS برای عملیات‌های .BR or "، " and "، " xor و .BR rshift ، مقدار .I NUM یک عدد صحیح بدون علامت ۳۲ بیتی فرض می‌شود. برای عملیات .BR addend ، مقدار .I NUM می‌تواند دارای یک علامت منفی ('-') در ابتدا باشد تا به جای جمع، تفریق انجام شود و برای کلیدهای .BR src "، " dst "، " nfct-src و .BR nfct-dst می‌توان آن را در قالب نمادگذاری آدرس IP مشخص کرد. برای درک بهتر به مثال‌های زیر مراجعه کنید. .RE .TP .BI match " EMATCH_TREE" تطبیق بسته‌ها با استفاده از زیرساخت تطبیق گسترش‌یافته (extended match). برای توضیحات تفصیلی درباره ساختار نحوی مجاز در .IR EMATCH_TREE به .BR tc-ematch (8) مراجعه کنید. .SH "کلیدها (KEYS)" در حالت نگاشت (mapping mode)، از یک کلید منفرد (پس از دگرگونی اختیاری) برای ساخت شناسه کلاس استفاده می‌شود. شناسه حاصل در بیشتر موارد قابل پیش‌بینی و استنتاج است. در حالت درهم‌سازی (hashing mode)، می‌توان تعدادی کلید را تعیین کرد که درهم‌سازی روی آن‌ها انجام شده و خروجی حاصل به عنوان شناسه کلاس به کار می‌رود. این شناسه از قبل قابل پیش‌بینی نیست و اگر بازه زمانی .B perturb تعیین شده باشد، حتی ممکن است در طول زمان برای یک جریان معین تغییر کند. محدوده شناسه‌های کلاس را می‌توان با گزینه .B divisor که به عنوان مقسوم‌علیه در محاسبه پیمانه (modulo) استفاده می‌شود، محدود کرد. .TP .BR src "، " dst استفاده از آدرس مبدأ یا مقصد به عنوان کلید. در مورد IPv4 و TIPC، این مقدار برابر با آدرس واقعی است. برای IPv6، آدرس ۱۲۸ بیتی با انجام عملیات XOR روی چهار کلمه ۳۲ بیتی، به یک مقدار ۳۲ بیتی خلاصه (fold) می‌شود. در سایر موارد، آدرس سوکت داخلی هسته (پس از خلاصه شدن به ۳۲ بیت در سیستم‌های ۶۴ بیتی) استفاده می‌شود. .TP .B proto استفاده از شماره پروتکل لایه چهارم به عنوان کلید. .TP .B proto-src استفاده از درگاه (پورت) مبدأ لایه چهارم به عنوان کلید. در صورت عدم دسترسی، آدرس سوکت داخلی هسته به جای آن استفاده می‌شود. .TP .B proto-dst استفاده از درگاه (پورت) مقصد لایه چهارم به عنوان کلید. در صورت عدم دسترسی، آدرس dst_entry داخلی هسته مرتبط پس از اعمال XOR با شماره پروتکل لایه سوم بسته، استفاده می‌شود. .TP .B iif استفاده از ایندکس رابط شبکه ورودی به عنوان کلید. .TP .B priority استفاده از اولویت بسته به عنوان کلید. معمولاً این مقدار برابر با مقدار DSCP/ECN در هدر IP است. .TP .B mark استفاده از .B fwmark مربوط به netfilter به عنوان کلید. .TP .B nfct استفاده از آدرس مدخل کانترک (conntrack) مرتبط به عنوان کلید. .TP .BR nfct-src "، " nfct-dst "، " nfct-proto-src "، " nfct-proto-dst این‌ها نسخه‌های آگاه از کانترک (conntrack-aware) برای .BR src "، " dst "، " proto-src و .B proto-dst هستند. در صورت استفاده از NAT، این‌ها اساساً مقادیر هدر بسته پیش از اعمال NAT هستند. .TP .B rt-classid استفاده از قلمرو (realm) مدخل جدول مسیریابی مقصد بسته به عنوان کلید. .TP .B sk-uid .TQ .B sk-gid برای بسته‌های تولیدشده به صورت محلی، شناسه کاربر (UID) یا شناسه گروه (GID) که سوکت مبدأ به آن تعلق دارد به عنوان کلید استفاده می‌شود. .TP .B vlan-tag استفاده از شناسه VLAN بسته به عنوان کلید. .TP .B rxhash استفاده از هش جریان (flow hash) به عنوان کلید. .SH "مثال‌ها (EXAMPLES)" .TP درهم‌سازی کلاسیک SFQ: .EX tc filter add ... flow hash \ keys src,dst,proto,proto-src,proto-dst divisor 1024 .EE .TP درهم‌سازی کلاسیک SFQ، اما با استفاده از اطلاعات کانترک (conntrack) جهت عملکرد صحیح همراه با NAT: .EX tc filter add ... flow hash \ keys nfct-src,nfct-dst,proto,nfct-proto-src,nfct-proto-dst \ divisor 1024 .EE .TP نگاشت IPهای مقصد در محدوده 192.168.0.0/24 به شناسه‌های کلاس 1 تا 256: .EX tc filter add ... flow map \ key dst addend -192.168.0.0 divisor 256 .EE .TP روش جایگزین برای مثال بالا: .EX tc filter add ... flow map \ key dst and 0xff .EE .TP همان مورد، اما با ترتیب معکوس: .EX tc filter add ... flow map \ key dst and 0xff xor 0xff .EE .SH "همچنین ببینید (SEE ALSO)" .BR tc (8), .BR tc-ematch (8), .BR tc-sfq (8)