Cisco Linux snmp Reset ppp: различия между версиями

Материал из noname.com.ua
Перейти к навигацииПерейти к поиску
 
(не показано 8 промежуточных версий 2 участников)
Строка 1: Строка 1:
  +
[[Категория:Linux]]
  +
[[Категория:Cisco]]
  +
[[Категория:VPN]]
  +
[[Категория:SNMP]]
  +
 
=Сброс с линии по snmp=
 
=Сброс с линии по snmp=
   
 
Задача: настроить linuxbox так что бы он мог "прикинуться циской" для биллинга.
 
Задача: настроить linuxbox так что бы он мог "прикинуться циской" для биллинга.
 
Все скрипты помещаю в /etc/snmp/vpn/
 
Все скрипты помещаю в /etc/snmp/vpn/
  +
Эти скрипты требуют оптимизации, но какое-то время они вполне удачно прикидывались циской, думаю серьезных багов в них нет.
   
 
==smmpd.conf==
 
==smmpd.conf==
Строка 12: Строка 18:
 
</PRE>
 
</PRE>
 
==Скрипты==
 
==Скрипты==
  +
===ppp_count.sh===
 
<PRE>
 
<PRE>
 
#!/bin/bash
 
#!/bin/bash
Строка 53: Строка 60:
 
</PRE>
 
</PRE>
   
  +
===vpn2.sh===
 
<PRE>
 
<PRE>
 
#!/bin/bash
 
#!/bin/bash
Строка 299: Строка 307:
 
;;
 
;;
 
esac
 
esac
  +
exit
  +
</PRE>
  +
  +
  +
===vpn3.sh===
  +
<PRE>
  +
#!/bin/bash
  +
  +
LANG=C
  +
export $LANG
  +
#базовый OID
  +
MIBOID=.1.3.6.1.4.1.9.9.150.1.1.3.1.5
  +
  +
OID=$2
  +
F=`echo $OID | cut -b 1`
  +
if [ "$F" != "." ]
  +
then
  +
OID=`echo "."$OID`
  +
fi
  +
  +
  +
WHO='/usr/bin/who'
  +
AWK='/usr/bin/awk'
  +
PS='/bin/ps'
  +
LOGGER='/usr/bin/logger -t snmp-vpn3'
  +
  +
echo $1"--"$2"--"$3"--"$4 | $LOGGER
  +
  +
function get(){
  +
  +
  +
  +
  +
# Если OID=MIBOID - то это walk с начала ветви и нужно отдать первый PID
  +
if [ $OID = $MIBOID ]
  +
then
  +
echo ${MIBOID}
  +
echo string
  +
echo ""
  +
exit
  +
fi
  +
  +
#echo $OID $MIBOID
  +
PID=`echo $OID| awk -F"$MIBOID." '{ print $2 }' `
  +
PID=`printf %x $PID`
  +
#echo $PID
  +
# отрезать 2 последних символа у строки произвольной длинны
  +
L=`echo ${#PID}-2 | bc`
  +
#echo $L
  +
PID=`printf $PID | cut -c 1-$L`
  +
#echo $PID
  +
PID=`printf %d"\n" 0x$PID`
  +
#echo $PID
  +
PID=`cat /var/run/ppp*\.pid | sort -n | egrep ^"$PID"$`
  +
#echo $PID
  +
if test -n "${PID}"
  +
then
  +
# Определить номер интерфейса по PIDу
  +
IFINDEX=`grep "$PID"$ /var/run/ppp*pid | awk -F"/var/run/ppp" '{ print $2 }' | awk -F"." '{ print $1 }'`
  +
# Определить пользователя по номеру интерфейса
  +
USERNAME=`$WHO | grep "ppp${IFINDEX} " | $AWK '{print $1}'`
  +
echo ${OID}
  +
echo string
  +
echo $USERNAME
  +
exit
  +
fi
  +
  +
}
  +
  +
  +
