create_ap

create a nat-ed wifi ap
git clone git://git.2f30.org/create_ap
Log | Files | Refs | README | LICENSE

commit 8a96c7f9cbf0581cf2cda6ad4e02c6964f99ab15
parent 9c24f50dee909e3c2405401cec7707a08774fcd1
Author: Karthik K <hashken.distro@gmail.com>
Date:   Tue, 14 Apr 2015 00:14:04 +0530

Add extended bash completion for all switches

Diffstat:
MMakefile | 3++-
Mbash_completion | 135++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++---
2 files changed, 132 insertions(+), 6 deletions(-)

diff --git a/Makefile b/Makefile @@ -4,4 +4,5 @@ all: install: cp create_ap /usr/bin/create_ap [ ! -d /lib/systemd/system ] || cp create_ap.service /lib/systemd/system - [ ! -d /usr/share/bash-completion/completions ] || cp bash_completion /usr/share/bash-completion/completions/create_ap + mkdir -p /usr/share/bash-completion/completions + cp bash_completion /usr/share/bash-completion/completions/create_ap diff --git a/bash_completion b/bash_completion @@ -3,8 +3,8 @@ # _create_ap() { - awk_cmd=' - ($1 ~ /^-/){ + local awk_cmd=' + ($1 ~ /^-/) { for (i = 1; i <= NF; i++) { if ($i ~ /,$/) { print substr ($i, 0, length ($i)-1) @@ -19,11 +19,136 @@ _create_ap() { local cur prev opts COMPREPLY=() - cur="${COMP_WORDS[COMP_CWORD]}" - prev="${COMP_WORDS[COMP_CWORD-1]}" + cur="$2" + prev="$3" opts=$("$1" --help | awk "$awk_cmd") - COMPREPLY=( $(compgen -W "${opts}" -- $cur) ) + case "$prev" in + -h|--help) + # No Options + ;; + --version) + # No Options + ;; + -c) + # Channels 1-14 are valid only for 2.4GHz + # For 5GHz the channels are specfic to each country, so + # no point in try to autocomplete for it. + # Refer http://en.wikipedia.org/wiki/List_of_WLAN_channels + opts=$(for chan in {1..14}; do echo $chan; done) + ;; + -w) + opts="1 2 1+2" + ;; + -n) + # No Options + ;; + -m) + opts="nat bridge none" + ;; + --hidden) + # No Options + ;; + --ieee80211) + # No Options + ;; + --ht_capab) + # Refer http://w1.fi/cgit/hostap/plain/hostapd/hostapd.conf + opts=' + [LDPC] [HT40-] [HT40+] [SMPS-STATIC] [SMPS-DYNAMIC] + [GF] [SHORT-GI-20] [SHORT-GI-40] [TX-STBC] + [RX-STBC1] [RX-STBC12] [RX-STBC123] [DELAYED-BA] + [MAX-AMSDU-7935] [DSSS_CCK-40] [40-INTOLERANT] + [LSIG-TXOP-PROT] + ' + ;; + --country) + local reg_file=/usr/lib/crda/regulatory.bin + if command -v regdbdump > /dev/null && [[ -f "$reg_file" ]]; then + local country_awk_cmd=' + ($1 ~ /^country/) { + print substr ($2, 0, length ($2)-1) + } + ' + opts=$(regdbdump "$reg_file" 2>/dev/null | awk "$country_awk_cmd") + else + opts=' + AD AE AF AI AL AM AN AR AS AT AU AW AZ BA BB BD BE + BF BG BH BL BM BN BO BR BS BT BY BZ CA CF CH CI CL + CN CO CR CX CY CZ DE DK DM DO DZ EC EE EG ES ET FI + FM FR GB GD GE GF GH GL GP GR GT GU GY HK HN HR HT + HU ID IE IL IN IR IS IT JM JO JP KE KH KN KP KR KW + KY KZ LB LC LI LK LS LT LU LV MA MC MD ME MF MH MK + MN MO MP MQ MR MT MU MW MX MY NG NI NL NO NP NZ OM + PA PE PF PG PH PK PL PM PR PT PW PY QA RE RO RS RU + RW SA SE SG SI SK SN SR SV SY TC TD TG TH TN TR TT + TW TZ UA UG US UY UZ VC VE VI VN VU WF WS YE YT ZA + ZW + ' + fi + ;; + --freq-band) + opts="2.4 5" + ;; + --driver) + # Refer http://w1.fi/cgit/hostap/tree/src/drivers + # Not going to implement + ;; + --no-virt) + # No Options + ;; + --no-haveged) + # No Options + ;; + --fix-unmanaged) + # No Options + ;; + --mac) + # Not going to implement + ;; + --daemon) + # No Options + ;; + --stop) + # Two instance of create_ap are invoked for every run; + # One the child of the other + # Get the child ids using the above knowledge + local cpids=$( + for pid in $(pgrep create_ap); do + pgrep -P $pid create_ap + done + ) + # Given the child ids, get the parent ids + local ppids=$( + for cpid in $cpids; do + ps -p $cpid -o ppid= + done + ) + #Get Wireless adapter name + local stop_awk_cmd=' + ($1 ~ /^Interface/) { + print $2 + } + ' + local iface=$(iw dev | awk "$stop_awk_cmd") + if [[ ! -z "$iface" || ! -z "$ppids" ]]; then + opts="$iface $ppids" + fi + ;; + --list) + # No Options + ;; + -p) + # Not going to implement + ;; + -d) + # No Options + ;; + *) + ;; + esac + + COMPREPLY=( $(compgen -W "$opts" -- $cur) ) return 0 } complete -F _create_ap create_ap