| Flower filter in tc(8) | Linux | Flower filter in tc(8) |
نام (NAME)
tc-flower - فیلتر کنترل ترافیک مبتنی بر جریان (flow)
خلاصه دستور (SYNOPSIS)
tc filter ... flower [ MATCH_LIST ] [ action ACTION_SPEC ] [ classid CLASSID ] [ hw_tc TCID ]
MATCH_LIST := [ MATCH_LIST ] MATCH
MATCH := { indev ifname | verbose | skip_sw | skip_hw | { dst_mac | src_mac } MASKED_LLADDR | vlan_id VID | vlan_prio PRIORITY | vlan_ethtype { ipv4 | ipv6 | ETH_TYPE } | cvlan_id VID | cvlan_prio PRIORITY | cvlan_ethtype { ipv4 | ipv6 | ETH_TYPE } | pppoe_sid PSID | ppp_proto { ip | ipv6 | mpls_uc | mpls_mc | PPP_PROTO } | mpls LSE_LIST | mpls_label LABEL | mpls_tc TC | mpls_bos BOS | mpls_ttl TTL | l2tpv3_sid LSID | ip_proto { tcp | udp | sctp | icmp | icmpv6 | l2tp | IP_PROTO } | ip_tos MASKED_IP_TOS | ip_ttl MASKED_IP_TTL | { dst_ip | src_ip } PREFIX | { dst_port | src_port } { MASKED_NUMBER | min_port_number-max_port_number } | tcp_flags MASKED_TCP_FLAGS | type MASKED_TYPE | code MASKED_CODE | { arp_tip | arp_sip } IPV4_PREFIX | arp_op { request | reply | OP } | { arp_tha | arp_sha } MASKED_LLADDR | enc_key_id KEY-ID | { enc_dst_ip | enc_src_ip } { ipv4_address | ipv6_address } | enc_dst_port port_number | enc_tos TOS | enc_ttl TTL | { geneve_opts | vxlan_opts | erspan_opts | gtp_opts | pfcp_opts } OPTIONS | ip_flags IP_FLAGS | l2_miss L2_MISS | cfm CFM_OPTIONS | enc_flags ENCFLAG-LIST }
LSE_LIST := [ LSE_LIST ] LSE
LSE := lse depth DEPTH { label LABEL | tc TC | bos BOS | ttl TTL }
CFM := cfm mdl LEVEL | op OPCODE
ENCFLAG-LIST := [ ENCFLAG-LIST/ ] ENCFLAG
ENCFLAG := { [no]tuncsum | [no]tundf | [no]tunoam | [no]tuncrit }
توضیحات (DESCRIPTION)
فیلتر flower جریانها (flows) را با مجموعهای از کلیدهای مشخصشده مطابقت میدهد و یک شناسه کلاس (class ID) انتخابشده به صورت اختیاری را به بستههای متعلق به آنها اختصاص میدهد. علاوه بر این (یا به عنوان جایگزین)، میتوان یک کنش (action) از چارچوب کنشهای عمومی را فراخوانی کرد.
گزینهها (OPTIONS)
- action ACTION_SPEC
- اعمال یک کنش (action) از چارچوب کنشهای عمومی بر روی بستههای منطبق.
- classid CLASSID
- مشخص کردن کلاسی که بستههای منطبق به آن هدایت شوند. CLASSID به فرم X:Y است، که در آن X و Y به عنوان اعداد در قالب شانزدهشانزدهی (هگزادسیمال) تفسیر میشوند.
- hw_tc TCID
- مشخص کردن یک کلاس ترافیک سختافزاری برای هدایت بستههای منطبق به آن. TCID در محدوده ۰ تا ۱۵ است.
- indev ifname
- تطبیق بر اساس نام رابط ورودی. بدیهی است که این مورد فقط برای جریانهای هدایتشده (forwarded) منطقی است. ifname نام یک رابط است که باید در زمان فراخوانی tc وجود داشته باشد.
- verbose
- فعالسازی ثبت گزارش با جزئیات کامل (verbose)، از جمله خطاهای برونسپاری سختافزاری (offloading) در زمانی که از فلگ skip_sw استفاده نمیشود.
- skip_sw
- عدم پردازش فیلتر توسط نرمافزار. اگر سختافزار از برونسپاری برای این فیلتر پشتیبانی نکند یا برونسپاری TC برای این رابط فعال نباشد، عملیات با شکست مواجه خواهد شد.
- skip_hw
- عدم پردازش فیلتر توسط سختافزار.
- dst_mac MASKED_LLADDR
- src_mac MASKED_LLADDR
- تطبیق بر اساس نشانی MAC مبدأ یا مقصد. یک ماسک میتواند به صورت اختیاری برای محدود کردن بیتهای مورد تطبیق نشانی ارائه شود. ماسک با قرار دادن یک اسلش پس از نشانی و سپس خود ماسک مشخص میشود. این ماسک میتواند در قالب LLADDR باشد که در این حالت یک ماسک بیتی (bitwise) است، یا به صورت تعداد بیتهای باارزش بالا برای تطبیق مشخص شود. اگر ماسک ذکر نشود، تطبیق بر روی تمام بیتها فرض خواهد شد.
- num_of_vlans NUM
- تطبیق بر اساس تعداد تگهای VLAN در بسته. NUM میتواند ۰ یا یک عدد صحیح مثبت کوچک باشد؛ معمولاً در محدوده ۰ تا ۴ است.
- vlan_id VID
- تطبیق بر اساس شناسه تگ VLAN. VID یک مقدار ۱۲ بیتی بدون علامت در قالب دهدهی است.
- vlan_prio PRIORITY
- تطبیق بر اساس اولویت تگ VLAN. PRIORITY یک مقدار ۳ بیتی بدون علامت در قالب دهدهی است.
- vlan_ethtype VLAN_ETH_TYPE
- تطبیق بر اساس پروتکل لایه سه. VLAN_ETH_TYPE میتواند ipv4، ipv6 یا یک مقدار ۱۶ بیتی بدون علامت در قالب شانزدهشانزدهی باشد. برای تطبیق روی بستههای QinQ، این مقدار باید 802.1Q یا 802.1AD باشد.
- cvlan_id VID
- تطبیق بر اساس شناسه تگ VLAN داخلی در QinQ. VID یک مقدار ۱۲ بیتی بدون علامت در قالب دهدهی است.
- cvlan_prio PRIORITY
- تطبیق بر اساس اولویت تگ VLAN داخلی در QinQ. PRIORITY یک مقدار ۳ بیتی بدون علامت در قالب دهدهی است.
- cvlan_ethtype VLAN_ETH_TYPE
- تطبیق بر اساس پروتکل لایه سه در QinQ. VLAN_ETH_TYPE میتواند ipv4، ipv6 یا یک مقدار ۱۶ بیتی بدون علامت در قالب شانزدهشانزدهی باشد.
- pppoe_sid PSID
- تطبیق بر اساس شناسه نشست (session id) در PPPoE. PSID یک مقدار ۱۶ بیتی بدون علامت در قالب دهدهی است.
- ppp_proto PPP_PROTO
- تطبیق بر اساس پروتکل لایه سه در PPP. PPP_PROTO میتواند یکی از موارد ip، ipv6، mpls_uc، mpls_mc یا یک مقدار ۱۶ بیتی بدون علامت در قالب شانزدهشانزدهی باشد.
- mpls LSE_LIST
- تطبیق بر روی پشته برچسب MPLS. LSE_LIST فهرستی از مدخلهای پشته برچسب (Label Stack Entries) است که هر کدام با کلمه کلیدی lse مشخص میشوند. این گزینه نمیتواند همراه با گزینههای مستقل mpls_label، mpls_tc، mpls_bos و mpls_ttl استفاده شود.
- lse LSE_OPTIONS
- تطبیق بر روی یک مدخل پشته برچسب MPLS. LSE_OPTIONS فهرستی از گزینهها است که مشخصات LSE را برای تطبیق توصیف میکند.
- depth DEPTH
- عمق مدخل پشته برچسب مورد نظر. عمق از ۱ شروع میشود (بیرونیترین مدخل پشته برچسب). حداکثر عمق قابل استفاده ممکن است توسط هسته محدود شده باشد. این گزینه اجباری است. DEPTH یک مقدار ۸ بیتی بدون علامت در قالب دهدهی است.
- label LABEL
- تطبیق بر روی فیلد برچسب MPLS در depth تعیینشده. LABEL یک مقدار ۲۰ بیتی بدون علامت در قالب دهدهی است.
- tc TC
- تطبیق بر روی فیلد کلاس ترافیک (Traffic Class) در MPLS در depth تعیینشده. TC یک مقدار ۳ بیتی بدون علامت در قالب دهدهی است.
- bos BOS
- تطبیق بر روی فیلد انتهای پشته (Bottom Of Stack) در MPLS در depth تعیینشده. BOS یک مقدار ۱ بیتی در قالب دهدهی است.
- ttl TTL
- تطبیق بر روی فیلد زمان حیات (Time To Live) در MPLS در depth تعیینشده. TTL یک مقدار ۸ بیتی بدون علامت در قالب دهدهی است.
- mpls_label LABEL
- تطبیق شناسه برچسب در بیرونیترین مدخل پشته برچسب MPLS. LABEL یک مقدار ۲۰ بیتی بدون علامت در قالب دهدهی است.
- mpls_tc TC
- تطبیق بر روی فیلد TC در MPLS (که معمولاً برای اولویت بسته استفاده میشود) در بیرونیترین مدخل پشته برچسب MPLS. TC یک مقدار ۳ بیتی بدون علامت در قالب دهدهی است.
- mpls_bos BOS
- تطبیق بر روی فیلد انتهای پشته (Bottom Of Stack) در بیرونیترین مدخل پشته برچسب MPLS. BOS یک مقدار ۱ بیتی در قالب دهدهی است.
- mpls_ttl TTL
- تطبیق بر روی فیلد زمان حیات (Time To Live) در بیرونیترین مدخل پشته برچسب MPLS. TTL یک مقدار ۸ بیتی بدون علامت در قالب دهدهی است.
- l2tpv3_sid LSID
- تطبیق بر روی فیلد شناسه نشست L2TPv3 که روی IPv4 یا IPv6 منتقل میشود. LSID یک مقدار ۳۲ بیتی بدون علامت در قالب دهدهی است.
- ip_proto IP_PROTO
- تطبیق بر اساس پروتکل لایه چهار. IP_PROTO میتواند tcp، udp، sctp، icmp، icmpv6، l2tp یا یک مقدار ۸ بیتی بدون علامت در قالب شانزدهشانزدهی باشد.
- ip_tos MASKED_IP_TOS
- تطبیق بر روی TOS در IPv4 یا کلاس ترافیک در IPv6 - هشت بیت در قالب شانزدهشانزدهی. یک ماسک میتواند به صورت اختیاری برای محدود کردن بیتهای مورد تطبیق ارائه شود. ماسک با افزودن یک اسلش پس از مقدار و سپس خود ماسک مشخص میشود. در صورت عدم ذکر ماسک، تطبیق بر روی تمام بیتها فرض میشود.
- ip_ttl MASKED_IP_TTL
- تطبیق بر روی TTL در IPv4 یا حد جهش (hop-limit) در IPv6 - مقدار هشت بیتی در قالب دهدهی یا شانزدهشانزدهی. یک ماسک میتواند به صورت اختیاری برای محدود کردن بیتهای مورد تطبیق ارائه شود. همان منطقی که برای ماسک در تطبیق روی ip_tos استفاده میشود، در اینجا نیز به کار میرود.
- dst_ip PREFIX
- src_ip PREFIX
- تطبیق بر روی نشانی IP مبدأ یا مقصد. PREFIX بسته به گزینه protocol در فیلتر tc، باید یک نشانی معتبر IPv4 یا IPv6 باشد که به صورت اختیاری یک اسلش و طول پیشوند به دنبال آن میآید. اگر پیشوند ذکر نشود، tc تطبیق کامل نشانی میزبان را فرض میکند.
- dst_port { MASKED_NUMBER | MIN_VALUE-MAX_VALUE }
- src_port { MASKED_NUMBER | MIN_VALUE-MAX_VALUE }
- تطبیق بر روی شماره پورت مبدأ یا مقصد پروتکل لایه ۴، همراه با یک ماسک اختیاری. متناوباً میتوان مقادیر کمینه و بیشینه را برای تطبیق روی محدودهای از شماره پورتهای مبدأ یا مقصد پروتکل لایه ۴ تعیین کرد. تنها برای مقادیر udp، tcp و sctp در ip_proto در دسترس است که باید از قبل مشخص شده باشند.
- tcp_flags MASKED_TCP_FLAGS
- تطبیق بر روی پرچمهای TCP که به صورت یک میدان بیتی ۱۲ بیتی در قالب شانزدهشانزدهی نمایش داده میشوند. یک ماسک میتواند به صورت اختیاری برای محدود کردن بیتهای مورد تطبیق ارائه شود. ماسک با آوردن یک اسلش پس از مقدار و سپس خود ماسک تعیین میشود. در صورت عدم ذکر ماسک، تطبیق بر روی تمام بیتها فرض میشود.
- type MASKED_TYPE
- code MASKED_CODE
- تطبیق بر روی نوع (type) یا کد (code) در ICMP. یک ماسک میتواند به صورت اختیاری برای محدود کردن بیتهای مورد تطبیق ارائه شود. ماسک با آوردن یک اسلش پس از مقدار و سپس خود ماسک مشخص میشود. ماسک باید عددی باشد که یک ماسک بیتی را نشان میدهد. اگر ماسک ذکر نشود، تطبیق روی تمام بیتها فرض میشود. این گزینهها تنها برای مقادیر icmp و icmpv6 در ip_proto در دسترس هستند که باید از قبل مشخص شده باشند.
- arp_tip IPV4_PREFIX
- arp_sip IPV4_PREFIX
- تطبیق بر روی نشانی IP فرستنده یا هدف در ARP یا RARP. IPV4_PREFIX باید یک نشانی معتبر IPv4 باشد که به صورت اختیاری یک اسلش و طول پیشوند به دنبال آن میآید. اگر پیشوند مشخص نشود، tc تطبیق کامل نشانی میزبان را فرض میکند.
- arp_op ARP_OP
- تطبیق بر روی عملیات ARP یا RARP. ARP_OP میتواند request، reply یا یک مقدار صحیح ۰، ۱ یا ۲ باشد. یک ماسک میتواند به صورت اختیاری برای محدود کردن بیتهای مورد تطبیق عملیات ارائه شود. ماسک با آوردن یک اسلش پس از نشانی و سپس خود ماسک مشخص میشود. این ماسک میتواند به صورت یک مقدار ۸ بیتی بدون علامت که نشاندهنده یک ماسک بیتی است ارائه گردد. در صورت عدم ذکر ماسک، تطبیق بر روی تمام بیتها فرض میشود.
- arp_sha MASKED_LLADDR
- arp_tha MASKED_LLADDR
- تطبیق بر روی نشانی MAC فرستنده یا هدف در ARP یا RARP. یک ماسک میتواند به صورت اختیاری برای محدود کردن بیتهای مورد تطبیق نشانی ارائه شود. ماسک با آوردن یک اسلش به دنبال نشانی و سپس خود ماسک ارائه میشود. این ماسک میتواند در قالب LLADDR باشد که در این صورت یک ماسک بیتی است، یا به عنوان تعداد بیتهای باارزش بالا برای تطبیق تعیین شود. در صورت عدم ذکر ماسک، تطبیق بر روی تمام بیتها فرض میشود.
- enc_key_id NUMBER
- enc_dst_ip PREFIX
- enc_src_ip PREFIX
- enc_dst_port NUMBER
- enc_tos NUMBER
- enc_ttl NUMBER
- ct_state CT_STATE
- ct_zone CT_MASKED_ZONE
- ct_mark CT_MASKED_MARK
- ct_label CT_MASKED_LABEL
- تطبیق بر اساس اطلاعات ردیابی اتصال (connection tracking)
- CT_STATE
- تطبیق وضعیت اتصال که میتواند ترکیبی از پرچمهای [{+|-}flag] باشد، که در آن flag میتواند یکی از موارد زیر باشد:
- trk
- - اتصال ردیابیشده (Tracked).
- new
- - اتصال جدید (New).
- est
- - اتصال برقرارشده (Established).
- rpl
- - بسته در جهت پاسخ (reply) است، به این معنی که در جهتی مخالف بستهای است که اتصال را آغاز کرده است.
- inv
- - وضعیت نامعتبر است؛ بسته نتوانست به یک اتصال منتسب شود.
- rel
- - بسته مرتبط با یک اتصال موجود است.
- مثال: +trk+est
- CT_MASKED_ZONE
- تطبیق ناحیه اتصال که میتواند دارای ماسک باشد.
- CT_MASKED_MARK
- تطبیق ۳۲ بیتی بر روی نشان اتصال (connection mark) که میتواند دارای ماسک باشد.
- CT_MASKED_LABEL
- تطبیق ۱۲۸ بیتی بر روی برچسب اتصال (connection label) که میتواند دارای ماسک باشد.
- geneve_opts OPTIONS
- vxlan_opts OPTIONS
- erspan_opts OPTIONS
- gtp_opts OPTIONS
- pfcp_opts OPTIONS
- تطبیق بر اساس فراداده تونل IP. شناسه کلید (Key id) NUMBER یک شناسه کلید تونل ۳۲ بیتی است (مانند VNI برای تونل VXLAN). PREFIX باید یک نشانی معتبر IPv4 یا IPv6 باشد که به صورت اختیاری یک اسلش و طول پیشوند به دنبال آن میآید. در صورت عدم وجود پیشوند، tc تطبیق کامل نشانی میزبان را فرض میکند. پورت مقصد (Dst port) NUMBER یک پورت مقصد ۱۶ بیتی UDP است. NUMBER در enc_tos یک مقدار ۸ بیتی tos (شامل dscp+ecn) است و NUMBER در enc_ttl یک مقدار زمان حیات (time-to-live) ۸ بیتی است. OPTIONS در geneve_opts باید یک فهرست معتبر از گزینههای geneve جداشده با کاما باشد که هر گزینه شامل یک کلید و به دنبال آن به صورت اختیاری یک اسلش و ماسک مربوطه است. در صورت عدم ذکر ماسکها، tc تطبیق کامل را فرض میکند. این گزینهها را میتوان به فرم CLASS:TYPE:DATA/CLASS_MASK:TYPE_MASK:DATA_MASK توصیف کرد، که در آن CLASS به عنوان یک مقدار ۱۶ بیتی شانزدهشانزدهی، TYPE به عنوان یک مقدار ۸ بیتی شانزدهشانزدهی و DATA به عنوان یک مقدار شانزدهشانزدهی با طول متغیر نشان داده میشوند. در vxlan_opts شناسه OPTIONS از چند گزینه پشتیبانی نمیکند و شامل یک کلید به همراه یک اسلش و ماسک مربوطه است. اگر ماسک ذکر نشود، tc تطبیق کامل را فرض میکند. این گزینه میتواند به فرم GBP/GBP_MASK توصیف شود که در آن GBP به صورت یک عدد ۳۲ بیتی نمایش داده میشود. در erspan_opts شناسه OPTIONS از چند گزینه پشتیبانی نمیکند و شامل یک کلید به همراه یک اسلش و ماسک مربوطه است. در صورت عدم ذکر ماسک، tc تطبیق کامل را فرض میکند. این گزینه میتواند به فرم VERSION:INDEX:DIR:HWID/VERSION:INDEX_MASK:DIR_MASK:HWID_MASK توصیف شود که در آن VERSION به صورت یک عدد ۸ بیتی، INDEX به صورت یک عدد ۳۲ بیتی و DIR و HWID به صورت یک عدد ۸ بیتی نمایش داده میشوند. استفاده از چند گزینه پشتیبانی نمیشود. توجه داشته باشید که INDEX/INDEX_MASK زمانی استفاده میشود که VERSION برابر با ۱ باشد، و DIR/DIR_MASK و HWID/HWID_MASK زمانی استفاده میشوند که VERSION برابر با ۲ باشد. در gtp_opts شناسه OPTIONS از چند گزینه پشتیبانی نمیکند و شامل یک کلید به همراه یک اسلش و ماسک مربوطه است. اگر ماسک ذکر نشود، tc تطبیق کامل را فرض میکند. این گزینه را میتوان به فرم PDU_TYPE:QFI/PDU_TYPE_MASK:QFI_MASK توصیف کرد که در آن هر دو مقدار PDU_TYPE و QFI به صورت مقادیر ۸ بیتی شانزدهشانزدهی نمایش داده میشوند. در pfcp_opts شناسه OPTIONS از چند گزینه پشتیبانی نمیکند و شامل یک کلید به همراه یک اسلش و ماسک مربوطه است. اگر ماسک ذکر نشود، tc تطبیق کامل را فرض میکند. این گزینه میتواند به فرم TYPE:SEID/TYPE_MASK:SEID_MASK توصیف شود که در آن TYPE به عنوان یک عدد ۸ بیتی و SEID به صورت ۶۴ بیتی ارائه میشوند. هر دوی TYPE و SEID در قالب شانزدهشانزدهی ارائه میشوند.
- ip_flags IP_FLAGS
- IP_FLAGS میتواند یکی از مقادیر frag، nofrag، firstfrag یا nofirstfrag باشد که به ترتیب میتوان از frag و nofrag برای تطبیق روی بستههای قطعهقطعهشده یا قطعهقطعهنشده استفاده کرد. گزینههای firstfrag و nofirstfrag میتوانند برای تمایز بیشتر بستههای قطعهبندیشده به کار روند. از firstfrag میتوان برای نشان دادن اولین بسته قطعهبندیشده استفاده کرد. گزینه nofirstfrag میتواند نشاندهنده بستههای قطعهبندیشده بعدی یا بستههای قطعهبندینشده باشد.
- l2_miss L2_MISS
- تطبیق بر اساس نیافتن آدرس در لایه ۲ (layer 2 miss) در FDB / MDB راهانداز بریج. L2_MISS میتواند ۰ یا ۱ باشد. هنگامی که ۱ باشد، بر روی بستههایی که با عدم تطابق در لایه ۲ مواجه شدهاند تطبیق داده میشود. وقتی ۰ باشد، بر روی بستههایی تطبیق انجام میشود که با استفاده از یک مدخل FDB / MDB هدایت شدهاند. توجه داشته باشید که بستههای پخشی (broadcast) با عدم تطابق مواجه نمیشوند چرا که جستجویی برای آنها انجام نمیگیرد.
- cfm CFM_OPTIONS
- تطبیق بر روی فیلدهای مدیریت خطای اتصال (Connectivity Fault Management یا CFM). CFM_OPTIONS فهرستی از گزینهها است که ویژگیهای فیلدهای اطلاعاتی CFM را برای تطبیق توصیف میکند.
- enc_flags ENCFLAG-LIST
- تطبیق بر اساس پرچمهای کنترلی تونل. ENCFLAG-LIST فهرستی از پرچمهای کنترلی تونل زیر است: [no]tuncsum، [no]tundf، [no]tunoam، [no]tuncrit، که هر کدام با '/' جدا شدهاند.
نکات (NOTES)
همانطور که در بالا در موارد مربوطه بیان شد، تطبیقهای یک لایه معین به طور ضمنی به تطبیقهای لایه پایینتر بعدی وابسته هستند. به طور دقیق، تطبیقهای لایه یک و دو (indev، dst_mac، src_mac و enc_flags) هیچ وابستگی ندارند؛ تطبیقهای MPLS و لایه سه (mpls، mpls_label، mpls_tc، mpls_bos، mpls_ttl، ip_proto، dst_ip، src_ip، arp_tip، arp_sip، arp_op، arp_tha، arp_sha و ip_flags) به گزینه protocol در فیلتر tc وابسته هستند؛ تطبیقهای پورت در لایه چهار (dst_port و src_port) به تنظیم بودن ip_proto روی مقادیر tcp، udp یا sctp وابسته میباشند؛ و در نهایت تطبیقهای ICMP (code و type) به تنظیم بودن ip_proto روی icmp یا icmpv6 وابستگی دارند.
تنها میتوان از یک ماسک در هر اولویت (prio) استفاده کرد. اگر کاربر نیاز به تعیین ماسک متفاوتی داشته باشد، باید از prio متفاوتی استفاده کند.
همچنین ببینید (SEE ALSO)
| 22 Oct 2015 | iproute2 |