Browse Source

Merge pull request #4670 from gyuho/tc

pkg/netutil: add linux netem functions
Gyu-Ho Lee 9 years ago
parent
commit
adbc53e3f7
2 changed files with 28 additions and 0 deletions
  1. 24 0
      pkg/netutil/isolate_linux.go
  2. 4 0
      pkg/netutil/isolate_stub.go

+ 24 - 0
pkg/netutil/isolate_linux.go

@@ -40,3 +40,27 @@ func RecoverPort(port int) error {
 	_, err := exec.Command("/bin/sh", "-c", cmdStr).Output()
 	return err
 }
+
+// SetLatency adds latency in millisecond scale with random variations.
+func SetLatency(ms, rv int) error {
+	if rv > ms {
+		rv = 1
+	}
+	cmdStr := fmt.Sprintf("sudo tc qdisc add dev eth0 root netem delay %dms %dms distribution normal", ms, rv)
+	_, err := exec.Command("/bin/sh", "-c", cmdStr).Output()
+	if err != nil {
+		// the rule has already been added. Overwrite it.
+		cmdStr = fmt.Sprintf("sudo tc qdisc change dev eth0 root netem delay %dms %dms distribution normal", ms, rv)
+		_, err = exec.Command("/bin/sh", "-c", cmdStr).Output()
+		if err != nil {
+			return err
+		}
+	}
+	return nil
+}
+
+// RemoveLatency resets latency configurations.
+func RemoveLatency() error {
+	_, err := exec.Command("/bin/sh", "-c", "sudo tc qdisc del dev eth0 root netem").Output()
+	return err
+}

+ 4 - 0
pkg/netutil/isolate_stub.go

@@ -19,3 +19,7 @@ package netutil
 func DropPort(port int) error { return nil }
 
 func RecoverPort(port int) error { return nil }
+
+func SetLatency(ms, rv int) error { return nil }
+
+func RemoveLatency() error { return nil }