function getnext(){
  +
D=`date +%s`
  +
  +
#IFINDEX=`echo "$OID" | awk -F"$MIBOID." '{print $2}'`
  +
TMP_FILE='/tmp/vpm.tmp.$D'
  +
  +
#cat /var/run/ppp*\.pid
  +
  +
  +
# Если OID=MIBOID - то это walk с начала ветви и нужно отдать первый PID
  +
if [ $OID = $MIBOID ]
  +
then
  +
NEXT_PID=`cat /var/run/ppp*\.pid | sort -n | head -1`
  +
# Если результат пустой то знасит нет ни одного ppp процесса
  +
if test -z "$NEXT_PID"
  +
then
  +
exit
  +
fi
  +
# Вычислить следующий OID
  +
NEXT_OID=`printf %x $NEXT_PID`
  +
NEXT_OID=`printf %d"\n" 0x$NEXT_OID"00"`
  +
# echo $NEXT_OID
  +
# Определить номер интерфейса по PIDу
  +
IFINDEX=`grep "$NEXT_PID"$ /var/run/ppp*pid | awk -F"/var/run/ppp" '{ print $2 }' | awk -F"." '{ print $1 }'`
  +
# Определить пользователя по номеру интерфейса
  +
USERNAME=`$WHO | grep "ppp${IFINDEX} "| $AWK '{print $1}'`
  +
echo ${MIBOID}.${NEXT_OID}
  +
echo string
  +
echo $USERNAME
  +
exit
  +
fi
  +
  +
# Если запрошен не перый OID, то
  +
# Проверить существует ли такой процесс.
  +
# AcctSessionID в радиусе храниться в виде 16-ричного числа
  +
# 4B0501CE536E00
  +
# при этом при этом
  +
# 4B0501CE - не знаю назначение этой части
  +
# 536E - PID процесса (21358)
  +
# 00 (может быть 01 или отсутвовать)
  +
#
  +
# Соответвенно, нужно обрабатывать 4 возможных OID
  +
# .1.3.6.1.4.1.9.9.150.1.1.3.1.2.{printf %d 0x4B0501CE536E00 }
  +
# .1.3.6.1.4.1.9.9.150.1.1.3.1.2.{printf %d 0x4B0501CE536E }
  +
# .1.3.6.1.4.1.9.9.150.1.1.3.1.2.{printf %d 0x536E }
  +
# .1.3.6.1.4.1.9.9.150.1.1.3.1.2.{printf %d 0x536E00 } (не уверен)
  +
  +
  +
  +
PID=`echo $OID| awk -F"$MIBOID." '{ print $2 }' `
  +
PID=`printf %x $PID`
  +
# отрезать 2 последних символа у строки произвольной длинны
  +
L=`echo ${#PID}-2 | bc`
  +
PID=`printf $PID | cut -c 1-$L`
  +
PID=`printf %d"\n" 0x$PID`
  +
  +
NEXT_PID=`cat /var/run/ppp*\.pid | sort -n | grep -A1 ^"$PID"$ | grep -v ^"$PID"$`
  +
if test -n "${NEXT_PID}"
  +
then
  +
NEXT_OID=`printf %x $NEXT_PID`
  +
NEXT_OID=`printf %d"\n" 0x$NEXT_OID"00"`
  +
# Определить номер интерфейса по PIDу
  +
IFINDEX=`grep "$NEXT_PID"$ /var/run/ppp*pid | awk -F"/var/run/ppp" '{ print $2 }' | awk -F"." '{ print $1 }'`
  +
# Определить пользователя по номеру интерфейса
  +
USERNAME=`$WHO | grep "ppp${IFINDEX} " | $AWK '{print $1}'`
  +
echo ${MIBOID}.${NEXT_OID}
  +
echo string
  +
echo $USERNAME
  +
exit
  +
fi
  +
  +
  +
  +
  +
  +
NEXT_PID=`cat /var/run/ppp*\.pid | sort -n | grep -A1 ^"$PID"$ | grep -v ^"$PID"$`
  +
  +
if test -n "${NEXT_PID}"
  +
then
  +
NEXT_OID=`printf %x $NEXT_PID`
  +
NEXT_OID=`printf %d"\n" 0x$NEXT_OID"00"`
  +
# Определить номер интерфейса по PIDу
  +
IFINDEX=`grep "$NEXT_PID"$ /var/run/ppp*pid | awk -F"/var/run/ppp" '{ print $2 }' | awk -F"." '{ print $1 }'`
  +
# Определить пользователя по номеру интерфейса
  +
USERNAME=`$WHO | grep "ppp${IFINDEX} "| $AWK '{print $1}'`
  +
echo ${MIBOID}.${NEXT_OID}
  +
echo string
  +
echo $USERNAME
  +
exit
  +
fi
  +
  +
  +
PID=`printf %x $PID | cut -c 9,10,11,12`
  +
  +
if test -z "${PID}"
  +
then
  +
exit
  +
fi
  +
  +
PID=`printf %d"\n" 0x$PID`
  +
NEXT_PID=`cat /var/run/ppp*\.pid | sort -n | grep -A1 ^"$PID"$ | grep -v ^"$PID"$`
  +
  +
if test -n "${NEXT_PID}"
  +
then
  +
NEXT_OID=`printf %x $NEXT_PID`
  +
NEXT_OID=`printf %d"\n" 0x$NEXT_OID"00"`
  +
# Определить номер интерфейса по PIDу
  +
IFINDEX=`grep "$NEXT_PID"$ /var/run/ppp*pid | awk -F"/var/run/ppp" '{ print $2 }' | awk -F"." '{ print $1 }'`
  +
# Определить пользователя по номеру интерфейса
  +
USERNAME=`$WHO | grep "ppp${IFINDEX} "| $AWK '{print $1}'`
  +
echo ${MIBOID}.${NEXT_OID}
  +
echo string
  +
echo $USERNAME
  +
exit
  +
fi
  +
exit
  +
}
  +
  +
