skbmod action in tc(8) Linux skbmod action in tc(8)

tc-skbmod - کنش ویرایشگر بسته‌ها با کاربری آسان


tc ... action skbmod { set SETTABLE | swap SWAPPABLE | ecn } [ CONTROL ] [ index INDEX ]

SETTABLE := [ dmac DMAC ] [ smac SMAC ] [ etype ETYPE ]

SWAPPABLE := mac

CONTROL := { reclassify | pipe | drop | shot | continue | pass }

کنش skbmod به‌عنوان یک ارتقای کاربردپذیری برای کنش موجود pedit طراحی شده است. به‌جای نیاز به ویرایش دستی بخش‌های ۸، ۱۶ یا ۳۲ بیتی از یک سرآیند اترنت، skbmod امکان جایگزینی کامل مؤلفه‌های پشتیبانی‌شده را فراهم می‌کند. کنش باید یکی از موارد set، swap یا ecn باشد. set و swap فقط بر بسته‌های اترنت اثر می‌گذارند، در حالی که ecn تنها بسته‌های IP را تحت تأثیر قرار می‌دهد.

تغییر نشانی مک مقصد به نشانی مشخص‌شده.
تغییر نشانی مک مبدأ به نشانی مشخص‌شده.
تغییر نوع اترنت (ethertype) به مقدار مشخص‌شده.
برای جابه‌جا کردن نشانی‌های مک استفاده می‌شود.
برای علامت‌گذاری بسته‌های IP با قابلیت انتقال سازگار با ECN (ECT) به‌عنوان مواجهه با ازدحام (CE) استفاده می‌شود. بر بسته‌های فاقد قابلیت ECN (Non-ECT) تأثیری ندارد.
کلیدواژه‌های زیر امکان کنترل نحوه پیمایش ادامه درخت qdisc، کلاس‌ها، فیلترها و کنش‌ها را پس از این کنش فراهم می‌کنند.
شروع مجدد با اولین فیلتر در فهرست فعلی.
ادامه با کنش بعدی متصل به همان فیلتر.
دور انداختن بسته.
ادامه دسته‌بندی با فیلتر بعدی در صف.
پایان دادن به فرآیند دسته‌بندی و بازگشت به qdisc فراخوان برای پردازش بیشتر بسته. این حالت پیش‌فرض است.

برای شروع، فیلتر زیر را همراه با یک کنش pedit در نظر بگیرید:

tc filter add dev eth1 parent 1: protocol ip prio 10 \
	u32 match ip protocol 1 0xff flowid 1:2 \
	action pedit munge offset -14 u8 set 0x02 \
	munge offset -13 u8 set 0x15 \
	munge offset -12 u8 set 0x15 \
	munge offset -11 u8 set 0x15 \
	munge offset -10 u16 set 0x1515 \
	pipe

با استفاده از کنش skbmod، می‌توان این دستور را به‌صورت زیر ساده کرد:

tc filter add dev eth1 parent 1: protocol ip prio 10 \
	u32 match ip protocol 1 0xff flowid 1:2 \
	action skbmod set dmac 02:15:15:15:15:15 \
	pipe

در صورتی که نشانی مک مبدأ و ethertype نیز به‌عنوان بخشی از این کنش ویرایش شوند، پیچیدگی بیشتر خواهد شد. اگر قرار باشد هر سه فیلد با skbmod تغییر یابند:

tc filter add dev eth5 parent 1: protocol ip prio 10 \
	u32 match ip protocol 1 0xff flowid 1:2 \
	action skbmod \
	set etype 0xBEEF \
	set dmac 02:12:13:14:15:16 \
	set smac 02:22:23:24:25:26

برای جابه‌جا کردن نشانی‌های مک مقصد و مبدأ در سرآیند اترنت:

tc filter add dev eth3 parent 1: protocol ip prio 10 \
	u32 match ip protocol 1 0xff flowid 1:2 \
	action skbmod \
	swap mac

در نهایت، برای علامت‌گذاری کدپوینت CE در سرآیند IP برای بسته‌های با قابلیت انتقال سازگار با ECN (ECT):

tc filter add dev eth0 parent 1: protocol ip prio 10 \
	u32 match ip protocol 1 0xff flowid 1:2 \
	action skbmod \
	ecn

در یک دستور منفرد تنها باید یکی از موارد set، swap یا ecn استفاده شود. تلاش برای استفاده از بیش از یکی از آن‌ها در یک دستور، رفتاری تعریف‌نشده تلقی می‌شود؛ در عوض، چند دستور را از طریق لوله‌کشی (pipe) به یکدیگر متصل کنید.

tc(8), tc-u32(8), tc-pedit(8)

21 Sep 2016 iproute2