2013-03-20 1 views
1

PCIE 버스를 통해 연결된 두 개의 보드가 있습니다. 사전 할당 된 메시지 버퍼를 통해 데이터를 교환 할 수 있습니다. 이제이 연결을 기반으로 가상 네트워크 인터페이스를 구현하려고합니다.skb에 수동으로 데이터 버퍼를 할당합니다.

  • 사용 dev_alloc_skb() 수신 기능 내부 skb 할당이 skb에 할당 된 버퍼로 데이터를 복사 : 일부 네트워크 드라이버 추천 소스 들은 수신 경로를 구현하는 두 가지 방법이 있음을 보여준다.
  • dev_alloc_skb()을 사용하여 skb을 할당하고 버퍼를 RX 링에 넣습니다.

이 두 경우에 버퍼는 dev_alloc_skb()에 의해 할당됩니다. skb 제어 헤더 만 할당하고 data 포인터를 내 메시지 버퍼에 지정하고 싶습니다. skb_free()을 수정하여 메시지 버퍼를 다시 메시지 풀에 넣어야합니다.

비슷한 접근법을 사용하는 참조 코드가 있는지 또는 코드 변경을 최소화하는 더 나은 방법을 제안 해 주시기 바랍니다. 모든 제안을 부탁드립니다. 고마워요!

+0

나 또한 비슷한 문제를 해결하기 위해 노력하고, 어떤 접근했던 당신했다 HTTP ://stackoverflow.com/questions/40857686/mapping-1-mib-of-reserved-memory-for-network-interface-cardnic-driver-in-arm-l – shunty

답변

0

당신은 build_skb을 사용할 수

그래서 거래는 RX 링 버퍼를 채울 에 NIC 만 데이터 버퍼를 할당하는 것입니다. 그리고 RX 완료시 build_skb()을 사용하여 새 skb에 부분을 초기화하고 (네트워크 프레임으로 채워진) 데이터 버퍼를 첨부하고 skb_shared_info 부분을 초기화하고 네트워크에핫 skb를 제공합니다.

build_skb()은 첨부해야하는 데이터 버퍼 인 을 제공하는 skb, caller를 할당하는 기능입니다. 드라이버가 이더넷 프레임에 skb->data 점을 수 있도록 바로 build_skb()skb_reserve()를 호출 할 것으로 예상된다 (보통 NET_SKB_PADNET_IP_ALIGN을 건너 뛰는)

관련 문제