嵌入式 hi3518平台增加路由代码
- <span style="font-family:Courier New;">
- /********************************** (C) COPYRIGHT *******************************
- * File Name : add_route.c
- * Author : skdkjzz
- * Date : 2014/08/09
- * Description : 设置静态ip,添加路由表
- *********************************************************************************/
- #include <error.h>
- #include <stdio.h>
- #include <string.h>
- #include <net/if.h>
- #include <stdlib.h>
- #include <arpa/inet.h>
- #include <asm/types.h> /* glibc 2 conflicts with linux/types.h */
- #include <net/route.h>
- #include <sys/errno.h>
- #include <sys/ioctl.h>
- #include <sys/types.h>
- #include <sys/socket.h>
- #include <netinet/in.h>
- #include <net/if_arp.h>
- #include <netinet/if_ether.h>
- #include <fcntl.h>
- #include <stdio.h>
- #include <stdlib.h>
- #include <errno.h>
- #include <string.h>
- #include <unistd.h>
- #include <signal.h>
- #include <dirent.h>
- #include <arpa/inet.h>
- #include <pthread.h>
- #include <sys/vfs.h>
- #include <sys/time.h>
- #include <sys/wait.h>
- #include <sys/ioctl.h>
- #include <sys/types.h>
- #include <sys/socket.h>
- #include <net/if.h>
- #include <netinet/in.h>
- #include <net/route.h>
- #include <net/if_arp.h>
- #define SET_SA_FAMILY(addr, family) \
- memset ((char *) &(addr), '\0', sizeof(addr)); \
- addr.sa_family = (family);
- #define SIN_ADDR(x) (((struct sockaddr_in *) (&(x)))->sin_addr.s_addr)
- int SetIfAddr(char *Ifname, char *Ipaddr, char *mask)
- {
- int fd;
- //int rc;
- struct ifreq ifr;
- struct sockaddr_in *sin;
- struct rtentry rt;
- fd = socket(AF_INET, SOCK_DGRAM, 0);
- if(fd < 0)
- {
- perror("socket error");
- return -2;
- }
- memset(&ifr,0,sizeof(ifr));
- strcpy(ifr.ifr_name,Ifname);
- sin = (struct sockaddr_in*)&ifr.ifr_addr;
- sin->sin_family = AF_INET;
- //IP地址
- if(inet_aton(Ipaddr,&(sin->sin_addr)) < 0)
- {
- perror("inet_aton error");
- return -3;
- }
- if(ioctl(fd,SIOCSIFADDR,&ifr) < 0)
- {
- perror("ioctl SIOCSIFADDR error");
- return -4;
- }
- //子网掩码
- if(inet_aton(mask,&(sin->sin_addr)) < 0)
- {
- perror("inet_pton error");
- return -5;
- }
- if(ioctl(fd, SIOCSIFNETMASK, &ifr) < 0)
- {
- perror("ioctl");
- return -6;
- }
- return 0;
- close(fd);
- }
- /*
- * funtion:set the file lock
- * params:fd is file Num,type is F_WRLCk,F_RDLCK or F_UNLCK
- -----------------------
- * time:2012-08-22 22:17
- * version:1.0
- */
- int joseph_lock_set(int fd, int type)
- {
- struct flock lock_file;
- lock_file.l_whence = SEEK_SET;
- lock_file.l_start = 0;
- lock_file.l_len = 0;
- lock_file.l_type = type;
- lock_file.l_pid = -1;
- fcntl(fd, F_GETLK, &lock_file);
- if (lock_file.l_type != F_UNLCK)
- {
- if (lock_file.l_type == F_RDLCK)
- {
- }
- else if (lock_file.l_type == F_WRLCK)
- {
- }
- }
- lock_file.l_type = type;
- if ((fcntl(fd, F_SETLKW, &lock_file)) < 0)
- {
- return 1;
- }
- switch(lock_file.l_type)
- {
- case F_RDLCK:
- {
- }
- break;
- case F_WRLCK:
- {
- }
- break;
- case F_UNLCK:
- {
- return 1;
- }
- break;
- default:
- break;
- }/* end of switch */
- return 0;
- }
- #define JOSEPH_ETH0_IFCG "/etc/sysconfig/network-scripts/ifcfg-eth0"
- int joseph_read_user_file(char *param_name)
- {
- int fd;
- int param_value;
- char buf_name[64];
- char buf[128];
- FILE *fp;
- strcpy(buf_name,param_name);
- fp = fopen(JOSEPH_ETH0_IFCG, "r");
- if(fp == NULL)
- {
- return -1;
- }
- fd=fileno(fp);
- joseph_lock_set(fd, F_RDLCK);//set the write lock
- while(fgets(buf, sizeof(buf), fp)){
- if(strstr(buf,buf_name)){
- printf("%s:[%d] %s = %s",__FUNCTION__,__LINE__,param_name,(buf+strlen(buf_name)+1));
- }
- }
- joseph_lock_set(fd, F_UNLCK);// unlock the file
- fclose(fp);
- return 0;
- }
- void joseph_alter_ipnc_param(char *joseph_param_name, char *joseph_param_values)
- {
- char buf[1024];
- char conf_path[64] = JOSEPH_ETH0_IFCG;
- if((joseph_param_name == NULL) ||( joseph_param_values == NULL))
- {
- return;
- }
- if((strlen(joseph_param_name) == 0) ||( strlen(joseph_param_values) == 0))
- {
- return;
- }
- sprintf(buf,"sed -i 's/%s=.*/%s=%s/g' %s",\
- joseph_param_name,joseph_param_name,joseph_param_values,conf_path);
- system(buf);
- return;
- }
- int main ()
- {
- #if 1
- static int sock_fd = -1; /* socket for doing interface ioctls */
- struct rtentry rt;
- FILE *db_fd = (FILE *) 0;
- char ifname[32];
- u_int32_t dstaddr, gateway;
- int j,k;
- char *p;
- FILE *fp;
- char cmd[30];
- char cmd1[5][20];
- memset(cmd, 0, sizeof(cmd));
- memset(cmd1, 0, sizeof(cmd1));
- if((fp=fopen("/etc/sysconfig/network-scripts/ifcfg-eth0","r"))==NULL){
- printf("Read ifcfg-eth0 error!\n");
- return -1;
- }
- for(j=0;j<5;j++){
- if((p=fgets(cmd,1024,fp))==NULL){
- printf("read data error!\n");
- return -2;
- }
- while(*p!='=')p++;
- p++;
- k=0;
- while(*p!='\n')
- {
- cmd1[j][k]=*p;
- k++;
- p++;
- }
- memset(cmd, 0, sizeof(cmd));
- }
- if(SetIfAddr(cmd1[0],cmd1[1],cmd1[2])!=0)
- {
- printf("config ip failed!\n");
- return -7;
- }
- strcpy(ifname, cmd1[0]);
- dstaddr = inet_addr(cmd1[3]);
- gateway = inet_addr(cmd1[4]);
- /* Get an internet socket for doing socket ioctls. */
- sock_fd = socket(AF_INET, SOCK_DGRAM, 0);
- /*open for debug*/
- db_fd = fopen("/tmp/addrt_db.txt","a+");
- fprintf(db_fd, "ifname=%s ouraddr=%x gateway=%x\n", ifname, dstaddr, gateway);
- memset (&rt, 0, sizeof (rt));
- /*set Destination addr*/
- SET_SA_FAMILY (rt.rt_dst, AF_INET);
- SIN_ADDR(rt.rt_dst) = dstaddr;
- /*set gw addr*/
- SET_SA_FAMILY (rt.rt_gateway, AF_INET);
- SIN_ADDR(rt.rt_gateway) = gateway;
- fprintf(db_fd,"mygateway=%x\n", SIN_ADDR(rt.rt_gateway));
- /*set genmask addr*/
- SET_SA_FAMILY (rt.rt_genmask, AF_INET);
- SIN_ADDR(rt.rt_genmask) = 0L;
- rt.rt_dev = ifname;
- rt.rt_flags = RTF_GATEWAY;
- if (ioctl(sock_fd, SIOCADDRT, &rt) < 0)
- {
- fprintf(db_fd,"route add err num=%m\n",errno);
- printf("Err\n");
- return 0;
- }
- fprintf(db_fd,"route add success route=%x\n", SIN_ADDR(rt.rt_gateway));
- fclose(db_fd);
- #else
- joseph_read_user_file("DEVICE");
- joseph_read_user_file("IPADDR");
- joseph_read_user_file("GATEWAY");
- joseph_read_user_file("DNS");
- joseph_read_user_file("BROADCAST");
- joseph_read_user_file("BOOTPROTO");
- joseph_read_user_file("ONBOOT");
- joseph_alter_ipnc_param("IPADDR","10.10.1.250");
- joseph_read_user_file("IPADDR");
- #endif
- return 0;
- }
- </span>
嵌入式 hi3518平台增加路由代码的更多相关文章
- 嵌入式 hi3518平台多路码流添加osd
<span style="font-family:Courier New;"> /******************************************* ...
- 嵌入式 hi3518平台uboot引导nfs文件系统
首先贴出来我的bootargs的设置(注没有换行符!!!): setenv bootargs noinitrd mem=64M root=/dev/nfs init=/linuxrc rw nfsro ...
- 嵌入式 hi3518平台检测网线是否插上
/********************************** (C) COPYRIGHT ******************************* * File Name ...
- 嵌入式 hi3518平台指定网卡测试是否通外网
版权声明:本文为博主原创文章,未经博主允许不得转载. /********************************** (C) COPYRIGHT *********************** ...
- 嵌入式 hi3518平台获取网络环境中的ip、netmask、broadcast等信息
<span style="font-family:Courier New;"> /********************************** (C) COPY ...
- 嵌入式 hi3518平台获取网关
</pre><pre code_snippet_id="495447" snippet_file_name="blog_20141024_1_70650 ...
- 嵌入式 hi3518平台以太网网络模块设计包括重连机制和网线检测机制
<span style="font-family:Courier New;"> #include <sys/types.h> #include <st ...
- OpenDataV低代码平台增加自定义属性编辑
上一篇我们讲到了怎么在OpenDataV中添加自己的组件,为了让大家更快的上手我们的平台,这一次针对自定义属性编辑,我们再来加一篇说明.我们先来看一下OpenDataV中的属性编辑功能. 当我们拖动一 ...
- 数据库分库分表(sharding)系列(五) 一种支持自由规划无须数据迁移和修改路由代码的Sharding扩容方案
作为一种数据存储层面上的水平伸缩解决方案,数据库Sharding技术由来已久,很多海量数据系统在其发展演进的历程中都曾经历过分库分表的Sharding改造阶段.简单地说,Sharding就是将原来单一 ...
随机推荐
- lintcode: 最长无重复字符的子串
题目 最长无重复字符的子串给定一个字符串,请找出其中无重复字符的最长子字符串. 例如,在"abcabcbb"中,其无重复字符的最长子字符串是"abc",其长度为 ...
- 基于Mongodb的轻量级领域驱动框架(序)
混园子也有些年头了,从各个大牛那儿学了很多东西.技术这东西和中国的料理一样,其中技巧和经验,代代相传(这不是舌尖上的中国广告).转身回头一望,几年来自己也积累了一些东西,五花八门涉猎到各种方向,今日开 ...
- OpenStack学习系列-----第一篇 OpenStack介绍
刚开始接触OpenStack,被它所承诺的前景,以及现在业界对它的期望吸引(OpenStack被誉为21世纪的Linux开源社区,可以预见其的发展前景是何其广阔.).怎么说呢,我现在也暂时相信,Ope ...
- android-exploitme(五):不安全的数据存储
今天我来看看如果android将数据存储在sdcard,它的权限是什么样的 1. 打开emm软件,做一笔转账.
- MakeObjectInstance的简单理解
昨天把MakeObjectInstance的代码详细研究了一下,当然还有众多前辈高手们的帮助,终于大致搞明白了是怎么回事.但是给我顿悟的,不是高手们的帖子,而是来自我自己的一个疑惑,TObjectIn ...
- Struts2笔记——与ServletAPI解耦
与ServletAPI解耦的访问方式 为了避免与 Servlet API 耦合在一起, 方便 Action 做单元测试, Struts2 对 HttpServletRequest, HttpSessi ...
- CentOS编译安装Python3
前话 最近想学一下一门新的高级语言,无意中看到用python仿AIphaGo的github项目,就决定是他了. AIphaGo的Git传送门: https://github.com/Rochester ...
- Spring中通配符
一.加载路径中的通配符:?(匹配单个字符),*(匹配除/外任意字符).**/(匹配任意多个目录) classpath:app-Beans.xml 说明:无通配符,必须完全匹配 classpath: ...
- HDU 4622 Reincarnation 后缀自动机
模板来源:http://blog.csdn.net/zkfzkfzkfzkfzkfzkfzk/article/details/9669747 解法参考:http://blog.csdn.net/dyx ...
- UI抑制限制(UI Suppression Limitations)
运行UI抑制的Lync进程使你的应用程序可以访问同一个Lync客户端终端,SIP处理和所有非抑制Lync客户端使用的媒体处理,但具有以下限制.SDK中的可见组件不可用,除了视频窗体(video win ...