← Documents Documentation/admin-guide/cgroup-v1/net_cls.rst GitHub 원문 ↗

Linux 6.18.37 · Administration / Cgroup v1

Network classifier cgroup

Network packet classid encoding과 tc·iptables 연동 예제를 설명합니다.

Source pathDocumentation/admin-guide/cgroup-v1/net_cls.rst
Source versionLinux v6.18.37
TranslationDUJINLABS 전문 번역 + 해설

요약·해설과 원문, 전문 번역을 서로 분리했습니다. API 이름, symbol, source path는 원문 표기를 사용합니다.

1. 요약·해설

원문의 핵심 논리와 kernel programming 관점의 보충 설명입니다. 아래의 전문 번역과는 별도로 작성했습니다.

Classid model

net_cls.rst:1-20

`net_cls.classid`의 major·minor handle encoding과 packet tagging을 정리합니다.

Traffic-control example

net_cls.rst:21-44

`net_cls`, HTB class, cgroup filter와 iptables를 잇는 예제입니다.

2. 영어 원문 전체

번역 기준이 된 Linux v6.18.37 원문입니다. 줄 번호는 이 버전의 파일 좌표입니다.

원문 전체 펼치기
1 =========================
2 Network classifier cgroup
3 =========================
4
5 The Network classifier cgroup provides an interface to
6 tag network packets with a class identifier (classid).
7
8 The Traffic Controller (tc) can be used to assign
9 different priorities to packets from different cgroups.
10 Also, Netfilter (iptables) can use this tag to perform
11 actions on such packets.
12
13 Creating a net_cls cgroups instance creates a net_cls.classid file.
14 This net_cls.classid value is initialized to 0.
15
16 You can write hexadecimal values to net_cls.classid; the format for these
17 values is 0xAAAABBBB; AAAA is the major handle number and BBBB
18 is the minor handle number.
19 Reading net_cls.classid yields a decimal result.
20
21 Example::
22
23 mkdir /sys/fs/cgroup/net_cls
24 mount -t cgroup -onet_cls net_cls /sys/fs/cgroup/net_cls
25 mkdir /sys/fs/cgroup/net_cls/0
26 echo 0x100001 > /sys/fs/cgroup/net_cls/0/net_cls.classid
27
28 - setting a 10:1 handle::
29
30 cat /sys/fs/cgroup/net_cls/0/net_cls.classid
31 1048577
32
33 - configuring tc::
34
35 tc qdisc add dev eth0 root handle 10: htb
36 tc class add dev eth0 parent 10: classid 10:1 htb rate 40mbit
37
38 - creating traffic class 10:1::
39
40 tc filter add dev eth0 parent 10: protocol ip prio 10 handle 1: cgroup
41
42 configuring iptables, basic example::
43
44 iptables -A OUTPUT -m cgroup ! --cgroup 0x100001 -j DROP
45

3. 한국어 전문 번역

영어 원문의 문단 순서와 의미를 유지한 전체 번역입니다. 코드, 함수명, symbol과 URL은 원문 표기를 유지합니다.

Class identifier와 packet 분류

1-20

Network classifier cgroup은 network packet에 class identifier인 `classid`를 붙이는 interface를 제공합니다.

Traffic Controller(`tc`)는 이 identifier를 사용해 서로 다른 cgroup의 packet에 서로 다른 priority를 할당할 수 있습니다. Netfilter(`iptables`) 역시 같은 tag를 보고 해당 packet에 action을 적용할 수 있습니다.

`net_cls` cgroup instance를 만들면 `net_cls.classid` file이 생기며 초기값은 `0`입니다. 이 file에는 `0xAAAABBBB` 형식의 hexadecimal 값을 씁니다. `AAAA`는 major handle number이고 `BBBB`는 minor handle number입니다. 값을 읽을 때에는 decimal 결과가 반환됩니다.

net_cls.classid encoding
FieldRepresentationMeaning
Major handle`AAAA`상위 16-bit traffic-control handle
Minor handle`BBBB`하위 16-bit class number
Write form`0xAAAABBBB`Hexadecimal class identifier
Read formDecimal같은 identifier의 10진수 표현

32-bit class identifier의 표기와 read-back 형식입니다.

net_cls, tc와 iptables 설정 예제

21-44

먼저 `net_cls` filesystem을 mount하고 subgroup `0`을 만든 뒤 `net_cls.classid`에 `0x100001`을 씁니다.

	mkdir /sys/fs/cgroup/net_cls
	mount -t cgroup -onet_cls net_cls /sys/fs/cgroup/net_cls
	mkdir /sys/fs/cgroup/net_cls/0
	echo 0x100001 >  /sys/fs/cgroup/net_cls/0/net_cls.classid

이 값은 traffic-control handle `10:1`에 해당하며, file을 읽으면 decimal 값 `1048577`이 나옵니다.

	cat /sys/fs/cgroup/net_cls/0/net_cls.classid
	1048577

다음 명령은 `eth0` root에 handle `10:`인 HTB qdisc를 만들고, parent `10:` 아래에 classid `10:1`과 rate `40mbit`인 class를 추가합니다.

	tc qdisc add dev eth0 root handle 10: htb
	tc class add dev eth0 parent 10: classid 10:1 htb rate 40mbit

그 뒤 cgroup classifier filter를 추가해 traffic class `10:1`을 사용합니다.

	tc filter add dev eth0 parent 10: protocol ip prio 10 handle 1: cgroup

기본 `iptables` 예제는 cgroup classid가 `0x100001`이 아닌 OUTPUT packet을 drop합니다.

	iptables -A OUTPUT -m cgroup ! --cgroup 0x100001 -j DROP
Packet classification path
Process in net_cls cgroupPacket tagged 0x100001tc cgroup filter maps 10:1HTB class 10:1 at 40mbit
Packet tagged 0x100001iptables cgroup matchAllow matching packet; DROP nonmatching OUTPUT

cgroup에 기록한 classid가 traffic-control과 Netfilter 정책으로 이어지는 흐름입니다.