Skip to content
项目
群组
代码片段
帮助
当前项目
正在载入...
登录 / 注册
切换导航面板
X
xv6-public
项目
项目
详情
活动
周期分析
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
统计图
问题
0
问题
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
CI / CD
CI / CD
流水线
作业
日程
统计图
Wiki
Wiki
代码片段
代码片段
成员
成员
折叠边栏
关闭边栏
活动
图像
聊天
创建新问题
作业
提交
问题看板
Open sidebar
银宸时代
OS Lab Group
奖励实验
xv6-public
提交
73e09839
提交
73e09839
12月 26, 2011
创建
作者:
Silas Boyd-Wickizer
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
More lwIP initialization code
上级
dba994ab
显示空白字符变更
内嵌
并排
正在显示
1 个修改的文件
包含
84 行增加
和
0 行删除
+84
-0
net.c
net.c
+84
-0
没有找到文件。
net.c
浏览文件 @
73e09839
#ifdef LWIP
#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wattributes"
#include "lwip/tcp_impl.h"
#include "lwip/tcpip.h"
#include "lwip/ip.h"
#include "lwip/netif.h"
#include "netif/etharp.h"
#pragma GCC diagnostic pop
#endif
#include "types.h"
...
...
@@ -53,8 +60,77 @@ nettest(void)
}
#ifdef LWIP
struct
timer_thread
{
u64
nsec
;
struct
condvar
waitcv
;
struct
spinlock
waitlk
;
void
(
*
func
)(
void
);
};
static
struct
timer_thread
t_arp
;
static
struct
timer_thread
t_tcpf
;
static
struct
timer_thread
t_tcps
;
int
errno
;
static
void
__attribute__
((
noreturn
))
net_timer
(
void
*
x
)
{
struct
timer_thread
*
t
=
(
struct
timer_thread
*
)
x
;
for
(;;)
{
u64
cur
=
nsectime
();
t
->
func
();
acquire
(
&
t
->
waitlk
);
cv_sleepto
(
&
t
->
waitcv
,
&
t
->
waitlk
,
cur
+
t
->
nsec
);
release
(
&
t
->
waitlk
);
}
}
static
void
start_timer
(
struct
timer_thread
*
t
,
void
(
*
func
)(
void
),
const
char
*
name
,
u64
msec
)
{
struct
proc
*
p
;
t
->
nsec
=
1000000000
/
1000
*
msec
;
t
->
func
=
func
;
initcondvar
(
&
t
->
waitcv
,
name
);
initlock
(
&
t
->
waitlk
,
name
);
p
=
threadalloc
(
net_timer
,
t
);
if
(
p
==
NULL
)
panic
(
"net: start_timer"
);
acquire
(
&
p
->
lock
);
safestrcpy
(
p
->
name
,
name
,
sizeof
(
p
->
name
));
p
->
state
=
RUNNABLE
;
addrun
(
p
);
release
(
&
p
->
lock
);
}
static
void
lwip_init
(
struct
netif
*
nif
,
void
*
if_state
,
u32
init_addr
,
u32
init_mask
,
u32
init_gw
)
{
extern
err_t
if_init
(
struct
netif
*
netif
);
struct
ip_addr
ipaddr
,
netmask
,
gateway
;
ipaddr
.
addr
=
init_addr
;
netmask
.
addr
=
init_mask
;
gateway
.
addr
=
init_gw
;
if
(
0
==
netif_add
(
nif
,
&
ipaddr
,
&
netmask
,
&
gateway
,
if_state
,
if_init
,
ip_input
))
panic
(
"lwip_init: error in netif_add
\n
"
);
netif_set_default
(
nif
);
netif_set_up
(
nif
);
}
static
void
tcpip_init_done
(
void
*
arg
)
{
...
...
@@ -65,11 +141,19 @@ tcpip_init_done(void *arg)
void
initnet_worker
(
void
*
x
)
{
static
struct
netif
nif
;
volatile
long
tcpip_done
=
0
;
tcpip_init
(
&
tcpip_init_done
,
(
void
*
)
&
tcpip_done
);
while
(
!
tcpip_done
)
yield
();
memset
(
&
nif
,
0
,
sizeof
(
nif
));
lwip_init
(
&
nif
,
NULL
,
0
,
0
,
0
);
start_timer
(
&
t_arp
,
&
etharp_tmr
,
"arp timer"
,
ARP_TMR_INTERVAL
);
start_timer
(
&
t_tcpf
,
&
tcp_fasttmr
,
"tcp f timer"
,
TCP_FAST_INTERVAL
);
start_timer
(
&
t_tcps
,
&
tcp_slowtmr
,
"tcp s timer"
,
TCP_SLOW_INTERVAL
);
}
void
...
...
编写
预览
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论