Exemplo n.º 1
0
 def adminRebuildFlowvisorCache (self):
   try:
     FV.rebuildCache()
     return jsonify(None)
   except Exception, e:
     self._log.exception("Exception")
     return jsonify(None, code = 2, msg  = traceback.format_exc())
Exemplo n.º 2
0
def getAdvertisement ():
  NSMAP = {None: "%s" % (PGNS),
          "xs" : "%s" % (XSNS),
          "openflow" : "%s" % (OFNSv3)}

  rspec = ET.Element("rspec", nsmap = NSMAP)
  rspec.attrib["{%s}schemaLocation" % (XSNS)] = PGNS + " " \
              "http://www.geni.net/resources/rspec/3/ad.xsd " + \
              OFNSv3 + " " \
              "http://www.geni.net/resources/rspec/ext/openflow/3/of-ad.xsd"
  rspec.attrib["type"] = "advertisement"

  links = FV.getLinkList()
  devices = FV.getDeviceList()
  fvversion = FV.getFVVersion()
  db_devices = GeniDB.getDeviceSet()
  GeniDB.refreshDevices(devices)

  for dpid in devices:
    db_devices.discard(dpid)
    addAdDevice(rspec, dpid)

  for dpid in db_devices:
    addAdDevice(rspec, dpid, False)
 
#getLinks START    
  for link in links:
    addAdLink(rspec, link)
#getLinks END 
    
  xml = StringIO()
  ET.ElementTree(rspec).write(xml)
  return xml.getvalue()
Exemplo n.º 3
0
def deleteSliver (slice_urn = None, sliver_urn = None):
  slice_name = GeniDB.getFlowvisorSliceName(slice_urn=slice_urn, sliver_urn = sliver_urn)
  if FV.sliceExists(slice_name):
#    stats = FV.getCombinedStats(slice_name)
#    GeniDB.insertFinalStats(slice_urn, stats)
    FV.deleteSlice(slice_name)
  GeniDB.deleteSliver(slice_urn=slice_urn, sliver_urn=sliver_urn)
  foam.geni.approval.rebuildDB()
Exemplo n.º 4
0
def deleteSliver(slice_urn=None, sliver_urn=None):
    slice_name = GeniDB.getFlowvisorSliceName(slice_urn=slice_urn,
                                              sliver_urn=sliver_urn)
    if FV.sliceExists(slice_name):
        #    stats = FV.getCombinedStats(slice_name)
        #    GeniDB.insertFinalStats(slice_urn, stats)
        FV.deleteSlice(slice_name)
    GeniDB.deleteSliver(slice_urn=slice_urn, sliver_urn=sliver_urn)
    foam.geni.approval.rebuildDB()
Exemplo n.º 5
0
 def pub_get_switches(self, **kwargs):
   '''
   Return the switches that the FlowVisor gives. Change to CH format.
   '''
   complete_list = []
   try:
     dpids = FV.getDeviceList()
     for d in dpids:
       FV.log.debug("XMLRPC:getDeviceInfo (%s)" % (d))
     infos = [FV.xmlcall("getDeviceInfo", d) for d in dpids] #need to make it prettier :)
     switches = zip(dpids, infos)
   except Exception,e:
     import traceback
     traceback.print_exc()
     raise e 
 def pub_get_switches(self, **kwargs):
     '''
 Return the switches that the FlowVisor gives. Change to CH format.
 '''
     complete_list = []
     try:
         dpids = FV.getDeviceList()
         for d in dpids:
             FV.log.debug("XMLRPC:getDeviceInfo (%s)" % (d))
         infos = [FV.xmlcall("getDeviceInfo", d)
                  for d in dpids]  #need to make it prettier :)
         switches = zip(dpids, infos)
     except Exception, e:
         import traceback
         traceback.print_exc()
         raise e
