Skip to content
오늘을살자

Category: lwIP

lwIP 카테고리에 작성된 글 목록입니다.

lwIP Roadmap

작은 임베디드 네트워크 스택이 왜 가끔 멈출까. lwIP를 메모리 지도, 타이머, 호출 컨텍스트, 버퍼 수명주기 순서로 읽는 흐름입니다.

자동 생성된 넓은 주제보다 실제 bring-up과 부하 테스트에서 바로 부딪히는 문제만 남겨, 막힌 지점에서 다시 찾기 좋게 정리합니다.

임베디드 보드와 패킷 버퍼, 타이머, 네트워크 흐름을 표현한 lwIP 손그림 스타일 삽화

시작과 설정

  1. lwIP 메모리 옵션 구조 정리: PBUF_POOL, MEM_SIZE, MEMP_NUM_*를 한 번에 보기

    lwIP 메모리를 PBUF_POOL, MEM_SIZE, MEMP_NUM_*, OS 큐로 나눠 보는 출발점입니다.

타이머와 상태 관리

  1. lwIP 타이머가 안 돈다: NO_SYS에서 sys_check_timeouts() 빠지면 생기는 증상

    NO_SYS에서 타이머 루프가 빠졌을 때 DHCP/ARP/TCP가 왜 흔들리는지 봅니다.

TCP/IP 코어와 스레드

  1. lwIP에서 ISR에서 바로 보내면 가끔 터진다: tcpip_thread로 넘기는 패턴 정리

    ISR에서 lwIP API를 직접 호출하지 않고 tcpip_thread로 넘겨야 하는 이유를 정리합니다.

  2. lwIP에서 tcpip_thread 안에서 다시 기다리면 멈춘다: callback 안의 netconn/sockets 호출이 self-deadlock이 되는 이유

    tcpip_thread 컨텍스트 안에서 다시 동기 API를 호출해 스스로 기다리며 멈추는 패턴을 정리합니다.

DHCP/ARP/UDP

  1. lwIP에서 링크는 붙었는데 DHCP가 안 돈다: netif_set_up() / netif_set_link_up() 순서를 같이 보자

    링크는 살아있는데 DHCP가 시작되지 않거나 다시 안 붙을 때 netif 상태 전환 순서를 정리합니다.

  2. lwIP에서 링크 복구 후 UDP가 한동안 죽어 보인다: ARP 캐시와 netif 상태를 같이 보자

    링크 복구 뒤 UDP 송신만 한동안 막힐 때 ARP 캐시와 netif 상태를 함께 보는 포인트를 정리합니다.

메모리와 버퍼

  1. lwIP pbuf가 가끔 터진다: PBUF_REF/POOL/RAM 수명주기와 zero-copy 함정

    pbuf 타입과 zero-copy 수명주기를 잘못 다뤘을 때 랜덤 크래시가 나는 패턴을 봅니다.

  2. lwIP TCP 버퍼 설정 읽는 법: TCP_SND_BUF, TCP_WND, MEM_SIZE, MEMP_NUM_TCP_SEG, PBUF_POOL_SIZE

    TCP 송신 버퍼, 수신 윈도우, MEM heap, tcp_seg pool, PBUF_POOL_SIZE를 같은 숫자처럼 보지 않도록 구분합니다.

  3. lwIP에서 UDP 길이가 가끔 잘못 읽힌다: pbuf 체인에서는 len 말고 tot_len을 봐야 한다

    pbuf 체인에서 `len`만 보고 파싱해 UDP payload가 잘리거나 CRC처럼 오해되는 패턴을 정리합니다.

  4. lwIP RAW UDP callback 뒤에 수신이 멈춘다: pbuf_free를 놓치면 PBUF_POOL이 먼저 마른다

    RAW UDP receive callback에서 pbuf 해제를 놓쳐 수신이 몇 분 뒤 멈추는 전형적인 패턴을 정리합니다.

TCP 디버깅

  1. lwIP RAW TCP가 '가끔 멈춘다': tcp_recved() 안 치면 윈도우가 안 열린다

    RAW TCP에서 tcp_recved() 누락으로 receive window가 고정되며 멈추는 증상을 정리합니다.

  2. lwIP TCP 재시도 루프에서 RTOS delay가 필요한 이유: busy loop를 막고 CPU를 양보하기

    TCP 송신 재시도 루프에서 busy loop를 피하기 위해 RTOS delay로 CPU를 양보해야 하는 이유를 정리합니다.

포팅과 성능

  1. lwIP에서 RX는 되는데 payload가 가끔 깨진다: DMA 버퍼와 D-Cache 순서를 같이 봐야 한다

    DMA와 D-Cache 일관성이 맞지 않아 수신 데이터가 가끔 깨지거나 송신이 엉뚱해지는 패턴을 정리합니다.

최근 글