Network Device Driver 구현 관련(hard_start_xmit, hard_header, rebuild_header)
두가지 질문이 있습니다..
첫째는, ethernet 장비의 device driver를 만들때 hard_start_xmit, hard_header, rebuild_header를 누가, 어떤 식으로 호출이
하여 사용되는지 정확히 알고 싶습니다.
지금까지 제가 대충 따라가본 바로는 일단 해당 device의 hard_header로 등록된 함수를 찾아서 MAC Header를 채워주고, 여기에
목적지 주소가 비어있다면 음수를 리턴하여 arp에서 해당 HW Address를 찾은 후 rebuild_header를 호출하여 여기에서
arp_find()를 이용해 채워준다음 최종적으로 해당 device의 hard_start_xmit로 등록된 함수를 호출하여 넘겨주는 것 같은데..
틀린 부분이 있다면 조언 및 보다 자세한 설명 부탁드립니다. 특히 hard_header 부를때 여기에서 daddr은 누가 넘겨주는지 궁금하네요.
둘째는, 이 부분을 이용해서 IP와 Device Driver간에 간단한 프로토콜을 구현하려고 합니다. 즉 IP와 MAC 헤더 사이에 hard_header에서 따로 또 헤더를 붙여서 뭔가 해보려고 하고 있습니다.
궁금한 점은 hard_header에서 받은 sk_buff를 가지고, 해당 버퍼의 길이가 어느 길이 이상되면 이를 다시 내부적으로 fragmentation을
하고 싶은데 그러려면 어떤 방법이 있을지 잘 모르겠네요. hard_header에서 직접 sk_buff를 카피하고 날리고 그러면 IP쪽에서 에러나는게
아닌지..
답변 부탁드립니다.
댓글 달기