skb->dst 에 정의된 output interface 로 안나가고 다른 인터페이스로 나가는 현상
두개의 회선을 구성한 상태에서 각 회선에 default routing 을 잡았습니다.
66.66.66.0/24 dev eth1 proto kernel scope link src 66.66.66.66
30.30.30.0/24 dev eth3 proto kernel scope link src 30.30.30.6
102.102.102.0/24 dev eth4 proto kernel scope link src 102.102.102.254
77.77.77.0/24 dev eth2 proto kernel scope link src 77.77.77.77
192.168.0.0/16 dev eth0 proto kernel scope link src 192.168.19.112
default
nexthop via 66.66.66.254 dev eth1 weight 12
nexthop via 77.77.77.254 dev eth2 weight 11
102.102.102.102 ---> 외부 네트워크
위와 같이 라우팅을 잡고 ping 을 쏘는데, 제가 pskb->dst->dev->name output 즉 output interface 를 trace 해 보았는데
이 값이 eth2 으로 설정되어 있으면 eth2 를 타고 나가야 할 것 같은데 eth1을 타고 나가고 막 뒤죽박죽입니다.
제가 printk()를 찍은 곳은 dev_queue_xmit() 바로 앞에서 찍었고요.
여기 바로 전에서 찍은 값인데, 왜 설정된 interface 대로 안나가고
이상하게 나가는지 모르겠습니다.
dst 의 포인터 값은 routing 을 지나간 뒤 그대로 유지되고 있는데요..
실제로 패킷이 어떤 인터페이스를 타고 나가야 할지가 pskb->dst->dev->name 이 값에 의해서 결정되는 것이 아닌가요?
아니면 pskb->dev->name 의 것을 보고 나가는 것인직 궁금합니다.
고수님들의 많은 조언 부탁드립니다.
댓글 달기