I'd try removing the output action (set_action_output).

-- Murphy

On Mar 29, 2012, at 1:18 AM, 星言 墨虚 wrote:

> Hi all,
> 
> Sorry to bother you.
> 
> I am writing a nox module which used as a router. And I use openvswitch as 
> switch to forward the packets.
> I add 2 queues to each port of openvswitch. And in nox, I use this code to 
> install flow to flow table in openvswitch.
> 
>               // set up a new flow
>               ofp_action_list act_list;
>               ofp_action *act;
> 
>               act = new ofp_action();
>               act->set_action_dl_addr(OFPAT_SET_DL_DST, 
> ARPTable[RouteEntry.NextIPAddr]);
>               act_list.action_list.push_back(*act);
>               act = new ofp_action();
>               act->set_action_output(RouteEntry.outPort, 0);
>               act_list.action_list.push_back(*act);
>               act = new ofp_action();
>               if (flow.nw_proto == ip_::proto::UDP)
>                   act->set_action_enqueue(RouteEntry.outPort, 1);
>               else
>                   act->set_action_enqueue(RouteEntry.outPort, 0);
>               act_list.action_list.push_back(*act);
> 
>               // set up new flow
>               boost::shared_array<uint8_t> of_raw;
>               size_t size = sizeof(ofp_flow_mod)+act_list.mem_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.in_port = htons(ofm.match.in_port);
> 
>               ofm.cookie = htonl(0);
>               ofm.command = htons(OFPFC_ADD);
>               ofm.flags = htons(0);
>               ofm.priority = htons(OFP_DEFAULT_PRIORITY);
>               ofm.idle_timeout = htons(120);
>               ofm.hard_timeout = htons(0);
>               ofm.buffer_id = buffer_id;
> 
>               ofm.pack((ofp_flow_mod*) openflow_pack::get_pointer(of_raw));
>               
> act_list.pack(openflow_pack::get_pointer(of_raw,sizeof(ofp_flow_mod)));
> 
>               lg.dbg("Install flow entry %s with %zu actions", 
>                         flow.to_string().c_str(), 
> act_list.action_list.size());
> 
>               send_openflow_command(datapath_id, of_raw, false);
> 
> But question is when I ping from host(ip: 192.168.57.1) to terminal(ip: 
> 10.0.0.2), openvswitch will forward the same packet twice or more.
> Is there something wrong with queue configuration or NOX?
> 
> Thanks.
> 
> -- Tony

Reply via email to