mirror of
				git://git.code.sf.net/p/zsh/code
				synced 2025-10-31 06:00:54 +01:00 
			
		
		
		
	Tomasz Pala <gotar@polanet.pl>: users/12884:
new completions for iftop and tcpdump
This commit is contained in:
		
							parent
							
								
									c467938310
								
							
						
					
					
						commit
						6c6ce048e7
					
				
					 6 changed files with 157 additions and 11 deletions
				
			
		|  | @ -1,3 +1,11 @@ | |||
| 2008-05-29  Peter Stephenson  <pws@csr.com> | ||||
| 
 | ||||
| 	* unposted: Doc/Zsh/tcpsys.yo, Functions/TCP/tcp_fd_handler: | ||||
| 	add tcp_on_awol. | ||||
| 
 | ||||
| 	* Tomasz Pala <gotar@polanet.pl>: users/12884: | ||||
| 	Completion/Unix/Command/{iftop,tcpdump}: new completions | ||||
| 
 | ||||
| 2008-05-27  Peter Stephenson  <pws@csr.com> | ||||
| 
 | ||||
| 	* users/12870: Doc/Zsh/expn.yo: modifiers in glob qualifiers | ||||
|  |  | |||
|  | @ -82,6 +82,7 @@ _gzip | |||
| _iconv | ||||
| _id | ||||
| _ifconfig | ||||
| _iftop | ||||
| _imagemagick | ||||
| _init_d | ||||
| _ip | ||||
|  | @ -184,6 +185,7 @@ _surfraw | |||
| _sysctl | ||||
| _tar | ||||
| _tardy | ||||
| _tcpdump | ||||
| _tcptraceroute | ||||
| _telnet | ||||
| _texinfo | ||||
|  |  | |||
							
								
								
									
										20
									
								
								Completion/Unix/Command/_iftop
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										20
									
								
								Completion/Unix/Command/_iftop
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,20 @@ | |||
| #compdef iftop | ||||
| 
 | ||||
| _interfaces () { | ||||
| 	_wanted interfaces expl 'network interface' \ | ||||
| 		_net_interfaces | ||||
| 	_values "Pseudo-device that captures on all interfaces" "any" | ||||
| } | ||||
| 
 | ||||
| _arguments \ | ||||
|   '(-h -n -N -p -b -B -P -i -f -F -c)'-h'[print a summary of usage]' \ | ||||
|   -n"[don't do hostname lookups]" \ | ||||
|   -N"[don't resolve port number to service names]" \ | ||||
|   -p'[run in promiscuous mode]' \ | ||||
|   -P'[turn on port display]' \ | ||||
|   -b"[don't display bar graphs of traffic]" \ | ||||
|   -B'[display bandwidth rates in bytes/sec rather than bits/sec]' \ | ||||
|   -i'[interface]:network interface:_interfaces' \ | ||||
|   -f'[filter]:BPF filter' \ | ||||
|   -F'[net/mask]:network/mask' \ | ||||
|   -c'[config file]:config file:_files' | ||||
							
								
								
									
										92
									
								
								Completion/Unix/Command/_tcpdump
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										92
									
								
								Completion/Unix/Command/_tcpdump
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,92 @@ | |||
| #compdef tcpdump | ||||
| 
 | ||||
| typeset -A opt_args | ||||
| 
 | ||||
| _interfaces () { | ||||
| 	_wanted interfaces expl 'network interface' \ | ||||
| 		_net_interfaces | ||||
| 	_values "Pseudo-device that captures on all interfaces" "any" | ||||
| } | ||||
| 
 | ||||
| _esp_secrets () { | ||||
| 	_values -S : 'ESP algorithm' \ | ||||
| 		'des-cbc:secret' \ | ||||
| 		'3des-cbc:secret' \ | ||||
| 		'blowfish-cbc:secret' \ | ||||
| 		'rc3-cbc:secret' \ | ||||
| 		'cast128-cbc:secret' \ | ||||
| 		none | ||||
| } | ||||
| 
 | ||||
| _packet_types () { | ||||
| 	_values 'Packets type' \ | ||||
| 		'aodv[Ad-hoc On-demand Distance Vector protocol]' \ | ||||
| 		'cnfp[Cisco NetFlow protocol]' \ | ||||
| 		'rpc[Remote Procedure Call]' \ | ||||
| 		'rtp[Real-Time  Applications  protocol]' \ | ||||
| 		'rtcp[Real-Time Applications control protocol]' \ | ||||
| 		'snmp[Simple Network Management Protocol]' \ | ||||
| 		'tftp[Trivial File Transfer Protocol]' \ | ||||
| 		'vat[Visual Audio Tool]' \ | ||||
| 		'wb[distributed White Board]' | ||||
| } | ||||
| 
 | ||||
