Rename OSC devices and refactor LED setup

- on ROADM Line Degree modules, use "osc" for "eth2",
- on inline amplifiers, use "oscW" for eth2 and "oscE" for the PCIe
add-on NICs,
- otherwise, keep the name as-is (eth2)

And because I'm touching the service which sets up the LEDs, let's
convert it into a shellscript, these one-liners are starting getting
rather scary. This means that:

- I'm splitting these per-function, so SFP netlink activity is separate
from EDFA indication setup,
- correct LEDs are now used for the inline amplifier

Change-Id: Ie0a4a91a3f7e714e4a0d55124e2f5011e7cbdc6b
Task: https://tree.taiga.io/project/jktjkt-czechlight/task/793
diff --git a/board/czechlight/clearfog/overlay/usr/lib/systemd/network/oscE.network b/board/czechlight/clearfog/overlay/usr/lib/systemd/network/osc.network
similarity index 84%
rename from board/czechlight/clearfog/overlay/usr/lib/systemd/network/oscE.network
rename to board/czechlight/clearfog/overlay/usr/lib/systemd/network/osc.network
index 9fe0f59..5ff9cd4 100644
--- a/board/czechlight/clearfog/overlay/usr/lib/systemd/network/oscE.network
+++ b/board/czechlight/clearfog/overlay/usr/lib/systemd/network/osc.network
@@ -1,5 +1,5 @@
 [Match]
-Name=enp1s0
+Name=osc*
 
 [Network]
 Bridge=br0
diff --git a/board/czechlight/clearfog/overlay/usr/lib/systemd/system-generators/osc b/board/czechlight/clearfog/overlay/usr/lib/systemd/system-generators/osc
new file mode 100755
index 0000000..3c219c3
--- /dev/null
+++ b/board/czechlight/clearfog/overlay/usr/lib/systemd/system-generators/osc
@@ -0,0 +1,27 @@
+#!/bin/sh
+
+set -e
+
+mkdir -p /run/systemd/network
+
+# custom names for OSC channels
+if grep -q '\<czechlight=sdn-roadm-line\>' /proc/cmdline; then
+	ETH2_NAME=osc
+elif grep -q '\<czechlight=sdn-inline\>' /proc/cmdline; then
+	ETH2_NAME=oscW
+	ETH3_NAME=oscE
+fi
+
+[[ -n "${ETH2_NAME+set}" ]] && cat > /run/systemd/network/30-eth2.link <<EOF
+[Match]
+Path=platform-f1034000.ethernet
+[Link]
+Name=${ETH2_NAME}
+EOF
+
+[[ -n "${ETH3_NAME+set}" ]] && cat > /run/systemd/network/30-eth3.link <<EOF
+[Match]
+Path=platform-soc:pcie-pci-*
+[Link]
+Name=${ETH3_NAME}
+EOF
diff --git a/package/czechlight-clearfog-leds/czechlight-clearfog-leds.mk b/package/czechlight-clearfog-leds/czechlight-clearfog-leds.mk
index 97ab75c..cc78ebc 100644
--- a/package/czechlight-clearfog-leds/czechlight-clearfog-leds.mk
+++ b/package/czechlight-clearfog-leds/czechlight-clearfog-leds.mk
@@ -14,7 +14,10 @@
                 $(TARGET_DIR)/usr/lib/systemd/system/
         ln -sf ../czechlight-clearfog-leds.service $(TARGET_DIR)/usr/lib/systemd/system/multi-user.target.wants/
 	$(CZECHLIGHT_CLEARFOG_LEDS_BOOT_INSTALL_TARGET_CMDS)
-	cp $(BR2_EXTERNAL_CZECHLIGHT_PATH)/package/czechlight-clearfog-leds/clearfog-test-leds.sh \
+	cp \
+		$(BR2_EXTERNAL_CZECHLIGHT_PATH)/package/czechlight-clearfog-leds/clearfog-test-leds.sh \
+		$(BR2_EXTERNAL_CZECHLIGHT_PATH)/package/czechlight-clearfog-leds/init-leds-edfa.sh \
+		$(BR2_EXTERNAL_CZECHLIGHT_PATH)/package/czechlight-clearfog-leds/init-leds-sfp.sh \
 		$(TARGET_DIR)/usr/bin/
 endef
 
