1. <span style="font-family:Courier New;">
  2. /********************************** (C) COPYRIGHT *******************************
  3. * File Name          : add_route.c
  4. * Author             : skdkjzz
  5. * Date               : 2014/08/09
  6. * Description        : 设置静态ip,添加路由表
  7. *********************************************************************************/
  8. #include <error.h>
  9. #include <stdio.h>
  10. #include <string.h>
  11. #include <net/if.h>
  12. #include <stdlib.h>
  13. #include <arpa/inet.h>
  14. #include <asm/types.h>            /* glibc 2 conflicts with linux/types.h */
  15. #include <net/route.h>
  16. #include <sys/errno.h>
  17. #include <sys/ioctl.h>
  18. #include <sys/types.h>
  19. #include <sys/socket.h>
  20. #include <netinet/in.h>
  21. #include <net/if_arp.h>
  22. #include <netinet/if_ether.h>
  23. #include <fcntl.h>
  24. #include <stdio.h>
  25. #include <stdlib.h>
  26. #include <errno.h>
  27. #include <string.h>
  28. #include <unistd.h>
  29. #include <signal.h>
  30. #include <dirent.h>
  31. #include <arpa/inet.h>
  32. #include <pthread.h>
  33. #include <sys/vfs.h>
  34. #include <sys/time.h>
  35. #include <sys/wait.h>
  36. #include <sys/ioctl.h>
  37. #include <sys/types.h>
  38. #include <sys/socket.h>
  39. #include <net/if.h>
  40. #include <netinet/in.h>
  41. #include <net/route.h>
  42. #include <net/if_arp.h>
  43. #define SET_SA_FAMILY(addr, family)                        \
  44. memset ((char *) &(addr), '\0', sizeof(addr));        \
  45. addr.sa_family = (family);
  46. #define SIN_ADDR(x)        (((struct sockaddr_in *) (&(x)))->sin_addr.s_addr)
  47. int SetIfAddr(char *Ifname, char *Ipaddr, char *mask)
  48. {
  49. int fd;
  50. //int rc;
  51. struct ifreq ifr;
  52. struct sockaddr_in *sin;
  53. struct rtentry  rt;
  54. fd = socket(AF_INET, SOCK_DGRAM, 0);
  55. if(fd < 0)
  56. {
  57. perror("socket  error");
  58. return -2;
  59. }
  60. memset(&ifr,0,sizeof(ifr));
  61. strcpy(ifr.ifr_name,Ifname);
  62. sin = (struct sockaddr_in*)&ifr.ifr_addr;
  63. sin->sin_family = AF_INET;
  64. //IP地址
  65. if(inet_aton(Ipaddr,&(sin->sin_addr)) < 0)
  66. {
  67. perror("inet_aton   error");
  68. return -3;
  69. }
  70. if(ioctl(fd,SIOCSIFADDR,&ifr) < 0)
  71. {
  72. perror("ioctl   SIOCSIFADDR   error");
  73. return -4;
  74. }
  75. //子网掩码
  76. if(inet_aton(mask,&(sin->sin_addr)) < 0)
  77. {
  78. perror("inet_pton   error");
  79. return -5;
  80. }
  81. if(ioctl(fd, SIOCSIFNETMASK, &ifr) < 0)
  82. {
  83. perror("ioctl");
  84. return -6;
  85. }
  86. return 0;
  87. close(fd);
  88. }
  89. /*
  90. * funtion:set the file lock
  91. * params:fd is file Num,type is F_WRLCk,F_RDLCK or F_UNLCK
  92. -----------------------
  93. * time:2012-08-22 22:17
  94. * version:1.0
  95. */
  96. int joseph_lock_set(int fd, int type)
  97. {
  98. struct flock  lock_file;
  99. lock_file.l_whence = SEEK_SET;
  100. lock_file.l_start = 0;
  101. lock_file.l_len = 0;
  102. lock_file.l_type = type;
  103. lock_file.l_pid = -1;
  104. fcntl(fd, F_GETLK, &lock_file);
  105. if (lock_file.l_type != F_UNLCK)
  106. {
  107. if (lock_file.l_type == F_RDLCK)
  108. {
  109. }
  110. else if (lock_file.l_type == F_WRLCK)
  111. {
  112. }
  113. }
  114. lock_file.l_type = type;
  115. if ((fcntl(fd, F_SETLKW, &lock_file)) < 0)
  116. {
  117. return 1;
  118. }
  119. switch(lock_file.l_type)
  120. {
  121. case F_RDLCK:
  122. {
  123. }
  124. break;
  125. case F_WRLCK:
  126. {
  127. }
  128. break;
  129. case F_UNLCK:
  130. {
  131. return 1;
  132. }
  133. break;
  134. default:
  135. break;
  136. }/* end of switch  */
  137. return 0;
  138. }
  139. #define JOSEPH_ETH0_IFCG "/etc/sysconfig/network-scripts/ifcfg-eth0"
  140. int joseph_read_user_file(char *param_name)
  141. {
  142. int fd;
  143. int param_value;
  144. char buf_name[64];
  145. char buf[128];
  146. FILE *fp;
  147. strcpy(buf_name,param_name);
  148. fp = fopen(JOSEPH_ETH0_IFCG, "r");
  149. if(fp == NULL)
  150. {
  151. return -1;
  152. }
  153. fd=fileno(fp);
  154. joseph_lock_set(fd, F_RDLCK);//set the write lock
  155. while(fgets(buf, sizeof(buf), fp)){
  156. if(strstr(buf,buf_name)){
  157. printf("%s:[%d] %s = %s",__FUNCTION__,__LINE__,param_name,(buf+strlen(buf_name)+1));
  158. }
  159. }
  160. joseph_lock_set(fd, F_UNLCK);// unlock the file
  161. fclose(fp);
  162. return 0;
  163. }
  164. void joseph_alter_ipnc_param(char *joseph_param_name, char *joseph_param_values)
  165. {
  166. char buf[1024];
  167. char conf_path[64] = JOSEPH_ETH0_IFCG;
  168. if((joseph_param_name == NULL) ||( joseph_param_values == NULL))
  169. {
  170. return;
  171. }
  172. if((strlen(joseph_param_name) == 0) ||( strlen(joseph_param_values) == 0))
  173. {
  174. return;
  175. }
  176. sprintf(buf,"sed -i 's/%s=.*/%s=%s/g' %s",\
  177. joseph_param_name,joseph_param_name,joseph_param_values,conf_path);
  178. system(buf);
  179. return;
  180. }
  181. int  main ()
  182. {
  183. #if 1
  184. static int sock_fd = -1;        /* socket for doing interface ioctls */
  185. struct rtentry rt;
  186. FILE *db_fd = (FILE *) 0;
  187. char ifname[32];
  188. u_int32_t dstaddr, gateway;
  189. int j,k;
  190. char *p;
  191. FILE *fp;
  192. char cmd[30];
  193. char cmd1[5][20];
  194. memset(cmd, 0, sizeof(cmd));
  195. memset(cmd1, 0, sizeof(cmd1));
  196. if((fp=fopen("/etc/sysconfig/network-scripts/ifcfg-eth0","r"))==NULL){
  197. printf("Read ifcfg-eth0 error!\n");
  198. return -1;
  199. }
  200. for(j=0;j<5;j++){
  201. if((p=fgets(cmd,1024,fp))==NULL){
  202. printf("read data error!\n");
  203. return -2;
  204. }
  205. while(*p!='=')p++;
  206. p++;
  207. k=0;
  208. while(*p!='\n')
  209. {
  210. cmd1[j][k]=*p;
  211. k++;
  212. p++;
  213. }
  214. memset(cmd, 0, sizeof(cmd));
  215. }
  216. if(SetIfAddr(cmd1[0],cmd1[1],cmd1[2])!=0)
  217. {
  218. printf("config ip failed!\n");
  219. return -7;
  220. }
  221. strcpy(ifname, cmd1[0]);
  222. dstaddr = inet_addr(cmd1[3]);
  223. gateway = inet_addr(cmd1[4]);
  224. /* Get an internet socket for doing socket ioctls. */
  225. sock_fd = socket(AF_INET, SOCK_DGRAM, 0);
  226. /*open for debug*/
  227. db_fd = fopen("/tmp/addrt_db.txt","a+");
  228. fprintf(db_fd, "ifname=%s ouraddr=%x gateway=%x\n", ifname, dstaddr, gateway);
  229. memset (&rt, 0, sizeof (rt));
  230. /*set Destination addr*/
  231. SET_SA_FAMILY (rt.rt_dst, AF_INET);
  232. SIN_ADDR(rt.rt_dst) = dstaddr;
  233. /*set gw addr*/
  234. SET_SA_FAMILY (rt.rt_gateway, AF_INET);
  235. SIN_ADDR(rt.rt_gateway) = gateway;
  236. fprintf(db_fd,"mygateway=%x\n", SIN_ADDR(rt.rt_gateway));
  237. /*set genmask addr*/
  238. SET_SA_FAMILY (rt.rt_genmask, AF_INET);
  239. SIN_ADDR(rt.rt_genmask) = 0L;
  240. rt.rt_dev = ifname;
  241. rt.rt_flags = RTF_GATEWAY;
  242. if (ioctl(sock_fd, SIOCADDRT, &rt) < 0)
  243. {
  244. fprintf(db_fd,"route add err num=%m\n",errno);
  245. printf("Err\n");
  246. return 0;
  247. }
  248. fprintf(db_fd,"route add success route=%x\n", SIN_ADDR(rt.rt_gateway));
  249. fclose(db_fd);
  250. #else
  251. joseph_read_user_file("DEVICE");
  252. joseph_read_user_file("IPADDR");
  253. joseph_read_user_file("GATEWAY");
  254. joseph_read_user_file("DNS");
  255. joseph_read_user_file("BROADCAST");
  256. joseph_read_user_file("BOOTPROTO");
  257. joseph_read_user_file("ONBOOT");
  258. joseph_alter_ipnc_param("IPADDR","10.10.1.250");
  259. joseph_read_user_file("IPADDR");
  260. #endif
  261. return 0;
  262. }
  263. </span>

嵌入式 hi3518平台增加路由代码的更多相关文章

  1. 嵌入式 hi3518平台多路码流添加osd

    <span style="font-family:Courier New;"> /******************************************* ...

  2. 嵌入式 hi3518平台uboot引导nfs文件系统

    首先贴出来我的bootargs的设置(注没有换行符!!!): setenv bootargs noinitrd mem=64M root=/dev/nfs init=/linuxrc rw nfsro ...

  3. 嵌入式 hi3518平台检测网线是否插上

    /********************************** (C) COPYRIGHT ******************************* * File Name        ...

  4. 嵌入式 hi3518平台指定网卡测试是否通外网

    版权声明:本文为博主原创文章,未经博主允许不得转载. /********************************** (C) COPYRIGHT *********************** ...

  5. 嵌入式 hi3518平台获取网络环境中的ip、netmask、broadcast等信息

    <span style="font-family:Courier New;"> /********************************** (C) COPY ...

  6. 嵌入式 hi3518平台获取网关

    </pre><pre code_snippet_id="495447" snippet_file_name="blog_20141024_1_70650 ...

  7. 嵌入式 hi3518平台以太网网络模块设计包括重连机制和网线检测机制

    <span style="font-family:Courier New;"> #include <sys/types.h> #include <st ...

  8. OpenDataV低代码平台增加自定义属性编辑

    上一篇我们讲到了怎么在OpenDataV中添加自己的组件,为了让大家更快的上手我们的平台,这一次针对自定义属性编辑,我们再来加一篇说明.我们先来看一下OpenDataV中的属性编辑功能. 当我们拖动一 ...

  9. 数据库分库分表(sharding)系列(五) 一种支持自由规划无须数据迁移和修改路由代码的Sharding扩容方案

    作为一种数据存储层面上的水平伸缩解决方案,数据库Sharding技术由来已久,很多海量数据系统在其发展演进的历程中都曾经历过分库分表的Sharding改造阶段.简单地说,Sharding就是将原来单一 ...

随机推荐

  1. 基于RPC原理的dubbo

    在校期间大家都写过不少程序,比如写个hello world服务类,然后本地调用下,如下所示.这些程序的特点是服务消费方和服务提供方是本地调用关系. 而一旦踏入公司尤其是大型互联网公司就会发现,公司的系 ...

  2. Java-在线聊天系统-线程

    一.概述 1.目标:在上一个版本非线程的聊天系统中,出于要不断监听接收新client和接收client发出的信息,把accept()和DataInputStream.readUTF()分别写在了whi ...

  3. 【解惑】让人头疼的"相等"关系

    Java中判断相等关系一般有两种手段:(1) “==”关系操作符  (2) equals()方法. 显然,基本数据类型变量之间只能用"==".而对象之间两种手段都是合法的.但是有很 ...

  4. Linux系统文件权限&目录权限

    linux系统一切都是文件,文件和目录的所属与权限--来分别规定所有者.所有组.其余人的读.写.执行权限. 读(read),写(write),执行(excute)简写为(r.w.x),也可以以用(4. ...

  5. linux poll

    man poll: NAME poll, ppoll - wait for some event on a file descriptor SYNOPSIS #include <poll.h&g ...

  6. framwork NHibernate

    NHibernate 一.NHibernate 1.HQL  curd语句总结 . 查询整个映射对象所有字段 ? //直接from查询出来的是一个映射对象,即:查询整个映射对象所有字段 String ...

  7. 面试题目“ABCDE × 4 = EDCBA”新解法

    ABCDE*4=EDCBA 在面试宝典上面看到的一道题目,也是一道老掉牙的题目了,题目详情:一个五位数字ABCDE*4=EDCBA,这五个数字不重复,请编程求出来. 网上流传的代码都是对5位数ABCD ...

  8. KVM/QEMU桥接网络设置及kvm资料

    KVM/QEMU桥接网络设置 配置kvm的网络有2种方法.其一,默认方式为用户模式网络(Usermode Networking),数据包由NAT方式通过主机的接口进行传送.其二,使用桥接方式(Brid ...

  9. Linux屏幕录制gif的工具及教程

    准备 要两个工具配合使用.它们可以用命令行安装,也可以用软件管理器安装. 1,byzanz     安装后有两个命令 byzanz-record   录制,既能录制 Gif 动画,又可录制 Ogv 视 ...

  10. Android 的 ramdisk.img、system.img、userdata.img 作用说明,以及UBoot 系统启动过程

    首先通過編譯,先將android內核編譯成功.正常情況下,在目錄out/target.product/generic/(但是有的就沒有generic文件,如freescale和iriver:但是lon ...