chris021 -
Well I looked at the wiki and I did not see any further examples of using different chains the way you planned to use them - there are some there that do it differently that you can draw from to do your own…perhaps you lack the expertise with ROS to do this so I will show a partial example below… I am getting lazy these days so I won’t be writing out the entire rule set for you but will show how the rules are put together and you can figure out in winbox or the terminal how to put them in correctly… 
IP, firewall mangle (this is where we are starting)
0 chain=prerouting action=mark-connection new-connection-mark=LOCAL_traffic passthrough=yes dst-address-list=LOCAL in-interface=LAN
1 chain=prerouting action=mark-connection new-connection-mark=INTL_traffic passthrough=yes dst-address-list=INTL in-interface=LAN
Now - we have marked our ‘Local’ traffic and our ‘International’ traffic with appropriate connection marks in rules 0 & 1… We also further defined what connections we were going to mark with these rules - the connection must come in the LAN interface (as opposed to a WAN or Internet interface) .
2 chain=prerouting action=jump jump-target=LOCAL connection-mark=LOCAL_traffic
3 chain=prerouting action=jump jump-target=INTL connection-mark=INTL_traffic
In rules 3 & 4 we have told ROS to jump to a new chain IF the connection marks match. If the connections marks don’t match then the packet/connection will continue through the rules to what ever is next. We are going to assume here that the connection matches LOCAL as such are now jumping to chain ‘LOCAL’.
A chain=LOCAL action=mark-connection new-connection-mark=http_local passthrough=yes src-port=1024-65535 dst-port=80 protocol=tcp
B chain=LOCAL action=mark-packet new-packet-mark=http_local passthrough=no
I marked the rules with a letter purely so as not to confuse you as to where they may show up at but you needed to see the order in which they get excuted in…
Ok - as you can see we are now in chain=LOCAL, so we know that the connection came in on the LAN port, it’s destination IP address is in your ‘local’ country area IP range - this is all in rule ‘0’, we have now further defined that (in this case) that we are looking for connections to port 80 (http), we defined that the source port is 1024 - 65535 (as would normally be for a client to connect to a web server), that the protocol used for this connection is TCP also normal for an http connection - rule ‘A’, then we marked the packets traversing this chain with an appropriate packet mark to be used later in queuing - rule ‘B’. We let rule ‘A’ passthrough (passthrough=yes) so that the packet in this connection could be marked as well. In rule ‘B’ we said no to passthrough - as there is no further processing needed for this connection or packet.
At this point the chain is now ‘ended’ for this connection and packet. Further processing will now happen after rule 2 - why because that is where we ‘jumped’ from rule 2 to rule ‘A’. As in there is a rule 3, then this is where this chain will return to and continue processing Mangle rules. Now - if you do your rules correctly this connection / packet should not match any further rules in mangle.
So while the connection does not actually have ‘multiple’ connection or packet marks we were able to take a connection, ascertain where it came from, what’s it’s destination IP was, what protocol, and what the source/destination port was and mark it accordingly. In this example we were looking at http - destination port 80, a src-port of 1024 - 65535, with the destination IP being in the local country and the source interface for the request (made by a client) was our local LAN.
This example should give you sufficient information to build your own ‘tree’ of mangle chains and rules. With the outcome being that you can ‘filter’ connections to the point that it meets your every criteria so that ONLY the connections your specifiy will have the marks that you desire.
R/