From: Robert W. <wrw...@us...> - 2006-12-29 20:40:22
|
Update of /cvsroot/linuxisns/isnsNT/isnsserver/src In directory sc8-pr-cvs6.sourceforge.net:/tmp/cvs-serv13536/src Modified Files: iSNSdb.c iSNSdereg.c iSNSreg.c iSNSscn.c Log Message: bring scn processing up to latest spec Index: iSNSreg.c =================================================================== RCS file: /cvsroot/linuxisns/isnsNT/isnsserver/src/iSNSreg.c,v retrieving revision 1.20 retrieving revision 1.21 diff -C2 -d -r1.20 -r1.21 *** iSNSreg.c 21 Dec 2006 23:28:12 -0000 1.20 --- iSNSreg.c 29 Dec 2006 20:40:18 -0000 1.21 *************** *** 56,60 **** extern int sns_esi_interval; extern uint32_t *dlist_node; /*[MAX_DD_PER_LIST];*/ - extern ISNS_LIST scn_list; extern ISNS_LIST scn_callback_list; extern ISNS_Msg *p_scn_msg_buffer; --- 56,59 ---- *************** *** 625,630 **** { p_iscsi_name = (char *) GetNodeData( pnode2 ); ! send_scn_object_change_to_all( ISNS_ISCSI_NODE_ID, PAD4(strlen(p_iscsi_name)), p_iscsi_name, ! ISNS_SCN_OBJ_UPDATED); } } --- 624,628 ---- { p_iscsi_name = (char *) GetNodeData( pnode2 ); ! send_iscsi_scn_to_members ( NULL, p_iscsi_name, p_scn_all_msg_buffer, ISNS_SCN_OBJ_ADDED ); } } *************** *** 1260,1274 **** } - if ( newRegFlag ) - new_scn_bitmap |= ISNS_SCN_OBJ_ADDED; - else if ( updateFlag ) - new_scn_bitmap |= ISNS_SCN_OBJ_UPDATED; - - if ( newMemberFlag ) - new_scn_bitmap |= ISNS_SCN_MEMBER_ADDED; - - if ( new_scn_bitmap ) - send_scn_parameter_change_to_all( p_scn_all_msg_buffer, new_scn_bitmap ); - attr = (ISNS_Attr *)(attr_indx[ saveIndex ]); ddKeyIndex = -1; --- 1258,1261 ---- *************** *** 1444,1454 **** ISNSAppendKey(p_scn_all_msg_buffer, ISNS_DD_ID, ISNS_DD_ID_SIZE, NULL, p_dd->id); - if (entry.data_type != DD_ID_KEY) - { - DEBUG_2 (isns_reg_debug & 1, (database key does not match %u %u), - entry.data_type, DD_ID_KEY); - return ISNS_UNKNOWN_ERR; - } - stopFlag = FALSE; newMemberFlag = FALSE; --- 1431,1434 ---- *************** *** 1477,1492 **** if ( FALSE == Check_Unique_DD_Sym ( p_dd, (char *)&attr->val ) ) { ! DEBUG_0 ( isns_reg_debug & 1, ! (Error DD Symbolic name not unique) ); ! ! if ( newRegFlag ) ! { ! DeleteList( &p_dd->dds_list ); ! DeleteList( &p_dd->member_list ); ! } ! return ( ISNS_INVALID_REG_ERR ); } strncpy ( p_dd->sym_name, (char *)&attr->val, sizeof(p_dd->sym_name) ); ISNSAppendKey( p_scn_all_msg_buffer, ISNS_DD_SYM_NAME, attr->len, (char *)&attr->val, 0 ); --- 1457,1465 ---- if ( FALSE == Check_Unique_DD_Sym ( p_dd, (char *)&attr->val ) ) { ! DEBUG_0 ( isns_reg_debug & 1,Error DD Symbolic name not unique); return ( ISNS_INVALID_REG_ERR ); } strncpy ( p_dd->sym_name, (char *)&attr->val, sizeof(p_dd->sym_name) ); + ISNSAppendKey( p_scn_all_msg_buffer, ISNS_DD_SYM_NAME, attr->len, (char *)&attr->val, 0 ); *************** *** 1510,1517 **** s == ISNS_NO_ERR?ISNS_DD_MEMBER_ENABLE:ISNS_DD_MEMBER_DISABLE, iscsi_idx); ! if (s == ISNS_NO_ERR && IsDDActive(p_dd->id, 0)) ! send_iscsi_scn_on_dd_mem_change ( NULL, (char *)&attr->val, p_dd, 0, ISNS_SCN_OBJ_ADDED ); ! ISNSAppendKey( p_scn_all_msg_buffer, ISNS_DD_ISCSI_MEMBER, attr->len, ! (char *)&attr->val, 0); newMemberFlag = TRUE; iscsi_idx = 0; --- 1483,1489 ---- s == ISNS_NO_ERR?ISNS_DD_MEMBER_ENABLE:ISNS_DD_MEMBER_DISABLE, iscsi_idx); ! ISNSAppendKey( p_scn_all_msg_buffer, ISNS_DD_ISCSI_MEMBER, attr->len, (char *)&attr->val, 0); ! send_iscsi_scn_to_members (NULL, (char *)&attr->val, p_scn_all_msg_buffer, ISNS_SCN_OBJ_ADDED); ! newMemberFlag = TRUE; iscsi_idx = 0; *************** *** 1527,1530 **** --- 1499,1504 ---- updateFlag = TRUE; ISNSAppendKey( p_scn_all_msg_buffer, ISNS_DD_IFCP_MEMBER, attr->len, (char *)&attr->val, 0); + send_iscsi_scn_to_members (NULL, (char *)&attr->val, p_scn_all_msg_buffer, ISNS_SCN_OBJ_ADDED); + break; } *************** *** 1553,1568 **** ISNSAppendKey (p_rspmsg, ISNS_DD_ID, ISNS_DD_ID_SIZE, NULL, p_dd->id); - if ( newRegFlag ) - new_scn_bitmap |= ISNS_SCN_OBJ_ADDED; - else if ( updateFlag ) - new_scn_bitmap |= ISNS_SCN_OBJ_UPDATED; - - if ( newMemberFlag ) - new_scn_bitmap |= ISNS_SCN_MEMBER_ADDED; - - - if ( new_scn_bitmap ) - send_scn_parameter_change_to_all( p_scn_all_msg_buffer, new_scn_bitmap ); - attr = (ISNS_Attr *)(attr_indx[saveIndex]); ddKeyIndex = -1; --- 1527,1530 ---- *************** *** 1654,1658 **** _SNSdbAddAttrEntity ! Removes one or more entities from the database. *********************************************************************/ int --- 1616,1620 ---- _SNSdbAddAttrEntity ! Adds one or more entities *********************************************************************/ int *************** *** 1673,1678 **** char tempEntityId[ ENTITY_ID_SIZE ] = {0}; int updateFlag; - ISNS_LIST_NODE *pnode2; - char *p_iscsi_name; ISNS_DBKey read_key; --- 1635,1638 ---- *************** *** 1850,1865 **** /* ISNSDisplay_Entity (p_entity, HI_DETAIL); */ - /* Send out SCN */ - if ( newRegFlag || updateFlag ) - { - pnode2 = NULL; - while ( (pnode2 = GetNextNode( &p_entity->iscsi_node_list, pnode2)) ) - { - p_iscsi_name = (char *) GetNodeData(pnode2); - send_scn_object_change_to_all( ISNS_ISCSI_NODE_ID, PAD4(strlen(p_iscsi_name)), p_iscsi_name, - ISNS_SCN_OBJ_UPDATED); - } - } - return ( rval ); } --- 1810,1813 ---- *************** *** 2275,2283 **** p_ifcp_node->scn_sockfd = 0; } - - if (p_ifcp_node->scn_bitmap) - ISNSAddSCNEntry ( ISNS_PORT_NAME, p_ifcp_node->id.v, - p_ifcp_node->scn_bitmap, p_ifcp_node->scn_sockfd ); - break; default: --- 2223,2226 ---- *************** *** 2606,2612 **** } - if ( p_node->scn_bitmap ) - ISNSAddSCNEntry ( ISNS_ISCSI_NODE_ID, p_node->id.v, p_node->scn_bitmap, - p_node->scn_sockfd ); break; } --- 2549,2552 ---- *************** *** 2785,2791 **** } - ISNSAddSCNEntry ( ISNS_ISCSI_NODE_ID, p_node->id.v, p_node->scn_bitmap, - p_node->scn_sockfd ); - /* Store the node */ ISNS_DBKey update_key; --- 2725,2728 ---- *************** *** 2835,2841 **** } - ISNSAddSCNEntry ( ISNS_PORT_NAME, p_ifcp_node->entity_id.id, - p_ifcp_node->scn_bitmap, p_ifcp_node->scn_sockfd ); - /* Store the node */ ISNS_DBKey update_key; --- 2772,2775 ---- *************** *** 2939,2944 **** SOIP_DB_Entry lentry; SOIP_Dd *p_dd; - SOIP_DD_Key dd_key; - int scnFlag; ISNS_DBKey key; int rval; --- 2873,2876 ---- *************** *** 2946,2952 **** DEBUG_0 (isns_reg_debug &1, Add_dds_to_dd ); - scnFlag = FALSE; - dd_key.id = dd_id; - key.tag = DD_ID_KEY; key.val.dd_key.id = dd_id; --- 2878,2881 ---- *************** *** 2965,2969 **** { p_dd->activeFlag = TRUE; - scnFlag = TRUE; } --- 2894,2897 ---- *************** *** 2976,2984 **** ISNSdbWrite (&key,lentry); - if ( scnFlag ) - { - send_dd_iscsi_scn( p_dd, 0, ISNS_SCN_OBJ_ADDED ); - } - return ( ISNS_NO_ERR ); } --- 2904,2907 ---- *************** *** 3091,3160 **** ********************************************************************/ int - ISNSAddSCNEntry( uint32_t type, char *nodename, uint32_t bitmap, int sockfd ) - { - SOIP_Scn_Entry new_entry; - ISNS_LIST_NODE *pnode; - SOIP_Scn_Entry *p_entry; - int foundFlag; - - DEBUG_0 (isns_reg_debug &1,ISNSAddSCNEntry); - - memset( &new_entry, 0, sizeof( new_entry ) ); - new_entry.type = type; - new_entry.scn_bitmap = bitmap; - new_entry.scn_sockfd = sockfd; - - if ( ISNS_PORT_NAME == type ) - { - memcpy( new_entry.name.v, nodename, ISNS_PORT_NAME_SIZE ); - } - else if ( ISNS_ISCSI_NODE_ID == type ) - { - strncpy( new_entry.name.v, nodename, sizeof(new_entry.name.v) ); - } - else if ( ISNS_ENTITY_ID == type ) - { - strncpy( new_entry.name.v, nodename, sizeof(new_entry.name.v) ); - } - else - { - DEBUG_1( isns_reg_debug & 1, (SCN node type wrong: %u), type ); - return ( ERROR ); - } - - pnode = NULL; - foundFlag = FALSE; - while ((pnode = GetNextNode(&scn_list, pnode))) - { - p_entry = (SOIP_Scn_Entry *) GetNodeData( pnode ); - if (0 == strncmp(new_entry.name.v, p_entry->name.v, sizeof(new_entry.name.v))) - { - foundFlag = TRUE; - break; - } - } - - if ( foundFlag ) - { - /* Update */ - if ( p_entry ) - { - memcpy(p_entry, &new_entry, sizeof(new_entry)); - } - - } - else - { - /* Add */ - AddNode( &scn_list, (char *)&new_entry, sizeof( new_entry ) ); - } - - DEBUG_0 (isns_reg_debug &1,ISNSAddSCNEntry return); - return ( SUCCESS ); - } - - /******************************************************************** - ********************************************************************/ - int ISNSAddSCNCallbackEntry ( char *nodename, int type, int bitmap, void (*cfunc)(ISNS_ATTR_VALS_CB *avcb_ptr) ) --- 3014,3017 ---- *************** *** 3364,3370 **** break; } - - /* Send SCN out to DD */ - send_iscsi_scn_on_dd_mem_change(p_node, NULL, p_dd, 0, ISNS_SCN_OBJ_ADDED); } --- 3221,3224 ---- *************** *** 3404,3408 **** if ( memberAddedFlag ) { ! // send_scn_parameter_change_to_all( p_scn_all_msg_buffer, 0); } else --- 3258,3262 ---- if ( memberAddedFlag ) { ! send_iscsi_scn_to_members ( p_node, NULL, p_scn_all_msg_buffer, ISNS_SCN_OBJ_ADDED ); } else *************** *** 3531,3540 **** if (old_activeFlag != p_node->activeFlag) { - /* - send_iscsi_scn_on_dd_mem_change (p_node, NULL, p_dd, 0, - p_node->activeFlag?ISNS_SCN_OBJ_ADDED:ISNS_SCN_OBJ_REMOVED); - */ - send_iscsi_scn_to_members(p_node, NULL, NULL, p_node->activeFlag?ISNS_SCN_OBJ_ADDED:ISNS_SCN_OBJ_REMOVED); - key.tag = ISCSI_ID_KEY; strcpy(key.val.node_key.v,db_node_name.v); --- 3385,3388 ---- Index: iSNSdb.c =================================================================== RCS file: /cvsroot/linuxisns/isnsNT/isnsserver/src/iSNSdb.c,v retrieving revision 1.25 retrieving revision 1.26 diff -C2 -d -r1.25 -r1.26 *** iSNSdb.c 20 Dec 2006 01:02:34 -0000 1.25 --- iSNSdb.c 29 Dec 2006 20:40:17 -0000 1.26 *************** *** 83,87 **** SOIP_Dd_Member *ddmem; /* [100]; */ - ISNS_LIST scn_list; ISNS_LIST scn_callback_list; --- 83,86 ---- *************** *** 959,963 **** { DEBUG_0 (isns_db_debug &1, ISNSInitDBTables); - InitList(SCN_LIST, &scn_list ); InitList(SCN_CALLBACK_LIST, &scn_callback_list); } --- 958,961 ---- Index: iSNSscn.c =================================================================== RCS file: /cvsroot/linuxisns/isnsNT/isnsserver/src/iSNSscn.c,v retrieving revision 1.9 retrieving revision 1.10 diff -C2 -d -r1.9 -r1.10 *** iSNSscn.c 21 Dec 2006 23:28:12 -0000 1.9 --- iSNSscn.c 29 Dec 2006 20:40:18 -0000 1.10 *************** *** 80,86 **** static SOIP_DB_Entry scn_entry2; static SOIP_DB_Entry scn_entry3; - static SOIP_DB_Entry scn_entry4; - - static int scn_xid = 1; static ISNS_ATTR_VALS_CB * --- 80,83 ---- *************** *** 215,460 **** /******************************************************************** - ********************************************************************/ - int - send_dd_iscsi_scn( SOIP_Dd *p_dd, int dd_id, uint32_t scn_bitmap ) - { - SOIP_DB_Entry lentry; - SOIP_DB_Entry lentry2; - SOIP_Iscsi *p_node; - time_t t; - - ISNS_Msg *p_msg; - ISNS_LIST_NODE *lnode; - SOIP_Dd_Member *p_member; - int rval; - - p_msg=&p_scn_md->msg; - memset(p_scn_md, 0, sizeof(ISNS_Msg_Descp)); - - /* Fetch DD */ - if (!p_dd) - { - if (SUCCESS != SNSdbFetchDD (dd_id, &p_dd, &lentry)) - return (ERROR); - } - - /* Append all of the members to a buffer */ - memset(p_scn_msg_buffer, 0, sizeof(ISNS_Msg)); - p_scn_msg_buffer->hdr.type = ISNS_SCN; - - lnode = NULL; - while ( (lnode = GetNextNode(&p_dd->member_list, lnode)) ) - { - - p_member = (SOIP_Dd_Member *)GetNodeData(lnode); - if (p_member->type != ISNS_DD_ISCSI_MEMBER) - continue; - - /* Append as src attribute */ - ISNSAppendKey (p_scn_msg_buffer, ISNS_ISCSI_NODE_ID, - PAD4 (strlen (p_member->node_id)), p_member->node_id, 0); - - /* Append event bitmap */ - ISNSAppendKey (p_scn_msg_buffer, ISNS_ISCSI_SCN_BITMAP, ISNS_SCN_BITMAP_SIZE, - NULL, scn_bitmap); - } - - - /* For each member */ - lnode = NULL; - while ( (lnode = GetNextNode(&p_dd->member_list, lnode)) ) - { - SOIP_Dd_Member *p_member; - - p_member=(SOIP_Dd_Member *)GetNodeData(lnode); - if (p_member->type != ISNS_DD_ISCSI_MEMBER) - continue; - - /* Fetch Node */ - ISNS_DBKey key; - key.tag = ISCSI_ID_KEY; - strcpy(key.val.node_key.v,p_member->node_id); - rval = ISNSdbRead(&key,&lentry2); - if (rval != SUCCESS) - return ERROR; - - p_node = (SOIP_Iscsi *)&lentry2.data.node; - - if (!(p_node->scn_bitmap & scn_bitmap)) - continue; - - memset(p_scn_md, 0, sizeof(ISNS_Msg_Descp)); - p_msg->hdr.type = ISNS_SCN; - - /* Add Dest Attribute */ - ISNSAppendKey (p_msg, ISNS_ISCSI_NODE_ID, - PAD4 (strlen (p_member->node_id)), p_member->node_id, 0); - - /* Add Timestamp */ - ISNSAppendKey (p_msg, ISNS_TIMESTAMP, ISNS_TIMESTAMP_SIZE, - NULL, time (&t)); - - /* Copy the src attribute buffer into the msg */ - memcpy((char *)&p_msg->payload+p_msg->hdr.msg_len, - (char *)&p_scn_msg_buffer->payload, p_scn_msg_buffer->hdr.msg_len); - - p_msg->hdr.msg_len+=p_scn_msg_buffer->hdr.msg_len; - - /* Send SCN msg */ - send_iscsi_scn_md(p_member->node_id, p_scn_md); - } - - return ( SUCCESS ); - } - - - int - send_scn_parameter_change_to_all( ISNS_Msg *p_msg, uint32_t bitmap ) - { - ISNS_LIST_NODE *pnode; - ISNS_LIST_NODE *remove_node; - SOIP_Scn_Entry *p_entry; - - - /* Append Dest */ - - pnode = NULL; - remove_node = NULL; - while ( (pnode = GetNextNode(&scn_list, pnode)) ) - { - if ( remove_node ) - { - RemoveNode( &scn_list, remove_node ); - remove_node = NULL; - } - p_entry = (SOIP_Scn_Entry *)GetNodeData( pnode ); - if ( p_entry->type != ISNS_ISCSI_NODE_ID ) - continue; - - if ( !(p_entry->scn_bitmap & ISNS_DETAIL_SCN) ) - continue; - - /* Fill destination */ - memset(p_scn_md, 0, sizeof(ISNS_Msg_Descp)); - p_scn_md->msg.hdr.type = ISNS_SCN; - ISNSAppendKey( &p_scn_md->msg, ISNS_ISCSI_NODE_ID, - PAD4(strlen(p_entry->name.v)), p_entry->name.v, 0); - - ISNSAppendTimeStamp( &p_scn_md->msg ); - - memcpy( (char *)&p_scn_md->msg.payload + p_scn_md->msg.hdr.msg_len, - &p_msg->payload, p_msg->hdr.msg_len); - - p_scn_md->msg.hdr.msg_len += p_msg->hdr.msg_len; - p_scn_md->msg.hdr.xid = scn_xid++; - - if ( bitmap ) - ISNSAppendKey(&p_scn_md->msg, ISNS_ISCSI_SCN_BITMAP, ISNS_SCN_BITMAP_SIZE, NULL, bitmap); - /* else the upper level has inserted the bitmap already. */ - - /* Determine how to send */ - if (p_entry->scn_sockfd) - { - /* TCP */ - p_scn_md->cb.sock.socketType = ISNS_SOCKET_TYPE_TCP; - p_scn_md->cb.sock.sockfd = p_entry->scn_sockfd; - - if ( SUCCESS != ISNSSendMsg (p_scn_md) ) - { - DEBUG_0(sns_scn_debug & 1, (Warning: Failure sending SCN, removing SCN)); - - /* Remove Node from SCN List */ - remove_node = pnode; - } - } - else - { - /* UDP or callback */ - printf("Error: UDP SCN and Callback SCN has not been implemented.\n"); - } - } - - if ( remove_node ) - { - RemoveNode( &scn_list, remove_node ); - remove_node = NULL; - } - - return (SUCCESS); - } - - int - send_scn_object_change_to_all( uint32_t src_type, uint32_t src_len, - void *src_val, uint32_t bitmap ) - { - SOIP_Scn_Entry *p_entry; - ISNS_LIST_NODE *pnode; - ISNS_LIST_NODE *remove_node; - - /* Go through SCN list */ - /* Send out SCN only if the ALL bit is set */ - - memset(p_scn_md, 0, sizeof(ISNS_Msg_Descp)); - p_scn_md->msg.hdr.type = ISNS_SCN; - - pnode = NULL; - remove_node = NULL; - while ( (pnode = GetNextNode(&scn_list, pnode)) ) - { - if ( remove_node ) - { - RemoveNode( &scn_list, remove_node ); - remove_node = NULL; - } - p_entry = (SOIP_Scn_Entry *)GetNodeData( pnode ); - if ( p_entry->type != ISNS_ISCSI_NODE_ID ) - continue; - - if ( !(p_entry->scn_bitmap & ISNS_DETAIL_SCN ) ) - continue; - - memset( &p_scn_md->msg.payload, 0, sizeof(p_scn_md->msg.payload) ); - p_scn_md->msg.hdr.msg_len = 0; - /* Fill destination */ - ISNSAppendKey( &p_scn_md->msg, ISNS_ISCSI_NODE_ID, - PAD4(strlen(p_entry->name.v)), p_entry->name.v, 0); - - ISNSAppendTimeStamp( &p_scn_md->msg ); - - ISNSAppendKey( &p_scn_md->msg, src_type, src_len, src_val, 0); - ISNSAppendKey( &p_scn_md->msg, ISNS_ISCSI_SCN_BITMAP, ISNS_SCN_BITMAP_SIZE, 0, bitmap); - - /* Determine how to send */ - if ( p_entry->scn_sockfd ) - { - /* TCP */ - p_scn_md->cb.sock.socketType = ISNS_SOCKET_TYPE_TCP; - p_scn_md->cb.sock.sockfd = p_entry->scn_sockfd; - - if ( SUCCESS != ISNSSendMsg (p_scn_md) ) - { - DEBUG_0(sns_scn_debug & 1, (Warning: Failure sending SCN, removing SCN)); - - /* Remove Node from SCN List */ - remove_node = pnode; - } - } - else - { - /* UDP or callback */ - printf("Error: UDP SCN and Callback SCN has not been implemented.\n"); - } - } - - if ( remove_node ) - { - RemoveNode( &scn_list, remove_node ); - remove_node = NULL; - } - - return (SUCCESS); - } - - /******************************************************************** Sends a SCN to all the DD members of the node that's passed in. ********************************************************************/ --- 212,215 ---- *************** *** 470,473 **** --- 225,230 ---- SOIP_Iscsi *iscsi_node; + DEBUG_0 (sns_scn_debug &1, send_iscsi_scn_to_members); + p_msg=&p_scn_md->msg; memset(p_scn_md, 0, sizeof(ISNS_Msg_Descp)); *************** *** 502,505 **** --- 259,268 ---- p_dd = &scn_entry2.data.dd; + if ( !(p_dd->activeFlag) ) + { + DEBUG_1 (sns_scn_debug &1, Discovery Domain is not Active:%i,p_dd->id); + continue; + } + /* For each member */ pnode = NULL; *************** *** 558,734 **** /********************************************************************* - Non detailed SCN for object added/removed. - *********************************************************************/ - int - send_iscsi_scn_on_dd_mem_change( SOIP_Iscsi * p_src_node, char *p_src_name, - SOIP_Dd *p_dd, uint32_t dd_id, uint32_t event_bitmap) - { - int i; - int j; - int num_nodes; - int foundFlag; - SOIP_DD_Key dd_key; - ISNS_LIST_NODE *lnode; - SOIP_Dd_Member *p_member; - int rval; - - if ( p_src_node == NULL ) - { - if (p_src_name == NULL) - return (ERROR); - - /* Fetch the node */ - ISNS_DBKey read_key; - read_key.tag = ISCSI_ID_KEY; - strcpy(read_key.val.node_key.v,p_src_name); - rval = ISNSdbRead(&read_key,&scn_entry3); - if (rval != SUCCESS) - return rval; - - p_src_node = (SOIP_Iscsi *)&scn_entry3.data.node; - } - - if ( p_dd == NULL ) - { - /* Fetch the DD entry */ - dd_key.id = dd_id; - if (0 == dd_key.id) - { - DEBUG_0(sns_scn_debug & 1, (DD ID of zero is reserved)); - return(ISNS_INVALID_REG_ERR); - } - - ISNS_DBKey read_key; - read_key.tag = DD_ID_KEY; - read_key.val.dd_key.id = dd_key.id; - rval = ISNSdbRead(&read_key,&scn_entry4); - if (rval != SUCCESS) - return rval; - - p_dd = (SOIP_Dd *) &scn_entry4.data; - - } - - if (!p_dd->activeFlag) - return (SUCCESS); - - if (!p_src_node->activeFlag) - return (SUCCESS); - - memset(p_scn_msg_buffer, 0, sizeof(ISNS_Msg)); - p_scn_msg_buffer->hdr.type = ISNS_SCN; - - num_nodes = 0; - lnode = NULL; - while ( (lnode=GetNextNode(&p_dd->member_list, lnode)) ) - { - p_member = (SOIP_Dd_Member *)GetNodeData( lnode ); - - if ( p_member->status == ISNS_DD_MEMBER_DISABLE ) - continue; - - if ( !strcmp(p_member->node_id, p_src_node->id.v)) - continue; - - /* Fetch the Active dd lists */ - memset (dlist_src, 0, MAX_DD_PER_LIST*sizeof(uint32_t)); - memset (dlist_node, 0, MAX_DD_PER_LIST*sizeof(uint32_t)); - Get_Active_DD_List_From_ISCSI_Node (p_src_node->id.v, dlist_src, 0); - Get_Active_DD_List_From_ISCSI_Node (p_member->node_id, dlist_node, 0); - - /* Do a delta */ - foundFlag = FALSE; - for (i = 0; i < MAX_DD_PER_LIST; i++) - { - if (!dlist_src[i]) - break; - - if (dlist_src[i] == p_dd->id) - continue; - - for (j = 0; j < MAX_DD_PER_LIST; j++) - { - if (!dlist_node[j]) - break; - - if (dlist_node[j] == p_dd->id) - continue; - - if (dlist_src[i]==dlist_node[j]) - { - foundFlag = TRUE; - break; - } - } - - if (foundFlag) - break; - } - - if (foundFlag) - continue; - - num_nodes++; - - /* Save the node for sending to src node */ - ISNSAppendKey( p_scn_msg_buffer, ISNS_ISCSI_NODE_ID, - PAD4(strlen(p_member->node_id)), p_member->node_id, 0); - - /* Append Bitmap */ - ISNSAppendKey( p_scn_msg_buffer, ISNS_ISCSI_SCN_BITMAP, - ISNS_SCN_BITMAP_SIZE, NULL, event_bitmap); - - /* Prepare SCN msg */ - memset(p_scn_md, 0, sizeof(ISNS_Msg_Descp)); - p_scn_md->msg.hdr.type = ISNS_SCN; - - /* Append Dest */ - ISNSAppendKey( &p_scn_md->msg, ISNS_ISCSI_NODE_ID, - PAD4(strlen(p_member->node_id)), p_member->node_id, 0); - - /* Append Timestamp */ - ISNSAppendTimeStamp( &p_scn_md->msg ); - - /* Append Src */ - ISNSAppendKey( &p_scn_md->msg, ISNS_ISCSI_NODE_ID, - PAD4(strlen(p_src_node->id.v)), p_src_node->id.v, 0); - - /* Append Bitmap */ - ISNSAppendKey( &p_scn_md->msg, ISNS_ISCSI_SCN_BITMAP, - ISNS_SCN_BITMAP_SIZE, NULL, event_bitmap); - - /* Append All other attr */ - - /* We need to send an SCN for this node */ - send_iscsi_scn_md(p_member->node_id, p_scn_md); - } - - /* Send an scn to self about the new - nodes that came into scope */ - if ( num_nodes ) - { - memset(p_scn_md, 0, sizeof(ISNS_Msg_Descp)); - p_scn_md->msg.hdr.type = ISNS_SCN; - - /* Append Dest */ - ISNSAppendKey( &p_scn_md->msg, ISNS_ISCSI_NODE_ID, - PAD4(strlen(p_src_node->id.v)), p_src_node->id.v, 0); - - /* Append Timestamp */ - ISNSAppendTimeStamp( &p_scn_md->msg ); - - /* Copy over from the buffer */ - memcpy( (char *)&p_scn_md->msg.payload+p_scn_md->msg.hdr.msg_len, - &p_scn_msg_buffer->payload, p_scn_msg_buffer->hdr.msg_len ); - - p_scn_md->msg.hdr.msg_len+=p_scn_msg_buffer->hdr.msg_len; - - send_iscsi_scn_md(p_src_node->id.v, p_scn_md); - } - - return (SUCCESS); - } - - /********************************************************************* Processes a SCN Event request. *********************************************************************/ --- 321,324 ---- *************** *** 768,773 **** } ! //if (SUCCESS != send_iscsi_scn_to_members (NULL, (char *)&key->val, *(uint32_t *) &p_attr->val)) ! // return ( ISNS_SCN_EVENT_REJECTED_ERR ); break; --- 358,363 ---- } ! //if (SUCCESS != send_iscsi_scn_to_members (NULL, (char *)&key->val, *(uint32_t *) &p_attr->val),0) ! // return ( ISNS_SCN_EVENT_REJECTED_ERR ); break; *************** *** 780,785 **** } ! //if (SUCCESS != send_iscsi_scn_to_members (NULL, (char *)&key->val, *(uint32_t *) &p_attr->val)) ! // return ( ISNS_SCN_EVENT_REJECTED_ERR ); break; --- 370,375 ---- } ! //if (SUCCESS != send_iscsi_scn_to_members (NULL, (char *)&key->val, *(uint32_t *) &p_attr->val),0) ! // return ( ISNS_SCN_EVENT_REJECTED_ERR ); break; Index: iSNSdereg.c =================================================================== RCS file: /cvsroot/linuxisns/isnsNT/isnsserver/src/iSNSdereg.c,v retrieving revision 1.20 retrieving revision 1.21 diff -C2 -d -r1.20 -r1.21 *** iSNSdereg.c 21 Dec 2006 23:28:11 -0000 1.20 --- iSNSdereg.c 29 Dec 2006 20:40:17 -0000 1.21 *************** *** 56,60 **** extern uint32_t isns_esi_interval; extern uint32_t *dlist_node; /*[MAX_DD_PER_LIST];*/ - extern ISNS_LIST scn_list; extern ISNS_LIST scn_callback_list; extern ISNS_Msg *p_scn_msg_buffer; --- 56,59 ---- *************** *** 218,226 **** } - memset(p_scn_all_msg_buffer, 0, sizeof(ISNS_Msg)); - p_scn_all_msg_buffer->hdr.type = ISNS_SCN; - - ISNSAppendKey(p_scn_all_msg_buffer, ISNS_DDS_ID, ISNS_DDS_ID_SIZE, NULL, p_dds->id); - /* Remove DDS from DD's DDS List */ memberRemovedFlag = FALSE; --- 217,220 ---- *************** *** 256,260 **** p_dd->activeFlag = FALSE; - ISNSAppendKey(p_scn_all_msg_buffer, ISNS_DD_ID, ISNS_DD_ID_SIZE, NULL, dd_key.id); memberRemovedFlag = TRUE; --- 250,253 ---- *************** *** 277,288 **** } - ISNSAppendKey( p_scn_all_msg_buffer, ISNS_ISCSI_SCN_BITMAP, - ISNS_SCN_BITMAP_SIZE, NULL, - ISNS_SCN_OBJ_REMOVED | (memberRemovedFlag?ISNS_SCN_MEMBER_REMOVED:0)); - DeleteList(&p_dds->dd_list); - send_scn_parameter_change_to_all(p_scn_all_msg_buffer, 0); - delete_key.tag = DDS_ID_KEY; delete_key.val.dds_key.id = dds_key.id; --- 270,275 ---- *************** *** 320,325 **** ISNS_DBKey read_key; - /* int wasActiveFlag; */ - /* int isActiveFlag; */ DEBUG_0 (isns_dereg_debug &1, RemoveAttrDDS_Member); --- 307,310 ---- *************** *** 340,348 **** } - /* Send all scn */ - memset(p_scn_all_msg_buffer, 0, sizeof(ISNS_Msg)); - p_scn_all_msg_buffer->hdr.type = ISNS_SCN; - ISNSAppendKey(p_scn_all_msg_buffer, ISNS_DDS_ID, ISNS_DDS_ID_SIZE, NULL, p_dds->id); - /* Remove DDS from DD's DDS List */ memberRemovedFlag = FALSE; --- 325,328 ---- *************** *** 375,379 **** } - ISNSAppendKey( p_scn_all_msg_buffer, ISNS_DD_ID, ISNS_DD_ID_SIZE, NULL, p_dd->id); memberRemovedFlag = TRUE; --- 355,358 ---- *************** *** 410,418 **** } - ISNSAppendKey( p_scn_all_msg_buffer, ISNS_ISCSI_SCN_BITMAP, - ISNS_SCN_BITMAP_SIZE, NULL, ISNS_SCN_MEMBER_REMOVED ); - if ( memberRemovedFlag ) - send_scn_parameter_change_to_all(p_scn_all_msg_buffer, 0); - /* Store Entry */ ISNS_DBKey add_key; --- 389,392 ---- *************** *** 790,794 **** /* Delete the iFCP Node */ - ISNSRemoveSCNEntry (ISNS_PORT_NAME, buffer); DeleteList(&p_ifcp_node->dd_id_list); --- 764,767 ---- *************** *** 1046,1049 **** --- 1019,1025 ---- DEBUG_1 (isns_dereg_debug & 1, (Deregistering iSCSI Node:%s),iscsi_node_key); + memset(p_scn_all_msg_buffer, 0, sizeof(ISNS_Msg)); + p_scn_all_msg_buffer->hdr.type = ISNS_SCN; + scn_bitmap = 0; key.tag = ISCSI_ID_KEY; *************** *** 1080,1100 **** p_dd = (SOIP_Dd *)&entry5.data; - /* Send SCN */ - send_iscsi_scn_on_dd_mem_change (p_node, NULL, p_dd, 0, ISNS_SCN_OBJ_REMOVED); - Disable_DD_Member (p_dd, p_node->id.v, ISNS_DD_ISCSI_MEMBER); - /* Prepare the SCN */ - memset( p_scn_all_msg_buffer, 0, sizeof(ISNS_Msg)); - p_scn_all_msg_buffer->hdr.type = ISNS_SCN; - - ISNSAppendKey( p_scn_all_msg_buffer, ISNS_DD_ID, ISNS_DD_ID_SIZE, NULL, p_dd->id); - ISNSAppendKey( p_scn_all_msg_buffer, ISNS_DD_ISCSI_MEMBER, - PAD4(strlen(p_node->id.v)), p_node->id.v, 0); - ISNSAppendKey( p_scn_all_msg_buffer, ISNS_ISCSI_SCN_BITMAP, ISNS_SCN_BITMAP_SIZE, - NULL, ISNS_SCN_MEMBER_REMOVED ); - - send_scn_parameter_change_to_all( p_scn_all_msg_buffer, 0 ); - /* Store Entry */ ISNS_DBKey key; --- 1056,1061 ---- *************** *** 1130,1138 **** DeleteList(&p_node->dd_id_list); ! send_scn_object_change_to_all( ISNS_ISCSI_NODE_ID, PAD4 (strlen (iscsi_node_key)), ! iscsi_node_key, ISNS_SCN_OBJ_REMOVED); ! if ( p_node->scn_bitmap ) ! ISNSRemoveSCNEntry (ISNS_ISCSI_NODE_ID, iscsi_node_key); rval = ISNSdbDelete(&key); --- 1091,1097 ---- DeleteList(&p_node->dd_id_list); ! ISNSAppendKey( p_scn_all_msg_buffer, ISNS_ISCSI_NODE_ID, PAD4(strlen(iscsi_node_key)),iscsi_node_key, 0); ! send_iscsi_scn_to_members ( NULL, iscsi_node_key, p_scn_all_msg_buffer, ISNS_SCN_OBJ_REMOVED ); rval = ISNSdbDelete(&key); *************** *** 1221,1224 **** --- 1180,1186 ---- DEBUG_0 (isns_dereg_debug & 1, (Deregistering Portal)); + memset(p_scn_all_msg_buffer, 0, sizeof(ISNS_Msg)); + p_scn_all_msg_buffer->hdr.type = ISNS_SCN; + read_key.tag = PORTAL_ID_KEY; memcpy(&read_key.val,portal_key,sizeof(SOIP_Portal_Key)); *************** *** 1280,1285 **** { p_iscsi_name = (char *) GetNodeData( pnode2 ); ! send_scn_object_change_to_all( ISNS_ISCSI_NODE_ID, PAD4(strlen(p_iscsi_name)), p_iscsi_name, ! ISNS_SCN_OBJ_UPDATED); } --- 1242,1246 ---- { p_iscsi_name = (char *) GetNodeData( pnode2 ); ! send_iscsi_scn_to_members ( NULL, p_iscsi_name, p_scn_all_msg_buffer, ISNS_SCN_OBJ_REMOVED ); } *************** *** 1347,1354 **** } - memset(p_scn_all_msg_buffer, 0, sizeof(ISNS_Msg)); - p_scn_all_msg_buffer->hdr.type = ISNS_SCN; - ISNSAppendKey(p_scn_all_msg_buffer, ISNS_DD_ID, ISNS_DD_ID_SIZE, NULL, p_dd->id); - /* Remove DD Members */ pnode = NULL; --- 1308,1311 ---- *************** *** 1373,1378 **** return ( ISNS_UNKNOWN_ERR ); } - ISNSAppendKey( p_scn_all_msg_buffer, ISNS_ISCSI_NODE_ID, - PAD4(strlen(p_member->node_id)), p_member->node_id, 0); memberRemovedFlag = TRUE; break; --- 1330,1333 ---- *************** *** 1385,1390 **** return ( ISNS_UNKNOWN_ERR ); } - ISNSAppendKey( p_scn_all_msg_buffer, ISNS_PORT_NAME, - ISNS_PORT_NAME_SIZE, p_member->node_id, 0); memberRemovedFlag = TRUE; break; --- 1340,1343 ---- *************** *** 1399,1406 **** } - ISNSAppendKey( p_scn_all_msg_buffer, ISNS_ISCSI_SCN_BITMAP, - ISNS_SCN_BITMAP_SIZE, NULL, - ISNS_SCN_OBJ_REMOVED | (memberRemovedFlag?ISNS_SCN_MEMBER_REMOVED:0)); - pnode = NULL; while ( (pnode = GetNextNode( &p_dd->dds_list, pnode )) ) --- 1352,1355 ---- *************** *** 1434,1438 **** DeleteList( &p_dd->member_list ); DeleteList( &p_dd->dds_list ); - send_scn_parameter_change_to_all(p_scn_all_msg_buffer, 0); delete_key.tag=DD_ID_KEY; --- 1383,1386 ---- *************** *** 1505,1508 **** --- 1453,1458 ---- ISNS_SCN_MEMBER_REMOVED); removeMemberFlag = TRUE; + send_iscsi_scn_to_members ( NULL,(char *)&p_attr->val, p_scn_all_msg_buffer, ISNS_SCN_OBJ_REMOVED ); + break; case ISNS_DD_IFCP_MEMBER: *************** *** 1517,1520 **** --- 1467,1471 ---- ISNSAppendKey( p_scn_all_msg_buffer, ISNS_IFCP_SCN_BITMAP, ISNS_SCN_BITMAP_SIZE, NULL, ISNS_SCN_MEMBER_REMOVED); + send_iscsi_scn_to_members ( NULL, (char *)&p_attr->val, p_scn_all_msg_buffer, ISNS_SCN_OBJ_REMOVED ); removeMemberFlag = TRUE; break; *************** *** 1525,1531 **** } - if ( removeMemberFlag ) - send_scn_parameter_change_to_all( p_scn_all_msg_buffer, 0 ); - /* Store Entry */ key.tag = DD_ID_KEY; --- 1476,1479 ---- *************** *** 1602,1606 **** if ((p_lnode=FindNode(&p_node->dd_id_list, (char *)&p_dd->id, sizeof(p_dd->id)))) { - send_iscsi_scn_on_dd_mem_change (p_node, 0, p_dd, 0, ISNS_SCN_OBJ_REMOVED ); RemoveNode(&p_node->dd_id_list, p_lnode); --- 1550,1553 ---- *************** *** 1671,1709 **** } - /******************************************************************** - ********************************************************************/ - int - ISNSRemoveSCNEntry(uint32_t type, char *nodename) - { - SOIP_Scn_Entry new_entry; - ISNS_LIST_NODE *pnode; - - memset(&new_entry, 0, sizeof(new_entry)); - new_entry.type=type; - - if (ISNS_PORT_NAME==type) - { - memcpy(new_entry.name.v, nodename, ISNS_PORT_NAME_SIZE); - } - else if (ISNS_ISCSI_NODE_ID==type) - { - strncpy(new_entry.name.v, nodename, sizeof(new_entry.name.v) ); - } - else - { - DEBUG_1(isns_dereg_debug & 1, (SCN node type wrong: %u), type); - return (ERROR); - } - - if (NULL==(pnode=FindNode(&scn_list, (char *)&new_entry, sizeof(new_entry)))) - { - return (ERROR); - } - - RemoveNode(&scn_list, pnode); - - return (SUCCESS); - } - /********************************************************************* _Disable_DD_Member --- 1618,1621 ---- *************** *** 1820,1825 **** p_node->scn_sockfd = 0; - ISNSRemoveSCNEntry (ISNS_ISCSI_NODE_ID, p_node->id.v); - /* Store the node */ ISNS_DBKey key; --- 1732,1735 ---- *************** *** 1843,1847 **** p_ifcp_node->scn_bitmap=0; p_ifcp_node->scn_sockfd = 0; - ISNSRemoveSCNEntry (ISNS_PORT_NAME, p_ifcp_node->entity_id.id); /* Store the node */ --- 1753,1756 ---- *************** *** 1865,1869 **** p_entity->scn_bitmap=0; p_entity->scn_sockfd = 0; - ISNSRemoveSCNEntry (ISNS_ENTITY_ID, p_entity->eid.id); /* Store the node */ --- 1774,1777 ---- |