If you want that, you should not have
ofm.buffer_id = htonl(-1);
Put the buffer_id of the packet_in.
Regards
KK
On 18 January 2011 18:58, Kyle Wang <[email protected]> wrote:
> Hi KK,
>
> My experiment was based on the Mininet. I wanted to change the destination
> MAC address of the packets of some input flow, and after that, send them out
> from assigned out_port. The flow entry was added successfully in the switch,
> and the following packets can be processed correctly. However, the 1st
> packet, which triggered the Packet_in_event to make NOX add corresponding
> flow entry, cannot be handled as I wanted, because when I captured from the
> host connected to the assigned out_port, the destination MAC address of the
> 1st packet was not modified, while others were correctly modified.
>
> On Wed, Jan 19, 2011 at 3:38 AM, kk yap <[email protected]> wrote:
>>
>> Hi Kyle,
>>
>> It might help to explain "it seemed to be not work". Did NOX segfault
>> as a result? Was the a OpenFlow flow_mod sent? Was an error
>> received? What switch are you using? These would be useful
>> information.
>>
>> Regards
>> KK
>>
>> On 18 January 2011 04:15, Kyle Wang <[email protected]> wrote:
>> > Hi,
>> > how can I use function send_openflow_packet(const datapathid&
>> > datapath_id,
>> > uint32_t buffer_id, const ofp_action_header actions[], uint16_t
>> > actions_len, uint16_t in_port, bool block) to change the destination MAC
>> > address of the 1st packet of some flow, and then send this modified
>> > packet
>> > to the desired out_port ?
>> > I had tried using action_list to do this, but it seemed to be not work.
>> > The
>> > following is partial code.
>> > ofp_action_list ofpall;
>> > ofp_action *ofp1 = new ofp_action();
>> > ofp1->action_raw.reset(new uint8_t[sizeof(ofp_action_dl_addr)]);
>> > of_action_dl_addr oada;
>> > oada.type = OFPAT_SET_DL_DST;
>> > oada.len = sizeof(ofp_action_dl_addr);
>> > memcpy(oada.dl_addr, fns_server_attr.dl_src, ethernetaddr::LEN);
>> > oada.pack((ofp_action_dl_addr*)
>> > openflow_pack::get_header(ofp1->action_raw));
>> > ofpall.action_list.push_back(*ofp1);
>> > ofp_action *ofp2 = new ofp_action();
>> > ofp2->action_raw.reset(new uint8_t[sizeof(ofp_action_output)]);
>> > of_action_output oao;
>> > oao.type = OFPAT_OUTPUT;
>> > oao.len = sizeof(ofp_action_output);
>> > oao.port = fns_server_attr.in_port;
>> > oao.max_len = 0;
>> > oao.pack((ofp_action_output*)
>> > openflow_pack::get_header(ofp2->action_raw));
>> > ofpall.action_list.push_back(*ofp2);
>> > size_t size = sizeof(ofp_flow_mod) + ofpall.mem_size();
>> > boost::shared_array<uint8_t> of_raw(new uint8_t[size]);
>> > of_raw.reset(new uint8_t[size]);
>> > of_flow_mod ofm;
>> > ofm.header = openflow_pack::header(OFPT_FLOW_MOD, size);
>> > ofm.match = flow.get_exact_match();
>> > ofm.match.wildcards = htonl(0);
>> > ofm.match.in_port = flow.in_port;
>> > ofm.command = OFPFC_ADD;
>> > ofm.buffer_id = htonl(-1);
>> > ofm.idle_timeout = htons(5);
>> > ofm.hard_timeout = htons(OFP_FLOW_PERMANENT);
>> > ofm.priority = htons(OFP_DEFAULT_PRIORITY);
>> > ofm.flags = htons(ofd_flow_mod_flags());
>> > ofm.pack((ofp_flow_mod*) openflow_pack::get_pointer(of_raw));
>> > ofpall.pack(openflow_pack::get_pointer(of_raw,
>> > sizeof(ofp_flow_mod)));
>> > send_openflow_command(pi.datapath_id, of_raw, true);
>> > if (buffer_id == UINT32_MAX) {
>> > send_openflow_packet(pi.datapath_id, *pi.get_buffer(),
>> > ofm.actions, ofpall.mem_size(),
>> > pi.in_port, true);
>> > } else {
>> > send_openflow_packet(pi.datapath_id, buffer_id,
>> > ofm.actions, ofpall.mem_size(),
>> > pi.in_port, true);
>> > }
>> >
>> >
>> > _______________________________________________
>> > nox-dev mailing list
>> > [email protected]
>> > http://noxrepo.org/mailman/listinfo/nox-dev_noxrepo.org
>> >
>> >
>
>
>
> --
> God Help Those Who Help Themselves.
>
> Kyle Wang
> ====================================================
> Ph.D. Student, Department of Automation, Tsinghua University
> Address: Room 3-421, FIT, Tsinghua University, Beijing, China, 100084
> Phone: 86-1500-123-6466(m) 86-10-6277-2656(o)
> Email: [email protected]
> ====================================================
>
_______________________________________________
nox-dev mailing list
[email protected]
http://noxrepo.org/mailman/listinfo/nox-dev_noxrepo.org