⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 cmd911x.c

📁 smsc911x 网卡驱动 This the users/programmers guide for the LAN911x Linux Driver The following sections
💻 C
📖 第 1 页 / 共 4 页
字号:
		}
		printf("IntDeas = %ld, Throughput = %ld\n",currentSetting,currentMeasurement);
	}
	printf("Best: IntDeas = %ld, Throughput = %ld\n",bestParams.IntDeas,bestMeasurement);
	flowParams.IntDeas=bestParams.IntDeas;
	if(!SendFlowParams(controlSocket,&flowParams)) {
		goto FAILED;
	}
	//getting the FlowParams back will make sure the measurements are clear.
	if(!ReceiveFlowParams(controlSocket,&flowParams)) goto FAILED;
	if(flowParams.IntDeas!=bestParams.IntDeas) {
		printf("new setting did not stick\n");
		goto FAILED;
	}
	printf("Measuring Max Throughput, and Max Packet Count\n");
	if(system(command)!=0) goto FAILED;
	if(system(command)!=0) goto FAILED;
	if(system(command)!=0) goto FAILED;
	if(!ReceiveFlowParams(controlSocket,&flowParams)) goto FAILED;
	bestParams.MeasuredMaxThroughput=flowParams.MeasuredMaxThroughput;
	bestParams.MeasuredMaxPacketCount=flowParams.MeasuredMaxPacketCount;
	bestParams.MaxThroughput=bestParams.MeasuredMaxThroughput;
	bestParams.MaxPacketCount=bestParams.MeasuredMaxPacketCount;
	bestParams.PacketCost=0;
	bestParams.MaxWorkLoad=0xFFFFFFFFUL;
	bestParams.BurstPeriod=100;
	memcpy(&flowParams,&bestParams,sizeof(FLOW_PARAMS));

	printf("TUNING Burst Period\n");
	sprintf(command,"./netperf -H%s -tUDP_STREAM -l10 -- -m1472 > %s",
		hostName,outputFile);
	bestMeasurement=0;
	for(currentSetting=10;currentSetting<120;currentSetting++) {
		flowParams.BurstPeriod=currentSetting;
		if(!SendFlowParams(controlSocket,&flowParams)) {
			printf("Failed to send new setting: BurstPeriod=%ld\n",currentSetting);
			goto FAILED;
		}
		if(system(command)==0) {
			currentMeasurement=ReadThroughput(outputFile);
			if(currentMeasurement>bestMeasurement) {
				bestMeasurement=currentMeasurement;
				bestParams.BurstPeriod=currentSetting;
			}
		} else {
			printf("Failed system command: \"%s\"\n",command);
			goto FAILED;
		}
		printf("BurstPeriod = %ld, Throughput = %ld\n",
			currentSetting,currentMeasurement);
	}
	printf("Best: BurstPeriod = %ld, Throughput = %ld\n",
		bestParams.BurstPeriod,bestMeasurement); 
	flowParams.BurstPeriod=bestParams.BurstPeriod;

	printf("TUNING PacketCost\n");
	sprintf(command,"./netperf -H%s -tUDP_STREAM -l10 -- -m16 > %s",
		hostName,outputFile);
	bestMeasurement=0;
	for(currentSetting=0;currentSetting<500;currentSetting+=10) {
		flowParams.PacketCost=currentSetting;
		if(!SendFlowParams(controlSocket, &flowParams)) {
			printf("Failed to send new setting: PacketCost=%ld\n",currentSetting);
			goto FAILED;
		}
		if(system(command)==0) {
			currentMeasurement=ReadThroughput(outputFile);
			if(currentMeasurement>bestMeasurement) {
				bestMeasurement=currentMeasurement;
				bestParams.PacketCost=currentSetting;
			}
		} else {
			printf("Failed system command: \"%s\"\n",command);
			goto FAILED;
		}
		printf("PacketCost = %ld, Throughput = %ld\n",
			currentSetting,currentMeasurement);
	}
	bestMeasurement=0;
	if(bestParams.PacketCost>20) {
		tempLow=bestParams.PacketCost-20;
	} else {
		tempLow=0;
	}
	tempHigh=bestParams.PacketCost+20;
	for(currentSetting=tempLow;currentSetting<tempHigh;currentSetting++) {
		flowParams.PacketCost=currentSetting;
		if(!SendFlowParams(controlSocket, &flowParams)) {
			printf("Failed to send new setting: PacketCost=%ld\n",currentSetting);
			goto FAILED;
		}
		if(system(command)==0) {
			currentMeasurement=ReadThroughput(outputFile);
			if(currentMeasurement>bestMeasurement) {
				bestMeasurement=currentMeasurement;
				bestParams.PacketCost=currentSetting;
			}
		} else {
			printf("Failed system command: \"%s\"\n",command);
			goto FAILED;
		}
		printf("PacketCost = %ld, Throughput = %ld\n",
			currentSetting,currentMeasurement);
	}
	printf("Best: PacketCost = %ld, Throughput = %ld\n",
		bestParams.PacketCost,bestMeasurement);
	printf("Best ");DisplayFlowParams(&bestParams);
	if(!SendFlowParams(controlSocket, &origParams)) {
		printf("Failed to restore original setting\n");
		goto FAILED;
	}

