datapath: Move Netlink PID for userspace actions from flows to actions.
[sliver-openvswitch.git] / lib / dpif.h
index 8452349..f7ffbce 100644 (file)
@@ -32,6 +32,7 @@ extern "C" {
 
 struct dpif;
 struct ds;
+struct flow;
 struct nlattr;
 struct ofpbuf;
 struct sset;
@@ -58,7 +59,16 @@ const char *dpif_base_name(const struct dpif *);
 
 int dpif_delete(struct dpif *);
 
-int dpif_get_dp_stats(const struct dpif *, struct odp_stats *);
+/* Statisticss for a dpif as a whole. */
+struct dpif_dp_stats {
+    uint64_t n_frags;           /* Number of dropped IP fragments. */
+    uint64_t n_hit;             /* Number of flow table matches. */
+    uint64_t n_missed;          /* Number of flow table misses. */
+    uint64_t n_lost;            /* Number of misses not sent to userspace. */
+    uint64_t n_flows;           /* Number of flows present. */
+};
+int dpif_get_dp_stats(const struct dpif *, struct dpif_dp_stats *);
+
 int dpif_get_drop_frags(const struct dpif *, bool *drop_frags);
 int dpif_set_drop_frags(struct dpif *, bool drop_frags);
 
@@ -72,7 +82,6 @@ struct dpif_port {
     char *name;                 /* Network device name, e.g. "eth0". */
     char *type;                 /* Network device type, e.g. "system". */
     uint32_t port_no;           /* Port number within datapath. */
-    struct netdev_stats stats;  /* Port statistics. */
 };
 void dpif_port_clone(struct dpif_port *, const struct dpif_port *);
 void dpif_port_destroy(struct dpif_port *);
@@ -83,6 +92,7 @@ int dpif_port_query_by_name(const struct dpif *, const char *devname,
 int dpif_port_get_name(struct dpif *, uint16_t port_no,
                        char *name, size_t name_size);
 int dpif_get_max_ports(const struct dpif *);
+uint32_t dpif_port_get_pid(const struct dpif *, uint16_t port_no);
 
 struct dpif_port_dump {
     const struct dpif *dpif;
@@ -116,6 +126,8 @@ struct dpif_flow_stats {
     uint8_t tcp_flags;
 };
 
+void dpif_flow_stats_extract(const struct flow *, struct ofpbuf *packet,
+                             struct dpif_flow_stats *);
 void dpif_flow_stats_format(const struct dpif_flow_stats *, struct ds *);
 
 enum dpif_flow_put_flags {
@@ -148,16 +160,19 @@ bool dpif_flow_dump_next(struct dpif_flow_dump *,
                          const struct dpif_flow_stats **);
 int dpif_flow_dump_done(struct dpif_flow_dump *);
 
-int dpif_execute(struct dpif *, const struct nlattr *actions,
-                 size_t actions_len, const struct ofpbuf *);
+int dpif_execute(struct dpif *,
+                 const struct nlattr *key, size_t key_len,
+                 const struct nlattr *actions, size_t actions_len,
+                 const struct ofpbuf *);
 
 enum dpif_upcall_type {
     DPIF_UC_MISS,               /* Miss in flow table. */
-    DPIF_UC_ACTION,             /* ODP_ACTION_ATTR_CONTROLLER action. */
-    DPIF_UC_SAMPLE,             /* Packet sampling. */
+    DPIF_UC_ACTION,             /* OVS_ACTION_ATTR_USERSPACE action. */
     DPIF_N_UC_TYPES
 };
 
+const char *dpif_upcall_type_to_string(enum dpif_upcall_type);
+
 /* A packet passed up from the datapath to userspace.
  *
  * If 'key' or 'actions' is nonnull, then it points into data owned by
@@ -173,18 +188,11 @@ struct dpif_upcall {
     size_t key_len;             /* Length of 'key' in bytes. */
 
     /* DPIF_UC_ACTION only. */
-    uint64_t userdata;          /* Argument to ODP_ACTION_ATTR_CONTROLLER. */
-
-    /* DPIF_UC_SAMPLE only. */
-    uint32_t sample_pool;       /* # of sampling candidate packets so far. */
-    struct nlattr *actions;     /* Associated flow actions. */
-    size_t actions_len;
+    uint64_t userdata;          /* Argument to OVS_ACTION_ATTR_USERSPACE. */
 };
 
 int dpif_recv_get_mask(const struct dpif *, int *listen_mask);
 int dpif_recv_set_mask(struct dpif *, int listen_mask);
-int dpif_get_sflow_probability(const struct dpif *, uint32_t *probability);
-int dpif_set_sflow_probability(struct dpif *, uint32_t probability);
 int dpif_recv(struct dpif *, struct dpif_upcall *);
 void dpif_recv_purge(struct dpif *);
 void dpif_recv_wait(struct dpif *);