Thank you for the help. I've set it up like the example at the bottom of
http://wiki.mikrotik.com/wiki/Voip, substituting 'ether3' for 'ether0-gateway', and the 192. address for my SIP provider address (as captured with TORCH during active calls).
I also modifed the OUT mangle rules so that they were TOS = 46 and TOS != 46.
Why?
Because I have two VOIP providers.
The other approach (would this be smarter??) is to apply the mangle rules to the ether1-local-master, and set the IP addresses to that of my internal PBX?
I'm not sure if it would be smarter to apply them to the INTERNET port, or to the INTERNAL port. Using the internal one would enable to to make the mangle rules using only the IP address of the PBX.
Using the INTERNET port makes me use TOS for outbound and the using our VOIP Providers IP for inbound, and is a little more complicated.
I know that 'filter close to source' is always the best approach, so wouldn't I want to tell INCOMING voip traffic it has a higher priority when I first see it on the gateway interface? (as opposed to waiting till it's heading out the -local-master interface)
Hmm. Interesting. The outbound audio is still a little choppy when doing two charter-bandwidth tests (totally maxing our connection), even when I mark the priority of the packet as it comes into the ether1-local-master interface.
It sounds fine when only one person is doing the bandwidth testing.
In no case, however, did my test calls drop. I think we're safe to say that it's not the router / ISP bandwidth that is the dropped-calls issue.
Just to clarify, I'm marking my INBOUND VoIP packets based on their source ip address matching either of my VoIP providers POPs, and i'm doing this on the 'prerouting' chain on the 'ether0-gateway' interface.
I'm marking my OUTBOUND VoIP packets on the prerouting chain on the ether1-local-master interface, based on the source ip matching my internal PBX.