function setoid()
  +
{
  +
  +
#echo SET | $LOGGER
  +
IFINDEX=`echo "$OID" | awk -F"$MIBOID." '{print $2}'`
  +
TMP_FILE='/tmp/vpm.tmp.$D'
  +
  +
# Если OID=MIBOID - то это нахуй в него писать?
  +
if [ $OID = $MIBOID ]
  +
then
  +
echo "set:"$OID = $MIBOID | $LOGGER
  +
exit
  +
fi
  +
  +
#echo 1=$OID 2=$MIBOID
  +
  +
PID=`echo $OID| awk -F"$MIBOID." '{ print $2 }' `
  +
PID=`printf %x $PID`
  +
#echo $PID
  +
# отрезать 2 последних символа у строки произвольной длинны
  +
L=`echo ${#PID}-2 | bc`
  +
#echo $L
  +
PID=`printf $PID | cut -c 1-$L`
  +
#echo $PID
  +
PID=`printf %d"\n" 0x$PID`
  +
#echo $PID
  +
PID=`cat /var/run/ppp*\.pid | sort -n | egrep ^"$PID"$`
  +
#echo $PID
  +
  +
  +
if test -n "${PID}"
  +
then
  +
echo "/bin/kill -1 $PID" | $LOGGER
  +
/bin/kill -1 $PID | $LOGGER
  +
echo ${OID}
  +
echo string
  +
echo "1"
  +
exit
  +
fi
  +
  +
}
  +
  +
case "$1" in
  +
"-g")
  +
#получить значение OID
  +
get $OID
  +
;;
  +
"-n")
  +
#получить OID и значение следующего за OID обьекта
  +
getnext $OID
  +
;;
  +
"-s")
  +
#установить значение OID
  +
#echo "--!"$1"--"$2"--"$3"--"$4 | $LOGGER
  +
setoid $OID
  +
;;
  +
*)
  +
#exit 1
  +
;;
  +
esac
  +
#exit
  +
 
exit
 
exit
 
</PRE>
 
</PRE>

Текущая версия на 16:09, 5 мая 2020


Сброс с линии по snmp

Задача: настроить linuxbox так что бы он мог "прикинуться циской" для биллинга. Все скрипты помещаю в /etc/snmp/vpn/ Эти скрипты требуют оптимизации, но какое-то время они вполне удачно прикидывались циской, думаю серьезных багов в них нет.

smmpd.conf

Добавляю выполненение скриптов для соответвующих OID.

pass 1.3.6.1.4.1.9.9.150.1.1.3.1.5 /etc/snmp/vpn/vpn3.sh
pass 1.3.6.1.4.1.9.9.150.1.1.3.1.2 /etc/snmp/vpn/vpn2.sh
pass 1.3.6.1.4.1.9.10.24.1.1.4.1.2.3 /etc/snmp/vpn/ppp_count.sh

Скрипты

ppp_count.sh

#!/bin/bash
LANG=C
export $LANG

OID=$2

F=`echo $OID | cut -b 1`
if [ "$F" != "." ]
then
    OID=`echo "."$OID`
fi

function get(){
    COUNT=`/sbin/ip link show | grep "link/ppp" | wc -l`
    echo ${OID}
    echo integer
    echo $COUNT
    exit
}

