Zsh Mailing List Archive
Messages sorted by:
Reverse Date,
Date,
Thread,
Author
PATCH: handle various systems in ping completion
- X-seq: zsh-workers 41854
- From: Oliver Kiddle <okiddle@xxxxxxxxxxx>
- To: Zsh workers <zsh-workers@xxxxxxx>
- Subject: PATCH: handle various systems in ping completion
- Date: Wed, 11 Oct 2017 00:07:18 +0200
- Authentication-results: amavisd4.gkg.net (amavisd-new); dkim=pass (2048-bit key) header.d=yahoo.co.uk
- Dkim-signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=yahoo.co.uk; s=s2048; t=1507673240; bh=3jwsJFAs6/2smE2JQzk2R/BgD5W4paAxvhWFg/kUvQc=; h=From:To:Subject:Date:From:Subject; b=A/Fo5tiwSaVYd0bQO2YzazJNVG0OKGuPSnmFeRr7be6TieFP5GlmqOXNSntRzYTlneQ/Iw3CuoXofsrwKXtWqxagvYYGUvkgXYhEtZ6Ip139dOpSA3VEWVB4tTRsF8vhr64b67/eKKFiNHsj9k8jo2kdmvaL7/DE6BFgSfFj9fPCnVfN9tr2RU9txFlw1xQpaIPXTTOHXlKjMrricB699lW9qa9Pfyl0WjegHRY940xP5dOzU1Ge+IjAzRcWYU6rDFdfiSb+/Uxtqql1XlRLzcP81e19RHKU4gq3zc84nc2IWWB/ZT1TUE38hX54lFUusWRb/gjrwf56rV0szak85g==
- List-help: <mailto:zsh-workers-help@zsh.org>
- List-id: Zsh Workers List <zsh-workers.zsh.org>
- List-post: <mailto:zsh-workers@zsh.org>
- Mailing-list: contact zsh-workers-help@xxxxxxx; run by ezmlm
ping completion was handling just iputils (Linux) and FreeBSD. This now
has a big case statement to handle the usual BSDs plus Linux and
Solaris along with the ping6 command for systems that have it.
Oliver
diff --git a/Completion/Unix/Command/_ping b/Completion/Unix/Command/_ping
index a1a50e11f..2efe545c6 100644
--- a/Completion/Unix/Command/_ping
+++ b/Completion/Unix/Command/_ping
@@ -1,69 +1,208 @@
-#compdef ping
+#compdef ping ping6
-if _pick_variant iputils=iputils unix -V; then
+local variant
+local -a args
+
+_pick_variant -r variant iputils=iputils $OSTYPE -V
- _arguments \
- '-a[audible]' \
- '-A[adaptive]' \
- '-b[allow pinging a broadcast address]' \
- '-B[do not allow ping to change source address]' \
- '-c:count' \
- '-d[set SO_DEBUG on the socket]' \
- '-f[flood ping]' \
- '-i:interval in seconds' \
- '-I:iface:_net_interfaces' \
- '-l:preload number' \
- '-L[suppress loopback of multicast packets]' \
- '-n[numeric output only]' \
- '-p:padding pattern' \
- '-Q:QoS TOS bits' \
- '-q[quiet]' \
- '-r[bypass normal routing tables]' \
- '-R[record route]' \
- '-s:packet size in bytes' \
- '-S:sndbuf' \
- '-t:timeout in seconds' \
- '-T:timestamp option:(tsonly tsandaddr tsprespec)' \
- '-M:Path MTU Discovery strategy:((do\:prohibit\ fragmentation want\:fragment\ locally dont\:do\ not\ set\ DF\ flag))' \
- '-U[print full user-to-user latency]' \
- '-v[verbose]' \
- '-w:deadline in seconds' \
- '-W:seconds to wait for a response' \
- ':host:_hosts'
+case ${variant}:${${service#ping}:-4} in
+ iputils*) args=( -A "-*" ) ;|
+ *)
+ args+=(
+ '-d[set SO_DEBUG on the socket]'
+ '-n[show network addresses as numbers]'
+ '-v[verbose output]'
+ )
+ ;|
+ iputils*|aix*|*bsd*|darwin*|dragonfly*)
+ args+=(
+ '-c+[specify number of packets to send]:count'
+ '-f[flood ping]'
+ '-i+[specify delay between packets]:interval (seconds) [1]'
+ '-l+[send specified number of initial packets as fast as possible]:number of packets'
+ '-p+[specify pad bytes to fill sent packet with]:padding pattern'
+ '-q[quiet]'
+ '-s+[specify packet size]:size (bytes) [56]'
+ )
+ ;|
+ iputils:*|solaris:*|(*bsd|darwin|dragonfly)*:4)
+ args+=(
+ '-L[disable loopback of multicast packets]'
+ '-R[record route]'
+ )
+ ;|
+ iputils:*|solaris:*|((free|net)bsd|darwin|dragonfly)*:4)
+ args+=( '-r[bypass normal routing tables]' )
+ ;|
+ iputils:*|((free|net)bsd|darwin|dragonfly)*:4)
+ args+=( '-a[audible bell for each packet]' )
+ ;|
+ iputils:*|(net|open)bsd*:4)
+ args+=( '-w+[specify timeout after which ping exits]:deadline (seconds)' )
+ ;|
+ iputils:*|openbsd*:4|solaris*)
+ args+=(
+ '-t+[set IP Time to Live for outgoing packets]:ttl'
+ )
+ ;|
+ (*bsd|darwin|dragonfly)*)
+ args+=( '-I+[specify source interface for multicast packets]:interface:_net_interfaces' )
+ ;|
+ freebsd*|darwin*|dragonfly*|netbsd*:6)
+ args+=( '-S+[specify source address]:source address' )
+ ;|
+ freebsd*|darwin*|dragonfly*:4|netbsd*:4)
+ args+=( '-o[exit after receiving one packet]' )
+ ;|
+ (*bsd|darwin|dragonfly)*:4)
+ args+=( "-D[set the don't fragment bit]" )
+ ;|
+ ((free|net)bsd|darwin|dragonfly)*:4)
+ args+=(
+ '-Q[somewhat quiet]'
+ '-T+[set IP Time to Live for outgoing packets]:ttl'
+ )
+ ;|
+ freebsd*:6|darwin*:6|solaris*|netbsd*)
+ args+=(
+ '*-g+[specify gateway to use as the next hop to the destination]:gateway:_hosts'
+ )
+ ;|
+ (*bsd|darwin|dragonfly)*:6)
+ args+=( '-h+[set the IPv6 hoplimit]:hop limit' )
+ ;|
+ ((free|net)bsd|darwin|dragonfly)*:6)
+ args+=(
+ '-a+[generate ICMPv6 Node Information Node Addresses query]:address type:(a c g s l A)'
+ '-b+[set socket buffer size]:buffer size'
+ '-H[try reverse-lookups of IPv6 addresses]'
+ '-N[probe node information multicast group address]'
+ '(-s)-t[generate ICMPv6 Node Information supported query types query]'
+ '(-s)-w[generate ICMPv6 Node Information DNS Name query]' '!(-s)-W'
+ )
+ ;|
+ (*bsd|darwin)*:6)
+ args+=( '*-m[suppress fragmenting of packets into the minimum IPv6 MTU]' )
+ ;|
+ freebsd*|darwin*|dragonfly*|netbsd*:6)
+ args+=( '-P+[specify IPsec policy to be used for the probe]:policy' )
+ ;|
+ solaris2.<11->)
+ args+=(
+ '-b[bypass global IPsec policy and send and receive packets in the clear]'
+ '-N+[specify a next-hop router that the probe packet should go through]:router:_hosts'
+ )
+ ;|
+ (freebsd|darwin|dragonfly)*:4)
+ args+=(
+ '-A[audible bell for no packet]'
+ '-G+[specify maximum size for ICMP payload for sweeping pings]:size'
+ '-g+[specify minimum size for ICMP payload for sweeping pings]:size [0]'
+ '-h+[specify size increment for ICMP payload for sweeping pings]:size [1]'
+ '-M+[use ICMP_MASKREQ or ICMP_TSTAMP instead of ICMP_ECHO]:ICMP:(mask time)'
+ '-m+[set IP Time to Live for outgoing packets]:ttl'
+ '-t+[specify timeout after which ping exits]:deadline (seconds)'
+ '-W+[specify time to wait for a response]:wait time (ms)'
+ '-z+[specify type of service]:type of service'
+ )
+ ;;
+ (freebsd|darwin)*:6)
+ args+=(
+ '-R[audible bell for no packet]'
+ '-r[audible bell for each packet]'
+ )
+ ;;
+ freebsd*:6)
+ args+=(
+ '-x+[specify time to wait for a response]:wait time (ms)'
+ '-X+[specify timeout after which ping exits]:deadline (seconds)'
+ )
+ ;;
+ netbsd*:4)
+ args+=(
+ '-C[send timestamps in compat format]'
+ '-E+[specify IPsec policy to be used for the probe]:policy'
+ '-h+[specify target host]:host:_hosts'
+ '-P+[use a pseudo-random sequence for the data]'
+ '-t+[specify type of service]:type of service'
+ )
+ ;;
+ (dragonfly|netbsd)*:6)
+ args+=( '-R[inject reachability confirmation hint for target host/first hop]' )
+ ;|
+ darwin*:4)
+ args+=( '-b+[bind the socket to specified interface for sending]:interface:_net_interfaces' )
+ ;|
+ darwin*:6)
+ args+=(
+ '-B+[bind the socket to specified interface for sending]:interface:_net_interfaces'
+ '-C[prohibit socket from using cellular network interface]'
+ )
+ ;|
+ darwin*)
+ args+=(
+ '-k+[specify traffic class to use for sending ICMP packets]:traffic class [CTL]:(BK_SYS BK BE RD OAM AV RV VI VO CTL)'
+ )
+ ;;
+ openbsd*:4)
+ args+=(
+ '-T+[change TOS value]:TOS value:(critical inetcontrol lowdelay netcontrol throughput reliability ef af cs)'
+ )
+ ;|
+ openbsd*)
+ args+=(
+ '-H[try reverse-lookups of addresses]'
+ '-E[audible bell for no packet]'
+ '-e[audible bell for each packet]'
+ '-V+[specify routing table to be used]:routing table'
+ )
+ ;;
+ iputils:4)
+ args+=(
+ '(-F -N)-4[use IPv4 only]'
+ '-6[use IPv6 only]'
+ )
+ ;|
+ iputils:*)
+ args+=(
+ '-A[adaptive]'
+ '-b[allow pinging a broadcast address]'
+ "-B[don't allow ping to change source address]"
+ '-D[print timestamp before each line]'
+ '(-4)-F+[allocate and set 20-bit flow label]:flow label (hex)'
+ '(-)-h[show usage information]'
+ '-I+[specify source interface]:interface:_net_interfaces'
+ '-m+[specify mark to tag outgoing packets]:mark'
+ "-M+[specify path MTU discovery strategy]:strategy:((
+ do\:prohibit\ fragmentation,\ even\ local\ one
+ want\:do\ PMTU\ discovery
+ dont\:don\'t\ set\ DF\ flag))"
+ '(-4)-N+[send ICMPv6 node information queries instead of echo request]:sub option'
+ '-O[report outstanding ICMP ECHO reply before sending next packet]'
+ '-Q+[set Quality of Service-related bits in ICMP datagrams]:QoS TOS bits'
+ '-S+[set socket sndbuf]:sndbuf'
+ '-T+[set special IP timestamp options]:timestamp option:(tsonly tsandaddr tsprespec)'
+ '-U[print full user-to-user latency]'
+ '(-)-V[display version information]'
+ '-W+[specify time to wait for a response]:wait time (seconds)'
+ )
+ ;;
+ solaris*)
+ args+=(
+ '-A+[specify address family]:address family:(inet inet6)'
+ '-F+[specify the flow label of probe packets]:number'
+ '-I+[specify delay between packets]:interval (seconds) [1]'
+ '-P+[specify type of service]:type of service (0-255) [0]'
+ '-U[send UDP packets instead of ICMP]'
+ '-a[ping all addresses, both IPv4 and IPv6 of multihomed destination]'
+ '-c+[specify the traffic class of probe packets]:traffic class (0-255)'
+ '-i+[specify source interface]:interface:_net_interfaces'
+ '-l[send the probe using loose source routing]'
+ '-p+[set base UDP port]:port [33434]'
+ '-s[send one datagram per second and collect statistics]'
+ )
+ ;;
+esac
-else
-
- _arguments \
- '-A[audible for no packet]' \
- '-a[audible for each packet]' \
- '-c:count' \
- "-D[set the don't fragment bit]" \
- '-d[set SO_DEBUG on the socket]' \
- '-f[flood ping]' \
- '-G[specify maximum size for ICMP payload for sweeping pings]:size' \
- '-g[specify minimum size for ICMP payload for sweeping pings]:size [0]' \
- '-h[specify size increment for ICMP payload for sweeping pings]:size [1]' \
- '-i:wait seconds' \
- '-I[source interface for multicast packets]:iface:_net_interfaces' \
- '-L[suppress loopback of multicast packets]' \
- '-l:preload number' \
- '-M:icmp:(mask time)' \
- '-m:ttl' \
- '-n[numeric output only]' \
- '-o[exit after receiving one packet]' \
- '-P:IPsec policy' \
- '-p:padding pattern' \
- '-Q[somewhat quiet]' \
- '-q[quiet]' \
- '-R[record route]' \
- '-r[bypass normal routing tables]' \
- '-S:source address' \
- '-s:packet size in bytes' \
- '-T:ttl for multicasted packets' \
- '-t:timeout in seconds' \
- '-v[verbose]' \
- '-W:wait time (ms)' \
- '-z:type of service' \
- ':host:_hosts'
-
-fi
+_arguments -s -S $args \
+ '*:host:_hosts'
Messages sorted by:
Reverse Date,
Date,
Thread,
Author