#!/bin/bash
# /etc/NetworkManager/dispatcher.d/

# exec 5> /tmp/debug_output.txt
# BASH_XTRACEFD="5"
# PS4='$LINENO: '
# set -x

PATH="$PATH:/usr/bin:/bin:/usr/sbin:/sbin"

OTU_OTH="OTH"
ETH0="eth0"
ETH1="ethbackup"
ETHLOCAL="ethlocal"

LOG="/var/log/nm2_1.txt"

function my_logger
{
  if $(readlink /sbin/init | grep -q systemd); then
      echo "$*" | systemd-cat
  else
    echo "$(date '+%Y %m %d %H:%M:%S') - $*" >> $LOG
  fi
}

my_logger "$0: $*"
# si on s'adresse aux interfaces reconnues
if [[ "$1" != "eth0" && "$1" != "ethbackup" ]]; then
# 	my_logger "$0: bad interface $1"
	exit 0
fi

mon_activate_ethlocal()
{
    #
    #  Update the state of ethlocal interface 
    #
	my_logger "$0 $1"
	otu_local_mode.sh $1
}

SSH_NO_CONSOLE=$(fw_printenv -n ssh_strong_no_console)

# my_logger "$0:  $1 = $2,  SSH_STRONG_NOCONSOLE = $SSH_NO_CONSOLE,  testing ethlocal"

if [[ "$SSH_NO_CONSOLE" == "true" ]]; then

    # on est en mode NO CONSOLE, on doit vérifier les deux interfaces avant d'activer l'interface locale

    #
    #  Check if cables are disconnected from eth0/ethbackup ports
    #  carrier = 1   cable is connected
    #

    eth0_carrier_state=$(cat /sys/class/net/eth0/carrier  2>/dev/null)
    if [ -f /sys/class/net/ethbackup/carrier ]; then
      ethbackup_carrier_state=$(cat /sys/class/net/ethbackup/carrier  2>/dev/null)
    else
      ethbackup_carrier_state="0"
    fi
    ETH_STATE="UP"
    
    if [[ "$eth0_carrier_state" == "0" && "$ethbackup_carrier_state" == "0" ]]; then
        ETH_STATE="DOWN"
        echo "true" > /tmp/otu_eth_down
	else 
        echo "false" > /tmp/otu_eth_down
    fi
        
    # une interface est 'tombée'
    if [[ "$2" == "down" ]]; then
        # si les deux interfaces sont tombées, on peut activer l'interface locale
        if [[ "$ETH_STATE" == "DOWN" ]]; then
        my_logger "$0:  $1 = $2;  SSH_STRONG_NOCONSOLE = $SSH_NO_CONSOLE;  enabling ethlocal"
        mon_activate_ethlocal "start"
        fi
    else
         
        if [[ "$ETH_STATE" == "UP" ]]; then
            my_logger "$0:  $1 = $2;  SSH_STRONG_NOCONSOLE = $SSH_NO_CONSOLE;  disabling ethlocal"
            #
            #  Cable connected at eth0/ethbackup.   Disable ethlocal interface (if active).
            #
            mon_activate_ethlocal "stop"
        else
            my_logger "$0:  $1 = $2;  SSH_STRONG_NOCONSOLE = $SSH_NO_CONSOLE;  $1 cables are disconnected;  enabling ethlocal"
            #
            #  Cables at eth0/ethbackup are disconnected. This a workaround fix
            #  for a quirk in the NetworkManager notification dispatcher 
            #  which does not report consistent interface states.
            #
            mon_activate_ethlocal "start"
        fi
    fi
fi

exit 0
