Exemple #1
0
def listRange2ListPrefix(listRange,fieldRange):
    '''
    Convert a range list to prefix list.
    
    Algorithm: generate a prefix rule list based on the range list, and convert
    it to PMTree, and fetch the entries in the range list from the
    tree.
    
    Examples:
    >>> listPrefix=listRange2ListPrefix([(0,4),(10,12)],(0,15))
    >>> print listPrefix
    ['00**', '0100', '101*', '1100']
    >>> print listRange2ListPrefix([(8,8),(10,11)],(0,15))
    ['1000', '101*']
    '''
    
    #sanity check range
    l,h=fieldRange
    assert(l==0)
    nBit=int(math.log(h+1,2))
    assert(2**nBit-1==h)    

    #generate prefix rule list
    listFat=[]
    for r in listRange:
        appendRuleToRangeRuleList(listFat,r,'y')
    appendRuleToRangeRuleList(listFat,fieldRange,'n')    
    #generate tree
    tree=PMTree(listFat,True,fieldRange)
    #saveSvgFile(tree.getDotCode(),'../output/tree.svg',True)
    
    #get node with 'y' label
    ly= tree.fetch('y')

    #fill in last bits by '*' in ly
    lz=[]
    for y in ly:
        lz.append(y+(nBit-len(y))*'*')
    
    return lz
Exemple #2
0
listPrefixRule=[{'prefix': '00*', 'decision': 'permit'}, {'prefix': '01*', 'decision': 'deny'}, {'prefix': '10*', 'decision': 'permit'}, {'prefix': '11*', 'decision': 'deny'}]
#listPrefixRule=[{'prefix': '101***', 'decision': 'permit'}, {'prefix': '0*****', 'decision': 'permit'}, {'prefix': '******', 'decision': 'deny'}]
#listPrefixRule=[{'prefix': '******', 'decision': 'deny'}, {'prefix': '101***', 'decision': 'permit'}, {'prefix': '0*****', 'decision': 'permit'}]
#listPrefixRule=[{'prefix': '101***', 'decision': 'deny'}, {'prefix': '0*****', 'decision': 'permit'}, {'prefix': '******', 'decision': 'deny'}]
#listPrefixRule=[{'prefix': '0101**', 'decision': 'deny'}, {'prefix': '1**', 'decision': 'deny'}, {'prefix': '0***', 'decision': 'deny'}]
#listPrefixRule=[{'prefix': '0101**', 'decision': 'deny'}, {'prefix': '0100**', 'decision': 'deny'}, {'prefix': '1**', 'decision': 'deny'}, {'prefix': '0***', 'decision': 'permit'}]
#listPrefixRule=[{'prefix': '00', 'decision': 'permit'}, {'prefix': '01', 'decision': 'deny'}, {'prefix': '10', 'decision': 'permit'}, {'prefix': '11', 'decision': 'permit'}]

#Not a classifier (rule set is not complete):
#listPrefixRule=[{'prefix': '101***', 'decision': 'permit'}, {'prefix': '0*****', 'decision': 'permit'}]

#dictDecisionWeight={'deny':100,'permit':1}
#==============================================================================

print 'Generate prefix match tree...'
tree=PMTree(listPrefixRule)#prefix matching tree
print tree
saveSvgFile(tree.getDotCode(),'../output/main01.svg',False)

print '\nCheck if prefix is in rule list...'
prefix='1*'
#prefix='00001010001110000100100000100011'
#prefix='110000011011110001111101010100**'
#prefix='1100000110111100011111**********'
if tree.isConsistentIn(prefix)[0]:
    print prefix+' is consistent in:'
    print listPrefixRule
else:
    print prefix+' is NOT consistent in:'
    print listPrefixRule