#!/bin/sh

############
# CHANGELOG
#===========
# 2011/01/05    CRMS00360255    Milai
#               Add check on SECUCFG_PC_PORT_VLAN_FILTER
#
# 2011/01/05    CRMS00284313    Thanh lam NGUYEN
#               Fix exit status when security is on
#
# 2010/09/07	CRMS00255324	Tcremel
#		Change the behaviour of the user interface
#
# 2010/03/05    CRMS00218043    Thanh lam NGUYEN
#               Change to new "eth" syntax
################################
esc=$'\x1b' attr="$esc[32m" default="$esc[0m" PS4="+$$: "

ETHLCFG_SMP=8
#######################
: "Function definition"
#######################
help() {
    : "${attr}help start (arg: $*)${default}"
    local scriptname=${0##*/}
    echo ""
    echo "Syntax: $scriptname [-h|--help][set <lan|smp|idle>]"
    echo ""
    echo "arguments:"
    echo "    no arg.	Give the mirroring state."
    echo "    set	Set/unset what is to mirrored on the PC port."
    echo ""
    : "${attr}help end${default}"
    return 0
}

##############################
: "End of function definition"
##############################

: "${attr}Read system configuration${default}"
. /etc/sysconfig
. $DEBUGBINPATH/.functions
# CRMS00284313
. /etc/functions
readCurrentConfig
# CRMS00284313 END

IDLE=0 LAN=1 SMP=2
# CRMS00255324
NONE=-1
mirror=$NONE
set=0
# CRMS00255324 END

RET=$OK

: "${attr}Command line arguments processing...${default}"
while [[ x$1 != x ]]; do
    case "$1" in
        -h|--help)
            help
            RET=$OK
            EXITSCRIPT
        ;;
        set)
            set=1
        ;;
        lan)
            mirror=$LAN
        ;;
        smp)
            mirror=$SMP
        ;;
# CRMS00255324
        idle)
            mirror=$IDLE
        ;;
        *)
            RET=$KO
            EXITSCRIPT
        ;;
# CRMS00255324 END
    esac
    shift
done

# CRMS00284313
case "$SECUCFG_PC_PORT" in
    [Tt][Rr][Uu][Ee])
        echo "ERROR: The PC port is currently disabled."
        RET=$KO
        EXITSCRIPT
    ;;
esac
# CRMS00284313 END

# CRMS00360255 
case "$SECUCFG_PC_PORT_VLAN_FILTER" in
    [Tt][Rr][Uu][Ee])
        echo "ERROR: The PC port vlan filter is on ,Can not activate the mirroring."
        RET=$KO
        EXITSCRIPT
    ;;
esac
# CRMS00360255 END


# CRMS00255324
if [ ${set:-0} -eq 0 -a "$mirror" != "$NONE" ]; then
	RET=$KO
	EXITSCRIPT
fi
if [ "$mirror" = "$NONE" -a ${set:-0} -eq 1 ]; then
	RET=$KO
	EXITSCRIPT
fi
# CRMS00255324 END

: "${attr}process the command...${default}"
if [ ${set:-0} -eq 1 ]; then
    : "activate the mirroring."
    case $mirror in
        $LAN) : "LAN ingress/egree => PC"
            activate=1
# CRMS00218043
            eth mir egr  port $ETHLCFG_LAN 1
            eth mir ingr port $ETHLCFG_LAN 1
            eth mir egr  port $ETHLCFG_SMP 0
            eth mir ingr port $ETHLCFG_SMP 0
# CRMS00218043 END
        ;;
        $SMP) : "SMP ingress/egress => PC"
            activate=1
# CRMS00218043
            eth mir egr  port $ETHLCFG_LAN 0
            eth mir ingr port $ETHLCFG_LAN 0
            eth mir egr  port $ETHLCFG_SMP 1
            eth mir ingr port $ETHLCFG_SMP 1
# CRMS00218043 END
        ;;
        $IDLE) : "deactivate mirroring"
            activate=0
# CRMS00218043
            eth mir egr  port $ETHLCFG_LAN 0
            eth mir ingr port $ETHLCFG_LAN 0
            eth mir egr  port $ETHLCFG_SMP 0
            eth mir ingr port $ETHLCFG_SMP 0
# CRMS00218043 END
        ;;
    esac
    # set destination port
# CRMS00218043
    eth mir toport $ETHLCFG_PC
# CRMS00218043 END
    # enable/disable port monitoring
# CRMS00218043
    eth mir en $activate
# CRMS00218043 END
    RET=$?
else
    : "display mirroring state."
# CRMS00218043
    state="$(eth mir en '?')-$(eth mir egr port $ETHLCFG_LAN '?')-$(eth mir ingr port $ETHLCFG_LAN '?')-$(eth mir egr port $ETHLCFG_SMP '?')-$(eth mir ingr port $ETHLCFG_SMP '?')"
# CRMS00218043 END
    : "state: [$state]"
    case "$state" in
        disable-*|0-*) : "idle"
            state=idle
            RET=$OK
        ;;
        enable-enable-enable-disable-disable|1-1-1-0-0) : "lan"
            state=lan
            RET=$OK
        ;;
        enable-disable-disable-enable-enable|1-0-0-1-1): "SMP"
            state=smp
            RET=$OK
        ;;
        *)
            unset state
            RET=$NOK
        ;;
    esac
    ${state+echo "$state"}
fi
EXITSCRIPT
