# P4 SDEについて 現状、正しいと思われるSDE(Intel P4 Studio)のビルドの手順(2023/07/14) SONiCはEdgecore-SONiC_20220819_083247_ec202111_bfn_154 SDEのバージョンは9.9.0 ## SONiCに含まれるバージョンの確認 SONiC上で以下のコマンドを実行 ```bash= docker exec -ti syncd /opt/bfn/install/bin/bfshell ``` シェルが起動されたら ```= version ``` 出力されるバージョンを確認。 インテルのサイトで対応するバージョンX.Y.Zの資料を入手。 - scripts-for-sonic-sde-X.Y.Z.zip - bf-sde-X.Y.Z.tgz - bf-reference-bsp-X.Y.Z.tgz - Building_SONiC_with_SDE_9.X.pdf 以降ではバージョン9.9.0は使用 基本的にBuilding_SONiC_with_SDE_9.X.pdfにビルド方法記載(違う場所あり) ## 必要とされるファイル - bf-reference-bsp-9.X.Y.tgz - bf-sde-9.X.Y.tgz - make_sde_deb.sh - make_platform_deb.sh - uname-deb10 これらのファイルが~/sdeにあると以降では仮定する。 ## ビルドするコンテナを用意 以下のコマンドを~/sdeで実行 ```bash= DEV_USER="\ apt update; apt install -y sudo; echo '%sudo ALL=(ALL) NOPASSWD:ALL' >> /etc/sudoers; adduser --disabled-password --gecos '' ${USER}; adduser ${USER} sudo; groupmod -g $(id -g ${USER}) ${USER}; usermod -u ${UID} -g $(id -g ${USER}) ${USER}; su ${USER}; " docker run -v $(readlink -f .):/sde --name debian-buster-sde -ti debian:buster bash -c "${DEV_USER}" (以下コンテナ内 aptとunameの順番逆の必要あるかも) cd /sde sudo mv /bin/uname /bin/uname.old sudo cp uname-deb10 /bin/uname # /bin/unameに実行権限付与? sudo apt update sudo apt install -y apt-utils (Apresia) sudo apt install -y dh-make python sudo apt install -y linux-headers-amd64 ``` ### コンテナの入り方 ```bash= # (Optional) Start docker container docker start debian-buster-sde # (Optional) Enter docker container shell docker exec -ti --privileged -u $USER debian-buster-sde bash ``` ## SDEのビルド ### 環境構築 コンテナの中で以下を実行 ```bash= cd /sde # Setup build env buildNumber=9.9.0 WORKSPACE=`pwd` export SDE=$WORKSPACE/bf-sde-$buildNumber export SDE_INSTALL=$SDE/install export PATH=$SDE_INSTALL/bin:$PATH # Extract SDE sources tar -vxzf bf-sde-$buildNumber.tgz # To install SDE dependencies cd $SDE/p4studio sudo ./install-p4studio-dependencies.sh ./p4studio dependencies install # たぶんいらない ``` ### SDEのビルド p4studio/profiles/switch-p4-16.yamlを以下のように変更 ```yaml= global-options: asic: true features: bf-diags: false drivers: bfrt: true grpc: true thrift-driver: true switch: profile: x1_tofino sai: true thrift-switch: true architectures: - tofino ``` 以下のコマンドでビルドを実行 ```bash= cd $SDE/p4studio ./p4studio profile apply ./profiles/switch-p4-16.yaml --bsp-path /sde/bf-reference-bsp-9.9.0.tgz ``` ### debファイルの作成 #### debファイル作成スクリプト修正 make_platform_deb.shに、以下の★部分の行を追記 ```sh= ln -s x86_64-accton_wedge100bf_65x-r0 x86_64-accton_wedge100bf_32x-r0 ln -s x86_64-accton_wedge100bf_65x-r0 x86_64-accton_as9516bf_32d-r0 ln -s x86_64-accton_wedge100bf_65x-r0 x86_64-accton_as9516_32d-r0 ln -s x86_64-accton_wedge100bf_65x-r0 x86_64-accton_es8632_32d-r0 ln -s x86_64-accton_wedge100bf_65x-r0 x86_64-accton_wedge100bf_32qs-r0 ★ ``` #### debファイルの作成 以下のコマンドでdebファイルを作成 ```bash= export USER="root" cd $SDE mkdir -p tools/sonic cp ../make_platform_deb.sh tools/sonic/ cp ../make_sde_deb.sh tools/sonic/ cd $SDE/tools/sonic chmod +x make_platform_deb.sh chmod +x make_sde_deb.sh ./make_platform_deb.sh ./make_sde_deb.sh ``` ## syncdコンテナ更新 SONiCのコンテナの更新を行う。 以降SONiC上での操作 以下の2つのファイルをSONiCに移行 - bfnsdk_1.0.0_amd64.deb - bfnplatform_1.0.0_amd64.deb 以下のDockerfileを作成 ```dockerfile= FROM docker-syncd-bfn:Edgecore-SONiC_20220819_083247_ec202111_bfn_154 RUN dpkg -r bfnsdk RUN dpkg -r bfnplatform # RUN rm -rf /opt/bfn ADD bfnplatform_1.0.0_amd64.deb /root ADD bfnsdk_1.0.0_amd64.deb /root RUN dpkg -i /root/bfnplatform_1.0.0_amd64.deb && rm /root/bfnplatform_1.0.0_amd64.deb RUN dpkg -i /root/bfnsdk_1.0.0_amd64.deb && rm /root/bfnsdk_1.0.0_amd64.deb ``` ### コンテナイメージの作成 以下のコマンドでコンテナイメージを作成 ```bash= docker build -t docker-syncd-bfn:latest . # --no-cache=true? ``` ### コンテナの再初期化 ```bash= docker stop syncd && docker rm syncd sudo systemctl start syncd.service sudo config reload -y -f ``` ### syncdコンテナの動作確認 以下のコマンドで各物理ポートの状態が確認できれば,syncdの更新は正常に完了 ```bash= show interface status ``` ## その他 ### syncd programの起動方法 ```bash= docker exec -ti -e LD_LIBRARY_PATH=/opt/bfn/install/lib syncd /usr/bin/syncd_start.sh ``` ### make_sde_deb.shの実行時のエラーについて “Unknown libpython version”というエラーが出力されています。 こちらですが、make_sde_deb.shの中で、以下のようにpython 3.10の定義を追加いただければ、make_sde_deb.shが成功するのではないかと思います。 ```python= pushd files/opt/bfn/${instdir}/lib/ ln -sf libsai.so libsai.so.0 if [ -f libpython3.4m.so.1.0 ]; then ln -sf libpython3.4m.so.1.0 libpython3.4m.so # 以下を追加 elif [ -f libpython3.10.so.1.0 ]; then ln -sf libpython3.10.so.1.0 libpython3.10.so # elif [ -f libpython3.9.so.1.0 ]; then ln -sf libpython3.9.so.1.0 libpython3.9.so elif [ -f libpython3.8.so.1.0 ]; then ln -sf libpython3.8.so.1.0 libpython3.8.so else echo "Unknown libpython version" exit 1 fi popd ``` 以上、ご確認願います。 ### scpコピペ用 ```bash= scp ./bfnsdk_1.0.0_amd64.deb admin@192.168.12.122:~/syncd-build/ scp ./bfnplatform_1.0.0_amd64.deb admin@192.168.12.122:~/syncd-build/ ``` ### error ```bash= $ docker exec -ti -e LD_LIBRARY_PATH=/opt/bfn/install/lib syncd /usr/bin/syncd_start.sh vm.nr_hugepages = 196 vm.nr_hugepages = 196 vm.nr_hugepages = 196 mkdir: cannot create directory '/mnt/huge': File exists bf_switchd: Install dir: /opt/bfn/install bf_switchd: system services initialized bf_switchd: loading conf_file /usr/share/sonic/hwsku/switch-tna-sai.conf... bf_switchd: processing device configuration... Configuration for dev_id 0 Family : Tofino pci_sysfs_str : pci_int_mode : 0 sds_fw_path : share/tofino_sds_fw/avago/firmware bf_switchd: processing P4 configuration... P4 profile for dev_id 0 num P4 programs 1 p4_name: switch p4_pipeline_name: pipe libpd: libpdthrift: context: /opt/bfn/install/share/switch/pipe/context.json config: /opt/bfn/install/share/switch/pipe/tofino.bin diag: accton diag: Agent[0]: /opt/bfn/install/lib/platform/x86_64-accton_wedge100bf_32qs-r0/libpltfm_mgr.so bf_switchd: library /opt/bfn/install/lib/platform/x86_64-accton_wedge100bf_32qs-r0/libpltfm_mgr.so loaded bf_switchd: agent[0] initialized 2024-01-06 11:29:30.191850 BF_PLTFM ERROR - Error in claiming the interface with error code Resource busy at bf_pltfm_cp2112_open:988 2024-01-06 11:29:30.191975 BF_PLTFM ERROR - Error: Unable to open CP2112 devices iteration 0 2024-01-06 11:29:40.721565 BF_PLTFM ERROR - Unable to send command to bmc(i2cget -f -y 12 0x31 0x39 ) 2024-01-06 11:29:40.721765 BF_PLTFM ERROR - Unable to read CPLD USB bridge reset register 2024-01-06 11:29:42.734173 BF_PLTFM ERROR - Error in claiming the interface with error code Resource busy at bf_pltfm_cp2112_open:988 2024-01-06 11:29:42.734302 BF_PLTFM ERROR - Error: Unable to open CP2112 devices iteration 1 2024-01-06 11:29:42.734380 BF_PLTFM ERROR - pltfm_mgr: CP2112 library initialization failed 2024-01-06 11:29:42.734459 BF_PLTFM ERROR - Error in cp2112 initialization 2024-01-06 11:29:42.734616 BF_PLTFM ERROR - pltfm_mgr: platform init failed ``` ```bash= $ docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 58691f18ee57 docker-syncd-bfn:latest "/usr/local/bin/supe…" 8 minutes ago Up 8 minutes syncd f71e15c642ef 9f4e65986e2d "/usr/bin/docker_ini…" 5 months ago Exited (0) 25 hours ago dhcp_relay 07eb79dd2e3c docker-router-advertiser:latest "/usr/bin/docker-ini…" 5 months ago Up 8 minutes radv fac890f0769b docker-lldp:latest "/usr/bin/docker-lld…" 5 months ago Up 8 minutes lldp c26066de4557 docker-nat:latest "/usr/local/bin/supe…" 5 months ago Up 8 minutes nat d4456ef4664e docker-stp:latest "/usr/local/bin/supe…" 5 months ago Up 8 minutes stp 8ac062466ace docker-snmp:latest "/usr/local/bin/supe…" 5 months ago Up 8 minutes snmp b95dd841ed4a docker-sflow:latest "/usr/local/bin/supe…" 5 months ago Up 8 minutes sflow ef19999cb7b2 docker-sonic-telemetry:latest "/usr/local/bin/supe…" 5 months ago Up 8 minutes telemetry 9807bdf8c0dc docker-sonic-mgmt-framework:latest "/usr/local/bin/supe…" 5 months ago Up 8 minutes mgmt-framework da78a2918efc docker-teamd:latest "/usr/local/bin/supe…" 5 months ago Up 8 minutes teamd 55b9b8167cc6 docker-iccpd:latest "/usr/local/bin/supe…" 5 months ago Exited (137) 25 hours ago iccpd b055b9e6d542 docker-sonic-p4rt:latest "/usr/local/bin/supe…" 5 months ago Up 8 minutes p4rt dec801acbfb4 docker-orchagent:latest "/usr/bin/docker-ini…" 5 months ago Exited (0) 8 minutes ago swss d9dc58c3f198 docker-fpm-frr:latest "/usr/bin/docker_ini…" 5 months ago Up 9 minutes bgp fcf793a9ccc3 docker-platform-monitor:latest "/usr/bin/docker_ini…" 5 months ago Up 9 minutes pmon 4425097a4297 docker-database:latest "/usr/local/bin/dock…" 5 months ago Up 25 hours database ``` ```bash= $ show interface status Interface Lanes Speed MTU FEC Alias Vlan Oper Admin Type Asym PFC Oper Speed ----------- ------- ------- ----- ----- ------- ------ ------ ------- ------ ---------- ------------ ``` https://boostorg.jfrog.io/artifactory/main/release/1.67.0/source/boost_1_67_0.tar.bz2 https://sourceforge.net/projects/boost/files/boost/1.67.0/boost_1_67_0.tar.bz2/download