저는 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 ....
....