hwkim3330의 블로그

View the Project on GitHub hwkim3330/blog

네, 알겠습니다. 셸 스크립트 파일을 만들고 실행하는 과정 없이, 단순히 시리얼 터미널에 순서대로 복사해서 붙여넣기만 하면 모든 설정이 완료되도록 각 보드별 명령어 묶음을 만들어 드리겠습니다.

아래 명령어들은 cat << 'EOF' > ...sh ... 를 사용하여 스크립트 파일을 동적으로 생성하고 바로 실행하는 방식입니다. 이렇게 하면 여러 줄의 명령어를 한 번에 붙여넣어도 중간에 끊기거나 오작동하지 않습니다.


최종 절차: 시리얼 터미널에 복사 & 붙여넣기

사전 준비

  1. 물리적 연결:
    • 보드 A의 P2A ↔ 보드 B의 P2A (랜선 1)
    • 보드 A의 P2B ↔ 보드 B의 P2B (랜선 2)
    • PC에 두 보드의 UART0 포트를 각각 연결하여 2개의 터미널 창을 엽니다.
  2. 보드 부팅 및 로그인:
    • 두 보드를 모두 부팅하고, 각 터미널에서 root로 로그인합니다.

1단계: 보드 B (Listener / 수신측) 설정

먼저 보드 B의 터미널 창에 아래의 전체 블록을 한 번에 복사하여 붙여넣기 하십시오.

cat << 'EOF' > /home/root/frer_listener.sh
#!/bin/sh

# =============================================================
#         S32G FRER - 수신측(Listener) 설정 스크립트
# =============================================================

# 변수 설정
STREAM_ID=1
VLAN_ID=200
MY_IP="192.168.200.2"
HIF0_ID=4
ANY_INPUT_IF=0

echo "=====[1/5] 이전 설정 초기화 및 인터페이스 활성화 ====="
ip link del hif0.200 >/dev/null 2>&1
libfci_cli bd-remif --vlan=$VLAN_ID --interface=hif0 >/dev/null 2>&1
libfci_cli bd-remif --vlan=$VLAN_ID --interface=emac0 >/dev/null 2>&1
libfci_cli bd-remif --vlan=$VLAN_ID --interface=emac1 >/dev/null 2>&1
libfci_cli bd-del --vlan=$VLAN_ID >/dev/null 2>&1
libfci_cli phyif-update --interface=emac0 --enable
libfci_cli phyif-update --interface=emac1 --enable
libfci_cli phyif-update --interface=hif0 --enable
echo "OK"

echo "\n=====[2/5] FRER 관련 기능 활성화 ====="
libfci_cli fwfeat-set --feature=stream-identification --enable
libfci_cli fwfeat-set --feature=sequence-recovery --enable
libfci_cli fwfeat-set --feature=tagging --enable
echo "OK"

echo "\n=====[3/5] 중복 제거할 스트림 식별 규칙 설정 ====="
libfci_cli fwfeat-el-set --feature=stream-identification --element=handle_table --pos=$STREAM_ID --us=4 --payload=$STREAM_ID
libfci_cli fwfeat-el-set --feature=stream-identification --element=iport_table --pos=$STREAM_ID --us=1 --payload=$ANY_INPUT_IF
libfci_cli fwfeat-el-set --feature=stream-identification --element=tagged_table --pos=$STREAM_ID --us=1 --payload=1
echo "OK"

echo "\n=====[4/5] 시퀀스 기반 중복 제거 및 태그 제거 설정 ====="
libfci_cli fwfeat-el-set --feature=sequence-recovery --element=recov_en_table --pos=$STREAM_ID --us=1 --payload=1
libfci_cli fwfeat-el-set --feature=sequence-recovery --element=history_len_table --pos=$STREAM_ID --us=1 --payload=32
libfci_cli fwfeat-el-set --feature=tagging --element=untag_en_table --pos=$STREAM_ID --us=1 --payload=1
echo "OK"

echo "\n=====[5/5] 최종 트래픽 수신을 위한 L2 브릿지 및 네트워크 설정 ====="
libfci_cli bd-add --vlan=$VLAN_ID
libfci_cli bd-insif --vlan=$VLAN_ID --interface=emac0
libfci_cli bd-insif --vlan=$VLAN_ID --interface=emac1
libfci_cli bd-insif --vlan=$VLAN_ID --interface=hif0
libfci_cli bd-update --vlan=$VLAN_ID --ucast-miss=FLOOD
ip link add link hif0 name hif0.$VLAN_ID type vlan id $VLAN_ID
ip addr add $MY_IP/24 dev hif0.$VLAN_ID
ip link set hif0.$VLAN_ID up
echo "OK"

echo "\n[성공] 수신측(Listener) 설정이 완료되었습니다."
echo "이제부터 tcpdump -i hif0.$VLAN_ID -n icmp 명령어로 수신 상태를 모니터링하세요."
EOF
chmod +x /home/root/frer_listener.sh
/home/root/frer_listener.sh

2단계: 보드 A (Talker / 송신측) 설정

보드 A의 터미널 창에 아래의 전체 블록을 한 번에 복사하여 붙여넣기 하십시오.

cat << 'EOF' > /home/root/frer_talker.sh
#!/bin/sh

