Beispiel #1
0
static FskErr sFskNetInterfaceEnumerate(FskNetInterfaceRecord **interfaceList)
{
	FskErr err;
	KplNetInterfaceRecord *kplInterfaceList;

	*interfaceList = NULL;

	err = KplNetInterfaceEnumerate(&kplInterfaceList);
	BAIL_IF_ERR(err);

	while (kplInterfaceList) {
		FskNetInterfaceRecord *nir;
		KplNetInterfaceRecord *next = kplInterfaceList->next;

		err = FskMemPtrNew(sizeof(FskNetInterfaceRecord), (FskMemPtr*)&nir);
		BAIL_IF_ERR(err);

		nir->name = FskStrDoCopy(kplInterfaceList->name);
		nir->ip = kplInterfaceList->ip;
		FskMemMove(nir->MAC, kplInterfaceList->MAC, sizeof(nir->MAC));
		nir->status = kplInterfaceList->status;
		nir->netmask = kplInterfaceList->netmask;

		FskListAppend((FskList*)interfaceList, nir);

		FskMemPtrDispose(kplInterfaceList->name);
		FskMemPtrDispose(kplInterfaceList);

		kplInterfaceList = next;
	}

bail:
	return err;
}
void KprNetworkInterfaceCallback(void *refCon)
{
	FskErr err = kFskErrNone;
	KplNetInterfaceRecord *interfaceList = NULL, *interface;
	bailIfError(KplNetInterfaceEnumerate(&interfaceList));
	interface = interfaceList;
	while (interface != NULL) {
		KplNetInterfaceRecord *next = interface->next;
		if (interface->ip && (0x7f000001 != interface->ip)) {
			KprNetworkInterfaceMark(interface->ip, interface->name);
		}
		FskMemPtrDispose(interface->name);
		FskMemPtrDispose(interface);
		interface = next;
	}
	KprNetworkInterfaceSweep();
bail:
	return;
}