Пример #1
0
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;
}
Пример #2
0
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;
}
Пример #3
0
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;
}
Пример #4
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;
}