Denys Vlasenko | 6cf7f01 | 2009-11-06 04:04:19 +0100 | [diff] [blame] | 1 | #!/bin/sh |
| 2 | # convert: |
| 3 | |
| 4 | # dhcptype=5 |
| 5 | # serverid=172.16.42.102 |
| 6 | # lease=97200 |
| 7 | # interface=eth0 |
| 8 | # ip=172.16.42.177 |
| 9 | # subnet=255.255.255.0 |
| 10 | # mask=24 |
| 11 | # broadcast=172.16.22.255 |
| 12 | # router=172.16.42.98 |
| 13 | # dns=10.34.32.125 10.32.63.5 10.34.255.7 10.11.255.27 |
| 14 | # domain=lab.example.com example.com |
| 15 | # ntpsrv=10.34.32.125 10.34.255.7 |
| 16 | |
| 17 | # into: |
| 18 | |
| 19 | #let cfg=cfg+1 |
| 20 | #if[$cfg]=...; ip[$cfg]=...; ipmask[$cfg]=.../...; gw[$cfg]=...; net[$cfg]=... dns[$cfg]=... |
| 21 | |
Denys Vlasenko | 391dd92 | 2009-11-09 09:39:50 +0100 | [diff] [blame] | 22 | exec >/dev/null |
| 23 | #exec >"$0.out" # debug |
| 24 | exec 2>&1 |
Denys Vlasenko | 6cf7f01 | 2009-11-06 04:04:19 +0100 | [diff] [blame] | 25 | |
| 26 | test "$interface" || exit 1 |
Denys Vlasenko | 391dd92 | 2009-11-09 09:39:50 +0100 | [diff] [blame] | 27 | test "$ip" || exit 1 |
Denys Vlasenko | 6cf7f01 | 2009-11-06 04:04:19 +0100 | [diff] [blame] | 28 | |
Denys Vlasenko | 2feaba1 | 2019-02-05 17:48:24 +0100 | [diff] [blame] | 29 | # some servers do not return subnet option. |
| 30 | # guess it for standard private networks. |
| 31 | if ! test "$mask"; then |
Denys Vlasenko | 5a387e2 | 2019-02-08 10:37:05 +0100 | [diff] [blame^] | 32 | case "$ip" in |
| 33 | 10.*) |
| 34 | mask=8;; |
| 35 | 192.168.*) |
| 36 | mask=16;; |
| 37 | #172.16-31.x.x |
| 38 | 172.1[6789].*) |
| 39 | mask=12;; |
| 40 | 172.2[0123456789].*) |
| 41 | mask=12;; |
| 42 | 172.3[01].*) |
| 43 | mask=12;; |
| 44 | esac |
Denys Vlasenko | 2feaba1 | 2019-02-05 17:48:24 +0100 | [diff] [blame] | 45 | fi |
| 46 | |
| 47 | # some servers do not return router option. |
| 48 | # assume DHCP server is the router. |
| 49 | if ! test "$router"; then |
| 50 | test "$serverid" && router="$serverid" |
| 51 | fi |
| 52 | |
Denys Vlasenko | 6cf7f01 | 2009-11-06 04:04:19 +0100 | [diff] [blame] | 53 | { |
| 54 | echo "let cfg=cfg+1" |
Denys Vlasenko | 3581c62 | 2010-01-25 13:39:24 +0100 | [diff] [blame] | 55 | test "$interface" && echo "if[\$cfg]='$interface'" |
Denys Vlasenko | 6cf7f01 | 2009-11-06 04:04:19 +0100 | [diff] [blame] | 56 | test "$ip" && echo "ip[\$cfg]='$ip'" |
| 57 | test "$ip" && test "$mask" \ |
| 58 | && echo "ipmask[\$cfg]='$ip/$mask'" |
| 59 | test "$router" && echo "gw[\$cfg]='$router'" |
| 60 | test "$dns" && echo "dns[\$cfg]='$dns'" |
| 61 | # TODO: I never saw a dhcp server which correctly announces |
| 62 | # which subnet(s) is/are available thru advertised router |
| 63 | # Assume 0/0 |
| 64 | echo "net[\$cfg]='0/0'" |
Denys Vlasenko | 391dd92 | 2009-11-09 09:39:50 +0100 | [diff] [blame] | 65 | } >"$1" |