- 論壇徽章:
- 0
|
本帖最后由 duanius 于 2010-07-26 17:43 編輯
開發(fā)板上同時有兩種接入方式 以太網和gprs。 gprs通過ppp建立連接。我需要去連幾個指定的ip,通過程序去配置。對于這種需求 我的處理方式是代碼中把幾個ip配成主機路由添加到路由表中,網關不設,子網掩碼不設(設不設都是全f),然后把接口指定成eth0或者是ppp0,
代碼很簡單:
2 struct rtentry rt;
33 struct sockaddr_in my_addr;
34 int sock_fd;
35 char devi[] = "eth0";
36
37
38 if ((sock_fd = socket(AF_INET, SOCK_DGRAM, 0)) < 0)
39 {
40 perror("socket");
41 close(sock_fd);
42 return E_ERR;
43 }
44
45 rt.rt_flags = (RTF_UP | RTF_HOST );
46 my_addr.sin_family = AF_INET;
47
48 inet_aton("210.45.192.68",&my_addr.sin_addr);
49 memcpy(&rt.rt_dst,&my_addr, sizeof(struct sockaddr));
50
。。。。。
56
57 rt.rt_dev = devi;
58
59 if (ioctl(sock_fd, SIOCADDRT, &rt) < 0)
60 {
61 perror("SIOCADDRT");
62 close(sock_fd);
63 return E_ERR;
64 }
65 return 0;
但有些問題
1. 對于這種需求,解決的方法 也就是對要連接的ip設為主機路由 并且只設置一個接口,其他不設,也不對ip相關以外的路由做更改,只添加n個ip的n個主機路由,是否正確。
2. 代碼執(zhí)行后,成功是成功了 ,但躍點數(shù)很離譜:
csduan@csduan-desktop:~/temp$ route
內核 IP 路由表
目標 網關 子網掩碼 標志 躍點 引用 使用 接口
210.45.192.68 * 255.255.255.255 UH -20889 0 0 eth0
192.168.0.0 * 255.255.255.0 U 1 0 0 eth0
link-local * 255.255.0.0 U 1000 0 0 eth0
default 192.168.0.1 0.0.0.0 UG 0 0 0 eth0
有時候是負的,有時候是大于10000 請問為什么呢 |
|