LINUX.ORG.RU

Сообщения rmashak

 

skb_header_pointer() всегда возвращает в big-endian?

Форум — Development

В ядре есть такая замечательная функция:

static inline void * __must_check
__skb_header_pointer(const struct sk_buff *skb, int offset,
             int len, void *data, int hlen, void *buffer)
{
    if (hlen - offset >= len)
        return data + offset;

    if (!skb ||
        skb_copy_bits(skb, offset, buffer, len) < 0)
        return NULL;

    return buffer;
}

static inline void * __must_check
skb_header_pointer(const struct sk_buff *skb, int offset, int len, void *buffer)
{
    return __skb_header_pointer(skb, offset, len, skb->data,
                    skb_headlen(skb), buffer);
}

То есть skb_header_pointer() позволяет получить указатель на буфер длиной len на любую часть сетевого пакета в skb.

Вопрос — всегда ли гарантируется, что любые 16- или 32-битные фрагенты пакета будут в big-endian формате?

Например, можно ли делать так:

__be32 *ptr, data;
ptr = skb_header_pointer(skb, offset, sizeof(u32), &data);

 , , ,

rmashak
()

Конференция NetDev 0x12 в Монреале этим летом

Новости — Конференции и встречи
Группа Конференции и встречи

В Монреале (Канада) 11-13 июля 2018 года будет проводиться очередная конференция NetDev, основная тематика которой — сетевая подсистема ядра Linux и сопутствующее пользовательское API.

Принимаются заявки на доклады (до 1 мая)

>>> Подробности

 , ,

rmashak
()

RSS подписка на новые темы