저는 Debian(Linux 3.8.13)을 실행하는 임베디드 x86 Linux 장치에서 작업하고 있습니다. 이 장치에는 두 개의 이더넷 포트(eth0 및 eth1)가 있습니다.
스위치에 eth0만 연결된 상태에서 이 장치를 부팅하고 ssh로 접속하여 'ifconfig'를 수행하면 다음과 같은 결과가 나타납니다.
root@msli-DCP-11234772:~# ifconfig
eth0 Link encap:Ethernet HWaddr 00:1c:ab:00:0a:60
inet6 addr: fe80::21c:abff:fe00:a60/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:5659 errors:0 dropped:4102 overruns:0 frame:0
TX packets:1071 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:1313254 (1.2 MiB) TX bytes:224889 (219.6 KiB)
Interrupt:16 Memory:fc500000-fc520000
eth1 Link encap:Ethernet HWaddr 00:1c:ab:00:0a:61
UP BROADCAST MULTICAST MTU:1500 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)
Interrupt:17 Memory:fc520000-fc540000
eth0에는 "inet6 addr"이 할당되어 있지만 eth1에는 할당되어 있지 않습니다.
eth1을 네트워크 스위치에 연결하면 ifconfig의 출력에 "inet6 addr" 줄이 나타납니다(eth1에서 이더넷 케이블을 다시 뽑더라도 이 줄은 그대로 유지됩니다).
따라서 Linux는 이더넷 장치가 실제로 무언가에 처음 연결될 때까지 이더넷 장치를 IPv6 주소와 연결하는 데 신경을 쓰지 않는 것 같습니다.
그런 종류의 작업이지만 항상 두 포트 모두에서 IPv6 멀티캐스트 패킷을 보내도록 되어 있는 일부 프로그램이 있는데 IPv6 주소가 할당되지 않은 포트에서는 이를 수행할 수 없습니다.
그래서 제가 하고 싶은 것은 시작하는 동안 기다리는 대신 Linux가 장치의 자체 할당 IPv6 주소(예: fe80::blah, 여기서 blah는 이더넷 칩의 MAC 주소에서 파생됨)를 연결하도록 강제하는 방법을 찾는 것입니다. 이더넷 포트가 실제로 연결될 때까지. 그렇게 할 수 있는 방법이 있나요?
(장점은 내 프로그램이 시작하는 동안 네트워크 장치 목록을 스캔하고 사용할 수 있다는 것입니다. 현재 네트워크 구성 변경 사항을 알리기 위해 AF_NETLINK 소켓을 설정해야 하는데, 이는 일종의 작동하지만 더 복잡합니다. 내가 원하는 것보다 반응도 약간 느립니다)
답변1
ifconfig
여기에는 충분한 정보가 표시되지 않습니다. 일반적인 핵심은 다음과 같습니다.링크이다. 에는 해당하는 경우 주소의 수명뿐만 아니라 하위 수준 상태도 표시됩니다 iproute2
.ip addr
링크 로컬 주소는 링크 자체가 작동 중인 경우에만 존재해야 합니다. 링크도 없고 주소도 없습니다. 결합된 세트의 하위 인터페이스(사용하려는 단어 선택에 따라 그룹/팀/마스터 등)와 같이 표시되지 않는 다른 경우도 많이 있습니다.
케이블을 제거한 후에도 링크 로컬 주소가 제거되지 않는 현상을 관찰한 것은 오류라고 생각합니다. 다른 사람이 사용하지 않고 수명 카운터가 만료되었을 때 제거했어야 했으며 최신 커널에서는 수정된 것 같습니다. (지금은 테스트할 수 있는 상황이 아닙니다.)
그 외에도 주소를 생성하는 것이 커널인지 사용자 공간인지 신경쓰시나요 fe80::
? 중요하지 않은 경우 사용자 공간에서 생성할 수 있으며 커널은 이를 제거하지 않습니다.
답변2
에서 인터페이스는 어떻게 구성됩니까 /etc/network/interfaces
? allow-hotplug
링크가 감지되면 인터페이스를 활성화하도록 설정되어 있다고 가정합니다 . 구성이 다음과 같이 변경되도록 시도해 보세요 auto
.
auto eth0
iface eth0 ....
....
auto eth1
iface eth1 ....
....