📄 cmd911x.c
字号:
}
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 + -