hwkim3330의 블로그

View the Project on GitHub hwkim3330/blog

아래 두 블록을 그대로 복사-붙여넣기 하면

순서 요약

  1. PC 터미널에 블록 ① 입력 → iperf 서버·캡처 대기
  2. 보드 터미널에 블록 ② 입력 → CBS 설정 + 100 Mb/s 두 스트림 전송
  3. 캡처가 끝나면 PC 측 pcap 확인, 보드에서 tc -s qdisc show dev end0 로 drops 확인

① PC (수신·캡처) ― 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 서버 두 개
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

실행 → ./pc_recv_capture.sh


② 보드 (송신·CBS) ― 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      # TC2
tc filter add dev $IF egress protocol ip prio 10 flower ip_proto udp dst_port 6002 \
    action skbedit priority 3      # TC3

######## 4. 100 Mb/s × 2 UDP 스트림 송신 ########
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

실행 → sudo ./board_send_cbs.sh


확인 지표