DONE:
	close(controlSocket);
	return;
FAILED:
	close(controlSocket);
	printf("Something went wrong\n");
}

int main(ac,av)
int ac;
char * av[];
{
	int oc=0;
	bool eSet=false;
	char ethName[IFNAMSIZ];
	COMMAND_DATA commandData;
	bool cSet=false;
	bool aSet=false;
	unsigned long address=0;
	bool dSet=false;
	unsigned long data=0;
	unsigned long commandCode=0;
	char hostName[128];
	bool hSet=false;
	unsigned long portNum=0;
	bool pSet=false;

	iam=av[0];
	ethName[0]=0;
	hostName[0]=0;

	while((oc=getopt(ac,av,"hH:p:e:c:a:d:"))!=-1) {
		switch(oc) {
		case 'h'://help
			goto BAD_USAGE;
		case 'H'://Host address
			if(hSet) goto BAD_USAGE;
			strcpy(hostName,optarg);
			hSet=true;
			break;
		case 'p':
			if(pSet) goto BAD_USAGE;
			if(!ParseNumber(optarg,&portNum)) {
				goto BAD_USAGE;
			}
			if(portNum>0xFFFFUL) goto BAD_USAGE;
			pSet=true;
			break;            
		case 'e':
			if(eSet) goto BAD_USAGE;
			eSet=true;
			strncpy(ethName,optarg,IFNAMSIZ);
			ethName[IFNAMSIZ-1]=0;
			break;
		case 'c':
			if(cSet) goto BAD_USAGE;
			if(strcmp(optarg,"GET_CONFIG")==0) {
				commandCode=COMMAND_GET_CONFIGURATION;
			} else if(strcmp(optarg,"DUMP_REGS")==0) {
				commandCode=COMMAND_DUMP_LAN_REGS;
			} else if(strcmp(optarg,"DUMP_MAC")==0) {
				commandCode=COMMAND_DUMP_MAC_REGS;
			} else if(strcmp(optarg,"DUMP_PHY")==0) {
				commandCode=COMMAND_DUMP_PHY_REGS;
			} else if(strcmp(optarg,"DUMP_EEPROM")==0) {
				commandCode=COMMAND_DUMP_EEPROM;
			} else if(strcmp(optarg,"DUMP_TEMP")==0) {
				commandCode=COMMAND_DUMP_TEMP;
			} else if(strcmp(optarg,"GET_MAC")==0) {
				commandCode=COMMAND_GET_MAC_ADDRESS;
			} else if(strcmp(optarg,"SET_MAC")==0) {
				commandCode=COMMAND_SET_MAC_ADDRESS;
			} else if(strcmp(optarg,"LOAD_MAC")==0) {
				commandCode=COMMAND_LOAD_MAC_ADDRESS;
			} else if(strcmp(optarg,"SAVE_MAC")==0) {
				commandCode=COMMAND_SAVE_MAC_ADDRESS;
			} else if(strcmp(optarg,"SET_DEBUG")==0) {
				commandCode=COMMAND_SET_DEBUG_MODE;
			} else if(strcmp(optarg,"SET_POWER")==0) {
				commandCode=COMMAND_SET_POWER_MODE;
			} else if(strcmp(optarg,"GET_POWER")==0) {
				commandCode=COMMAND_GET_POWER_MODE;
			} else if(strcmp(optarg,"SET_LINK")==0) {
				commandCode=COMMAND_SET_LINK_MODE;
			} else if(strcmp(optarg,"GET_LINK")==0) {
				commandCode=COMMAND_GET_LINK_MODE;
			} else if(strcmp(optarg,"CHECK_LINK")==0) {
				commandCode=COMMAND_CHECK_LINK;
			} else if(strcmp(optarg,"READ_REG")==0) {
				commandCode=COMMAND_LAN_GET_REG;
			} else if(strcmp(optarg,"WRITE_REG")==0) {
				commandCode=COMMAND_LAN_SET_REG;
			} else if(strcmp(optarg,"READ_MAC")==0) {
				commandCode=COMMAND_MAC_GET_REG;
			} else if(strcmp(optarg,"WRITE_MAC")==0) {
				commandCode=COMMAND_MAC_SET_REG;
			} else if(strcmp(optarg,"READ_PHY")==0) {
				commandCode=COMMAND_PHY_GET_REG;
			} else if(strcmp(optarg,"WRITE_PHY")==0) {
				commandCode=COMMAND_PHY_SET_REG;
			} else if(strcmp(optarg,"READ_BYTE")==0) {
				commandCode=COMMAND_READ_BYTE;
			} else if(strcmp(optarg,"READ_WORD")==0) {
				commandCode=COMMAND_READ_WORD;
			} else if(strcmp(optarg,"READ_DWORD")==0) {
				commandCode=COMMAND_READ_DWORD;
			} else if(strcmp(optarg,"WRITE_BYTE")==0) {
				commandCode=COMMAND_WRITE_BYTE;
			} else if(strcmp(optarg,"WRITE_WORD")==0) {
				commandCode=COMMAND_WRITE_WORD;
			} else if(strcmp(optarg,"WRITE_DWORD")==0) {
				commandCode=COMMAND_WRITE_DWORD;
			} else if(strcmp(optarg,"SERVER")==0) {
				commandCode=COMMAND_RUN_SERVER;
			} else if(strcmp(optarg,"TUNER")==0) {
				commandCode=COMMAND_RUN_TUNER;
			} else if(strcmp(optarg,"GET_FLOW")==0) {
				commandCode=COMMAND_GET_FLOW_PARAMS;
			} else {
				goto BAD_USAGE;
			}
			cSet=true;
			break;
		case 'a':
			if(aSet) goto BAD_USAGE;
			if(!ParseNumber(optarg,&address)) {
				goto BAD_USAGE;
			}
			aSet=true;
			break;
		case 'd':
			if(dSet) goto BAD_USAGE;
			if(!ParseNumber(optarg,&data)) {
				goto BAD_USAGE;
			}
			dSet=true;
			break;
		default:
			goto BAD_USAGE;
		}
	}

	if(commandCode==COMMAND_RUN_TUNER) {
		//This command must be run before initialize because
		//  it will typically be run on machines that do not
		//  have the smsc911x driver installed.
		RunTuner(hostName,(unsigned short)portNum);
		return 1;
	}

	if(!Initialize(&commandData,ethName)) {
		return 1;
	}

	switch(commandCode) {
	case COMMAND_RUN_SERVER:
		RunServer(&commandData,(unsigned short)portNum);
		break;
	case COMMAND_GET_FLOW_PARAMS:
		GetFlowParams(&commandData);
		break;
	case COMMAND_GET_CONFIGURATION:
		GetConfiguration(&commandData);
		break;
	case COMMAND_DUMP_LAN_REGS:
		LanDumpRegs(&commandData);
		break;
	case COMMAND_DUMP_MAC_REGS:
		MacDumpRegs(&commandData);
		break;
	case COMMAND_DUMP_PHY_REGS:
		PhyDumpRegs(&commandData);
		break;
	case COMMAND_DUMP_EEPROM:
		DumpEEPROM(&commandData);
		break;
	case COMMAND_DUMP_TEMP:
		DumpTemp(&commandData);
		break;
	case COMMAND_GET_MAC_ADDRESS:
		GetMacAddress(&commandData);
		break;
	case COMMAND_SET_MAC_ADDRESS:
		if(!aSet) goto BAD_USAGE;
		if(!dSet) goto BAD_USAGE;
		SetMacAddress(&commandData,address,data);
		break;
	case COMMAND_LOAD_MAC_ADDRESS:
		LoadMacAddress(&commandData);
		break;
	case COMMAND_SAVE_MAC_ADDRESS:
		if(!aSet) goto BAD_USAGE;
		if(!dSet) goto BAD_USAGE;
		SaveMacAddress(&commandData,address,data);
		break;
	case COMMAND_SET_DEBUG_MODE:
		if(!dSet) goto BAD_USAGE;
		SetDebugMode(&commandData,data);
		break;
	case COMMAND_SET_LINK_MODE:
		if(!dSet) goto BAD_USAGE;
		SetLinkMode(&commandData,data);
		break;
	case COMMAND_GET_LINK_MODE:
		GetLinkMode(&commandData);
		break;
	case COMMAND_CHECK_LINK:
		CheckLink(&commandData);
		break;
	case COMMAND_SET_POWER_MODE:
		if(!dSet) goto BAD_USAGE;
		SetPowerMode(&commandData,data);
		break;
	case COMMAND_GET_POWER_MODE:
		GetPowerMode(&commandData);
		break;
	case COMMAND_LAN_GET_REG:
		if(!aSet) goto BAD_USAGE;
		LanGetReg(&commandData,address);
		break;
	case COMMAND_LAN_SET_REG:
		if(!aSet) goto BAD_USAGE;
		if(!dSet) goto BAD_USAGE;
		LanSetReg(&commandData,address,data);
		break;
	case COMMAND_MAC_GET_REG:
		if(!aSet) goto BAD_USAGE;
		MacGetReg(&commandData,address);
		break;
	case COMMAND_MAC_SET_REG:
		if(!aSet) goto BAD_USAGE;
		if(!dSet) goto BAD_USAGE;
		MacSetReg(&commandData,address,data);
		break;
	case COMMAND_PHY_GET_REG:
		if(!aSet) goto BAD_USAGE;
		PhyGetReg(&commandData,address);
		break;
	case COMMAND_PHY_SET_REG:
		if(!aSet) goto BAD_USAGE;
		if(!dSet) goto BAD_USAGE;
		PhySetReg(&commandData,address,data);
		break;
	case COMMAND_READ_BYTE:
		if(!aSet) goto BAD_USAGE;
		ReadByte(&commandData,address);
		break;
	case COMMAND_READ_WORD:
		if(!aSet) goto BAD_USAGE;
		ReadWord(&commandData,address);
		break;
	case COMMAND_READ_DWORD:
		if(!aSet) goto BAD_USAGE;
		ReadDWord(&commandData,address);
		break;
	case COMMAND_WRITE_BYTE:
		if(!aSet) goto BAD_USAGE;
		if(!dSet) goto BAD_USAGE;
		WriteByte(&commandData,address,data);
		break;
	case COMMAND_WRITE_WORD:
		if(!aSet) goto BAD_USAGE;
		if(!dSet) goto BAD_USAGE;
		WriteWord(&commandData,address,data);
		break;
	case COMMAND_WRITE_DWORD:
		if(!aSet) goto BAD_USAGE;
		if(!dSet) goto BAD_USAGE;
		WriteDWord(&commandData,address,data);
		break;
	default:
		goto BAD_USAGE;
	}

	return 1;
BAD_USAGE:
	DisplayUsage();
	return 1;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -