Add "-vvconn" to the ovs-ofctl command line.
On Thu, Jan 10, 2013 at 01:34:40PM +0000, Henkel, Michael wrote: > Ben, Jesse, > > Is there a way to capture what ofctl is exactly sending to the switch? Snoop > only shows what the switch receives through the controller and monitor > doesn't tell me anything. > > Regards, > Michael > > -----Original Message----- > From: Ben Pfaff [mailto:b...@nicira.com] > Sent: Mittwoch, 9. Januar 2013 20:19 > To: Henkel, Michael > Cc: Jesse Gross; discuss@openvswitch.org > Subject: Re: [ovs-discuss] add a flow to a specific table > > The setting is per OpenFlow connection, so you need to enable it on any given > OpenFlow connection before you try to use it. > > ovs-ofctl enables this extension when it is needed. It uses the function > ofputil_make_flow_mod_table_id() to compose the message to enable it. > > On Wed, Jan 09, 2013 at 07:08:08PM +0000, Henkel, Michael wrote: > > Guess I'm missing something. All I do at the moment is changing the of > > command from 0 to 256 in my Pox application. This triggers openvswitch to > > detect that the received command contains a table number and the command > > itself. But as you already pointed out there is a complain about not having > > the extension enabled (did now find it in the logs...). Pox itself doesn't > > know anything about the extension (no nicira headers imported). > > The part I'm missing is how to enable that extension through my controller > > application. Unfortunately there isn't too much documentation around. Does > > the extension need to be enabled per flow, per datapath or for the entire > > switch. Can you point me to an example of a controller sending a message > > enabling the extension (I don't care too much about the controller or the > > language). > > > > Thanks, > > Michael > > > > -----Original Message----- > > From: Jesse Gross [mailto:je...@nicira.com] > > Sent: Mittwoch, 9. Januar 2013 19:21 > > To: Henkel, Michael > > Cc: discuss@openvswitch.org > > Subject: Re: [ovs-discuss] add a flow to a specific table > > > > The entire extension is sending the command plus encoding the table in the > > flow mod so I'm not sure that there is a difference. > > > > On Wed, Jan 9, 2013 at 9:14 AM, Henkel, Michael <michael.hen...@hp.com> > > wrote: > > > Thanks Jesse, > > > > > > In order to do that need my controller to support the entire Nicira > > > extension or is there a simple way to send the NXT_FLOW_MOD_TABLE_ID > > > command to the switch? > > > > > > Regards, > > > Michael > > > > > > -----Original Message----- > > > From: Jesse Gross [mailto:je...@nicira.com] > > > Sent: Mittwoch, 9. Januar 2013 16:58 > > > To: Henkel, Michael > > > Cc: discuss@openvswitch.org > > > Subject: Re: [ovs-discuss] add a flow to a specific table > > > > > > On Wed, Jan 9, 2013 at 7:00 AM, Henkel, Michael <michael.hen...@hp.com> > > > wrote: > > >> Hi list, > > >> > > >> > > >> > > >> I???m trying to figure out on how to place a flow into a specific > > >> table using a pox extension. I can easily place flows into standard > > >> tables using the following (python) code: > > >> > > >> > > >> > > >> def create_flow_install_msg(ip, table, mask, srcMac, dstMac, dstPort): > > >> > > >> ofm = ofp_flow_mod() > > >> > > >> ofm_match_dl(ofm, OFPFW_DL_TYPE, 0x0800) > > >> > > >> if (MATCH_L2): > > >> > > >> ofm_match_dl(ofm, OFPFW_DL_DST, srcMac) > > >> > > >> ofm.match.set_nw_dst(ip) > > >> > > >> ofm.priority = OFP_DEFAULT_PRIORITY + mask > > >> > > >> ofm.command = 1 #(OFPFC_ADD) > > >> > > >> if (mask == 32): > > >> > > >> ofm.idle_timeout = 300 > > >> > > >> else: > > >> > > >> ofm.idle_timeout = OFP_FLOW_PERMANENT > > >> > > >> ofm.hard_timeout = OFP_FLOW_PERMANENT > > >> > > >> ofm.out_port = OFPP_NONE > > >> > > >> ofm.actions.append(ofp_action_dl_addr(type=OFPAT_SET_DL_SRC, > > >> dl_addr=EthAddr(srcMac))) > > >> > > >> ofm.actions.append(ofp_action_dl_addr(type=OFPAT_SET_DL_DST, > > >> dl_addr=EthAddr(dstMac))) > > >> > > >> #ofm.actions.append(ofp_action_tp_port(type=OFPAT_SET_TP_DST, > > >> tp_port=20005)) > > >> > > >> ofm.actions.append(ofp_action_output(port=dstPort)) > > >> > > >> > > >> > > >> return ofm > > >> > > >> > > >> > > >> Now I???m trying to understand how the Nicira extension of > > >> openvswitch can be enabled. I???ve read through the following: > > >> > > >> > > >> > > >> /* This command enables or disables an Open vSwitch extension that > > >> allows a > > >> > > >> * controller to specify the OpenFlow table to which a flow should > > >> be added, > > >> > > >> * instead of having the switch decide which table is most > > >> appropriate as > > >> > > >> * required by OpenFlow 1.0. By default, the extension is disabled. > > >> > > >> * > > >> > > >> * When this feature is enabled, Open vSwitch treats struct > > >> ofp_flow_mod's > > >> > > >> * 16-bit 'command' member as two separate fields. The upper 8 bits > > >> are used > > >> > > >> * as the table ID, the lower 8 bits specify the command as usual. > > >> A table ID > > >> > > >> * of 0xff is treated like a wildcarded table ID. > > >> > > >> * > > >> > > >> * The specific treatment of the table ID depends on the type of flow mod: > > >> > > >> * > > >> > > >> * - OFPFC_ADD: Given a specific table ID, the flow is always placed in > > >> that > > >> > > >> * table. If an identical flow already exists in that table only, > > >> then > > >> it > > >> > > >> * is replaced. If the flow cannot be placed in the specified table, > > >> > > >> * either because the table is full or because the table cannot > > >> support > > >> > > >> * flows of the given type, the switch replies with an > > >> > > >> * OFPFMFC_ALL_TABLES_FULL error. (A controller can distinguish > > >> these > > >> > > >> * cases by comparing the current and maximum number of entries > > >> reported > > >> > > >> * in ofp_table_stats.) > > >> > > >> * > > >> > > >> * If the table ID is wildcarded, the switch picks an appropriate > > >> table > > >> > > >> * itself. If an identical flow already exist in the selected flow > > >> table, > > >> > > >> * then it is replaced. The choice of table might depend on the > > >> flows > > >> > > >> * that are already in th switch; for example, if one table fills up > > >> then > > >> > > >> * the switch might fall back to another one. > > >> > > >> * > > >> > > >> * - OFPFC_MODIFY, OFPFC_DELETE: Given a specific table ID, only flows > > >> > > >> * within that table are matched and modified or deleted. If the > > >> table > > >> ID > > >> > > >> * is wildcarded, flows within any table may be matched and modified > > >> or > > >> > > >> * deleted. > > >> > > >> * > > >> > > >> * - OFPFC_MODIFY_STRICT, OFPFC_DELETE_STRICT: Given a specific table > > >> ID, > > >> > > >> * only a flow within that table may be matched and modified or > > >> deleted. > > >> > > >> * If the table ID is wildcarded and exactly one flow within any > > >> table > > >> > > >> * matches, then it is modified or deleted; if flows in more than one > > >> > > >> * table match, then none is modified or deleted. > > >> > > >> */ > > >> > > >> struct nxt_flow_mod_table_id { > > >> > > >> struct ofp_header header; > > >> > > >> uint32_t vendor; /* NX_VENDOR_ID. */ > > >> > > >> uint32_t subtype; /* NXT_FLOW_MOD_TABLE_ID. */ > > >> > > >> uint8_t set; /* Nonzero to enable, zero to disable. */ > > >> > > >> uint8_t pad[7]; > > >> > > >> }; > > >> > > >> > > >> > > >> commands are represented by 16 bit integers (0 ??? OFPFC_ADD; 1 ??? > > >> OFPFC_MODIFY ???). > > >> > > >> In order to add a flow into table 1 I changed the command 16 bit > > >> int from 0 to 256 (0000 0001 0000 0000). So the upper 8 bit specify > > >> the table 1, the lower 8 bit the command (0 = ADD). > > > > > > I think you haven't enabled the extension. You must first send the > > > NXT_FLOW_MOD_TABLE_ID command to turn it on and then encode the table ID > > > in the flow mod. > > _______________________________________________ > > discuss mailing list > > discuss@openvswitch.org > > http://openvswitch.org/mailman/listinfo/discuss _______________________________________________ discuss mailing list discuss@openvswitch.org http://openvswitch.org/mailman/listinfo/discuss