Interesting, my understanding of "route-mark" with a value of "main" is that it means "no routing mark" (if that's true, why not use "no-mark"). This is very confusing.
The confusion probably comes from the fact that it would be weird to call the default routing table "none". So an explicit name "main" has been assigned to the default routing table, but you can as well refer to it implicitly by not providing any table name when creating a route. On the other hand, not to assign any routing mark at all to a packet is quite normal, and it may also be useful to check for the mere absence or presence of a routing mark, regardless its actual value if present. Therefore, reserved identifiers "none" and "any" are used to match these two special cases in rules. Use of "any" to indicate the table to which a particular route belongs would be a clear nonsense, and use of "none" to indicate "default" would seem weird as said above, so for naming the default table, both nothing at all (empty name) and main can be used.
(and don't ask me what happens if you set
or
)
Also, I've tried using routing-table, without success. Anyone knows when "routing-table" is set?
EDIT: ignore the text in italics, see newer posts for explanation.
I didn't want to argue with @Sob but I think it makes sense to use in rule chains evaluated after routing has been actually performed, i.e. when the routing table used is already known, like and , so way too late for your purpose.