---
ofproto/ofproto-dpif-sflow.c | 8 +++++---
ofproto/ofproto-dpif-sflow.h | 3 ++-
ofproto/ofproto-dpif.c | 5 +++--
3 files changed, 10 insertions(+), 6 deletions(-)
diff --git a/ofproto/ofproto-dpif-sflow.c b/ofproto/ofproto-dpif-sflow.c
index d17b0be..73faf03 100644
--- a/ofproto/ofproto-dpif-sflow.c
+++ b/ofproto/ofproto-dpif-sflow.c
@@ -43,6 +43,7 @@ struct dpif_sflow_port {
struct netdev *netdev; /* Underlying network device, for stats. */
SFLDataSource_instance dsi; /* sFlow library's notion of port number. */
uint16_t odp_port; /* Datapath port number. */
+ struct ofport *ofport; /* To retrive port stats. */
};
struct dpif_sflow {
@@ -197,7 +198,7 @@ sflow_agent_get_counters(void *ds_, SFLPoller *poller,
2. Does the multicast counter include broadcasts?
3. Does the rx_packets counter include multicasts/broadcasts?
*/
- netdev_get_stats(dsp->netdev, &stats);
+ ofproto_port_get_stats(dsp->ofport, &stats);
counters->ifInOctets = stats.rx_bytes;
counters->ifInUcastPkts = stats.rx_packets;
counters->ifInMulticastPkts = stats.multicast;
@@ -338,7 +339,7 @@ dpif_sflow_add_sampler(struct dpif_sflow *ds, struct
dpif_sflow_port *dsp)
void
dpif_sflow_add_port(struct dpif_sflow *ds, uint16_t odp_port,
- const char *netdev_name)
+ const char *netdev_name, struct ofport *ofport)
{
struct dpif_sflow_port *dsp;
struct netdev *netdev;
@@ -362,6 +363,7 @@ dpif_sflow_add_port(struct dpif_sflow *ds, uint16_t
odp_port,
if (ifindex <= 0) {
ifindex = (ds->sflow_agent->subId << 16) + odp_port;
}
+ dsp->ofport = ofport;
SFL_DS_SET(dsp->dsi, 0, ifindex, 0);
dsp->odp_port = odp_port;
hmap_insert(&ds->ports, &dsp->hmap_node, hash_int(odp_port, 0));
@@ -507,7 +509,7 @@ dpif_sflow_received(struct dpif_sflow *ds, struct ofpbuf
*packet,
}
fs.input = SFL_DS_INDEX(in_dsp->dsi);
- error = netdev_get_stats(in_dsp->netdev, &stats);
+ error = ofproto_port_get_stats(in_dsp->ofport, &stats);
if (error) {
VLOG_WARN_RL(&rl, "netdev get-stats error %s", strerror(error));
return;
diff --git a/ofproto/ofproto-dpif-sflow.h b/ofproto/ofproto-dpif-sflow.h
index 439f410..36d92b9 100644
--- a/ofproto/ofproto-dpif-sflow.h
+++ b/ofproto/ofproto-dpif-sflow.h
@@ -26,6 +26,7 @@ struct dpif;
struct dpif_upcall;
struct flow;
struct ofproto_sflow_options;
+struct ofport;
struct dpif_sflow *dpif_sflow_create(struct dpif *);
uint32_t dpif_sflow_get_probability(const struct dpif_sflow *);
@@ -37,7 +38,7 @@ 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 ovs_port,
- const char *netdev_name);
+ const char *netdev_name, struct ofport *ofport);
void dpif_sflow_del_port(struct dpif_sflow *, uint16_t ovs_port);
void dpif_sflow_run(struct dpif_sflow *);
diff --git a/ofproto/ofproto-dpif.c b/ofproto/ofproto-dpif.c
index 5b4f35c..29f28c9 100644
--- a/ofproto/ofproto-dpif.c
+++ b/ofproto/ofproto-dpif.c
@@ -941,7 +941,7 @@ port_construct(struct ofport *port_)
if (ofproto->sflow) {
dpif_sflow_add_port(ofproto->sflow, port->odp_port,
- netdev_get_name(port->up.netdev));
+ netdev_get_name(port->up.netdev), port_);
}
return 0;
@@ -1005,7 +1005,8 @@ set_sflow(struct ofproto *ofproto_,
ds = ofproto->sflow = dpif_sflow_create(ofproto->dpif);
HMAP_FOR_EACH (ofport, up.hmap_node, &ofproto->up.ports) {
dpif_sflow_add_port(ds, ofport->odp_port,
- netdev_get_name(ofport->up.netdev));
+ netdev_get_name(ofport->up.netdev),
+ &ofport->up);
}
ofproto->need_revalidate = true;
}
--
1.7.1
_______________________________________________
dev mailing list
[email protected]
http://openvswitch.org/mailman/listinfo/dev