Exemplo n.º 7
0
def addAdDevice (rspec, dpid, active=True):
  switch_urn = generateSwitchComponentID(dpid)

  od = ET.SubElement(rspec, "{%s}datapath" % (OFNSv3))
  od.attrib["component_id"] = switch_urn
  od.attrib["component_manager_id"] = getManagerID()
  od.attrib["dpid"] = dpid

  locdata = GeniDB.getLocationData(dpid, switch_urn)
  if locdata:
    ET.SubElement(od, "{%s}location" % (OFNSv3), country=locdata.country, latitude=locdata.lat, longitude=locdata.long)

  attachments = TopoDB.getDPIDAttachments(dpid)

  if active:
    ports = FV.getDevicePorts(dpid)
    for port in ports:
      if (port.features == None):
        p = ET.SubElement(od, "{%s}port" % (OFNSv3), num=str(port.num), name=port.name)
      else:
        p = ET.SubElement(od, "{%s}port" % (OFNSv3), num=str(port.num), name=port.name, features=port.features)
      for info in attachments.setdefault(port.name, []):
        a = ET.SubElement(p, "{%s}attachment" % (OFNSv3))
        a.attrib["remote_component_id"] = info.remote_component_id
        a.attrib["remote_port"] = info.remote_port
        a.attrib["desc"] = info.desc
Exemplo n.º 8
0
def approveSliver (request, logger):
  try:
    jsonValidate(request.json, [("sliver_urn", (unicode,str)), ("priority", int)], logger)

    if (not request.json.has_key("sliver_urn")) or (not request.json.has_key("priority")):
      return jsonify({"exception" : "You must specify a sliver_urn and priority"})
    slice_name = GeniDB.getFlowvisorSliceName(sliver_urn=request.json["sliver_urn"])
    if FV.sliceExists(slice_name):
      return jsonify({"Fault" : "Flowvisor slice '%s' already exists" % (slice_name)})

    sobj = GeniDB.getSliverObj(request.json["sliver_urn"])
    GeniDB.setSliverStatus(request.json["sliver_urn"], True)
    GeniDB.setSliverPriority(request.json["sliver_urn"], request.json["priority"])

    GeniDB.commit()

    foam.geni.approval.AppData.addSliver(sobj)

    sobj.createSlice()
    sobj.insertFlowspace(request.json["priority"])
    sobj.insertVirtualLink()

    data = GeniDB.getSliverData(sobj.getURN(), True)
    foam.task.emailApproveSliver(data)

    return jsonify(None)
  except JSONValidationError, e:
    jd = e.__json__()
    return jsonify(jd, code = 1, msg = jd["exception"])
Exemplo n.º 9
0
def getSliverStatus(sliver_urn):
    try:
        slice_name = GeniDB.getFlowvisorSliceName(sliver_urn=sliver_urn)
        if FV.sliceExists(slice_name):
            return "ready"
        else:
            return "configuring"
    except Exception, e:
        return "failed"
Exemplo n.º 10
0
def getSliverStatus (sliver_urn):
  try:
    slice_name = GeniDB.getFlowvisorSliceName(sliver_urn=sliver_urn)
    if FV.sliceExists(slice_name):
      return "ready"
    else:
      return "configuring"
  except Exception, e:
    return "failed"
Exemplo n.º 11
0
Arquivo: db.py Projeto: HalasNet/felix
  def getEnabled (self, sliver_urn, deleted = False):
    from foam.flowvisor import Connection as FV

    s = select([slivers], and_(slivers.c.sliver_urn==sliver_urn, slivers.c.deleted==deleted))
    conn = self.connection()
    result = conn.execute(s)
    row = result.first()
    if not row:
      raise UnknownSliver(sliver_urn)
    return FV.sliceExists(row[slivers.c.fvslicename])
