亚洲av成人无遮挡网站在线观看,少妇性bbb搡bbb爽爽爽,亚洲av日韩精品久久久久久,兔费看少妇性l交大片免费,无码少妇一区二区三区

  免費注冊 查看新帖 |

Chinaunix

  平臺 論壇 博客 文庫
12下一頁
最近訪問板塊 發(fā)新帖
查看: 8933 | 回復: 11
打印 上一主題 下一主題

請教linux下如何使用netlink獲取網(wǎng)線拔出的動作? [復制鏈接]

論壇徽章:
0
跳轉(zhuǎn)到指定樓層
1 [收藏(0)] [報告]
發(fā)表于 2010-03-05 17:36 |只看該作者 |倒序瀏覽
現(xiàn)在需要及時獲取網(wǎng)線拔出的事件作一些處理,由于不想循環(huán)查詢網(wǎng)口狀態(tài),所以希望能的到網(wǎng)線拔出的事件,方便處理
對netlink了解不多,網(wǎng)上找到一個參考,但是現(xiàn)在網(wǎng)線拔出,網(wǎng)口up,down,設置IP這些事件混在一起了,不知道如何區(qū)分出來網(wǎng)線拔出的動作,還請各位指教,或者有其他方法也請?zhí)崾鞠?
參考的http://www.ibm.com/developerworks/cn/linux/l-kerns-usrs/里代碼里的例子 netlink-exam-user-recv.c
代碼如下:
  1. //application receiver: netlink-exam-user-recv.c
  2. #include <stdio.h>
  3. #include <sys/types.h>
  4. #include <sys/socket.h>
  5. #include <linux/netlink.h>

  6. #define MAX_MSGSIZE 1024


  7. int main(void)
  8. {
  9.         struct sockaddr_nl saddr, daddr;
  10.         struct nlmsghdr *nlhdr = NULL;
  11.         struct msghdr msg;
  12.         struct iovec iov;
  13.         int sd;
  14.         int ret = 1;

  15.         sd = socket(AF_NETLINK, SOCK_RAW,NETLINK_GENERIC);
  16.         memset(&saddr, 0, sizeof(saddr));
  17.         memset(&daddr, 0, sizeof(daddr));

  18.         saddr.nl_family = AF_NETLINK;      
  19.         saddr.nl_pid = getpid();
  20.         saddr.nl_groups = 1;
  21.         bind(sd, (struct sockaddr*)&saddr, sizeof(saddr));

  22.         nlhdr = (struct nlmsghdr *)malloc(NLMSG_SPACE(MAX_MSGSIZE));

  23.         while (1) {
  24.                 memset(nlhdr, 0, NLMSG_SPACE(MAX_MSGSIZE));

  25.                 iov.iov_base = (void *)nlhdr;
  26.                 iov.iov_len = NLMSG_SPACE(MAX_MSGSIZE);
  27.                 msg.msg_name = (void *)&daddr;
  28.                 msg.msg_namelen = sizeof(daddr);
  29.                 msg.msg_iov = &iov;
  30.                 msg.msg_iovlen = 1;

  31.                 ret = recvmsg(sd, &msg, 0);
  32.                 if (ret == 0) {
  33.                         printf("Exit.\n");
  34.                         exit(0);
  35.                 }
  36.                 else if (ret == -1) {
  37.                         perror("recvmsg:");
  38.                         exit(1);
  39.                 }
  40.                 printf("%s", NLMSG_DATA(nlhdr));
  41.         }

  42.         close(sd);
  43. }
復制代碼
這里不知道recvmsg后如何對msg結(jié)構(gòu)判斷得到網(wǎng)線拔出的動作

論壇徽章:
0
2 [報告]
發(fā)表于 2010-03-07 18:45 |只看該作者
up下 ,哪位兄弟幫忙給解答下

論壇徽章:
0
3 [報告]
發(fā)表于 2010-03-11 15:37 |只看該作者
我也幫你Up吧

論壇徽章:
0
4 [報告]
發(fā)表于 2010-03-22 20:21 |只看該作者
不好意思,剛看到PM,好幾天了,我晚上看看能幫助你不。
PS:以后有問題交流直接Email我,如果我不在的話 duanjigang1983@126.com

論壇徽章:
0
5 [報告]
發(fā)表于 2010-03-22 21:49 |只看該作者
呵呵,你是要搞清楚網(wǎng)卡拔出的動作如何識別?還是搞懂netlink怎么用?
這兩個不是一碼事,后者是通訊用的{:3_181:}

論壇徽章:
0
6 [報告]
發(fā)表于 2010-03-22 23:51 |只看該作者
看到代碼了。稍微修改了下,明天編譯下試試看{:3_184:}

論壇徽章:
0
7 [報告]
發(fā)表于 2010-03-23 09:33 |只看該作者
目前主要是搞清楚網(wǎng)線拔出的動作如何識別,不想采用不停的檢查網(wǎng)卡狀態(tài)的方法,所以才想用netlink的
netlink的使用我回頭按duan兄的帖子慢慢學

論壇徽章:
0
8 [報告]
發(fā)表于 2010-03-24 19:37 |只看該作者
加了點測試代碼。中午在公司把內(nèi)核重編了下,還沒來得及測試,明天去了再試驗下

論壇徽章:
0
9 [報告]
發(fā)表于 2010-03-25 17:59 |只看該作者
thx
我之前想的是搞清楚如何解析收到的msg,然后區(qū)分開網(wǎng)線拔出的動作,但是搜了半天沒搜到

論壇徽章:
0
10 [報告]
發(fā)表于 2010-03-25 20:10 |只看該作者
thx
我之前想的是搞清楚如何解析收到的msg,然后區(qū)分開網(wǎng)線拔出的動作,但是搜了半天沒搜到
fieldstream 發(fā)表于 2010-03-25 17:59



    網(wǎng)線拔出和插上的動作可以通過測試來驗證,你需要看看net/core/dev.c和net/packet/af_packet.c中的代碼
它們是通過事件通知鏈表netdev_chain上面的函數(shù)調(diào)用實現(xiàn)的,我加入了測試打印語句,今天早上用虛擬機測試沒看到效果,明天整臺實際的linux物理安裝系統(tǒng)試驗下
您需要登錄后才可以回帖 登錄 | 注冊

本版積分規(guī)則 發(fā)表回復

  

北京盛拓優(yōu)訊信息技術(shù)有限公司. 版權(quán)所有 京ICP備16024965號-6 北京市公安局海淀分局網(wǎng)監(jiān)中心備案編號:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年舉報專區(qū)
中國互聯(lián)網(wǎng)協(xié)會會員  聯(lián)系我們:huangweiwei@itpub.net
感謝所有關(guān)心和支持過ChinaUnix的朋友們 轉(zhuǎn)載本站內(nèi)容請注明原作者名及出處

清除 Cookies - ChinaUnix - Archiver - WAP - TOP