Looking at the wireshark trace, it looks as if the in_port on the match is 
getting byte reversed.  This is quite possibly a bug in the packing library; 
byte ordering in NOX Classic is problematic.

Try flipping it:

ofm.match = flow.get_exact_match();
ofm.match.in_port = htons(ofm.match.in_port); // Swap bytes


You might also try turning up the verbosity for Open vSwitch and looking for 
messages from it.  I won't swear to it, but I'd think there's a decent chance 
it would log something if it got a command with an invalid port number.

-- Murphy

On Mar 26, 2012, at 11:12 PM, 星言 墨虚 wrote:

> Dear all,
> 
> Sorry to bother you.
> 
> I am writing a NOX module whose name is router. It can be use as a router. 
> But there are some questions that NOX cannot add flow entry to flow table in 
> openvswitch through send_openflow_command. 
> 
> This is part of my code.
>  // 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);
> 
> // 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.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);
> 
>  I run this  code in nox(ip: 192.168.0.1) and send packet from host(ip: 
> 192.168.57.1) to terminal(ip: 10.0.0.1), then nox show that flow has been 
> installed successfully, packet has also been sent to terminal successfully 
> and wiresharek can capture the OFP packet too, but openvswitch cannot add 
> this flow to flow table.
> 
> The attachment is capture file from wireshark.
> 
> Thanks!
> 
> 
> <packet>

Reply via email to