Exemplo n.º 12
0
  def rejectSliver (self):
    if not request.json:
      return
    try:
      self.validate(request.json, [("sliver_urn", (unicode,str))])
      slice_name = GeniDB.getFlowvisorSliceName(sliver_urn=request.json["sliver_urn"])
      sobj = GeniDB.getSliverObj(request.json["sliver_urn"])

      data = GeniDB.getSliverData(sobj.getURN(), True)

      GeniDB.setSliverStatus(request.json["sliver_urn"], False)
      if FV.sliceExists(slice_name):
        FV.deleteSlice(slice_name)

      foam.task.emailRejectSliver(data)

      return jsonify(None)
    except JSONValidationError, e:
      jd = e.__json__()
      return jsonify(jd, code = 1, msg = jd["exception"])
Exemplo n.º 13
0
    def getEnabled(self, sliver_urn, deleted=False):
        from foam.flowvisor import Connection as FV

        s = select([slivers],
                   and_(slivers.c.sliver_urn == sliver_urn,
                        slivers.c.deleted == deleted))
        conn = self.connection()
        result = conn.execute(s)
        row = result.first()
        if not row:
            raise UnknownSliver(sliver_urn)
        return FV.sliceExists(row[slivers.c.fvslicename])
 def pub_get_links(self, **kwargs):
     '''
 Return the links that the FlowVisor gives. Change to CH format.
 '''
     complete_list = []
     try:
         links = [(l.pop("srcDPID"), l.pop("srcPort"), l.pop("dstDPID"),
                   l.pop("dstPort"), l) for l in FV.getLinkList()]
     except Exception, e:
         import traceback
         traceback.print_exc()
         raise e
Exemplo n.º 15
0
 def pub_ping(self, data, **kwargs):
   if (FV.xmlconn is None):
     self._log.exception("No xlmlrpc connection with Flowvisor detected")
     raise Exception("No xlmlrpc connection with Flowvisor detected")
   self.check_topo_change() #repeat on ping
   try:   
     FV.log.debug("XMLRPC:ping (%s)" % (str(data)))
     return FV.xmlcall("ping", " " + str(data)) #this will return a PONG is everything alright
   except Exception, e:
     import traceback
     traceback.print_exc()
     raise e
Exemplo n.º 16
0
def getAdvertisement():
    NSMAP = {
        None: "%s" % (PGNS),
        "xs": "%s" % (XSNS),
        "openflow": "%s" % (OFNSv3)
    }

    rspec = ET.Element("rspec", nsmap=NSMAP)
    rspec.attrib["{%s}schemaLocation" % (XSNS)] = PGNS + " " \
                "http://www.geni.net/resources/rspec/3/ad.xsd " + \
                OFNSv3 + " " \
                "http://www.geni.net/resources/rspec/ext/openflow/3/of-ad.xsd"
    rspec.attrib["type"] = "advertisement"

    links = FV.getLinkList()
    devices = FV.getDeviceList()
    fvversion = FV.getFVVersion()
    db_devices = GeniDB.getDeviceSet()
    GeniDB.refreshDevices(devices)

    for dpid in devices:
        db_devices.discard(dpid)
        addAdDevice(rspec, dpid)

    for dpid in db_devices:
        addAdDevice(rspec, dpid, False)

#getLinks START
    for link in links:
        addAdLink(rspec, link)


#getLinks END

    xml = StringIO()
    ET.ElementTree(rspec).write(xml)
    return xml.getvalue()
Exemplo n.º 17
0
 def pub_get_links(self, **kwargs):
   '''
   Return the links that the FlowVisor gives. Change to CH format.
   '''
   complete_list = []
   try:
     links = [(l.pop("srcDPID"),
               l.pop("srcPort"),
               l.pop("dstDPID"),
               l.pop("dstPort"),
               l) for l in FV.getLinkList()]
   except Exception,e:
     import traceback
     traceback.print_exc()
     raise e 
 def pub_ping(self, data, **kwargs):
     if (FV.xmlconn is None):
         self._log.exception(
             "No xlmlrpc connection with Flowvisor detected")
         raise Exception("No xlmlrpc connection with Flowvisor detected")
     self.check_topo_change()  #repeat on ping
     try:
         FV.log.debug("XMLRPC:ping (%s)" % (str(data)))
         return FV.xmlcall(
             "ping", " " +
             str(data))  #this will return a PONG is everything alright
     except Exception, e:
         import traceback
         traceback.print_exc()
         raise e
