From: Robert W. <wrw...@us...> - 2006-12-21 23:28:15
|
Update of /cvsroot/linuxisns/isnsNT/isnsserver/src In directory sc8-pr-cvs6.sourceforge.net:/tmp/cvs-serv12220/src Modified Files: iSNSdereg.c iSNSquery.c iSNSreg.c iSNSscn.c Log Message: upgrade State Change Notification feature Index: iSNSreg.c =================================================================== RCS file: /cvsroot/linuxisns/isnsNT/isnsserver/src/iSNSreg.c,v retrieving revision 1.19 retrieving revision 1.20 diff -C2 -d -r1.19 -r1.20 *** iSNSreg.c 21 Dec 2006 00:50:51 -0000 1.19 --- iSNSreg.c 21 Dec 2006 23:28:12 -0000 1.20 *************** *** 2293,2301 **** return (ERROR); - //if (d.dptr == NULL) - //{ - // Send_IFCP_SCN (p_ifcp_node, NULL, ISNS_SCN_OBJ_REMOVED); - //} - /* Store Port Name */ ISNS_DBKey key; --- 2293,2296 ---- *************** *** 2384,2391 **** int updateFlag; uint32_t scn_bitmap= 0; - uint32_t new_scn_bitmap=0; uint32_t safe_len; int newIscsiNodeFlag; - /* ISNS_LIST_NODE *p_lnode; */ DEBUG_0 ( isns_reg_debug & 1, (Registering iSCSI Node) ); --- 2379,2384 ---- *************** *** 2550,2557 **** Check_if_member_of_DD (p_node->id.v); } - else - { - scn_bitmap |= ISNS_SCN_OBJ_UPDATED; - } memset( p_scn_all_msg_buffer, 0, sizeof(ISNS_Msg)); --- 2543,2546 ---- *************** *** 2657,2670 **** if ( newIscsiNodeFlag ) ! new_scn_bitmap |= ISNS_SCN_OBJ_ADDED; else if ( updateFlag ) ! new_scn_bitmap |= ISNS_SCN_OBJ_UPDATED; ! ! send_scn_parameter_change_to_all ( p_scn_all_msg_buffer, new_scn_bitmap); ! ! new_scn_bitmap = 0; ! ! if ( p_node->activeFlag ) ! send_iscsi_scn_to_members ( p_node, NULL, p_scn_all_msg_buffer, new_scn_bitmap ); /* Decide on Looping */ --- 2646,2652 ---- if ( newIscsiNodeFlag ) ! send_iscsi_scn_to_members ( p_node, NULL, p_scn_all_msg_buffer, ISNS_SCN_OBJ_ADDED ); else if ( updateFlag ) ! send_iscsi_scn_to_members ( p_node, NULL, p_scn_all_msg_buffer, ISNS_SCN_OBJ_UPDATED ); /* Decide on Looping */ *************** *** 3322,3328 **** } - memset( p_scn_all_msg_buffer, 0, sizeof(ISNS_Msg)); - p_scn_all_msg_buffer->hdr.type = ISNS_SCN; - /* Loop */ memberAddedFlag = FALSE; --- 3304,3307 ---- *************** *** 3425,3429 **** if ( memberAddedFlag ) { ! send_scn_parameter_change_to_all( p_scn_all_msg_buffer, 0); } else --- 3404,3408 ---- if ( memberAddedFlag ) { ! // send_scn_parameter_change_to_all( p_scn_all_msg_buffer, 0); } else Index: iSNSscn.c =================================================================== RCS file: /cvsroot/linuxisns/isnsNT/isnsserver/src/iSNSscn.c,v retrieving revision 1.8 retrieving revision 1.9 diff -C2 -d -r1.8 -r1.9 *** iSNSscn.c 19 Dec 2006 22:25:31 -0000 1.8 --- iSNSscn.c 21 Dec 2006 23:28:12 -0000 1.9 *************** *** 92,96 **** /********************************************************************* *********************************************************************/ ! int send_iscsi_scn_md(char *p_node_name, ISNS_Msg_Descp *p_md) { --- 92,96 ---- /********************************************************************* *********************************************************************/ ! static int send_iscsi_scn_md(char *p_node_name, ISNS_Msg_Descp *p_md) { *************** *** 460,480 **** ********************************************************************/ int ! send_iscsi_scn_to_members ( SOIP_Iscsi * p_src_node, char *p_src_name, ! ISNS_Msg *p_scn_msg, uint32_t event_bitmap ) { - int foundSCNPortal; - int kk; - ISNS_Attr *p_attr; - SOIP_Iscsi *p_iscsi_node; ISNS_Msg *p_msg; time_t t; - SOIP_Entity *p_entity; - SOIP_Portal *p_portal = NULL; - ISNS_LIST_NODE *pnode; - ISNS_ATTR_VALS_CB *attr_vals_cb; - char buffer[ 256 ] = {0}; int rval; ! if ( p_src_node == NULL ) { /* Fetch the node */ --- 460,477 ---- ********************************************************************/ int ! send_iscsi_scn_to_members ( SOIP_Iscsi * p_node, char *p_src_name, ! ISNS_Msg *p_scn_msg, uint32_t scn_bitmap ) { ISNS_Msg *p_msg; time_t t; int rval; + ISNS_LIST_NODE *ddnode; + ISNS_LIST_NODE *pnode; + SOIP_Iscsi *iscsi_node; ! p_msg=&p_scn_md->msg; ! memset(p_scn_md, 0, sizeof(ISNS_Msg_Descp)); ! ! if ( p_node == NULL ) { /* Fetch the node */ *************** *** 482,643 **** 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; } ! /* Zero out msg */ ! /* Find Members */ ! memset (p_scn_md, 0, sizeof (ISNS_Msg_Descp)); ! memset (ddmem, 0, MAX_MEMBER_PER_DD*sizeof(SOIP_Dd_Member)); ! memset( dlist_node, 0, MAX_DD_PER_LIST*sizeof(uint32_t)); ! Copy_DD_List(&p_src_node->dd_id_list, dlist_node); ! Append_Nodes_From_DD_List (dlist_node, ddmem, ! ISNS_DD_ISCSI_MEMBER); ! ! for (kk = 0; kk < MAX_MEMBER_PER_DD && ddmem[ kk ].type != 0; kk++) { ! /* Fetch the node */ ! ISNS_DBKey read_key; ! read_key.tag = ISCSI_ID_KEY; ! strcpy(read_key.val.node_key.v,ddmem[kk].node_id); ! rval = ISNSdbRead(&read_key,&scn_entry); ! if (rval != SUCCESS) ! return rval; ! ! p_iscsi_node = (SOIP_Iscsi *)&scn_entry.data; ! ! /* Check to see if Node has scn registered */ ! if (p_iscsi_node->scn_bitmap & event_bitmap) ! { ! /* Send SCN */ ! ! memset (p_scn_md, 0, sizeof (ISNS_Msg_Descp)); ! p_attr = (ISNS_Attr *)(&p_scn_md->msg.payload); ! p_msg = &p_scn_md->msg; ! p_msg->hdr.type = ISNS_SCN; ! ! ! /* Append dest Attr */ ! ISNSAppendKey (p_msg, ISNS_ISCSI_NODE_ID, ! PAD4 (strlen (p_iscsi_node->id.v)), ! p_iscsi_node->id.v, 0); ! ! /* Append TimeStamp */ ! ISNSAppendKey (p_msg, ISNS_TIMESTAMP, ISNS_TIMESTAMP_SIZE, ! NULL, time (&t)); ! ! /* Copy from the scn buffer */ ! if (p_scn_msg) ! { ! memcpy( (char *)&p_msg->payload + p_msg->hdr.msg_len, ! &p_scn_msg->payload, p_scn_msg->hdr.msg_len); ! ! p_msg->hdr.msg_len += p_scn_msg->hdr.msg_len; ! } ! else ! { ! /* Save the node for sending to src node */ ! ISNSAppendKey( p_msg, ISNS_ISCSI_NODE_ID, ! PAD4(strlen(p_src_node->id.v)), p_src_node->id.v, 0); ! ! /* Append Bitmap */ ! ISNSAppendKey( p_msg, ISNS_ISCSI_SCN_BITMAP, ! ISNS_SCN_BITMAP_SIZE, NULL, event_bitmap); ! } ! ! ! p_scn_md->msg.hdr.xid = scn_xid++; ! ! /* Determine how to send */ ! if ( p_iscsi_node->scn_callback ) ! { ! /* local SCN */ ! attr_vals_cb = ISNSAttrGetList(p_scn_md); ! ! p_iscsi_node->scn_callback(attr_vals_cb); ! ! /* free memory */ ! ISNSFreeBuffer ((char *)attr_vals_cb->attr_val_sptr); ! ISNSFreeBuffer ((char *)attr_vals_cb); ! } ! else if ( p_iscsi_node->scn_sockfd ) ! { ! /* TCP */ ! p_scn_md->cb.sock.socketType = ISNS_SOCKET_TYPE_TCP; ! p_scn_md->cb.sock.sockfd = p_iscsi_node->scn_sockfd; ! ! if ( SUCCESS!=ISNSSendMsg (p_scn_md) ) ! { ! DEBUG_0(sns_scn_debug & 1, (Warning: Failure sending SCN)); ! p_iscsi_node->scn_bitmap=0; ! ISNS_DBKey key; ! key.tag = ISCSI_ID_KEY; ! strcpy(key.val.node_key.v,ddmem[kk].node_id); ! ISNSdbWrite(&key,scn_entry); ! } ! } ! else ! { ! /* Pick a portal, send out a SCN */ ! /* Fetch entity */ ! memset (buffer, 0, sizeof (buffer)); ! strncpy (buffer, p_iscsi_node->entity_id.id, sizeof(buffer) ); ! SNSdbFetchEntity (buffer, &p_entity, &scn_entry); ! /* Fetch portal */ ! foundSCNPortal = FALSE; ! pnode = NULL; ! while ( (pnode = GetNextNode(&p_entity->iportal_list, pnode)) ) ! { ! /* Fetch Portal */ ! ISNS_DBKey read_key; ! read_key.tag = PORTAL_ID_KEY; ! memcpy(&read_key.val,GetNodeData(pnode),sizeof(SOIP_DB_Portal)); ! rval = ISNSdbRead(&read_key,&scn_entry2); ! if (rval != SUCCESS) ! return rval; ! p_portal = (SOIP_Portal *)&scn_entry2.data; ! /* Get first ESI/SCN Portal */ ! if ( p_portal->esi_port != 0 ) ! { ! foundSCNPortal = TRUE; ! break; ! } ! } ! /* Send out SCN */ ! if ( foundSCNPortal ) ! { ! p_scn_md->cb.sock.socketType = ISNS_SOCKET_TYPE_UDP; ! p_scn_md->cb.sock.addr.sin_family = AF_INET; ! p_scn_md->cb.sock.len = sizeof (p_scn_md->cb.sock.addr); ! memcpy (&p_scn_md->cb.sock.addr.sin_addr.s_addr, ! p_portal->ip_addr.v + 12, ! sizeof (p_scn_md->cb.sock.addr.sin_addr.s_addr)); ! p_scn_md->cb.sock.addr.sin_port = ! htons ((short)(p_portal->esi_port & 0xFFFF)); ! ISNSSendMsg (p_scn_md); ! } ! else ! { ! DEBUG_0 (sns_scn_debug & 1, (No valid Portal to send SCN)); ! } ! } ! } } return ( SUCCESS ); } --- 479,557 ---- read_key.tag = ISCSI_ID_KEY; strcpy(read_key.val.node_key.v,p_src_name); ! rval = ISNSdbRead(&read_key,&scn_entry); if (rval != SUCCESS ) return rval; ! p_node = (SOIP_Iscsi *)&scn_entry.data.node; } ! ddnode = NULL; ! while ( (ddnode = GetNextNode(&p_node->dd_id_list, ddnode)) ) { ! int dd_id; ! dd_id = *(uint32_t *)GetNodeData (ddnode); ! SOIP_Dd *p_dd; ! ISNS_DBKey read_key; ! read_key.tag = DD_ID_KEY; ! read_key.val.dd_key.id = dd_id; ! rval = ISNSdbRead(&read_key,&scn_entry2); ! if (rval != SUCCESS) ! break; ! p_dd = &scn_entry2.data.dd; ! /* For each member */ ! pnode = NULL; ! while ( (pnode = GetNextNode(&p_dd->member_list, pnode)) ) ! { ! SOIP_Dd_Member *p_member; ! p_member=(SOIP_Dd_Member *)GetNodeData(pnode); ! if (p_member->type != ISNS_DD_ISCSI_MEMBER) ! continue; ! if ( !strcmp(p_node->id.v,p_member->node_id) ) ! { ! continue; ! } + /* Fetch Node */ + ISNS_DBKey key; + key.tag = ISCSI_ID_KEY; + strcpy(key.val.node_key.v,p_member->node_id); + rval = ISNSdbRead(&key,&scn_entry3); + if (rval != SUCCESS) + return ERROR; ! iscsi_node = (SOIP_Iscsi *)&scn_entry3.data.node; ! if (!(iscsi_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->payload, p_scn_msg->hdr.msg_len); ! p_msg->hdr.msg_len+=p_scn_msg->hdr.msg_len; ! /* Send SCN msg */ ! send_iscsi_scn_md(p_member->node_id, p_scn_md); ! } } + return ( SUCCESS ); } *************** *** 816,1177 **** } - #if 0 - /********************************************************************* - Sends an iSCSI SCN out to all the DD member that is passed in. - *********************************************************************/ - int - send_iscsi_scn_to_dd ( SOIP_Iscsi * p_src_node, char *p_src_name, - SOIP_Dd *p_dd, uint32_t dd_id, uint32_t event_bitmap ) - { - int foundSCNPortal; - ISNS_Attr *p_attr; - SOIP_Iscsi *p_iscsi_node; - ISNS_Msg *p_msg; - time_t t; - SOIP_Entity *p_entity; - SOIP_Portal *p_portal; - ISNS_LIST_NODE *pnode; - ISNS_LIST_NODE *pnode2; - ISNS_ATTR_VALS_CB *attr_vals_cb; - SOIP_DD_Key dd_key; - char buffer[ 256 ] = {0}; - - if ( p_src_node == NULL ) - { - /* Fetch the node */ - ISNS_key read_key; - read_key.tag = ISCSI_ID_KEY; - strcpy(read_key.val.node_name.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_id = dd_key.id; - rval = ISNSdbRead(&read_key,&scn_entry4); - if (rval != SUCCESS) - return rval; - - p_dd = (SOIP_Dd *) &scn_entry4.data; - - } - - /* Zero out msg */ - memset (p_scn_md, 0, sizeof (ISNS_Msg_Descp)); - - pnode2 = NULL; - while ( (pnode2 = GetNextNode(&p_dd->member_list, pnode2)) ) - { - SOIP_Dd_Member *p_member; - - p_member = (SOIP_Dd_Member *)GetNodeData( pnode2 ); - - if ( p_member->status == ISNS_DD_MEMBER_DISABLE ) - continue; - - /* Fetch the node */ - ISNS_DBKey read_key; - read_key.tag = ISCSI_ID_KEY; - strcpy(read_key.val,node_name.v,p_member->node_id); - rval = ISNSdbRead(&read_key,&scn_entry); - if (rval != SUCCESS) - return rval; - - p_iscsi_node = (SOIP_Iscsi *)&scn_entry.data; - - /* Check to see if Node has scn registered */ - if (p_iscsi_node->scn_bitmap & event_bitmap) - { - /* Send SCN */ - - memset (p_scn_md, 0, sizeof (ISNS_Msg_Descp)); - p_attr = (ISNS_Attr *)(&p_scn_md->msg.payload); - p_msg = &p_scn_md->msg; - p_msg->hdr.type = ISNS_SCN; - - - /* Append dest Attr */ - ISNSAppendKey (p_msg, ISNS_ISCSI_NODE_ID, - PAD4 (strlen (p_iscsi_node->id.v)), - p_iscsi_node->id.v, 0); - - /* Append TimeStamp */ - ISNSAppendKey (p_msg, ISNS_TIMESTAMP, ISNS_TIMESTAMP_SIZE, - NULL, time (&t)); - - /* Append src attr & event */ - ISNSAppendKey (p_msg, ISNS_ISCSI_NODE_ID, - PAD4 (strlen (p_src_node->id.v)), p_src_node->id.v, - 0); - - /* Append DD ID */ - ISNSAppendKey (p_msg, ISNS_DD_ID, ISNS_DD_ID_SIZE, NULL, p_dd->id); - - /* Append Bitmap */ - ISNSAppendKey (p_msg, ISNS_ISCSI_SCN_BITMAP, ISNS_SCN_BITMAP_SIZE, - NULL, event_bitmap); - - p_scn_md->msg.hdr.xid = scn_xid++; - - /* Determine how to send */ - if ( p_iscsi_node->scn_callback ) - { - /* local SCN */ - attr_vals_cb = ISNSAttrGetList(p_scn_md); - - p_iscsi_node->scn_callback(attr_vals_cb); - - /* free memory */ - ISNSFreeBuffer ((char *)attr_vals_cb->attr_val_sptr); - ISNSFreeBuffer ((char *)attr_vals_cb); - } - else if ( p_iscsi_node->scn_sockfd ) - { - /* TCP */ - p_scn_md->cb.sock.socketType = ISNS_SOCKET_TYPE_TCP; - p_scn_md->cb.sock.sockfd = p_iscsi_node->scn_sockfd; - - if ( SUCCESS!=ISNSSendMsg (p_scn_md) ) - { - DEBUG_0(sns_scn_debug & 1, (Warning: Failure sending SCN)); - p_iscsi_node->scn_bitmap=0; - - ISNS_DBKey key; - key.tag = ISCSI_ID_KEY; - strcpy(key.val.node_name.v,p_member->node_id); - ISNSdbWrite(&key,scn_entry); - } - } - else - { - /* Pick a portal, send out a SCN */ - - /* Fetch entity */ - memset (buffer, 0, sizeof (buffer)); - strncpy (buffer, p_iscsi_node->entity_id.id, sizeof(buffer) ); - SNSdbFetchEntity (buffer, &p_entity, &scn_entry); - - /* Fetch portal */ - foundSCNPortal = FALSE; - pnode = NULL; - while ( (pnode = GetNextNode(&p_entity->iportal_list, pnode)) ) - { - /* Fetch Portal */ - ISNS_DBKey read_key; - read_key.tag = PORTAL_ID_KEY; - memcpy(&read_key.val,GetNodeData(pnode),sizeof(SOIP_DB_Portal)); - rval = ISNSdbRead(&read_key,&scn_entry2); - if (rval != SUCCESS) - return rval; - - p_portal = (SOIP_Portal *)&scn_entry2.data; - - /* Get first ESI/SCN Portal */ - if ( p_portal->esi_port != 0 ) - { - foundSCNPortal = TRUE; - break; - } - } - - - /* Send out SCN */ - if ( foundSCNPortal ) - { - p_scn_md->cb.sock.socketType = ISNS_SOCKET_TYPE_UDP; - p_scn_md->cb.sock.addr.sin_family = AF_INET; - p_scn_md->cb.sock.len = sizeof (p_scn_md->cb.sock.addr); - - memcpy (p_scn_md->cb.sock.addr.sin_addr.s_addr, - p_portal->ip_addr.v + 12, - sizeof (p_scn_md->cb.sock.addr.sin_addr.s_addr)); - - p_scn_md->cb.sock.addr.sin_port = - htons ((short)(p_portal->esi_port & 0xFFFF)); - - ISNSSendMsg (&p_scn_md); - - } - else - { - DEBUG_0 (sns_scn_debug & 1, (No valid Portal to send SCN)); - } - - } - - } - } - return ( SUCCESS ); - } - #endif - - /********************************************************************* - Sends an iFCP SCN out. - *********************************************************************/ - int - Send_IFCP_SCN (SOIP_Ifcp * p_src_node, char *p_src_name, - uint32_t event_bitmap) - { - int kk; - int foundSCNPortal; - SOIP_DB_Entry lentry; - SOIP_DB_Entry lentry2; - SOIP_DB_Entry lentry3; - ISNS_Attr *p_attr; - SOIP_Entity *p_entity; - SOIP_Portal *p_portal = NULL; - SOIP_Ifcp *p_ifcp_node; - ISNS_Msg *p_msg; - time_t t; - ISNS_LIST_NODE *pnode; - int rval; - - foundSCNPortal = FALSE; - if (p_src_node == NULL) - { - ISNS_DBKey read_key; - read_key.tag = PORT_NAME_KEY; - memcpy(&read_key.val,p_src_name,PORT_NAME_SIZE); - rval = ISNSdbRead(&read_key,&lentry3); - if (rval != SUCCESS) - return rval; - - p_src_node = &lentry3.data.port; - } - - /* Zero out msg */ - memset (p_scn_md, 0, sizeof (ISNS_Msg_Descp)); - - memset (ddmem, 0, MAX_MEMBER_PER_DD*sizeof(SOIP_Dd_Member)); - memset( dlist_node, 0, MAX_DD_PER_LIST*sizeof(uint32_t)); - Copy_DD_List(&p_src_node->dd_id_list, dlist_node); - Append_Nodes_From_DD_List (dlist_node, ddmem, - ISNS_DD_IFCP_MEMBER); - - for (kk = 0; kk < MAX_MEMBER_PER_DD && ddmem[kk].type != 0; kk++) - { - /* Fetch the node */ - ISNS_DBKey read_key; - read_key.tag = PORT_NAME_KEY; - memcpy(&read_key.val,ddmem[kk].node_id,ISNS_PORT_NAME_SIZE); - rval = ISNSdbRead(&read_key,&lentry); - if (rval != SUCCESS) - return rval; - - p_ifcp_node = &lentry.data.port; - - /* Check to see if Node has scn registered */ - if (p_ifcp_node->scn_bitmap & event_bitmap) - { - /* Send SCN */ - - memset (p_scn_md, 0, sizeof (ISNS_Msg_Descp)); - p_attr = (ISNS_Attr *)(&p_scn_md->msg.payload); - p_msg = &p_scn_md->msg; - p_msg->hdr.type = ISNS_SCN; - - /* Append dest Attr */ - ISNSAppendKey (p_msg, ISNS_PORT_NAME, ISNS_PORT_NAME_SIZE, - p_ifcp_node->port_name.v, 0); - - /* Append TimeStamp */ - ISNSAppendKey (p_msg, ISNS_TIMESTAMP, ISNS_TIMESTAMP_SIZE, - NULL, time (&t)); - - /* Append src attr & event */ - ISNSAppendKey (p_msg, ISNS_PORT_NAME, ISNS_PORT_NAME_SIZE, - p_src_node->id.v, 0); - - /* Append Bitmap */ - ISNSAppendKey (p_msg, ISNS_IFCP_SCN_BITMAP, ISNS_SCN_BITMAP_SIZE, - NULL, event_bitmap); - - p_scn_md->msg.hdr.xid = scn_xid++; - /* Determine how to send */ - if (p_ifcp_node->scn_sockfd) - { - /* TCP */ - p_scn_md->cb.sock.socketType = ISNS_SOCKET_TYPE_TCP; - p_scn_md->cb.sock.sockfd = p_ifcp_node->scn_sockfd; - - if (SUCCESS != ISNSSendMsg (p_scn_md)) - { - ISNSRemoveSCNEntry (ISNS_PORT_NAME, p_ifcp_node->port_name.v); - } - } - else - { - char buffer[256]; - /* Pick a portal, send out a SCN */ - - /* Fetch entity */ - memset (buffer, 0, sizeof (buffer)); - strncpy (buffer, p_ifcp_node->entity_id.id, sizeof(buffer) ); - SNSdbFetchEntity (buffer, &p_entity, &lentry); - - /* Fetch portal */ - pnode=NULL; - while ((pnode=GetNextNode(&p_entity->iportal_list, pnode))) - { - /* Fetch Portal */ - ISNS_DBKey read_key; - read_key.tag = PORTAL_ID_KEY; - memcpy(&read_key.val,GetNodeData(pnode),sizeof(SOIP_DB_Portal)); - if (rval != SUCCESS) - return rval; - - p_portal = (SOIP_Portal *)&lentry2.data; - - /* Get first ESI/SCN Portal */ - if (p_portal->esi_port != 0) - { - foundSCNPortal = TRUE; - break; - } - } - - /* Send out SCN */ - if (foundSCNPortal) - { - p_scn_md->cb.sock.socketType = ISNS_SOCKET_TYPE_UDP; - p_scn_md->cb.sock.addr.sin_family = AF_INET; - p_scn_md->cb.sock.len = sizeof (p_scn_md->cb.sock.addr); - - memcpy (&p_scn_md->cb.sock.addr.sin_addr.s_addr, - p_portal->ip_addr.v + 12, - sizeof (p_scn_md->cb.sock.addr.sin_addr.s_addr)); - - p_scn_md->cb.sock.addr.sin_port = - htons ((short)(p_portal->esi_port & 0xFFFF)); - - ISNSSendMsg (p_scn_md); - - } - else - { - DEBUG_0 (sns_scn_debug & 1, (No valid Portal to send SCN)); - } - - } - } - } - return ( SUCCESS ); - } - - /********************************************************************* Processes a SCN Event request. --- 730,733 ---- *************** *** 1211,1218 **** return ( ISNS_SCN_EVENT_REJECTED_ERR ); } ! #if 0 ! if (SUCCESS != send_iscsi_scn_to_members (NULL, (char *)&key->val, *(uint32_t *) &p_attr->val)) ! return ( ISNS_SCN_EVENT_REJECTED_ERR ); ! #endif break; --- 767,773 ---- return ( ISNS_SCN_EVENT_REJECTED_ERR ); } ! ! //if (SUCCESS != send_iscsi_scn_to_members (NULL, (char *)&key->val, *(uint32_t *) &p_attr->val)) ! // return ( ISNS_SCN_EVENT_REJECTED_ERR ); break; *************** *** 1225,1230 **** } ! if (SUCCESS != Send_IFCP_SCN (NULL, (char *)&key->val, *(uint32_t *) &p_attr->val)) ! 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; Index: iSNSdereg.c =================================================================== RCS file: /cvsroot/linuxisns/isnsNT/isnsserver/src/iSNSdereg.c,v retrieving revision 1.19 retrieving revision 1.20 diff -C2 -d -r1.19 -r1.20 *** iSNSdereg.c 19 Dec 2006 22:25:31 -0000 1.19 --- iSNSdereg.c 21 Dec 2006 23:28:11 -0000 1.20 *************** *** 682,686 **** ISNS_DD_IFCP_MEMBER)) return (ISNS_UNKNOWN_ERR); - Send_IFCP_SCN (p_ifcp_node, NULL, ISNS_SCN_OBJ_REMOVED); /* Store Entry */ --- 682,685 ---- *************** *** 1666,1670 **** { RemoveNode(&p_node->dd_id_list, p_lnode); - Send_IFCP_SCN (p_node, NULL, ISNS_SCN_OBJ_REMOVED ); } --- 1665,1668 ---- Index: iSNSquery.c =================================================================== RCS file: /cvsroot/linuxisns/isnsNT/isnsserver/src/iSNSquery.c,v retrieving revision 1.15 retrieving revision 1.16 diff -C2 -d -r1.15 -r1.16 *** iSNSquery.c 21 Dec 2006 00:50:51 -0000 1.15 --- iSNSquery.c 21 Dec 2006 23:28:11 -0000 1.16 *************** *** 53,67 **** /* Global */ extern int isns_query_debug; - extern uint32_t isns_esi_interval; extern uint32_t *dlist_src; /*[MAX_DD_PER_LIST];*/ extern uint32_t *dlist_node; /*[MAX_DD_PER_LIST];*/ extern SOIP_Dd_Member *ddmem; /* [100]; */ - extern ISNS_LIST scn_list; - extern ISNS_LIST scn_callback_list; - extern ISNS_Msg *p_scn_msg_buffer; - extern ISNS_Msg *p_scn_all_msg_buffer; - extern ISNS_Msg_Descp *p_scn_md; extern ISNS_Msg_Descp *p_rspMd; - extern dbStats iSNS_stats; /* --- 53,60 ---- |