Ok I have figured it out.
I feel stupid not to think about it. The packet was dropped due to the routing issue.
The received packet at the receiving IF must have the same network as the IF.
So, if the IF has 192.168.1.1/24, the routing system only accepts packet originated from 192.168.1.X/24.
I didn't noticed it until I tried with the single IF loopback. Can anyone explain why it has happened?