Exemplo n.º 19
0
Arquivo: db.py Projeto: HalasNet/felix
  def makeSliverDataDict (self, row, include_obj = True):
    from foam.flowvisor import Connection as FV
    data = {"id" : row[slivers.c.id], "slice_urn" : row[slivers.c.slice_urn],
      "sliver_urn" : row[slivers.c.sliver_urn], "flowvisor_slice" : row[slivers.c.fvslicename],
      "enabled" : FV.sliceExists(row[slivers.c.fvslicename]),
      "expiration" : str(row[slivers.c.expiration]),
      "creation" : str(row[slivers.c.creation]),
      "status" : self.xlateSliverStatus(row[slivers.c.status]),
      "deleted" : str(row[slivers.c.deleted])}

    if include_obj:
      slobj = row[slivers.c.parsed_obj]
      if slobj:  # Imported slivers don't have sliver objs
        objdata = slobj.getDataDict(False)
        data.update(objdata)
    return data
Exemplo n.º 20
0
Arquivo: db.py Projeto: HalasNet/felix
  def refreshDevices (self, devices = None):
    from foam.flowvisor import Connection as FV

    if devices is None:
      devices = FV.getDeviceList()

    for dpid in devices:
      dpid = dpid.lower()
      s = select([datapaths], datapaths.c.dpid==dpid)
      conn = self.connection()
      result = conn.execute(s)
      row = result.first()
      if not row:
        switch_urn = generateSwitchComponentID(dpid)
        ins = datapaths.insert().values(dpid=dpid,urn=switch_urn.lower())
        conn.execute(ins)
        self.commit()
Exemplo n.º 21
0
    def refreshDevices(self, devices=None):
        from foam.flowvisor import Connection as FV

        if devices is None:
            devices = FV.getDeviceList()

        for dpid in devices:
            dpid = dpid.lower()
            s = select([datapaths], datapaths.c.dpid == dpid)
            conn = self.connection()
            result = conn.execute(s)
            row = result.first()
            if not row:
                switch_urn = generateSwitchComponentID(dpid)
                ins = datapaths.insert().values(dpid=dpid,
                                                urn=switch_urn.lower())
                conn.execute(ins)
                self.commit()
Exemplo n.º 22
0
def addAdDevice (rspec, dpid, active=True):
  switch_urn = generateSwitchComponentID(dpid)

  od = ET.SubElement(rspec, "{%s}datapath" % (OFNSv3))
  od.attrib["component_id"] = switch_urn
  od.attrib["component_manager_id"] = "urn:publicid:IDN+foam:%s+authority+am" % ('ocf.ofelia.i2cat.ofam')
  od.attrib["dpid"] = dpid

  #locdata = GeniDB.getLocationData(dpid, switch_urn)
  #if locdata:
  #  ET.SubElement(od, "{%s}location" % (OFNSv3), country=locdata.country, latitude=locdata.lat, longitude=locdata.long)

  #attachments = TopoDB.getDPIDAttachments(dpid)

  if active:
    ports = FV.getDevicePorts(dpid)
    for port in ports:
      p = ET.SubElement(od, "{%s}port" % (OFNSv3), num=str(port.num), name=port.name)
Exemplo n.º 23
0
    def makeSliverDataDict(self, row, include_obj=True):
        from foam.flowvisor import Connection as FV
        data = {
            "id": row[slivers.c.id],
            "slice_urn": row[slivers.c.slice_urn],
            "sliver_urn": row[slivers.c.sliver_urn],
            "flowvisor_slice": row[slivers.c.fvslicename],
            "enabled": FV.sliceExists(row[slivers.c.fvslicename]),
            "expiration": str(row[slivers.c.expiration]),
            "creation": str(row[slivers.c.creation]),
            "status": self.xlateSliverStatus(row[slivers.c.status]),
            "deleted": str(row[slivers.c.deleted])
        }

        if include_obj:
            slobj = row[slivers.c.parsed_obj]
            if slobj:  # Imported slivers don't have sliver objs
                objdata = slobj.getDataDict(False)
                data.update(objdata)
        return data
