#!/bin/sh
# 脚本功能：json方式返回 网络物理设备
. /usr/share/libubox/jshn.sh

function get_netdevs()
{
    # 过滤条件：无ip, bridge, wlan, lo 设备
    for netdev in `ls /sys/class/net`;do
        if [ -d "/sys/class/net/$netdev" ] && [ -n "$netdev" ];then
            
            filter=0
            unset DEVTYPE
            . /sys/class/net/$netdev/uevent
            cdir4=`ip addr show dev $netdev|grep "inet " | grep -E -o '([0-9]{1,3}\.){3}[0-9]{1,3}/[0-9]{1,2}' | sed ':a;N;$!ba;s/\n/;/g'`
            
            [ -z "$cdir4" ] && filter=1
            [ -z "$(ip route show default table all | grep "default via" | grep $netdev)" ] && [ "$DEVTYPE" == "bridge" ] && filter=1
            [ -z "$(ip route show default table all | grep "default via" | grep $netdev)" ] && [ "$DEVTYPE" == "wlan" ] && filter=1
            [ "$netdev" == "lo" ] && filter=1
            if [ "$filter" -eq 0 ];then
                macaddr=`cat /sys/class/net/$netdev/address`
                #format $netdev (ip:cdir4 mac:address)
                netdev_info="IP: $cdir4;"
                [ -n "$macaddr" ] && netdev_info="$netdev_info  MAC: $macaddr"
                [ -n "$DEVTYPE" ] && netdev_info="$netdev_info  TYPE: $DEVTYPE"
                json_add_string $netdev "$netdev_info"

            fi
        fi
    done
}
    



json_init
case $1 in
    get_netdevs)
        get_netdevs
        ;;
esac
json_dump