case "$1" in
    "-g")
        #получить значение OID
        get $OID
    ;;
    "-n")
        #получить OID и значение следующего за  OID обьекта
        get  $OID
    ;;
    "-s")
        # установить значение OID
        # не нужно
    ;;
    *)
        #exit 1
    ;;
esac
exit

vpn2.sh

#!/bin/bash

LANG=C
export $LANG
#базовый OID
MIBOID=.1.3.6.1.4.1.9.9.150.1.1.3.1.2

OID=$2
F=`echo $OID | cut -b 1`
if [ "$F" != "." ]
then
    OID=`echo "."$OID`
fi

WHO='/usr/bin/who'
AWK='/usr/bin/awk'
PS='/bin/ps'
LOGGER='/usr/bin/logger -t snmp-vpn'

echo $1"--"$2"--"$3"--"$4  | $LOGGER

function get(){
    # Если OID=MIBOID -  то это walk с начала ветви и нужно отдать первый PID
    if [ $OID = $MIBOID ]
        then
            echo ${MIBOID}
            echo string
            echo ""
        exit
    fi

    #echo $OID $MIBOID
    PID=`echo $OID| awk -F"$MIBOID." '{ print $2 }' `
    PID=`printf %x $PID`
    # отрезать 2 последних символа у строки произвольной длинны
    L=`echo ${#PID}-2 | bc`
    #echo $L
    PID=`printf  $PID | cut -c 1-$L`
    #echo $PID
    PID=`printf %d"\n" 0x$PID`
    #echo $PID
    PID=`cat /var/run/ppp*\.pid | sort  -n  | egrep   ^"$PID"$`
    #echo $PID
    if test -n "${PID}"
    then
        # Определить номер интерфейса по PIDу
        IFINDEX=`grep  "$PID"$ /var/run/ppp*pid | awk -F"/var/run/ppp" '{ print $2 }' | awk -F"." '{ print $1 }'`
        # Определить пользователя по номеру интерфейса
        USERNAME=`$WHO | grep "ppp${IFINDEX} "| $AWK '{print $1}'`
        echo ${OID}
        echo string
        echo $USERNAME
        exit
    fi

}


