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]); } } }