udev 규칙 세트에 이름을 할당하기 전에 네트워크 어댑터의 상태를 재설정하는 방법은 무엇입니까?

udev 규칙 세트에 이름을 할당하기 전에 네트워크 어댑터의 상태를 재설정하는 방법은 무엇입니까?

Debian 6.1.0-20 커널 업데이트 후 USB3 네트워크 카드 인터페이스 문제의 4부.

여기에서 다른 게시물을 확인하세요:

추상적인: 커널 6.1.0-20을 사용하는 최근 데비안 업데이트로 인해 usb-lan nics EEPROM에 저장된 MAC 주소 인식이 중단되었습니다.ATTR{주소}(mac 주소를 기반으로 인터페이스 이름 변경)이 더 이상 작동하지 않습니다.

내가 지금 이 글을 쓰고 있는 이유:

  • 사용ATTRS{시리즈}작동하지만 제가 가지고 있는 어댑터 6개 중 3개가 동일한 "직렬" 속성을 공유하므로 어느 것이 어느 것인지 알 수 있는 방법이 없습니다.
  • 이때 USB를 사용해 보았는데ATTRS{버스 번호}그리고ATTRS{devnum}그러나 나머지 3개의 인터페이스를 구체적으로 식별하기 위해 이러한 값은 주 AC 전류가 제거되고 다시 투입되면서 시간이 지남에 따라 불안정하고 변화하는 것으로 보입니다.

따라서 위의 솔루션 중 어느 것도 실제로 최종 문제를 해결하지 못합니다.

그러나 다음을 사용하여 eth 인터페이스를 삭제하고 열면(또는 그냥 열면) 것 같습니다.

ip link set dev eth0 down
ip link set dev eth0 up

eth0(일명 USB3 LAN 어댑터)은 EEPROM에 저장된 올바른 MAC 주소를 다시 읽습니다.

이때 내 유일한 생각은 다음과 같습니다.

  • 모든 인터페이스를 삭제하거나 열어 올바른 MAC 주소를 얻고 udev가 규칙을 다시 적용하도록 할 수 있습니까? 아니면 부팅 시 한 번만 발생합니까? 가능하다면 eth를 0에서 10으로 삭제한 다음 udev를 다시 호출하여 인터페이스 이름을 바꿀 수 있는 스크립트를 작성하는 데 도움을 주실 수 있나요?

또는...

  • 인터페이스가 원래 MAC 주소를 되찾았을 때 udev를 호출하기 전에 ETH를 아래로/위로 플러시할 수 있습니다. 이 경우 udev는 작업을 완료해야 합니다.

지난번 @AB에서 제안한 RUN+= 솔루션이 관련이 있나요?

답변1

설명하다

OP의 아이디어에 따라 현재 상태를 수정하기 위해우데브규제:

  • 다음 조건이 모두 충족되는 경우에만:

    • 다음에 추가
    • 인터넷 장비
    • 드라이버 포함ax88179_178a
    • 임의의 MAC 주소로 생성( addr_assign_type=1)
  • 할 것이다:

    • 인터페이스를 UP으로 설정합니다. 그러면 드라이버가 영구 MAC 주소 속성을 검색할 수 있습니다.

    • 다시 DOWN으로 설정합니다. (새로 추가된 인터페이스의 예상 상태입니다.)

    • 이제 인터페이스가 영구 MAC 주소( )를 검색한 것으로 확인되면 addr_assign_type=0인터페이스 추가가 다시 트리거됩니다.

      ...따라서 인터페이스 이름을 적절하게 변경하여 새 라운드를 트리거합니다. (예: 일반적으로 USB 네트워크 인터페이스는 달리 지정되지 않은 경우 MAC 주소를 기반으로 이름이 변경됩니다 enx....)

규칙 및 활성화

우선순위가 충분히 낮은 규칙을 만듭니다(저는 40을 선택했습니다).

/etc/udev/rules.d/40-local-net-ax88179_178a.rules:

ACTION=="add", SUBSYSTEM=="net", ATTR{addr_assign_type}=="1", DRIVERS=="ax88179_178a", \
  RUN="/bin/ip link set %k up", RUN+="/bin/ip link set %k down", \
  RUN+="/bin/udevadm trigger -s net -a addr_assign_type=0 -p INTERFACE=%k -c add"

