-- binary
01 0e 00 70 12 34 56 78
00 10 00 02 00 03 01 23
45 67 89 ab cd ef 01 23
45 67 00 00 00 00 00 00
00 00 00 00 c0 a8 03 7f
ff ff ff ff 00 00 00 00
00 00 00 00 00 00 00 00
00 00 00 05 00 00 00 00
00 00 00 00 00 00 00 02
00 00 00 08 ff fb 00 00
ff ff 00 10 00 00 23 20
00 12 00 00 00 00 00 00
ff ff 00 10 00 5c 16 c7
00 00 00 02 00 00 00 00
-- python
ofp.message.flow_add(
    xid=0x12345678,
    match=ofp.match(
        wildcards=ofp.OFPFW_DL_VLAN|ofp.OFPFW_DL_VLAN_PCP,
        in_port=3,
        ipv4_src=0xc0a8037f,
        ipv4_dst=0xffffffff,
        eth_src=[0x01, 0x23, 0x45, 0x67, 0x89, 0xab],
        eth_dst=[0xcd, 0xef, 0x01, 0x23, 0x45, 0x67]),
    idle_timeout=5,
    flags=ofp.OFPFF_CHECK_OVERLAP,
    actions=[
        ofp.action.output(port=ofp.OFPP_FLOOD),
        ofp.action.nicira_dec_ttl(),
        ofp.action.bsn_set_tunnel_dst()])
-- python pretty-printer
flow_add {
  xid = 0x12345678,
  match = match_v1 {
    wildcards = OFPFW_DL_VLAN|OFPFW_DL_VLAN_PCP,
    in_port = 3,
    eth_src = 01:23:45:67:89:ab,
    eth_dst = cd:ef:01:23:45:67,
    vlan_vid = 0x0,
    vlan_pcp = 0x0,
    eth_type = 0x0,
    ip_dscp = 0x0,
    ip_proto = 0x0,
    ipv4_src = 192.168.3.127,
    ipv4_dst = 255.255.255.255,
    tcp_src = 0x0,
    tcp_dst = 0x0
  },
  cookie = 0x0,
  idle_timeout = 0x5,
  hard_timeout = 0x0,
  priority = 0x0,
  buffer_id = 0x0,
  out_port = 0,
  flags = 0x2,
  actions = [
    output { port = OFPP_FLOOD, max_len = 0x0 },
    nicira_dec_ttl {  },
    bsn_set_tunnel_dst { dst = 0x0 }
  ]
}
-- c
obj = of_flow_add_new(OF_VERSION_1_0);
of_flow_add_xid_set(obj, 0x12345678);
of_flow_add_idle_timeout_set(obj, 5);
of_flow_add_flags_set(obj, 2);
{
    of_match_t match = { OF_VERSION_1_0 };
    match.fields.in_port = 3;
    match.fields.eth_src = (of_mac_addr_t) { { 0x01, 0x23, 0x45, 0x67, 0x89, 0xab } };
    match.fields.eth_dst = (of_mac_addr_t) { { 0xcd, 0xef, 0x01, 0x23, 0x45, 0x67 } };
    match.fields.ipv4_src = 0xc0a8037f;
    match.fields.ipv4_dst = 0xffffffff;
    OF_MATCH_MASK_IN_PORT_EXACT_SET(&match);
    OF_MATCH_MASK_ETH_SRC_EXACT_SET(&match);
    OF_MATCH_MASK_ETH_DST_EXACT_SET(&match);
    //OF_MATCH_MASK_VLAN_VID_EXACT_SET(&match);
    //OF_MATCH_MASK_VLAN_PCP_EXACT_SET(&match);
    OF_MATCH_MASK_ETH_TYPE_EXACT_SET(&match);
    OF_MATCH_MASK_IP_DSCP_EXACT_SET(&match);
    OF_MATCH_MASK_IP_PROTO_EXACT_SET(&match);
    OF_MATCH_MASK_IPV4_SRC_EXACT_SET(&match);
    OF_MATCH_MASK_IPV4_DST_EXACT_SET(&match);
    OF_MATCH_MASK_TCP_SRC_EXACT_SET(&match);
    OF_MATCH_MASK_TCP_DST_EXACT_SET(&match);
    of_flow_add_match_set(obj, &match);
}
{
    of_list_action_t actions;
    of_flow_add_actions_bind(obj, &actions);
    {
        of_action_t action;
        of_action_output_init(&action.output, OF_VERSION_1_0, -1, 1);
        of_list_action_append_bind(&actions, &action);
        of_action_output_port_set(&action.output, OF_PORT_DEST_FLOOD);
    }
    {
        of_action_t action;
        of_action_nicira_dec_ttl_init(&action.nicira_dec_ttl, OF_VERSION_1_0, -1, 1);
        of_list_action_append_bind(&actions, &action);
    }
    {
        of_action_t action;
        of_action_bsn_set_tunnel_dst_init(&action.bsn_set_tunnel_dst, OF_VERSION_1_0, -1, 1);
        of_list_action_append_bind(&actions, &action);
    }
}