function getnext(){
D=`date +%s`

#IFINDEX=`echo "$OID" | awk -F"$MIBOID." '{print $2}'`
TMP_FILE='/tmp/vpm.tmp.$D'

#cat /var/run/ppp*\.pid


# Если OID=MIBOID -  то это walk с начала ветви и нужно отдать первый PID
if [ $OID = $MIBOID ]
then
    NEXT_PID=`cat /var/run/ppp*\.pid | sort -n  | head -1`
    # Если результат пустой то знасит нет ни одного ppp  процесса
    if  test -z "$NEXT_PID"
    then
        exit
    fi
    # Вычислить следующий  OID
    NEXT_OID=`printf %x $NEXT_PID`
    NEXT_OID=`printf %d"\n" 0x$NEXT_OID"00"`
#    echo $NEXT_OID
    # Определить номер интерфейса по PIDу
    IFINDEX=`grep  "$NEXT_PID"$ /var/run/ppp*pid | awk -F"/var/run/ppp" '{ print $2 }' | awk -F"." '{ print $1 }'`
    # Определить пользователя по номеру интерфейса
    USERNAME=`$WHO | grep "ppp${IFINDEX} "| $AWK '{print $1}'`
    echo ${MIBOID}.${NEXT_OID}
    echo string
    echo  $USERNAME
    exit
fi

# Если запрошен не перый OID, то
# Проверить существует ли такой процесс.
# AcctSessionID  в радиусе храниться в виде 16-ричного числа
# 4B0501CE536E00
# при этом при этом
# 4B0501CE - не знаю назначение этой части
# 536E     - PID  процесса (21358)
# 00 (может быть 01 или отсутвовать)
#
# Соответвенно, нужно обрабатывать 4 возможных OID
# .1.3.6.1.4.1.9.9.150.1.1.3.1.2.{printf %d 0x4B0501CE536E00 }
# .1.3.6.1.4.1.9.9.150.1.1.3.1.2.{printf %d 0x4B0501CE536E }
# .1.3.6.1.4.1.9.9.150.1.1.3.1.2.{printf %d 0x536E }
# .1.3.6.1.4.1.9.9.150.1.1.3.1.2.{printf %d 0x536E00 } (не уверен)



PID=`echo $OID| awk -F"$MIBOID." '{ print $2 }' `
PID=`printf %x $PID`
# отрезать 2 последних символа у строки произвольной длинны
L=`echo ${#PID}-2 | bc`
PID=`printf  $PID | cut -c 1-$L`
PID=`printf %d"\n" 0x$PID`

NEXT_PID=`cat /var/run/ppp*\.pid | sort -n  | grep -A1 ^"$PID"$  | grep  -v ^"$PID"$`
if test -n "${NEXT_PID}"
then
    NEXT_OID=`printf %x $NEXT_PID`
    NEXT_OID=`printf %d"\n" 0x$NEXT_OID"00"`
    # Определить номер интерфейса по PIDу
    IFINDEX=`grep  "$NEXT_PID"$ /var/run/ppp*pid | awk -F"/var/run/ppp" '{ print $2 }' | awk -F"." '{ print $1 }'`
    # Определить пользователя по номеру интерфейса
    USERNAME=`$WHO | grep "ppp${IFINDEX} "| $AWK '{print $1}'`
    echo ${MIBOID}.${NEXT_OID}
    echo string
    echo  $USERNAME
    exit
fi





NEXT_PID=`cat /var/run/ppp*\.pid | sort  -n | grep -A1 ^"$PID"$  | grep  -v ^"$PID"$`

if test -n "${NEXT_PID}"
then
    NEXT_OID=`printf %x $NEXT_PID`
    NEXT_OID=`printf %d"\n" 0x$NEXT_OID"00"`
    # Определить номер интерфейса по PIDу
    IFINDEX=`grep  "$NEXT_PID"$ /var/run/ppp*pid | awk -F"/var/run/ppp" '{ print $2 }' | awk -F"." '{ print $1 }'`
    # Определить пользователя по номеру интерфейса
    USERNAME=`$WHO | grep "ppp${IFINDEX} "| $AWK '{print $1}'`
    echo ${MIBOID}.${NEXT_OID}
    echo string
    echo  $USERNAME
    exit
fi


PID=`printf %x $PID | cut -c 9,10,11,12`

if test -z "${PID}"
then
    exit
fi

PID=`printf %d"\n" 0x$PID`
NEXT_PID=`cat /var/run/ppp*\.pid | sort -n   | grep -A1 ^"$PID"$  | grep  -v ^"$PID"$`

if test -n "${NEXT_PID}"
then
    NEXT_OID=`printf %x $NEXT_PID`
    NEXT_OID=`printf %d"\n" 0x$NEXT_OID"00"`
    # Определить номер интерфейса по PIDу
    IFINDEX=`grep  "$NEXT_PID"$ /var/run/ppp*pid | awk -F"/var/run/ppp" '{ print $2 }' | awk -F"." '{ print $1 }'`
    # Определить пользователя по номеру интерфейса
    USERNAME=`$WHO | grep "ppp${IFINDEX} "| $AWK '{print $1}'`
    echo ${MIBOID}.${NEXT_OID}
    echo string
    echo $USERNAME
    exit
fi




exit

}


function setoid()
{


IFINDEX=`echo "$OID" | awk -F"$MIBOID." '{print $2}'`
TMP_FILE='/tmp/vpm.tmp.$D'

# Если OID=MIBOID -  то это нахуй в него писать?
if [ $OID = $MIBOID ]
then
    echo "set:"$OID = $MIBOID | $LOGGER
    exit
fi

#echo 1=$OID 2=$MIBOID

PID=`echo $OID| awk -F"$MIBOID." '{ print $2 }' `
PID=`printf %x $PID`
#echo $PID
# отрезать 2 последних символа у строки произвольной длинны
L=`echo ${#PID}-2 | bc`
#echo $L
PID=`printf  $PID | cut -c 1-$L`
#echo $PID
PID=`printf %d"\n" 0x$PID`
#echo $PID
PID=`cat /var/run/ppp*\.pid | sort  -n  | egrep   ^"$PID"$`
#echo $PID


if test -n "${PID}"
then
    echo "/bin/kill -1 $PID" | $LOGGER
    /bin/kill -1 $PID | $LOGGER
    echo ${OID}
    echo string
    echo "1"
    exit
fi

}




case "$1" in
    "-g")
        #получить значение OID
        get $OID
    ;;
    "-n")
        #получить OID и значение следующего за  OID обьекта
        getnext $OID
    ;;
    "-s")
        #установить значение OID
        #echo "--!"$1"--"$2"--"$3"--"$4  | $LOGGER
        setoid $OID
    ;;
    *)
        #exit 1
    ;;
