| tc-ematch(8) | Linux | tc-ematch(8) |
نام (NAME)
tc-ematch - تطابقهای توسعهیافته برای استفاده با فیلترهای "basic" ،"cgroup" یا "flow"
خلاصه دستور (SYNOPSIS)
tc filter add .. basic match EXPR .. flowid ..
EXPR := TERM [ { and | or } EXPR ]
TERM := [ not ] { MATCH | '(' EXPR ')' }
MATCH := module '(' ARGS ')'
ARGS := ARG1 ARG2 ..
تطابقها (MATCHES)
cmp
تطابق مقایسهای ساده: مقایسه حسابی دادههای بسته با یک مقدار مشخص.
cmp( ALIGN at OFFSET [ ATTRS ] { eq | lt | gt } VALUE )
ALIGN := { u8 | u16 | u32 }
ATTRS := [ layer LAYER ] [ mask MASK ] [ trans ]
LAYER := { link | network | transport | 0..2 }
meta
تطابق فرارداده (Metadata)
meta( OBJECT { eq | lt |gt } OBJECT )
OBJECT := { META_ID | VALUE }
META_ID := id [ shift SHIFT ] [ mask MASK ]
- ویژگیهای متادیتا:
-
random مقدار تصادفی ۳۲ بیتی
loadavg_1 میانگین بار سیستم در ۵ دقیقه گذشته
nf_mark نشان نتفیلتر (Netfilter mark)
vlan برچسب ویلن (VLAN tag)
sk_rcvbuf اندازه بافر دریافت
sk_snd_queue طول صف ارسال
فهرست کاملی از ویژگیهای متادیتا را میتوان با دستور زیر به دست آورد:
# tc filter add dev eth1 basic match 'meta(list)'
nbyte
تطبیق توالی بایتهای داده بسته
nbyte( NEEDLE at OFFSET [ layer LAYER ] )
NEEDLE := { string | c-escape-sequence }
OFFSET := int
LAYER := { link | network | transport | 0..2 }
u32
تطابق u32
u32( ALIGN VALUE MASK at [ nexthdr+ ] OFFSET )
ALIGN := { u8 | u16 | u32 }
ipset
بررسی بسته در برابر عضویت در ipset
ipset( SETNAME FLAGS )
SETNAME := string
FLAGS := { FLAG [, FLAGS] }
گزینههای فلگ همان مواردی هستند که در تطابق «set» مربوط به iptables استفاده میشوند.
هنگام استفاده از ematch برای ipset با نوع مجموعه «ip_set_hash:net,iface»، رابط را میتوان با ساختار دستوری «src,dst» (آدرس IP مبدأ، رابط خروجی) یا «src,src» (آدرس IP مبدأ، رابط ورودی) مورد استعلام قرار داد.
ipt
بررسی بسته در برابر تطابقهای xtables
ipt( [-6] -m MATCH_NAME FLAGS )
MATCH_NAME := string
FLAGS := { FLAG [, FLAGS] }
گزینههای فلگ همان مواردی هستند که توسط تطابق xtable مورد استفاده قرار میگیرند.
canid
قاعده ematch برای تطبیق فریمهای CAN
canid( IDLIST )
IDLIST := IDSPEC[IDLIST]
IDSPEC := { ’sff’ CANID | ’eff’ CANID }
CANID := ID[:MASK]
ID, MASK := عدد هگزادسیمال (مانند 0x123)
نکات و هشدارها (CAVEATS)
ساختار دستوری ematch از «(» و «)» برای گروهبندی عبارات استفاده میکند. تمام پرانتزها باید بهدرستی اسکیپ (escape) شوند تا از تفسیر مستقیم آنها توسط خط فرمان پوسته جلوگیری شود.
هنگام استفاده از ematch برای ipset با دستگاه «ifb»، دستگاه خروجی خود دستگاه ifb خواهد بود (مانند «ifb0»). رابط اصلی (یعنی دستگاهی که بسته از طریق آن دریافت شده است) به عنوان رابط ورودی در نظر گرفته میشود.
مثالها و کاربرد (EXAMPLE & USAGE)
# tc filter add .. basic match ...
# 'cmp(u16 at 3 layer 2 mask 0xff00 gt 20)'
# 'meta(nfmark gt 24)' and 'meta(tcindex mask 0xf0 eq 0xf0)'
# 'nbyte("ababa" at 12 layer 1)'
# 'u32(u16 0x1122 0xffff at nexthdr+4)'
بررسی اینکه آیا آدرس IP مبدأ بسته عضو مجموعهای به نام bulk است:
# 'ipset(bulk src)'
بررسی اینکه آیا آدرس IP مبدأ بسته و رابطی که بسته از آن دریافت شده عضو مجموعه «hash:net,iface» به نام interactive است:
# 'ipset(interactive src,src)'
بررسی اینکه آیا بسته با وضعیت IPSec با reqid برابر با 1 مطابقت دارد:
# 'ipt(-m policy --dir in --pol ipsec --reqid 1)'
نویسنده (AUTHOR)
زیرساخت تطابق توسعهیافته توسط Thomas Graf اضافه شده است.
| 6 August 2012 | iproute2 |