VOID TCPUpdateInterfaceIPInformation(PIP_INTERFACE IF) { struct ip_addr ipaddr; struct ip_addr netmask; struct ip_addr gw; gw.addr = 0; GetInterfaceIPv4Address(IF, ADE_UNICAST, (PULONG)&ipaddr.addr); GetInterfaceIPv4Address(IF, ADE_ADDRMASK, (PULONG)&netmask.addr); netif_set_addr(IF->TCPContext, &ipaddr, &netmask, &gw); if (ipaddr.addr != 0) { netif_set_up(IF->TCPContext); netif_set_default(IF->TCPContext); } else { netif_set_down(IF->TCPContext); } }
TDI_STATUS InfoTdiQueryGetAddrTable(TDIEntityID ID, PNDIS_BUFFER Buffer, PUINT BufferSize) { KIRQL OldIrql; PIPADDR_ENTRY IPEntry; PIP_INTERFACE CurrentIF; UINT i; TI_DbgPrint(DEBUG_INFO, ("Called.\n")); TcpipAcquireSpinLock(&EntityListLock, &OldIrql); for (i = 0; i < EntityCount; i++) { if (EntityList[i].tei_entity == ID.tei_entity && EntityList[i].tei_instance == ID.tei_instance) break; } if (i == EntityCount) { TcpipReleaseSpinLock(&EntityListLock, OldIrql); return TDI_INVALID_PARAMETER; } IPEntry = ExAllocatePool(NonPagedPool, sizeof(IPADDR_ENTRY)); if (!IPEntry) { TcpipReleaseSpinLock(&EntityListLock, OldIrql); return TDI_NO_RESOURCES; } CurrentIF = EntityList[i].context; IPEntry->Index = CurrentIF->Index; GetInterfaceIPv4Address(CurrentIF, ADE_UNICAST, &IPEntry->Addr); GetInterfaceIPv4Address(CurrentIF, ADE_ADDRMASK, &IPEntry->Mask); GetInterfaceIPv4Address(CurrentIF, ADE_BROADCAST, &IPEntry->BcastAddr); TcpipReleaseSpinLock(&EntityListLock, OldIrql); InfoCopyOut((PCHAR)IPEntry, sizeof(IPADDR_ENTRY), Buffer, BufferSize); ExFreePool(IPEntry); return TDI_SUCCESS; }