complete -c pfctl -s s -d 'Show a filter parameter by modifier' -xa \
    'queue\t"Show loaded queue definitions" \
	rules\t"Show loaded filter rules" \
	Anchors\t"Show anchors attached to main ruleset" \
	states\t"Show state table"
	Sources\t"Show source tracking table" \
	info\t"Show filter information" \
	labels\t"Show stats of labeled filter rules" \
	timeouts\t"Show global timeouts" \
	memory\t"Show pool memory hard limits" \
	Tables\t"Show the list of tables" \
	osfp\t"Show a list of OS fingerprints" \
	Interfaces\t"List PF interfaces/drivers" \
	all\t"Everything."'
complete -c pfctl -s F -d 'Flush filter params specified by mod' -xa \
    'rules\t"Flush filter rules" \
	states\t"Flush state table" \
	Sources\t"Flush source tracking table" \
	info\t"Flush filter information" \
	Tables\t"Flush the tables" \
	ospf\t"Flush the passive OS fingerprints" \
	all\t"Flush everything"'
complete -c pfctl -s T -d 'Table command' -xa \
    'kill\t"Kill a table." \
	flush\t"Flush addresses of a table" \
	add\t"Add one or more addresses in table" \
	delete\t"Delete one or more addresses from a table" \
	expire\t"Delete addresses where stats cleared > N seconds" \
	replace\t"Replace the addresses of the table" \
	show\t"Show the contents of a table" \
	test\t"Test if the given addresses match a table" \
	zero\t"Clear all the stats of a table"'