| _data_link_types () { | ||||
| 	if (( $+opt_args[-i] )); then | ||||
| 		vals=( ${${${(s:  :)"$(_call_program data-link-types tcpdump -L -i $opt_args[-i] 2>&1)"}[2,-1]}/ /:} ) | ||||
| 		_describe -t data-link-types "data link types ($opt_args[-i])" vals && ret=0 | ||||
| 	else | ||||
| 		_values "Data link types (general)" \ | ||||
| 			"EN10MB" \ | ||||
| 			"LINUX_SLL" | ||||
| 	fi | ||||
| } | ||||
| 
 | ||||
| _bpf_filter () { | ||||
| } | ||||
| 
 | ||||
| _arguments \ | ||||
|   '()-A[Print each packet in ASCII]' \ | ||||
|   -c'[Exit after receiving specified number of packets]:number of packets' \ | ||||
|   -C'[Specify output file size in MB (10e6 bytes)]:output file size' \ | ||||
|   '(-ddd)-d[Dump the compiled packet-matching code in a human readable form]' \ | ||||
|   '(-ddd)-dd[Dump packet-matching code as a C program fragment]' \ | ||||
|   '(-d -dd)-ddd[Dump packet-matching code as decimal numbers (preceded with a count)]' \ | ||||
|   '(-A -c -C -d -dd -ddd -e -E -f -F -i -l -L -m -M -n -N -O -p -q -R -r -S -s -T -t -tt -ttt -tttt -u -U -v -vv -vvv -w -W -x -xx -X -XX -y -Z *)'-D'[Print the list of the network interfaces available on the system]' \ | ||||
|   -e'[Print the link-level header on each dump line]' \ | ||||
|   -E"[Decrypting IPsec ESP packets]:spi@ipaddr::algo\:secret:_esp_secrets" \ | ||||
|   -f"[Print 'foreign' IPv4 addresses numerically]" \ | ||||
|   -F'[input file for the filter expression]:filter expression file:_files' \ | ||||
|   -i'[Interface]:interface:_interfaces' \ | ||||
|   -l'[Make stdout line buffered]' \ | ||||
|   '(-A -c -C -d -dd -ddd -e -E -f -F -l -D -m -M -n -N -O -p -q -R -r -S -s -T -t -tt -ttt -tttt -u -U -v -vv -vvv -w -W -x -xx -X -XX -y -Z *)'-L'[List the known data link types for the interface]' \ | ||||
|   '*-m[Load SMI MIB module definitions]:SMI MIB module definitions:_files' \ | ||||
|   -M'[shared secret for validating the digests in TCP segments with the TCP-MD5 option]:secret' \ | ||||
|   -n"[Don't convert addresses to names]" \ | ||||
|   -N"[Don't print domain name qualification of host names]" \ | ||||
|   -O"[Don't run the packet-matching code optimizer]" \ | ||||
|   -p"[Don't put the interface into promiscuous mode]" \ | ||||
|   -q'[Quick (quiet?) output]' \ | ||||
|   -R'[Assume ESP/AH packets to be based on old specification (RFC1825 to RFC1829)]' \ | ||||
|   -r'[Read packets from file]:input file:_files' \ | ||||
|   -S'[Print absolute TCP sequence numbers]' \ | ||||
|   -s'[Specify number of bytes of data to snarf from each packet]:number of bytes to snap' \ | ||||
|   -T'[Interpret captured packets as specified type]:packet type:_packet_types' \ | ||||
|   "(-tttt)-t[Don't print a timestamp on each dump line]" \ | ||||
|   '(-ttt -tttt)-tt[Print an unformatted timestamp on each dump line]' \ | ||||
|   '(-tt -tttt)-ttt[Print a delta (in micro-seconds) between current and previous line on each dump line]' \ | ||||
|   '(-t -tt -ttt)-tttt[Print a timestamp in default format proceeded by date on each dump line]' \ | ||||
|   -u'[Print undecoded NFS handles]' \ | ||||
|   -U'[Make output packet-buffered when saving to file (-w)]' \ | ||||
|   '(-vvv)-v[slightly more verbose output]' \ | ||||
|   '(-vvv)-vv[more verbose output]' \ | ||||
|   '(-v -vv)-vvv[most verbose output]' \ | ||||
|   -w'[Write the raw packets to file]:output file:_files' \ | ||||
|   -W'[Limit the number of created files (-C)]:number of files' \ | ||||
|   -x'[Print each packet (minus its link level header) in hex]' \ | ||||
|   '(-x)-xx[Print each packet, including its link level header, in hex]' \ | ||||
|   -X'[Print each packet (minus its link level header) in hex and ASCII]' \ | ||||
|   '(-X)-XX[Print each packet, including its link level header, in hex and ASCII]' \ | ||||
|   -y'[Set the data link type to use while capturing packets]:data link type:_data_link_types' \ | ||||
|   -Z'[Drops privileges (if root) and changes user ID (along with primary group)]:user:_users' \ | ||||
|   '*:BPF filter:_bpf_filter' | ||||
|  | @ -454,6 +454,26 @@ item(tt(tcp_on_alias) var(alias) var(fd))( | |||
| When an alias is defined, this function will be called with two arguments: | ||||
| the name of the alias, and the file descriptor of the corresponding session. | ||||
| ) | ||||
| findex(tcp_on_awol) | ||||
| item(tt(tcp_on_awol) var(sess) var(fd))( | ||||
| If the function tt(tcp_fd_handler) is handling input from the line | ||||
| editor and detects that the file descriptor is no longer reusable, | ||||
| by default it removes it from the list of file descriptors handled | ||||
| by this method and prints a message.  If the function tt(tcp_on_awol) | ||||
| is defined it is called immediately before this point.  It may | ||||
| return status 100, which indicates that the normal handling should | ||||
| still be performed; any other return status indicates that no further | ||||
| action should be taken and the tt(tcp_fd_handler) should return | ||||
| immediately with the given status.  Typically the action of tt(tcp_on_awol) | ||||
| will be to close the session. | ||||
| 
 | ||||
| The variable tt(TCP_INVALIDATE_ZLE) will be a non-empty string if it is | ||||
| necessary to invalidate the line editor display using `tt(zle -I)' before | ||||
| printing output from the function. | ||||
| 
 | ||||
| (`AWOL' is military jargon for `absent without leave' or some | ||||
| variation.  It has no pre-existing technical meaning known to the author.) | ||||
| ) | ||||
| findex(tcp_on_close) | ||||
| item(tt(tcp_on_close) var(sess) var(fd))( | ||||
| This is called with the name of a session being closed and the file | ||||
|  |  | |||
|  | @ -1,6 +1,6 @@ | |||
| local line name=${tcp_by_fd[$1]} | ||||
| local line fd=$1 sess=${tcp_by_fd[$1]} | ||||
| local TCP_HANDLER_ACTIVE=1 | ||||
| if [[ -n $name ]] | ||||
| if [[ -n $sess ]] | ||||
| then | ||||
|   local TCP_INVALIDATE_ZLE | ||||
|   if (( $# > 2 )); then | ||||
|  | @ -10,10 +10,14 @@ then | |||
|   else | ||||
|     TCP_INVALIDATE_ZLE=1 | ||||
|   fi | ||||
|   if ! tcp_read -d -u $1; then | ||||
|   if ! tcp_read -d -u $fd; then | ||||
|     if (( ${+functions[tcp_on_awol]} )); then | ||||
|       tcp_on_awol $sess $fd | ||||
|       (( $? == 100 )) || return $? | ||||
|     fi | ||||
|     [[ -n $TCP_INVALIDATE_ZLE ]] && zle -I | ||||
|     print "[TCP fd $1 (session $name) gone awol; removing from poll list]" >& 2 | ||||
|     zle -F $1 | ||||
|     print "[TCP fd $fd (session $sess) gone awol; removing from poll list]" >& 2 | ||||
|     zle -F $fd | ||||
|     return 1 | ||||
|   fi | ||||
|   return 0 | ||||
|  | @ -21,16 +25,16 @@ else | |||
|   zle -I | ||||
|   # Handle fds not in the TCP set similarly. | ||||
|   # This does the drain thing, to try and get as much data out as possible. | ||||
|   if ! read -u $1 line; then | ||||
|     print "[Reading on $1 failed; removing from poll list]" >& 2 | ||||
|     zle -F $1 | ||||
|   if ! read -u $fd line; then | ||||
|     print "[Reading on $fd failed; removing from poll list]" >& 2 | ||||
|     zle -F $fd | ||||
|     return 1 | ||||
|   fi | ||||
|   line="fd$1:$line" | ||||
|   line="fd$fd:$line" | ||||
|   local newline | ||||
|   while read -u $1 -t newline; do | ||||
|   while read -u $fd -t newline; do | ||||
|     line="${line} | ||||
| fd$1:$newline" | ||||
| fd$fd:$newline" | ||||
|   done | ||||
| fi | ||||
| print -r - $line | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue