MARK
This target is used to set the Netfilter mark value associated with the packet. It can, for example, be used in conjunction with routing based on fwmark (needs iproute2). If you plan on doing so, note that the mark needs to be set in the PREROUTING chain of the mangle table to affect routing. The mark field is 32 bits wide.
--set-xmark value[/mask]
Zeroes out the bits given by mask and XORs value into the packet mark ("nfmark"). If mask is omitted, 0xFFFFFFFF is assumed.
--set-mark value[/mask]
Zeroes out the bits given by mask and ORs value into the packet mark. If mask is omitted, 0xFFFFFFFF is assumed.
I kinda understood why the --set-xmark ≈ --set-mark
XOR / OR are different operator in binary, when the initial packet mark is all 0, and the result would be the same. However is the initial is not all zero, the result would be different.
Here is a good resources for explain all the marks stuff, took me an hour to find it, well this kinda of stuff just not gonna digest well in my system...
Hopefully could help someone looking into the same problem