VLAN manipulation action in tc(8) Linux VLAN manipulation action in tc(8)

tc-vlan - ماژول دستکاری vlan در کنترل ترافیک لینوکس


tc ... action vlan { pop | pop_eth | PUSH | MODIFY | PUSH_ETH } [ CONTROL ]

PUSH := push [ protocol VLANPROTO ] [ priority VLANPRIO ] id VLANID

MODIFY := modify [ protocol VLANPROTO ] [ priority VLANPRIO ] id VLANID

PUSH_ETH := push_eth dst_mac LLADDR src_mac LLADDR

CONTROL := { reclassify | pipe | drop | continue | pass | goto chain CHAIN_INDEX }

اکشن vlan امکان کپسوله‌سازی (encapsulation) یا کپسوله‌زدایی (decapsulation) استاندارد 802.1Q را روی بسته فراهم می‌کند که از طریق حالت‌های عملیاتی POP، PUSH و MODIFY مشخص می‌شود. حالت POP ساده است، زیرا برای حذف بیرونی‌ترین کپسوله‌سازی VLAN به اطلاعات بیشتری نیاز ندارد. حالت‌های PUSH و MODIFY حداقل نیازمند یک VLANID هستند و به کاربر اجازه می‌دهند به صورت اختیاری VLANPROTO مورد نظر را انتخاب کند.

اکشن vlan همچنین می‌تواند برای افزودن یا حذف سرآیند پایه اترنت استفاده شود. حالت pop_eth که هیچ آرگومانی دریافت نمی‌کند، برای حذف سرآیند پایه اترنت به کار می‌رود. تمام VLANهای موجود باید پیش از این حذف شده باشند. عملیات معکوس، یعنی افزودن سرآیند پایه اترنت، با حالت push_eth انجام می‌شود. در این حالت، بسته نباید سرآیند MAC داشته باشد (پشته‌سازی سرآیندهای MAC مجاز نیست). این حالت بیشتر زمانی مفید است که یک اکشن قبلی کل فریم اصلی را پشت یک سرآیند شبکه کپسوله‌سازی کرده باشد و پیش از هدایت بسته حاصل، نیاز به افزودن یک سرآیند اترنت به ابتدای آن باشد.

حالت کپسوله‌زدایی (decapsulation)؛ هیچ آرگومان دیگری مجاز نیست.
حالت کپسوله‌سازی (encapsulation). حداقل به گزینه id نیاز دارد.
حالت جایگزینی (replace). تگ موجود 802.1Q جایگزین می‌شود. حداقل به گزینه id نیاز دارد.
حالت کپسوله‌زدایی سرآیند اترنت. فقط روی یک سرآیند اترنت خالص کار می‌کند: در صورت وجود VLAN، ابتدا باید حذف شوند.
حالت کپسوله‌سازی سرآیند اترنت. مقدار Ethertype به طور خودکار با استفاده از نوع سرآیند شبکه تنظیم می‌شود. زنجیره‌سازی سرآیندهای اترنت مجاز نیست: هنگام استفاده از این حالت بسته نباید هیچ سرآیند MAC داشته باشد. نیازمند گزینه‌های dst_mac و src_mac است.
شناسه VLAN (یا همان VLAN ID) را برای کپسوله‌سازی مشخص می‌کند. VLANID یک عدد صحیح ۱۶ بیتی بدون علامت است که قالب آن به صورت خودکار تشخیص داده می‌شود (برای نمونه پیشوند '0x' برای تفسیر هگزادسیمال و غیره).
پروتکل VLAN مورد استفاده را انتخاب می‌کند. در زمان نگارش این مستند، هسته لینوکس فقط 802.1Q یا 802.1ad را می‌پذیرد.
اولویت VLAN مورد استفاده را انتخاب می‌کند. عددی ده‌دهی در بازه 0 تا 7 است.
آدرس MAC مقصد را تعیین می‌کند.
آدرس MAC مبدأ را تعیین می‌کند.
نحوه ادامه فرآیند پس از اجرای این اکشن را مشخص می‌کند.
دسته‌بندی را با بازگشت به نخستین فیلتر متصل به والد این اکشن مجدداً آغاز می‌کند.
عملیات را با اکشن بعدی ادامه می‌دهد؛ این حالت پیش‌فرض است.
بسته بدون اجرای اکشن‌های بعدی دور انداخته می‌شود.
دسته‌بندی را با فیلتر بعدی موجود در صف ادامه می‌دهد.
بسته را برای پردازش به qdisc فراخواننده بازمی‌گرداند. این کار به فرآیند دسته‌بندی پایان می‌دهد.

مثال زیر بسته‌های ICMP ورودی روی eth0 از مبدأ 10.0.0.2 را درون VLAN با شناسه 123 کپسوله‌سازی می‌کند:

#tc qdisc add dev eth0 handle ffff: ingress
#tc filter add dev eth0 parent ffff: pref 11 protocol ip \
	u32 match ip protocol 1 0xff flowid 1:1 \
	    match ip src 10.0.0.2 flowid 1:1 \
	action vlan push id 123

در اینجا نمونه‌ای از عملکرد pop آورده شده است: بسته‌های ورودی VLAN روی eth0 کپسوله‌زدایی شده و سپس فرآیند دسته‌بندی برای بسته خالص مجدداً آغاز می‌شود:

#tc qdisc add dev eth0 handle ffff: ingress
#tc filter add dev $ETH parent ffff: pref 1 protocol 802.1Q \
	u32 match u32 0 0 flowid 1:1 \
	action vlan pop reclassify

برای مشاهده مثالی از حالت‌های pop_eth و push_eth، صفحه راهنمای tc-mpls(8) را ببینید.

tc(8), tc-mpls(8)

12 Jan 2015 iproute2