xref: /linux-tools/misc/scripts/iptables/gen_binary_iptablerules_batch.py (revision de922be4e919572d28577568db563e691d5e7702)
1*de922be4SDavid Wangvip = "10.10.0.1"
2*de922be4SDavid Wangss = [
3*de922be4SDavid Wang    "172.18.1.3",
4*de922be4SDavid Wang    "172.18.1.4",
5*de922be4SDavid Wang    "172.18.1.5",
6*de922be4SDavid Wang]
7*de922be4SDavid Wang
8*de922be4SDavid Wangprint "*nat"
9*de922be4SDavid Wang
10*de922be4SDavid Wang# 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
11*de922be4SDavid Wangx, n = 0, 10000
12*de922be4SDavid Wangdef build_chain(s, e):
13*de922be4SDavid Wang    n = e-s+1
14*de922be4SDavid Wang    if n<=16:
15*de922be4SDavid Wang        pass
16*de922be4SDavid Wang    else:
17*de922be4SDavid Wang        # split
18*de922be4SDavid Wang        m = (s+e)/2
19*de922be4SDavid Wang        x = "myservice%d_%d" % (s, m)
20*de922be4SDavid Wang        print ":%s - [0:0]" % x
21*de922be4SDavid Wang        x = "myservice%d_%d" % (m+1, e)
22*de922be4SDavid Wang        print ":%s - [0:0]" % x
23*de922be4SDavid Wang        build_chain(s, m)
24*de922be4SDavid Wang        build_chain(m+1, e)
25*de922be4SDavid Wang
26*de922be4SDavid Wangdef build(s, e, p):
27*de922be4SDavid Wang    n = e-s+1
28*de922be4SDavid Wang    if n<=16:
29*de922be4SDavid Wang        m = n
30*de922be4SDavid Wang        for i in range(s, e):
31*de922be4SDavid Wang            pp = 1.0/m
32*de922be4SDavid Wang            print "-A %s -d %s -m statistic --mode random --probability %.16f -j DNAT --to-destination %s" % (p, vip, pp, ss[i%len(ss)])
33*de922be4SDavid Wang            m-=1
34*de922be4SDavid Wang        print "-A %s -d %s -j DNAT --to-destination %s" % (p, vip, ss[i%len(ss)])
35*de922be4SDavid Wang    else:
36*de922be4SDavid Wang        # split
37*de922be4SDavid Wang        m = (s+e)/2
38*de922be4SDavid Wang        x = "myservice%d_%d" % (s, m)
39*de922be4SDavid Wang        pp = (m-s+1)*1.0/n
40*de922be4SDavid Wang        print "-A %s -m statistic --mode random --probability %.16f -j %s" % (p, pp, x)
41*de922be4SDavid Wang        build(s, m, x)
42*de922be4SDavid Wang        x = "myservice%d_%d" % (m+1, e)
43*de922be4SDavid Wang        print "-A %s -j %s" % (p, x)
44*de922be4SDavid Wang        build(m+1, e, x)
45*de922be4SDavid Wang
46*de922be4SDavid Wangbuild_chain(0, n-1)
47*de922be4SDavid Wangbuild(0, n-1, "myservice")
48*de922be4SDavid Wang
49*de922be4SDavid Wangprint "COMMIT"
50