#!/bin/sh

MAX_COUNT=999
MAX_SEARCH=30

[ -z "$1" ] && {
    echo -e "usage:\n\t$0 filter_name"
    return 1;
}

# Vincent F. 2013/06/14, add for IPv6 filter chain index
if [ "$2" == "-6" ]; then
	IPF_NAME="ip6f_name"
	IPF_IDX="ip6f_idx"
else
	IPF_NAME="ipf_name"
	IPF_IDX="ipf_idx"
fi

local name="$1"
local count=1
local result=0
local chain_id

chain_id=`json get $IPF_NAME.$name`

if [ -z $chain_id ]; then

    chain_id=`json get filter_idx.$IPF_IDX`
	[ "$chain_id" ] || chain_id=100 #default value

    count="1"
    result="0"
    while [ "$count" -lt "$MAX_SEARCH" -a "$result" = "0" ]
    do 
        chain_id=`expr $chain_id + 1`
        [ "$chain_id" -gt "$MAX_COUNT" ] && chain_id=101
        json show $IPF_NAME | grep "=$chain_id" 2>&- >&-
        result=`echo $?`

        count=`expr $count + 1`
    done

    [ "$result" = "0" ] && return 2

    json set $IPF_NAME $name=$chain_id
    json set filter_idx $IPF_IDX=$chain_id
fi

echo $chain_id

return 0

