unification of netdev&netdev_dev in pltap&tunnel
[sliver-openvswitch.git] / lib / odp-util.h
index ad0fb30..a981d17 100644 (file)
@@ -127,8 +127,10 @@ void commit_odp_actions(const struct flow *, struct flow *base,
 
 enum user_action_cookie_type {
     USER_ACTION_COOKIE_UNSPEC,
-    USER_ACTION_COOKIE_SFLOW,        /* Packet for sFlow sampling. */
-    USER_ACTION_COOKIE_SLOW_PATH     /* Userspace must process this flow. */
+    USER_ACTION_COOKIE_SFLOW,        /* Packet for per-bridge sFlow sampling. */
+    USER_ACTION_COOKIE_SLOW_PATH,    /* Userspace must process this flow. */
+    USER_ACTION_COOKIE_FLOW_SAMPLE,  /* Packet for per-flow sampling. */
+    USER_ACTION_COOKIE_IPFIX,        /* Packet for per-bridge IPFIX sampling. */
 };
 
 /* user_action_cookie is passed as argument to OVS_ACTION_ATTR_USERSPACE.
@@ -147,8 +149,20 @@ union user_action_cookie {
         uint16_t unused;
         uint32_t reason;        /* enum slow_path_reason. */
     } slow_path;
+
+    struct {
+        uint16_t type;          /* USER_ACTION_COOKIE_FLOW_SAMPLE. */
+        uint16_t probability;   /* Sampling probability. */
+        uint32_t collector_set_id; /* ID of IPFIX collector set. */
+        uint32_t obs_domain_id; /* Observation Domain ID. */
+        uint32_t obs_point_id;  /* Observation Point ID. */
+    } flow_sample;
+
+    struct {
+        uint16_t type;          /* USER_ACTION_COOKIE_IPFIX. */
+    } ipfix;
 };
-BUILD_ASSERT_DECL(sizeof(union user_action_cookie) == 8);
+BUILD_ASSERT_DECL(sizeof(union user_action_cookie) == 16);
 
 size_t odp_put_userspace_action(uint32_t pid,
                                 const void *userdata, size_t userdata_size,
@@ -165,14 +179,15 @@ enum slow_path_reason {
     SLOW_LACP = 1 << 1,         /* LACP packets need per-packet processing. */
     SLOW_STP = 1 << 2,          /* STP packets need per-packet processing. */
     SLOW_IN_BAND = 1 << 3,      /* In-band control needs every packet. */
+    SLOW_BFD = 1 << 4,          /* BFD packets need per-packet processing. */
 
-    /* Mutually exclusive with SLOW_CFM, SLOW_LACP, SLOW_STP.
+    /* Mutually exclusive with SLOW_BFD, SLOW_CFM, SLOW_LACP, SLOW_STP.
      * Could possibly appear with SLOW_IN_BAND. */
-    SLOW_CONTROLLER = 1 << 4,   /* Packets must go to OpenFlow controller. */
+    SLOW_CONTROLLER = 1 << 5,   /* Packets must go to OpenFlow controller. */
 
     /* This can appear on its own, or, theoretically at least, along with any
      * other combination of reasons. */
-    SLOW_MATCH = 1 << 5,        /* Datapath can't match specifically enough. */
+    SLOW_MATCH = 1 << 6,        /* Datapath can't match specifically enough. */
 };
 
 #endif /* odp-util.h */