hyperscan开发碰到的问题

1. dpdk多线程使用hyperscan模式查询,访问全局的db时报错。

应该使用rte_malloc()rte_free()为hyperscan分配内存。如下:

void *hs_rte_malloc(size_t *size)
{
    return rte_malloc("hs_malloc", size, 0);
}

void hs_rte_free(void *ptr)
{
    rte_free(ptr);
}

void hs_init() {
    ...
    /* 设置自定义hs动态分配内存和释放内存的函数 */
    hs_set_allocator(hs_rte_malloc, hs_rte_free);
    ...
}

2. dpdk多线程使用hyperscan,只有一个scratch时报段错误。

pattern中的16进制做转换,例如:

/* 0x00 ==> \x00 */
int i = 0, j = 0;
if (pattern[i] == 0x00) {
    expression[j++] = '\\';
    expression[j++] = '\x';
    expression[j++] = '\0';
    expression[j++] = '\0';
}

 

你可能感兴趣的:(协议分析)