Classical routing strategies for mobile ad hoc networks operate in a hop by hop "push mode" basis: packets are forwarded on pre-determined relay nodes, according to previously and independently established link performance metrics (e.g., using hellos or route discovery messages). Conversely, recent research has highlighted the interest in developing opportunistic routing schemes, operating in "pull mode": the next relay can be selected dynamically for each packet and each hop, on the basis of the actual network performance. This allows each packet to take advantage of the local pattern of transmissions at any time. The objective of such opportunistic routing schemes is to minimize the end-to-end delay required to carry a packet from the source to the destination. In this paper, we provide upper bounds on the packet propagation speed for opportunistic routing, in a realistic network model where link conditions are variable. We analyze the performance of various opportunistic routing strategies and we compare them with classical routing schemes. The analysis and the simulations show that opportunistic routing performs significantly better. We also investigate the effects of mobility and of random fading. Finally, we present numerical simulations that confirm the accuracy of our bounds.