The name ofproto-sflow.[ch] implies that this code would work with any ofproto implementation, but in fact it is specific to the ofproto_dpif impelementation. Rename it to avoid confusion.
Suggested-by: Justin Pettit <[email protected]> --- ofproto/automake.mk | 4 +- ofproto/{ofproto-sflow.c => ofproto-dpif-sflow.c} | 128 ++++++++++---------- ofproto/ofproto-dpif-sflow.h | 46 ++++++++ ofproto/ofproto-dpif.c | 30 +++--- ofproto/ofproto-sflow.h | 46 -------- 5 files changed, 127 insertions(+), 127 deletions(-) rename ofproto/{ofproto-sflow.c => ofproto-dpif-sflow.c} (82%) create mode 100644 ofproto/ofproto-dpif-sflow.h delete mode 100644 ofproto/ofproto-sflow.h diff --git a/ofproto/automake.mk b/ofproto/automake.mk index 0279802..9ce40ab 100644 --- a/ofproto/automake.mk +++ b/ofproto/automake.mk @@ -21,8 +21,8 @@ ofproto_libofproto_a_SOURCES = \ ofproto/ofproto.c \ ofproto/ofproto.h \ ofproto/ofproto-dpif.c \ - ofproto/ofproto-sflow.c \ - ofproto/ofproto-sflow.h \ + ofproto/ofproto-dpif-sflow.c \ + ofproto/ofproto-dpif-sflow.h \ ofproto/pktbuf.c \ ofproto/pktbuf.h \ ofproto/pinsched.c \ diff --git a/ofproto/ofproto-sflow.c b/ofproto/ofproto-dpif-sflow.c similarity index 82% rename from ofproto/ofproto-sflow.c rename to ofproto/ofproto-dpif-sflow.c index a3f4d81..06baf4c 100644 --- a/ofproto/ofproto-sflow.c +++ b/ofproto/ofproto-dpif-sflow.c @@ -16,7 +16,7 @@ */ #include <config.h> -#include "ofproto-sflow.h" +#include "ofproto-dpif-sflow.h" #include <inttypes.h> #include <stdlib.h> #include "collectors.h" @@ -37,14 +37,14 @@ VLOG_DEFINE_THIS_MODULE(sflow); -struct ofproto_sflow_port { - struct hmap_node hmap_node; /* In struct ofproto_sflow's "ports" hmap. */ +struct dpif_sflow_port { + struct hmap_node hmap_node; /* In struct dpif_sflow's "ports" hmap. */ struct netdev *netdev; /* Underlying network device, for stats. */ SFLDataSource_instance dsi; /* sFlow library's notion of port number. */ uint16_t odp_port; /* ODP port number. */ }; -struct ofproto_sflow { +struct dpif_sflow { struct ofproto *ofproto; struct collectors *collectors; SFLAgent *sflow_agent; @@ -52,11 +52,11 @@ struct ofproto_sflow { struct dpif *dpif; time_t next_tick; size_t n_flood, n_all; - struct hmap ports; /* Contains "struct ofproto_sflow_port"s. */ + struct hmap ports; /* Contains "struct dpif_sflow_port"s. */ }; -static void ofproto_sflow_del_port__(struct ofproto_sflow *, - struct ofproto_sflow_port *); +static void dpif_sflow_del_port__(struct dpif_sflow *, + struct dpif_sflow_port *); #define RECEIVER_INDEX 1 @@ -70,7 +70,7 @@ nullable_string_is_equal(const char *a, const char *b) static bool ofproto_sflow_options_equal(const struct ofproto_sflow_options *a, - const struct ofproto_sflow_options *b) + const struct ofproto_sflow_options *b) { return (sset_equals(&a->targets, &b->targets) && a->sampling_rate == b->sampling_rate @@ -133,14 +133,14 @@ sflow_agent_send_packet_cb(void *os_, SFLAgent *agent OVS_UNUSED, SFLReceiver *receiver OVS_UNUSED, u_char *pkt, uint32_t pktLen) { - struct ofproto_sflow *os = os_; + struct dpif_sflow *os = os_; collectors_send(os->collectors, pkt, pktLen); } -static struct ofproto_sflow_port * -ofproto_sflow_find_port(const struct ofproto_sflow *os, uint16_t odp_port) +static struct dpif_sflow_port * +dpif_sflow_find_port(const struct dpif_sflow *os, uint16_t odp_port) { - struct ofproto_sflow_port *osp; + struct dpif_sflow_port *osp; HMAP_FOR_EACH_IN_BUCKET (osp, hmap_node, hash_int(odp_port, 0), &os->ports) { @@ -155,15 +155,15 @@ static void sflow_agent_get_counters(void *os_, SFLPoller *poller, SFL_COUNTERS_SAMPLE_TYPE *cs) { - struct ofproto_sflow *os = os_; + struct dpif_sflow *os = os_; SFLCounters_sample_element elem; - struct ofproto_sflow_port *osp; + struct dpif_sflow_port *osp; SFLIf_counters *counters; struct netdev_stats stats; enum netdev_flags flags; uint32_t current; - osp = ofproto_sflow_find_port(os, poller->bridgePort); + osp = dpif_sflow_find_port(os, poller->bridgePort); if (!osp) { return; } @@ -173,8 +173,8 @@ sflow_agent_get_counters(void *os_, SFLPoller *poller, counters->ifIndex = SFL_DS_INDEX(poller->dsi); counters->ifType = 6; if (!netdev_get_features(osp->netdev, ¤t, NULL, NULL, NULL)) { - /* The values of ifDirection come from MAU MIB (RFC 2668): 0 = unknown, - 1 = full-duplex, 2 = half-duplex, 3 = in, 4=out */ + /* The values of ifDirection come from MAU MIB (RFC 2668): 0 = unknown, + 1 = full-duplex, 2 = half-duplex, 3 = in, 4=out */ counters->ifSpeed = netdev_features_to_bps(current); counters->ifDirection = (netdev_features_is_full_duplex(current) ? 1 : 2); @@ -257,7 +257,7 @@ success: } void -ofproto_sflow_clear(struct ofproto_sflow *os) +dpif_sflow_clear(struct dpif_sflow *os) { if (os->sflow_agent) { sfl_agent_release(os->sflow_agent); @@ -273,15 +273,15 @@ ofproto_sflow_clear(struct ofproto_sflow *os) } bool -ofproto_sflow_is_enabled(const struct ofproto_sflow *os) +dpif_sflow_is_enabled(const struct dpif_sflow *os) { return os->collectors != NULL; } -struct ofproto_sflow * -ofproto_sflow_create(struct dpif *dpif) +struct dpif_sflow * +dpif_sflow_create(struct dpif *dpif) { - struct ofproto_sflow *os; + struct dpif_sflow *os; os = xcalloc(1, sizeof *os); os->dpif = dpif; @@ -291,14 +291,14 @@ ofproto_sflow_create(struct dpif *dpif) } void -ofproto_sflow_destroy(struct ofproto_sflow *os) +dpif_sflow_destroy(struct dpif_sflow *os) { if (os) { - struct ofproto_sflow_port *osp, *next; + struct dpif_sflow_port *osp, *next; - ofproto_sflow_clear(os); + dpif_sflow_clear(os); HMAP_FOR_EACH_SAFE (osp, next, hmap_node, &os->ports) { - ofproto_sflow_del_port__(os, osp); + dpif_sflow_del_port__(os, osp); } hmap_destroy(&os->ports); free(os); @@ -306,8 +306,8 @@ ofproto_sflow_destroy(struct ofproto_sflow *os) } static void -ofproto_sflow_add_poller(struct ofproto_sflow *os, - struct ofproto_sflow_port *osp, uint16_t odp_port) +dpif_sflow_add_poller(struct dpif_sflow *os, + struct dpif_sflow_port *osp, uint16_t odp_port) { SFLPoller *poller = sfl_agent_addPoller(os->sflow_agent, &osp->dsi, os, sflow_agent_get_counters); @@ -317,8 +317,8 @@ ofproto_sflow_add_poller(struct ofproto_sflow *os, } static void -ofproto_sflow_add_sampler(struct ofproto_sflow *os, - struct ofproto_sflow_port *osp) +dpif_sflow_add_sampler(struct dpif_sflow *os, + struct dpif_sflow_port *osp) { SFLSampler *sampler = sfl_agent_addSampler(os->sflow_agent, &osp->dsi); sfl_sampler_set_sFlowFsPacketSamplingRate(sampler, os->options->sampling_rate); @@ -327,15 +327,15 @@ ofproto_sflow_add_sampler(struct ofproto_sflow *os, } void -ofproto_sflow_add_port(struct ofproto_sflow *os, uint16_t odp_port, - const char *netdev_name) +dpif_sflow_add_port(struct dpif_sflow *os, uint16_t odp_port, + const char *netdev_name) { - struct ofproto_sflow_port *osp; + struct dpif_sflow_port *osp; struct netdev *netdev; uint32_t ifindex; int error; - ofproto_sflow_del_port(os, odp_port); + dpif_sflow_del_port(os, odp_port); /* Open network device. */ error = netdev_open_default(netdev_name, &netdev); @@ -358,14 +358,14 @@ ofproto_sflow_add_port(struct ofproto_sflow *os, uint16_t odp_port, /* Add poller and sampler. */ if (os->sflow_agent) { - ofproto_sflow_add_poller(os, osp, odp_port); - ofproto_sflow_add_sampler(os, osp); + dpif_sflow_add_poller(os, osp, odp_port); + dpif_sflow_add_sampler(os, osp); } } static void -ofproto_sflow_del_port__(struct ofproto_sflow *os, - struct ofproto_sflow_port *osp) +dpif_sflow_del_port__(struct dpif_sflow *os, + struct dpif_sflow_port *osp) { if (os->sflow_agent) { sfl_agent_removePoller(os->sflow_agent, &osp->dsi); @@ -377,19 +377,19 @@ ofproto_sflow_del_port__(struct ofproto_sflow *os, } void -ofproto_sflow_del_port(struct ofproto_sflow *os, uint16_t odp_port) +dpif_sflow_del_port(struct dpif_sflow *os, uint16_t odp_port) { - struct ofproto_sflow_port *osp = ofproto_sflow_find_port(os, odp_port); + struct dpif_sflow_port *osp = dpif_sflow_find_port(os, odp_port); if (osp) { - ofproto_sflow_del_port__(os, osp); + dpif_sflow_del_port__(os, osp); } } void -ofproto_sflow_set_options(struct ofproto_sflow *os, - const struct ofproto_sflow_options *options) +dpif_sflow_set_options(struct dpif_sflow *os, + const struct ofproto_sflow_options *options) { - struct ofproto_sflow_port *osp; + struct dpif_sflow_port *osp; bool options_changed; SFLReceiver *receiver; SFLAddress agentIP; @@ -398,7 +398,7 @@ ofproto_sflow_set_options(struct ofproto_sflow *os, if (sset_is_empty(&options->targets) || !options->sampling_rate) { /* No point in doing any work if there are no targets or nothing to * sample. */ - ofproto_sflow_clear(os); + dpif_sflow_clear(os); return; } @@ -416,7 +416,7 @@ ofproto_sflow_set_options(struct ofproto_sflow *os, if (os->collectors == NULL) { VLOG_WARN_RL(&rl, "no collectors could be initialized, " "sFlow disabled"); - ofproto_sflow_clear(os); + dpif_sflow_clear(os); return; } } @@ -431,7 +431,7 @@ ofproto_sflow_set_options(struct ofproto_sflow *os, /* Choose agent IP address. */ if (!sflow_choose_agent_address(options->agent_device, options->control_ip, &agentIP)) { - ofproto_sflow_clear(os); + dpif_sflow_clear(os); return; } @@ -463,23 +463,23 @@ ofproto_sflow_set_options(struct ofproto_sflow *os, /* Add samplers and pollers for the currently known ports. */ HMAP_FOR_EACH (osp, hmap_node, &os->ports) { - ofproto_sflow_add_poller(os, osp, osp->odp_port); - ofproto_sflow_add_sampler(os, osp); + dpif_sflow_add_poller(os, osp, osp->odp_port); + dpif_sflow_add_sampler(os, osp); } } static int -ofproto_sflow_odp_port_to_ifindex(const struct ofproto_sflow *os, - uint16_t odp_port) +dpif_sflow_odp_port_to_ifindex(const struct dpif_sflow *os, + uint16_t odp_port) { - struct ofproto_sflow_port *osp = ofproto_sflow_find_port(os, odp_port); + struct dpif_sflow_port *osp = dpif_sflow_find_port(os, odp_port); return osp ? SFL_DS_INDEX(osp->dsi) : 0; } void -ofproto_sflow_received(struct ofproto_sflow *os, - const struct dpif_upcall *upcall, - const struct flow *flow) +dpif_sflow_received(struct dpif_sflow *os, + const struct dpif_upcall *upcall, + const struct flow *flow) { SFL_FLOW_SAMPLE_TYPE fs; SFLFlow_sample_element hdrElem; @@ -492,7 +492,7 @@ ofproto_sflow_received(struct ofproto_sflow *os, /* Build a flow sample */ memset(&fs, 0, sizeof fs); - fs.input = ofproto_sflow_odp_port_to_ifindex(os, flow->in_port); + fs.input = dpif_sflow_odp_port_to_ifindex(os, flow->in_port); fs.output = 0; /* Filled in correctly below. */ fs.sample_pool = upcall->sample_pool; @@ -525,8 +525,8 @@ ofproto_sflow_received(struct ofproto_sflow *os, switchElem.tag = SFLFLOW_EX_SWITCH; switchElem.flowType.sw.src_vlan = vlan_tci_to_vid(flow->vlan_tci); switchElem.flowType.sw.src_priority = vlan_tci_to_pcp(flow->vlan_tci); - /* Initialize the output VLAN and priority to be the same as the input, - but these fields can be overriden below if affected by an action. */ + /* Initialize the output VLAN and priority to be the same as the input, + but these fields can be overriden below if affected by an action. */ switchElem.flowType.sw.dst_vlan = switchElem.flowType.sw.src_vlan; switchElem.flowType.sw.dst_priority = switchElem.flowType.sw.src_priority; @@ -537,8 +537,8 @@ ofproto_sflow_received(struct ofproto_sflow *os, switch (nl_attr_type(a)) { case ODP_ACTION_ATTR_OUTPUT: - fs.output = ofproto_sflow_odp_port_to_ifindex(os, - nl_attr_get_u32(a)); + fs.output = dpif_sflow_odp_port_to_ifindex(os, + nl_attr_get_u32(a)); n_outputs++; break; @@ -571,9 +571,9 @@ ofproto_sflow_received(struct ofproto_sflow *os, } void -ofproto_sflow_run(struct ofproto_sflow *os) +dpif_sflow_run(struct dpif_sflow *os) { - if (ofproto_sflow_is_enabled(os)) { + if (dpif_sflow_is_enabled(os)) { time_t now = time_now(); if (now >= os->next_tick) { sfl_agent_tick(os->sflow_agent, time_wall()); @@ -583,9 +583,9 @@ ofproto_sflow_run(struct ofproto_sflow *os) } void -ofproto_sflow_wait(struct ofproto_sflow *os) +dpif_sflow_wait(struct dpif_sflow *os) { - if (ofproto_sflow_is_enabled(os)) { + if (dpif_sflow_is_enabled(os)) { poll_timer_wait_until(os->next_tick * 1000LL); } } diff --git a/ofproto/ofproto-dpif-sflow.h b/ofproto/ofproto-dpif-sflow.h new file mode 100644 index 0000000..07f4ae7 --- /dev/null +++ b/ofproto/ofproto-dpif-sflow.h @@ -0,0 +1,46 @@ +/* + * Copyright (c) 2009, 2010, 2011 InMon Corp. + * Copyright (c) 2009 Nicira Networks. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef OFPROTO_DPIF_SFLOW_H +#define OFPROTO_DPIF_SFLOW_H 1 + +#include <stdint.h> +#include "svec.h" + +struct dpif; +struct dpif_upcall; +struct flow; +struct ofproto_sflow_options; + +struct dpif_sflow *dpif_sflow_create(struct dpif *); +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 *); +bool dpif_sflow_is_enabled(const struct dpif_sflow *); + +void dpif_sflow_add_port(struct dpif_sflow *, uint16_t odp_port, + const char *netdev_name); +void dpif_sflow_del_port(struct dpif_sflow *, uint16_t odp_port); + +void dpif_sflow_run(struct dpif_sflow *); +void dpif_sflow_wait(struct dpif_sflow *); + +void dpif_sflow_received(struct dpif_sflow *, + const struct dpif_upcall *, const struct flow *); + +#endif /* ofproto/ofproto-dpif-sflow.h */ diff --git a/ofproto/ofproto-dpif.c b/ofproto/ofproto-dpif.c index 5604d5e..9e3b274 100644 --- a/ofproto/ofproto-dpif.c +++ b/ofproto/ofproto-dpif.c @@ -40,7 +40,7 @@ #include "ofp-util.h" #include "ofpbuf.h" #include "ofp-print.h" -#include "ofproto-sflow.h" +#include "ofproto-dpif-sflow.h" #include "poll-loop.h" #include "timer.h" #include "unaligned.h" @@ -315,7 +315,7 @@ struct ofproto_dpif { /* Bridging. */ struct netflow *netflow; - struct ofproto_sflow *sflow; + struct dpif_sflow *sflow; struct hmap bundles; /* Contains "struct ofbundle"s. */ struct mac_learning *ml; struct ofmirror *mirrors[MAX_MIRRORS]; @@ -501,7 +501,7 @@ destruct(struct ofproto *ofproto_) } netflow_destroy(ofproto->netflow); - ofproto_sflow_destroy(ofproto->sflow); + dpif_sflow_destroy(ofproto->sflow); hmap_destroy(&ofproto->bundles); mac_learning_destroy(ofproto->ml); @@ -548,7 +548,7 @@ run(struct ofproto *ofproto_) netflow_run(ofproto->netflow); } if (ofproto->sflow) { - ofproto_sflow_run(ofproto->sflow); + dpif_sflow_run(ofproto->sflow); } HMAP_FOR_EACH (ofport, up.hmap_node, &ofproto->up.ports) { @@ -594,7 +594,7 @@ wait(struct ofproto *ofproto_) dpif_wait(ofproto->dpif); dpif_recv_wait(ofproto->dpif); if (ofproto->sflow) { - ofproto_sflow_wait(ofproto->sflow); + dpif_sflow_wait(ofproto->sflow); } if (!tag_set_is_empty(&ofproto->revalidate_set)) { poll_immediate_wake(); @@ -710,8 +710,8 @@ port_construct(struct ofport *port_) port->tag = tag_create_random(); if (ofproto->sflow) { - ofproto_sflow_add_port(ofproto->sflow, port->odp_port, - netdev_get_name(port->up.netdev)); + dpif_sflow_add_port(ofproto->sflow, port->odp_port, + netdev_get_name(port->up.netdev)); } return 0; @@ -726,7 +726,7 @@ port_destruct(struct ofport *port_) bundle_remove(port_); set_cfm(port_, NULL); if (ofproto->sflow) { - ofproto_sflow_del_port(ofproto->sflow, port->odp_port); + dpif_sflow_del_port(ofproto->sflow, port->odp_port); } } @@ -758,20 +758,20 @@ set_sflow(struct ofproto *ofproto_, const struct ofproto_sflow_options *sflow_options) { struct ofproto_dpif *ofproto = ofproto_dpif_cast(ofproto_); - struct ofproto_sflow *os = ofproto->sflow; + struct dpif_sflow *os = ofproto->sflow; if (sflow_options) { if (!os) { struct ofport_dpif *ofport; - os = ofproto->sflow = ofproto_sflow_create(ofproto->dpif); + os = ofproto->sflow = dpif_sflow_create(ofproto->dpif); HMAP_FOR_EACH (ofport, up.hmap_node, &ofproto->up.ports) { - ofproto_sflow_add_port(os, ofport->odp_port, - netdev_get_name(ofport->up.netdev)); + dpif_sflow_add_port(os, ofport->odp_port, + netdev_get_name(ofport->up.netdev)); } } - ofproto_sflow_set_options(os, sflow_options); + dpif_sflow_set_options(os, sflow_options); } else { - ofproto_sflow_destroy(os); + dpif_sflow_destroy(os); ofproto->sflow = NULL; } return 0; @@ -1693,7 +1693,7 @@ handle_upcall(struct ofproto_dpif *ofproto, struct dpif_upcall *upcall) case DPIF_UC_SAMPLE: if (ofproto->sflow) { odp_flow_key_to_flow(upcall->key, upcall->key_len, &flow); - ofproto_sflow_received(ofproto->sflow, upcall, &flow); + dpif_sflow_received(ofproto->sflow, upcall, &flow); } ofpbuf_delete(upcall->packet); break; diff --git a/ofproto/ofproto-sflow.h b/ofproto/ofproto-sflow.h deleted file mode 100644 index 6f9a93d..0000000 --- a/ofproto/ofproto-sflow.h +++ /dev/null @@ -1,46 +0,0 @@ -/* - * Copyright (c) 2009, 2010 InMon Corp. - * Copyright (c) 2009 Nicira Networks. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at: - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef OFPROTO_SFLOW_H -#define OFPROTO_SFLOW_H 1 - -#include <stdint.h> -#include "svec.h" - -struct dpif; -struct dpif_upcall; -struct flow; -struct ofproto_sflow_options; - -struct ofproto_sflow *ofproto_sflow_create(struct dpif *); -void ofproto_sflow_destroy(struct ofproto_sflow *); -void ofproto_sflow_set_options(struct ofproto_sflow *, - const struct ofproto_sflow_options *); -void ofproto_sflow_clear(struct ofproto_sflow *); -bool ofproto_sflow_is_enabled(const struct ofproto_sflow *); - -void ofproto_sflow_add_port(struct ofproto_sflow *, uint16_t odp_port, - const char *netdev_name); -void ofproto_sflow_del_port(struct ofproto_sflow *, uint16_t odp_port); - -void ofproto_sflow_run(struct ofproto_sflow *); -void ofproto_sflow_wait(struct ofproto_sflow *); - -void ofproto_sflow_received(struct ofproto_sflow *, - const struct dpif_upcall *, const struct flow *); - -#endif /* ofproto/ofproto-sflow.h */ -- 1.7.4.4 _______________________________________________ dev mailing list [email protected] http://openvswitch.org/mailman/listinfo/dev
