mm2client.py
Go to the documentation of this file.
1 #!/bin/env python
2 #**********************************************************************
3 # Copyright (c) 2011 InterWorking Labs, All Rights Reserved *
4 # *
5 # RESTRICTED RIGHTS LEGEND *
6 # *
7 # This software is provided with RESTRICTED RIGHTS. *
8 # *
9 # Use, duplication, or disclosure by the U.S. Government is subject *
10 # to restrictions set forth in subparagraph (c)(1)(ii) of the Rights *
11 # in Technical Data and Computer Software clause at DFARS *
12 # 252.227-7013 or subparagraphs (c)(1) and (2) of the Commercial *
13 # Computer Software - Restricted Rights at 48 CFR 52.227-19, as *
14 # applicable. The "Manufacturer" for purposes of these regulations *
15 # is InterWorking Labs, PO Box 66190, Scotts Valley, California 95060 *
16 # U.S.A. *
17 #**********************************************************************
18 
19 #**********************************************************************
20 # $Id: mm2client.py 436 2013-08-20 22:50:01Z karl $
21 #**********************************************************************
22 
23 # This file contains epydoc markup.
24 
25 # Make sure that the Python version is new enough
26 import sys
27 import platform
28 pvt = platform.python_version_tuple()
29 if (int(pvt[0]) == 2) and (int(pvt[1]) < 6):
30  print "This program requires Python 2.6 or later."
31  sys.exit(1)
32 del pvt
33 
34 # Standard Python libraries
35 import exceptions
36 import json
37 import httplib
38 import os
39 import types
40 import urllib
41 
42 class MiniMaxClientException(exceptions.Exception):
43  pass
44 
45 #**********************************************************************
46 # GetMM2ConfigInJson()
47 #**********************************************************************
48 def GetMM2ConfigInJson(mm2name):
49  """
50  Read the configuration information from a named Mini Maxwell.
51  Return a structure
52 
53  The parts of the structure are these:
54  jdata[0] - Data Version
55  jdata[1] - Timestamp
56  jdata[2] - Full Configuration dictionary
57 
58  The parts of the full configuration dictionary are:
59  full_config["general"]
60  full_config["upstream_impairments"]
61  full_config["downstream_impairments"]
62  full_config["upstream-filters"]
63  full_config["downstream-filters"]
64  full_config["filters"]
65  """
66  conn = httplib.HTTPConnection(mm2name)
67  conn.request("GET", "/mm2/mpc/mm2.py/get_config_json")
68  resp = conn.getresponse()
69 
70  if (resp.status/100) != 2:
71  raise Exception,resp.reason
72  jdata = resp.read()
73  conn.close()
74  return jdata
75 
76 #**********************************************************************
77 # GetMM2Config()
78 #**********************************************************************
79 def GetMM2Config(mm2name):
80  return json.loads(GetMM2ConfigInJson(mm2name))
81 
82 #**********************************************************************
83 # class BandSettings
84 #**********************************************************************
85 class BandSettings(object):
86  ##MM_MAXRATE = 1000000000 # 1 gigabit, 1x10**9
87  MM_MAXRATE = 100000000 # 100 megabits, 1x10**8
88 
89  MM_DELAY_DISTRIBUTIONS = ("none", "normal", "pareto", "paretonormal",
90  "experimental")
91 
92  PCNTFMT = "2.5f"
93 
94  SetProcs = {
95  "delay_amount": "SetDelayAmount",
96  "delay_variation": "SetDelayVariation",
97  "delay_distribution": "SetDelayDistribution",
98  "delay_correlation": "SetDelayCorrelation",
99  "delay_reorder": "SetDelayReorder",
100  "drop_amount": "SetDropAmount",
101  "drop_correlation": "SetDropCorrelation",
102  "duplication_amount": "SetDupAmount",
103  "duplication_correlation": "SetDupCorrelation",
104  "reorder_gap": "SetReorderGap",
105  "reorder_correlation": "SetReorderCorrelation",
106  "reorder_amount": "SetReorderAmount",
107  "bitrate_limit": "SetRateLimit",
108  "corruption_amount": "SetCorruptionAmount",
109  "corruption_correlation": "SetCorruptionCorrelation"
110  }
111 
112  def __init__(self, bandnumber, leftflag):
113  """
114  @param bandnumber: Band number, an integer in range 1..5
115  @type bandnumber: int or long
116  @param leftflag: True if LAN-A to LAN-B, false if LAN-B to LAN-A
117  @type leftflag: bool
118  """
119  if (not isinstance(bandnumber, (types.IntType, types.LongType))) or \
120  (bandnumber < 1) or (bandnumber > 5):
121  raise MiniMaxClientException, "Band number not integer in range 1..5"
122 
123  if not isinstance(leftflag, types.BooleanType):
124  raise MiniMaxClientException, "Left/right flag not a boolean"
125 
126  self.__BandNumber = bandnumber
127  self.__LeftFlag = leftflag
128  # Load default values
129  self.SetDefaults()
130 
131  #**************************************************
132  # Accessor methods
133  #**************************************************
134  @property
135  def BandNumber(self):
136  return self.__BandNumber
137 
138  @property
139  def LeftFlag(self):
140  return self.__LeftFlag
141 
142  @property
143  def DelayAmount(self):
144  return self.__DelayAmount
145 
146  @property
147  def DelayVariation(self):
148  return self.__DelayVariation
149 
150  @property
151  def DelayCorrelation(self):
152  return self.__DelayCorrelation
153 
154  @property
155  def DelayDistribution(self):
156  return self.__DelayDistribution
157 
158  @property
159  def DelayReorder(self):
160  return self.__DelayReorder
161 
162  @property
163  def DropAmount(self):
164  return self.__DropAmount
165 
166  @property
167  def DropCorrelation(self):
168  return self.__DropCorrelation
169 
170  @property
171  def DupAmount(self):
172  return self.__DupAmount
173 
174  @property
175  def DupCorrelation(self):
176  return self.__DupCorrelation
177 
178  @property
179  def ReorderGap(self):
180  return self.__ReorderGap
181 
182  @property
183  def ReorderAmount(self):
184  return self.__ReorderAmount
185 
186  @property
188  return self.__ReorderCorrelation
189 
190  @property
191  def CorruptionAmount(self):
192  return self.__CorruptionAmount
193 
194  @property
196  return self.__CorruptionCorrelation
197 
198  @property
199  def RateLimit(self):
200  return self.__RateLimit
201 
202  #**************************************************
203  # Utility methods
204  #**************************************************
205  def Validate(self):
206  if (self.__DelayVariation < 0) or (self.__DelayVariation > self.__DelayAmount):
207  raise MiniMaxClientException, "Delay Variation not in range 0 .. Delay Amount"
208  return True
209 
210  #**************************************************
211  # Mutator methods
212  #**************************************************
213  def SetDefaults(self):
214  # Load default values
215  self.__DelayAmount = 0
218  self.__DelayDistribution = "none"
219  self.__DelayReorder = False
220  self.__DropAmount = 0
222  self.__DupAmount = 0
224  self.__ReorderGap = 0
229  self.__RateLimit = self.__class__.MM_MAXRATE
230 
231  def SetDelayAmount(self, val):
232  if (val < 0) or (val > 60000):
233  raise MiniMaxClientException, "Delay Amount not in range 0 .. 60000"
234  self.__DelayAmount = val
235 
236  def SetDelayVariation(self, val):
237  if (val < 0) or (val > 60000):
238  raise MiniMaxClientException, "Delay Amount not in range 0 .. 60000"
239  self.__DelayVariation = val
240 
241  def SetDelayCorrelation(self, val):
242  if (val < 0.0) or (val > 100.0):
243  raise MiniMaxClientException, "Delay Correlation not in range 0 .. 100"
244  self.__DelayCorrelation = val
245 
246  def SetDelayDistribution(self, val):
247  lcval = val.lower()
248  if val not in self.__class__.MM_DELAY_DISTRIBUTIONS:
249  raise MiniMaxClientException, "Delay distribution must be one of %s" % \
250  str(self.__class__.MM_DELAY_DISTRIBUTIONS)
251  self.__DelayDistribution = val
252 
253  def SetDelayReorder(self, val):
254  self.__DelayReorder = bool(val)
255 
256  def SetDropAmount(self, val):
257  if (val < 0.0) or (val > 100.0):
258  raise MiniMaxClientException, "Drop Amount not in range 0 .. 100"
259  self.__DropAmount = val
260 
261  def SetDropCorrelation(self, val):
262  if (val < 0.0) or (val > 100.0):
263  raise MiniMaxClientException, "Drop Correlation not in range 0 .. 100"
264  self.__DropCorrelation = val
265 
266  def SetDupAmount(self, val):
267  if (val < 0.0) or (val > 100.0):
268  raise MiniMaxClientException, "Duplication Amount not in range 0 .. 100"
269  self.__DupAmount = val
270 
271  def SetDupCorrelation(self, val):
272  if (val < 0.0) or (val > 100.0):
273  raise MiniMaxClientException, "Duplication Correlation not in range 0 .. 100"
274  self.__DupCorrelation = val
275 
276  def SetReorderGap(self, val):
277  if (val < 0) or (val > 1024):
278  raise MiniMaxClientException, "Reorder Gap not in range 0 .. 1024"
279  self.__ReorderGap = val
280 
281  def SetReorderAmount(self, val):
282  if (val < 0.0) or (val > 100.0):
283  raise MiniMaxClientException, "Reorder Amount not in range 0 .. 100"
284  self.__ReorderAmount = val
285 
286  def SetReorderCorrelation(self, val):
287  if (val < 0.0) or (val > 100.0):
288  raise MiniMaxClientException, "Reorder Correlation not in range 0 .. 100"
289  self.__ReorderCorrelation = val
290 
291  def SetCorruptionAmount(self, val):
292  if (val < 0.0) or (val > 100.0):
293  raise MiniMaxClientException, "Corruption Amount not in range 0 .. 100"
294  self.__CorruptionAmount = val
295 
296  def SetCorruptionCorrelation(self, val):
297  if (val < 0.0) or (val > 100.0):
298  raise MiniMaxClientException, "Corruption Correlation not in range 0 .. 100"
299  self.__CorruptionCorrelation = val
300 
301  def SetRateLimit(self, val):
302  if (val < 128) or (val > self.__class__.MM_MAXRATE):
303  raise MiniMaxClientException, "Rate Limit not in range 128 .. %u" % \
304  self.__class__.MM_MAXRATE
305  self.__RateLimit = val
306 
307  def SetByCnfigName(self, name, val):
308  """
309  Set an item using the name used in the Mini Maxwell configuration file.
310  """
311  try:
312  (self.__class__.__dict__[self.__class__.SetProcs[name]])(self, val)
313  except:
314  pass
315 
316  def AsDict(self):
317  if self.__LeftFlag:
318  snum = (2 * self.__BandNumber) - 1
319  else:
320  snum = 2 * self.__BandNumber
321  snumstr = str(snum)
322  tdict = { \
323  "DELAY_AMOUNT_" + snumstr: str(self.__DelayAmount),
324  "DELAY_VAR_" + snumstr: str(self.__DelayVariation),
325  "DELAY_CORR_" + snumstr: format(self.__DelayCorrelation, self.__class__.PCNTFMT),
326  "DELAY_CURVE_" + snumstr: self.__DelayDistribution.lower(),
327  "GAP_" + snumstr: self.__ReorderGap,
328  "REORDER_AMOUNT_" + snumstr: format(self.__ReorderAmount, self.__class__.PCNTFMT),
329  "REORDER_CORR_" + snumstr: format(self.__ReorderCorrelation, self.__class__.PCNTFMT),
330  "DROP_AMOUNT_" + snumstr: format(self.__DropAmount, self.__class__.PCNTFMT),
331  "DROP_CORR_" + snumstr: format(self.__DropCorrelation, self.__class__.PCNTFMT),
332  "DUP_AMOUNT_" + snumstr: format(self.__DupAmount, self.__class__.PCNTFMT),
333  "DUP_CORR_" + snumstr: format(self.__DupCorrelation, self.__class__.PCNTFMT),
334  "CORRUPTION_AMOUNT_" + snumstr: format(self.__CorruptionAmount, self.__class__.PCNTFMT),
335  "CORRUPTION_CORR_" + snumstr: format(self.__CorruptionCorrelation, self.__class__.PCNTFMT),
336  "RATE_LIMIT_" + snumstr: str(self.__RateLimit)
337  }
338  # We only want to send checkboxes when they are checked.
339  if self.__DelayReorder:
340  tdict["DELAY_REORDER_" + snumstr] = str(self.__DelayReorder)
341  return tdict
342 
343 #**********************************************************************
344 # class Bands
345 #**********************************************************************
346 class Bands(object):
347  def __init__(self):
348  self.__LeftBands = (
349  BandSettings(1, True), BandSettings(2, True), BandSettings(3, True),
350  BandSettings(4, True), BandSettings(5, True))
351 
352  self.__RightBands = (
353  BandSettings(1, False), BandSettings(2, False), BandSettings(3, False),
354  BandSettings(4, False), BandSettings(5, False))
355 
356  def GetLeftBand(self, bnum):
357  if (bnum < 1) or (bnum > 5):
358  raise MiniMaxClientException, "Band number must be in in range 1..5"
359  return self.__LeftBands[bnum-1]
360 
361  def GetRightBand(self, bnum):
362  if (bnum < 1) or (bnum > 5):
363  raise MiniMaxClientException, "Band number must be in in range 1..5"
364  return self.__RightBands[bnum-1]
365 
366  def GetBand(self, bnum, leftflag):
367  if (bnum < 1) or (bnum > 5):
368  raise MiniMaxClientException, "Band number must be in in range 1..5"
369  if leftflag:
370  return self.__LeftBands[bnum-1]
371  return self.__RightBands[bnum-1]
372 
373  def Validate(self):
374  for bnd in self.__LeftBands:
375  if not bnd.Validate():
376  return False
377  for bnd in self.__RightBands:
378  if not bnd.Validate():
379  return False
380  return True
381 
382  def SetDefaults(self):
383  for bnd in self.__LeftBands:
384  bnd.SetDefaults()
385  for bnd in self.__RightBands:
386  bnd.SetDefaults()
387 
388  def SetBandToDefaults(self, bnum, leftflag):
389  self.GetBand(bnum, leftflag).SetDefaults()
390 
391  def SetDelayAmount(self, bnum, leftflag, val):
392  self.GetBand(bnum, leftflag).SetDelayAmount(val)
393 
394  def SetDelayVariation(self, bnum, leftflag, val):
395  self.GetBand(bnum, leftflag).SetDelayVariation(val)
396 
397  def SetDelayCorrelation(self, bnum, leftflag, val):
398  self.GetBand(bnum, leftflag).SetDelayCorrelation(val)
399 
400  def SetDelayDistribution(self, bnum, leftflag, val):
401  self.GetBand(bnum, leftflag).SetDelayDistribution(val)
402 
403  def SetDelayReorder(self, bnum, leftflag, val):
404  self.GetBand(bnum, leftflag).SetDelayReorder(val)
405 
406  def SetDropAmount(self, bnum, leftflag, val):
407  self.GetBand(bnum, leftflag).SetDropAmount(val)
408 
409  def SetDropCorrelation(self, bnum, leftflag, val):
410  self.GetBand(bnum, leftflag).SetDropCorrelation(val)
411 
412  def SetDupAmount(self, bnum, leftflag, val):
413  self.GetBand(bnum, leftflag).SetDupAmount(val)
414 
415  def SetDupCorrelation(self, bnum, leftflag, val):
416  self.GetBand(bnum, leftflag).SetDupCorrelation(val)
417 
418  def SetReorderGap(self, bnum, leftflag, val):
419  self.GetBand(bnum, leftflag).SetReorderGap(val)
420 
421  def SetReorderAmount(self, bnum, leftflag, val):
422  self.GetBand(bnum, leftflag).SetReorderAmount(val)
423 
424  def SetReorderCorrelation(self, bnum, leftflag, val):
425  self.GetBand(bnum, leftflag).SetReorderCorrelation(val)
426 
427  def SetCorruptionAmount(self, bnum, leftflag, val):
428  self.GetBand(bnum, leftflag).SetCorruptionAmount(val)
429 
430  def SetCorruptionCorrelation(self, bnum, leftflag, val):
431  self.GetBand(bnum, leftflag).SetCorruptionCorrelation(val)
432 
433  def SetRateLimit(self, bnum, leftflag, val):
434  self.GetBand(bnum, leftflag).SetRateLimit(val)
435 
436  def AsDict(self):
437  rdict = {}
438  for ndx in range(5):
439  rdict.update(self.__LeftBands[ndx].AsDict())
440  rdict.update(self.__RightBands[ndx].AsDict())
441  return rdict
442 
443 #**********************************************************************
444 # GetCurrentBands()
445 #**********************************************************************
446 def GetCurrentBands(mm2name):
447  """
448  Construct a Bands object using the current configuration on
449  a named Mini Maxwell
450  """
451  bnds = Bands()
452 
453  current = GetMM2Config(mm2name)
454  full_config = current[2]
455  # Left column (LAN-A to LAN-B)
456  downstream_impairs = full_config["downstream_impairments"]
457  # Right column (LAN-B to LAN-A)
458  upstream_impairs = full_config["upstream_impairments"]
459 
460  bnum = 1
461  for itm in downstream_impairs:
462  bnd = bnds.GetLeftBand(bnum)
463  for imp in itm.items():
464  bnd.SetByCnfigName(imp[0], imp[1])
465  bnum += 1
466 
467  bnum = 1
468  for itm in upstream_impairs:
469  bnd = bnds.GetRightBand(bnum)
470  for imp in itm.items():
471  bnd.SetByCnfigName(imp[0], imp[1])
472  bnum += 1
473 
474  return bnds
475 
476 #**********************************************************************
477 # ChangeBandsOnMM()
478 #**********************************************************************
479 def ChangeBandsOnMM(bandsobj, mm2host):
480  """
481  @param bandsobj: A Bands object containing the desired impairment settings.
482  @type bandsobj: Bands
483  @param mm2host: The hostname or IP address of the Mini Maxwell.
484  @type mm2host: string
485  """
486 
487  bandsobj.Validate()
488 
489  conn = httplib.HTTPConnection(mm2host)
490  bdict = bandsobj.AsDict()
491  bdict["SUBMIT_FLOWIMPAIR_BUTTON"] = "Submit"
492  params = urllib.urlencode(bdict)
493  headers = {"Content-type": "application/x-www-form-urlencoded",
494  "Accept": "text/plain"}
495  conn.request("POST", "/mm2/mpc/mm2.py/process_flows", params, headers)
496  resp = conn.getresponse()
497 
498  if (resp.status/100) != 2:
499  raise Exception,resp.reason
500  data = resp.read()
501  conn.close()
502  return
503 
504 #**********************************************************************
505 # Entry point for command line invocation
506 #**********************************************************************
507 if __name__ == "__main__":
508 
509  if len(sys.argv) != 2:
510  print "Usage: %s <minimaxwell-hostname-or-ip-address>" % sys.argv[0]
511  print "Aborting"
512  sys.exit(1)
513 
514  mm2name = sys.argv[1]
515 
516  #************************************************************
517  # Update the existing impairments.
518  # if the Mini Maxwell is a Revision 12 unit than only the
519  # values set below will be altered in the Mini Maxwell
520  # For revision 11 units values not set below will be set
521  # to their default values.
522  #
523  # WARNING - Reading the existing configuration via JSON
524  # is only on Mini Maxwell Revisions 12 or higher.
525  #
526  # Most Revision 11 Mini Maxwells may be field upgraded to
527  # Revision 12.
528  #
529  # For new Mini Maxwells the revision is 12.
530  # To learn the revision number, look on the home page of
531  # the Mini Maxwell. On the top line there is a number
532  # that looks something like this: "v2.0/12", "v1.0/11",
533  # "v2.0/11" or "v1.0/11". The important number is the one
534  # after the slash ('/') character. That number is the
535  # revision number.
536  #************************************************************
537 
538  # CHANGE THE FOLLOWING AS APPRORIATE FOR YOUR UNIT
539  MM_REV = 12
540 
541  if MM_REV >= 12:
542  # Read the current settings from the Mini Maxwell
543  try:
544  bnds = GetCurrentBands(mm2name)
545  except:
546  bnds = Bands()
547 
548  else: # MM_REV < 12
549  #************************************************************
550  # For Rev 11 Mini Maxwells:
551  # The following code can be used to establish a new set of
552  # impairment settings.
553  # Values not set below will be set to the default value.
554  #************************************************************
555  bnds = Bands()
556 
557 
558  #**************************************************
559  # locally modify those settings
560  # (This is local -- the Mini Maxwell is not affected)
561  #
562  # What happens to values not set below depends on the
563  # Mini Maxwell revision as described above.
564  #**************************************************
565 
566  # Use bnds.SetDefaults() to clear all settings on all bands to the default values.
567  # Use bnds.SetBandToDefaults(band_number, left_right_flag) to clear a given
568  # band (left or right side) to its default values.
569  # Alternatively one can create a new Bands object which will contain the
570  # default settings by saying:
571  # bnds = Bands()
572 
573  # In the methods below these are the parameters:
574  # Band number (1..5)
575  # Left column (LAN-A to LAN-B): True, else False
576  # The value to be set
577  # bnds.SetDelayAmount(band_number, left_right_flag, value)
578  # bnds.SetDelayVariation(band_number, left_right_flag, value)
579  # bnds.SetDelayCorrelation(band_number, left_right_flag, value)
580  # bnds.SetDelayDistribution(band_number, left_right_flag, value)
581  # bnds.SetDelayReorder(band_number, left_right_flag, booleanvalue)
582  # bnds.SetDropAmount(band_number, left_right_flag, value)
583  # bnds.SetDropCorrelation(band_number, left_right_flag, value)
584  # bnds.SetDupAmount(band_number, left_right_flag, value)
585  # bnds.SetDupCorrelation(band_number, left_right_flag, value)
586  # bnds.SetReorderGap(band_number, left_right_flag, value)
587  # bnds.SetReorderAmount(band_number, left_right_flag, value)
588  # bnds.SetReorderCorrelation(band_number, left_right_flag, value)
589  # bnds.SetCorruptionAmount(band_number, left_right_flag, value)
590  # bnds.SetCorruptionCorrelation(band_number, left_right_flag, value)
591  # bnds.SetRateLimit(band_number, left_right_flag, value)
592 
593  #bnds.SetDelayAmount(1, True, 119)
594  #bnds.SetCorruptionAmount(5, True, 89)
595  #bnds.SetCorruptionAmount(5, False, 56)
596  #bnds.SetDelayDistribution(5, True, "paretonormal")
597  #bnds.SetDelayDistribution(5, False, "pareto")
598  #bnds.SetDelayDistribution(5, True, "normal")
599  #bnds.SetDelayDistribution(5, False, "none")
600 
601  bnds.SetDelayAmount(5, True, 100)
602  bnds.SetDelayVariation(5, True, 10)
603  bnds.SetDelayReorder(5, True, True)
604  bnds.SetDelayReorder(5, False, False)
605 
606  #**************************************************
607  # Inject the updated settings into the Mini Maxwell
608  #**************************************************
609  ChangeBandsOnMM(bnds, mm2name)
def GetRightBand(self, bnum)
Definition: mm2client.py:361
def SetByCnfigName(self, name, val)
Definition: mm2client.py:307
def SetDropAmount(self, val)
Definition: mm2client.py:256
def Validate(self)
Definition: mm2client.py:373
def SetCorruptionCorrelation(self, val)
Definition: mm2client.py:296
def SetRateLimit(self, val)
Definition: mm2client.py:301
def __init__(self)
Definition: mm2client.py:347
def SetDupAmount(self, val)
Definition: mm2client.py:266
def DropCorrelation(self)
Definition: mm2client.py:167
def DelayDistribution(self)
Definition: mm2client.py:155
def SetDelayCorrelation(self, bnum, leftflag, val)
Definition: mm2client.py:397
def CorruptionAmount(self)
Definition: mm2client.py:191
def SetReorderCorrelation(self, val)
Definition: mm2client.py:286
def SetDupCorrelation(self, bnum, leftflag, val)
Definition: mm2client.py:415
def SetCorruptionAmount(self, val)
Definition: mm2client.py:291
def SetDelayAmount(self, bnum, leftflag, val)
Definition: mm2client.py:391
def GetMM2Config(mm2name)
Definition: mm2client.py:79
def GetLeftBand(self, bnum)
Definition: mm2client.py:356
def ReorderCorrelation(self)
Definition: mm2client.py:187
def SetDropAmount(self, bnum, leftflag, val)
Definition: mm2client.py:406
def CorruptionCorrelation(self)
Definition: mm2client.py:195
def GetBand(self, bnum, leftflag)
Definition: mm2client.py:366
def DupCorrelation(self)
Definition: mm2client.py:175
def SetDelayDistribution(self, val)
Definition: mm2client.py:246
def AsDict(self)
Definition: mm2client.py:436
def SetDupAmount(self, bnum, leftflag, val)
Definition: mm2client.py:412
def SetDelayReorder(self, bnum, leftflag, val)
Definition: mm2client.py:403
def GetMM2ConfigInJson(mm2name)
Definition: mm2client.py:48
def SetReorderGap(self, bnum, leftflag, val)
Definition: mm2client.py:418
def __init__(self, bandnumber, leftflag)
Definition: mm2client.py:112
def SetDelayVariation(self, bnum, leftflag, val)
Definition: mm2client.py:394
def SetDropCorrelation(self, val)
Definition: mm2client.py:261
def SetDelayCorrelation(self, val)
Definition: mm2client.py:241
def SetReorderAmount(self, val)
Definition: mm2client.py:281
def SetReorderAmount(self, bnum, leftflag, val)
Definition: mm2client.py:421
def ChangeBandsOnMM(bandsobj, mm2host)
Definition: mm2client.py:479
def SetDropCorrelation(self, bnum, leftflag, val)
Definition: mm2client.py:409
def SetCorruptionCorrelation(self, bnum, leftflag, val)
Definition: mm2client.py:430
def SetCorruptionAmount(self, bnum, leftflag, val)
Definition: mm2client.py:427
def SetDelayDistribution(self, bnum, leftflag, val)
Definition: mm2client.py:400
def DelayVariation(self)
Definition: mm2client.py:147
def SetBandToDefaults(self, bnum, leftflag)
Definition: mm2client.py:388
def SetDelayReorder(self, val)
Definition: mm2client.py:253
def DelayCorrelation(self)
Definition: mm2client.py:151
def SetDefaults(self)
Definition: mm2client.py:382
def ReorderAmount(self)
Definition: mm2client.py:183
def SetDelayAmount(self, val)
Definition: mm2client.py:231
def SetDelayVariation(self, val)
Definition: mm2client.py:236
def SetReorderCorrelation(self, bnum, leftflag, val)
Definition: mm2client.py:424
def GetCurrentBands(mm2name)
Definition: mm2client.py:446
def SetDupCorrelation(self, val)
Definition: mm2client.py:271
def SetRateLimit(self, bnum, leftflag, val)
Definition: mm2client.py:433
def SetReorderGap(self, val)
Definition: mm2client.py:276
def DelayReorder(self)
Definition: mm2client.py:159


mini_maxwell
Author(s): Yusuke Furuta
autogenerated on Wed Jul 10 2019 03:47:09