Right now it's exactly the same as the physical port template,
and there is no way to create a port on anything other than the
netdev.  When the vport_create entry point gets hooked up it will
create lports on top of vport devices, which will use this.

Signed-off-by: Chris Leech <[email protected]>
---

 drivers/scsi/fcoe/fcoe.c |   41 ++++++++++++++++++++++++++++++++++++++++-
 1 files changed, 40 insertions(+), 1 deletions(-)

diff --git a/drivers/scsi/fcoe/fcoe.c b/drivers/scsi/fcoe/fcoe.c
index e380dd2..0cdfd09 100644
--- a/drivers/scsi/fcoe/fcoe.c
+++ b/drivers/scsi/fcoe/fcoe.c
@@ -79,6 +79,7 @@ static struct notifier_block fcoe_notifier = {
 };
 
 static struct scsi_transport_template *fcoe_transport_template;
+static struct scsi_transport_template *fcoe_vport_template;
 
 struct fc_function_template fcoe_transport_function = {
        .show_host_node_name = 1,
@@ -113,6 +114,39 @@ struct fc_function_template fcoe_transport_function = {
        .terminate_rport_io = fc_rport_terminate_io,
 };
 
+struct fc_function_template fcoe_vport_function = {
+       .show_host_node_name = 1,
+       .show_host_port_name = 1,
+       .show_host_supported_classes = 1,
+       .show_host_supported_fc4s = 1,
+       .show_host_active_fc4s = 1,
+       .show_host_maxframe_size = 1,
+
+       .show_host_port_id = 1,
+       .show_host_supported_speeds = 1,
+       .get_host_speed = fc_get_host_speed,
+       .show_host_speed = 1,
+       .show_host_port_type = 1,
+       .get_host_port_state = fc_get_host_port_state,
+       .show_host_port_state = 1,
+       .show_host_symbolic_name = 1,
+
+       .dd_fcrport_size = sizeof(struct fc_rport_libfc_priv),
+       .show_rport_maxframe_size = 1,
+       .show_rport_supported_classes = 1,
+
+       .show_host_fabric_name = 1,
+       .show_starget_node_name = 1,
+       .show_starget_port_name = 1,
+       .show_starget_port_id = 1,
+       .set_rport_dev_loss_tmo = fc_set_rport_loss_tmo,
+       .show_rport_dev_loss_tmo = 1,
+       .get_fc_host_stats = fc_get_host_stats,
+       .issue_fc_host_lip = fcoe_reset,
+
+       .terminate_rport_io = fc_rport_terminate_io,
+};
+
 static struct scsi_host_template fcoe_shost_template = {
        .module = THIS_MODULE,
        .name = "FCoE Driver",
@@ -438,7 +472,10 @@ static int fcoe_shost_config(struct fc_lport *lp, struct 
Scsi_Host *shost,
        lp->host->max_lun = FCOE_MAX_LUN;
        lp->host->max_id = FCOE_MAX_FCP_TARGET;
        lp->host->max_channel = 0;
-       lp->host->transportt = fcoe_transport_template;
+       if (lp->vn_port)
+               lp->host->transportt = fcoe_vport_template;
+       else
+               lp->host->transportt = fcoe_transport_template;
 
        /* add the new host to the SCSI-ml */
        rc = scsi_add_host(lp->host, dev);
@@ -674,6 +711,7 @@ static int __init fcoe_if_init(void)
 {
        /* attach to scsi transport */
        fcoe_transport_template = fc_attach_transport(&fcoe_transport_function);
+       fcoe_vport_template = fc_attach_transport(&fcoe_vport_function);
 
        if (!fcoe_transport_template) {
                printk(KERN_ERR "fcoe: Failed to attach to the FC transport\n");
@@ -691,6 +729,7 @@ static int __init fcoe_if_init(void)
 int __exit fcoe_if_exit(void)
 {
        fc_release_transport(fcoe_transport_template);
+       fc_release_transport(fcoe_vport_template);
        return 0;
 }
 

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

Reply via email to