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

Reply via email to