Guidelines for MB Miniport Driver IP Address Notifications Study+more

MB miniport drivers that specify EnableDhcp equal to zero in their INF files can use the IP Helper functions in kernel mode to create, change, and delete the IP address:

MB 미니포트 드라이버는 (INF 파일에서 EnableDhcp 값을 0으로 설정하면) 커널 모드에서 IP Helpher 함수를 통해서 IP 주소를 생성, 변경, 삭제 할 수 있다:

To use the IP Helper functions in kernel mode, miniport drivers must include the Netioapi.h header file, and link against Netio.lib.
IP Helper 함수를 커널모드에서 사용하기 위해서, 미니포트 드라이버는 Netioapi.h 를 include 해야하며, Netio.lib 를 링크 해야 한다.

When miniport drivers specify EnableDhcp equal to zero they are required to perform the following operations to notify the MB Service about any of the following events:
미니포트 드라이버가 EnableDhcp 를 0으로 설정했다면, 다음의 이벤트에 대해 MB 서비스에 알려(operations to notify)주어야 한다.

  • Set IP address for the MB interface
  • Set default gateway address
  • Update DNS addresses

IP addresses and default gateways that are set by using the IP Helper API persist network connect or disconnect events, or both. Therefore, if the new IP address or default gateway, or both, values are different than the values currently set, the miniport driver should first clear the previous values before setting new values on a network connection event.

Note  Miniport drivers can find the Luid and Index of the MB interface from the NetLuid or IfIndex members of NDIS_MINIPORT_INIT_PARAMETERS structure that was passed to the miniport driver's MiniportInitializeEx function.
네트웍이 연결되거나 끊길때, IP Helper API 를 통해 IP 주소와 default 게이트웨이가 설정된다. 따라서, 만약 네트웍 컨넥션 이벤트가 발생했고, 새로운 IP 주소나 default 게이트웨이 혹은 둘다의 새 값이 이전값과 다르다면, 미니포트 드라이버는 새로운 값을 설정하기 전에 이전 값을 지워야(clear) 한다.

노트. 미니포트 드라이버는 MB 인터페이스의 Luid와 Index 값을 MiniportInitializeEx 함수를 통해 전달받는 NDIS_MINIPORT_INIT_PARAMETERS 구조체에 있는 NetLuid와 IfIndex 멤버 변수를 통해 확인할 수 있다.

To Set the IP Address for the MB Interface

To set an IPv4 address, use the following procedure. You can use similar IP Helper functionality to set an IPv6 address.

IPv4 주소를 설정하기 위해서는 다음의 순서를 따라야 한다. 당신은 비슷한 방법으로 IP Helper 를 사용하여 IPv6 주소를 설정 할 수 있다.

  1. Use the GetUnicastIpAddressTable IP Helper function to find all the IP address entries in the system.
    GetUnicastIpAddressTable 이라는 IP Helper 함수를 사용하여 시스템에 있는 모든 IP 주소 엔트리 찾을 수 있다.
  2. For each entry whose InterfaceLuid value matches the InterfaceLuid of the MB interface:
    MB 인터페이스의 InferfaceLuid와 매칭되는 임의 엔트리의 InterfaceLuid를 찾았다면 다음을 따른다:
    1. Find the IP address entry that matches the IP address used in previous connection. First time connections will not have a previous IP address.
      이전 연결에서 사용한 IP 주소와 동일한 IP주소를 가지고 있는 엔트리를 찾는다. 첫 연결이라면 이전 연결에서 사용한 IP 주소가 없을것이다.
    2. If the new IP address is different than the previous IP address, delete the IP address entry for previous connection IP addresses by using the DeleteUnicastIpAddressEntry IP Helper function.
      만약 새 주소가 이전에 사용한 IP 주소와 다르다면, 이전 IP 주소를 DeleteUnicastIpAddressEntry 라는 IP Helper 함수를 사용하여 제거한다.
    3. If the new IP address is the same as the previous IP address, verify that the desired entry already exists.
      만약 새로운 IP 주소가 이전 IP 주소와 동일하다면, 원하는 엔트리가 이미 존재하고 있는지 확인한다.

  3. If the miniport driver did not find the desired IP address entry in the previous loop, it should add a new entry.
    만약 미니포트 드라이버가 원하는 IP 주소 엔트리를 찾지 못했다면, 새 엔트리를 추가한다.
    1. Use the InitializeUnicastIpAddressEntry IP Helper function to initialize a MIB_UNICASTIPADDRESS_ROW structure and set the following members of the structure:
      InitializeUnicastIpAddressEntry 라는 IP Helper 함수를 사용하여 MIB_UNICASTIPADDRESS_ROW 구조체를 초기화 하고, 다음에 보이는 멤버 변수를 설정한다.
      1. Set the InterfaceLuid or InterfaceIndex members, as appropriate.
        InterfaceLuid 혹은 InterfaceIndex를 적절하게 설정한다.
      2. Set the OnlinePrefixLength member. This is the number of bits that have a value of one in the subnet mask. For example, if the subnet mask is 255.255.255.0, OnlinePrefixLength should be 24.
        OnlinePrefixLength 멤버 변수를 설정한다. 이 것은 서브넷 마스크 값의 비트수를 의미한다.만약 서브넷 마스크가 255.255.255.0 라면 OnlinePrefixLength 값은 24 (24개 비트가 1값임) 이다.
      3. Set the Address member.
        Address 멤버 변수를 설정한다.
      4. Set the PrefixOrigin member to IpPrefixOriginManual.
        IpPrefixOriginManual 의 멤버인 PrefixOrigin을 설정한다.

    2. Pass the initialized MIB_UNICASTADDRESS_ROW structure to the CreateUnicastIpAddressEntry IP Helper function to create the IP address entry.
      IP주소 엔트리를 생성하기 위해 CreateUnicastIpAddressEntry 라는 IP Helper 함수를 사용하여 MIB_UNITCASTADDRESS_ROW 구조체를 초기화한다.

To Set Default Gateway Address

To set an IPv4 gateway address, use the following procedure. You can use similar IP Helper functionality to set an IPv6 gateway address.

IPv4 게이트웨이 주소를 설정하기 위해서는 다음의 순서를 따라야 한다.

  1. Use GetIpForwardTable2 IP Helper function to obtain all the routing entries in the system.
  2. For each entry whose InterfaceLuid value matches the InterfaceLuid value of the MB interface and DestinationPrefix is "0.0.0.0/0", call the DeleteIpForwardEntry2 IP Helper function to delete the route if NextHop is not equal to the new gateway address. Otherwise, the desired routing entry is already in the system.
  3. If the miniport driver did not find the desired routing entry in the previous loop, it should add a new entry by using the InitializeIpForwardEntry IP Helper function to initialize a MIB_IPFORWARD_ROW2 structure. Initialize the following members of the structure:
    InterfaceLuid or InterfaceIndex.
    Set DestinationPrefix to 0.0.0.0/0 for default gateway. (Prefix = 0.0.0.0 and PrefixLength = 0)
    Set NextHop to the IP address of the default gateway.
    Other members are set to default values during initialization. Miniport drivers should use default values for those members.
  4. Pass the MIB_IPFORWARD_ROW2 structure to the CreateIpForwardEntry2 IP Helper function to set a new default gateway address.

To Set DNS Addresses

  1. Set the NameServer registry key as described in MB DNS Updates to notify Windows about updated DNS addresses. 
    MB DNS Updates 문서에 나와있는대로 NameServer 레지스트리 키를 설정해서 Windows 에 notify를 줄수 있다.

덧글

댓글 입력 영역