diff --git a/package/czechlight-clearfog-leds/czechlight-clearfog-leds.service b/package/czechlight-clearfog-leds/czechlight-clearfog-leds.service
index 72f0202..7905d1f 100644
--- a/package/czechlight-clearfog-leds/czechlight-clearfog-leds.service
+++ b/package/czechlight-clearfog-leds/czechlight-clearfog-leds.service
@@ -3,13 +3,5 @@
 
 [Service]
 Type=oneshot
-# SFP: green lit for "link"
-# SFP: green blinking for activity
-ExecStart=/bin/sh -c 'echo netdev > /sys/class/leds/sfp:green/trigger'
-ExecStart=/bin/sh -c 'echo eth2 > /sys/class/leds/sfp:green/device_name'
-ExecStart=/bin/sh -c 'echo 1 > /sys/class/leds/sfp:green/link'
-ExecStart=/bin/sh -c 'echo 1 > /sys/class/leds/sfp:green/rx'
-ExecStart=/bin/sh -c 'echo 1 > /sys/class/leds/sfp:green/tx'
-# LINE/EXPRESS: green for "we're getting some signal"
-ExecStart=/bin/sh -c 'echo gpio > /sys/class/leds/line:green/trigger'
-ExecStart=/bin/sh -c "sed -En 's/.*gpio-(.*) \\(EDFA1_ST1_IN_LOS_A .*/\\1/p' /sys/kernel/debug/gpio > /sys/class/leds/line:green/gpio"
+ExecStart=/usr/bin/init-leds-edfa.sh
+ExecStart=/usr/bin/init-leds-sfp.sh
diff --git a/package/czechlight-clearfog-leds/init-leds-edfa.sh b/package/czechlight-clearfog-leds/init-leds-edfa.sh
new file mode 100755
index 0000000..8e8f6a1
--- /dev/null
+++ b/package/czechlight-clearfog-leds/init-leds-edfa.sh
@@ -0,0 +1,29 @@
+#!/bin/sh
+
+set -ex
+
+# Green LED for "we're getting some signal"
+
+if grep -q '\<czechlight=sdn-inline\>' /proc/cmdline; then
+    # LEDs have different labels on this HW
+    STAGE1_LED=uid:green
+    STAGE2_LED=line:green
+else
+    # Line/Degree: signal present at Line IN
+    # WSS A/D and Coherent A/D: signal present at some Express IN
+    STAGE1_LED=line:green
+fi
+
+if [[ -n "${STAGE1_LED+set}" ]]; then
+    cd /sys/class/leds/${STAGE1_LED}
+    echo gpio > trigger
+    GPIO=$(sed -En 's/.*gpio-(.*) \(EDFA1_ST1_IN_LOS_A .*/\1/p' /sys/kernel/debug/gpio)
+    echo $GPIO > gpio
+fi
+
+if [[ -n "${STAGE2_LED+set}" ]]; then
+    cd /sys/class/leds/${STAGE2_LED}
+    echo gpio > trigger
+    GPIO=$(sed -En 's/.*gpio-(.*) \(EDFA1_ST2_IN_LOS_A .*/\1/p' /sys/kernel/debug/gpio)
+    echo $GPIO > gpio
+fi
diff --git a/package/czechlight-clearfog-leds/init-leds-sfp.sh b/package/czechlight-clearfog-leds/init-leds-sfp.sh
new file mode 100755
index 0000000..fb904c1
--- /dev/null
+++ b/package/czechlight-clearfog-leds/init-leds-sfp.sh
@@ -0,0 +1,24 @@
+#!/bin/sh
+
+set -ex
+
+for candidate in osc oscW eth2; do
+    if [[ -d "/sys/class/net/${candidate}" ]]; then
+        NETDEV="${candidate}"
+        break
+    fi
+done
+
+if [[ ! -n "${NETDEV+set}" ]]; then
+    echo "Unrecognized SFP device name"
+    exit 1
+fi
+
+# SFP: green lit for "link"
+# SFP: green blinking for activity
+cd /sys/class/leds/sfp:green
+echo netdev > trigger
+echo "${NETDEV}" > device_name
+echo 1 > link
+echo 1 > rx
+echo 1 > tx