def tomac(s): try: mac = MACAddress(int(s)) except: try: mac = MACAddress(s) except: print "%s is an invalid MAC address" % s sys.exit(1) return mac
def parseMac(mac): if mac == 'B': return MACAddress.createBroadcast() try: return MACAddress(int(mac)) except: pass try: return MACAddress(mac) except: pass return None
def getHostParams(self,name): index = self.hostID self.hostID += 1 mininetName = "h" + str(index) self.mininetToRealNames[mininetName] = name ip = self.network['ip'] + "." + str(index) + self.network['netmask'] return {'mininetName' : mininetName, 'ip' : ip, 'mac' : MACAddress(index)}
def deserialize(obj): mat = MAT(obj['vid']) mat.props['hid'] = obj['hid'] for (hid, mac) in obj['mac'].items(): # Note: json file can only use str as key # so we need to transfer hid back to int first mat.props['mac'][int(hid)] = MACAddress(mac) return mat
def __init__(self, vid): super(MAT, self).__init__(name='MAT[%d]' % vid) self.props['vid'] = vid self.props['hid'] = {} # [str(mac)] = hid self.props['mac'] = {} # [hid] = mac self.props['lock'] = threading.Lock() self.props['mac'][0xFFFF] = MACAddress("FF:FF:FF:FF:FF:FF") self.props['hid']['FF:FF:FF:FF:FF:FF'] = 0xFFFF
def translate(self, mac): if not str(mac) in self.props['hid']: with self.props['lock']: if not str(mac) in self.props['hid']: hid = random.randint(1, MAT.reserved) while hid in self.props['mac']: hid = random.randint(1, MAT.reserved) self.props['hid'][str(mac)] = hid self.props['mac'][hid] = mac trans_mac = MACAddress() trans_mac.setVid(self.props['vid']) hid = self.props['hid'][str(mac)] trans_mac.setHid(hid) if hid > MAT.reserved: # broadcast MAC address trans_mac.data[0] = 0xFF return trans_mac
def reverse(self, hid): if not hid in self.props['mac']: return None return MACAddress(self.props['mac'][hid])