mirror of
https://github.com/openvswitch/ovs
synced 2025-10-25 15:07:05 +00:00
Implement IPFIX export
Define a new NXAST_SAMPLE OpenFlow vendor action and the corresponding OFPACT_SAMPLE OVS action, to do per-flow packet sampling, translated into a new SAMPLE "flow_sample" dp action. Make the userspace action's userdata size vary depending on the union member used. Add a new "flow_sample" upcall to do per-flow packet sampling. Add a new "ipfix" upcall to do per-bridge packet sampling to IPFIX collectors. Extend the OVSDB schema to support configuring IPFIX collector sets. Add support for configuring multiple IPFIX collectors for per-flow packet sampling. Add support for configuring per-bridge IPFIX sampling. Automatically generate standard IPFIX entity definitions from the IANA specs. Send one IPFIX data record message for every packet sampled by an OpenFlow sample action or received by a bridge configured with IPFIX sampling, and periodically send IPFIX template set messages. Signed-off-by: Romain Lenglet <rlenglet@vmware.com> Signed-off-by: Ben Pfaff <blp@nicira.com>
This commit is contained in:
committed by
Ben Pfaff
parent
d8558b4ae8
commit
29089a540c
@@ -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,
|
||||
|
||||
Reference in New Issue
Block a user