

___x_cmd_ip_maskaddr(){
    local x_
    ___x_cmd_ip_maskaddr_ "$@" || return
    printf "%s\n" "$x_"
}

___x_cmd_ip_maskaddr_(){
    if      ! ___x_cmd is int "$1"; then        ___x_cmd_ip_maskaddr_fill0_ "$1"
    elif    [ "$1" -lt 32 ];        then        ___x_cmd_ip_no2mask_ "$1"
    else                                        ___x_cmd_ip_maskaddr_fill0_ "$1"
    fi
}

___x_cmd_ip_maskaddr_fill0_(){
    case "$1" in
        *\.*\.*\.*)     x_="$1" ;;
        *\.*\.*)        x_="$1.0"       ;;
        *\.*)           x_="$1.0.0"     ;;
        *)              x_="$1.0.0.0"   ;;
    esac
}

___x_cmd_ip_mask2no(){
    local x_
    ___x_cmd_ip_mask2no_ "$@" || return
    printf "%s\n" "$x_"
}

___x_cmd_ip_no2mask(){
    local x_
    ___x_cmd_ip_no2mask_ "$@" || return
    printf "%s\n" "$x_"
}

___x_cmd_ip_mask2no_(){
    ___x_cmd_ip_maskaddr_fill0_ "$1"
    set -- "$x_"
    ___x_cmd_ip_mask2no_inner_ "$@"
}

___x_cmd_ip_no2mask_(){
    case "$1" in
        */*)            set -- "${1##*/}"   ;;
    esac
    ___x_cmd_ip_no2mask_inner_ "$@"
}

___x_cmd_ip_mask2no_inner_(){
    ___x_cmd_ip_maskinit && ___x_cmd_ip_mask2no_inner_ "$@"
}

___x_cmd_ip_no2mask_inner_(){
    ___x_cmd_ip_maskinit && ___x_cmd_ip_no2mask_inner_ "$@"
}

___x_cmd_ip_maskinit(){
    local mask2no=""
    local no2mask=""

    local no=0
    while read -r line; do

        mask2no="$mask2no
\"$line\")  x_=$no ;;
"

        no2mask="$no2mask
$no)    x_=$line ;;
"

        no=$((no+1))
    done <"$___X_CMD_ROOT_MOD/ip/lib/maskmap.list"

    eval "
___x_cmd_ip_mask2no_inner_(){
    case \"\$1\" in
$mask2no
    *)  return 1
    esac
}

___x_cmd_ip_no2mask_inner_(){
    case \"\$1\" in
$no2mask
    *)  return 1
    esac
}
"

}