esac
exit


vpn3.sh

#!/bin/bash

LANG=C
export $LANG
#базовый OID
MIBOID=.1.3.6.1.4.1.9.9.150.1.1.3.1.5

OID=$2
F=`echo $OID | cut -b 1`
if [ "$F" != "." ]
then
    OID=`echo "."$OID`
fi


WHO='/usr/bin/who'
AWK='/usr/bin/awk'
PS='/bin/ps'
LOGGER='/usr/bin/logger -t snmp-vpn3'

echo $1"--"$2"--"$3"--"$4  | $LOGGER

function get(){




# Если OID=MIBOID -  то это walk с начала ветви и нужно отдать первый PID
if [ $OID = $MIBOID ]
then
    echo ${MIBOID}
    echo string
    echo ""
    exit
fi

#echo $OID $MIBOID
PID=`echo $OID| awk -F"$MIBOID." '{ print $2 }' `
PID=`printf %x $PID`
#echo $PID
# отрезать 2 последних символа у строки произвольной длинны
L=`echo ${#PID}-2 | bc`
#echo $L
PID=`printf  $PID | cut -c 1-$L`
#echo $PID
PID=`printf %d"\n" 0x$PID`
#echo $PID
PID=`cat /var/run/ppp*\.pid | sort  -n  | egrep   ^"$PID"$`
#echo $PID
if test -n "${PID}"
then
    # Определить номер интерфейса по PIDу
    IFINDEX=`grep  "$PID"$ /var/run/ppp*pid | awk -F"/var/run/ppp" '{ print $2 }' | awk -F"." '{ print $1 }'`
    # Определить пользователя по номеру интерфейса
    USERNAME=`$WHO | grep "ppp${IFINDEX} " | $AWK '{print $1}'`
    echo ${OID}
    echo string
    echo $USERNAME
    exit
fi

}


