Add an fcoestat command to list fcoe interfaces.
Listed information is currently just netdev name, portname and nodename.
fcoestat is enabled by NET_PROTO_FCOE

diff --git a/src/config/config_ethernet.c b/src/config/config_ethernet.c
index d13bd61..559b43d 100644
--- a/src/config/config_ethernet.c
+++ b/src/config/config_ethernet.c
@@ -23,4 +23,5 @@ REQUIRE_OBJECT ( aoe );
 #endif
 #ifdef NET_PROTO_FCOE
 REQUIRE_OBJECT ( fcoe );
+REQUIRE_OBJECT ( fcoemgmt_cmd );
 #endif
diff --git a/src/hci/commands/fcoemgmt_cmd.c b/src/hci/commands/fcoemgmt_cmd.c
new file mode 100644
index 0000000..a47a9d1
--- /dev/null
+++ b/src/hci/commands/fcoemgmt_cmd.c
@@ -0,0 +1,89 @@
+/* 
+ * Based on fcmgmt_cmd.c by:
+ * Copyright (C) 2010 Michael Brown <[email protected]>.
+ * FCoE code added by:
+ * Steven Clark <[email protected]>
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of the
+ * License, or any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ */
+
+FILE_LICENCE ( GPL2_OR_LATER );
+
+#include <stdio.h>
+#include <errno.h>
+#include <getopt.h>
+#include <strings.h>
+#include <ipxe/command.h>
+#include <ipxe/parseopt.h>
+#include <ipxe/tables.h>
+#include <ipxe/fcoe.h>
+
+/** @file
+ *
+ * FCoE management commands
+ *
+ */
+
+/**
+ * Print status of FCoE port
+ * 
+ * @v port         FCoE port
+ */
+void fcoeportstat ( struct fcoe_port *port ) { 
+       printf ("%s: port %s", port->netdev->name,
+               fc_ntoa(&port->port_wwn.fc));
+       printf ("      node %s\n", fc_ntoa(&port->node_wwn.fc));
+}
+
+/** "fcoestat" options */
+struct fcoestat_options {};
+
+/** "fcoestat" option list */
+static struct option_descriptor fcoestat_opts[] = {};
+
+/** "fcoestat" command descriptor */
+static struct command_descriptor fcoestat_cmd =
+       COMMAND_DESC ( struct fcoestat_options, fcoestat_opts, 0, 0, "" );
+
+/**
+ * The "fcoestat" command
+ *
+ * @v argc             Argument count
+ * @v argv             Argument list
+ * @ret rc             Return status code
+ */
+static int fcoestat_exec ( int argc, char **argv ) {
+       struct fcoestat_options opts;
+       struct fcoe_port *port;
+       int rc;
+
+       /* Parse options */
+       if ( ( rc = parse_options ( argc, argv, &fcoestat_cmd, &opts ) ) != 0 )
+               return rc;
+
+       list_for_each_entry ( port, &fcoe_ports, list )
+               fcoeportstat ( port );
+
+       return 0;
+}
+
+
+/** FCoE management commands */
+struct command fcoemgmt_commands[] __command = {
+       {
+               .name = "fcoestat",
+               .exec = fcoestat_exec,
+       },
+};
diff --git a/src/include/ipxe/fcoe.h b/src/include/ipxe/fcoe.h
index 6ba5b40..6d4eff3 100644
--- a/src/include/ipxe/fcoe.h
+++ b/src/include/ipxe/fcoe.h
@@ -13,6 +13,7 @@ FILE_LICENCE ( GPL2_OR_LATER );
 #include <stdint.h>
 #include <ipxe/fc.h>
 #include <ipxe/if_ether.h>
