summaryrefslogtreecommitdiffstats
path: root/completions/arp
blob: 3d1669ad3bbf47c1fe4281678d66a23644e5f3c7 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
# arp(8) completion                                        -*- shell-script -*-

_comp_cmd_arp()
{
    local cur prev words cword comp_args
    _comp_initialize -- "$@" || return

    local noargopts='!(-*|*[iApfHt]*)'
    # shellcheck disable=SC2254
    case $prev in
        --device | -${noargopts}i)
            _comp_compgen_available_interfaces -a
            return
            ;;
        --protocol | -${noargopts}[Ap])
            # TODO protocol/address family
            return
            ;;
        --file | -${noargopts}f)
            _comp_compgen_filedir
            return
            ;;
        --hw-type | -${noargopts}[Ht])
            # TODO: parse from --help output?
            _comp_compgen -- -W 'ash ether ax25 netrom rose arcnet dlci fddi
                hippi irda x25 eui64'
            return
            ;;
    esac

    if [[ $cur == -* ]]; then
        _comp_compgen_help || _comp_compgen_usage
        return
    fi

    local REPLY
    _comp_count_args -a "@(--device|--protocol|--file|--hw-type|-${noargopts}[iApfHt])"
    case $REPLY in
        1)
            local ips=$("$1" -an | command sed -ne \
                's/.*(\([0-9]\{1,3\}\(\.[0-9]\{1,3\}\)\{3\}\)).*/\1/p')
            _comp_compgen -- -W '$ips'
            ;;
        2)
            # TODO if -d mode: "pub"; if not -f mode: hw_addr
            # TODO hw_addr is a configured interface with --use-device/-*D*
            ;;
        3)
            # TODO netmask|pub|temp if -s mode
            ;;
        4)
            # TODO netmask value if previous was "netmask"
            ;;
        5)
            # TODO "pub" if 3rd was "netmask"
            ;;
    esac
} &&
    complete -F _comp_cmd_arp arp

# ex: filetype=sh