X-Git-Url: http://git.cascardo.eti.br/?a=blobdiff_plain;f=ofproto%2Fofproto-dpif-sflow.h;h=014e6cce39c023935369f83213dd3e36fcfb98b4;hb=bab86012066c353c75d2b8446c25daea2471d939;hp=d0f83bce36f354bdce5bb77064eda93f173e16b3;hpb=4e022ec09e14ac89add74c1b4b8e3ff3873edbf0;p=cascardo%2Fovs.git diff --git a/ofproto/ofproto-dpif-sflow.h b/ofproto/ofproto-dpif-sflow.h index d0f83bce3..014e6cce3 100644 --- a/ofproto/ofproto-dpif-sflow.h +++ b/ofproto/ofproto-dpif-sflow.h @@ -28,10 +28,35 @@ struct flow; struct ofproto_sflow_options; struct ofport; +/* When we have the actions for a sampled packet that + * will go to just one output, then this structure is + * populated by parsing them. Only fields relevant to + * the sFlow export are extracted. + */ +struct dpif_sflow_actions { + odp_port_t out_port; /* ODP output port. */ + + uint32_t encap_depth; /* Count layers of tunnel-encap. */ + struct flow_tnl tunnel; /* Egress tunnel push/set. */ + uint8_t tunnel_ipproto; /* Tunnel push action can set ipproto. */ + bool tunnel_err; /* Tunnel actions parse failure. */ + + /* Using host-byte order for the mpls stack here + to match the expectations of the sFlow library. Also + the ordering is reversed, so that the entry at offset 0 + is the bottom of the stack. + */ + uint32_t mpls_lse[FLOW_MAX_MPLS_LABELS]; /* Out stack in host byte order. */ + uint32_t mpls_stack_depth; /* Out stack depth. */ + bool mpls_err; /* MPLS actions parse failure. */ +}; + struct dpif_sflow *dpif_sflow_create(void); +struct dpif_sflow *dpif_sflow_ref(const struct dpif_sflow *); +void dpif_sflow_unref(struct dpif_sflow *); + uint32_t dpif_sflow_get_probability(const struct dpif_sflow *); -void dpif_sflow_destroy(struct dpif_sflow *); void dpif_sflow_set_options(struct dpif_sflow *, const struct ofproto_sflow_options *); void dpif_sflow_clear(struct dpif_sflow *); @@ -44,11 +69,14 @@ void dpif_sflow_del_port(struct dpif_sflow *, odp_port_t odp_port); void dpif_sflow_run(struct dpif_sflow *); void dpif_sflow_wait(struct dpif_sflow *); -void dpif_sflow_received(struct dpif_sflow *, - struct ofpbuf *, - const struct flow *, - odp_port_t odp_port, - const union user_action_cookie *); +void dpif_sflow_read_actions(const struct flow *, + const struct nlattr *actions, size_t actions_len, + struct dpif_sflow_actions *); + +void dpif_sflow_received(struct dpif_sflow *, const struct dp_packet *, + const struct flow *, odp_port_t odp_port, + const union user_action_cookie *, + const struct dpif_sflow_actions *); int dpif_sflow_odp_port_to_ifindex(const struct dpif_sflow *, odp_port_t odp_port);