about summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog6
-rw-r--r--Completion/Unix/Command/.distfiles2
-rw-r--r--Completion/Unix/Command/_ifconfig82
-rw-r--r--Completion/Unix/Type/.distfiles2
-rw-r--r--Completion/Unix/Type/_net_interfaces22
5 files changed, 112 insertions, 2 deletions
diff --git a/ChangeLog b/ChangeLog
index ece3c3516..1754c1573 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,9 @@
+2001-12-19  Oliver Kiddle  <opk@zsh.org>
+
+	* 16366: Completion/Unix/Type/_net_interfaces,
+	Completion/Unix/Command/_ifconfig, Completion/Unix/Type/.distfiles,
+	Completion/Unix/Command/.distfiles: new ifconfig completion
+
 2001-12-18  Oliver Kiddle  <opk@zsh.org>
 
 	* 16364: Src/params.c: further to 16351, except specials
diff --git a/Completion/Unix/Command/.distfiles b/Completion/Unix/Command/.distfiles
index b75c0ed42..53e22b502 100644
--- a/Completion/Unix/Command/.distfiles
+++ b/Completion/Unix/Command/.distfiles
@@ -15,5 +15,5 @@ _dd           _gprof        _lynx         _perldoc      _telnet       _pine
 _dict         _grep         _lzop         _prcs         _tiff         _elm
 _diff         _gs           _make         _psutils      _tin	_apm  _mail
 _last         _loadkeys     _modutils     _ruby         _sysctl _links _samba
-_user_admin   _rsync        _arping	  _spamassassin _mtools
+_user_admin   _rsync        _arping	  _spamassassin _mtools       _ifconfig
 '
diff --git a/Completion/Unix/Command/_ifconfig b/Completion/Unix/Command/_ifconfig
new file mode 100644
index 000000000..efd6e7707
--- /dev/null
+++ b/Completion/Unix/Command/_ifconfig
@@ -0,0 +1,82 @@
+#compdef ifconfig
+
+local context state line ret=1
+local -a opts args alias debug updownlist
+
+alias=( '(-alias alias)'{,-}'alias[remove or establish alternate address for if]' )
+debug=( '(-debug debug)'{,-}'debug[disable or enable debugging code]' )
+updownlist=(
+  '(-a -d -C)-u[restrict to interfaces which are up]'
+  '(-a -u -C)-d[restrict to interfaces which are down]'
+  '(-a -C -m -L 1 *)-l[list interfaces]'
+)
+
+case $OSTYPE in
+  darwin*)
+    args=( -s $updownlist )
+    opts=(
+      $alias $debug delete dest_address ipdst nsellength
+      {,-}trailers {,-}link{0,1,2}
+    )
+  ;;
+  freebsd*)
+    args=( -s $updown
+      '(-a -l -u -d -m -L 1 *)-C[list interface cloners]'
+      '(-l -C)-m[list supported media]'
+      '(-l -C)-L[show address lifetime as time offset]'
+    )
+    opts=( $alias $debug
+      anycast lladdr media {,-}mediaopt {,delete}tunnel create destroy
+      {,un}plumb vlan {,-}vlandev metric prefixlen range phase ssid muid
+      stationname channel authmode {,-}powersave powersavesleep wepmode
+      {,-}wep {,-}nwkey add delete ether {,-}link{0,1,2}
+    )
+  ;;
+  irix5*) opts=( $debug ) ;;
+  irix6*)
+    opts=( $debug {-,}highbw {,-}link{0,1,2} primary rspace sspace  )
+    args=( '-w[display additional information]' )
+  ;;
+  linux*)
+    opts=(
+      '(-promisc promisc)'{,-}'promisc[disable or enable promiscuous mode]'
+      '(-allmulti allmulti)'{,-}'allmulti[disable or enable all-multicast]'
+      'media[set physical port type]:medium type:(auto 10base2 10baseT AUI)'
+      'hw[set hardware class]:hardware class:(ether ax25 ARCnet netrom)'
+      add del dstaddr io_addr irq mem_start multicast pointopoint
+      tunnel txqueuelen
+    )
+  ;;
+  solaris*)
+    args=(
+      '-ad[apply to all down interfaces]'
+      '-adD[apply to all down interfaces not controlled by DHCP]'
+      '-au[apply to all up interfaces]'
+      '-auD[apply to all up interfaces not controlled by DHCP]'
+    )
+    opts=(
+      'auto-revarp[use RARP to acquire address]'
+      {,-}trailers {,-}private {,un}plumb
+      '(dhcp auto-dhcp)'{,auto-}'dhcp[use dhcp]'
+      primary wait drop extend ping release start status
+    )
+  ;;
+esac
+
+_arguments "$args[@]" \
+  '-a[apply to all interfaces]' \
+  '1:network interface:_net_interfaces' \
+  '::address family:(atalk ether inet inet6 ax25 ddp ipx netrom)' \
+  '*:option:->options' && ret=0
+  
+[[ -n "$state" ]] && _values -S ' ' -w 'option' "$opts[@]" \
+  '(down)up[activate interface]' \
+  '(up)down[shut down interface]' \
+  '(-arp arp)'{,-}'arp[disable or enable address resolution protocol]' \
+  'metric[set routing metric for interface]:routing metric' \
+  'mtu[set maximum transfer unit]:mtu' \
+  'netmask[specify network mask]:netmask' \
+  'broadcast[specify broadcast address]:broadcast address' \
+  'address[specify IP address of interface]:IP address' && ret=0
+
+return ret
diff --git a/Completion/Unix/Type/.distfiles b/Completion/Unix/Type/.distfiles
index dfb856bcb..04c30b4b0 100644
--- a/Completion/Unix/Type/.distfiles
+++ b/Completion/Unix/Type/.distfiles
@@ -8,5 +8,5 @@ _domains             _path_files          _ps                  _user_at_host
 _files               _pdf                 _pspdf               _users
 _groups              _perl_basepods       _signals             _users_on
 _hosts               _perl_builtin_funcs  _tar_archive         _time_zone
-_file_systems
+_file_systems        _net_interfaces
 '
diff --git a/Completion/Unix/Type/_net_interfaces b/Completion/Unix/Type/_net_interfaces
new file mode 100644
index 000000000..cbd419ad8
--- /dev/null
+++ b/Completion/Unix/Type/_net_interfaces
@@ -0,0 +1,22 @@
+#autoload
+
+local expl list intf sep
+local -a disp
+
+case $OSTYPE in
+  aix*)
+    intf=( ${(f)"$(lsdev -C -c if -F 'name:description')"} )
+    if zstyle -T ":completion:${curcontext}" verbose; then
+      zstyle -s ":completion:${curcontext}:" list-separator sep || sep=--
+      zformat -a list " $sep " "$intf[@]"
+      disp=(-ld list)
+    fi
+  ;;
+  darwin*|freebsd*) intf=( $(ifconfig -l) ) ;;
+  irix*) intf=( ${${${(f)"$(/usr/etc/netstat -i)"}%% *}[2,-1]} ) ;;
+  linux*) intf=( /proc/sys/net/ipv4/conf/*~*(all|default)(N:t) ) ;;
+  *) intf=( $(ifconfig -a|sed -n 's/^\([^ 	:]*\).*/\1/p') ) ;;
+esac
+
+_wanted interfaces expl 'network interface' \
+    compadd "$@" "$disp[@]" - "${(@)intf%%:*}"