Необработанный сокет Micropython на уровне MAC

Как именно можно создать необработанный сокет на уровне MAC в Micropython?

Эквивалент UNIX:

eth_p_all=3
netif='wlan0'
s=socket.socket(socket.AF_PACKET,socket.SOCK_RAW,socket.htons(eth_p_all))
s.bind((netif,0))

Во-первых, непонятно, как получить имя интерфейса, и нет ни socket.AF_PACKET, ни socket.htons.

Итак, если нет возможности сделать это со стоковыми библиотеками или прошивкой, какие библиотеки выбрать, или если требуется модификация прошивки, то как именно модифицировать прошивку?


person user8079    schedule 13.03.2019    source источник


Ответы (1)


В текущей прошивке upy нет реализации необработанных сокетов. Вы можете проверить следующую строку. Необработанная диспетчеризация сокетов была удалена из modlwip.c.

https://github.com/micropython/micropython/blob/68a5d6fe7746850ce049b8bf295bfce1382383f3/extmod/modlwip.c#L712

Если вы хотите изменить прошивку самостоятельно, вы можете выполнить следующие действия.

  • Проверьте, поддерживает ли исходный SDK вашей платформы необработанный сокет. (например, cc3200 использует SDK cc3200 от TI и поддерживает необработанные сокеты)
  • Изменить modlwip.c

Есть неофициальный порт (серия ameba от Realtek), поддерживающий raw socket. Можно было бы начать с этого.

https://github.com/wylinks/micropython-ameba/blob/ameba/ports/ameba/mphelper/mods/modlwip.c

person YuSheng    schedule 18.03.2019