meta-flow: Correctly set destination MAC in mf_set_flow_value().
[sliver-openvswitch.git] / ofproto / ofproto-provider.h
index 558b871..6dd206b 100644 (file)
@@ -332,12 +332,17 @@ struct ofproto_class {
      *   - Call ofproto_rule_expire() for each OpenFlow flow that has reached
      *     its hard_timeout or idle_timeout, to expire the flow.
      *
-     * Returns 0 if successful, otherwise a positive errno value.  The ENODEV
-     * return value specifically means that the datapath underlying 'ofproto'
-     * has been destroyed (externally, e.g. by an admin running ovs-dpctl).
-     */
+     * Returns 0 if successful, otherwise a positive errno value. */
     int (*run)(struct ofproto *ofproto);
 
+    /* Performs periodic activity required by 'ofproto' that needs to be done
+     * with the least possible latency.
+     *
+     * This is run multiple times per main loop.  An ofproto provider may
+     * implement it or not, according to whether it provides a performance
+     * boost for that ofproto implementation. */
+    int (*run_fast)(struct ofproto *ofproto);
+
     /* Causes the poll loop to wake up when 'ofproto''s 'run' function needs to
      * be called, e.g. by calling the timer or fd waiting functions in
      * poll-loop.h.  */
@@ -489,6 +494,10 @@ struct ofproto_class {
      * convenient. */
     int (*port_del)(struct ofproto *ofproto, uint16_t ofp_port);
 
+    /* Get port stats */
+    int (*port_get_stats)(const struct ofport *port,
+                          struct netdev_stats *stats);
+
     /* Port iteration functions.
      *
      * The client might not be entirely in control of the ports within an
@@ -1020,13 +1029,23 @@ struct ofproto_class {
      * 'ofproto' associated with client data pointer 'aux'.  If no such mirror
      * has been registered, this has no effect.
      *
-     * This function affects only the behavior of the OFPP_NORMAL action.  An
-     * implementation that does not support it at all may set it to NULL or
-     * return EOPNOTSUPP.  An implementation that supports only a subset of the
-     * functionality should implement what it can and return 0. */
+     * An implementation that does not support mirroring at all may set
+     * it to NULL or return EOPNOTSUPP.  An implementation that supports
+     * only a subset of the functionality should implement what it can
+     * and return 0. */
     int (*mirror_set)(struct ofproto *ofproto, void *aux,
                       const struct ofproto_mirror_settings *s);
 
+    /* Retrieves statistics from mirror associated with client data
+     * pointer 'aux' in 'ofproto'.  Stores packet and byte counts in
+     * 'packets' and 'bytes', respectively.  If a particular counter is
+     * not supported, the appropriate argument is set to UINT64_MAX.
+     *
+     * EOPNOTSUPP as a return value indicates that this ofproto_class does not
+     * support retrieving mirror statistics. */
+    int (*mirror_get_stats)(struct ofproto *ofproto, void *aux,
+                            uint64_t *packets, uint64_t *bytes);
+
     /* Configures the VLANs whose bits are set to 1 in 'flood_vlans' as VLANs
      * on which all packets are flooded, instead of using MAC learning.  If
      * 'flood_vlans' is NULL, then MAC learning applies to all VLANs.
@@ -1045,6 +1064,10 @@ struct ofproto_class {
      * will be invoked. */
     void (*forward_bpdu_changed)(struct ofproto *ofproto);
 
+    /* Sets the MAC aging timeout for the OFPP_NORMAL action to 'idle_time',
+     * in seconds. */
+    void (*set_mac_idle_time)(struct ofproto *ofproto, unsigned int idle_time);
+
 /* Linux VLAN device support (e.g. "eth0.10" for VLAN 10.)
  *
  * This is deprecated.  It is only for compatibility with broken device drivers