C структуры Объясните push_vlan = (struct vlan_header *) ((uint8_t *) new_eth + eth_size); - PullRequest
0 голосов
/ 26 мая 2019

Может кто-нибудь объяснить, что делает строка кода

struct name* push_tag = (struct name *)((uint8_t *)name2 + int_size);

, где имя и имя2 - это разные структуры.

Ответы [ 2 ]

0 голосов
/ 26 мая 2019

Исходя из вашего заголовка, что это сетевой код, скорее всего, вы смотрите на декодер пакетов.В этом случае он заметил, что для фрейма Ethernet (википедии) предварительно был добавлен заголовок vlan.Код пропускает этот заголовок, чтобы проверить инкапсулированный пакет.

Кто-то указал, что это ужасное Неопределенное поведение.Я не уверен, что наблюдение о том, что практически весь системный код, включая Интернет, опирается на то, что сейчас называется «неопределенным поведением», в большей степени говорит о целостности компьютеров и сетей мира или о бредовой вере в то, что органы стандартизации каким-то образом находятся за пределами упрека.Я был в рабочих группах по стандартам;и я живое свидетельство того, что они не такие яркие.

0 голосов
/ 26 мая 2019

Этот код помещает в структурную переменную push_t значение name2 + int_size, выполняя приведение к различным переменным

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...