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

Reply via email to