Сокет Micropython Raw на уровне MAC

#sockets #esp8266 #ethernet #raw-sockets #micropython

#сокеты #esp8266 #ethernet #необработанные сокеты #micropython

Вопрос:

Как именно можно было бы создать необработанный сокет на уровне 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 .

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

Ответ №1:

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

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

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

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

Существует неофициальный порт (серия ameba от realtek), поддерживающий сокет raw. Вы могли бы начать с этого.

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