eth0とeth1を入れ替えるには
Linux で eth0 と eth1 など、イーサネットデバイスの番号を入れ替えるには、
- /etc/modules.conf に、
などと記述する方法。(それぞれが別デバイスドライバのみ有効)
alias eth0 e1000e
alias eth1 e1000
- /etc/udev/rules.d/nn-persistent-net.rules において、
MAC アドレスで指定する方法。(udev を利用していることが前提)
組み込みシステムなどで上記の方法が使えない場合に変更する場合はどうすれば良いのでしょうか。
この様なときは、Linux Programmer's Manual (7) の NETDEVICE に説明がある SIOCSIFNAME を使えば簡単に解決可能です。
サンプルコード
#include
#include
#include
#include
#include
#include
#include
#include
#includeint
main(int argc, char *argv[])
{
int fd;
struct ifreq ifr;if (argc < 2) {
(void) fprintf(stderr, "Usage: %s ethN ethN\n", argv[0]);
exit(EX_USAGE);
}if ( (fd = socket(PF_INET, SOCK_DGRAM, 0)) == -1)
err("socket(): %s\n", strerror(errno));(void) memset(&ifr, 0x00, sizeof(struct ifreq));
(void) strcpy(ifr.ifr_name, argv[1]);
(void) strcpy(ifr.ifr_newname, argv[2]);if (ioctl(fd, SIOCSIFNAME, &ifr) == -1)
err("ioctl(): %s\n", strerror(errno));(void) close(fd);
return (EX_OK);
}
コンパイル
% gcc sample.c -o sample
使い方
# ifdown eth0
# ifconfig eth0 down
# ./sample eth0 eth1
# ifconfig eth1 up
とりあえず、これで eth0 が eth1 になります。
入れ替えは少し面倒ですが、この方法を知っていれば何とかなるはずです。