static struct h_scalar *shared_user_cache_create_fn(struct h_table *ht, void *key) { struct shared_user_cache_key *k = (struct shared_user_cache_key *)key; struct shared_user_cache *dc; if(rte_mempool_mc_get(shared_user_cache_tbl.mem_cache, (void **)&dc) <0) return NULL; dc->flck = *k; dc->flcv.shared_value = 0; return &dc->h_scalar; }
static struct h_scalar *ftp_cache_create_fn(struct h_table *ht, void *key) { struct ftp_cache_key *k = (struct ftp_cache_key *)key; struct ftp_cache *fc; uint32_t lcore_id = rte_lcore_id(); if(rte_mempool_mc_get(ftp_cache_tbl.mem_cache[lcore_id], (void **)&fc) <0) return NULL; fc->sip = k->sip; fc->dip = k->dip; fc->dport = k->dport; fc->proto_mark = k->proto_mark; fc->lcore_id = lcore_id; rte_spinlock_init(&fc->lock); return &fc->h_scalar; }
int rte_log_add_in_history(const char *buf, size_t size) { struct log_history *hist_buf = NULL; static const unsigned hist_buf_size = LOG_ELT_SIZE - sizeof(*hist_buf); void *obj; if (history_enabled == 0) return 0; rte_spinlock_lock(&log_list_lock); /* get a buffer for adding in history */ if (log_history_size > RTE_LOG_HISTORY) { hist_buf = STAILQ_FIRST(&log_history); STAILQ_REMOVE_HEAD(&log_history, next); } else { if (rte_mempool_mc_get(log_history_mp, &obj) < 0) obj = NULL; hist_buf = obj; } /* no buffer */ if (hist_buf == NULL) { rte_spinlock_unlock(&log_list_lock); return -ENOBUFS; } /* not enough room for msg, buffer go back in mempool */ if (size >= hist_buf_size) { rte_mempool_mp_put(log_history_mp, hist_buf); rte_spinlock_unlock(&log_list_lock); return -ENOBUFS; } /* add in history */ memcpy(hist_buf->buf, buf, size); hist_buf->buf[size] = hist_buf->buf[hist_buf_size-1] = '\0'; hist_buf->size = size; STAILQ_INSERT_TAIL(&log_history, hist_buf, next); log_history_size++; rte_spinlock_unlock(&log_list_lock); return 0; }
static struct h_scalar *session_hash_cache_create_fn(struct h_table *ht, void *key, uint8_t *is_syn) { struct key_5tuple *k = (struct key_5tuple *)key; struct sft_fdb_entry *dc; if(k->proto == IPPROTO_TCP && !k->is_syn) { return NULL; } struct sess_hash *hash = get_session_hash_by_lcore(rte_lcore_id()); if(rte_mempool_mc_get(hash->mem_cache, (void **)&dc) <0) return NULL; hash->curr_entry_count++; sess_init(dc, k); return &dc->h_scalar; }