Rethinking End-to-End Congestion Control in Software-Defined Networks