Exemplo n.º 24
0
def addAdDevice(rspec, dpid, active=True):
    switch_urn = generateSwitchComponentID(dpid)

    od = ET.SubElement(rspec, "{%s}datapath" % (OFNSv3))
    od.attrib["component_id"] = switch_urn
    od.attrib[
        "component_manager_id"] = "urn:publicid:IDN+foam:%s+authority+am" % (
            'ocf.ofelia.i2cat.ofam')
    od.attrib["dpid"] = dpid

    #locdata = GeniDB.getLocationData(dpid, switch_urn)
    #if locdata:
    #  ET.SubElement(od, "{%s}location" % (OFNSv3), country=locdata.country, latitude=locdata.lat, longitude=locdata.long)

    #attachments = TopoDB.getDPIDAttachments(dpid)

    if active:
        ports = FV.getDevicePorts(dpid)
        for port in ports:
            p = ET.SubElement(od,
                              "{%s}port" % (OFNSv3),
                              num=str(port.num),
                              name=port.name)
Exemplo n.º 25
0
def addAdDevice(rspec, dpid, active=True):
    switch_urn = generateSwitchComponentID(dpid)

    od = ET.SubElement(rspec, "{%s}datapath" % (OFNSv3))
    od.attrib["component_id"] = switch_urn
    od.attrib["component_manager_id"] = getManagerID()
    od.attrib["dpid"] = dpid

    locdata = GeniDB.getLocationData(dpid, switch_urn)
    if locdata:
        ET.SubElement(od,
                      "{%s}location" % (OFNSv3),
                      country=locdata.country,
                      latitude=locdata.lat,
                      longitude=locdata.long)

    attachments = TopoDB.getDPIDAttachments(dpid)

    if active:
        ports = FV.getDevicePorts(dpid)
        for port in ports:
            if (port.features == None):
                p = ET.SubElement(od,
                                  "{%s}port" % (OFNSv3),
                                  num=str(port.num),
                                  name=port.name)
            else:
                p = ET.SubElement(od,
                                  "{%s}port" % (OFNSv3),
                                  num=str(port.num),
                                  name=port.name,
                                  features=port.features)
            for info in attachments.setdefault(port.name, []):
                a = ET.SubElement(p, "{%s}attachment" % (OFNSv3))
                a.attrib["remote_component_id"] = info.remote_component_id
                a.attrib["remote_port"] = info.remote_port
                a.attrib["desc"] = info.desc
Exemplo n.º 26
0
def approveSliver(request, logger):
    try:
        jsonValidate(request.json, [("sliver_urn", (unicode, str)),
                                    ("priority", int)], logger)

        if (not request.json.has_key("sliver_urn")) or (
                not request.json.has_key("priority")):
            return jsonify(
                {"exception": "You must specify a sliver_urn and priority"})
        slice_name = GeniDB.getFlowvisorSliceName(
            sliver_urn=request.json["sliver_urn"])
        if FV.sliceExists(slice_name):
            return jsonify({
                "Fault":
                "Flowvisor slice '%s' already exists" % (slice_name)
            })

        sobj = GeniDB.getSliverObj(request.json["sliver_urn"])
        GeniDB.setSliverStatus(request.json["sliver_urn"], True)
        GeniDB.setSliverPriority(request.json["sliver_urn"],
                                 request.json["priority"])

        GeniDB.commit()

        foam.geni.approval.AppData.addSliver(sobj)

        sobj.createSlice()
        sobj.insertFlowspace(request.json["priority"])
        sobj.insertVirtualLink()

        data = GeniDB.getSliverData(sobj.getURN(), True)
        foam.task.emailApproveSliver(data)

        return jsonify(None)
    except JSONValidationError, e:
        jd = e.__json__()
        return jsonify(jd, code=1, msg=jd["exception"])