sys_arch_init.c.svn-base
来自「RT-Thread是发展中的下一代微内核嵌入式实时操作系统」· SVN-BASE 代码 · 共 235 行
SVN-BASE
235 行
/*
* sys_arch_init.c
* init file for lwip.
*/
//#include <stdio.h>
#include "lwip/debug.h"
#include "lwip/mem.h"
#include "lwip/memp.h"
#include "lwip/sys.h"
#include "lwip/stats.h"
#include "lwip/tcpip.h"
#include "lwip/ip_addr.h"
#include "net/ethernetif.h"
#include "netif/etharp.h"
//#include <net/netintf.h>
#include <rtconfig.h>
//#define RTL8139
//#define S3C4510
#define RTL8019
#ifdef RTL8019
struct netif rtl8019if;
extern struct ifnet rtl8019_ifnet;
#endif
extern err_t ethernetif_input(struct pbuf *p, struct netif *netif);
extern err_t ethernetif_output(struct netif *netif, struct pbuf *p, struct ip_addr *ipaddr);
sys_sem_t sem;
void tcpip_init_done(void *arg)
{
rt_sem_t sem;
sem = arg;
sys_sem_signal(sem);
}
static void arp_timer(void *arg)
{
etharp_tmr();
sys_timeout(ARP_TMR_INTERVAL, (sys_timeout_handler)arp_timer, NULL);
}
#ifdef RTL8019
static err_t lwip_rtl8019_linkoutput(struct netif* netif, struct pbuf* p)
{
rtl8019_ifnet.if_send(0, p, 0);
return ERR_OK;
}
err_t lwip_rtl8019_init(struct netif *netif)
{
extern struct ifnet rtl8019_ifnet;
netif->state = (void *)&rtl8019_ifnet;
netif->name[0] = 'e';
netif->name[1] = '0';
netif->hwaddr_len = 6;
netif->output = ethernetif_output;
netif->linkoutput = lwip_rtl8019_linkoutput;
rtl8019_ifnet.if_ioctl(0, NIOCTL_GADDR, netif->hwaddr);
netif_set_up(netif);
return ERR_OK;
}
#endif
/*
* lwip system initial entry
*/
void lwip_sys_init()
{
// struct ip_addr ipaddr, netmask, gw;
struct ip_addr ipaddr, netmask, gw;
#ifdef STATS
stats_init();
#endif /* STATS */
sys_init();
mem_init();
memp_init();
pbuf_init();
IP4_ADDR(&gw, 0,0,0,0);
IP4_ADDR(&ipaddr, 192,168,0,20);
IP4_ADDR(&netmask, 255,255,255,0);
#if 1
#ifdef RTL8019
netif_add(&rtl8019if, &ipaddr, &netmask, &gw, NULL,
lwip_rtl8019_init, ethernetif_input);
netif_set_default(&rtl8019if);
#endif
#endif
etharp_init();
sys_timeout(ARP_TMR_INTERVAL, (sys_timeout_handler)arp_timer, NULL);
sem = sys_sem_new(0);
tcpip_init(tcpip_init_done, sem);
sys_sem_wait(sem);
sys_sem_free(sem);
}
#ifdef SHELL_COMMAND
#include <shell.h>
/*
* set netif ip address
*/
int netif_ip_set(struct shell_session *ss, int argc, char **argv)
{
char *pip, *pmask;
u_long ip, mask;
pip = argv[3];
pmask = argv[4];
ip = inet_addr(pip);
mask = inet_addr(pmask);
netif_set_ipaddr(netif_default, (struct ip_addr *)&ip);
netif_set_netmask(netif_default, (struct ip_addr *)&mask);
return ROK;
}
/*
* show netif ip address
*/
int netif_ip_show(struct shell_session *ss, int argc, char **argv)
{
u_long ip, mask;
u_char *pip, *pmask;
ip = netif_default->ip_addr.addr;
mask = netif_default->netmask.addr;
pip = (u_char *)&ip;
pmask = (u_char *)&mask;
ss->output(" netif ip address: %u.%u.%u.%u\n", pip[0], pip[1], pip[2], pip[3]);
ss->output(" netif net mask: %u.%u.%u.%u\n", pmask[0], pmask[1], pmask[2], pmask[3]);
return ROK;
}
#endif /* SHELL_COMMAND */
/* networking command */
#include <finsh/finsh.h>
#define CMD_DEFINE(name, ...) __d_cmd_##name(__VA_ARGS__)
void CMD_DEFINE(ifsetip, char* name, char* ip, char* netmask, char* gw)
{
if (name == RT_NULL || ip == RT_NULL || gw == RT_NULL) return;
struct netif *netif;
u_long ipaddr;
netif = netif_find(name);
if (netif == NULL)
{
rt_kprintf("Can't find netif:%s\n", name);
return;
}
ipaddr = inet_addr(ip);
netif_set_ipaddr(netif, (struct ip_addr *)&ipaddr);
ipaddr = inet_addr(netmask);
netif_set_netmask(netif, (struct ip_addr *)&ipaddr);
ipaddr = inet_addr(gw);
netif_set_gw(netif, (struct ip_addr *)&ipaddr);
netif_set_default(netif);
netif_set_up(netif);
}
void CMD_DEFINE(ifup, char* name)
{
if (name == RT_NULL) return;
struct netif *netif;
netif = netif_find(name);
if (netif == NULL)
{
rt_kprintf("Can't find netif:%s\n", name);
return;
}
netif_set_up(netif);
}
void CMD_DEFINE(ifdown, char* name)
{
if (name == RT_NULL) return;
struct netif *netif;
netif = netif_find(name);
if (netif == NULL)
{
rt_kprintf("Can't find netif:%s\n", name);
return;
}
netif_set_down(netif);
}
int CMD_DEFINE(ifshow, void)
{
struct netif *netif;
u_char *ip, *nm, *gw;
extern struct netif *netif_list;
for (netif = netif_list; netif != NULL; netif = netif->next)
{
ip = (u_char*) &netif->ip_addr.addr;
nm = (u_char*) &netif->netmask.addr;
gw = (u_char*) &netif->gw.addr;
rt_kprintf("--------\n");
rt_kprintf("netif : %c%c%d\n", netif->name[0], netif->name[1], netif->num);
rt_kprintf("ip : %u.%u.%u.%u\n", ip[0], ip[1], ip[2], ip[3]);
rt_kprintf("netmask: %u.%u.%u.%u\n", nm[0], nm[1], nm[2], nm[3]);
rt_kprintf("gw : %u.%u.%u.%u\n", gw[0], gw[1], gw[2], gw[3]);
}
return 0;
}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?