목표
보드 end0 → PC enp9s0 방향으로 UDP 100 Mb/s 두 스트림(6001, 6002)을 보내면서
PC에서 pcap 저장 & 결과 검증
장치 | 인터페이스 | IP/넷마스크 |
---|---|---|
PC | enp9s0 | 169.254.13.30/16 |
보드 | end0 | 169.254.13.31/16 |
pc_recv_capture.sh
cat <<'EOF' > pc_recv_capture.sh
#!/bin/sh
IF=enp9s0
PC_IP=169.254.13.30
BOARD_IP=169.254.13.31
# IP 설정
sudo ip addr flush dev $IF
sudo ip addr add ${PC_IP}/16 dev $IF
sudo ip link set $IF up
# pcap 캡처 시작
CAP="$HOME/cbs_recv_$(date +%Y%m%d_%H%M%S).pcap"
sudo tcpdump -i $IF udp and \(port 6001 or port 6002\) -w $CAP &
TCPDUMP_PID=$!
# iperf3 서버 2개
iperf3 -s -p 6001 -i 1 &
iperf3 -s -p 6002 -i 1 &
IPERF_PIDS="$!"
# 45 초 뒤 종료(보드 40 s 전송 예정)
sleep 45
kill $IPERF_PIDS
sudo kill $TCPDUMP_PID
echo "=== pcap saved to $CAP ==="
EOF
chmod +x pc_recv_capture.sh
board_send_cbs.sh
cat <<'EOF' > board_send_cbs.sh
#!/bin/sh
IF=end0
BOARD_IP=169.254.13.31
PC_IP=169.254.13.30
######## 0. IP 설정 ########
ip addr flush dev $IF
ip addr add ${BOARD_IP}/16 dev $IF
ip link set $IF up
######## 1. MQPRIO (메뉴얼 맵) ########
tc qdisc del dev $IF root 2>/dev/null
tc qdisc add dev $IF root handle 1: mqprio \
hw 0 num_tc 5 \
map 1 1 2 3 4 \
queues 1@0 1@1 1@2 1@3 1@4
######## 2. CBS ─ TC2 20 Mb/s, TC3 10 Mb/s ########
tc qdisc replace dev $IF parent 1:2 cbs \
idleslope 20000 sendslope -980000 \
hicredit 2147483647 locredit -2147483648 offload 1
tc qdisc replace dev $IF parent 1:3 cbs \
idleslope 10000 sendslope -990000 \
hicredit 2147483647 locredit -2147483648 offload 1
######## 3. clsact + flower : 포트 → SKB prio ########
tc qdisc add dev $IF clsact
tc filter add dev $IF egress protocol ip prio 10 flower ip_proto udp dst_port 6001 \
action skbedit priority 2
tc filter add dev $IF egress protocol ip prio 10 flower ip_proto udp dst_port 6002 \
action skbedit priority 3
######## 4. UDP 100 Mb/s × 2 스트림 송신 ########
iperf3 -c ${PC_IP} -p 6001 -u -b 100M -l 1470 -t 40 -i 0 -f m &
iperf3 -c ${PC_IP} -p 6002 -u -b 100M -l 1470 -t 40 -i 0 -f m &
wait
echo "=== 전송 완료. 'tc -s qdisc show dev $IF' 로 드롭 확인 ==="
EOF
chmod +x board_send_cbs.sh
# 1) PC 터미널
./pc_recv_capture.sh # pcap 캡처 + iperf 서버 대기
# 2) 보드 터미널 (sudo 필요)
./board_send_cbs.sh # CBS 설정 + 두 스트림 송신
측정 | 기대 |
---|---|
PC 수신 속도 | 6001 ≈ 20 Mb/s, 6002 ≈ 10 Mb/s |
보드 qdisc | tc -s qdisc show dev end0 → TC2·TC3 drops 증가 |
pcap 분석 | Wireshark → 초당 비트레이트 그래프에서 20 M / 10 M 한도 확인 |
현상 | 점검 |
---|---|
속도가 제한되지 않음 | flower 필터 → SKB prio 매핑 실패? tc filter show dev end0 egress 확인 |
offload failed 오류 |
queue 0 에 CBS 걸었는지, 커널 ≥ 5.15 인지 확인 |
링크 Down | ethtool end0 / ethtool enp9s0 로 Link detected 여부 확인 |
이 문서대로 따라 하면 메뉴얼 그대로의 CQAV 시험(TC2 20 Mb/s + TC3 10 Mb/s) 결과를 손쉽게 재현할 수 있습니다.