tc-ematch(8) Linux tc-ematch(8)

tc-ematch - تطابق‌های توسعه‌یافته برای استفاده با فیلترهای "basic" ،"cgroup" یا "flow"

tc filter add .. basic match EXPR .. flowid ..

EXPR := TERM [ { and | or } EXPR ]

TERM := [ not ] { MATCH | '(' EXPR ')' }

MATCH := module '(' ARGS ')'

ARGS := ARG1 ARG2 ..

تطابق مقایسه‌ای ساده: مقایسه حسابی داده‌های بسته با یک مقدار مشخص.

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 }

تطابق فرارداده (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( NEEDLE at OFFSET [ layer LAYER ] )

NEEDLE := { string | c-escape-sequence }

OFFSET := int

LAYER := { link | network | transport | 0..2 }

تطابق u32

u32( ALIGN VALUE MASK at [ nexthdr+ ] OFFSET )

ALIGN := { u8 | u16 | u32 }

بررسی بسته در برابر عضویت در ipset

ipset( SETNAME FLAGS )

SETNAME := string

FLAGS := { FLAG [, FLAGS] }

گزینه‌های فلگ همان مواردی هستند که در تطابق «set» مربوط به iptables استفاده می‌شوند.

هنگام استفاده از ematch برای ipset با نوع مجموعه «ip_set_hash:net,iface»، رابط را می‌توان با ساختار دستوری «src,dst» (آدرس IP مبدأ، رابط خروجی) یا «src,src» (آدرس IP مبدأ، رابط ورودی) مورد استعلام قرار داد.

بررسی بسته در برابر تطابق‌های xtables

ipt( [-6] -m MATCH_NAME FLAGS )

MATCH_NAME := string

FLAGS := { FLAG [, FLAGS] }

گزینه‌های فلگ همان مواردی هستند که توسط تطابق xtable مورد استفاده قرار می‌گیرند.

قاعده ematch برای تطبیق فریم‌های CAN

canid( IDLIST )

IDLIST := IDSPEC[IDLIST]

IDSPEC := { ’sff’ CANID | ’eff’ CANID }

CANID := ID[:MASK]

ID, MASK := عدد هگزادسیمال (مانند 0x123)

ساختار دستوری ematch از «(» و «)» برای گروه‌بندی عبارات استفاده می‌کند. تمام پرانتزها باید به‌درستی اسکیپ (escape) شوند تا از تفسیر مستقیم آن‌ها توسط خط فرمان پوسته جلوگیری شود.

هنگام استفاده از ematch برای ipset با دستگاه «ifb»، دستگاه خروجی خود دستگاه ifb خواهد بود (مانند «ifb0»). رابط اصلی (یعنی دستگاهی که بسته از طریق آن دریافت شده است) به عنوان رابط ورودی در نظر گرفته می‌شود.

# 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)'

زیرساخت تطابق توسعه‌یافته توسط Thomas Graf اضافه شده است.

6 August 2012 iproute2