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

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


tc ... action mpls { POP | PUSH | MODIFY | dec_ttl } [ CONTROL ]

POP := pop protocol MPLS_PROTO

PUSH := { push | mac_push } [ protocol MPLS_PROTO ] [ tc MPLS_TC ] [ ttl MPLS_TTL ] [ bos MPLS_BOS ] label MPLS_LABEL

MODIFY := modify [ label MPLS_LABEL ] [ tc MPLS_TC ] [ ttl MPLS_TTL ]

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

اکشن mpls عملیات کپسوله‌سازی (encapsulation) یا کپسوله‌زدایی (decapsulation) را روی بسته اعمال می‌کند که در حالت‌های عملکردی POP، PUSH، MODIFY و DEC_TTL نمایان می‌شود. حالت POP به مشخصه ethertype سرآیندی که پس از سرآیند MPLS قرار دارد (مانند IPv4 یا یک سرآیند MPLS دیگر) نیاز دارد. این حالت سرآیند بیرونی MPLS را حذف کرده و ethertype را در سرآیند MAC با مقدار مشخص‌شده جایگزین می‌کند. حالت‌های PUSH و MODIFY اطلاعات سرآیند کنونی MPLS را به‌روزرسانی کرده یا یک سرآیند جدید اضافه می‌کنند. حالت PUSH حداقل نیازمند یک MPLS_LABEL است. حالت DEC_TTL به هیچ آرگومانی نیاز ندارد و صرفاً مقدار ۱ واحد از فیلد TTL در سرآیند MPLS کسر می‌کند.

حالت کپسوله‌زدایی (decapsulation). نیازمند پروتکل سرآیند بعدی است.
حالت کپسوله‌سازی (encapsulation). سرآیند MPLS را بین سرآیند MAC و سرآیندهای شبکه اضافه می‌کند. حداقل به گزینه label نیاز دارد.
حالت کپسوله‌سازی (encapsulation). سرآیند MPLS را پیش از سرآیند MAC اضافه می‌کند. حداقل به گزینه label نیاز دارد.
حالت جایگزینی (replace). برچسب موجود MPLS جایگزین می‌شود. گزینه‌های label، tc و ttl همگی اختیاری هستند.
کاهش ۱ واحد از فیلد TTL در بیرونی‌ترین سرآیند MPLS.
برچسب MPLS را برای بیرونی‌ترین سرآیند MPLS تعیین می‌کند. MPLS_LABEL یک عدد صحیح ۲۰ بیتی بدون علامت است که قالب آن به طور خودکار تشخیص داده می‌شود (برای نمونه پیشوند '0x' برای تفسیر به صورت هگزادسیمال و غیره).
پروتکل مورد استفاده را انتخاب می‌کند. برای اکشن‌های push این مقدار باید mpls_uc یا mpls_mc باشد (مقدار پیش‌فرض mpls_uc است). برای اکشن‌های pop باید پروتکل سرآیند بعدی باشد. این گزینه نمی‌تواند همراه با modify استفاده شود.
مقدار کلاس ترافیک (TC) را برای بیرونی‌ترین سرآیند MPLS تعیین می‌کند؛ عددی ده‌دهی در بازه 0 تا 7. مقدار پیش‌فرض 0 است.
مقدار TTL را برای بیرونی‌ترین سرآیند MPLS تعیین می‌کند؛ عددی در بازه 0 تا 255. در صورتی که این مقدار صریحاً تعیین نشود، یک مقدار پیش‌فرض غیرصفر انتخاب خواهد شد.
بیت انتهای پشته (bottom of stack) را به صورت دستی برای افزودن سرآیند MPLS تنظیم می‌کند. حالت پیش‌فرض این است که TC بر اساس سرآیند بعدی بسته، این بیت را به طور خودکار تنظیم (یا پاک) کند.
نحوه ادامه پردازش پس از اجرای این اکشن را مشخص می‌کند.
دسته‌بندی را با پرش به اولین فیلتر متصل به والد این اکشن مجدداً آغاز می‌کند.
عملیات را با اکشن بعدی ادامه می‌دهد؛ این حالت پیش‌فرض است.
بسته بدون اجرای اکشن‌های بعدی دور انداخته می‌شود.
دسته‌بندی را با فیلتر بعدی موجود ادامه می‌دهد.
برای پردازش بسته به qdisc فراخواننده بازمی‌گردد. این عمل به فرآیند دسته‌بندی پایان می‌دهد.

مثال زیر بسته‌های IP ورودی روی eth0 را با برچسب 123 درون MPLS کپسوله‌سازی کرده و آن‌ها را از طریق eth1 ارسال می‌کند:

#tc qdisc add dev eth0 handle ffff: ingress
#tc filter add dev eth0 protocol ip parent ffff: flower \
	action mpls push protocol mpls_uc label 123  \
	action mirred egress redirect dev eth1

در این مثال، بسته‌های unicast ورودی MPLS روی eth0 کپسوله‌زدایی شده و به سمت eth1 هدایت می‌شوند:

#tc qdisc add dev eth0 handle ffff: ingress
#tc filter add dev eth0 protocol mpls_uc parent ffff: flower \
	action mpls pop protocol ipv4  \
	action mirred egress redirect dev eth1

در این مثال دیگر، فریم‌های ورودی اترنت با برچسب 123 و مقدار TTL برابر با 64 درون MPLS کپسوله‌سازی می‌شوند. سپس یک سرآیند بیرونی اترنت افزوده شده و فریم حاصل در نهایت روی eth1 ارسال می‌گردد:

#tc qdisc add dev eth0 ingress
#tc filter add dev eth0 ingress matchall \
	action mpls mac_push label 123 ttl 64 \
	action vlan push_eth \
		dst_mac 02:00:00:00:00:02 \
		src_mac 02:00:00:00:00:01 \
	action mirred egress redirect dev eth1

مثال زیر فرض می‌کند بسته‌های ورودی MPLS با برچسب 123 حامل فریم‌های اترنت هستند. سرآیند بیرونی اترنت و سرآیندهای MPLS حذف شده و سپس فریم داخلی اترنت روی eth1 ارسال می‌شود:

#tc qdisc add dev eth0 ingress
#tc filter add dev eth0 ingress protocol mpls_uc \
	flower mpls_label 123 mpls_bos 1 \
	action vlan pop_eth \
	action mpls pop protocol teb \
	action mirred egress redirect dev eth1

tc(8), tc-mirred(8), tc-vlan(8)

22 May 2019 iproute2