X-Git-Url: https://osm.etsi.org/gitweb/?p=osm%2FRO.git;a=blobdiff_plain;f=RO-SDN-onos_openflow%2Fosm_rosdn_onosof%2Fonos_of.py;h=139f7a01042b14101a524d28c3f35cf9bd10d233;hp=060d1d3757f8d2213c40c7c94d7a133bc400cf7d;hb=69647795675df7357a9aeddaa5aba15c6f92b065;hpb=ed3e4d4fc2819e425bb8b165e43fcbac259d3f1b diff --git a/RO-SDN-onos_openflow/osm_rosdn_onosof/onos_of.py b/RO-SDN-onos_openflow/osm_rosdn_onosof/onos_of.py index 060d1d37..139f7a01 100644 --- a/RO-SDN-onos_openflow/osm_rosdn_onosof/onos_of.py +++ b/RO-SDN-onos_openflow/osm_rosdn_onosof/onos_of.py @@ -47,9 +47,9 @@ class OfConnOnos(OpenflowConn): """ def __init__(self, params): """ Constructor. - Params: dictionary with the following keys: + :param params: dictionary with the following keys: of_dpid: DPID to use for this controller ?? Does a controller have a dpid? - url: must be [http://HOST:PORT/ + of_url: must be [http://HOST:PORT/] of_user: user credentials, can be missing or None of_password: password credentials of_debug: debug level for logging. Default to ERROR @@ -69,7 +69,7 @@ class OfConnOnos(OpenflowConn): url = url + "/" self.url = url + "onos/v1/" - #internal variables + # internal variables self.name = "onosof" self.headers = {'content-type':'application/json','accept':'application/json',} @@ -87,8 +87,9 @@ class OfConnOnos(OpenflowConn): self.auth = self.auth.decode() self.headers['authorization'] = 'Basic ' + self.auth - self.logger = logging.getLogger('vim.OF.onos') - self.logger.setLevel( getattr(logging, params.get("of_debug", "ERROR")) ) + self.logger = logging.getLogger('openmano.sdnconn.onosof') + #self.logger.setLevel( getattr(logging, params.get("of_debug", "ERROR")) ) + self.logger.debug("onosof plugin initialized") self.ip_address = None def get_of_switches(self): @@ -163,7 +164,7 @@ class OfConnOnos(OpenflowConn): try: self.headers['content-type'] = 'text/plain' of_response = requests.get(self.url + "devices/" + self.id + "/ports", headers=self.headers) - error_text = "Openflow response %d: %s" % (of_response.status_code, of_response.text) + error_text = "Openflow response {}: {}".format(of_response.status_code, of_response.text) if of_response.status_code != 200: self.logger.warning("obtain_port_correspondence " + error_text) raise OpenflowConnUnexpectedResponse(error_text) @@ -219,7 +220,7 @@ class OfConnOnos(OpenflowConn): (vlan, None/int): for stripping/setting a vlan tag (out, port): send to this port switch: DPID, all - Raise a openflowconnUnexpectedResponse expection in case of failure + Raise a openflowconnUnexpectedResponse exception in case of failure """ try: @@ -234,7 +235,7 @@ class OfConnOnos(OpenflowConn): # The configured page does not exist if there are no rules installed. In that case we return an empty dict if of_response.status_code == 404: - return {} + return [] elif of_response.status_code != 200: self.logger.warning("get_of_rules " + error_text) @@ -251,8 +252,7 @@ class OfConnOnos(OpenflowConn): flow_list = info.get('flows') if flow_list is None: - return {} - + return [] if type(flow_list) is not list: self.logger.error( "get_of_rules. Unexpected response at 'flows', not a list: %s", @@ -260,7 +260,7 @@ class OfConnOnos(OpenflowConn): raise OpenflowConnUnexpectedResponse("Unexpected response at 'flows', not a list. " "Wrong version?") - rules = [] # Response list + rules = [] # Response list for flow in flow_list: if not ('id' in flow and 'selector' in flow and 'treatment' in flow and \ 'instructions' in flow['treatment'] and 'criteria' in \ @@ -332,15 +332,16 @@ class OfConnOnos(OpenflowConn): """ try: + self.logger.debug("del_flow: delete flow name {}".format(flow_name)) self.headers['content-type'] = None of_response = requests.delete(self.url + "flows/" + self.id + "/" + flow_name, headers=self.headers) - error_text = "Openflow response %d: %s" % (of_response.status_code, of_response.text) + error_text = "Openflow response {}: {}".format(of_response.status_code, of_response.text) if of_response.status_code != 204: self.logger.warning("del_flow " + error_text) raise OpenflowConnUnexpectedResponse(error_text) - self.logger.debug("del_flow OK " + error_text) + self.logger.debug("del_flow: {} OK,: {} ".format(flow_name, error_text)) return None except requests.exceptions.RequestException as e: @@ -360,9 +361,10 @@ class OfConnOnos(OpenflowConn): actions: list of actions, composed by a pair tuples with these posibilities: ('vlan', None/int): for stripping/setting a vlan tag ('out', port): send to this port - :return: Raise a openflowconnUnexpectedResponse expection in case of failure + :return: Raise a openflowconnUnexpectedResponse exception in case of failure """ try: + self.logger.debug("new_flow data: {}".format(data)) if len(self.pp2ofi) == 0: self.obtain_port_correspondence() @@ -430,9 +432,10 @@ class OfConnOnos(OpenflowConn): self.headers['content-type'] = 'application/json' path = self.url + "flows/" + self.id + self.logger.debug("new_flow post: {}".format(flow)) of_response = requests.post(path, headers=self.headers, data=json.dumps(flow) ) - error_text = "Openflow response %d: %s" % (of_response.status_code, of_response.text) + error_text = "Openflow response {}: {}".format(of_response.status_code, of_response.text) if of_response.status_code != 201: self.logger.warning("new_flow " + error_text) raise OpenflowConnUnexpectedResponse(error_text) @@ -441,7 +444,7 @@ class OfConnOnos(OpenflowConn): data['name'] = flowId - self.logger.debug("new_flow OK " + error_text) + self.logger.debug("new_flow id: {},: {} ".format(flowId, error_text)) return None except requests.exceptions.RequestException as e: