리눅스애서 source routing 에 관련된 질문입니다.
글쓴이: trymp / 작성시간: 월, 2011/03/07 - 10:37오후
리눅스 라우팅과 관련된 질문입니다.
제가 알기로는 forward 되는 packet 은 ip_route_input() 함수에서 routing 이 decision 되고
local 에서 output 되는 packet 은 ip_output_key() 인가 하는 함수에서 routing decision
되는 것으로 알고 있습니다.
이 때 foward 되는 packet 에 대해서 source routing 을 걸었을 때,
제가 인위적으로 dev_queue_xmit() 을 호출하기 전에 skb 의 source IP 를 다른 것으로 바뀌치기 했습니다.
그러면 바뀐 source IP 에 따라서 routing 이 바뀌었습니다.
L2 level 인 dev_queue_xmit 에서도 routing decision 이 이루어지나요??
테스트 결과로만 봐서는 dev_queue_xmit 에서 routing 이 결정나서 다른 next hop 으로 보내는데,
제가 알고 있는 지식과는 많이 달라서 혼돈이됩니다.
리눅스 라우팅에 대해 알고 계신 고수님의 도움을 요청합니다.
Forums:
음..
dev_queue_xmit 실행 전에 skb->dev 에 할당한 netdevice 로 일단 내보냅니다.
그리고 ipv4 라면, ip_finish_output2 에서 L2주소를 완성해서 내려보내는데 L2는 라우팅이 아니라 ARP 캐시나 ARP를 쏴서 L2 주소를 skb 에 박아 넣는 역할입니다. ipv6 에서는 arp 가 사라지고 ND 메세지중에 neighbour solicitation (icmpv6)가 생겼죠.
결과적으로 다음홉 지정하는 라우팅은 dev_queue_xmit 에서 안납니다. skb 에서 주소를 아무리 바꿔도 메타정보인 skb->dev를 안바꾸면 안된다는 말이죠. 이말인 즉슨, dev_queue_xmit에서 skb->dev를 내보낼 netdevice 로 인식하는 하나의 파라미터라고 보면 됩니다.
댓글 달기