fa9e4066f08beec538e775443c5be79dd423fcabahrens * CDDL HEADER START
fa9e4066f08beec538e775443c5be79dd423fcabahrens * The contents of this file are subject to the terms of the
441d80aa4f613b6298fc8bd3151f4be02dbf84fclling * Common Development and Distribution License (the "License").
441d80aa4f613b6298fc8bd3151f4be02dbf84fclling * You may not use this file except in compliance with the License.
fa9e4066f08beec538e775443c5be79dd423fcabahrens * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
fa9e4066f08beec538e775443c5be79dd423fcabahrens * See the License for the specific language governing permissions
fa9e4066f08beec538e775443c5be79dd423fcabahrens * and limitations under the License.
fa9e4066f08beec538e775443c5be79dd423fcabahrens * When distributing Covered Code, include this CDDL HEADER in each
fa9e4066f08beec538e775443c5be79dd423fcabahrens * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
fa9e4066f08beec538e775443c5be79dd423fcabahrens * If applicable, add the following below this CDDL HEADER, with the
fa9e4066f08beec538e775443c5be79dd423fcabahrens * fields enclosed by brackets "[]" replaced with your own identifying
fa9e4066f08beec538e775443c5be79dd423fcabahrens * information: Portions Copyright [yyyy] [name of copyright owner]
fa9e4066f08beec538e775443c5be79dd423fcabahrens * CDDL HEADER END
18ce54df8809e9f672d0ed1a53e99669df0a6df0ek * Copyright 2008 Sun Microsystems, Inc. All rights reserved.
fa9e4066f08beec538e775443c5be79dd423fcabahrens * Use is subject to license terms.
fa9e4066f08beec538e775443c5be79dd423fcabahrens * global variables.
fa9e4066f08beec538e775443c5be79dd423fcabahrens * local variables.
b7b97454b9b1f6625e7e655e9651e744a8dee09dperrin * external variables.
fa9e4066f08beec538e775443c5be79dd423fcabahrensextern const int UID_ATTR_INDEX[MAX_OBJ_TYPE_FOR_SIZE];
fa9e4066f08beec538e775443c5be79dd423fcabahrensstatic scn_raw_t *(*const make_raw[MAX_OBJ_TYPE_FOR_SIZE])(isns_obj_t *) = {
fa9e4066f08beec538e775443c5be79dd423fcabahrensstatic scn_text_t *(*const scn_gen[MAX_OBJ_TYPE_FOR_SIZE])(scn_raw_t *) = {
65cd9f2809a015b46790a9c5c2ef992d56177624eschrock (((E) & (BITMAP)) && \
b1b8ab34de515a5e83206da22c3d7e563241b021lling * local functions.
fa9e4066f08beec538e775443c5be79dd423fcabahrens * ****************************************************************************
fa9e4066f08beec538e775443c5be79dd423fcabahrens * free_portal_1:
65cd9f2809a015b46790a9c5c2ef992d56177624eschrock * Free one SCN portal or decrease the reference count if the portal
fa9e4066f08beec538e775443c5be79dd423fcabahrens * is referenced by other SCN entry(s).
fa9e4066f08beec538e775443c5be79dd423fcabahrens * p - the portal.
ea8dc4b6d2251b437950c0056bc626b311c73c27eschrock * ****************************************************************************
65cd9f2809a015b46790a9c5c2ef992d56177624eschrock * ****************************************************************************
ea8dc4b6d2251b437950c0056bc626b311c73c27eschrock * free_portal:
fa9e4066f08beec538e775443c5be79dd423fcabahrens * Free the unused portals, which are extracted for new SCN entry,
65cd9f2809a015b46790a9c5c2ef992d56177624eschrock * after the new SCN entry is added.
65cd9f2809a015b46790a9c5c2ef992d56177624eschrock * p - the portal.
65cd9f2809a015b46790a9c5c2ef992d56177624eschrock * ****************************************************************************
fa9e4066f08beec538e775443c5be79dd423fcabahrens while (p != NULL) {
65cd9f2809a015b46790a9c5c2ef992d56177624eschrock * ****************************************************************************
65cd9f2809a015b46790a9c5c2ef992d56177624eschrock * free_portal_list:
65cd9f2809a015b46790a9c5c2ef992d56177624eschrock * Free the list of portals while a SCN entry is being destroyed.
65cd9f2809a015b46790a9c5c2ef992d56177624eschrock * l - the portal list.
ea8dc4b6d2251b437950c0056bc626b311c73c27eschrock * ****************************************************************************
65cd9f2809a015b46790a9c5c2ef992d56177624eschrock while (l != NULL) {
65cd9f2809a015b46790a9c5c2ef992d56177624eschrock * ****************************************************************************
65cd9f2809a015b46790a9c5c2ef992d56177624eschrock * free_scn_text:
65cd9f2809a015b46790a9c5c2ef992d56177624eschrock * Free one SCN or decrease the ref count after the SCN is emitted.
990b4856d0eaada6f8140335733a1b1771ed2746lling * text - the SCN.
441d80aa4f613b6298fc8bd3151f4be02dbf84fclling * ****************************************************************************
b1b8ab34de515a5e83206da22c3d7e563241b021lling * ****************************************************************************
b1b8ab34de515a5e83206da22c3d7e563241b021lling * free_scn_list:
b1b8ab34de515a5e83206da22c3d7e563241b021lling * Free the the list of SCN.
65cd9f2809a015b46790a9c5c2ef992d56177624eschrock * scn - the list.
65cd9f2809a015b46790a9c5c2ef992d56177624eschrock * ****************************************************************************
b1b8ab34de515a5e83206da22c3d7e563241b021lling * ****************************************************************************
fa9e4066f08beec538e775443c5be79dd423fcabahrens * free_scn:
fa9e4066f08beec538e775443c5be79dd423fcabahrens * Free all of SCNs which are dispatched to every entry.
fa9e4066f08beec538e775443c5be79dd423fcabahrens * ****************************************************************************
fa9e4066f08beec538e775443c5be79dd423fcabahrens while (p != NULL) {
fa9e4066f08beec538e775443c5be79dd423fcabahrens * ****************************************************************************
fa9e4066f08beec538e775443c5be79dd423fcabahrens * free_entry:
fa9e4066f08beec538e775443c5be79dd423fcabahrens * Free one SCN entry.
65cd9f2809a015b46790a9c5c2ef992d56177624eschrock * e - the SCN entry.
fa9e4066f08beec538e775443c5be79dd423fcabahrens * ****************************************************************************
990b4856d0eaada6f8140335733a1b1771ed2746lling * ****************************************************************************
b1b8ab34de515a5e83206da22c3d7e563241b021lling * free_raw:
e9dbad6f263d5570ed7ff5443ec5b958af8c24d7eschrock * Free the raw data after the SCN is generated from it.
e9dbad6f263d5570ed7ff5443ec5b958af8c24d7eschrock * raw - the raw SCN data.
e9dbad6f263d5570ed7ff5443ec5b958af8c24d7eschrock * ****************************************************************************
fa9e4066f08beec538e775443c5be79dd423fcabahrens * ****************************************************************************
fa9e4066f08beec538e775443c5be79dd423fcabahrens * scn_add_portal:
fa9e4066f08beec538e775443c5be79dd423fcabahrens * Add portals to the portal list of a SCN entry.
afefbcddfd8caf5f3b2da510d9439471ab225040eschrock * e - the SCN entry.
8654d0253136055bd4cc2423d87378e8a37f2eb5perrin * p - the portals.
8654d0253136055bd4cc2423d87378e8a37f2eb5perrin * return - 0: successful, otherwise failed.
8654d0253136055bd4cc2423d87378e8a37f2eb5perrin * ****************************************************************************
990b4856d0eaada6f8140335733a1b1771ed2746lling while (p != NULL) {
990b4856d0eaada6f8140335733a1b1771ed2746lling if (m == NULL) {
990b4856d0eaada6f8140335733a1b1771ed2746lling return (1);
990b4856d0eaada6f8140335733a1b1771ed2746lling while (e && !found_it) {
990b4856d0eaada6f8140335733a1b1771ed2746lling while (l && !found_it) {
990b4856d0eaada6f8140335733a1b1771ed2746lling return (0);
990b4856d0eaada6f8140335733a1b1771ed2746lling * ****************************************************************************
990b4856d0eaada6f8140335733a1b1771ed2746lling * scn_remove_portal:
990b4856d0eaada6f8140335733a1b1771ed2746lling * Remove a portal from the portal list of every SCN entry.
fa9e4066f08beec538e775443c5be79dd423fcabahrens * uid - the portal object uid.
fa9e4066f08beec538e775443c5be79dd423fcabahrens * return - always successful (0).
fa9e4066f08beec538e775443c5be79dd423fcabahrens * ****************************************************************************
fa9e4066f08beec538e775443c5be79dd423fcabahrens while (e != NULL) {
fa9e4066f08beec538e775443c5be79dd423fcabahrens while (l != NULL) {
fa9e4066f08beec538e775443c5be79dd423fcabahrens /* remove it */
fa9e4066f08beec538e775443c5be79dd423fcabahrens /* no portal for this entry, destroy it */
99653d4ee642c6528e88224f12409a5f23060994eschrock return (0);
99653d4ee642c6528e88224f12409a5f23060994eschrock * ****************************************************************************
fa9e4066f08beec538e775443c5be79dd423fcabahrens * scn_list_add:
fa9e4066f08beec538e775443c5be79dd423fcabahrens * Add one SCN entry to the SCN entry list.
fa9e4066f08beec538e775443c5be79dd423fcabahrens * e - the SCN entry.
fa9e4066f08beec538e775443c5be79dd423fcabahrens * return - always successful (0).
99653d4ee642c6528e88224f12409a5f23060994eschrock * ****************************************************************************
fa9e4066f08beec538e775443c5be79dd423fcabahrens while (*pp) {
fa9e4066f08beec538e775443c5be79dd423fcabahrens /* replace the bitmap */
fa9e4066f08beec538e775443c5be79dd423fcabahrens return (0);
8654d0253136055bd4cc2423d87378e8a37f2eb5perrin (void) scn_add_portal(e, p);
8654d0253136055bd4cc2423d87378e8a37f2eb5perrin /* insert it to the list */
8654d0253136055bd4cc2423d87378e8a37f2eb5perrin /* no portal, ignore it */
fa9e4066f08beec538e775443c5be79dd423fcabahrens /* free the unused portal(s) */
fa9e4066f08beec538e775443c5be79dd423fcabahrens return (0);
99653d4ee642c6528e88224f12409a5f23060994eschrock * ****************************************************************************
99653d4ee642c6528e88224f12409a5f23060994eschrock * scn_list_remove:
99653d4ee642c6528e88224f12409a5f23060994eschrock * Remove one SCN entry from the SCN entry list.
fa94a07fd0519b8abfd871ad8fe60e6bebe1e2bbbrendan * uid - the SCN entry unique ID.
99653d4ee642c6528e88224f12409a5f23060994eschrock * return - always successful (0).
fa94a07fd0519b8abfd871ad8fe60e6bebe1e2bbbrendan * ****************************************************************************
99653d4ee642c6528e88224f12409a5f23060994eschrock while (e) {
99653d4ee642c6528e88224f12409a5f23060994eschrock /* destroy it */
99653d4ee642c6528e88224f12409a5f23060994eschrock return (0);
fa94a07fd0519b8abfd871ad8fe60e6bebe1e2bbbrendan * ****************************************************************************
fa94a07fd0519b8abfd871ad8fe60e6bebe1e2bbbrendan * cb_get_scn_port:
fa94a07fd0519b8abfd871ad8fe60e6bebe1e2bbbrendan * The callback function which returns the SCN port of a portal object.
fa9e4066f08beec538e775443c5be79dd423fcabahrens * p1 - the portal object.
fa9e4066f08beec538e775443c5be79dd423fcabahrens * p2 - the lookup control data.
fa9e4066f08beec538e775443c5be79dd423fcabahrens * return - the SCN port number.
990b4856d0eaada6f8140335733a1b1771ed2746lling * ****************************************************************************
fa9e4066f08beec538e775443c5be79dd423fcabahrens /*ARGSUSED*/
990b4856d0eaada6f8140335733a1b1771ed2746lling * ****************************************************************************
fa9e4066f08beec538e775443c5be79dd423fcabahrens * new_scn_portal:
990b4856d0eaada6f8140335733a1b1771ed2746lling * Make a new SCN portal.
fa9e4066f08beec538e775443c5be79dd423fcabahrens * ref - the ref count.
fa9e4066f08beec538e775443c5be79dd423fcabahrens * uid - the portal object UID.
990b4856d0eaada6f8140335733a1b1771ed2746lling * ip - the ip address.
fa9e4066f08beec538e775443c5be79dd423fcabahrens * port - the port number.
fa9e4066f08beec538e775443c5be79dd423fcabahrens * return - the SCN portal.
fa9e4066f08beec538e775443c5be79dd423fcabahrens * ****************************************************************************
990b4856d0eaada6f8140335733a1b1771ed2746lling if (p != NULL) {
990b4856d0eaada6f8140335733a1b1771ed2746lling /* convert the ipv6 to ipv4 */
990b4856d0eaada6f8140335733a1b1771ed2746lling return (p);
990b4856d0eaada6f8140335733a1b1771ed2746lling * ****************************************************************************
fa9e4066f08beec538e775443c5be79dd423fcabahrens * extract scn_portal:
fa9e4066f08beec538e775443c5be79dd423fcabahrens * Extract the SCN portal(s) for a storage node.
fa9e4066f08beec538e775443c5be79dd423fcabahrens * name - the storage node name.
fa9e4066f08beec538e775443c5be79dd423fcabahrens * return - the SCN portal list.
fa9e4066f08beec538e775443c5be79dd423fcabahrens * ****************************************************************************
fa9e4066f08beec538e775443c5be79dd423fcabahrens lc_pg.id[0] = ATTR_INDEX_PG(ISNS_PG_ISCSI_NAME_ATTR_ID);
fa9e4066f08beec538e775443c5be79dd423fcabahrens lc_p.id[0] = ATTR_INDEX_PORTAL(ISNS_PORTAL_IP_ADDR_ATTR_ID);
b7b97454b9b1f6625e7e655e9651e744a8dee09dperrin lc_p.id[1] = ATTR_INDEX_PORTAL(ISNS_PORTAL_PORT_ATTR_ID);
990b4856d0eaada6f8140335733a1b1771ed2746lling while (cache_lookup(&lc_pg, &pg_uid, cb_clone_attrs) == 0 &&
fa9e4066f08beec538e775443c5be79dd423fcabahrens /* ref starts from 1 */
fa9e4066f08beec538e775443c5be79dd423fcabahrens if (p != NULL) {
fa9e4066f08beec538e775443c5be79dd423fcabahrens /* portal not registered or no scn port */
fa9e4066f08beec538e775443c5be79dd423fcabahrens * ****************************************************************************
fa9e4066f08beec538e775443c5be79dd423fcabahrens * cb_update_scn_bitmap:
fa9e4066f08beec538e775443c5be79dd423fcabahrens * The callback function which updates the SCN Bitmap attribute of
fa9e4066f08beec538e775443c5be79dd423fcabahrens * a storage node object.
fa9e4066f08beec538e775443c5be79dd423fcabahrens * p1 - the storage node object.
fa9e4066f08beec538e775443c5be79dd423fcabahrens * p2 - the lookup control data.
fa9e4066f08beec538e775443c5be79dd423fcabahrens * return - error code.
fa9e4066f08beec538e775443c5be79dd423fcabahrens * ****************************************************************************
11022c7cf39f3b863e749f3866f6ddcb445c2d05timh int id = ATTR_INDEX_ISCSI(ISNS_ISCSI_SCN_BITMAP_ATTR_ID);
11022c7cf39f3b863e749f3866f6ddcb445c2d05timh if (bitmap != 0) {
8654d0253136055bd4cc2423d87378e8a37f2eb5perrin * ****************************************************************************
fa9e4066f08beec538e775443c5be79dd423fcabahrens * cb_get_node_type:
fa9e4066f08beec538e775443c5be79dd423fcabahrens * The callback function which returns the node type attribute of
fa9e4066f08beec538e775443c5be79dd423fcabahrens * a storage node object.
fa9e4066f08beec538e775443c5be79dd423fcabahrens * p1 - the storage node object.
fa9e4066f08beec538e775443c5be79dd423fcabahrens * p2 - the lookup control data.
990b4856d0eaada6f8140335733a1b1771ed2746lling * return - error code.
fa9e4066f08beec538e775443c5be79dd423fcabahrens * ****************************************************************************
e9dbad6f263d5570ed7ff5443ec5b958af8c24d7eschrock /* LINTED E_FUNC_ARG_UNUSED */
2f8aaab38e6371ad39ed90a1211ba8921acbb4d5eschrock * ****************************************************************************
fa9e4066f08beec538e775443c5be79dd423fcabahrens * cb_get_node_type:
990b4856d0eaada6f8140335733a1b1771ed2746lling * The callback function which returns the storage node object UID
990b4856d0eaada6f8140335733a1b1771ed2746lling * from a portal group object.
990b4856d0eaada6f8140335733a1b1771ed2746lling * p1 - the pg object.
fa9e4066f08beec538e775443c5be79dd423fcabahrens * p2 - the lookup control data.
fa9e4066f08beec538e775443c5be79dd423fcabahrens * return - the storage node object UID.
fa9e4066f08beec538e775443c5be79dd423fcabahrens * ****************************************************************************
fa9e4066f08beec538e775443c5be79dd423fcabahrens /* LINTED E_FUNC_ARG_UNUSED */
fa9e4066f08beec538e775443c5be79dd423fcabahrens return ((int)ref);
fa9e4066f08beec538e775443c5be79dd423fcabahrens * ****************************************************************************
99653d4ee642c6528e88224f12409a5f23060994eschrock * make_raw_entity:
fa9e4066f08beec538e775443c5be79dd423fcabahrens * Make raw SCN data with a Network Entity object.
fa9e4066f08beec538e775443c5be79dd423fcabahrens * obj - the network entity object.
fa9e4066f08beec538e775443c5be79dd423fcabahrens * return - the raw SCN data.
fa9e4066f08beec538e775443c5be79dd423fcabahrens * ****************************************************************************
fa9e4066f08beec538e775443c5be79dd423fcabahrens /*ARGSUSED*/
fa9e4066f08beec538e775443c5be79dd423fcabahrens isnslog(LOG_DEBUG, "make_raw_entity", "malloc failed.");
f3861e1a2ceec23a5b699c24d814b7775a9e0b52ahl * ****************************************************************************
fa9e4066f08beec538e775443c5be79dd423fcabahrens * make_raw_iscsi:
fa9e4066f08beec538e775443c5be79dd423fcabahrens * Make raw SCN data with a Storage Node object.
fa9e4066f08beec538e775443c5be79dd423fcabahrens * obj - the storage node object.
fa9e4066f08beec538e775443c5be79dd423fcabahrens * return - the raw SCN data.
fa9e4066f08beec538e775443c5be79dd423fcabahrens * ****************************************************************************
99653d4ee642c6528e88224f12409a5f23060994eschrock attr = &obj->attrs[ATTR_INDEX_ISCSI(ISNS_ISCSI_NODE_TYPE_ATTR_ID)];
fa9e4066f08beec538e775443c5be79dd423fcabahrens attr = &obj->attrs[ATTR_INDEX_ISCSI(ISNS_ISCSI_NAME_ATTR_ID)];
fa9e4066f08beec538e775443c5be79dd423fcabahrens /* copy the iscsi storage node name */
fa9e4066f08beec538e775443c5be79dd423fcabahrens (void) strcpy((char *)iscsi, (char *)attr->value.ptr);
fa9e4066f08beec538e775443c5be79dd423fcabahrens isnslog(LOG_DEBUG, "make_raw_iscsi", "malloc failed.");
fa9e4066f08beec538e775443c5be79dd423fcabahrens * ****************************************************************************
fa9e4066f08beec538e775443c5be79dd423fcabahrens * make_raw_portal:
fa9e4066f08beec538e775443c5be79dd423fcabahrens * Make raw SCN data with a Portal object.
fa9e4066f08beec538e775443c5be79dd423fcabahrens * obj - the portal object.
fa9e4066f08beec538e775443c5be79dd423fcabahrens * return - the raw SCN data.
fa9e4066f08beec538e775443c5be79dd423fcabahrens * ****************************************************************************
99653d4ee642c6528e88224f12409a5f23060994eschrock (void) memcpy(ip, attr->value.ip, sizeof (in6_addr_t));
fa94a07fd0519b8abfd871ad8fe60e6bebe1e2bbbrendan isnslog(LOG_DEBUG, "make_raw_portal", "malloc failed.");
fa9e4066f08beec538e775443c5be79dd423fcabahrens * ****************************************************************************
99653d4ee642c6528e88224f12409a5f23060994eschrock * make_raw_assoc_iscsi:
99653d4ee642c6528e88224f12409a5f23060994eschrock * Make raw SCN data with a Discovery Domain member association.
99653d4ee642c6528e88224f12409a5f23060994eschrock * obj - the member association object.
99653d4ee642c6528e88224f12409a5f23060994eschrock * return - the raw SCN data.
fa9e4066f08beec538e775443c5be79dd423fcabahrens * ****************************************************************************
fa9e4066f08beec538e775443c5be79dd423fcabahrens attr = &obj->attrs[ATTR_INDEX_ASSOC_ISCSI(ISNS_DD_ISCSI_NAME_ATTR_ID)];
fa9e4066f08beec538e775443c5be79dd423fcabahrens /* copy the iscsi storage node name */
fa9e4066f08beec538e775443c5be79dd423fcabahrens (void) strcpy((char *)iscsi, (char *)attr->value.ptr);
eaca9bbd5f5d1e4e554da4c7108e8a03c8c33481eschrock isnslog(LOG_DEBUG, "make_raw_assoc_iscsi", "malloc failed.");
fa9e4066f08beec538e775443c5be79dd423fcabahrens * ****************************************************************************
fa9e4066f08beec538e775443c5be79dd423fcabahrens * make_raw_assoc_dd:
fa9e4066f08beec538e775443c5be79dd423fcabahrens * Make raw SCN data with a Discovery Domain Set member association.
fa9e4066f08beec538e775443c5be79dd423fcabahrens * obj - the member association object.
fa9e4066f08beec538e775443c5be79dd423fcabahrens * return - the raw SCN data.
fa9e4066f08beec538e775443c5be79dd423fcabahrens * ****************************************************************************
fa94a07fd0519b8abfd871ad8fe60e6bebe1e2bbbrendan isnslog(LOG_DEBUG, "make_raw_assoc_dd", "malloc failed.");
fa94a07fd0519b8abfd871ad8fe60e6bebe1e2bbbrendan * ****************************************************************************
fa94a07fd0519b8abfd871ad8fe60e6bebe1e2bbbrendan * scn_gen_entity:
fa94a07fd0519b8abfd871ad8fe60e6bebe1e2bbbrendan * Generate SCN with the raw SCN data from a Network Entity object.
99653d4ee642c6528e88224f12409a5f23060994eschrock * raw - the raw SCN data.
fa9e4066f08beec538e775443c5be79dd423fcabahrens * return - the SCN.
fa9e4066f08beec538e775443c5be79dd423fcabahrens * ****************************************************************************
fa9e4066f08beec538e775443c5be79dd423fcabahrens /* LINTED E_FUNC_ARG_UNUSED */
fa9e4066f08beec538e775443c5be79dd423fcabahrens * ****************************************************************************
fa9e4066f08beec538e775443c5be79dd423fcabahrens * scn_gen_iscsi:
fa9e4066f08beec538e775443c5be79dd423fcabahrens * Generate SCN with the raw SCN data from a Storage Node object.
fa9e4066f08beec538e775443c5be79dd423fcabahrens * raw - the raw SCN data.
fa9e4066f08beec538e775443c5be79dd423fcabahrens * return - the SCN.
fa9e4066f08beec538e775443c5be79dd423fcabahrens * ****************************************************************************
fa9e4066f08beec538e775443c5be79dd423fcabahrens isnslog(LOG_DEBUG, "scn_gen_iscsi", "malloc failed.");
fa9e4066f08beec538e775443c5be79dd423fcabahrens * ****************************************************************************
fa9e4066f08beec538e775443c5be79dd423fcabahrens * scn_gen_portal:
fa9e4066f08beec538e775443c5be79dd423fcabahrens * Generate SCN with the raw SCN data from a Portal object.
fa9e4066f08beec538e775443c5be79dd423fcabahrens * raw - the raw SCN data.
fa9e4066f08beec538e775443c5be79dd423fcabahrens * return - the SCN.
fa9e4066f08beec538e775443c5be79dd423fcabahrens * ****************************************************************************
3d7072f8bd27709dba14f6fe336f149d25d9e207eschrock pg_lc.id[0] = ATTR_INDEX_PG(ISNS_PG_PORTAL_IP_ADDR_ATTR_ID);
3d7072f8bd27709dba14f6fe336f149d25d9e207eschrock pg_lc.id[1] = ATTR_INDEX_PG(ISNS_PG_PORTAL_PORT_ATTR_ID);
fa9e4066f08beec538e775443c5be79dd423fcabahrens /* get a pg which is associated to the portal */
46657f8d750bdb71753495ce2919170f126b8e34mmusante while (pg_uid != 0) {
eaca9bbd5f5d1e4e554da4c7108e8a03c8c33481eschrock if (uid != 0) {
eaca9bbd5f5d1e4e554da4c7108e8a03c8c33481eschrock "malloc failed.");
fa9e4066f08beec538e775443c5be79dd423fcabahrens "cannot get node name.");
fa9e4066f08beec538e775443c5be79dd423fcabahrens /* get the next pg */
46657f8d750bdb71753495ce2919170f126b8e34mmusante /* update the iscsi storage node object */
46657f8d750bdb71753495ce2919170f126b8e34mmusante return (l);
eaca9bbd5f5d1e4e554da4c7108e8a03c8c33481eschrock * ****************************************************************************
eaca9bbd5f5d1e4e554da4c7108e8a03c8c33481eschrock * scn_gen_assoc_dd:
eaca9bbd5f5d1e4e554da4c7108e8a03c8c33481eschrock * Generate SCN with the raw SCN data from a DD membership object.
18ce54df8809e9f672d0ed1a53e99669df0a6df0ek * raw - the raw SCN data.
eaca9bbd5f5d1e4e554da4c7108e8a03c8c33481eschrock * return - the SCN.
fa9e4066f08beec538e775443c5be79dd423fcabahrens * ****************************************************************************
fa9e4066f08beec538e775443c5be79dd423fcabahrens /* LINTED E_FUNC_ARG_UNUSED */
8654d0253136055bd4cc2423d87378e8a37f2eb5perrin * ****************************************************************************
8654d0253136055bd4cc2423d87378e8a37f2eb5perrin * make_scn:
8654d0253136055bd4cc2423d87378e8a37f2eb5perrin * Make a SCN with an event and an object.
fa9e4066f08beec538e775443c5be79dd423fcabahrens * event - the event.
46657f8d750bdb71753495ce2919170f126b8e34mmusante * obj - the object.
fa9e4066f08beec538e775443c5be79dd423fcabahrens * return - always successful (0).
fa9e4066f08beec538e775443c5be79dd423fcabahrens * ****************************************************************************
c5904d138f3bdf0762dbf452a43d5a5c387ea6a8eschrock scn_raw_t *(*f)(isns_obj_t *) = make_raw[obj->type];
fa9e4066f08beec538e775443c5be79dd423fcabahrens if (f != NULL) {
fa9e4066f08beec538e775443c5be79dd423fcabahrens /* make raw scn data */
fa9e4066f08beec538e775443c5be79dd423fcabahrens /* trigger an scn event */
fa9e4066f08beec538e775443c5be79dd423fcabahrens return (0);
eaca9bbd5f5d1e4e554da4c7108e8a03c8c33481eschrock * data structure of the SCN state transition table.
95173954d2b811ceb583a9012c3b16e1d0dd6438ek * the SCN state transition table.
fa9e4066f08beec538e775443c5be79dd423fcabahrens { 0, ISNS_MEMBER_REMOVED, OBJ_ASSOC_ISCSI, sf_gen, 7 },
fa9e4066f08beec538e775443c5be79dd423fcabahrens { 7, ISNS_MEMBER_REMOVED, OBJ_ASSOC_ISCSI, sf_gen, 7 },
fa9e4066f08beec538e775443c5be79dd423fcabahrens * ****************************************************************************
fa9e4066f08beec538e775443c5be79dd423fcabahrens * scn_disp1:
ecd6cf800b63704be73fb264c3f5b6e0dafc068dmarks * Dispatch one SCN to one SCN entry.
fa9e4066f08beec538e775443c5be79dd423fcabahrens * event - the event.
fa9e4066f08beec538e775443c5be79dd423fcabahrens * p - the SCN entry.
4c58d71403cebfaa40a572ff12b17668ebd56987darrenm * t - the SCN.
2f8aaab38e6371ad39ed90a1211ba8921acbb4d5eschrock * return - always successful (0).
2f8aaab38e6371ad39ed90a1211ba8921acbb4d5eschrock * ****************************************************************************
fa9e4066f08beec538e775443c5be79dd423fcabahrens while (s != NULL) {
c5904d138f3bdf0762dbf452a43d5a5c387ea6a8eschrock /* duplicated */
c5904d138f3bdf0762dbf452a43d5a5c387ea6a8eschrock return (0);
fa9e4066f08beec538e775443c5be79dd423fcabahrens } while (l != NULL);
fa9e4066f08beec538e775443c5be79dd423fcabahrens if (l != NULL) {
fa9e4066f08beec538e775443c5be79dd423fcabahrens if (s == NULL) {
fa9e4066f08beec538e775443c5be79dd423fcabahrens if (s != NULL) {
99653d4ee642c6528e88224f12409a5f23060994eschrock if (r != NULL) {
fa9e4066f08beec538e775443c5be79dd423fcabahrens "malloc scn failed.\n");
ecd6cf800b63704be73fb264c3f5b6e0dafc068dmarks return (0);
99653d4ee642c6528e88224f12409a5f23060994eschrock "malloc list failed.\n");
2f8aaab38e6371ad39ed90a1211ba8921acbb4d5eschrock return (0);
fa9e4066f08beec538e775443c5be79dd423fcabahrens * ****************************************************************************
fa9e4066f08beec538e775443c5be79dd423fcabahrens * scn_disp1:
fa9e4066f08beec538e775443c5be79dd423fcabahrens * Dispatch one SCN to every SCN entry and update the dispatch status.
fa9e4066f08beec538e775443c5be79dd423fcabahrens * event - the event.
fa9e4066f08beec538e775443c5be79dd423fcabahrens * text - the SCN.
fa9e4066f08beec538e775443c5be79dd423fcabahrens * return - always successful (0).
fa9e4066f08beec538e775443c5be79dd423fcabahrens * ****************************************************************************
990b4856d0eaada6f8140335733a1b1771ed2746lling while (t != NULL) {
fa9e4066f08beec538e775443c5be79dd423fcabahrens if (t->flag == 0) {
990b4856d0eaada6f8140335733a1b1771ed2746lling } else if (e & ISNS_MEMBER_REMOVED) {
2f8aaab38e6371ad39ed90a1211ba8921acbb4d5eschrock while (p != NULL) {
990b4856d0eaada6f8140335733a1b1771ed2746lling /* management scn are not bound */
fa9e4066f08beec538e775443c5be79dd423fcabahrens /* by discovery domain service. */
99653d4ee642c6528e88224f12409a5f23060994eschrock /* lock the cache for reading */
fa9e4066f08beec538e775443c5be79dd423fcabahrens /* verify common dd */
fa9e4066f08beec538e775443c5be79dd423fcabahrens } while (dd_id > 0 &&
fa9e4066f08beec538e775443c5be79dd423fcabahrens /* unlock the cache */
2f8aaab38e6371ad39ed90a1211ba8921acbb4d5eschrock (void) scn_disp1(e, p, t);
fa9e4066f08beec538e775443c5be79dd423fcabahrens /* clean up the scn text(s) which nobody cares about. */
fa9e4066f08beec538e775443c5be79dd423fcabahrens if (dd_id != 0) {
fa9e4066f08beec538e775443c5be79dd423fcabahrens /* scn(s) are dispatched. */
fa9e4066f08beec538e775443c5be79dd423fcabahrens return (0);
fa9e4066f08beec538e775443c5be79dd423fcabahrens * ****************************************************************************
fa9e4066f08beec538e775443c5be79dd423fcabahrens * State transition function which generates and dispatches SCN(s).
99653d4ee642c6528e88224f12409a5f23060994eschrock * raw - the raw SCN data.
fa9e4066f08beec538e775443c5be79dd423fcabahrens * return - always successful (0).
fa9e4066f08beec538e775443c5be79dd423fcabahrens * ****************************************************************************
fa9e4066f08beec538e775443c5be79dd423fcabahrens return (0);
24e697d414a4df0377b91a2875f029e7b5f97247ck * ****************************************************************************
24e697d414a4df0377b91a2875f029e7b5f97247ck * sf_error:
24e697d414a4df0377b91a2875f029e7b5f97247ck * State transition function for an error state. It free any SCN(s)
24e697d414a4df0377b91a2875f029e7b5f97247ck * which have been generated and dispatched previously.
24e697d414a4df0377b91a2875f029e7b5f97247ck * raw - the raw SCN data.
24e697d414a4df0377b91a2875f029e7b5f97247ck * return - always successful (0).
24e697d414a4df0377b91a2875f029e7b5f97247ck * ****************************************************************************
24e697d414a4df0377b91a2875f029e7b5f97247ck /* LINTED E_FUNC_ARG_UNUSED */
24e697d414a4df0377b91a2875f029e7b5f97247ck return (0);
24e697d414a4df0377b91a2875f029e7b5f97247ck * ****************************************************************************
24e697d414a4df0377b91a2875f029e7b5f97247ck * scn_transition:
24e697d414a4df0377b91a2875f029e7b5f97247ck * Performs the state transition when a SCN event occurs.
fa9e4066f08beec538e775443c5be79dd423fcabahrens * state - the previous state.
fa9e4066f08beec538e775443c5be79dd423fcabahrens * raw - the raw SCN data.
99653d4ee642c6528e88224f12409a5f23060994eschrock * return - the next state.
fa9e4066f08beec538e775443c5be79dd423fcabahrens * ****************************************************************************
fa9e4066f08beec538e775443c5be79dd423fcabahrens "prev state: %d new event: 0x%x new object: %d.\n",
fa9e4066f08beec538e775443c5be79dd423fcabahrens * ****************************************************************************
fa9e4066f08beec538e775443c5be79dd423fcabahrens * connect_to:
fa9e4066f08beec538e775443c5be79dd423fcabahrens * Create socket connection with peer network portal.
fa9e4066f08beec538e775443c5be79dd423fcabahrens * sz - the size of the ip addr.
fa9e4066f08beec538e775443c5be79dd423fcabahrens * in - the ipv4 address.
fa9e4066f08beec538e775443c5be79dd423fcabahrens * in6 - the ipv6 address.
fa9e4066f08beec538e775443c5be79dd423fcabahrens * port2- the port info.
fa9e4066f08beec538e775443c5be79dd423fcabahrens * return - the socket descriptor.
fa9e4066f08beec538e775443c5be79dd423fcabahrens * ****************************************************************************
fa9e4066f08beec538e775443c5be79dd423fcabahrens /* LINTED E_FUNC_ARG_UNUSED */
fa9e4066f08beec538e775443c5be79dd423fcabahrens if (tcp != 0) {
fa9e4066f08beec538e775443c5be79dd423fcabahrens "connect() failed %%m.");
fa9e4066f08beec538e775443c5be79dd423fcabahrens "socket() failed %%m.");
fa9e4066f08beec538e775443c5be79dd423fcabahrens /* FIXME: UDP support */
fa9e4066f08beec538e775443c5be79dd423fcabahrens /* FIXME: IPv6 support */
fa9e4066f08beec538e775443c5be79dd423fcabahrens isnslog(LOG_DEBUG, "connect_to", "No IPv6 support.");
fa9e4066f08beec538e775443c5be79dd423fcabahrens * ****************************************************************************
fa9e4066f08beec538e775443c5be79dd423fcabahrens * emit_scn:
fa9e4066f08beec538e775443c5be79dd423fcabahrens * Emit the SCN to any portal of the peer storage node.
fa9e4066f08beec538e775443c5be79dd423fcabahrens * list - the list of portal.
990b4856d0eaada6f8140335733a1b1771ed2746lling * pdu - the SCN packet.
fa9e4066f08beec538e775443c5be79dd423fcabahrens * pl - the SCN packet payload length.
fa9e4066f08beec538e775443c5be79dd423fcabahrens * return - always successful (0).
fa9e4066f08beec538e775443c5be79dd423fcabahrens * ****************************************************************************
fa9e4066f08beec538e775443c5be79dd423fcabahrens while (l != NULL) {
fa9e4066f08beec538e775443c5be79dd423fcabahrens so = connect_to(p->sz, p->ip.in, p->ip.in6, p->port);
fa9e4066f08beec538e775443c5be79dd423fcabahrens /* This may help Solaris iSCSI Initiator */
fa9e4066f08beec538e775443c5be79dd423fcabahrens /* not to panic frequently. */
fa9e4066f08beec538e775443c5be79dd423fcabahrens "sending packet failed.");
fa9e4066f08beec538e775443c5be79dd423fcabahrens /* p->so = so; */
fa9e4066f08beec538e775443c5be79dd423fcabahrens return (0);
fa9e4066f08beec538e775443c5be79dd423fcabahrens * ****************************************************************************
fa9e4066f08beec538e775443c5be79dd423fcabahrens * scn_trigger1:
fa9e4066f08beec538e775443c5be79dd423fcabahrens * Trigger one SCN for one SCN entry.
fa9e4066f08beec538e775443c5be79dd423fcabahrens * t - the time that SCN is being triggered.
fa9e4066f08beec538e775443c5be79dd423fcabahrens * p - the SCN entry.
fa9e4066f08beec538e775443c5be79dd423fcabahrens * return - always successful (0).
fa9e4066f08beec538e775443c5be79dd423fcabahrens * ****************************************************************************
fa94a07fd0519b8abfd871ad8fe60e6bebe1e2bbbrendan /* add destination attribute */
fa94a07fd0519b8abfd871ad8fe60e6bebe1e2bbbrendan (void *)p->name, 0);
fa94a07fd0519b8abfd871ad8fe60e6bebe1e2bbbrendan if (ec != 0) {
088e9d477eee66081e407fbc5a33c4da25f66f6aeschrock /* add timestamp */
fa9e4066f08beec538e775443c5be79dd423fcabahrens if (x->flag == 0) {
fa9e4066f08beec538e775443c5be79dd423fcabahrens if (ec == 0 &&
fa9e4066f08beec538e775443c5be79dd423fcabahrens /* management SCN */
c67d9675bbc8392fe45f3a7dfbda1ad4daa1eb07eschrock /* add(remove) dd to(from) dd-set */
fa9e4066f08beec538e775443c5be79dd423fcabahrens if (ec == 0) {
fa9e4066f08beec538e775443c5be79dd423fcabahrens if (ec == 0) {
fa9e4066f08beec538e775443c5be79dd423fcabahrens return (0);
fa9e4066f08beec538e775443c5be79dd423fcabahrens * ****************************************************************************
fa9e4066f08beec538e775443c5be79dd423fcabahrens * scn_trigger:
fa9e4066f08beec538e775443c5be79dd423fcabahrens * Trigger one SCN for every SCN entry.
fa9e4066f08beec538e775443c5be79dd423fcabahrens * return - always successful (0).
fa9e4066f08beec538e775443c5be79dd423fcabahrens * ****************************************************************************
fa9e4066f08beec538e775443c5be79dd423fcabahrens while (p != NULL) {
fa9e4066f08beec538e775443c5be79dd423fcabahrens (void) scn_trigger1(t, p);
fa9e4066f08beec538e775443c5be79dd423fcabahrens return (0);
fa9e4066f08beec538e775443c5be79dd423fcabahrens * global functions.
fa9e4066f08beec538e775443c5be79dd423fcabahrens * ****************************************************************************
fa9e4066f08beec538e775443c5be79dd423fcabahrens * scn_list_load:
fa9e4066f08beec538e775443c5be79dd423fcabahrens * Load one SCN entry and add it to the SCN entry list.
fa9e4066f08beec538e775443c5be79dd423fcabahrens * uid - the Storage Node object UID.
fa9e4066f08beec538e775443c5be79dd423fcabahrens * node - the Storage Node name.
fa9e4066f08beec538e775443c5be79dd423fcabahrens * nlen - the length of the name.
fa9e4066f08beec538e775443c5be79dd423fcabahrens * bitmap - the SCN bitmap.
fa9e4066f08beec538e775443c5be79dd423fcabahrens * return - error code.
fa9e4066f08beec538e775443c5be79dd423fcabahrens * ****************************************************************************
fa9e4066f08beec538e775443c5be79dd423fcabahrens list = (scn_registry_t *)malloc(sizeof (scn_registry_t));
fa9e4066f08beec538e775443c5be79dd423fcabahrens * ****************************************************************************
fa9e4066f08beec538e775443c5be79dd423fcabahrens * verify_scn_portal:
fa9e4066f08beec538e775443c5be79dd423fcabahrens * Extract and verify portals for every SCN entry(s) after they are
fa9e4066f08beec538e775443c5be79dd423fcabahrens * loaded from data store, for those which do not have a SCN portal,
fa9e4066f08beec538e775443c5be79dd423fcabahrens * remove it from the SCN entry list.
fa9e4066f08beec538e775443c5be79dd423fcabahrens * return - 1: error occurs, otherwise 0.
fa9e4066f08beec538e775443c5be79dd423fcabahrens * ****************************************************************************
fa9e4066f08beec538e775443c5be79dd423fcabahrens if (p != NULL) {
fa9e4066f08beec538e775443c5be79dd423fcabahrens if (scn_add_portal(e, p) != 0) {
fa9e4066f08beec538e775443c5be79dd423fcabahrens return (1);
fa9e4066f08beec538e775443c5be79dd423fcabahrens /* remove this entry */
fa9e4066f08beec538e775443c5be79dd423fcabahrens /* free the unused portal(s) */
fa9e4066f08beec538e775443c5be79dd423fcabahrens return (0);
088e9d477eee66081e407fbc5a33c4da25f66f6aeschrock * ****************************************************************************
99653d4ee642c6528e88224f12409a5f23060994eschrock * add_scn_entry:
088e9d477eee66081e407fbc5a33c4da25f66f6aeschrock * Add a SCN entry.
fa9e4066f08beec538e775443c5be79dd423fcabahrens * node - the Storage Node name.
fa9e4066f08beec538e775443c5be79dd423fcabahrens * nlen - the length of the name.
fa9e4066f08beec538e775443c5be79dd423fcabahrens * bitmap - the SCN bitmap.
fa9e4066f08beec538e775443c5be79dd423fcabahrens * return - error code.
fa9e4066f08beec538e775443c5be79dd423fcabahrens * ****************************************************************************
39c23413b8df94a95f67b34cfd4a4dfc3fd0b48deschrock if ((mgmt > 0 &&
fa9e4066f08beec538e775443c5be79dd423fcabahrens e = (scn_registry_t *)malloc(sizeof (scn_registry_t));
fa9e4066f08beec538e775443c5be79dd423fcabahrens lc.id[0] = ATTR_INDEX_ISCSI(ISNS_ISCSI_NAME_ATTR_ID);
fa9e4066f08beec538e775443c5be79dd423fcabahrens if (uid == 0) {
fa9e4066f08beec538e775443c5be79dd423fcabahrens if (ec == 0) {
fa9e4066f08beec538e775443c5be79dd423fcabahrens if (ec != 0) {
990b4856d0eaada6f8140335733a1b1771ed2746lling * ****************************************************************************
fa9e4066f08beec538e775443c5be79dd423fcabahrens * remove_scn_entry:
fa9e4066f08beec538e775443c5be79dd423fcabahrens * Remove a SCN entry.
fa9e4066f08beec538e775443c5be79dd423fcabahrens * node - the Storage Node name.
fa9e4066f08beec538e775443c5be79dd423fcabahrens * return - error code.
990b4856d0eaada6f8140335733a1b1771ed2746lling * ****************************************************************************
fa9e4066f08beec538e775443c5be79dd423fcabahrens (void) queue_msg_set(scn_q, SCN_REMOVE, (void *)uid);
990b4856d0eaada6f8140335733a1b1771ed2746lling * ****************************************************************************
990b4856d0eaada6f8140335733a1b1771ed2746lling * remove_scn_portal:
990b4856d0eaada6f8140335733a1b1771ed2746lling * Remove a portal from every SCN entry.
990b4856d0eaada6f8140335733a1b1771ed2746lling * uid - the Portal object UID.
fa9e4066f08beec538e775443c5be79dd423fcabahrens * return - alrays successful (0).
fa9e4066f08beec538e775443c5be79dd423fcabahrens * ****************************************************************************
990b4856d0eaada6f8140335733a1b1771ed2746lling (void) queue_msg_set(scn_q, SCN_REMOVE_P, (void *)uid);
990b4856d0eaada6f8140335733a1b1771ed2746lling return (0);
fa9e4066f08beec538e775443c5be79dd423fcabahrens * ****************************************************************************
990b4856d0eaada6f8140335733a1b1771ed2746lling * scn_proc:
fa9e4066f08beec538e775443c5be79dd423fcabahrens * The entry point of the SCN thread. It listens on the SCN message
990b4856d0eaada6f8140335733a1b1771ed2746lling * queue and process every SCN related stuff.
990b4856d0eaada6f8140335733a1b1771ed2746lling * arg - nothing.
990b4856d0eaada6f8140335733a1b1771ed2746lling * return - NULL.
990b4856d0eaada6f8140335733a1b1771ed2746lling * ****************************************************************************
990b4856d0eaada6f8140335733a1b1771ed2746lling /* LINTED E_FUNC_ARG_UNUSED */
fa9e4066f08beec538e775443c5be79dd423fcabahrens /* free the raw data */
fa9e4066f08beec538e775443c5be79dd423fcabahrens /* clean the scn(s) */
fa9e4066f08beec538e775443c5be79dd423fcabahrens /* reset the state */
fa9e4066f08beec538e775443c5be79dd423fcabahrens /* reset the scn_dispatched flag */