それマグで!

知識はカップより、マグでゆっくり頂きます。 takuya_1stのブログ

習慣に早くから配慮した者は、 おそらく人生の実りも大きい。

openwrt の dhcp 割当の一覧をIPアドレス順にソートする。

ipv4 アドレスをでソートしたい。

OpenWrtでDHCPの固定割当を設定している。MAC ADDRごとにIPアドレスを静的割当している。

これを一覧画面で閲覧すると、ソートされてない。追加順に末尾に足されるだけなのだ。

追加順だととても不便なのだ。IPアドレス順に並び替えたい。

仮想マシンの台数が増えてきたので、どのIPが未使用なのか、一瞥で判明させたい。

ということで、IPアドレス順にソートして見やすくしたい。

ucidhcp 取得、書き換え、取り消し。

uci コマンドを使って、dhcp の静的な固定割当のホスト一覧を取り出せる。

DHCP固定割当ホスト一覧の取り出し

uci show dhcp 

ここから、hostsに関係するものだけにする

uci show dhcp | grep 'dhcp.host'

dhcp の割当を全削除

インデックスで指定項目を消せる

uci del dhcp.@host[5]

インデックスを[-1] にすれば末尾を消せる

uci del dhcp.@host[-1]

全消しするなら、末尾から順に消せば、すべて消すことができる。

while uci del dhcp.@host[-1] ; do : ;  done;

dhcp の固定割当を追加する。

これは、uci 全般の使い方で配列を足すやり方に習うと楽。

最初、配列を増やす。項目の末尾に空欄のエントリを追加する。

[-1] が末尾を示すので、末尾の要素に設定項目を加えていく。

項目追加の例

### add a new dhcp.host
uci add dhcp host
uci set dhcp.@host[-1].dns='1'
uci set dhcp.@host[-1].mac='dc:a6:32:dd:23:c6'
uci set dhcp.@host[-1].ip='192.168.1.22'
uci set dhcp.@host[-1].leasetime='86400'
uci set dhcp.@host[-1].name='raspi-ubuntu'

既存のDHCPをソートする

既存のDHCPをソートするには、ちょっとめんどくさいが、eval を活用するのが早そう。

たとえば、次のようにコマンドを指定すれば。

ssh root@192.168.1.1 'uci show dhcp' \
  | \grep dhcp.@host | sed -E 's/@//' | sed -E 's/=host/={}/'

rubypythonjavascriptlua で使えそうなコードになる。

実行結果の例

dhcp.host[0]={}
dhcp.host[0].mac='xxxx'
dhcp.host[0].name='EPSONxxxx'
dhcp.host[0].dns='1'
dhcp.host[0].ip='192.168.1.12'
dhcp.host[0].leasetime='3600'
dhcp.host[1]={}
dhcp.host[1].name='DESKTOP-xxxx'
dhcp.host[1].dns='1'
dhcp.host[1].mac='xxxx'
dhcp.host[1].ip='192.168.1.111'
dhcp.host[1].leasetime='3600'
dhcp.host[2]={}
dhcp.host[2].ip='192.168.1.115'
dhcp.host[2].mac='xxx'
dhcp.host[2].name='ps4'
dhcp.host[2].dns='1'
dhcp.host[2].leasetime='3600'
dhcp.host[3]={}
dhcp.host[3].name='RE505x'
dhcp.host[3].dns='1'
dhcp.host[3].mac='xxx'
dhcp.host[3].ip='192.168.1.3'
dhcp.host[3].leasetime='144400'

ソートを登録

ここまで来たら、あとは、IPアドレスでソートし、OpenWrtにadd host して確認してからcommit すればいい。

ソート手順をスクリプトにした

とはいっても。ソートを手作業で起動するのは辛い。 openwrt で動かせるようなスクリプトにしてみた。wrt は lua が使えるようなので Lua のコードにした。

https://github.com/takuya/openwrt-uci-dhcp-sort

そして、Githubのレポジトリにあげておいた