Я пытаюсь установить структуру ACL для пакетов ICMP.Для этого я устанавливаю указатель данных на поле IP src в mbuf и использую следующую структуру для определения массива ACL:
struct icmp_acl_tuple {
uint32_t src_ip;
uint32_t dst_ip;
uint8_t type;
uint8_t code;};
static struct rte_acl_field_def icmp_defs[C_NUM_FIELDS_ICMP] = {
{
.type = RTE_ACL_FIELD_TYPE_BITMASK,
.size = sizeof(uint8_t),
.field_index = C_TYPE_FIELD_ICMP,
.input_index = 0,
.offset = offsetof (struct icmp_acl_tuple, type),
},
/* next input field (IPv4 source address) - 4 consecutive bytes. */
{
.type = RTE_ACL_FIELD_TYPE_MASK,
.size = sizeof (uint32_t),
.field_index = C_SRC_FIELD_ICMP,
.input_index = 1,
.offset = offsetof (struct icmp_acl_tuple, src_ip),
},
/* next input field (IPv4 destination address) - 4 consecutive bytes. */
{
.type = RTE_ACL_FIELD_TYPE_MASK,
.size = sizeof (uint32_t),
.field_index = C_DST_FIELD_ICMP,
.input_index = 2,
.offset = offsetof (struct icmp_acl_tuple, dst_ip),
},
/*due to DPDK restrictions, 32bit should be used (although one byte field)*/
{
.type = RTE_ACL_FIELD_TYPE_BITMASK,
.size = sizeof (uint32_t),
.field_index = C_CODE_FIELD_ICMP,
.input_index = 3,
.offset = offsetof (struct icmp_acl_tuple, code),
},};
Моя проблема связана с полем «Код» (последний).Я не могу получить желаемое действие.
Как установить значение и маску для этого поля?Я пробовал оба с u8, u32, u32 со смещением.ничего не получалось.