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

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

Debian 6.1.0-20 커널 업데이트 후 usb3 nic 인터페이스 문제의 4부.

여기에서 다른 게시물을 참조하세요.

추상적인: 최근 커널 6.1.0-20의 데비안 업데이트로 인해 usb-lan nics EEPROM 내부에 저장된 mac 주소 인식이 중단되어 이전에 작성된 모든 udev 규칙이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까지 내려놓고 -> up한 다음 udev를 다시 불러와서 인터페이스 이름을 바꿀 수 있는 스크립트를 작성하는 데 도움을 주실 수 있나요?

또는...

  • 인터페이스가 이미 원래의 Mac 주소를 되찾았을 때 udev가 호출되는 기본 시간 전에 ETH를 다운/업으로 새로 고칠 수 있으며 이 경우 udev가 작업을 수행해야 합니다.

지난번 @AB에서 제안하셨던 RUN+= 솔루션이 이것과 관련이 있나요?

답변1

설명

현재 상태를 수정하기 위해 OP의 아이디어에 따라 단일udev규칙:

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

    • 첨가
    • 네트워크 장치
    • 운전자와 함께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 명령을 사용해야 합니다.

    • 두 번째 RUN 명령은 NIC를 적절하게 처리하는 커널 드라이버로 실행할 때와 동일한 결과(DOWN 상태에 추가된 인터페이스)를 갖는 데 사용되어야 합니다. 나중에 네트워킹 도구가 이에 대처할 수 있다면 하나의 장치 재설정을 아끼지 않고 DOWN으로 설정하지 않고 UP으로 두는 것을 고려할 수 있습니다.

    • 마지막 RUN 명령은 건너뛸 수 있습니다. MAC 주소에만 의존하는 이후 네트워킹 도구에 의해 인터페이스 이름이 이미 변경된 경우에는 필요하지 않을 수 있습니다.

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

        • 인터페이스에 영구 MAC 주소가 있는 경우: 작업 없음
        • 인터페이스가 한 번 표시되었다가 종료된 후에도 여전히 영구 MAC 주소를 얻지 못한 경우(즉, 해결 방법이 작동하지 않음) 해당 add작업은 수행되지 않습니다(영구 MAC 주소 장치로 제한되기 때문). 임의의 MAC 주소로 장치를 떠나기
  • 데비안 이외의 배포판

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

    • eudev(Devuan, Gentoo ...): 잘 모르겠습니다.eudev와 똑같이 행동한다체계화된'에스udev내부에서 이벤트를 트리거할 때. 3차 RUN에는 변화가 필요할 수도 있습니다.

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

  • addr_assign_type=3적어도 MAC 주소가 변경되었음을 의미하는 것처럼 보이는 경우 도 있습니다 (수동으로 또는 다른 방식으로, 예: 인터페이스를 본드 슬레이브로 설정). 이 규칙은 이것을 건드리지 않습니다(건드리지도 않고, 이 경우도 발생하지 않습니다).

  • 사용된 문서

관련 정보