-- binary
01 0d # version/type
00 23 # length
12 34 56 78 # xid
ab cd ef 01 # buffer_id
ff fe # in_port
00 10 # actions_len
00 00 # actions[0].type
00 08 # actions[0].len
00 01 # actions[0].port
00 00 # actions[0].max_len
00 00 # actions[1].type
00 08 # actions[1].len
00 02 # actions[1].port
00 00 # actions[1].max_len
61 62 63 # data
-- python
ofp.message.packet_out(
    xid=0x12345678,
    buffer_id=0xabcdef01,
    in_port=ofp.OFPP_LOCAL,
    actions=[
        ofp.action.output(port=1),
        ofp.action.output(port=2)],
    data='abc')
-- c
obj = of_packet_out_new(OF_VERSION_1_0);
of_packet_out_buffer_id_set(obj, 0xabcdef01);
of_packet_out_in_port_set(obj, 65534);
of_packet_out_xid_set(obj, 305419896);
{
    of_object_t *list = of_list_action_new(OF_VERSION_1_0);
    {
        of_object_t *obj = of_action_output_new(OF_VERSION_1_0);
        of_action_output_max_len_set(obj, 0);
        of_action_output_port_set(obj, 1);
        of_list_append(list, obj);
        of_object_delete(obj);
    }
    {
        of_object_t *obj = of_action_output_new(OF_VERSION_1_0);
        of_action_output_max_len_set(obj, 0);
        of_action_output_port_set(obj, 2);
        of_list_append(list, obj);
        of_object_delete(obj);
    }
    of_packet_out_actions_set(obj, list);
    of_object_delete(list);
}
{
    of_octets_t data = { .bytes=3, .data=(uint8_t *)"\x61\x62\x63" };
    of_packet_out_data_set(obj, &data);
}
