int flowcache_releaseflow(FLOWCACHE *flowcachep, FLOW **flowpp) { FLOWKEY *key; FLOWKEY search_key; if(!flowcachep || !flowpp || !(*flowpp)) { return FLOW_ENULL; } /** @todo remove any associated data with the flow */ key = &(*flowpp)->key; flowkey_normalize(&search_key, key); if(sfxhash_remove(flowcachep->ipv4_table, &search_key) != 0) { return FLOW_NOTFOUND; } /* we've successfully removed the node from the table */ *flowpp = NULL; return FLOW_SUCCESS; }
int RemoveSessionFromHashTable(Session *ssn) { SFXHASH *table; if (ssn->hashKey.proto == IPPROTO_TCP) { table = sessionHashTable; } else /* Implied IPPROTO_UDP */ { table = udpSessionHashTable; } return sfxhash_remove(table, &(ssn->hashKey)); }
/** * Remove a node from the scoreboard * * @param sbp scoreboard to modify * @param address address to remove * * @return FLOW_SUCCESS on success */ int scoreboard_remove(SCOREBOARD *sbp, u_int32_t *address) { if(!sbp) { return FLOW_ENULL; } if(sfxhash_remove(sbp->ipv4_table, address) != 0) { return FLOW_NOTFOUND; } return FLOW_SUCCESS; }
int server_stats_remove_ipv4(SERVER_STATS *ssp, u_int8_t ip_proto, u_int32_t address, u_int16_t port) { SERVER_KEY *kp = &s_key; if(!ssp) return FLOW_ENULL; kp->address = address; kp->port = port; kp->protocol = ip_proto; /* not like we can do anything if this failed */ sfxhash_remove(ssp->ipv4_table, kp); return FLOW_SUCCESS; }
tAppId checkSessionForAFForecast(tAppIdData *session, SFSnortPacket *p, int dir, const tAppIdConfig *pConfig, tAppId forecast) { AFActVal *check_act_val; rekeyMasterAFActKey(p, dir, forecast); //get out if there is no value if (!(check_act_val = (AFActVal*)sfxhash_find(pConfig->AF_actives, &master_key))) return APP_ID_UNKNOWN; //if the value is older than 5 minutes, remove it and get out time_t age; age = GetPacketRealTime - check_act_val->last; if (age < 0 || age > 300) { sfxhash_remove(pConfig->AF_actives, &master_key); return APP_ID_UNKNOWN; } session->payloadAppId = check_act_val->target; return forecast; }
int RemoveLWSession(Stream5SessionCache *sessionCache, Stream5LWSession *ssn) { Stream5Config *pPolicyConfig = NULL; tSfPolicyId policy_id = ssn->policy_id; mempool_free(&s5FlowMempool, ssn->flowdata); ssn->flowdata = NULL; pPolicyConfig = (Stream5Config *)sfPolicyUserDataGet(ssn->config, policy_id); if (pPolicyConfig != NULL) { pPolicyConfig->ref_count--; if ((pPolicyConfig->ref_count == 0) && (ssn->config != s5_config)) { sfPolicyUserDataClear (ssn->config, policy_id); Stream5FreeConfig(pPolicyConfig); if (sfPolicyUserPolicyGetActive(ssn->config) == 0) Stream5FreeConfigs(ssn->config); } } return sfxhash_remove(sessionCache->hashTable, &(ssn->key)); }
int RemoveLWSession(Stream5SessionCache *sessionCache, Stream5LWSession *ssn) { mempool_free(&s5FlowMempool, ssn->flowdata); ssn->flowdata = NULL; return sfxhash_remove(sessionCache->hashTable, &(ssn->key)); }
/* * Hash test program : use 'sfxhash 1000 50000' to stress the Auto_NodeRecover feature */ int main ( int argc, char ** argv ) { int i; SFXHASH * t; SFXHASH_NODE * n; char strkey[256], strdata[256], * p; int num = 100; int mem = 0; memset(strkey,0,20); memset(strdata,0,20); if( argc > 1 ) { num = atoi(argv[1]); } if( argc > 2 ) { mem = atoi(argv[2]); } /* Create a Hash Table */ t = sfxhash_new( 100, /* one row per element in table, when possible */ 20, /* key size : padded with zeros */ 20, /* data size: padded with zeros */ mem, /* max bytes, 0=no max */ 1, /* enable AutoNodeRecovery */ anrfree, /* provide a function to let user know we want to kill a node */ usrfree, /* provide a function to release user memory */ 1); /* Recycle nodes */ if(!t) { printf("Low Memory!\n"); exit(0); } /* Add Nodes to the Hash Table */ for(i=0;i<num;i++) { snprintf(strkey, sizeof(strkey), "KeyWord%5.5d",i+1); strkey[sizeof(strkey) - 1] = '\0'; snprintf(strdata, sizeof(strdata), "KeyWord%5.5d",i+1); strdata[sizeof(strdata) - 1] = '\0'; //strupr(strdata); sfxhash_add( t, strkey /* user key */ , strdata /* user data */ ); } /* Find and Display Nodes in the Hash Table */ printf("\n** FIND KEY TEST\n"); for(i=0;i<num;i++) { snprintf(strkey, sizeof(strkey) - 1, "KeyWord%5.5d",i+1); strkey[sizeof(strkey) - 1] = '\0'; p = (char*) sfxhash_find( t, strkey ); if(p)printf("Hash-key=%*s, data=%*s\n", strlen(strkey),strkey, strlen(strkey), p ); } /* Show memcap memory */ printf("\n...******\n"); sfmemcap_showmem(&t->mc); printf("...******\n"); /* Display All Nodes in the Hash Table findfirst/findnext */ printf("\n...FINDFIRST / FINDNEXT TEST\n"); for( n = sfxhash_findfirst(t); n != 0; n = sfxhash_findnext(t) ) { printf("hash-findfirst/next: n=%x, key=%s, data=%s\n", n, n->key, n->data ); /* remove node we are looking at, this is first/next safe. */ if( sfxhash_remove(t,n->key) ) { printf("...ERROR: Could not remove the key node!\n"); } else { printf("...key node removed\n"); } } printf("...Auto-Node-Recovery: %d recycle attempts, %d completions.\n",t->anr_tries,t->anr_count); /* Free the table and it's user data */ printf("...sfxhash_delete\n"); sfxhash_delete( t ); printf("\nnormal pgm finish\n\n"); return 0; }