그런 다음 처음에만(무거운 효과부터 가장 가벼운 효과까지):

  • 재시작

  • 또는 다시 시작 udev:

    systemctl restart udev
    
    • USB 장치를 분리했다가 다시 연결하세요.

    • 또는 드라이버를 다시 로드하세요.

      rmmod ax88179_178a
      modprobe ax88179_178a
      
    • 또는 수정이 필요한 인터페이스에서만 새 규칙을 인위적으로 트리거합니다.

      udevadm trigger -v -s net -p ID_NET_DRIVER=ax88179_178a -a addr_assign_type=1 -c add
      

      인터페이스가 이미 실행 중인 경우(예: 다음과 같은 방법을 통해)네트워크 관리자), MAC 주소 유형을 확인할 필요는 없지만 다음을 수행하면 됩니다.

      udevadm trigger -v -s net -p ID_NET_DRIVER=ax88179_178a -c add
      

보충 설명

  • 이로 인해 궁극적으로 패치 이전과 동일한 수의 장치 재설정이 발생하여 이러한 장치 재설정이 발생하는 것을 방지합니다. 즉, 인터페이스가 추가 UP(그런 다음 DOWN)을 가져오므로 이러한 재설정이 트리거됩니다.

    따라서 커널을 어떻게 컴파일하더라도 패치로 되돌리는 것이 더 간단합니다. 이 해결 방법은 SecureBoot가 필요하고 생성된 커널 모듈을 서명할 수 없는 경우에 유용합니다.

    실제 세 번째 드라이버 패치는 여전히 환영받을 것입니다.

  • 명령 실행

    • 첫 번째 RUN 명령을 사용해야 합니다.

    • NIC를 올바르게 처리하는 커널 드라이버로 실행할 때와 동일한 결과를 얻으려면 두 번째 RUN 명령을 사용해야 합니다. 즉, DOWN 상태에서 인터페이스를 추가하는 것입니다. 한 장치가 재설정되는 것을 방지하기 위해 "끄기"로 설정하지 않고 "켜기"로 두는 것을 고려할 수 있습니다(향후 네트워크 도구로 이 문제를 해결할 수 있는 경우).

    • 마지막 RUN 명령은 건너뛸 수 있습니다. MAC 주소에만 의존하는 최신 네트워크 도구에서 인터페이스 이름을 바꾼 경우 이 명령이 필요하지 않을 수 있습니다.

      • 다음과 같은 이유로 루프가 발생하지 않습니다.

        • 인터페이스가 영구 MAC 주소를 얻는 경우: 조치 없음
        • 한 번 활성화된 인터페이스가 종료된 후에도 여전히 영구 MAC 주소를 얻지 못하는 경우(즉, 해결 방법이 작동하지 않는 경우) add작업이 수행되지 않으며(영구 MAC 주소 장치로 제한되므로) 장치는 그대로 유지됩니다. 임의의 MAC 주소
  • 데비안 이외의 배포판

    • 존재하는지 확인 /bin/ip하거나 올바른 경로로 바꾸십시오(예 /sbin/ip: : ).

    • 유데프(Devuan, Gentoo...): 그럴지는 모르겠지만유데프똑같이 행동하다체계~의우데브내부에서 이벤트가 트리거되는 경우. 세 번째 실행을 변경해야 할 수도 있습니다.

  • 어떤 이유로 추가 조건을 추가해야 하는 경우 ...S일치하는 변형(상위 속성에 대한)은 모두 동일한 상위 속성의 일부여야 하므로 필요한 경우 유사한 효과로 DRIVERS=="ax88179_178a"대체될 수 있습니다 (특정 USB 장치가 일치하는 경우). ATTRS{product}=="AX88179"이 속성) 다른 상위 요소로부터 ATTRS{serial}대체 유용한 속성을 가져옵니다

  • 적어도 addr_assign_type=3이것은 MAC 주소가 변경되었음을 의미하는 것 같습니다(수동으로 또는 다른 방식으로, 예: 인터페이스를 본드 슬레이브로 설정). 이 규칙은 이것을 건드리지 않습니다(건드려서도 안 되며, 만나서도 안 됩니다).

  • 사용된 문서

관련 정보