1. kernel/include/linux/in.h를 보면
loopback interface로의 access를 판별하기 위하여 ipv4_is_loopback( )라는 함수를 가지고 있습니다.
그래서 127.x.x.x로 시작되는 모든 access를 Loopback I/F로 가도록 처리를하는 거죠...
2. 그런데 저희 시스템은 하나의 시스템 내에 두 개의 Board가 있고, 두 Board간의 통신을 위해서
127.254.254.254와 127.254.254.253으로 IP를 부여 후 통신을 하도록 만들려고 합니다.
3. 당근 127이라서 Loopback으로 access하려 하기 때문에 정상적으로 동작하지 않겠죠...
4. 그래서 아래와 같이 수정 후 사용하려고 합니다.
From ::: static inline bool
ipv4_is_loopback(__be32 addr) { return (addr & htonl(0xff
000000)) == htonl(0x7f000000); }
To:::: static inline bool
ipv4_is_loopback(__be32 addr) { return (addr & htonl(0xff
800000)) == htonl(0x7f000000); }
Idea의 요는 127.128.x.x 이상의 경우엔 Loopback I/F로 Access하지 않도록 network stack에 알려 주는거죠...
5. 이전 시스템의 GNU/Linux에서는 잘 작동했습니다.
6. 현재 개발중인 Android/Linux 에서는 문제네요...
이렇게 설정 후 127.254.254.253 Board에서 "ping -c 2 127.254.254.254"를 하면 usb0 port의
TX뿐만 아니라, "lo" I/F의 RX/TX도 packet number가 증가한다는 겁니다.
(CDC Ethernet사용으로 usb port를 network port처럼 사용이라 usb0로 I/F가 보입니다)
7. 혹시 Android/Linux에서는 Loopback사용 시 GNU/Linux와는 다른 뭔가가 있나요?
혹은 Network 전반에 걸쳐서 GNU/Linux와는 다른 점 때문에 특별히 고려해줘야 하는 점이 있나요???
항상 질문이 있을 때만 Aesop에 들어 오게 되네요...
그래도 관심 갖어 주리라 믿으면...
Thanks in advance.