mirror of
https://github.com/mongodb/mongo.git
synced 2024-12-01 09:32:32 +01:00
38 lines
1.5 KiB
JavaScript
38 lines
1.5 KiB
JavaScript
|
|
// Parse "127.0.0.1:300" into {addr: "127.0.0.1", port: 300},
|
|
// and "127.0.0.1" into {addr: "127.0.0.1", port: undefined}
|
|
function parseHost (hostString) {
|
|
var items = hostString.match(/(\d+.\d+.\d+.\d+)(:(\d+))?/)
|
|
return {addr: items[1], port: parseInt(items[3])}
|
|
}
|
|
|
|
|
|
/* Network traffic shaping (packet dropping) to simulate network problems
|
|
Currently works on BSD Unix and Mac OS X only (using ipfw).
|
|
Requires sudo access.
|
|
TODO: make it work on Linux too (using iptables). */
|
|
|
|
var nextRuleNum = 100 // this grows indefinitely but can't exceed 65534, so can't call routines below indefinitely
|
|
var portRuleNum = {}
|
|
|
|
// Cut network connection to local port by dropping packets using iptables
|
|
function cutNetwork (port) {
|
|
portRuleNum[port] = nextRuleNum
|
|
runProgram ('sudo', 'ipfw', 'add ' + nextRuleNum++ + ' deny tcp from any to any ' + port)
|
|
runProgram ('sudo', 'ipfw', 'add ' + nextRuleNum++ + ' deny tcp from any ' + port + ' to any')
|
|
//TODO: confirm it worked (since sudo may not work)
|
|
runProgram ('sudo', 'ipfw', 'show')
|
|
}
|
|
|
|
// Restore network connection to local port by not dropping packets using iptables
|
|
function restoreNetwork (port) {
|
|
var ruleNum = portRuleNum[port]
|
|
if (ruleNum) {
|
|
runProgram ('sudo', 'ipfw', 'delete ' + ruleNum++)
|
|
runProgram ('sudo', 'ipfw', 'delete ' + ruleNum)
|
|
delete portRuleNum[port]
|
|
}
|
|
//TODO: confirm it worked (since sudo may not work)
|
|
runProgram ('sudo', 'ipfw', 'show')
|
|
}
|