#!/usr/bin/env bash set -euo pipefail usage() { cat <<'USAGE' Usage: sudo script/ethercat/stop_ethercat.sh [iface] [--restore-network] Examples: sudo script/ethercat/stop_ethercat.sh eno1 sudo script/ethercat/stop_ethercat.sh eno1 --restore-network Environment: IGH_ROOT=... Override bundled IgH install path. ETHERCAT_CONF=... Override ethercatctl config path. USAGE } if [[ "${1:-}" == "-h" || "${1:-}" == "--help" ]]; then usage exit 0 fi if [[ "$(id -u)" -ne 0 ]]; then echo "error: please run with sudo." >&2 exit 1 fi IFACE="eno1" RESTORE_NETWORK="false" for arg in "$@"; do case "${arg}" in --restore-network) RESTORE_NETWORK="true" ;; -*) echo "error: unknown option: ${arg}" >&2 usage >&2 exit 1 ;; *) IFACE="${arg}" ;; esac done SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" REPO_ROOT="$(cd "${SCRIPT_DIR}/../.." && pwd)" IGH_ROOT="${IGH_ROOT:-${REPO_ROOT}/dependency/x86/third_party/ethercat/v1.7.0}" ETHERCAT_CONF="${ETHERCAT_CONF:-${IGH_ROOT}/etc/ethercat.conf}" ETHERCATCTL="${IGH_ROOT}/sbin/ethercatctl" if [[ ! -x "${ETHERCATCTL}" ]]; then echo "error: ethercatctl not found: ${ETHERCATCTL}" >&2 exit 1 fi "${ETHERCATCTL}" -c "${ETHERCAT_CONF}" stop if [[ "${RESTORE_NETWORK}" == "true" ]]; then ip link set "${IFACE}" up if command -v nmcli >/dev/null 2>&1; then nmcli device connect "${IFACE}" || true fi echo "Stopped EtherCAT and requested normal network restore on ${IFACE}." else echo "Stopped EtherCAT. Normal network restore skipped." echo "Use '--restore-network' if this interface should return to NetworkManager." fi