function getnext(){
D=`date +%s`

#IFINDEX=`echo "$OID" | awk -F"$MIBOID." '{print $2}'`
TMP_FILE='/tmp/vpm.tmp.$D'

#cat /var/run/ppp*\.pid


# Если OID=MIBOID -  то это walk с начала ветви и нужно отдать первый PID
if [ $OID = $MIBOID ]
then
    NEXT_PID=`cat /var/run/ppp*\.pid | sort -n  | head -1`
    # Если результат пустой то знасит нет ни одного ppp  процесса
    if  test -z "$NEXT_PID"
    then
        exit
    fi
    # Вычислить следующий  OID
    NEXT_OID=`printf %x $NEXT_PID`
    NEXT_OID=`printf %d"\n" 0x$NEXT_OID"00"`
#    echo $NEXT_OID
    # Определить номер интерфейса по PIDу
    IFINDEX=`grep  "$NEXT_PID"$ /var/run/ppp*pid | awk -F"/var/run/ppp" '{ print $2 }' | awk -F"." '{ print $1 }'`
    # Определить пользователя по номеру интерфейса
    USERNAME=`$WHO | grep "ppp${IFINDEX} "| $AWK '{print $1}'`
    echo ${MIBOID}.${NEXT_OID}
    echo string
    echo  $USERNAME
    exit
fi

# Если запрошен не перый OID, то
# Проверить существует ли такой процесс.
# AcctSessionID  в радиусе храниться в виде 16-ричного числа
# 4B0501CE536E00
# при этом при этом
# 4B0501CE - не знаю назначение этой части
# 536E     - PID  процесса (21358)
# 00 (может быть 01 или отсутвовать)
#
# Соответвенно, нужно обрабатывать 4 возможных OID
# .1.3.6.1.4.1.9.9.150.1.1.3.1.2.{printf %d 0x4B0501CE536E00 }
# .1.3.6.1.4.1.9.9.150.1.1.3.1.2.{printf %d 0x4B0501CE536E }
# .1.3.6.1.4.1.9.9.150.1.1.3.1.2.{printf %d 0x536E }
# .1.3.6.1.4.1.9.9.150.1.1.3.1.2.{printf %d 0x536E00 } (не уверен)



PID=`echo $OID| awk -F"$MIBOID." '{ print $2 }' `
PID=`printf %x $PID`
# отрезать 2 последних символа у строки произвольной длинны
L=`echo ${#PID}-2 | bc`
PID=`printf  $PID | cut -c 1-$L`
PID=`printf %d"\n" 0x$PID`

NEXT_PID=`cat /var/run/ppp*\.pid | sort -n  | grep -A1 ^"$PID"$  | grep  -v ^"$PID"$`
if test -n "${NEXT_PID}"
then
    NEXT_OID=`printf %x $NEXT_PID`
    NEXT_OID=`printf %d"\n" 0x$NEXT_OID"00"`
    # Определить номер интерфейса по PIDу
    IFINDEX=`grep  "$NEXT_PID"$ /var/run/ppp*pid | awk -F"/var/run/ppp" '{ print $2 }' | awk -F"." '{ print $1 }'`
    # Определить пользователя по номеру интерфейса
    USERNAME=`$WHO | grep "ppp${IFINDEX} " | $AWK '{print $1}'`
    echo ${MIBOID}.${NEXT_OID}
    echo string
    echo  $USERNAME
    exit
fi





NEXT_PID=`cat /var/run/ppp*\.pid | sort  -n | grep -A1 ^"$PID"$  | grep  -v ^"$PID"$`

if test -n "${NEXT_PID}"
then
    NEXT_OID=`printf %x $NEXT_PID`
    NEXT_OID=`printf %d"\n" 0x$NEXT_OID"00"`
    # Определить номер интерфейса по PIDу
    IFINDEX=`grep  "$NEXT_PID"$ /var/run/ppp*pid | awk -F"/var/run/ppp" '{ print $2 }' | awk -F"." '{ print $1 }'`
    # Определить пользователя по номеру интерфейса
    USERNAME=`$WHO | grep "ppp${IFINDEX} "| $AWK '{print $1}'`
    echo ${MIBOID}.${NEXT_OID}
    echo string
    echo  $USERNAME
    exit
fi


PID=`printf %x $PID | cut -c 9,10,11,12`

if test -z "${PID}"
then
    exit
fi

PID=`printf %d"\n" 0x$PID`
NEXT_PID=`cat /var/run/ppp*\.pid | sort -n   | grep -A1 ^"$PID"$  | grep  -v ^"$PID"$`

if test -n "${NEXT_PID}"
then
    NEXT_OID=`printf %x $NEXT_PID`
    NEXT_OID=`printf %d"\n" 0x$NEXT_OID"00"`
    # Определить номер интерфейса по PIDу
    IFINDEX=`grep  "$NEXT_PID"$ /var/run/ppp*pid | awk -F"/var/run/ppp" '{ print $2 }' | awk -F"." '{ print $1 }'`
    # Определить пользователя по номеру интерфейса
    USERNAME=`$WHO | grep "ppp${IFINDEX} "| $AWK '{print $1}'`
    echo ${MIBOID}.${NEXT_OID}
    echo string
    echo $USERNAME
    exit
fi
exit
}

function setoid()
{

#echo SET | $LOGGER
IFINDEX=`echo "$OID" | awk -F"$MIBOID." '{print $2}'`
TMP_FILE='/tmp/vpm.tmp.$D'

# Если OID=MIBOID -  то это нахуй в него писать?
if [ $OID = $MIBOID ]
then
    echo "set:"$OID = $MIBOID | $LOGGER
    exit
fi

#echo 1=$OID 2=$MIBOID

PID=`echo $OID| awk -F"$MIBOID." '{ print $2 }' `
PID=`printf %x $PID`
#echo $PID
# отрезать 2 последних символа у строки произвольной длинны
L=`echo ${#PID}-2 | bc`
#echo $L
PID=`printf  $PID | cut -c 1-$L`
#echo $PID
PID=`printf %d"\n" 0x$PID`
#echo $PID
PID=`cat /var/run/ppp*\.pid | sort  -n  | egrep   ^"$PID"$`
#echo $PID


if test -n "${PID}"
then
    echo "/bin/kill -1 $PID" | $LOGGER
    /bin/kill -1 $PID | $LOGGER
    echo ${OID}
    echo string
    echo "1"
    exit
fi

}

case "$1" in
    "-g")
        #получить значение OID
        get $OID
    ;;
    "-n")
        #получить OID и значение следующего за  OID обьекта
        getnext $OID
    ;;
    "-s")
        #установить значение OID
        #echo "--!"$1"--"$2"--"$3"--"$4  | $LOGGER
        setoid $OID
    ;;
    *)
        #exit 1
    ;;
esac
#exit

exit