-
Notifications
You must be signed in to change notification settings - Fork 29
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Fix macaddr bug #102
Fix macaddr bug #102
Conversation
ありがとうございます! それ以外はLGTMです |
以下が実際の実行結果です. + docker run -td --net none --name Router --rm --privileged --hostname Router -v /tmp/tinet:/tinet sabaniki/frr:latest
+ mkdir -p /var/run/netns
+ docker inspect Router --format {{.State.Pid}}
+ PID=605795
+ ln -s /proc/605795/ns/net /var/run/netns/Router
+ docker run -td --net none --name VM1 --rm --privileged --hostname VM1 -v /tmp/tinet:/tinet sabaniki/frr:latest
+ mkdir -p /var/run/netns
+ docker inspect VM1 --format {{.State.Pid}}
+ PID=605997
+ ln -s /proc/605997/ns/net /var/run/netns/VM1
+ docker run -td --net none --name VM2 --rm --privileged --hostname VM2 -v /tmp/tinet:/tinet sabaniki/frr:latest
+ mkdir -p /var/run/netns
+ docker inspect VM2 --format {{.State.Pid}}
+ PID=606239
+ ln -s /proc/606239/ns/net /var/run/netns/VM2
+ docker run -td --net none --name VM3 --rm --privileged --hostname VM3 -v /tmp/tinet:/tinet sabaniki/frr:latest
+ mkdir -p /var/run/netns
+ docker inspect VM3 --format {{.State.Pid}}
+ PID=606475
+ ln -s /proc/606475/ns/net /var/run/netns/VM3
+ ip link add vm1 netns Router type veth peer name rt netns VM1
+ ip netns exec Router ip link set vm1 up
+ ip netns exec VM1 ip link set rt up
+ ip netns exec Router ip link set vm1 address 10:00:00:00:00:10
+ ip link add vm2 netns Router type veth peer name rt netns VM2
+ ip netns exec Router ip link set vm2 up
+ ip netns exec VM2 ip link set rt up
+ ip netns exec Router ip link set vm2 address 20:00:00:00:00:20
+ ip link add vm3 netns Router type veth peer name rt netns VM3
+ ip netns exec Router ip link set vm3 up
+ ip netns exec VM3 ip link set rt up
+ ip netns exec Router ip link set vm3 address 30:00:00:00:00:30
+ ip netns exec VM1 ip link set rt address 10:10:10:10:10:10
+ ip netns exec VM2 ip link set rt address 20:20:20:20:20:20
+ ip netns exec VM3 ip link set rt address 30:30:30:30:30:30
+ ip netns del Router
+ ip netns del VM1
+ ip netns del VM2
+ ip netns del VM3
~/test ································································································ sabaniki@dev-local
❯ docker exec -it Router ip -br l
lo UNKNOWN 00:00:00:00:00:00 <LOOPBACK,UP,LOWER_UP>
pimreg@NONE UNKNOWN <NOARP,UP,LOWER_UP>
vm1@if3 UP 10:00:00:00:00:10 <BROADCAST,MULTICAST,UP,LOWER_UP>
vm2@if3 UP 20:00:00:00:00:20 <BROADCAST,MULTICAST,UP,LOWER_UP>
vm3@if2 UP 30:00:00:00:00:30 <BROADCAST,MULTICAST,UP,LOWER_UP>
~/test ································································································ sabaniki@dev-local
❯ docker exec -it VM1 ip -br l
lo UNKNOWN 00:00:00:00:00:00 <LOOPBACK,UP,LOWER_UP>
pimreg@NONE UNKNOWN <NOARP,UP,LOWER_UP>
rt@if3 UP 10:10:10:10:10:10 <BROADCAST,MULTICAST,UP,LOWER_UP>
~/test ································································································ sabaniki@dev-local
❯ docker exec -it VM2 ip -br l
lo UNKNOWN 00:00:00:00:00:00 <LOOPBACK,UP,LOWER_UP>
pimreg@NONE UNKNOWN <NOARP,UP,LOWER_UP>
rt@if4 UP 20:20:20:20:20:20 <BROADCAST,MULTICAST,UP,LOWER_UP>
~/test ································································································ sabaniki@dev-local
❯ docker exec -it VM3 ip -br l
lo UNKNOWN 00:00:00:00:00:00 <LOOPBACK,UP,LOWER_UP>
rt@if5 UP 30:30:30:30:30:30 <BROADCAST,MULTICAST,UP,LOWER_UP>
pimreg@NONE UNKNOWN <NOARP,UP,LOWER_UP> 正常に MAC アドレスが変更されていることがわかります. ❯ docker exec -it VM1 ip -br l
lo UNKNOWN 00:00:00:00:00:00 <LOOPBACK,UP,LOWER_UP>
pimreg@NONE UNKNOWN <NOARP,UP,LOWER_UP>
rt@if3 UP 10:10:10:10:10:10 <BROADCAST,MULTICAST,UP,LOWER_UP>
~/test ································································································ sabaniki@dev-local
❯ docker exec -it VM1 ip link set addr 10:10:10:10:10:21 dev rt
~/test ································································································ sabaniki@dev-local
❯ docker exec -it VM1 ip -br l
lo UNKNOWN 00:00:00:00:00:00 <LOOPBACK,UP,LOWER_UP>
pimreg@NONE UNKNOWN <NOARP,UP,LOWER_UP>
rt@if3 UP 10:10:10:10:10:21 <BROADCAST,MULTICAST,UP,LOWER_UP> また,以下のように Network Namespace 内で IP コマンドを実行しても同様に変更されることを確認しました.
これはあくまでも私の予想ですが,veth に関しては MAC アドレスを変更する際,リンクダウンさせることは必須ではないのではないか,と考えています. 追加の調査などが必要であれば行います. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
LGTM
このパッチは nodes > interface > addr フィールドを利用してインターフェイスの MAC アドレスを指定する機能のバグの修正です.
このバグは,yaml ファイルで指定された MAC アドレスを割り振る処理を N2nLink 関数 の中で行っていたために発生していました.
上記の spec.yaml に対して
tinet up
を実行すると,出力は以下の通りとなり,VM 側のインターフェイスの MAC アドレスが指定されていません.N2n関数は CmdUp 関数 の中でノードを接続するために実行されます.Router#vm1 と VM1#rt をつなげる際,Router#vm1 に対してのみ実行され,VM1#rt に対してはスキップされます.そのため,VM1#rt に対して MAC アドレスを指定する処理が行われません.
バグ修正後の実行結果は以下のとおりです.
また,プログラム上は MAC アドレスの指定は
addr: XX:XX:XX:XX:XX:XX
で行われることを想定していますが,ドキュメント上はmac: XX:XX:XX:XX:XX:XX
となっていたため,これについても修正しました.