The standard way to delay and drop packets in Linux is with the netem scheduling policy; this can be applied to any network device, whether an interface or a bridge, using the tc command from the iproute2 set of tools:
A few examples of how to do so are:
$ tc qdisc add dev eth0 root netem delay 10ms
$ tc qdisc add dev br0 root netem delay 10ms 20ms
$ tc qdisc add dev eth1 root netem loss 1%
The netem scheduler has evolved to be a very sophisticated emulator with a rich variety of possible behaviours. The
iproute2 man page tc-netem.8 provides more details, while the definitive documentation is in the source code
linux-4.XX.X/net/sched/sch_netem.c. This describes in detail the Markov model used, and provides references for further reading.