OpenWrt – Blame information for rev 1
?pathlinks?
Rev | Author | Line No. | Line |
---|---|---|---|
1 | office | 1 | #!/bin/sh |
2 | |||
3 | awk -f - $* <<EOF |
||
4 | function bitcount(c) { |
||
5 | c=and(rshift(c, 1),0x55555555)+and(c,0x55555555) |
||
6 | c=and(rshift(c, 2),0x33333333)+and(c,0x33333333) |
||
7 | c=and(rshift(c, 4),0x0f0f0f0f)+and(c,0x0f0f0f0f) |
||
8 | c=and(rshift(c, 8),0x00ff00ff)+and(c,0x00ff00ff) |
||
9 | c=and(rshift(c,16),0x0000ffff)+and(c,0x0000ffff) |
||
10 | return c |
||
11 | } |
||
12 | |||
13 | function ip2int(ip) { |
||
14 | for (ret=0,n=split(ip,a,"\."),x=1;x<=n;x++) ret=or(lshift(ret,8),a[x]) |
||
15 | return ret |
||
16 | } |
||
17 | |||
18 | function int2ip(ip,ret,x) { |
||
19 | ret=and(ip,255) |
||
20 | ip=rshift(ip,8) |
||
21 | for(;x<3;ret=and(ip,255)"."ret,ip=rshift(ip,8),x++); |
||
22 | return ret |
||
23 | } |
||
24 | |||
25 | function compl32(v) { |
||
26 | ret=xor(v, 0xffffffff) |
||
27 | return ret |
||
28 | } |
||
29 | |||
30 | BEGIN { |
||
31 | slpos=index(ARGV[1],"/") |
||
32 | if (slpos == 0) { |
||
33 | ipaddr=ip2int(ARGV[1]) |
||
34 | dotpos=index(ARGV[2],".") |
||
35 | if (dotpos == 0) |
||
36 | netmask=compl32(2**(32-int(ARGV[2]))-1) |
||
37 | else |
||
38 | netmask=ip2int(ARGV[2]) |
||
39 | } else { |
||
40 | ipaddr=ip2int(substr(ARGV[1],0,slpos-1)) |
||
41 | netmask=compl32(2**(32-int(substr(ARGV[1],slpos+1)))-1) |
||
42 | ARGV[4]=ARGV[3] |
||
43 | ARGV[3]=ARGV[2] |
||
44 | } |
||
45 | |||
46 | network=and(ipaddr,netmask) |
||
47 | broadcast=or(network,compl32(netmask)) |
||
48 | |||
49 | start=or(network,and(ip2int(ARGV[3]),compl32(netmask))) |
||
50 | limit=network+1 |
||
51 | if (start<limit) start=limit |
||
52 | |||
53 | end=start+ARGV[4] |
||
54 | limit=or(network,compl32(netmask))-1 |
||
55 | if (end>limit) end=limit |
||
56 | |||
57 | print "IP="int2ip(ipaddr) |
||
58 | print "NETMASK="int2ip(netmask) |
||
59 | print "BROADCAST="int2ip(broadcast) |
||
60 | print "NETWORK="int2ip(network) |
||
61 | print "PREFIX="32-bitcount(compl32(netmask)) |
||
62 | |||
63 | # range calculations: |
||
64 | # ipcalc <ip> <netmask> <start> <num> |
||
65 | |||
66 | if (ARGC > 3) { |
||
67 | print "START="int2ip(start) |
||
68 | print "END="int2ip(end) |
||
69 | } |
||
70 | } |
||
71 | EOF |