본문 바로가기
임베디드 개발/펌웨어

LwIP TCP/IP 스택 살펴보기

by eteo 2022. 9. 24.

 

 

Developing applications on STM32Cube with LwIP TCP/IP stack

dm00103685-developing-applications-on-stm32cube-with-lwip-tcpip-stack-stmicroelectronics.pdf
0.92MB

 

 

LwIP (Lightweight IP)는 임베디드 시스템에서 널리 사용되는 오픈 소스 TCP/IP 스택이다.

 

 

 

 

 

LwIP TCP/IP stack에서 지원하는 프로토콜 : IPv4, IPv6, ICMP, IGMP, UDP, TCP, DNS, SNMP, DHCP, PPP, ARP

 

 

 

 

LwIP는 아래 3가지 API를 제공한다.

 

 

  • Raw API : Native LwIP 로 event callback 형식으로 동작되며 최고의 성능을 제공하지만 사용하기 조금 복잡하다.
  • Netconn API : Raw API 보다 High Level API로 RTOS 환경이 고려된 API이다.
  • Socket API : 리눅스, 윈도우 등에서 사용되는 Socket 형식의 API이다.

 

 

 

 

Raw API

TCP 와 UDP Raw API

 

 

 

 

 

Netconn API

 

 

 

 

Socket API

 

 

 

 

 

 

 

pbuf

LwIP는 pbuf 라는 구조체를 사용하여 링크드 리스트 형식으로 패킷 버퍼를 관리한다.

 

 

next : 다음 pbuf 구조체의 주소

payload : 패킷 데이터를 가르키는 주소

len : 패킷 데이터의 길이

tot_len : 링크드 리스트로 연결된 모든 데이터의 길이

ref : pubf를 참조하는 포인터를 카운트

flags : pubf의 타입

 

 

 

 

pbuf의 타입 종류

 

패킷 수신시 가장 적절한 pbuf 타입은 미리 할당되어져 있는 메모리풀에서 메모리를 얻어오므로 가장 빠르게 메모리 할당이 가능한 PBUF_POOL 타입이다.

PBUF_RAM 은 패킷 수신에는 딜레이와 메모리 단편화를 일으킬 수 있어 적합하지 않지만, 요청시 필요한 만큼 동적 메모리(heap)에 pbuf를 할당하는 타입으로 송신에 보다 적합하게 사용될 수 있다.

송신시 패킷내용이 변경되지 않는 constant data라면 PBUF_ROM 도 사용될 수 있다.

 

 

 

 

pbuf 관련 API

 

 

 

 

참고. STM32 ETH Block Diagram

 

 

STM32 이더넷 블락은 DMA 컨트롤러가 CPU 개입 없이 소스에서 목적지로 데이터를 효과적으로 이동하기 위해서 DMA Descriptor 라는 자료구조를 사용하는데 이 구조체는 stm32f4xx_hal_eth.c 파일에 정의되고 ethernetif.c 파일에 선언되어 있다.