Reliable Network Provisioning In the Presence of Correlated Failures: A Software-defined Network Approach