#compdef netstat

_netstat() {
	local -a f_rules

	f_rules=(
		'af\::specify address family: inet, inet6, unix, number'
		'outif\::specify output interface: ifName, ifIndex, any, none'
		'dst\::specify destination IP: ip-addr[/mask], any, none'
		'flags\::select routes tagged with flags: [+ -]?[ABDGHLMSU]+' 
	)

	_arguments \
		- set1 \
		'-a[show state of all sockets, all routing tables or all interfaces]' \
		'-R[show extended security attributes for sockets and routing tables]' \
		'-n[do not resolve addresses to names]' \
		'-v[verbose]' \
		'-f[specify address family]:address family:(inet inet6 unix)' \
		'-P[specify protocol]:protocol:(ip ipv6 icmp icmpv6 igmp udp tcp rawip)' \
		- set2 \
		'-r[show routing table]' \
		'-f[filter routing table]:rule:(($f_rules))' \
		'-a[show state of all sockets, all routing tables or all interfaces]' \
		'-v[verbose]' \
		'-n[do not resolve addresses to names]' \
		'-R[show extended security attributes for sockets and routing tables]' \
		- set3 \
		'-g[show multicast group memberships]' \
		'-n[do not resolve addresses to names]' \
		'-v[verbose]' \
		'-f[specify address family]:address family:(inet inet6 unix)' \
		- set4 \
		'-i[show state of interfaces]' \
		'-a[show state of all sockets, all routing tables or all interfaces]' \
		'-f[specify address family]:address family:(inet inet6 unix)' \
		'-n[do not resolve addresses to names]' \
		'-I[select interface]:interface:_net_interfaces' \
		- set5 \
		'-m[show STREAMS memory statistics]' \
		'-v[verbose]' \
		- set6 \
		'-p[show net to media tables]' \
		'-n[do not resolve addresses to names]' \
		'-f[specify address family]:address family:(inet inet6 unix)' \
		- set7 \
		'-s[show per protocol statistics]' \
		'-f[specify address family]:address family:(inet inet6 unix)' \
		'-P[specify protocol]:protocol:(ip ipv6 icmp icmpv6 igmp udp tcp rawip)' \
		- set8 \
		'-M[show multicast routing tables]' \
		'-f[specify address family]:address family:(inet inet6 unix)' \
		'-n[do not resolve addresses to names]' \
		'-s[show per protocol statistics]' \
		- set9 \
		'-D[show status of DHCP configured interfaces]' \
		'-f[specify address family]:address family:(inet inet6 unix)' \
		'-I[select interface]:interface:_net_interfaces' \
}

_netstat "$@"
