コード例 #1
0
def run(ObjectList, TagList, IgnoreEmptyTags, CurrVal, Iteration):
    plLogger = PLLogger.GetLogger('methodology')
    plLogger.LogInfo("run")

    # Find the StmTrafficMix objects
    tm_list = dm_utils.process_inputs_for_objects(ObjectList, TagList,
                                                  "StmTrafficMix")
    # Find the StreamBlocks
    sb_list = dm_utils.process_inputs_for_objects(ObjectList, TagList,
                                                  "StreamBlock")
    sb_dict = {}
    for sb in sb_list:
        sb_dict[sb.GetObjectHandle()] = sb

    # Merge the lists
    for tm in tm_list:
        sb_list = get_traffic_mix_streamblocks(tm)
        for sb in sb_list:
            sb_dict[sb.GetObjectHandle()] = sb

    plLogger.LogInfo("modifying streamblocks: ")
    for sb_hnd in sb_dict.keys():
        plLogger.LogInfo("sb: " + sb_dict[sb_hnd].Get("Name"))

    # Strip whitespace
    CurrVal = "".join(CurrVal.split())

    # Process frame size from CurrVal
    match = parse_iterate_mode_input(CurrVal)

    plLogger.LogInfo("match: " + str(match) + " for " + CurrVal)

    if match is not None:
        for sb in sb_dict.values():
            # Configure the Streamblock
            if match["type"] == "fixed":
                plLogger.LogInfo("Fixed frame size")
                # Fixed Frame Size
                sb.Set("FrameLengthMode", ENUM_FRAME_LENGTH_MODE_FIXED)
                sb.Set("FixedFrameLength", match["start"])
            elif match["type"] == "incr":
                # Incr Frame Size
                plLogger.LogInfo("Incr frame size")
                sb.Set("FrameLengthMode", ENUM_FRAME_LENGTH_MODE_INCR)
                sb.Set("MinFrameLength", match["start"])
                sb.Set("StepFrameLength", match["step"])
                sb.Set("MaxFrameLength", match["end"])
            elif match["type"] == "rand":
                plLogger.LogInfo("Random frame size")
                # Random Frame Size
                sb.Set("FrameLengthMode", ENUM_FRAME_LENGTH_MODE_RANDOM)
                sb.Set("MinFrameLength", match["start"])
                sb.Set("MaxFrameLength", match["end"])
            elif match["type"] == "imix":
                plLogger.LogInfo("IMIX frame size")
                frame_len_dist_handle = get_frame_len_dist(match["name"])
                if frame_len_dist_handle == 0:
                    plLogger.LogError("Invalid IMIX distribution named: " +
                                      match["name"])
                    return False
                sb.Set("FrameLengthMode", ENUM_FRAME_LENGTH_MODE_IMIX)

                # Need to remove any affiliated FrameLengthDistribution objects
                # before we can add a new one (should only be one)
                rel_name = "AffiliationFrameLengthDistribution"
                fld_list = sb.GetObjects("FrameLengthDistribution",
                                         RelationType(rel_name))
                for fld in fld_list:
                    sb.RemoveObject(fld, RelationType(rel_name))
                sb.AddObject(frame_len_dist_handle,
                             RelationType(rel_name))
            else:
                plLogger.LogError("Invalid frame size mode: " +
                                  str(match["type"]))
                return False
    else:
        plLogger.LogError("Invalid frame size: " + str(CurrVal))
        return False

    # Update the results
    hnd_reg = CHandleRegistry.Instance()
    this_cmd = hnd_reg.Find(__commandHandle__)
    update_results_with_current_value('FrameSize', CurrVal, Iteration, this_cmd)
    return True