--- 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 dev@openvswitch.org http://openvswitch.org/mailman/listinfo/dev