packaging: Fix Xen and RH packaging error that was introduced with ovs-test utility
[sliver-openvswitch.git] / ofproto / ofproto-provider.h
index f596abc..8908dc0 100644 (file)
@@ -51,6 +51,7 @@ struct ofproto {
     char *sw_desc;              /* Software version. */
     char *serial_desc;          /* Serial number. */
     char *dp_desc;              /* Datapath description. */
+    enum ofp_config_flags frag_handling; /* One of OFPC_*.  */
 
     /* Datapath. */
     struct hmap ports;          /* Contains "struct ofport"s. */
@@ -81,7 +82,6 @@ struct ofport *ofproto_get_port(const struct ofproto *, uint16_t ofp_port);
          (CLS) < &(OFPROTO)->tables[(OFPROTO)->n_tables];   \
          (CLS)++)
 
-
 /* An OpenFlow port within a "struct ofproto".
  *
  * With few exceptions, ofproto implementations may look at these fields but
@@ -96,6 +96,8 @@ struct ofport {
     int mtu;
 };
 
+void ofproto_port_set_state(struct ofport *, ovs_be32 state);
+
 /* An OpenFlow flow within a "struct ofproto".
  *
  * With few exceptions, ofproto implementations may look at these fields but
@@ -807,14 +809,36 @@ struct ofproto_class {
      * rule. */
     void (*rule_modify_actions)(struct rule *rule);
 
-    /* These functions implement the OpenFlow IP fragment handling policy.  By
-     * default ('drop_frags' == false), an OpenFlow switch should treat IP
-     * fragments the same way as other packets (although TCP and UDP port
-     * numbers cannot be determined).  With 'drop_frags' == true, the switch
-     * should drop all IP fragments without passing them through the flow
-     * table. */
-    bool (*get_drop_frags)(struct ofproto *ofproto);
-    void (*set_drop_frags)(struct ofproto *ofproto, bool drop_frags);
+    /* Changes the OpenFlow IP fragment handling policy to 'frag_handling',
+     * which takes one of the following values, with the corresponding
+     * meanings:
+     *
+     *  - OFPC_FRAG_NORMAL: The switch should treat IP fragments the same way
+     *    as other packets, omitting TCP and UDP port numbers (always setting
+     *    them to 0).
+     *
+     *  - OFPC_FRAG_DROP: The switch should drop all IP fragments without
+     *    passing them through the flow table.
+     *
+     *  - OFPC_FRAG_REASM: The switch should reassemble IP fragments before
+     *    passing packets through the flow table.
+     *
+     *  - OFPC_FRAG_NX_MATCH (a Nicira extension): Similar to OFPC_FRAG_NORMAL,
+     *    except that TCP and UDP port numbers should be included in fragments
+     *    with offset 0.
+     *
+     * Implementations are not required to support every mode.
+     * OFPC_FRAG_NORMAL is the default mode when an ofproto is created.
+     *
+     * At the time of the call to ->set_frag_handling(), the current mode is
+     * available in 'ofproto->frag_handling'.  ->set_frag_handling() returns
+     * true if the requested mode was set, false if it is not supported.
+     *
+     * Upon successful return, the caller changes 'ofproto->frag_handling' to
+     * reflect the new mode.
+     */
+    bool (*set_frag_handling)(struct ofproto *ofproto,
+                              enum ofp_config_flags frag_handling);
 
     /* Implements the OpenFlow OFPT_PACKET_OUT command.  The datapath should
      * execute the 'n_actions' in the 'actions' array on 'packet'.
@@ -894,6 +918,53 @@ struct ofproto_class {
     int (*get_cfm_remote_mpids)(const struct ofport *ofport,
                                 const uint64_t **rmps, size_t *n_rmps);
 
+    /* Configures spanning tree protocol (STP) on 'ofproto' using the
+     * settings defined in 's'.
+     *
+     * If 's' is nonnull, configures STP according to its members.
+     *
+     * If 's' is null, removes any STP configuration from 'ofproto'.
+     *
+     * EOPNOTSUPP as a return value indicates that this ofproto_class does not
+     * support STP, as does a null pointer. */
+    int (*set_stp)(struct ofproto *ofproto,
+                   const struct ofproto_stp_settings *s);
+
+    /* Retrieves state of spanning tree protocol (STP) on 'ofproto'.
+     *
+     * Stores STP state for 'ofproto' in 's'.  If the 'enabled' member
+     * is false, the other member values are not meaningful.
+     *
+     * EOPNOTSUPP as a return value indicates that this ofproto_class does not
+     * support STP, as does a null pointer. */
+    int (*get_stp_status)(struct ofproto *ofproto,
+                          struct ofproto_stp_status *s);
+
+    /* Configures spanning tree protocol (STP) on 'ofport' using the
+     * settings defined in 's'.
+     *
+     * If 's' is nonnull, configures STP according to its members.  The
+     * caller is responsible for assigning STP port numbers (using the
+     * 'port_num' member in the range of 1 through 255, inclusive) and
+     * ensuring there are no duplicates.
+     *
+     * If 's' is null, removes any STP configuration from 'ofport'.
+     *
+     * EOPNOTSUPP as a return value indicates that this ofproto_class does not
+     * support STP, as does a null pointer. */
+    int (*set_stp_port)(struct ofport *ofport,
+                        const struct ofproto_port_stp_settings *s);
+
+    /* Retrieves spanning tree protocol (STP) port status of 'ofport'.
+     *
+     * Stores STP state for 'ofport' in 's'.  If the 'enabled' member is
+     * false, the other member values are not meaningful.
+     *
+     * EOPNOTSUPP as a return value indicates that this ofproto_class does not
+     * support STP, as does a null pointer. */
+    int (*get_stp_port_status)(struct ofport *ofport,
+                               struct ofproto_port_stp_status *s);
+
     /* If 's' is nonnull, this function registers a "bundle" associated with
      * client data pointer 'aux' in 'ofproto'.  A bundle is the same concept as
      * a Port in OVSDB, that is, it consists of one or more "slave" devices
@@ -948,7 +1019,7 @@ struct ofproto_class {
 
     /* Returns true if 'aux' is a registered bundle that is currently in use as
      * the output for a mirror. */
-    bool (*is_mirror_output_bundle)(struct ofproto *ofproto, void *aux);
+    bool (*is_mirror_output_bundle)(const struct ofproto *ofproto, void *aux);
 
     /* When the configuration option of forward_bpdu changes, this function
      * will be invoked. */