ifconfig 명령을 치면 RX packets, TX packets와 같은 네트워크 패킷량을 알 수 있습니다.
함수를 써서 이런 정보를 얻을 수 없나요?
ifconfig 소스를 열어보았는데 /proc/net/dev 파일을 오픈하여 긎그 정보를 얻어오는 것 같은데 그런 방법 말고 함수 콜을 해서 알아오는 방법을 알고 싶습니다.
UNP와 같은 책을 보세요... 이런 답은 제발 피해주세요.
kernel network device driver를 작성할때,
/usr/include/linux/netdevice.h 파일내의
struct net_device_stats 구조체 내의
rx_packets등의 값을 채워주는 루틴을 디바이스 드라이버내에 기술하게 되어
있습니다.
이 값들은 각 랜카드 제작사 또는 드라이버 제작자가 해당 장치별로 값을
업데이트 해주도록 루틴을 작성해 주는, 일종의 프레임워크(패턴이라고 하도록 하겠습니다)를 준수하도록 되어 있습니다.
이 값들(커널내의 자료구조내의 값들)은 일반적으로 장치 파일을 open()한후 ioctl()을 이용해서 값을 가져오거나, 세팅하도록 하는게 일반적입니다.
특별한 함수들을 만들 수도 있겠습니다만, 유닉스 표준으로 볼때는 ioctl()이
가장 타당합니다.
/proc파일시스템(메모리 파일시스템;빠른....)을 통한 커널의 자원을 디스플레이 해주는 방식이 90년대 중반 부터(?), 보이다가, 현재에는 널리 사용되는 것으로 보입니다.
네트워크 장치에 대한 정보 디스플레이도 이를 (/proc) 사용하는 추세인듯합니다. 다름 아닌 ifconfig도 이를 읽어서 출력하니 말입니다.
질문하신분께서, 함수를 원하는 이유는 잘 모르겠으나, 다음과 같은 접근이 타당해 보입니다.
1) 함수를 절대로 써야겠다.
- ioctl()에 해당 자료구조를 읽어오는 파라메터가 어떻게 되나 조사
- 때에따라, 랜카드 드라이버만든사람이(랜카드별로 상이할듯;대체로 유사하겠으나, 장담못함) 파라메터 값을 상이하게 주었을 수 있을듯함 ==> 만일 그러하다면, 랜카드에 따라 프로그램이 수정되어야 할지도....단지 eth0를 기준으로 보지는 못하고, 인텔랜카드인지, 아니면 3com랜카드인지등등....을 고려해야 할지도.......
- kernel module을 제작해서 시스템호출을 (system call) 새로 만든다. 당연히, 그 기능은 네트워크 스태티스틱(통계 정보관련을..) 읽어주는.....
2) /proc 파일시스템에서 읽겠다.
- 속도? 절대 느리지 않다.
- 안정성? 스테이블해 보인다.
- 기술? 오픈소스에 무슨 기술이냐.
Re: RX packets, TX packets와 같은 정보 얻기
ioctl()을 보는게 가장 가까운 접근으로 보입니다.
* /proc 와 혹시 원수라도 지셨는지? 전혀 나빠보이지 않는 접근인데요?
Re: RX packets, TX packets와 같은 정보 얻기
c/c++ 함수를 말씀하시는건가요?
일반적으로 /proc/net/dev 파일을 참조해서 트래픽 량을 계산하는걸로 알고 있습니다.
ifconfig소스를 보셨다니, 쉽게 구현하실수 있지 않을까요?
[url]http://www.linux-sarang.net/board/?p=read&table=tip&no=8472&page=&o[at]=s&o[sc]=r&o[no]=8472[/url] 여기도 한번 보시구요
데비안에서는 bwm 소스를 다운받아 보시면 도움이 되시리라 봅니다.
----
jai guru deva om...
kernel network device driver를 작성할때, /u
kernel network device driver를 작성할때,
/usr/include/linux/netdevice.h 파일내의
struct net_device_stats 구조체 내의
rx_packets등의 값을 채워주는 루틴을 디바이스 드라이버내에 기술하게 되어
있습니다.
이 값들은 각 랜카드 제작사 또는 드라이버 제작자가 해당 장치별로 값을
업데이트 해주도록 루틴을 작성해 주는, 일종의 프레임워크(패턴이라고 하도록 하겠습니다)를 준수하도록 되어 있습니다.
이 값들(커널내의 자료구조내의 값들)은 일반적으로 장치 파일을 open()한후 ioctl()을 이용해서 값을 가져오거나, 세팅하도록 하는게 일반적입니다.
특별한 함수들을 만들 수도 있겠습니다만, 유닉스 표준으로 볼때는 ioctl()이
가장 타당합니다.
/proc파일시스템(메모리 파일시스템;빠른....)을 통한 커널의 자원을 디스플레이 해주는 방식이 90년대 중반 부터(?), 보이다가, 현재에는 널리 사용되는 것으로 보입니다.
네트워크 장치에 대한 정보 디스플레이도 이를 (/proc) 사용하는 추세인듯합니다. 다름 아닌 ifconfig도 이를 읽어서 출력하니 말입니다.
질문하신분께서, 함수를 원하는 이유는 잘 모르겠으나, 다음과 같은 접근이 타당해 보입니다.
1) 함수를 절대로 써야겠다.
- ioctl()에 해당 자료구조를 읽어오는 파라메터가 어떻게 되나 조사
- 때에따라, 랜카드 드라이버만든사람이(랜카드별로 상이할듯;대체로 유사하겠으나, 장담못함) 파라메터 값을 상이하게 주었을 수 있을듯함 ==> 만일 그러하다면, 랜카드에 따라 프로그램이 수정되어야 할지도....단지 eth0를 기준으로 보지는 못하고, 인텔랜카드인지, 아니면 3com랜카드인지등등....을 고려해야 할지도.......
- kernel module을 제작해서 시스템호출을 (system call) 새로 만든다. 당연히, 그 기능은 네트워크 스태티스틱(통계 정보관련을..) 읽어주는.....
2) /proc 파일시스템에서 읽겠다.
- 속도? 절대 느리지 않다.
- 안정성? 스테이블해 보인다.
- 기술? 오픈소스에 무슨 기술이냐.
참고되셨기를......
댓글 달기