.TH TC 8 "16 December 2001" "iproute2" "Linux" .SH "نام (NAME)" tc \- نمایش و مدیریت کنترل ترافیک لینوکس .SH "خلاصه دستور (SYNOPSIS)" .B tc .RI "[ " OPTIONS " ]" .B qdisc [ add | change | replace | link | delete ] dev \fIDEV\fR .B [ parent \fIqdisc-id\fR .B | root ] .B [ handle \fIqdisc-id\fR ] .B [ ingress_block \fIBLOCK_INDEX\fR ] .B [ egress_block \fIBLOCK_INDEX\fR ] qdisc [ qdisc specific parameters ] .P .B tc .RI "[ " OPTIONS " ]" .B class [ add | change | replace | delete | show ] dev \fIDEV\fR .B parent \fIqdisc-id\fR .B [ classid \fIclass-id\fR ] qdisc [ qdisc specific parameters ] .P .B tc .RI "[ " OPTIONS " ]" .B filter [ add | change | replace | delete | get ] dev \fIDEV\fR .B [ parent \fIqdisc-id\fR .B | root ] [ handle \fIfilter-id\fR ] .B protocol \fIprotocol\fR .B prio \fIpriority\fR filtertype [ filtertype specific parameters ] .B flowid \fIflow-id\fR .B tc .RI "[ " OPTIONS " ]" .B filter [ add | change | replace | delete | get ] block \fIBLOCK_INDEX\fR .B [ handle \fIfilter-id\fR ] .B protocol \fIprotocol\fR .B prio \fIpriority\fR filtertype [ filtertype specific parameters ] .B flowid \fIflow-id\fR .B tc .RI "[ " OPTIONS " ]" .B chain [ add | delete | get ] dev \fIDEV\fR .B [ parent \fIqdisc-id\fR .B | root ]\fR filtertype [ filtertype specific parameters ] .B tc .RI "[ " OPTIONS " ]" .B chain [ add | delete | get ] block \fIBLOCK_INDEX\fR filtertype [ filtertype specific parameters ] .B tc .RI "[ " OPTIONS " ]" .RI "[ " FORMAT " ]" .B qdisc { show | list } [ dev \fIDEV\fR .B ] [ root | ingress | handle \fIQHANDLE\fR .B | parent \fICLASSID\fR .B ] [ invisible ] .P .B tc .RI "[ " OPTIONS " ]" .RI "[ " FORMAT " ]" .B class show dev \fIDEV\fR .P .B tc .RI "[ " OPTIONS " ]" .B filter show dev \fIDEV\fR .P .B tc .RI "[ " OPTIONS " ]" .B filter show block \fIBLOCK_INDEX\fR .P .B tc .RI "[ " OPTIONS " ]" .B chain show dev \fIDEV\fR .P .B tc .RI "[ " OPTIONS " ]" .B chain show block \fIBLOCK_INDEX\fR .P .B tc .RI "[ " OPTIONS " ]" .B monitor [ file \fIFILENAME\fR .B ] .P .ti 8 .IR OPTIONS " := {" \fB[ -force ] -b\fR[\fIatch\fR] \fB[ filename ] \fR| \fB[ \fB-n\fR[\fIetns\fR] name \fB] \fR| \fB[ \fB-N\fR[\fIumeric\fR] \fB] \fR| \fB[ \fB-nm \fR| \fB-nam\fR[\fIes\fR] \fB] \fR| \fB[ \fR{ \fB-cf \fR| \fB-c\fR[\fIonf\fR] \fR} \fB[ filename ] \fB] \fR \fB[ -t\fR[imestamp\fR] \fB\] \fR| \fB[ -t\fR[short\fR] \fR| \fB[ -o\fR[neline\fR] \fB] \fR| \fB[ -echo ]\fR } .ti 8 .IR FORMAT " := {" \fB\-s\fR[\fItatistics\fR] | \fB\-d\fR[\fIetails\fR] | \fB\-r\fR[\fIaw\fR] | \fB\-i\fR[\fIec\fR] | \fB\-g\fR[\fIraph\fR] | \fB\-j\fR[\fIjson\fR] | \fB\-p\fR[\fIretty\fR] | \fB\-col\fR[\fIor\fR] } .SH "توضیحات (DESCRIPTION)" دستور .B tc برای پیکربندی کنترل ترافیک (Traffic Control) در هسته لینوکس استفاده می‌شود. کنترل ترافیک از موارد زیر تشکیل شده است: .TP شکل‌دهی (SHAPING) هنگامی که ترافیک شکل‌دهی می‌شود، نرخ ارسال آن تحت کنترل قرار می‌گیرد. شکل‌دهی می‌تواند فراتر از کاهش پهنای باند موجود باشد \- همچنین برای هموار کردن جهش‌های ناگهانی ترافیک جهت رفتار بهتر شبکه استفاده می‌شود. شکل‌دهی روی ترافیک خروجی (egress) رخ می‌دهد. .TP زمان‌بندی (SCHEDULING) با زمان‌بندی ارسال بسته‌ها، می‌توان پاسخ‌دهی را برای ترافیکی که به آن نیاز دارد بهبود بخشید، در حالی که همچنان پهنای باند برای انتقال‌های حجیم داده تضمین می‌گردد. بازآرایی بسته، اولویت‌بندی نیز نامیده می‌شود و تنها بر روی ترافیک خروجی رخ می‌دهد. .TP پالایش و نظارت (POLICING) در حالی که شکل‌دهی با ارسال ترافیک سر و کار دارد، پالایش به ترافیک ورودی مربوط می‌شود. بنابراین پالایش روی ترافیک ورودی (ingress) رخ می‌دهد. .TP دور انداختن (DROPPING) ترافیکی که از پهنای باند تعیین‌شده فراتر رود می‌تواند بلافاصله دور انداخته شود، هم روی ترافیک ورودی و هم خروجی. .P پردازش ترافیک توسط سه نوع شیء کنترل می‌شود: qdiscها، کلاس‌ها و فیلترها. .SH "انضباط‌های صف (QDISCS)" .B qdisc کوتاه‌شده‌ی «queueing discipline» (انضباط صف‌بندی) است و مفهومی بنیادین برای درک کنترل ترافیک محسوب می‌شود. هر زمان هسته نیاز به ارسال بسته‌ای به یک رابط داشته باشد، آن را در .B qdisc پیکربندی‌شده برای آن رابط .B صف‌بندی (enqueue) می‌کند. بلافاصله پس از آن، هسته تلاش می‌کند تا جای ممکن بسته‌ها را از qdisc خارج کند (dequeue) تا به راه‌انداز کارت شبکه تحویل دهد. یک QDISC ساده، نمونه‌ی «pfifo» است که هیچ پردازشی انجام نمی‌دهد و یک صف خالص ورود به ترتیب (First In, First Out) است. با این حال، هنگامی که رابط شبکه موقتاً توان مدیریت ترافیک را ندارد، ترافیک را ذخیره می‌کند. .SH "کلاس‌ها (CLASSES)" برخی qdiscها می‌توانند شامل کلاس‌هایی باشند که خود شامل qdiscهای بیشتری هستند \- در این صورت ترافیک ممکن است در هر یک از qdiscهای درونی که داخل .B کلاس‌ها هستند صف‌بندی شود. هنگامی که هسته تلاش می‌کند بسته‌ای را از چنین .B qdisc دارای کلاس (classful) خارج کند، آن بسته می‌تواند از هر یک از کلاس‌ها بیاید. یک qdisc برای نمونه می‌تواند با تلاش برای خارج کردن بسته از کلاس‌هایی خاص پیش از دیگران، برخی از انواع ترافیک را اولویت‌بندی کند. .SH "فیلترها (FILTERS)" یک .B فیلتر توسط یک qdisc دارای کلاس استفاده می‌شود تا تعیین کند یک بسته در کدام کلاس صف‌بندی خواهد شد. هرگاه ترافیک به کلاسی با زیرکلاس‌ها برسد، باید دسته‌بندی شود. روش‌های گوناگونی را می‌توان برای این کار به کار گرفت که فیلترها یکی از آن‌ها هستند. تمام فیلترهای متصل به کلاس فراخوانی می‌شوند تا زمانی که یکی از آن‌ها حکمی صادر کند. اگر هیچ حکمی صادر نشود، ممکن است معیارهای دیگری در دسترس باشند. این موضوع برای هر qdisc متفاوت است. توجه به این نکته مهم است که فیلترها .B درون qdiscها قرار دارند \- آن‌ها تصمیم‌گیرنده نهایی رویدادها نیستند. فیلترهای موجود عبارتند از: .TP basic فیلتر کردن بسته‌ها بر اساس یک عبارت ematch. برای جزئیات به .BR tc-ematch (8) مراجعه کنید. .TP bpf فیلتر کردن بسته‌ها با استفاده از (e)BPF. برای جزئیات به .BR tc-bpf (8) مراجعه کنید. .TP cgroup فیلتر کردن بسته‌ها بر اساس گروه کنترل (cgroup) فرآیند آن‌ها. برای جزئیات به .BR tc-cgroup (8) مراجعه کنید. .TP flow, flower دسته‌بندی‌کننده‌های مبتنی بر جریان، که بسته‌ها را بر اساس جریان آن‌ها (شناسایی‌شده با کلیدهای قابل انتخاب) فیلتر می‌کنند. برای جزئیات به .BR tc-flow (8) و .BR tc-flower (8) مراجعه کنید. .TP fw فیلتر کردن بر اساس fwmark. مستقیماً مقدار fwmark را به کلاس ترافیک نگاشت می‌کند. به .BR tc-fw (8) مراجعه کنید. .TP route فیلتر کردن بسته‌ها بر اساس جدول مسیریابی. برای جزئیات به .BR tc-route (8) مراجعه کنید. .TP u32 فیلتر کردن عمومی بر روی داده‌های دلخواه بسته، به کمک نحو دستوری جهت انتزاع عملیات رایج. برای جزئیات به .BR tc-u32 (8) مراجعه کنید. .TP matchall فیلتر کنترل ترافیک که با هر بسته‌ای مطابقت دارد. برای جزئیات به .BR tc-matchall (8) مراجعه کنید. .SH "رویدادهای صف (QEVENTS)" انضباط‌های صف (Qdiscs) ممکن است هنگام وقوع رویدادهای خاص در qdisc، اقدامات پیکربندی‌شده توسط کاربر را فراخوانی کنند. هر qevent می‌تواند بلااستفاده باشد، یا یک بلوک به آن متصل باشد. سپس فیلترها با استفاده از نحو "tc block BLOCK_IDX" به این بلوک متصل می‌شوند. هنگامی که qevent مرتبط با نقطه اتصال رخ می‌دهد، بلوک اجرا می‌شود. برای مثال، بسته ممکن است بسته به qdisc و qevent مورد نظر، دور انداخته شود یا به تأخیر بیفتد، و غیره. برای مثال: .PP .nf .RS tc qdisc add dev eth0 root handle 1: red limit 500K avpkt 1K \\ qevent early_drop block 10 .RE .RS tc filter add block 10 matchall action mirred egress mirror dev eth1 .RE .fi .SH "انضباط‌های صف بدون کلاس (CLASSLESS QDISCS)" انضباط‌های صف بدون کلاس عبارتند از: .TP choke مکانیزم CHOKe (مخفف CHOose and Keep برای جریان‌های پاسخ‌گو، و CHOose and Kill برای جریان‌های غیرپاسخ‌گو) یک qdisc بدون کلاس است که هم برای شناسایی و هم برای جریمه کردن جریان‌هایی که صف را به انحصار درمی‌آورند طراحی شده است. CHOKe گونه‌ای از RED است و پیکربندی آن شبیه به RED می‌باشد. .TP codel الگوریتم CoDel (با تلفظ «کادِل») یک طرح الگوریتم مدیریت صف فعال تطبیقی بدون پیچیدگی پیکربندی ("no-knobs" AQM) است که برای برطرف کردن کاستی‌های RED و گونه‌های آن توسعه یافته است. .TP [p|b]fifo ساده‌ترین qdisc قابل استفاده، با رفتار خالص ورود به ترتیب (First In, First Out). محدود بر حسب تعداد بسته یا بر حسب بایت. .TP fq زمان‌بند صف منصفانه (Fair Queue Scheduler) که گام‌بندی TCP (یا TCP pacing) را پیاده‌سازی می‌کند و تا میلیون‌ها جریان همزمان برای هر qdisc مقیاس‌پذیر است. .TP fq_codel تأخیر کنترل‌شده با صف‌بندی منصفانه (Fair Queuing Controlled Delay) یک انضباط صف است که صف‌بندی منصفانه را با طرح CoDel AQM ترکیب می‌کند. FQ_Codel از یک مدل تصادفی برای دسته‌بندی بسته‌های ورودی به جریان‌های مختلف استفاده می‌کند و برای فراهم آوردن سهم منصفانه پهنای باند برای تمام جریان‌های مصرف‌کننده صف به کار می‌رود. هر یک از این جریان‌ها توسط انضباط صف CoDel مدیریت می‌شود. به دلیل استفاده داخلی Codel از صف FIFO، بازآرایی درون یک جریان رخ نمی‌دهد. .TP fq_pie مکانیزم FQ-PIE (مخفف Flow Queuing with Proportional Integral controller Enhanced) یک انضباط صف‌بندی است که صف‌بندی جریان را با طرح PIE AQM ترکیب می‌کند. FQ-PIE از تابع هش جنکینز برای دسته‌بندی بسته‌های ورودی به جریان‌های گوناگون استفاده می‌کند و جهت تخصیص سهم منصفانه پهنای باند به تمام جریان‌های استفاده‌کننده از qdisc به کار می‌رود. هر یک از این جریان‌ها توسط الگوریتم PIE مدیریت می‌شود. .TP gred مکانیزم Generalized Random Early Detection چندین صف RED را ترکیب می‌کند تا به اولویت‌های مختلف دور انداختن دست یابد. این کار برای پیاده‌سازی هدایت تضمین‌شده (Assured Forwarding در RFC 2597) الزامی است. .TP hhf فیلتر ضربه‌زن سنگین (Heavy-Hitter Filter) میان جریان‌های کوچک و متضاد آن، یعنی جریان‌های سنگین (heavy-hitters) تمایز قائل می‌شود. هدف شناسایی جریان‌های سنگین و انتقال آن‌ها به یک صف جداگانه با اولویت کمتر است تا ترافیک حجیم بر تأخیر ترافیک حساس تأثیری نگذارد. .TP ingress این یک qdisc ویژه است زیرا بر ترافیک ورودی به یک رابط اعمال می‌شود و امکان فیلتر و پالایش (policing) آن را فراهم می‌سازد. .TP mqprio انضباط صف Multiqueue Priority Qdisc یک انضباط صف ساده است که نگاشت جریان‌های ترافیک به محدوده‌های صف سخت‌افزاری را با استفاده از اولویت‌ها و یک نگاشت قابل پیکربندی اولویت به کلاس ترافیک امکان‌پذیر می‌کند. یک کلاس ترافیک در این زمینه، مجموعه‌ای از کلاس‌های پیوسته qdisc است که به صورت ۱:۱ به مجموعه‌ای از صف‌های نمایان‌شده در سخت‌افزار نگاشت می‌شوند. .TP multiq مکانیزم Multiqueue یک qdisc بهینه‌سازی‌شده برای دستگاه‌هایی با چندین صف ارسال (Tx) است. این مکانیزم برای سخت‌افزارهایی افزوده شده که تمایل به جلوگیری از مسدودسازی سر خط (head-of-line blocking) دارند. این مکانیزم باندهای مختلف را پیمایش می‌کند و پیش از خارج کردن بسته از صف بررسی می‌کند که صف سخت‌افزاری مرتبط با آن باند متوقف نشده باشد. .TP netem شبیه‌ساز شبکه (Network Emulator) افزونه‌ای برای امکانات کنترل ترافیک لینوکس است که امکان اضافه کردن تأخیر، اتلاف بسته، تکرار و سایر ویژگی‌ها را به بسته‌های خروجی از یک رابط شبکه انتخابی فراهم می‌سازد. .TP pfifo_fast یک qdisc استاندارد برای هسته‌های فعال با 'Advanced Router'. شامل یک صف سه باندی است که به فلگ‌های Type of Service و همچنین اولویت اختصاص‌یافته به یک بسته احترام می‌گذارد. .TP pie کنترل‌کننده تناسبی-انتگرالی بهبودیافته (PIE) یک طرح مدیریت صف فعال مبتنی بر نظریه کنترل است. این طرح بر مبنای کنترل‌کننده تناسبی انتگرالی ساخته شده اما هدف آن کنترل تأخیر است. .TP red تشخیص زودهنگام تصادفی (Random Early Detection) ازدحام فیزیکی را با دور انداختن تصادفی بسته‌ها در هنگام نزدیک شدن به تخصیص پهنای باند پیکربندی‌شده شبیه‌سازی می‌کند. برای برنامه‌های با پهنای باند بسیار بالا بسیار مناسب است. .TP sfb مکانیزم Stochastic Fair Blue یک qdisc بدون کلاس برای مدیریت ازدحام بر اساس سابقه اتلاف بسته و میزان بهره‌برداری از پیوند است، ضمن این که سعی می‌کند مانع از تأثیر جریان‌های غیرپاسخ‌گو (یعنی جریان‌هایی که به علامت‌گذاری ازدحام یا بسته‌های دور ریخته‌شده واکنش نشان نمی‌دهند) بر کارایی جریان‌های پاسخ‌گو شود. بر خلاف RED که احتمال علامت‌گذاری باید در آن پیکربندی شود، BLUE تلاش می‌کند احتمال ایده‌آل علامت‌گذاری را به صورت خودکار تعیین کند. .TP sfq صف‌بندی منصفانه تصادفی (Stochastic Fairness Queueing) ترافیک صف‌بندی‌شده را بازآرایی می‌کند تا هر «نشست» به نوبت بتواند یک بسته ارسال کند. .TP tbf فیلتر سطل توکن (Token Bucket Filter) برای کند کردن ترافیک تا یک نرخ دقیقاً تنظیم‌شده مناسب است. برای پهنای باندهای بزرگ مقیاس‌پذیری خوبی دارد. .SH "پیکربندی انضباط‌های صف بدون کلاس (CONFIGURING CLASSLESS QDISCS)" در غیاب qdiscهای دارای کلاس، qdiscهای بدون کلاس تنها می‌توانند به ریشه (root) یک دستگاه متصل شوند. نحو کامل: .P .B tc qdisc add dev \fIDEV\fR .B root QDISC QDISC-PARAMETERS برای حذف، این دستور را صادر کنید: .P .B tc qdisc del dev \fIDEV\fR .B root انضباط صف .B pfifo_fast در غیاب یک qdisc پیکربندی‌شده، پیش‌فرض خودکار سیستم است. .SH "انضباط‌های صف دارای کلاس (CLASSFUL QDISCS)" انضباط‌های صف دارای کلاس عبارتند از: .TP ATM نگاشت جریان‌ها به مدارهای مجازی یک دستگاه مبتنی بر asynchronous transfer mode. .TP DRR زمان‌بند کسری چرخشی (Deficit Round Robin Scheduler) جایگزینی انعطاف‌پذیرتر برای Stochastic Fairness Queuing است. بر خلاف SFQ، هیچ صف توکاری وجود ندارد \-\- شما باید کلاس‌ها را اضافه کرده و سپس فیلترها را تنظیم کنید تا بسته‌ها بر این اساس دسته‌بندی شوند. این امر می‌تواند برای نمونه جهت استفاده از qdiscهای RED با تنظیمات مختلف برای ترافیک خاص مفید باشد. هیچ کلاس پیش‌فرضی وجود ندارد \-\- اگر بسته‌ای نتواند دسته‌بندی شود، دور انداخته می‌شود. .TP ETS انضباط صف ETS قابلیتی است که عملکردهای qdiscهای PRIO و DRR را در یک زمان‌بند ادغام می‌کند. ETS پیکربندی مجموعه‌ای از باندهای اشتراک پهنای باند و اولویت سخت‌گیرانه را جهت پیاده‌سازی انتخاب ارسال شرح‌داده‌شده در 802.1Qaz آسان می‌کند. .TP HFSC منحنی سرویس منصفانه سلسله‌مراتبی (Hierarchical Fair Service Curve) تخصیص دقیق پهنای باند و تأخیر را برای کلاس‌های برگ تضمین کرده و پهنای باند مازاد را به طور منصفانه تخصیص می‌دهد. بر خلاف HTB، از دور انداختن بسته‌ها برای دستیابی به تأخیرهای پایین استفاده می‌کند که نشست‌های تعاملی از آن بهره‌مند می‌شوند. .TP HTB سطل توکن سلسله‌مراتبی (Hierarchy Token Bucket) سلسله‌مراتب غنی از کلاس‌های اشتراک پیوند را با تأکید بر انطباق با شیوه‌های موجود پیاده‌سازی می‌کند. HTB تضمین پهنای باند برای کلاس‌ها را تسهیل می‌کند، ضمن اینکه امکان تعیین محدودیت‌های بالایی را برای اشتراک بین کلاسی نیز فراهم می‌سازد. این ابزار شامل عناصر شکل‌دهی بر پایه TBF است و می‌تواند کلاس‌ها را اولویت‌بندی کند. .TP PRIO انضباط صف PRIO یک ظرف بدون شکل‌دهی برای تعداد قابل تنظیمی از کلاس‌ها است که بسته‌های آن‌ها به ترتیب از صف خارج می‌شوند. این امر امکان اولویت‌بندی آسان ترافیک را فراهم می‌سازد، به طوری که کلاس‌های پایین‌تر تنها در صورتی قادر به ارسال هستند که کلاس‌های بالاتر بسته‌ای در دسترس نداشته باشند. برای تسهیل پیکربندی، بیت‌های Type Of Service به طور پیش‌فرض رعایت می‌شوند. .TP QFQ صف‌بندی منصفانه سریع (Quick Fair Queueing) یک زمان‌بند با پیچیدگی O(1) است که تضمین‌های نزدیک به بهینه ارائه می‌دهد، و نخستین الگوریتمی است که با هزینه ثابت و مستقل از تعداد گروه‌ها و طول بسته به این هدف دست یافته است. الگوریتم QFQ فاقد هرگونه حلقه است و از دستورالعمل‌ها و ساختارهای داده بسیار ساده بهره می‌برد که برای پیاده‌سازی سخت‌افزاری بسیار مناسب هستند. .SH "اصول عملکرد (THEORY OF OPERATION)" کلاس‌ها یک درخت تشکیل می‌دهند که در آن هر کلاس یک والد منفرد دارد. یک کلاس می‌تواند چندین فرزند داشته باشد. برخی qdiscها امکان افزودن کلاس‌ها در زمان اجرا را می‌دهند (مانند HTB)، در حالی که برخی دیگر (مانند PRIO) با تعداد فرزندان ثابتی ایجاد می‌شوند. انضباط‌های صفی که امکان افزودن پویای کلاس‌ها را می‌دهند می‌توانند صفر یا چند زیرکلاس داشته باشند که ترافیک ممکن است در آن‌ها صف‌بندی شود. علاوه بر این، هر کلاس شامل یک .B qdisc برگ (leaf qdisc) است که به طور پیش‌فرض دارای رفتار .B pfifo می‌باشد، هرچند می‌توان qdisc دیگری را به جای آن متصل کرد. این qdisc نیز می‌تواند مجدداً شامل کلاس‌ها باشد، اما هر کلاس تنها می‌تواند یک qdisc برگ داشته باشد. هنگامی که یک بسته وارد یک qdisc دارای کلاس می‌شود، می‌تواند در یکی از کلاس‌های درون آن .B دسته‌بندی شود. سه معیار در دسترس است، هرچند همه qdiscها از هر سه مورد استفاده نمی‌کنند: .TP فیلترهای tc اگر فیلترهای tc به یک کلاس متصل باشند، ابتدا برای دستورالعمل‌های مربوطه بررسی می‌شوند. فیلترها می‌توانند بر روی تمامی فیلدهای هدر یک بسته، و همچنین نشان فایروال (firewall mark) اعمال‌شده توسط iptables تطبیق داده شوند. .TP Type of Service (نوع سرویس) برخی qdiscها دارای قواعد توکاری برای دسته‌بندی بسته‌ها بر اساس فیلد TOS هستند. .TP skb->priority برنامه‌های فضای کاربری می‌توانند یک \fIclass-id\fR را در فیلد 'skb->priority' با استفاده از گزینه SO_PRIORITY کدگذاری کنند. .P هر گره درون درخت می‌تواند فیلترهای مختص به خود را داشته باشد، اما فیلترهای سطح بالاتر نیز ممکن است مستقیماً به کلاس‌های پایین‌تر اشاره کنند. اگر دسته‌بندی با موفقیت انجام نشود، بسته‌ها در qdisc برگ متصل به آن کلاس صف‌بندی می‌شوند. با این حال، صفحات راهنمای اختصاصی هر qdisc را برای جزئیات بررسی فرمایید. .SH "نام‌گذاری (NAMING)" تمامی qdiscها، کلاس‌ها و فیلترها دارای شناسه‌هایی (IDs) هستند که می‌توانند صراحتاً تعیین شوند یا به طور خودکار اختصاص یابند. شناسه‌ها شامل یک شماره .BR اصلی " (major) و یک شماره " فرعی (minor) هستند که با علامت دو نقطه از یکدیگر جدا می‌شوند \- .BR major ":" minor "." هر دوی شماره‌های .BR major " و " minor اعدادی در مبنای ۱۶ (هگزادسیمال) بوده و به ۱۶ بیت محدود هستند. دو مقدار خاص وجود دارد: ریشه (root) با شماره‌های .BR major " و " minor تماماً یک (همه بیت‌ها ۱) نشان داده می‌شود، و مقدار نامشخص (unspecified) تماماً صفر است. .TP انضباط‌های صف (QDISCS) به یک qdisc که پتانسیل داشتن فرزندان را دارد، یک شماره .B major اختصاص می‌یابد که 'handle' (دستگیره) نام دارد و فضای نام شماره .B minor را برای کلاس‌ها در دسترس باقی می‌گذارد. دستگیره به صورت '10:' نشان داده می‌شود. مرسوم است که برای qdiscهایی که انتظار می‌رود فرزندانی داشته باشند، صراحتاً یک دستگیره تعیین گردد. .TP کلاس‌ها (CLASSES) کلاس‌هایی که زیر یک qdisc قرار دارند، شماره .B major آن qdisc را به اشتراک می‌گذارند، اما هر یک دارای یک شماره .B minor جداگانه به نام 'classid' هستند که هیچ ارتباطی با کلاس‌های والد خود ندارد و تنها به qdisc والد آن‌ها وابسته است. همان رسم نام‌گذاری که برای qdiscها وجود دارد، در اینجا نیز اعمال می‌شود. .TP فیلترها (FILTERS) فیلترها دارای شناسه‌ای سه بخشی هستند که تنها هنگام استفاده از سلسله‌مراتب فیلترهای هش‌شده مورد نیاز است. .SH "پارامترها (PARAMETERS)" پارامترهای زیر به طور گسترده در TC استفاده می‌شوند. برای سایر پارامترها به صفحات راهنمای انضباط‌های صف مجزا مراجعه کنید. .TP نرخ‌ها (RATES) پهنای باند یا نرخ‌های انتقال. این پارامترها یک عدد اعشاری را می‌پذیرند که احتمالاً با یک واحد (هر دو واحدهای SI و IEC پشتیبانی می‌شوند) یا یک عدد اعشاری همراه با نویسه‌ی '%' برای مشخص کردن نرخ به صورت درصدی از سرعت دستگاه (مانند 5% یا 99.5%) همراه است. هشدار: تعیین نرخ به صورت درصد به معنای کسری از سرعت فعلی است؛ در صورت تغییر سرعت، مقدار مجدداً محاسبه نخواهد شد. .RS .TP bit یا یک عدد ساده بیت بر ثانیه .TP kbit کیلوبیت بر ثانیه .TP mbit مگابیت بر ثانیه .TP gbit گیگابیت بر ثانیه .TP tbit ترابیت بر ثانیه .TP bps بایت بر ثانیه .TP kbps کیلوبایت بر ثانیه .TP mbps مگابایت بر ثانیه .TP gbps گیگابایت بر ثانیه .TP tbps ترابایت بر ثانیه .P برای تعیین مقادیر در واحدهای IEC، پیشوند SI (یعنی k-، m-، g-، t-) را به ترتیب با پیشوندهای IEC (یعنی ki-، mi-، gi- و ti-) جایگزین کنید. .P ابزار TC نرخ‌ها را در داخل به صورت یک عدد صحیح بدون علامت ۳۲ بیتی بر حسب bps ذخیره می‌کند، بنابراین می‌توان حداکثر نرخ 4294967295 bps را تعیین کرد. .RE .TP زمان‌ها (TIMES) طول مدت زمان. می‌تواند به صورت یک عدد اعشاری همراه با یک واحد اختیاری مشخص شود: .RS .TP s، sec یا secs ثانیه کامل .TP ms، msec یا msecs میلی‌ثانیه .TP us، usec، usecs یا یک عدد ساده میکروثانیه. .P ابزار TC واحد زمانی اختصاصی خود را تعریف کرده است (برابر با میکروثانیه) و مقادیر زمانی را به صورت عدد صحیح بدون علامت ۳۲ بیتی ذخیره می‌کند، بنابراین می‌توان حداکثر مقدار زمانی 4294967295 usecs را تعیین نمود. .RE .TP اندازه‌ها (SIZES) میزان داده. می‌تواند به صورت یک عدد اعشاری همراه با یک واحد اختیاری مشخص شود: .RS .TP b یا یک عدد ساده بایت. .TP kbit کیلوبیت .TP kb یا k کیلوبایت .TP mbit مگابیت .TP mb یا m مگابایت .TP gbit گیگابیت .TP gb یا g گیگابایت .P ابزار TC اندازه‌ها را در داخل به صورت عدد صحیح بدون علامت ۳۲ بیتی بر حسب بایت ذخیره می‌کند، بنابراین می‌توان حداکثر اندازه 4294967295 بایت را تعیین کرد. .RE .TP مقادیر (VALUES) سایر مقادیر بدون واحد. این پارامترها به طور پیش‌فرض به صورت ده‌دهی تفسیر می‌شوند، اما می‌توانید با افزودن پیشوند '0' یا '0x' به ترتیب به TC اعلام کنید که آن‌ها را به صورت هشت‌هشتی یا شانزده‌شانزدهی تفسیر نماید. .SH "دستورات TC (TC COMMANDS)" دستورات زیر برای qdiscها، کلاس‌ها و فیلتر در دسترس هستند: .TP add افزودن یک qdisc، کلاس یا فیلتر به یک گره. برای تمامی موجودیت‌ها، باید یک .B parent ارسال شود، چه با ارسال شناسه آن و چه با اتصال مستقیم به ریشه یک دستگاه. هنگام ایجاد یک qdisc یا فیلتر، می‌توان آن را با پارامتر .B handle نام‌گذاری کرد. یک کلاس با پارامتر .B \fBclassid\fR نام‌گذاری می‌شود. .TP delete یک qdisc را می‌توان با مشخص کردن دستگیره آن حذف کرد، که همچنین می‌تواند 'root' باشد. تمامی زیرکلاس‌ها و qdiscهای برگ آن‌ها به طور خودکار حذف می‌شوند، و همچنین هر فیلتری که به آن‌ها متصل باشد. .TP change برخی از موجودیت‌ها را می‌توان به صورت «درجا» (in place) اصلاح کرد. از نحو دستور 'add' استفاده می‌کند، با این استثنا که دستگیره و والد را نمی‌توان تغییر داد. به عبارت دیگر، دستور .B change نمی‌تواند یک گره را جابجا کند. .TP replace یک عملیات حذف/افزودن تقریباً اتمیک را روی شناسه یک گره موجود انجام می‌دهد. اگر گره هنوز وجود نداشته باشد، ایجاد می‌شود. .TP get یک فیلتر منفرد را با توجه به رابط \fIDEV\fR، \fIqdisc-id\fR، \fIpriority\fR، \fIprotocol\fR و \fIfilter-id\fR نمایش می‌دهد. .TP show تمامی فیلترهای متصل به رابط ارائه‌شده را نمایش می‌دهد. یک شناسه والد معتبر باید ارسال شود. .TP link تنها برای qdiscها در دسترس است و عملیات جایگزینی (replace) را در شرایطی انجام می‌دهد که گره باید از قبل وجود داشته باشد. .SH "نظارت (MONITOR)" ابزار\fB\ tc\fR\ می‌تواند رویدادهای تولیدشده توسط هسته مانند افزودن/حذف qdiscها، فیلترها یا اقدامات، یا تغییر موارد موجود را نظارت کند. دستور زیر برای\fB\ monitor\fR\ در دسترس است: .TP \fBfile\fR اگر گزینه file مشخص شود، ابزار \fBtc\fR به رویدادهای هسته گوش نمی‌دهد، بلکه فایل ارائه‌شده را باز کرده و محتویات آن را استخراج می‌کند. این فایل باید با فرمت باینری بوده و حاوی پیام‌های netlink باشد. .SH "گزینهها (OPTIONS)" .TP .BR "\-b", " \-b filename", " \-batch", " \-batch filename" خواندن دستورات از فایل ارائه‌شده یا ورودی استاندارد و اجرای آن‌ها. نخستین شکست باعث توقف tc خواهد شد. .TP .BR "\-force" در حالت دسته‌ای با بروز خطا tc متوقف نشود. در صورت بروز هرگونه خطا در طول اجرای دستورات، کد خروج برنامه غیر صفر خواهد بود. .TP .BR "\-o" , " \-oneline" خروجی دادن هر رکورد در یک خط منفرد، با جایگزینی نویسه‌های سرخط (newline) با نویسه .B '\e' این گزینه زمانی مناسب است که بخواهید رکوردها را با .BR wc (1) بشمارید یا بر روی خروجی .BR grep (1) بگیرید. .TP .BR "\-n" , " \-net" , " \-netns " تغییر دادن فضای نام شبکه به .IR NETNS مشخص‌شده برای .B tc در واقع این گزینه اجرای دستور زیر را: .P .nf .B ip netns exec .IR NETNS .B tc .RI "[ " OPTIONS " ] " OBJECT " { " COMMAND " | " .BR help " }" .fi به این دستور ساده می‌کند: .P .nf .B tc .RI "-n[etns] " NETNS " [ " OPTIONS " ] " OBJECT " { " COMMAND " | " .BR help " }" .fi .TP .BR "\-N" , " \-Numeric" چاپ مستقیم شماره پروتکل، حوزه (scope)، dsfield و غیره به جای تبدیل آن به نام خوانا برای انسان. .TP .BR "\-cf" , " \-conf " مسیر فایل پیکربندی را مشخص می‌کند. این گزینه در ارتباط با سایر گزینه‌ها (مانند .BR -nm ")" استفاده می‌شود. .TP .BR "\-t", " \-timestamp" هنگام اجرای\fB\ tc monitor\fR\ ، برچسب زمانی را قبل از پیام رویداد با فرمت زیر چاپ می‌کند: .nf Timestamp:
usec .fi .TP .BR "\-ts", " \-tshort" هنگام اجرای\fB\ tc monitor\fR\ ، برچسب زمانی کوتاه را قبل از پیام رویداد با فرمت زیر چاپ می‌کند: .nf [--
T.] .fi .TP .BR "\-echo" درخواست از هسته برای بازگرداندن پیکربندی اعمال‌شده. .SH "قالب‌بندی (FORMAT)" دستور show گزینه‌های قالب‌بندی اضافه‌ای دارد: .TP .BR "\-s" , " \-stats", " \-statistics" چاپ آمارهای بیشتر درباره مصرف بسته‌ها. .TP .BR "\-d", " \-details" چاپ اطلاعات با جزئیات بیشتر درباره نرخ‌ها و اندازه‌های سلول. .TP .BR "\-r", " \-raw" چاپ مقادیر هگزادسیمال خام برای دستگیره‌ها. .TP .BR "\-p", " \-pretty" برای فیلتر u32، مقادیر offset و mask را به دستورات معادل فیلتر بر اساس TCP/IP رمزگشایی می‌کند. در خروجی JSON، فاصله‌های خالی برای بهبود خوانایی اضافه می‌شود. .TP .BR "\-iec" چاپ نرخ‌ها در واحدهای IEC (به عنوان مثال 1K = 1024). .TP .BR "\-g", " \-graph" نمایش کلاس‌ها به عنوان نمودار اسکی (ASCII). در صورتی که گزینه .BR "-s" مشخص شده باشد، اطلاعات آماری عمومی را زیر هر کلاس چاپ می‌کند. کلاس‌ها تنها با گزینه .BR "dev" قابل فیلتر شدن هستند. .TP .BR \-c [ color ][ = { always | auto | never } پیکربندی خروجی رنگی. اگر پارامتر حذف شود یا برابر .BR always باشد، خروجی رنگی بدون در نظر گرفتن وضعیت stdout فعال می‌شود. اگر پارامتر برابر .BR auto باشد، وضعیت stdout بررسی می‌شود تا پیش از فعال‌سازی خروجی رنگی، یک ترمینال باشد. اگر پارامتر برابر .BR never باشد، خروجی رنگی غیرفعال می‌شود. در صورت تعیین چندباره، آخرین مورد اولویت دارد. در صورت تعیین .B \-json این فلگ نادیده گرفته می‌شود. .TP .BR "\-j", " \-json" نمایش نتایج در قالب JSON. .TP .BR "\-nm" , " \-name" تشخیص نام کلاس از فایل .B /etc/iproute2/tc_cls یا از فایل مشخص‌شده توسط گزینه .B -cf این فایل صرفاً یک نگاشت از .B classid به نام کلاس است: .nf .RS 10 # Here is comment .RE .RS 10 1:40 voip # Here is another comment .RE .RS 10 1:50 web .RE .RS 10 1:60 ftp .RE .RS 10 1:2 home .RE .fi .RS اگر گزینه .B -nm بدون گزینه .B -cf مشخص شده باشد اما فایل .B /etc/iproute2/tc_cls وجود نداشته باشد، دستور .B tc با خطا متوقف نخواهد شد؛ این ویژگی امکان ارسال گزینه .B -nm را جهت ایجاد نام مستعار برای .B tc فراهم می‌سازد. .RE .TP .BR "\-br" , " \-brief" تنها چاپ داده‌های ضروری مورد نیاز برای شناسایی فیلتر و اقدام (دستگیره، کوکی و غیره) و آمارها. این گزینه در حال حاضر تنها توسط دستورات .BR "tc filter show " و " tc actions ls " پشتیبانی می‌شود. .SH "مثالها (EXAMPLES)" .PP tc -g class show dev eth0 .RS 4 نمایش کلاس‌ها به عنوان نمودار اسکی بر روی رابط eth0. .RE .PP tc -g -s class show dev eth0 .RS 4 نمایش کلاس‌ها به عنوان نمودار اسکی همراه با اطلاعات آماری زیر هر کلاس. .RE .SH "تاریخچه (HISTORY)" دستور .B tc توسط Alexey N. Kuznetsov نوشته شد و در لینوکس 2.2 اضافه گردید. .SH "همچنین ببینید (SEE ALSO)" .BR tc-basic (8), .BR tc-bfifo (8), .BR tc-bpf (8), .BR tc-cake (8), .BR tc-cgroup (8), .BR tc-choke (8), .BR tc-codel (8), .BR tc-drr (8), .BR tc-ematch (8), .BR tc-ets (8), .BR tc-flow (8), .BR tc-flower (8), .BR tc-fq (8), .BR tc-fq_codel (8), .BR tc-fq_pie (8), .BR tc-fw (8), .BR tc-gact (8), .BR tc-hfsc (7), .BR tc-hfsc (8), .BR tc-htb (8), .BR tc-mqprio (8), .BR tc-pfifo (8), .BR tc-pfifo_fast (8), .BR tc-pie (8), .BR tc-red (8), .BR tc-route (8), .BR tc-sfb (8), .BR tc-sfq (8), .BR tc-stab (8), .BR tc-tbf (8), .BR tc-u32 (8) .br .RB "مستندات کاربری در " http://lartc.org " موجود است، اما لطفاً گزارش‌های اشکال و وصله‌ها را به نشانی زیر ارسال کنید: " .SH "نویسنده (AUTHOR)" صفحه راهنما توسط bert hubert (ahu@ds9a.nl) نگهداری می‌شود.