anchor.diff:              port: 2
               max_len: MAX
   ----
  -<1> Here, we're specifying the 1.0 OpenFlow specification.
  -<2> These values are `lost` because they are not supported in OpenFlow 1.0.
  -<3> Flags are specified using arrays of strings.
  -<4> Match field dependencies are automatically added when necessary.
   
   === OpenFlow to YAML
   
   Given a binary OpenFlow message, `libofp` can translate it back to a human-readable
  -YAML (or JSON) object. Here's the binary for an OpenFlow OFPT_ERROR message in hexadecimal:
  +YAML object. Here's the binary for an OpenFlow OFPT_ERROR message in hexadecimal:
   
   [source,hex]
   ----
  
positive.code:     buffer_id: NO_BUFFER
      out_port: ANY
      out_group: ANY
      flags: [ SEND_FLOW_REM, CHECK_OVERLAP ] // <3>
      match:
        - field: IN_PORT
          value: 1
        - field: IPV4_SRC   // <4>
          value: '192.168.1.1'
      instructions:
        - instruction: APPLY_ACTIONS
  
negative.code: [source,yaml]
  ----
  type: PACKET_OUT
  version: 4    # OpenFlow 1.3
  msg:
    buffer_id: NO_BUFFER
    in_port: CONTROLLER    # Use strings for special values and flags
    actions: 
      - action: OUTPUT
        port: 0x11    # YAML supports hexadecimal numbers
        max_len: MAX
    data: 'ffffffffffff0000000000010800'
  ----
  
  The YAML syntax is based on OpenFlow 1.4, but the same input
  can generate earlier protocol version messages. Libofp is intelligent about
  