Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Be able to use other network device in iptables #601

Open
wants to merge 1 commit into
base: main
Choose a base branch
from
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
41 changes: 25 additions & 16 deletions jepsen/src/jepsen/net.clj
Original file line number Diff line number Diff line change
Expand Up @@ -120,15 +120,15 @@
(defn- net-shape!
"Shared convenience call for iptables/ipfilter. Shape the network with tc
qdisc, netem, and filter(s) so target nodes have given behavior."
[_net test targets behavior]
[_net test targets behavior dev]
(let [results (on-nodes test
(fn [test node]
(let [nodes (set (:nodes test))
targets (set targets)
targets (if (contains? targets node)
(disj nodes node)
targets)
dev (net-dev)]
]
; start with no qdisc
(qdisc-del dev)
(if (and (seq targets)
Expand Down Expand Up @@ -172,8 +172,9 @@
(fast! [net test])
(shape! [net test nodes behavior])))

(def iptables
"Default iptables (assumes we control everything)."
(defn iptables-with-dev
"Default iptables (assumes we control everything). Take network device as parameter."
[dev]
(reify Net
(drop! [net test src dest]
(on-nodes test [dest]
Expand All @@ -185,40 +186,41 @@
(with-test-nodes test
(su
(exec :iptables :-F :-w)
(exec :iptables :-X :-w))))
; (exec :iptables :-X :-w)
)))

(slow! [net test]
(with-test-nodes test
(su (exec tc :qdisc :add :dev :eth0 :root :netem :delay :50ms
(su (exec tc :qdisc :add :dev dev :root :netem :delay :50ms
:10ms :distribution :normal))))

(slow! [net test {:keys [mean variance distribution]
:or {mean 50
variance 10
distribution :normal}}]
(with-test-nodes test
(su (exec tc :qdisc :add :dev :eth0 :root :netem :delay
(su (exec tc :qdisc :add :dev dev :root :netem :delay
(str mean "ms")
(str variance "ms")
:distribution distribution))))

(flaky! [net test]
(with-test-nodes test
(su (exec tc :qdisc :add :dev :eth0 :root :netem :loss "20%"
(su (exec tc :qdisc :add :dev dev :root :netem :loss "20%"
"75%"))))

(fast! [net test]
(with-test-nodes test
(try
(su (exec tc :qdisc :del :dev :eth0 :root))
(su (exec tc :qdisc :del :dev dev :root))
(catch RuntimeException e
(if (re-find #"Error: Cannot delete qdisc with handle of zero."
(.getMessage e))
nil
(throw e))))))

(shape! [net test nodes behavior]
(net-shape! net test nodes behavior))
(net-shape! net test nodes behavior dev))

PartitionAll
(drop-all! [net test grudge]
Expand All @@ -232,8 +234,13 @@
(str/join ","))
:-j :DROP :-w))))))))

(def ipfilter
(def iptables
"Default iptables. Use eth0 as network device."
(iptables-with-dev :eth0))

(defn ipfilter-with-dev
"IPFilter rules"
[dev]
(reify Net
(drop! [net test src dest]
(on dest (su (exec :echo :block :in :from src :to :any | :ipf :-f :-))))
Expand All @@ -244,27 +251,29 @@

(slow! [net test]
(with-test-nodes test
(su (exec :tc :qdisc :add :dev :eth0 :root :netem :delay :50ms
(su (exec :tc :qdisc :add :dev dev :root :netem :delay :50ms
:10ms :distribution :normal))))

(slow! [net test {:keys [mean variance distribution]
:or {mean 50
variance 10
distribution :normal}}]
(with-test-nodes test
(su (exec tc :qdisc :add :dev :eth0 :root :netem :delay
(su (exec tc :qdisc :add :dev dev :root :netem :delay
(str mean "ms")
(str variance "ms")
:distribution distribution))))

(flaky! [net test]
(with-test-nodes test
(su (exec :tc :qdisc :add :dev :eth0 :root :netem :loss "20%"
(su (exec :tc :qdisc :add :dev dev :root :netem :loss "20%"
"75%"))))

(fast! [net test]
(with-test-nodes test
(su (exec :tc :qdisc :del :dev :eth0 :root))))
(su (exec :tc :qdisc :del :dev dev :root))))

(shape! [net test nodes behavior]
(net-shape! net test nodes behavior))))
(net-shape! net test nodes behavior dev))))

(def ipfilter (ipfilter-with-dev :eth0))