]>
Commit | Line | Data |
---|---|---|
bae473fe JP |
1 | /* |
2 | * Copyright (c) 2009, 2010 InMon Corp. | |
1673e0e4 | 3 | * Copyright (c) 2009, 2012 Nicira, Inc. |
bae473fe JP |
4 | * |
5 | * Licensed under the Apache License, Version 2.0 (the "License"); | |
6 | * you may not use this file except in compliance with the License. | |
7 | * You may obtain a copy of the License at: | |
8 | * | |
9 | * http://www.apache.org/licenses/LICENSE-2.0 | |
10 | * | |
11 | * Unless required by applicable law or agreed to in writing, software | |
12 | * distributed under the License is distributed on an "AS IS" BASIS, | |
13 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |
14 | * See the License for the specific language governing permissions and | |
15 | * limitations under the License. | |
16 | */ | |
17 | ||
18 | #ifndef OFPROTO_DPIF_SFLOW_H | |
19 | #define OFPROTO_DPIF_SFLOW_H 1 | |
20 | ||
21 | #include <stdint.h> | |
22 | #include "svec.h" | |
6ff686f2 | 23 | #include "lib/odp-util.h" |
bae473fe JP |
24 | |
25 | struct dpif; | |
26 | struct dpif_upcall; | |
27 | struct flow; | |
28 | struct ofproto_sflow_options; | |
392c7182 | 29 | struct ofport; |
bae473fe | 30 | |
7321bda3 NM |
31 | /* When we have the actions for a sampled packet that |
32 | * will go to just one output, then this structure is | |
33 | * populated by parsing them. Only fields relevant to | |
34 | * the sFlow export are extracted. | |
35 | */ | |
36 | struct dpif_sflow_actions { | |
37 | odp_port_t out_port; /* ODP output port. */ | |
38 | ||
39 | uint32_t encap_depth; /* Count layers of tunnel-encap. */ | |
40 | struct flow_tnl tunnel; /* Egress tunnel push/set. */ | |
41 | uint8_t tunnel_ipproto; /* Tunnel push action can set ipproto. */ | |
42 | bool tunnel_err; /* Tunnel actions parse failure. */ | |
43 | ||
44 | /* Using host-byte order for the mpls stack here | |
45 | to match the expectations of the sFlow library. Also | |
46 | the ordering is reversed, so that the entry at offset 0 | |
47 | is the bottom of the stack. | |
48 | */ | |
49 | uint32_t mpls_lse[FLOW_MAX_MPLS_LABELS]; /* Out stack in host byte order. */ | |
50 | uint32_t mpls_stack_depth; /* Out stack depth. */ | |
51 | bool mpls_err; /* MPLS actions parse failure. */ | |
52 | }; | |
53 | ||
4213f19d | 54 | struct dpif_sflow *dpif_sflow_create(void); |
9723bcce EJ |
55 | struct dpif_sflow *dpif_sflow_ref(const struct dpif_sflow *); |
56 | void dpif_sflow_unref(struct dpif_sflow *); | |
57 | ||
6ff686f2 PS |
58 | uint32_t dpif_sflow_get_probability(const struct dpif_sflow *); |
59 | ||
bae473fe JP |
60 | void dpif_sflow_set_options(struct dpif_sflow *, |
61 | const struct ofproto_sflow_options *); | |
62 | void dpif_sflow_clear(struct dpif_sflow *); | |
63 | bool dpif_sflow_is_enabled(const struct dpif_sflow *); | |
64 | ||
e1b1d06a | 65 | void dpif_sflow_add_port(struct dpif_sflow *ds, struct ofport *ofport, |
4e022ec0 AW |
66 | odp_port_t odp_port); |
67 | void dpif_sflow_del_port(struct dpif_sflow *, odp_port_t odp_port); | |
bae473fe JP |
68 | |
69 | void dpif_sflow_run(struct dpif_sflow *); | |
70 | void dpif_sflow_wait(struct dpif_sflow *); | |
71 | ||
7321bda3 NM |
72 | void dpif_sflow_read_actions(const struct flow *, |
73 | const struct nlattr *actions, size_t actions_len, | |
74 | struct dpif_sflow_actions *); | |
75 | ||
cf62fa4c | 76 | void dpif_sflow_received(struct dpif_sflow *, const struct dp_packet *, |
cc377352 | 77 | const struct flow *, odp_port_t odp_port, |
7321bda3 NM |
78 | const union user_action_cookie *, |
79 | const struct dpif_sflow_actions *); | |
6ff686f2 | 80 | |
4e022ec0 AW |
81 | int dpif_sflow_odp_port_to_ifindex(const struct dpif_sflow *, |
82 | odp_port_t odp_port); | |
bae473fe JP |
83 | |
84 | #endif /* ofproto/ofproto-dpif-sflow.h */ |