These stats are per LLD, i.e., per netdev, and stored in lport's
fcoe_lld_stats struct.

Signed-off-by: Yi Zou <[email protected]>
---

 drivers/scsi/fcoe/fcoe.c |   24 ++++++++++++++++++++++++
 include/scsi/libfc.h     |    6 ++++++
 2 files changed, 30 insertions(+), 0 deletions(-)

diff --git a/drivers/scsi/fcoe/fcoe.c b/drivers/scsi/fcoe/fcoe.c
index 4a43b74..901963a 100644
--- a/drivers/scsi/fcoe/fcoe.c
+++ b/drivers/scsi/fcoe/fcoe.c
@@ -110,6 +110,8 @@ static struct fc_seq *fcoe_elsct_send(struct fc_lport *,
                                                   void *),
                                      void *, u32 timeout);
 
+static int fcoe_get_lld_stats(struct fc_lport *, struct fcoe_lld_stats *);
+
 module_param_call(create, fcoe_create, NULL, NULL, S_IWUSR);
 __MODULE_PARM_TYPE(create, "string");
 MODULE_PARM_DESC(create, "Create fcoe fcoe using net device passed in.");
@@ -140,6 +142,7 @@ static struct libfc_function_template fcoe_libfc_fcn_templ 
= {
        .ddp_setup = fcoe_ddp_setup,
        .ddp_done = fcoe_ddp_done,
        .elsct_send = fcoe_elsct_send,
+       .lld_stats = fcoe_get_lld_stats,
 };
 
 struct fc_function_template fcoe_transport_function = {
@@ -2430,3 +2433,24 @@ static void fcoe_set_vport_symbolic_name(struct fc_vport 
*vport)
        lport->tt.elsct_send(lport, FC_FID_DIR_SERV, fp, FC_NS_RSPN_ID,
                             NULL, NULL, 3 * lport->r_a_tov);
 }
+
+/**
+ * fcoe_get_lld_stats() - Updates fcoe_dev_stats for LLD
+ * related stats, e.g., frame check sequence error.
+ * @lp: The local port
+ *
+ * Returns : 0 for success
+ */
+static int fcoe_get_lld_stats(struct fc_lport *lport,
+                             struct fcoe_lld_stats *lld_stats)
+{
+       struct net_device *netdev = fcoe_netdev(lport);
+       const struct net_device_stats *net_stats;
+
+       net_stats = dev_get_stats(netdev);
+
+       lld_stats->SymbolErrorCount = 0;
+       lld_stats->ErroredBlockCount = 0;
+       lld_stats->FCSErrorCount = net_stats->rx_crc_errors;
+       return 0;
+}
diff --git a/include/scsi/libfc.h b/include/scsi/libfc.h
index 3d9b49f..a447ac6 100644
--- a/include/scsi/libfc.h
+++ b/include/scsi/libfc.h
@@ -523,6 +523,12 @@ struct libfc_function_template {
         */
        int (*ddp_done)(struct fc_lport *, u16);
        /*
+        * Allow LLD to pass the statistics to libfc
+        *
+        * STATUS: OPTIONAL
+        */
+       int (*lld_stats)(struct fc_lport *, struct fcoe_lld_stats *);
+       /*
         * Send a frame using an existing sequence and exchange.
         *
         * STATUS: OPTIONAL

_______________________________________________
devel mailing list
[email protected]
http://www.open-fcoe.org/mailman/listinfo/devel

Reply via email to