# OpenFlow version independent classes and functions

## Base class for OpenFlow messages

class `ryu.ofproto.ofproto_parser.``MsgBase`(datapath)

  This is a base class for OpenFlow message classes.

  An instance of this class has at least the following attributes.

  Attribute | Description
  --- | ---
  datapath | A ryu.controller.controller.Datapath instance for this message
  version | OpenFlow protocol version
  msg_type | Type of OpenFlow message
  msg_len | Length of the message
  xid | Transaction id
  buf | Raw data

  `_TYPE`

    _TYPE class attribute is used to annotate types of attributes.

    This type information is used to find an appropriate conversion for a JSON style dictionary.

    Currently the following types are implemented.

    Type | Descrption
    --- | ---
    ascii | US-ASCII
    utf-8 | UTF-8

    Example:

        _TYPE = {
            'ascii': [
                'hw_addr',
            ],
            'utf-8': [
                'name',
            ]
        }

  classmethod `from_jsondict`(dict_, decode_string=<function b64decode>, **additional_args)

    Create an instance from a JSON style dict.

    Instantiate this class with parameters specified by the dict.

    This method takes the following arguments.

    Argument | Descrpition
    --- | ---
    dict_ | A dictionary which describes the parameters. For example, {"Param1": 100, "Param2": 200}
    decode_string | (Optional) specify how to decode strings. The default is base64. This argument is used only for attributes which don't have explicit type annotations in _TYPE class attribute.
    additional_args | (Optional) Additional kwargs for constructor.

  `to_jsondict`(encode_string=<function b64encode>)

    This method returns a JSON style dict to describe this object.

    The returned dict is compatible with json.dumps() and json.loads().

    Suppose ClassName object inherits StringifyMixin. For an object like the following:

        ClassName(Param1=100, Param2=200)

    this method would produce:

        { "ClassName": {"Param1": 100, "Param2": 200} }

    This method takes the following arguments.

    Argument | Description
    --- | ---
    encode_string | (Optional) specify how to encode attributes which has python 'str' type. The default is base64. This argument is used only for attributes which don't have explicit type annotations in _TYPE class attribute.

## Functions

`ryu.ofproto.ofproto_parser.``ofp_msg_from_jsondict`(dp, jsondict)

  This function instanticates an appropriate OpenFlow message class from the given JSON style dictionary. The objects created by following two code fragments are equivalent.

  Code A:

      jsonstr = '{ "OFPSetConfig": { "flags": 0, "miss_send_len": 128 } }'
      jsondict = json.loads(jsonstr)
      o = ofp_msg_from_jsondict(dp, jsondict)

  Code B:

      o = dp.ofproto_parser.OFPSetConfig(flags=0, miss_send_len=128)

  This function takes the following arguments.

  Argument | Description
  --- | ---
  dp | An instance of ryu.controller.Datapath.
  jsondict | A JSON style dict.