- 论坛徽章:
- 0
|
本帖最后由 duanius 于 2010-07-26 17:43 编辑
开发板上同时有两种接入方式 以太网和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. 代码执行后,成功是成功了 ,但跃点数很离谱:
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 请问为什么呢 |
|