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