he ofproto_sflow_add_poller() and ofproto_sflow_add_sampler() calls
should always be made together, either when a port is added
dynamically with ofproto_sflow_add_port() or when the sflow_agent is
first created in ofproto_sflow_set_options(). I was seeing odd
behavior where either the pollers or the samplers would never be
instantiated depending on the order that things happened. (It's OK to
add the same sampler or poller again, because the library routines
sfl_agent_addPoller() and sfl_agent_addSampler() will just return the
existing one if it is there. Perhaps we should add a comment to make
that clear?).
I changed the parameters to ofproto_sflow_add_sampler to make it work
the same way as ofproto_sflow_add_poller, where the options are
extracted from os->options within the function itself.
static void
ofproto_sflow_add_sampler(struct ofproto_sflow *os,
static void
ofproto_sflow_add_sampler(struct ofproto_sflow *os,
- struct ofproto_sflow_port *osp,
- u_int32_t sampling_rate, u_int32_t header_len)
+ struct ofproto_sflow_port *osp)
{
SFLSampler *sampler = sfl_agent_addSampler(os->sflow_agent, &osp->dsi);
{
SFLSampler *sampler = sfl_agent_addSampler(os->sflow_agent, &osp->dsi);
- sfl_sampler_set_sFlowFsPacketSamplingRate(sampler, sampling_rate);
- sfl_sampler_set_sFlowFsMaximumHeaderSize(sampler, header_len);
+ sfl_sampler_set_sFlowFsPacketSamplingRate(sampler, os->options->sampling_rate);
+ sfl_sampler_set_sFlowFsMaximumHeaderSize(sampler, os->options->header_len);
sfl_sampler_set_sFlowFsReceiver(sampler, RECEIVER_INDEX);
}
sfl_sampler_set_sFlowFsReceiver(sampler, RECEIVER_INDEX);
}
SFL_DS_SET(osp->dsi, 0, ifindex, 0);
port_array_set(&os->ports, odp_port, osp);
SFL_DS_SET(osp->dsi, 0, ifindex, 0);
port_array_set(&os->ports, odp_port, osp);
+ /* Add poller and sampler. */
if (os->sflow_agent) {
ofproto_sflow_add_poller(os, osp, odp_port);
if (os->sflow_agent) {
ofproto_sflow_add_poller(os, osp, odp_port);
+ ofproto_sflow_add_sampler(os, osp);
/* Add samplers and pollers for the currently known ports. */
PORT_ARRAY_FOR_EACH (osp, &os->ports, odp_port) {
/* Add samplers and pollers for the currently known ports. */
PORT_ARRAY_FOR_EACH (osp, &os->ports, odp_port) {
- ofproto_sflow_add_sampler(os, osp,
- options->sampling_rate, options->header_len);
+ ofproto_sflow_add_poller(os, osp, odp_port);
+ ofproto_sflow_add_sampler(os, osp);