Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
xiphi1978
linux
提交
9591a79f
L
linux
项目概览
xiphi1978
/
linux
通知
2
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
L
linux
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
9591a79f
编写于
12月 12, 2010
作者:
M
Marek Lindner
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
batman-adv: convert neighbor list to hlist
Signed-off-by:
N
Marek Lindner
<
lindner_marek@yahoo.de
>
上级
a8e7f4bc
变更
3
隐藏空白更改
内联
并排
Showing
3 changed file
with
35 addition
and
28 deletion
+35
-28
net/batman-adv/originator.c
net/batman-adv/originator.c
+15
-15
net/batman-adv/routing.c
net/batman-adv/routing.c
+18
-11
net/batman-adv/types.h
net/batman-adv/types.h
+2
-2
未找到文件。
net/batman-adv/originator.c
浏览文件 @
9591a79f
...
...
@@ -82,29 +82,28 @@ struct neigh_node *create_neighbor(struct orig_node *orig_node,
if
(
!
neigh_node
)
return
NULL
;
INIT_
LIST_HEAD
(
&
neigh_node
->
list
);
INIT_
HLIST_NODE
(
&
neigh_node
->
list
);
memcpy
(
neigh_node
->
addr
,
neigh
,
ETH_ALEN
);
neigh_node
->
orig_node
=
orig_neigh_node
;
neigh_node
->
if_incoming
=
if_incoming
;
kref_init
(
&
neigh_node
->
refcount
);
list_add_tail
(
&
neigh_node
->
list
,
&
orig_node
->
neigh_list
);
hlist_add_head
(
&
neigh_node
->
list
,
&
orig_node
->
neigh_list
);
return
neigh_node
;
}
static
void
free_orig_node
(
void
*
data
,
void
*
arg
)
{
struct
list_head
*
list_pos
,
*
list_pos
_tmp
;
struct
hlist_node
*
node
,
*
node
_tmp
;
struct
neigh_node
*
neigh_node
;
struct
orig_node
*
orig_node
=
(
struct
orig_node
*
)
data
;
struct
bat_priv
*
bat_priv
=
(
struct
bat_priv
*
)
arg
;
/* for all neighbors towards this originator ... */
list_for_each_safe
(
list_pos
,
list_pos_tmp
,
&
orig_node
->
neigh_list
)
{
neigh_node
=
list_entry
(
list_pos
,
struct
neigh_node
,
list
);
list_del
(
list_pos
);
hlist_for_each_entry_safe
(
neigh_node
,
node
,
node_tmp
,
&
orig_node
->
neigh_list
,
list
)
{
hlist_del
(
&
neigh_node
->
list
);
kref_put
(
&
neigh_node
->
refcount
,
neigh_node_free_ref
);
}
...
...
@@ -151,7 +150,7 @@ struct orig_node *get_orig_node(struct bat_priv *bat_priv, uint8_t *addr)
if
(
!
orig_node
)
return
NULL
;
INIT_LIST_HEAD
(
&
orig_node
->
neigh_list
);
INIT_
H
LIST_HEAD
(
&
orig_node
->
neigh_list
);
memcpy
(
orig_node
->
orig
,
addr
,
ETH_ALEN
);
orig_node
->
router
=
NULL
;
...
...
@@ -195,15 +194,15 @@ static bool purge_orig_neighbors(struct bat_priv *bat_priv,
struct
orig_node
*
orig_node
,
struct
neigh_node
**
best_neigh_node
)
{
struct
list_head
*
list_pos
,
*
list_pos
_tmp
;
struct
hlist_node
*
node
,
*
node
_tmp
;
struct
neigh_node
*
neigh_node
;
bool
neigh_purged
=
false
;
*
best_neigh_node
=
NULL
;
/* for all neighbors towards this originator ... */
list_for_each_safe
(
list_pos
,
list_pos_tmp
,
&
orig_node
->
neigh_list
)
{
neigh_node
=
list_entry
(
list_pos
,
struct
neigh_node
,
list
);
hlist_for_each_entry_safe
(
neigh_node
,
node
,
node_tmp
,
&
orig_node
->
neigh_list
,
list
)
{
if
((
time_after
(
jiffies
,
neigh_node
->
last_valid
+
PURGE_TIMEOUT
*
HZ
))
||
...
...
@@ -225,7 +224,8 @@ static bool purge_orig_neighbors(struct bat_priv *bat_priv,
(
neigh_node
->
last_valid
/
HZ
));
neigh_purged
=
true
;
list_del
(
list_pos
);
hlist_del
(
&
neigh_node
->
list
);
kref_put
(
&
neigh_node
->
refcount
,
neigh_node_free_ref
);
}
else
{
if
((
!*
best_neigh_node
)
||
...
...
@@ -328,7 +328,7 @@ int orig_seq_print_text(struct seq_file *seq, void *offset)
struct
net_device
*
net_dev
=
(
struct
net_device
*
)
seq
->
private
;
struct
bat_priv
*
bat_priv
=
netdev_priv
(
net_dev
);
struct
hashtable_t
*
hash
=
bat_priv
->
orig_hash
;
struct
hlist_node
*
walk
;
struct
hlist_node
*
walk
,
*
node
;
struct
hlist_head
*
head
;
struct
element_t
*
bucket
;
struct
orig_node
*
orig_node
;
...
...
@@ -384,8 +384,8 @@ int orig_seq_print_text(struct seq_file *seq, void *offset)
neigh_node
->
addr
,
neigh_node
->
if_incoming
->
net_dev
->
name
);
list_for_each_entry
(
neigh_node
,
&
orig_node
->
neigh_list
,
list
)
{
hlist_for_each_entry
(
neigh_node
,
node
,
&
orig_node
->
neigh_list
,
list
)
{
seq_printf
(
seq
,
" %pM (%3i)"
,
neigh_node
->
addr
,
neigh_node
->
tq_avg
);
}
...
...
net/batman-adv/routing.c
浏览文件 @
9591a79f
...
...
@@ -149,12 +149,12 @@ static int is_bidirectional_neigh(struct orig_node *orig_node,
{
struct
bat_priv
*
bat_priv
=
netdev_priv
(
if_incoming
->
soft_iface
);
struct
neigh_node
*
neigh_node
=
NULL
,
*
tmp_neigh_node
=
NULL
;
struct
hlist_node
*
node
;
unsigned
char
total_count
;
if
(
orig_node
==
orig_neigh_node
)
{
list_for_each_entry
(
tmp_neigh_node
,
&
orig_node
->
neigh_list
,
list
)
{
hlist_for_each_entry
(
tmp_neigh_node
,
node
,
&
orig_node
->
neigh_list
,
list
)
{
if
(
compare_orig
(
tmp_neigh_node
->
addr
,
orig_neigh_node
->
orig
)
&&
...
...
@@ -174,8 +174,8 @@ static int is_bidirectional_neigh(struct orig_node *orig_node,
neigh_node
->
last_valid
=
jiffies
;
}
else
{
/* find packet count of corresponding one hop neighbor */
list_for_each_entry
(
tmp_neigh_
node
,
&
orig_neigh_node
->
neigh_list
,
list
)
{
hlist_for_each_entry
(
tmp_neigh_node
,
node
,
&
orig_neigh_node
->
neigh_list
,
list
)
{
if
(
compare_orig
(
tmp_neigh_node
->
addr
,
orig_neigh_node
->
orig
)
&&
...
...
@@ -260,12 +260,14 @@ static void update_orig(struct bat_priv *bat_priv,
char
is_duplicate
)
{
struct
neigh_node
*
neigh_node
=
NULL
,
*
tmp_neigh_node
=
NULL
;
struct
hlist_node
*
node
;
int
tmp_hna_buff_len
;
bat_dbg
(
DBG_BATMAN
,
bat_priv
,
"update_originator(): "
"Searching and updating originator entry of received packet
\n
"
);
list_for_each_entry
(
tmp_neigh_node
,
&
orig_node
->
neigh_list
,
list
)
{
hlist_for_each_entry
(
tmp_neigh_node
,
node
,
&
orig_node
->
neigh_list
,
list
)
{
if
(
compare_orig
(
tmp_neigh_node
->
addr
,
ethhdr
->
h_source
)
&&
(
tmp_neigh_node
->
if_incoming
==
if_incoming
))
{
neigh_node
=
tmp_neigh_node
;
...
...
@@ -391,6 +393,7 @@ static char count_real_packets(struct ethhdr *ethhdr,
struct
bat_priv
*
bat_priv
=
netdev_priv
(
if_incoming
->
soft_iface
);
struct
orig_node
*
orig_node
;
struct
neigh_node
*
tmp_neigh_node
;
struct
hlist_node
*
node
;
char
is_duplicate
=
0
;
int32_t
seq_diff
;
int
need_update
=
0
;
...
...
@@ -407,7 +410,8 @@ static char count_real_packets(struct ethhdr *ethhdr,
&
orig_node
->
batman_seqno_reset
))
return
-
1
;
list_for_each_entry
(
tmp_neigh_node
,
&
orig_node
->
neigh_list
,
list
)
{
hlist_for_each_entry
(
tmp_neigh_node
,
node
,
&
orig_node
->
neigh_list
,
list
)
{
is_duplicate
|=
get_bit_status
(
tmp_neigh_node
->
real_bits
,
orig_node
->
last_real_seqno
,
...
...
@@ -457,6 +461,7 @@ void update_bonding_candidates(struct orig_node *orig_node)
int
candidates
;
int
interference_candidate
;
int
best_tq
;
struct
hlist_node
*
node
,
*
node2
;
struct
neigh_node
*
tmp_neigh_node
,
*
tmp_neigh_node2
;
struct
neigh_node
*
first_candidate
,
*
last_candidate
;
...
...
@@ -476,13 +481,15 @@ void update_bonding_candidates(struct orig_node *orig_node)
* as "bonding partner" */
/* first, zero the list */
list_for_each_entry
(
tmp_neigh_node
,
&
orig_node
->
neigh_list
,
list
)
{
hlist_for_each_entry
(
tmp_neigh_node
,
node
,
&
orig_node
->
neigh_list
,
list
)
{
tmp_neigh_node
->
next_bond_candidate
=
NULL
;
}
first_candidate
=
NULL
;
last_candidate
=
NULL
;
list_for_each_entry
(
tmp_neigh_node
,
&
orig_node
->
neigh_list
,
list
)
{
hlist_for_each_entry
(
tmp_neigh_node
,
node
,
&
orig_node
->
neigh_list
,
list
)
{
/* only consider if it has the same primary address ... */
if
(
memcmp
(
orig_node
->
orig
,
...
...
@@ -499,8 +506,8 @@ void update_bonding_candidates(struct orig_node *orig_node)
* select this candidate because of possible interference. */
interference_candidate
=
0
;
list_for_each_entry
(
tmp_neigh_
node2
,
&
orig_node
->
neigh_list
,
list
)
{
hlist_for_each_entry
(
tmp_neigh_node2
,
node2
,
&
orig_node
->
neigh_list
,
list
)
{
if
(
tmp_neigh_node2
==
tmp_neigh_node
)
continue
;
...
...
net/batman-adv/types.h
浏览文件 @
9591a79f
...
...
@@ -83,7 +83,7 @@ struct orig_node {
uint8_t
last_ttl
;
unsigned
long
bcast_bits
[
NUM_WORDS
];
uint32_t
last_bcast_seqno
;
struct
list_head
neigh_list
;
struct
h
list_head
neigh_list
;
struct
list_head
frag_list
;
unsigned
long
last_frag_packet
;
struct
{
...
...
@@ -105,7 +105,7 @@ struct gw_node {
* @last_valid: when last packet via this neighbor was received
*/
struct
neigh_node
{
struct
list_head
list
;
struct
hlist_node
list
;
uint8_t
addr
[
ETH_ALEN
];
uint8_t
real_packet_count
;
uint8_t
tq_recv
[
TQ_GLOBAL_WINDOW_SIZE
];
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录