xref: /linux-tools/misc/scripts/iptables/gen_binary_iptablerules.py (revision de922be4e919572d28577568db563e691d5e7702)
1vip = "10.10.0.1"
2ss = [
3    "172.18.1.3",
4    "172.18.1.4",
5    "172.18.1.5",
6]
7
8# iptables -t nat -A myservice -d 10.10.0.1 -m statistic --mode random --probability 0.3333 -j DNAT --to-destination 172.18.1.3
9x, n = 0, 10000
10def build(s, e, p):
11    n = e-s+1
12    if n<=16:
13        m = n
14        for i in range(s, e):
15            pp = 1.0/m
16            print "iptables -t nat -A %s -d %s -m statistic --mode random --probability %.16f -j DNAT --to-destination %s" % (p, vip, pp, ss[i%len(ss)])
17            m-=1
18        print "iptables -t nat -A %s -d %s -j DNAT --to-destination %s" % (p, vip, ss[i%len(ss)])
19    else:
20        # split
21        m = (s+e)/2
22        x = "myservice%d_%d" % (s, m)
23        print "iptables -t nat -N %s" % x
24        pp = (m-s+1)*1.0/n
25        print "iptables -t nat -A %s -m statistic --mode random --probability %.16f -j %s" % (p, pp, x)
26        build(s, m, x)
27        x = "myservice%d_%d" % (m+1, e)
28        print "iptables -t nat -N %s" % x
29        print "iptables -t nat -A %s -j %s" % (p, x)
30        build(m+1, e, x)
31
32build(0, n-1, "myservice")
33