# =============================================================
#           S32G FRER - 송신측(Talker) 설정 스크립트
# =============================================================

# 변수 설정
STREAM_ID=1
VLAN_ID=200
TARGET_IP="192.168.200.2"
MY_IP="192.168.200.1"
HIF0_ID=4
PORT_MASK=3 # emac0(bit0) + emac1(bit1)

echo "=====[1/5] 이전 설정 초기화 및 인터페이스 활성화 ====="
ip link del hif0.200 >/dev/null 2>&1
libfci_cli bd-remif --vlan=$VLAN_ID --interface=hif0 >/dev/null 2>&1
libfci_cli bd-remif --vlan=$VLAN_ID --interface=emac0 >/dev/null 2>&1
libfci_cli bd-remif --vlan=$VLAN_ID --interface=emac1 >/dev/null 2>&1
libfci_cli bd-del --vlan=$VLAN_ID >/dev/null 2>&1
libfci_cli phyif-update --interface=hif0 --enable
libfci_cli phyif-update --interface=emac0 --enable
libfci_cli phyif-update --interface=emac1 --enable
echo "OK"

echo "\n=====[2/5] FRER 관련 기능 활성화 ====="
libfci_cli fwfeat-set --feature=stream-identification --enable
libfci_cli fwfeat-set --feature=stream-splitting --enable
libfci_cli fwfeat-set --feature=tagging --enable
echo "OK"

echo "\n=====[3/5] 복제할 스트림 식별 규칙 설정 (VLAN ID 기반) ====="
libfci_cli fwfeat-el-set --feature=stream-identification --element=handle_table --pos=$STREAM_ID --us=4 --payload=$STREAM_ID
libfci_cli fwfeat-el-set --feature=stream-identification --element=iport_table --pos=$STREAM_ID --us=1 --payload=$HIF0_ID
libfci_cli fwfeat-el-set --feature=stream-identification --element=vlanid_table --pos=$STREAM_ID --us=2 --payload=$VLAN_ID
echo "OK"

echo "\n=====[4/5] 스트림 복제 및 시퀀스 태깅 설정 ====="
libfci_cli fwfeat-el-set --feature=stream-splitting --element=port_mask_table --pos=$STREAM_ID --us=1 --payload=$PORT_MASK
libfci_cli fwfeat-el-set --feature=tagging --element=tag_en_table --pos=$STREAM_ID --us=1 --payload=1
echo "OK"

echo "\n=====[5/5] 트래픽 전달을 위한 L2 브릿지 및 네트워크 설정 ====="
libfci_cli bd-add --vlan=$VLAN_ID
libfci_cli bd-insif --vlan=$VLAN_ID --interface=hif0
libfci_cli bd-insif --vlan=$VLAN_ID --interface=emac0
libfci_cli bd-insif --vlan=$VLAN_ID --interface=emac1
libfci_cli bd-update --vlan=$VLAN_ID --ucast-miss=FLOOD
ip link add link hif0 name hif0.$VLAN_ID type vlan id $VLAN_ID
ip addr add $MY_IP/24 dev hif0.$VLAN_ID
ip link set hif0.$VLAN_ID up
echo "OK"

echo "\n[성공] 송신측(Talker) 설정이 완료되었습니다."
echo "이제 'ping $TARGET_IP' 명령어로 테스트를 시작하세요."
EOF
chmod +x /home/root/frer_talker.sh
/home/root/frer_talker.sh

3단계: 테스트 및 검증

이제 모든 설정이 완료되었습니다. 테스트를 시작합니다.

  1. 모니터링 시작 (보드 B):
    • 보드 B의 터미널에서 아래 명령어를 입력하여 패킷 수신을 확인합니다.
      tcpdump -i hif0.200 -n icmp
      
    • tcpdump: listening on hif0.200... 메시지가 나오고 커서가 깜빡이며 대기합니다.
  2. 트래픽 생성 (보드 A):
    • 보드 A의 터미널에서 아래 명령어를 입력하여 보드 B로 ping을 보냅니다.
      ping 192.168.200.2
      
  3. 결과 확인:
    • 보드 A에서 ping을 시작하면, 보드 B의 tcpdump 화면에 아래와 유사한 메시지가 1초에 한 번씩 출력되어야 합니다.
      19:30:01.123456 IP 192.168.200.1 > 192.168.200.2: ICMP echo request, id 123, seq 1, length 64
      19:30:02.123457 IP 192.168.200.1 > 192.168.200.2: ICMP echo request, id 123, seq 2, length 64
      ...
      
  4. 장애 시뮬레이션:
    • ping이 계속 실행되는 동안, 랜선 1(P2A끼리 연결된 선)을 물리적으로 뽑습니다.
    • 보드 B의 tcpdump는 잠깐 멈추거나 한두 패킷을 놓칠 수 있지만, 끊기지 않고 계속해서 패킷을 수신해야 합니다.
    • 다시 랜선 1을 연결하고, 이번에는 랜선 2(P2B끼리 연결된 선)를 뽑습니다.
    • 역시 보드 B는 패킷을 계속해서 수신해야 정상입니다.

이제 터미널에 복사-붙여넣기만으로 모든 설정과 테스트 준비가 완료됩니다. 보드 수리가 끝나면 이 절차대로 진행해 보십시오.