FreeBSD で MAC アドレスから NIC 名を固定したかったのだが

USB の LAN アダプタを複数挿すとどれが ue0 でどれが ue1 で ue2 なのかわかったもんじゃなくなる
Linux とかだと HWaddr で固定みたいなの結構あったと思うんだけど
FreeBSD だとそれっぽいのが見当たらない。
もしかしたらそんな設定できるようになってないのかもしれない


なので、とりあえずちょっと精度が粗くてデータとロジックが一緒くたになっているが
基本的なアイディアとしては割と単純な事だと実証してみる

#!/bin/sh

fix_ifname_by_etheraddr()
{
	_ifn_list="`ifconfig -l`"
	[ -z "$_ifn_list" ] && return 0
	for _if in ${_ifn_list} ; do
		_ifethaddr="`ifconfig $_if | sed 's/^.*ether[ ]\{1,\}\([0-9a-f:]\{17\}\).*$/\1/' | egrep '^[0-9a-f:]{17}$'`"
		# echo "$_if = $_ifethaddr"
		[ -z "$_ifethaddr" ] && continue
		case $_ifethaddr in
		"00:00:00:00:00:00")
			ifconfig $_if name net0
			;;
		"01:00:00:00:00:00")
			ifconfig $_if name net1
			;;
		"02:00:00:00:00:00")
			ifconfig $_if name net2
			;;
		"03:00:00:00:00:00")
			ifconfig $_if name net3
			;;
		*)
			continue
			;;
		esac
	done
	return 0
}

fix_ifname_by_etheraddr


この時、置き換え後の名前に使えるのはとりあえず net しかわからない。
mknod とかで特殊ノードを作れば好きな名前にできるのかもしれない(未検証)。


あとこのスクリプトを走らせるタイミングをどうするか。
USB nic が挿さったタイミングで実行したいようなしたくないような。
ipfw とかどうなるんだろうかとか気になる。