Bug 787406 - B2G Network Manager: Allow only one default route at the same time. r=philikon.

This commit is contained in:
Shian-Yow Wu 2012-09-05 13:29:48 +08:00
parent c295d6b67a
commit 716e12df6a
2 changed files with 22 additions and 0 deletions

View File

@ -161,6 +161,9 @@ NetworkManager.prototype = {
network.type == Ci.nsINetworkInterface.NETWORK_TYPE_MOBILE_SUPL) {
this.addHostRoute(network);
}
// Remove pre-created default route and let setAndConfigureActive()
// to set default route only on preferred network
this.removeDefaultRoute(network.name);
this.setAndConfigureActive();
break;
case Ci.nsINetworkInterface.NETWORK_STATE_DISCONNECTED:
@ -202,6 +205,9 @@ NetworkManager.prototype = {
network.type == Ci.nsINetworkInterface.NETWORK_TYPE_MOBILE_SUPL) {
this.addHostRoute(network);
}
// Remove pre-created default route and let setAndConfigureActive()
// to set default route only on preferred network
this.removeDefaultRoute(network.name);
this.setAndConfigureActive();
Services.obs.notifyObservers(network, TOPIC_INTERFACE_REGISTERED, null);
debug("Network '" + network.name + "' registered.");
@ -338,6 +344,15 @@ NetworkManager.prototype = {
this.setNetworkProxy();
},
removeDefaultRoute: function removeDefaultRoute(ifname) {
debug("Remove default route for " + ifname);
let options = {
cmd: "removeDefaultRoute",
ifname: ifname
}
this.worker.postMessage(options);
},
addHostRoute: function addHostRoute(network) {
debug("Going to add host route on " + network.name);
let options = {

View File

@ -166,6 +166,13 @@ function runDHCPAndSetDefaultRouteAndDNS(options) {
setDefaultRouteAndDNS(dhcp);
}
/**
* Remove default route for given network interface.
*/
function removeDefaultRoute(options) {
libnetutils.ifc_remove_default_route(options.ifname);
}
/**
* Add host route for given network interface.
*/