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