---
 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

Reply via email to