xref: /linux-tools/misc/scripts/iptables/gen_binary_iptablerules.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 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
9*de922be4SDavid Wangx, n = 0, 10000
10*de922be4SDavid Wangdef build(s, e, p):
11*de922be4SDavid Wang    n = e-s+1
12*de922be4SDavid Wang    if n<=16:
13*de922be4SDavid Wang        m = n
14*de922be4SDavid Wang        for i in range(s, e):
15*de922be4SDavid Wang            pp = 1.0/m
16*de922be4SDavid Wang            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*de922be4SDavid Wang            m-=1
18*de922be4SDavid Wang        print "iptables -t nat -A %s -d %s -j DNAT --to-destination %s" % (p, vip, ss[i%len(ss)])
19*de922be4SDavid Wang    else:
20*de922be4SDavid Wang        # split
21*de922be4SDavid Wang        m = (s+e)/2
22*de922be4SDavid Wang        x = "myservice%d_%d" % (s, m)
23*de922be4SDavid Wang        print "iptables -t nat -N %s" % x
24*de922be4SDavid Wang        pp = (m-s+1)*1.0/n
25*de922be4SDavid Wang        print "iptables -t nat -A %s -m statistic --mode random --probability %.16f -j %s" % (p, pp, x)
26*de922be4SDavid Wang        build(s, m, x)
27*de922be4SDavid Wang        x = "myservice%d_%d" % (m+1, e)
28*de922be4SDavid Wang        print "iptables -t nat -N %s" % x
29*de922be4SDavid Wang        print "iptables -t nat -A %s -j %s" % (p, x)
30*de922be4SDavid Wang        build(m+1, e, x)
31*de922be4SDavid Wang
32*de922be4SDavid Wangbuild(0, n-1, "myservice")
33