Как установить значение и маску для невыровненного поля - PullRequest
0 голосов
/ 22 мая 2018

Я пытаюсь установить структуру 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 со смещением.ничего не получалось.

...