start()
{
    if [ -n "$cfg_eth_ext_ip$cfg_eth_prv_ip" ]; then
        while [ 1 ]; do
            echo "* Waiting for eth0 device..."
            ifconfig eth0 > /dev/null 2>&1
            [ $? -eq 0 ] && break
            usleep 250000
        done
    fi

    if [ -n "$cfg_bridge0_ip" ]; then
        for itf in $cfg_bridge0_itfs; do
            ifconfig $itf 0.0.0.0
        done

        brctl addbr bridge0

        for itf in $cfg_bridge0_itfs; do
            brctl addif bridge0 $itf
        done

        ifconfig bridge0 $cfg_bridge0_ip netmask $cfg_bridge0_nmask up
        ifconfig bridge0 multicast
        route add -net 224.0.0.0 netmask 240.0.0.0 dev bridge0
    fi

    # Public ethernet.
    if [ -n "$cfg_eth_ext_ip" ]; then
        if [ -n "$cfg_eth_ext_mk" ]; then
            ifconfig eth0 "$cfg_eth_ext_ip" netmask "$cfg_eth_ext_mk" up
        else
            ifconfig eth0 "$cfg_eth_ext_ip" up
        fi
        ifconfig eth0 multicast
        route add -net 224.0.0.0 netmask 240.0.0.0 dev eth0

        # Fixed mac address with $cfg_eth_ext_mac based derivated from IP address $cfg_eth_ext_ip
        if [ -n "$cfg_eth_ext_mac" ]; then
          ifconfig eth0 hw ether $cfg_eth_ext_mac
        fi
    fi

    if [ -n "$cfg_eth_ext_gw" ]; then
        route add default gw "$cfg_eth_ext_gw"
    fi

    if [ -n "$cfg_eth_ext_dns" ]; then
        echo "nameserver $cfg_eth_ext_dns" > /etc/resolv.conf
    fi

    # Private ethernet.
    if [ -n "$cfg_eth_prv_ip" ]; then
        ifconfig eth0:prv "$cfg_eth_prv_ip" up
    fi

    # Static ARP table.
    if [ -n "$cfg_arp_table" ]; then
        for e in $cfg_arp_table; do
            ip="$(echo $e | cut -f1 -d'|')"
            mac="$(echo $e | cut -f2 -d'|')"
            arp -s "$ip" "$mac"
        done
    fi
}

stop()
{
    # Public ethernet.
    if [ -n "$cfg_eth_ext_gw" ]; then
        route del default
    fi

    if [ -n "$cfg_eth_ext_ip" ]; then
        route del -net 224.0.0.0 netmask 240.0.0.0 dev eth0
        ifconfig eth0 down
    fi

    # Private ethernet.
    if [ -n "$cfg_eth_prv_ip" ]; then
        ifconfig eth0:prv down
    fi
}