File: network.js

package info (click to toggle)
mongodb 1%3A2.4.10-5
  • links: PTS, VCS
  • area: main
  • in suites: jessie-kfreebsd
  • size: 82,464 kB
  • sloc: cpp: 740,225; ansic: 152,098; sh: 13,820; python: 11,864; makefile: 1,012; perl: 922; pascal: 617; java: 452; lisp: 222; asm: 174
file content (37 lines) | stat: -rw-r--r-- 1,486 bytes parent folder | download | duplicates (6)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37

// 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')
}