blob: 1338703664c10dbbf852af2b5d5351eda1ec11bc [file] [log] [blame]
Zack Williams3dfe6af2016-04-30 11:37:09 -07001import hashlib
2import netaddr
3
4def genmac(value, prefix='', length=12):
5 '''
6 deterministically generates a "random" MAC with a configurable prefix
7 '''
8
9 # from: http://serverfault.com/questions/40712/what-range-of-mac-addresses-can-i-safely-use-for-my-virtual-machines
Zack Williams05c21722016-04-30 11:42:58 -070010 if prefix == '' :
Zack Williams3dfe6af2016-04-30 11:37:09 -070011 mac_prefix = "0ac04d" # random "cord"-esque
12
13 # deterministically generate a value
14 h = hashlib.new('sha1')
15 h.update(value)
16
17 # build/trim MAC
18 mac_string = (mac_prefix + h.hexdigest())[0:length]
19
20 return netaddr.EUI(mac_string)
21
22class FilterModule(object):
23 ''' MAC generation filter '''
24 filter_map = {
25 'genmac': genmac,
26 }
27
28 def filters(self):
29 return self.filter_map