Lines Matching refs:port

805 	ctl_ha_msg_send(CTL_HA_CHAN_CTL, &msg->port, sizeof(msg->port) + i,
819 ctl_isc_announce_port(struct ctl_port *port)
821 struct ctl_softc *softc = port->ctl_softc;
825 if (port->targ_port < softc->port_min ||
826 port->targ_port >= softc->port_max ||
829 i = sizeof(msg->port) + strlen(port->port_name) + 1;
830 if (port->lun_map)
832 if (port->port_devid)
833 i += port->port_devid->len;
834 if (port->target_devid)
835 i += port->target_devid->len;
836 if (port->init_devid)
837 i += port->init_devid->len;
839 bzero(&msg->port, sizeof(msg->port));
841 msg->hdr.nexus.targ_port = port->targ_port;
842 msg->port.port_type = port->port_type;
843 msg->port.physical_port = port->physical_port;
844 msg->port.virtual_port = port->virtual_port;
845 msg->port.status = port->status;
847 msg->port.name_len = sprintf(&msg->port.data[i],
848 "%d:%s", softc->ha_id, port->port_name) + 1;
849 i += msg->port.name_len;
850 if (port->lun_map) {
851 msg->port.lun_map_len = sizeof(uint32_t) * CTL_MAX_LUNS;
852 memcpy(&msg->port.data[i], port->lun_map,
853 msg->port.lun_map_len);
854 i += msg->port.lun_map_len;
856 if (port->port_devid) {
857 msg->port.port_devid_len = port->port_devid->len;
858 memcpy(&msg->port.data[i], port->port_devid->data,
859 msg->port.port_devid_len);
860 i += msg->port.port_devid_len;
862 if (port->target_devid) {
863 msg->port.target_devid_len = port->target_devid->len;
864 memcpy(&msg->port.data[i], port->target_devid->data,
865 msg->port.target_devid_len);
866 i += msg->port.target_devid_len;
868 if (port->init_devid) {
869 msg->port.init_devid_len = port->init_devid->len;
870 memcpy(&msg->port.data[i], port->init_devid->data,
871 msg->port.init_devid_len);
872 i += msg->port.init_devid_len;
874 ctl_ha_msg_send(CTL_HA_CHAN_CTL, &msg->port, sizeof(msg->port) + i,
880 ctl_isc_announce_iid(struct ctl_port *port, int iid)
882 struct ctl_softc *softc = port->ctl_softc;
886 if (port->targ_port < softc->port_min ||
887 port->targ_port >= softc->port_max ||
893 if (port->wwpn_iid[iid].name)
894 l = strlen(port->wwpn_iid[iid].name) + 1;
903 msg->hdr.nexus.targ_port = port->targ_port;
905 msg->iid.in_use = port->wwpn_iid[iid].in_use;
907 msg->iid.wwpn = port->wwpn_iid[iid].wwpn;
908 if (port->wwpn_iid[iid].name)
909 strlcpy(msg->iid.data, port->wwpn_iid[iid].name, l);
955 struct ctl_port *port;
971 STAILQ_FOREACH(port, &softc->port_list, links) {
972 ctl_isc_announce_port(port);
974 if (port->wwpn_iid[i].in_use)
975 ctl_isc_announce_iid(port, i);
985 struct ctl_port *port;
1008 STAILQ_FOREACH(port, &softc->port_list, links) {
1009 if (port->targ_port >= softc->port_min &&
1010 port->targ_port < softc->port_max)
1012 port->status &= ~CTL_PORT_STATUS_ONLINE;
1014 port->wwpn_iid[i].in_use = 0;
1015 free(port->wwpn_iid[i].name, M_CTL);
1016 port->wwpn_iid[i].name = NULL;
1127 struct ctl_port *port;
1131 port = softc->ctl_ports[msg->hdr.nexus.targ_port];
1132 if (port == NULL) {
1133 CTL_DEBUG_PRINT(("%s: New port %d\n", __func__,
1136 port = malloc(sizeof(*port), M_CTL, M_WAITOK | M_ZERO);
1137 port->frontend = &ha_frontend;
1138 port->targ_port = msg->hdr.nexus.targ_port;
1139 port->fe_datamove = ctl_ha_datamove;
1140 port->fe_done = ctl_ha_done;
1141 } else if (port->frontend == &ha_frontend) {
1142 CTL_DEBUG_PRINT(("%s: Updated port %d\n", __func__,
1146 printf("%s: Received conflicting HA port %d\n",
1150 port->port_type = msg->port.port_type;
1151 port->physical_port = msg->port.physical_port;
1152 port->virtual_port = msg->port.virtual_port;
1153 port->status = msg->port.status;
1155 free(port->port_name, M_CTL);
1156 port->port_name = strndup(&msg->port.data[i], msg->port.name_len,
1158 i += msg->port.name_len;
1159 if (msg->port.lun_map_len != 0) {
1160 if (port->lun_map == NULL)
1161 port->lun_map = malloc(sizeof(uint32_t) * CTL_MAX_LUNS,
1163 memcpy(port->lun_map, &msg->port.data[i],
1165 i += msg->port.lun_map_len;
1167 free(port->lun_map, M_CTL);
1168 port->lun_map = NULL;
1170 if (msg->port.port_devid_len != 0) {
1171 if (port->port_devid == NULL ||
1172 port->port_devid->len != msg->port.port_devid_len) {
1173 free(port->port_devid, M_CTL);
1174 port->port_devid = malloc(sizeof(struct ctl_devid) +
1175 msg->port.port_devid_len, M_CTL, M_WAITOK);
1177 memcpy(port->port_devid->data, &msg->port.data[i],
1178 msg->port.port_devid_len);
1179 port->port_devid->len = msg->port.port_devid_len;
1180 i += msg->port.port_devid_len;
1182 free(port->port_devid, M_CTL);
1183 port->port_devid = NULL;
1185 if (msg->port.target_devid_len != 0) {
1186 if (port->target_devid == NULL ||
1187 port->target_devid->len != msg->port.target_devid_len) {
1188 free(port->target_devid, M_CTL);
1189 port->target_devid = malloc(sizeof(struct ctl_devid) +
1190 msg->port.target_devid_len, M_CTL, M_WAITOK);
1192 memcpy(port->target_devid->data, &msg->port.data[i],
1193 msg->port.target_devid_len);
1194 port->target_devid->len = msg->port.target_devid_len;
1195 i += msg->port.target_devid_len;
1197 free(port->target_devid, M_CTL);
1198 port->target_devid = NULL;
1200 if (msg->port.init_devid_len != 0) {
1201 if (port->init_devid == NULL ||
1202 port->init_devid->len != msg->port.init_devid_len) {
1203 free(port->init_devid, M_CTL);
1204 port->init_devid = malloc(sizeof(struct ctl_devid) +
1205 msg->port.init_devid_len, M_CTL, M_WAITOK);
1207 memcpy(port->init_devid->data, &msg->port.data[i],
1208 msg->port.init_devid_len);
1209 port->init_devid->len = msg->port.init_devid_len;
1210 i += msg->port.init_devid_len;
1212 free(port->init_devid, M_CTL);
1213 port->init_devid = NULL;
1216 if (ctl_port_register(port) != 0) {
1223 if (ctl_lun_map_to_port(port, lun->lun) >= CTL_MAX_LUNS)
1235 struct ctl_port *port;
1238 port = softc->ctl_ports[msg->hdr.nexus.targ_port];
1239 if (port == NULL) {
1240 printf("%s: Received IID for unknown port %d\n",
1245 port->wwpn_iid[iid].in_use = msg->iid.in_use;
1246 port->wwpn_iid[iid].wwpn = msg->iid.wwpn;
1247 free(port->wwpn_iid[iid].name, M_CTL);
1249 port->wwpn_iid[iid].name = strndup(&msg->iid.data[0],
1252 port->wwpn_iid[iid].name = NULL;
1375 printf("port %u, iid %u, lun %u\n",
1673 ctl_est_ua_port(struct ctl_lun *lun, int port, uint32_t except, ctl_ua_type ua)
1678 if (lun->pending_ua[port] == NULL)
1681 if (port * CTL_MAX_INIT_PER_PORT + i == except)
1683 lun->pending_ua[port][i] |= ua;
1994 * Remove an initiator by port number and initiator ID.
1998 ctl_remove_initiator(struct ctl_port *port, int iid)
2000 struct ctl_softc *softc = port->ctl_softc;
2011 port->wwpn_iid[iid].in_use--;
2012 port->wwpn_iid[iid].last_use = time_uptime;
2014 ctl_isc_announce_iid(port, iid);
2024 ctl_add_initiator(struct ctl_port *port, int iid, uint64_t wwpn, char *name)
2026 struct ctl_softc *softc = port->ctl_softc;
2043 if (wwpn != 0 && wwpn == port->wwpn_iid[i].wwpn) {
2047 if (name != NULL && port->wwpn_iid[i].name != NULL &&
2048 strcmp(name, port->wwpn_iid[i].name) == 0) {
2057 if (port->wwpn_iid[i].in_use == 0 &&
2058 port->wwpn_iid[i].wwpn == 0 &&
2059 port->wwpn_iid[i].name == NULL) {
2070 if (port->wwpn_iid[i].in_use == 0) {
2071 if (port->wwpn_iid[i].last_use < best_time) {
2073 best_time = port->wwpn_iid[i].last_use;
2086 if (port->wwpn_iid[iid].in_use > 0 && (wwpn != 0 || name != NULL)) {
2090 if (wwpn != 0 && wwpn == port->wwpn_iid[iid].wwpn) {
2092 printf("%s: port %d iid %u WWPN %#jx arrived"
2093 " again\n", __func__, port->targ_port,
2098 if (name != NULL && port->wwpn_iid[iid].name != NULL &&
2099 strcmp(name, port->wwpn_iid[iid].name) == 0) {
2101 printf("%s: port %d iid %u name '%s' arrived"
2102 " again\n", __func__, port->targ_port,
2113 printf("%s: port %d iid %u WWPN %#jx '%s' arrived,"
2115 __func__, port->targ_port, iid, wwpn, name,
2116 (uintmax_t)port->wwpn_iid[iid].wwpn,
2117 port->wwpn_iid[iid].name);
2125 free(port->wwpn_iid[iid].name, M_CTL);
2126 port->wwpn_iid[iid].name = name;
2127 port->wwpn_iid[iid].wwpn = wwpn;
2128 port->wwpn_iid[iid].in_use++;
2130 ctl_isc_announce_iid(port, iid);
2136 ctl_create_iid(struct ctl_port *port, int iid, uint8_t *buf)
2140 switch (port->port_type) {
2145 if (port->wwpn_iid[iid].wwpn == 0)
2149 scsi_u64to8b(port->wwpn_iid[iid].wwpn, id->n_port_name);
2156 if (port->wwpn_iid[iid].name == NULL)
2161 len = strlcpy(id->iscsi_name, port->wwpn_iid[iid].name, 252) + 1;
2170 if (port->wwpn_iid[iid].wwpn == 0)
2174 scsi_u64to8b(port->wwpn_iid[iid].wwpn, id->sas_address);
2184 scsi_ulto2b(port->targ_port, id->rel_trgt_port_id);
2203 struct ctl_port *port;
2212 /* Make sure that we know about this port. */
2213 port = ctl_io_port(&ctsio->io_hdr);
2214 if (port == NULL || (port->status & CTL_PORT_STATUS_ONLINE) == 0) {
2567 struct ctl_port *port;
2573 STAILQ_FOREACH(port, &softc->port_list, links) {
2576 if (port->targ_port < softc->port_min ||
2577 port->targ_port >= softc->port_max)
2583 && (entry->targ_port == port->targ_port)) {
2586 * disable or set WWNs on a specific port,
2591 } else if (entry->port_type & port->port_type) {
2622 ctl_port_online(port);
2626 ctl_port_offline(port);
2629 ctl_port_set_wwns(port,
2898 struct ctl_port *port;
2916 printf(" LUN %d port %d iid %d key "
2924 STAILQ_FOREACH(port, &softc->port_list, links) {
2926 "%#jx WWPN %#jx\n", port->targ_port, port->port_name,
2927 port->frontend->name, port->port_type,
2928 port->physical_port, port->virtual_port,
2929 (uintmax_t)port->wwnn, (uintmax_t)port->wwpn);
2931 if (port->wwpn_iid[j].in_use == 0 &&
2932 port->wwpn_iid[j].wwpn == 0 &&
2933 port->wwpn_iid[j].name == NULL)
2937 j, port->wwpn_iid[j].in_use,
2938 (uintmax_t)port->wwpn_iid[j].wwpn,
2939 port->wwpn_iid[j].name);
3214 struct ctl_port *port;
3234 STAILQ_FOREACH(port, &softc->port_list, links) {
3236 (uintmax_t)port->targ_port);
3246 "</frontend_type>\n", port->frontend->name);
3251 port->port_type);
3256 (port->status & CTL_PORT_STATUS_ONLINE) ? "YES" : "NO");
3261 port->port_name);
3266 port->physical_port);
3271 port->virtual_port);
3275 if (port->target_devid != NULL) {
3277 ctl_id_sbuf(port->target_devid, sb);
3281 if (port->port_devid != NULL) {
3282 sbuf_printf(sb, "\t<port>");
3283 ctl_id_sbuf(port->port_devid, sb);
3284 sbuf_printf(sb, "</port>\n");
3287 if (port->port_info != NULL) {
3288 retval = port->port_info(port->onoff_arg, sb);
3292 STAILQ_FOREACH(opt, &port->options, links) {
3299 if (port->lun_map != NULL) {
3302 plun = ctl_lun_map_from_port(port, j);
3312 if (port->wwpn_iid[j].in_use == 0 ||
3313 (port->wwpn_iid[j].wwpn == 0 &&
3314 port->wwpn_iid[j].name == NULL))
3317 if (port->wwpn_iid[j].name != NULL)
3320 j, port->wwpn_iid[j].name);
3324 j, port->wwpn_iid[j].wwpn);
3360 struct ctl_port *port;
3363 if (lm->port < softc->port_min ||
3364 lm->port >= softc->port_max ||
3365 (port = softc->ctl_ports[lm->port]) == NULL) {
3369 if (port->status & CTL_PORT_STATUS_ONLINE) {
3371 if (ctl_lun_map_to_port(port, lun->lun) >=
3375 ctl_est_ua_port(lun, lm->port, -1,
3383 retval = ctl_lun_map_unset(port, lm->plun);
3386 retval = ctl_lun_map_set(port, lm->plun, lm->lun);
3391 retval = ctl_lun_map_deinit(port);
3393 retval = ctl_lun_map_init(port);
3396 if (port->status & CTL_PORT_STATUS_ONLINE)
3397 ctl_isc_announce_port(port);
3444 ctl_lun_map_init(struct ctl_port *port)
3446 struct ctl_softc *softc = port->ctl_softc;
3450 if (port->lun_map == NULL)
3451 port->lun_map = malloc(sizeof(uint32_t) * CTL_MAX_LUNS,
3453 if (port->lun_map == NULL)
3456 port->lun_map[i] = UINT32_MAX;
3457 if (port->status & CTL_PORT_STATUS_ONLINE) {
3458 if (port->lun_disable != NULL) {
3460 port->lun_disable(port->targ_lun_arg, lun->lun);
3462 ctl_isc_announce_port(port);
3468 ctl_lun_map_deinit(struct ctl_port *port)
3470 struct ctl_softc *softc = port->ctl_softc;
3473 if (port->lun_map == NULL)
3475 free(port->lun_map, M_CTL);
3476 port->lun_map = NULL;
3477 if (port->status & CTL_PORT_STATUS_ONLINE) {
3478 if (port->lun_enable != NULL) {
3480 port->lun_enable(port->targ_lun_arg, lun->lun);
3482 ctl_isc_announce_port(port);
3488 ctl_lun_map_set(struct ctl_port *port, uint32_t plun, uint32_t glun)
3493 if (port->lun_map == NULL) {
3494 status = ctl_lun_map_init(port);
3498 old = port->lun_map[plun];
3499 port->lun_map[plun] = glun;
3500 if ((port->status & CTL_PORT_STATUS_ONLINE) && old >= CTL_MAX_LUNS) {
3501 if (port->lun_enable != NULL)
3502 port->lun_enable(port->targ_lun_arg, plun);
3503 ctl_isc_announce_port(port);
3509 ctl_lun_map_unset(struct ctl_port *port, uint32_t plun)
3513 if (port->lun_map == NULL)
3515 old = port->lun_map[plun];
3516 port->lun_map[plun] = UINT32_MAX;
3517 if ((port->status & CTL_PORT_STATUS_ONLINE) && old < CTL_MAX_LUNS) {
3518 if (port->lun_disable != NULL)
3519 port->lun_disable(port->targ_lun_arg, plun);
3520 ctl_isc_announce_port(port);
3526 ctl_lun_map_from_port(struct ctl_port *port, uint32_t lun_id)
3529 if (port == NULL)
3531 if (port->lun_map == NULL || lun_id >= CTL_MAX_LUNS)
3533 return (port->lun_map[lun_id]);
3537 ctl_lun_map_to_port(struct ctl_port *port, uint32_t lun_id)
3541 if (port == NULL)
3543 if (port->lun_map == NULL)
3546 if (port->lun_map[i] == lun_id)
4702 struct ctl_port *port, *nport;
4723 STAILQ_FOREACH_SAFE(port, &softc->port_list, links, nport) {
4724 if ((port->status & CTL_PORT_STATUS_ONLINE) == 0 ||
4725 port->lun_map != NULL || port->lun_enable == NULL)
4734 retval = port->lun_enable(port->targ_lun_arg, lun->lun);
4737 printf("%s: FETD %s port %d returned error "
4739 __func__, port->port_name, port->targ_port,
4754 struct ctl_port *port;
4771 STAILQ_FOREACH(port, &softc->port_list, links) {
4772 if ((port->status & CTL_PORT_STATUS_ONLINE) == 0 ||
4773 port->lun_map != NULL || port->lun_disable == NULL)
4784 retval = port->lun_disable(port->targ_lun_arg, lun->lun);
4787 printf("%s: FETD %s port %d returned error "
4789 __func__, port->port_name, port->targ_port,
7157 struct ctl_port *port;
7191 STAILQ_FOREACH(port, &softc->port_list, links) {
7192 if ((port->status & CTL_PORT_STATUS_ONLINE) == 0)
7194 if (ctl_lun_map_to_port(port, lun->lun) >= CTL_MAX_LUNS)
7197 if (port->status & CTL_PORT_STATUS_HA_SHARED)
7280 STAILQ_FOREACH(port, &softc->port_list, links) {
7281 if ((port->status & CTL_PORT_STATUS_ONLINE) == 0)
7284 (port->status & CTL_PORT_STATUS_HA_SHARED) == 0)
7286 if (ctl_lun_map_to_port(port, lun->lun) >= CTL_MAX_LUNS)
7288 scsi_ulto2b(port->targ_port, tpg_desc->descriptors[pc].
7303 STAILQ_FOREACH(port, &softc->port_list, links) {
7304 if (port->targ_port < g * softc->port_cnt ||
7305 port->targ_port >= (g + 1) * softc->port_cnt)
7307 if ((port->status & CTL_PORT_STATUS_ONLINE) == 0)
7309 if (port->status & CTL_PORT_STATUS_HA_SHARED)
7311 if (ctl_lun_map_to_port(port, lun->lun) >= CTL_MAX_LUNS)
7313 scsi_ulto2b(port->targ_port, tpg_desc->descriptors[pc].
7776 struct ctl_port *port;
7815 port = softc->ctl_ports[i / CTL_MAX_INIT_PER_PORT];
7816 if (port != NULL)
7817 len = ctl_create_iid(port,
9096 struct ctl_port *port;
9104 port = ctl_io_port(&ctsio->io_hdr);
9105 softc = port->ctl_softc;
9112 if (ctl_lun_map_from_port(port, targ_lun_id) < CTL_MAX_LUNS)
9171 lun_id = ctl_lun_map_from_port(port, targ_lun_id);
9681 struct ctl_port *port;
9687 port = ctl_io_port(&ctsio->io_hdr);
9697 if (port && port->port_devid)
9698 data_len += port->port_devid->len;
9699 if (port && port->target_devid)
9700 data_len += port->target_devid->len;
9731 if (port && port->port_type == CTL_PORT_FC)
9733 else if (port && port->port_type == CTL_PORT_ISCSI)
9750 * This is for the WWPN which is a port association.
9752 if (port && port->port_devid) {
9753 memcpy(desc, port->port_devid->data, port->port_devid->len);
9755 port->port_devid->len);
9777 (port && port->status & CTL_PORT_STATUS_HA_SHARED))
9788 if (port && port->target_devid) {
9789 memcpy(desc, port->target_devid->data, port->target_devid->len);
9807 struct ctl_port *port;
9816 STAILQ_FOREACH(port, &softc->port_list, links) {
9817 if ((port->status & CTL_PORT_STATUS_ONLINE) == 0)
9820 ctl_lun_map_to_port(port, lun->lun) >= CTL_MAX_LUNS)
9823 if (port->init_devid)
9824 iid_len += port->init_devid->len;
9825 if (port->port_devid)
9826 id_len += port->port_devid->len;
9867 STAILQ_FOREACH(port, &softc->port_list, links) {
9868 if ((port->status & CTL_PORT_STATUS_ONLINE) == 0)
9871 ctl_lun_map_to_port(port, lun->lun) >= CTL_MAX_LUNS)
9873 scsi_ulto2b(port->targ_port, pd->relative_port_id);
9874 if (port->init_devid) {
9875 iid_len = port->init_devid->len;
9877 port->init_devid->data, port->init_devid->len);
9883 if (port->port_devid) {
9884 id_len = port->port_devid->len;
9886 port->port_devid->data, port->port_devid->len);
10158 struct ctl_port *port;
10164 port = ctl_io_port(&ctsio->io_hdr);
10165 port_type = port->port_type;
11887 struct ctl_port *port;
11908 port = ctl_io_port(&io->io_hdr);
11910 if (port != NULL &&
11911 ctl_lun_map_to_port(port, lun->lun) >= CTL_MAX_LUNS)
11930 * 5.7.2 When a SCSI initiator port aborts its own tasks
11932 * When a SCSI initiator port causes its own task(s) to be aborted, no
11934 * the SCSI initiator port other than the completion response for the
12034 * The target port, initiator ID, tag type and tag number have to
12180 * The target port, initiator ID, tag type and tag number have to
12703 * This command has been aborted. Set the port status, so we fail
13356 struct ctl_port *port;
13377 port = ctl_io_port(&ctsio->io_hdr);
13378 targ_lun = ctl_lun_map_from_port(port, io->io_hdr.nexus.targ_lun);
13418 struct ctl_port *port;
13428 port = ctl_io_port(&io->io_hdr);
13430 ctl_lun_map_from_port(port, io->io_hdr.nexus.targ_lun);