Cgroup classifier in tc(8) Linux Cgroup classifier in tc(8)

tc-cgroup - فیلتر کنترل ترافیک مبتنی بر گروه کنترل (cgroup)


tc filter ... cgroup [ match EMATCH_TREE ] [ action ACTION_SPEC ]

این فیلتر به عنوان یک راهنما برای tc عمل می‌کند تا مشخص کند شناسه کلاس (class ID) اختصاص‌یافته به گروه کنترل net_cls که فرایند مبدا بسته به آن تعلق دارد، باید برای طبقه‌بندی استفاده شود. بدیهی است که این فیلتر تنها برای بسته‌هایی که به صورت محلی تولید شده‌اند کاربرد دارد.

اعمال یک کنش (action) از چارچوب کنش‌های عمومی بر روی بسته‌های منطبق.
تطبیق بسته‌ها با استفاده از زیرساخت تطبیق گسترش‌یافته (extended match). برای توضیحات دقیق درباره نحو مجاز در EMATCH_TREE به صفحه راهنمای tc-ematch(8) مراجعه کنید.

به منظور استفاده از این فیلتر، ابتدا باید یک گروه کنترل net_cls ایجاد شده و شناسه کلاس و همچنین شناسه(های) فرایند به آن اختصاص یابد. دستورات زیر یک cgroup از نوع net_cls به نام "foobar" ایجاد می‌کنند:

modprobe cls_cgroup
mkdir /sys/fs/cgroup/net_cls
mount -t cgroup -onet_cls net_cls /sys/fs/cgroup/net_cls
mkdir /sys/fs/cgroup/net_cls/foobar

برای تخصیص یک شناسه کلاس به cgroup ایجادشده، فایلی به نام net_cls.classid باید ایجاد شود که حاوی شناسه کلاس مورد نظر به صورت یک عدد هگزادسیمال با عرض ۶۴ بیت است. ۳۲ بیت بالایی برای دسته اصلی (major handle) رزرو شده‌اند و بیت‌های باقیمانده دسته فرعی (minor) را نگه می‌دارند. بنابراین، یک شناسه کلاس مانند ff:be باید به این صورت نوشته شود: 0xff00be (صفرهای پیشتاز را می‌توان حذف کرد). برای ادامه مثال فوق، دستور زیر شناسه کلاس 1:2 را به cgroup با نام foobar اختصاص می‌دهد:

echo 0x10002 > /sys/fs/cgroup/net_cls/foobar/net_cls.classid

در نهایت، می‌توان شناسه‌های فرایند (PIDها) را به cgroup مشخص‌شده اختصاص داد:

echo 1234 > /sys/fs/cgroup/net_cls/foobar/tasks
echo 5678 > /sys/fs/cgroup/net_cls/foobar/tasks

اکنون تنها با متصل کردن یک فیلتر cgroup به یک qdisc، بسته‌های متعلق به شناسه‌های فرایند 1234 و 5678 به داخل کلاس 1:2 فرستاده می‌شوند.

tc(8), tc-ematch(8),
پرونده Documentation/cgroups/net_cls.txt از درخت هسته لینوکس

21 Oct 2015 iproute2