void PolicyClassifier::addPolicyEntry(int argc, const char*const* argv) {
//if (policyTableSize <= 2) {
if (policyTableSize == MAX_POLICIES)
printf("ERROR: Policy Table size limit exceeded.\n");
else {
policyTable[policyTableSize].sourceNode = atoi(argv[2]);
policyTable[policyTableSize].destNode = atoi(argv[3]);
policyTable[policyTableSize].codePt = atoi(argv[5]);
policyTable[policyTableSize].arrivalTime = 0;
policyTable[policyTableSize].winLen = 1.0;
if ((strcmp(argv[4], "Dumb") == 0) || (strcmp(argv[4],"Null") == 0)) {
if(!policy_pool[Null])
policy_pool[Null] = new NullPolicy;
policyTable[policyTableSize].policy_index = Null;
policyTable[policyTableSize].policer = nullPolicer;
policyTable[policyTableSize].meter = nullMeter;
} else if (strcmp(argv[4], "TSW2CM") == 0) {
if(!policy_pool[TSW2CM])
policy_pool[TSW2CM] = new TSW2CMPolicy;
policyTable[policyTableSize].policy_index = TSW2CM;
policyTable[policyTableSize].policer = TSW2CMPolicer;
policyTable[policyTableSize].meter = tswTagger;
policyTable[policyTableSize].cir =
policyTable[policyTableSize].avgRate = (double) atof(argv[6]) / 8.0;
if (argc == 8) policyTable[policyTableSize].winLen = (double) atof(argv[7]);/* mb */
} else if (strcmp(argv[4], "TSW3CM") == 0) {
if(!policy_pool[TSW3CM])
policy_pool[TSW3CM] = new TSW3CMPolicy;
policyTable[policyTableSize].policy_index = TSW3CM;
policyTable[policyTableSize].policer = TSW3CMPolicer;
policyTable[policyTableSize].meter = tswTagger;
policyTable[policyTableSize].cir =
policyTable[policyTableSize].avgRate = (double) atof(argv[6]) / 8.0;
policyTable[policyTableSize].pir = (double) atof(argv[7]) / 8.0;
} else if (strcmp(argv[4], "TokenBucket") == 0) {
if(!policy_pool[TB])
policy_pool[TB] = (Policy *) new TBPolicy;
policyTable[policyTableSize].policy_index = TB;
policyTable[policyTableSize].policer = tokenBucketPolicer;
policyTable[policyTableSize].meter = tokenBucketMeter;
policyTable[policyTableSize].cir =
policyTable[policyTableSize].avgRate = (double) atof(argv[6]) / 8.0;
policyTable[policyTableSize].cbs =
policyTable[policyTableSize].cBucket = (double) atof(argv[7]);
} else if (strcmp(argv[4], "srTCM") == 0) {
if(!policy_pool[SRTCM])
policy_pool[SRTCM] = new SRTCMPolicy;
policyTable[policyTableSize].policy_index = SRTCM;
policyTable[policyTableSize].policer = srTCMPolicer;
policyTable[policyTableSize].meter = srTCMMeter;
policyTable[policyTableSize].cir =
policyTable[policyTableSize].avgRate = (double) atof(argv[6]) / 8.0;
policyTable[policyTableSize].cbs =
policyTable[policyTableSize].cBucket = (double) atof(argv[7]);
policyTable[policyTableSize].ebs =
policyTable[policyTableSize].eBucket = (double) atof(argv[8]);
} else if (strcmp(argv[4], "trTCM") == 0) {
if(!policy_pool[TRTCM])
policy_pool[TRTCM] = new TRTCMPolicy;
policyTable[policyTableSize].policy_index = TRTCM;
policyTable[policyTableSize].policer = trTCMPolicer;
policyTable[policyTableSize].meter = trTCMMeter;
policyTable[policyTableSize].cir =
policyTable[policyTableSize].avgRate = (double) atof(argv[6]) / 8.0;
policyTable[policyTableSize].cbs =
policyTable[policyTableSize].cBucket = (double) atof(argv[7]);
policyTable[policyTableSize].pir = (double) atof(argv[8]) / 8.0;
policyTable[policyTableSize].pbs =
policyTable[policyTableSize].pBucket = (double) atof(argv[9]);
} else if (strcmp(argv[4], "SFD") == 0) {
if(!policy_pool[SFD])
policy_pool[SFD] = new SFDPolicy;
policyTable[policyTableSize].policy_index = SFD;
policyTable[policyTableSize].policer = SFDPolicer;
policyTable[policyTableSize].meter = sfdTagger;
// Use cir as the transmission size threshold for the moment.
policyTable[policyTableSize].cir = atoi(argv[6]);
} else if (strcmp(argv[4], "EW") == 0) {
if(!policy_pool[EW])
policy_pool[EW] = new EWPolicy();
((EWPolicy *)policy_pool[EW])->
init(atoi(argv[6]), atoi(argv[7]), atoi(argv[8]));
policyTable[policyTableSize].policy_index = EW;
policyTable[policyTableSize].policer = EWPolicer;
policyTable[policyTableSize].meter = ewTagger;
} else if (strcmp(argv[4], "DEWP") == 0) {
if(!policy_pool[DEWP])
policy_pool[DEWP] = new DEWPPolicy;
((DEWPPolicy *)policy_pool[DEWP])->
init(atof(argv[6]));
policyTable[policyTableSize].policy_index = DEWP;
policyTable[policyTableSize].policer = DEWPPolicer;
policyTable[policyTableSize].meter = dewpTagger;
} else {
printf("No applicable policy specified, exit!!!\n");
exit(-1);
}
policyTableSize++;
}
} else {
policyTableEntry *policy;
policy = getPolicyTableEntry(atoi(argv[2]), atoi(argv[3]));
if (policy == NULL)
printf(“ERROR: cannot update Entry; no existing policy found for Source %d-Desination %d.\n”, atoi(argv[2]), atoi(argv[3]));
else {
policy->codePt = (int)atoi(argv[5]);
}
}
}