xref: /openbmc/phosphor-modbus/mocked_test_device/start_mock_server.sh (revision 2168bbd050af3c68d820f96054a939dda02688c6)
1*2168bbd0SJagpal Singh Gill#!/bin/bash
2*2168bbd0SJagpal Singh Gill
3*2168bbd0SJagpal Singh Gillset -e
4*2168bbd0SJagpal Singh Gillset -u
5*2168bbd0SJagpal Singh Gillset -o pipefail
6*2168bbd0SJagpal Singh Gill
7*2168bbd0SJagpal Singh Gillfunction cleanup() {
8*2168bbd0SJagpal Singh Gill    echo -e "\nCaught EXIT signal. Terminating background processes."
9*2168bbd0SJagpal Singh Gill    jobs -p | xargs -r kill 2>/dev/null
10*2168bbd0SJagpal Singh Gill    echo "Cleanup complete."
11*2168bbd0SJagpal Singh Gill}
12*2168bbd0SJagpal Singh Gilltrap cleanup EXIT
13*2168bbd0SJagpal Singh Gill
14*2168bbd0SJagpal Singh GillDEFAULT_COUNT=2
15*2168bbd0SJagpal Singh GillMODBUS_SERVER="/usr/libexec/phosphor-modbus/mock-modbus-server"
16*2168bbd0SJagpal Singh Gill
17*2168bbd0SJagpal Singh Gillif [ "$#" -eq 0 ]; then
18*2168bbd0SJagpal Singh Gill    echo "No count provided. Starting with default count of $DEFAULT_COUNT servers and serial port pairs."
19*2168bbd0SJagpal Singh Gill    SERVER_COUNT=$DEFAULT_COUNT
20*2168bbd0SJagpal Singh Gillelif [ "$#" -eq 1 ]; then
21*2168bbd0SJagpal Singh Gill    SERVER_COUNT=$1
22*2168bbd0SJagpal Singh Gill    if ! [[ "$SERVER_COUNT" =~ ^[0-9]+$ ]]; then
23*2168bbd0SJagpal Singh Gill        echo "Error: Count must be a non-negative integer." >&2
24*2168bbd0SJagpal Singh Gill        exit 1
25*2168bbd0SJagpal Singh Gill    fi
26*2168bbd0SJagpal Singh Gill    echo "Starting $SERVER_COUNT $MODBUS_SERVER instances and virtual port pairs."
27*2168bbd0SJagpal Singh Gillelse
28*2168bbd0SJagpal Singh Gill    echo "Error: Too many arguments." >&2
29*2168bbd0SJagpal Singh Gill    echo "Usage: $0 [<count>]" >&2
30*2168bbd0SJagpal Singh Gill    exit 1
31*2168bbd0SJagpal Singh Gillfi
32*2168bbd0SJagpal Singh Gill
33*2168bbd0SJagpal Singh Gill# Create the necessary directory structure for serial ports
34*2168bbd0SJagpal Singh Gillecho "Creating directory /dev/serial/by-path"
35*2168bbd0SJagpal Singh Gillmkdir -p /dev/serial/by-path
36*2168bbd0SJagpal Singh Gill
37*2168bbd0SJagpal Singh Gill# Remove old symlinks to prevent conflicts
38*2168bbd0SJagpal Singh Gillecho "Removing old symlinks from /dev/serial/by-path/..."
39*2168bbd0SJagpal Singh Gillrm -f /dev/serial/by-path/platform-1e6a1000.usb-usb-0:1:1.*-port0
40*2168bbd0SJagpal Singh Gill
41*2168bbd0SJagpal Singh Gill# Loop to create virtual serial port pairs and start modbus servers
42*2168bbd0SJagpal Singh Gillecho "Starting $SERVER_COUNT virtual serial port pairs and $MODBUS_SERVER instances."
43*2168bbd0SJagpal Singh Gillfor (( i=0; i<SERVER_COUNT; i++ )); do
44*2168bbd0SJagpal Singh Gill    TTY_USB="/dev/ttyUSB$i"
45*2168bbd0SJagpal Singh Gill    TTY_V="/dev/ttyV$i"
46*2168bbd0SJagpal Singh Gill
47*2168bbd0SJagpal Singh Gill    # Start the socat process for this pair
48*2168bbd0SJagpal Singh Gill    echo "  - Starting socat for $TTY_USB and $TTY_V."
49*2168bbd0SJagpal Singh Gill    socat -v -x -d -d pty,link="$TTY_USB",rawer,echo=0,b115200 pty,rawer,echo=0,link="$TTY_V",b115200 &
50*2168bbd0SJagpal Singh Gill
51*2168bbd0SJagpal Singh Gill    # Wait a moment for socat to create the devices
52*2168bbd0SJagpal Singh Gill    sleep 0.5
53*2168bbd0SJagpal Singh Gill
54*2168bbd0SJagpal Singh Gill    echo "  - Creating symlink for $TTY_USB..."
55*2168bbd0SJagpal Singh Gill    ln -sf $TTY_USB "/dev/serial/by-path/platform-1e6a1000.usb-usb-0:1:1.$i-port0"
56*2168bbd0SJagpal Singh Gill
57*2168bbd0SJagpal Singh Gill    # Start the $MODBUS_SERVER instance
58*2168bbd0SJagpal Singh Gill    echo "  - Starting $MODBUS_SERVER instance $i."
59*2168bbd0SJagpal Singh Gill    $MODBUS_SERVER $i &
60*2168bbd0SJagpal Singh Gilldone
61*2168bbd0SJagpal Singh Gill
62*2168bbd0SJagpal Singh Gillecho "All background processes have been started."
63*2168bbd0SJagpal Singh Gillecho "Press Ctrl+C to terminate all processes gracefully."
64*2168bbd0SJagpal Singh Gill
65*2168bbd0SJagpal Singh Gill# Keep the script running to manage background jobs
66*2168bbd0SJagpal Singh Gillwait
67