From 512ebce5e5a1c8889a61543f493b8127de0e16ad Mon Sep 17 00:00:00 2001 From: Lukas Rusak Date: Tue, 19 Jun 2018 12:55:50 -0700 Subject: [PATCH] NXP: add rdu-network script --- .../iMX6/filesystem/usr/bin/rdu-network | 117 ++++++++++++++++++ .../lib/systemd/system/rdu-network.service | 13 ++ 2 files changed, 130 insertions(+) create mode 100755 projects/NXP/devices/iMX6/filesystem/usr/bin/rdu-network create mode 100644 projects/NXP/devices/iMX6/filesystem/usr/lib/systemd/system/rdu-network.service diff --git a/projects/NXP/devices/iMX6/filesystem/usr/bin/rdu-network b/projects/NXP/devices/iMX6/filesystem/usr/bin/rdu-network new file mode 100755 index 0000000000..59ca7096f3 --- /dev/null +++ b/projects/NXP/devices/iMX6/filesystem/usr/bin/rdu-network @@ -0,0 +1,117 @@ +#!/bin/sh + +ACTION=$1 + +LOGGER_TAG="rdu-network" +MODEL=$(cat /sys/firmware/devicetree/base/model) + +IP_IFACE="" +BR_NAME="" +BR_IFACES="" +UNUSED_IFACES="" +USED_IFACES="" + +function log +{ + logger -t "${LOGGER_TAG}" "$@" +} + +function logerr +{ + logger -t "${LOGGER_TAG}" -p "err" "$@" +} + +# Select setup based on model + +case "${MODEL}" in + "ZII RDU2+ Board" | "ZII RDU2 Board") + log "Loading RDU2 networking setup..." + IP_IFACE="enp1s0" + BR_NAME="br0" + BR_IFACES="netaux netleft netright gigabit_proc" + ALL_IFACES="eth0 ${IP_IFACE} ${BR_IFACES} ${BR_NAME}" + ;; + "ZII RDU1 Board") + log "Loading RDU1 networking setup..." + IP_IFACE="br0" + BR_NAME="br0" + BR_IFACES="netaux netleft netright" + ALL_IFACES="eth0 ${BR_NAME} ${BR_IFACES}" + ;; + *) + logerr "invalid hardware model detected: ${MODEL}" + exit 1 + ;; +esac + +case "${ACTION}" in + + "start") + + # Assume RDU network is already started if the bridge is available + if [ -d /sys/class/net/${BR_NAME} ]; then + log "Networking setup is already started" + exit 0 + fi + + # Cleanup all addresses from all interfaces and bring them down + log "Resetting interfaces..." + for IFACE in ${ALL_IFACES}; do + log " Resetting ${IFACE}..." + ip addr flush dev ${IFACE} >/dev/null 2>&1 + ip link set dev ${IFACE} down >/dev/null 2>&1 + done + + # Create bridge with all interfaces + log "Creating bridge interface..." + brctl addbr ${BR_NAME} >/dev/null 2>&1 + for IFACE in ${BR_IFACES}; do + log " Adding ${IFACE} to bridge..." + brctl addif ${BR_NAME} ${IFACE} >/dev/null 2>&1 + done + + # Bring all bridge interfaces and the bridge itself up + log "Bringing up all interfaces..." + for IFACE in ${ALL_IFACES}; do + log " Bringing up ${IFACE}..." + ip link set dev ${IFACE} up >/dev/null 2>&1 + done + + # All done + log "RDU networking started" + exit 0 + ;; + + "stop") + + # Assume RDU network is already stopped if the bridge is available + if [ ! -d /sys/class/net/${BR_NAME} ]; then + log "Networking setup is already stopped" + exit 0 + fi + + # Cleanup all addresses from all interfaces and bring them down + log "Resetting interfaces..." + for IFACE in ${ALL_IFACES}; do + ip addr flush dev ${IFACE} >/dev/null 2>&1 + ip link set dev ${IFACE} down >/dev/null 2>&1 + done + + # Remove bridge interfaces and bridge itself + log "Removing bridge interface..." + for IFACE in ${BR_IFACES}; do + brctl delif ${BR_NAME} ${IFACE} >/dev/null 2>&1 + done + brctl delbr ${BR_NAME} >/dev/null 2>&1 + + # All done + log "RDU networking stopped" + exit 0 + ;; + + *) + logerr "invalid action requested: ${ACTION}" + exit 2 + ;; +esac + diff --git a/projects/NXP/devices/iMX6/filesystem/usr/lib/systemd/system/rdu-network.service b/projects/NXP/devices/iMX6/filesystem/usr/lib/systemd/system/rdu-network.service new file mode 100644 index 0000000000..d3bde26039 --- /dev/null +++ b/projects/NXP/devices/iMX6/filesystem/usr/lib/systemd/system/rdu-network.service @@ -0,0 +1,13 @@ +[Unit] +Description=RDU network setup +After=network-pre.target +ConditionPathExistsGlob=/flash/imx6*-zii-rdu2.dtb + +[Service] +Type=oneshot +ExecStart=/usr/bin/rdu-network start +RemainAfterExit=true +ExecStop=/usr/bin/rdu-network stop + +[Install] +WantedBy=multi-user.target