+#include <ipxe/netdevice.h>
 
 /** An FCoE name */
 union fcoe_name {
@@ -89,4 +90,54 @@ enum fcoe_eof {
 /** FCoE VLAN priority */
 #define FCOE_VLAN_PRIORITY 3
 
+/** An FCoE port */
+struct fcoe_port {
+       /** Reference count */
+       struct refcnt refcnt;
+       /** List of FCoE ports */
+       struct list_head list;
+       /** Transport interface */
+       struct interface transport;
+       /** Network device */
+       struct net_device *netdev;
+
+       /** Node WWN */
+       union fcoe_name node_wwn;
+       /** Port WWN */
+       union fcoe_name port_wwn;
+
+       /** FIP retransmission timer */
+       struct retry_timer timer;
+       /** FIP timeout counter */
+       unsigned int timeouts;
+       /** Flags */
+       unsigned int flags;
+       /** FCoE forwarder priority */
+       unsigned int priority;
+       /** Keepalive delay (in ms) */
+       unsigned int keepalive;
+       /** FCoE forwarder MAC address */
+       uint8_t fcf_mac[ETH_ALEN];
+       /** Local MAC address */
+       uint8_t local_mac[ETH_ALEN];
+};
+
+/** FCoE flags */
+enum fcoe_flags {
+       /** Underlying network device is available */
+       FCOE_HAVE_NETWORK = 0x0001,
+       /** We have selected an FCoE forwarder to use */
+       FCOE_HAVE_FCF = 0x0002,
+       /** We have a FIP-capable FCoE forwarder available to be used */
+       FCOE_HAVE_FIP_FCF = 0x0004,
+       /** FCoE forwarder supports server-provided MAC addresses */
+       FCOE_FCF_ALLOWS_SPMA = 0x0008,
+       /** An alternative VLAN has been found */
+       FCOE_VLAN_FOUND = 0x0010,
+       /** VLAN discovery has timed out */
+       FCOE_VLAN_TIMED_OUT = 0x0020,
+};
+
+extern struct list_head fcoe_ports;
+
 #endif /* _IPXE_FCOE_H */
diff --git a/src/net/fcoe.c b/src/net/fcoe.c
index c54d1b4..0eaeca7 100644
--- a/src/net/fcoe.c
+++ b/src/net/fcoe.c
@@ -62,54 +62,6 @@ FEATURE ( FEATURE_PROTOCOL, "FCoE", DHCP_EB_FEATURE_FCOE, 1 
);
 #define EINFO_EINVAL_EOF \
        __einfo_uniqify ( EINFO_EINVAL, 0x04, "Invalid EoF delimiter" )
 
-/** An FCoE port */
-struct fcoe_port {
-       /** Reference count */
-       struct refcnt refcnt;
-       /** List of FCoE ports */
-       struct list_head list;
-       /** Transport interface */
-       struct interface transport;
-       /** Network device */
-       struct net_device *netdev;
-
-       /** Node WWN */
-       union fcoe_name node_wwn;
-       /** Port WWN */
-       union fcoe_name port_wwn;
-
-       /** FIP retransmission timer */
-       struct retry_timer timer;
-       /** FIP timeout counter */
-       unsigned int timeouts;
-       /** Flags */
-       unsigned int flags;
-       /** FCoE forwarder priority */
-       unsigned int priority;
-       /** Keepalive delay (in ms) */
-       unsigned int keepalive;
-       /** FCoE forwarder MAC address */
-       uint8_t fcf_mac[ETH_ALEN];
-       /** Local MAC address */
-       uint8_t local_mac[ETH_ALEN];
-};
-
-/** FCoE flags */
-enum fcoe_flags {
-       /** Underlying network device is available */
-       FCOE_HAVE_NETWORK = 0x0001,
-       /** We have selected an FCoE forwarder to use */
-       FCOE_HAVE_FCF = 0x0002,
-       /** We have a FIP-capable FCoE forwarder available to be used */
-       FCOE_HAVE_FIP_FCF = 0x0004,
-       /** FCoE forwarder supports server-provided MAC addresses */
-       FCOE_FCF_ALLOWS_SPMA = 0x0008,
-       /** An alternative VLAN has been found */
-       FCOE_VLAN_FOUND = 0x0010,
-       /** VLAN discovery has timed out */
-       FCOE_VLAN_TIMED_OUT = 0x0020,
-};
-
 struct net_protocol fcoe_protocol __net_protocol;
 struct net_protocol fip_protocol __net_protocol;
 
@@ -148,7 +100,7 @@ static uint8_t default_fcf_mac[ETH_ALEN] =
 #define FCOE_MAX_FIP_MISSING_KEEPALIVES 4
 
 /** List of FCoE ports */
-static LIST_HEAD ( fcoe_ports );
+LIST_HEAD ( fcoe_ports );
 
 /******************************************************************************
  *
_______________________________________________
ipxe-devel mailing list
[email protected]
https://lists.ipxe.org/mailman/listinfo.cgi/ipxe-devel

Reply via email to