Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
openanolis
cloud-kernel
提交
f8bae99e
cloud-kernel
项目概览
openanolis
/
cloud-kernel
1 年多 前同步成功
通知
160
Star
36
Fork
7
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
10
列表
看板
标记
里程碑
合并请求
2
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
cloud-kernel
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
10
Issue
10
列表
看板
标记
里程碑
合并请求
2
合并请求
2
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
提交
f8bae99e
编写于
7月 05, 2011
作者:
D
David S. Miller
浏览文件
操作
浏览文件
下载
差异文件
Merge branch 'batman-adv/next' of
git://git.open-mesh.org/linux-merge
上级
994635a1
44c4349a
变更
13
隐藏空白更改
内联
并排
Showing
13 changed file
with
71 addition
and
59 deletion
+71
-59
net/batman-adv/aggregation.c
net/batman-adv/aggregation.c
+20
-5
net/batman-adv/gateway_client.c
net/batman-adv/gateway_client.c
+2
-3
net/batman-adv/main.c
net/batman-adv/main.c
+2
-7
net/batman-adv/main.h
net/batman-adv/main.h
+3
-8
net/batman-adv/originator.c
net/batman-adv/originator.c
+2
-3
net/batman-adv/packet.h
net/batman-adv/packet.h
+7
-4
net/batman-adv/routing.c
net/batman-adv/routing.c
+1
-1
net/batman-adv/send.c
net/batman-adv/send.c
+15
-6
net/batman-adv/send.h
net/batman-adv/send.h
+1
-1
net/batman-adv/soft-interface.c
net/batman-adv/soft-interface.c
+1
-1
net/batman-adv/translation-table.c
net/batman-adv/translation-table.c
+14
-16
net/batman-adv/translation-table.h
net/batman-adv/translation-table.h
+1
-2
net/batman-adv/types.h
net/batman-adv/types.h
+2
-2
未找到文件。
net/batman-adv/aggregation.c
浏览文件 @
f8bae99e
...
...
@@ -28,6 +28,7 @@
/* return true if new_packet can be aggregated with forw_packet */
static
bool
can_aggregate_with
(
const
struct
batman_packet
*
new_batman_packet
,
struct
bat_priv
*
bat_priv
,
int
packet_len
,
unsigned
long
send_time
,
bool
directlink
,
...
...
@@ -37,6 +38,8 @@ static bool can_aggregate_with(const struct batman_packet *new_batman_packet,
struct
batman_packet
*
batman_packet
=
(
struct
batman_packet
*
)
forw_packet
->
skb
->
data
;
int
aggregated_bytes
=
forw_packet
->
packet_len
+
packet_len
;
struct
hard_iface
*
primary_if
=
NULL
;
bool
res
=
false
;
/**
* we can aggregate the current packet to this aggregated packet
...
...
@@ -61,6 +64,10 @@ static bool can_aggregate_with(const struct batman_packet *new_batman_packet,
* packet
*/
primary_if
=
primary_if_get_selected
(
bat_priv
);
if
(
!
primary_if
)
goto
out
;
/* packets without direct link flag and high TTL
* are flooded through the net */
if
((
!
directlink
)
&&
...
...
@@ -70,8 +77,10 @@ static bool can_aggregate_with(const struct batman_packet *new_batman_packet,
/* own packets originating non-primary
* interfaces leave only that interface */
((
!
forw_packet
->
own
)
||
(
forw_packet
->
if_incoming
->
if_num
==
0
)))
return
true
;
(
forw_packet
->
if_incoming
==
primary_if
)))
{
res
=
true
;
goto
out
;
}
/* if the incoming packet is sent via this one
* interface only - we still can aggregate */
...
...
@@ -84,11 +93,16 @@ static bool can_aggregate_with(const struct batman_packet *new_batman_packet,
* (= secondary interface packets in general) */
(
batman_packet
->
flags
&
DIRECTLINK
||
(
forw_packet
->
own
&&
forw_packet
->
if_incoming
->
if_num
!=
0
)))
return
true
;
forw_packet
->
if_incoming
!=
primary_if
)))
{
res
=
true
;
goto
out
;
}
}
return
false
;
out:
if
(
primary_if
)
hardif_free_ref
(
primary_if
);
return
res
;
}
/* create a new aggregated packet and add this packet to it */
...
...
@@ -210,6 +224,7 @@ void add_bat_packet_to_list(struct bat_priv *bat_priv,
hlist_for_each_entry
(
forw_packet_pos
,
tmp_node
,
&
bat_priv
->
forw_bat_list
,
list
)
{
if
(
can_aggregate_with
(
batman_packet
,
bat_priv
,
packet_len
,
send_time
,
direct_link
,
...
...
net/batman-adv/gateway_client.c
浏览文件 @
f8bae99e
...
...
@@ -487,10 +487,9 @@ int gw_client_seq_print_text(struct seq_file *seq, void *offset)
}
seq_printf
(
seq
,
" %-12s (%s/%i) %17s [%10s]: gw_class ... "
"[B.A.T.M.A.N. adv %s
%s
, MainIF/MAC: %s/%pM (%s)]
\n
"
,
"[B.A.T.M.A.N. adv %s, MainIF/MAC: %s/%pM (%s)]
\n
"
,
"Gateway"
,
"#"
,
TQ_MAX_VALUE
,
"Nexthop"
,
"outgoingIF"
,
SOURCE_VERSION
,
REVISION_VERSION_STR
,
primary_if
->
net_dev
->
name
,
"outgoingIF"
,
SOURCE_VERSION
,
primary_if
->
net_dev
->
name
,
primary_if
->
net_dev
->
dev_addr
,
net_dev
->
name
);
rcu_read_lock
();
...
...
net/batman-adv/main.c
浏览文件 @
f8bae99e
...
...
@@ -58,9 +58,8 @@ static int __init batman_init(void)
register_netdevice_notifier
(
&
hard_if_notifier
);
pr_info
(
"B.A.T.M.A.N. advanced %s%s (compatibility version %i) "
"loaded
\n
"
,
SOURCE_VERSION
,
REVISION_VERSION_STR
,
COMPAT_VERSION
);
pr_info
(
"B.A.T.M.A.N. advanced %s (compatibility version %i) "
"loaded
\n
"
,
SOURCE_VERSION
,
COMPAT_VERSION
);
return
0
;
}
...
...
@@ -184,8 +183,4 @@ MODULE_LICENSE("GPL");
MODULE_AUTHOR
(
DRIVER_AUTHOR
);
MODULE_DESCRIPTION
(
DRIVER_DESC
);
MODULE_SUPPORTED_DEVICE
(
DRIVER_DEVICE
);
#ifdef REVISION_VERSION
MODULE_VERSION
(
SOURCE_VERSION
"-"
REVISION_VERSION
);
#else
MODULE_VERSION
(
SOURCE_VERSION
);
#endif
net/batman-adv/main.h
浏览文件 @
f8bae99e
...
...
@@ -27,8 +27,9 @@
#define DRIVER_DESC "B.A.T.M.A.N. advanced"
#define DRIVER_DEVICE "batman-adv"
#define SOURCE_VERSION "next"
#ifndef SOURCE_VERSION
#define SOURCE_VERSION "2011.3.0"
#endif
/* B.A.T.M.A.N. parameters */
...
...
@@ -144,12 +145,6 @@ enum dbg_level {
#include <linux/seq_file.h>
#include "types.h"
#ifndef REVISION_VERSION
#define REVISION_VERSION_STR ""
#else
#define REVISION_VERSION_STR " "REVISION_VERSION
#endif
extern
struct
list_head
hardif_list
;
extern
unsigned
char
broadcast_addr
[];
...
...
net/batman-adv/originator.c
浏览文件 @
f8bae99e
...
...
@@ -430,9 +430,8 @@ int orig_seq_print_text(struct seq_file *seq, void *offset)
goto
out
;
}
seq_printf
(
seq
,
"[B.A.T.M.A.N. adv %s%s, MainIF/MAC: %s/%pM (%s)]
\n
"
,
SOURCE_VERSION
,
REVISION_VERSION_STR
,
primary_if
->
net_dev
->
name
,
seq_printf
(
seq
,
"[B.A.T.M.A.N. adv %s, MainIF/MAC: %s/%pM (%s)]
\n
"
,
SOURCE_VERSION
,
primary_if
->
net_dev
->
name
,
primary_if
->
net_dev
->
dev_addr
,
net_dev
->
name
);
seq_printf
(
seq
,
" %-15s %s (%s/%i) %17s [%10s]: %20s ...
\n
"
,
"Originator"
,
"last-seen"
,
"#"
,
TQ_MAX_VALUE
,
"Nexthop"
,
...
...
net/batman-adv/packet.h
浏览文件 @
f8bae99e
...
...
@@ -78,10 +78,13 @@ enum tt_query_flags {
TT_FULL_TABLE
=
1
<<
2
};
/* TT_CHANGE flags */
enum
tt_change_flags
{
TT_CHANGE_DEL
=
0x01
,
TT_CLIENT_ROAM
=
0x02
/* TT_CLIENT flags.
* Flags from 1 to 1 << 7 are sent on the wire, while flags from 1 << 8 to
* 1 << 15 are used for local computation only */
enum
tt_client_flags
{
TT_CLIENT_DEL
=
1
<<
0
,
TT_CLIENT_ROAM
=
1
<<
1
,
TT_CLIENT_NOPURGE
=
1
<<
8
};
struct
batman_packet
{
...
...
net/batman-adv/routing.c
浏览文件 @
f8bae99e
...
...
@@ -1677,7 +1677,7 @@ int recv_bcast_packet(struct sk_buff *skb, struct hard_iface *recv_if)
spin_unlock_bh
(
&
orig_node
->
bcast_seqno_lock
);
/* rebroadcast packet */
add_bcast_packet_to_list
(
bat_priv
,
skb
);
add_bcast_packet_to_list
(
bat_priv
,
skb
,
1
);
/* broadcast for me */
interface_rx
(
recv_if
->
soft_iface
,
skb
,
recv_if
,
hdr_size
);
...
...
net/batman-adv/send.c
浏览文件 @
f8bae99e
...
...
@@ -163,6 +163,7 @@ static void send_packet(struct forw_packet *forw_packet)
struct
hard_iface
*
hard_iface
;
struct
net_device
*
soft_iface
;
struct
bat_priv
*
bat_priv
;
struct
hard_iface
*
primary_if
=
NULL
;
struct
batman_packet
*
batman_packet
=
(
struct
batman_packet
*
)(
forw_packet
->
skb
->
data
);
int
directlink
=
(
batman_packet
->
flags
&
DIRECTLINK
?
1
:
0
);
...
...
@@ -170,19 +171,23 @@ static void send_packet(struct forw_packet *forw_packet)
if
(
!
forw_packet
->
if_incoming
)
{
pr_err
(
"Error - can't forward packet: incoming iface not "
"specified
\n
"
);
return
;
goto
out
;
}
soft_iface
=
forw_packet
->
if_incoming
->
soft_iface
;
bat_priv
=
netdev_priv
(
soft_iface
);
if
(
forw_packet
->
if_incoming
->
if_status
!=
IF_ACTIVE
)
return
;
goto
out
;
primary_if
=
primary_if_get_selected
(
bat_priv
);
if
(
!
primary_if
)
goto
out
;
/* multihomed peer assumed */
/* non-primary OGMs are only broadcasted on their interface */
if
((
directlink
&&
(
batman_packet
->
ttl
==
1
))
||
(
forw_packet
->
own
&&
(
forw_packet
->
if_incoming
->
if_num
>
0
)))
{
(
forw_packet
->
own
&&
(
forw_packet
->
if_incoming
!=
primary_if
)))
{
/* FIXME: what about aggregated packets ? */
bat_dbg
(
DBG_BATMAN
,
bat_priv
,
...
...
@@ -199,7 +204,7 @@ static void send_packet(struct forw_packet *forw_packet)
broadcast_addr
);
forw_packet
->
skb
=
NULL
;
return
;
goto
out
;
}
/* broadcast on every interface */
...
...
@@ -211,6 +216,10 @@ static void send_packet(struct forw_packet *forw_packet)
send_packet_to_if
(
forw_packet
,
hard_iface
);
}
rcu_read_unlock
();
out:
if
(
primary_if
)
hardif_free_ref
(
primary_if
);
}
static
void
realloc_packet_buffer
(
struct
hard_iface
*
hard_iface
,
...
...
@@ -455,7 +464,7 @@ static void _add_bcast_packet_to_list(struct bat_priv *bat_priv,
* The skb is not consumed, so the caller should make sure that the
* skb is freed. */
int
add_bcast_packet_to_list
(
struct
bat_priv
*
bat_priv
,
const
struct
sk_buff
*
skb
)
const
struct
sk_buff
*
skb
,
unsigned
long
delay
)
{
struct
hard_iface
*
primary_if
=
NULL
;
struct
forw_packet
*
forw_packet
;
...
...
@@ -492,7 +501,7 @@ int add_bcast_packet_to_list(struct bat_priv *bat_priv,
/* how often did we send the bcast packet ? */
forw_packet
->
num_packets
=
0
;
_add_bcast_packet_to_list
(
bat_priv
,
forw_packet
,
1
);
_add_bcast_packet_to_list
(
bat_priv
,
forw_packet
,
delay
);
return
NETDEV_TX_OK
;
packet_free:
...
...
net/batman-adv/send.h
浏览文件 @
f8bae99e
...
...
@@ -31,7 +31,7 @@ void schedule_forward_packet(struct orig_node *orig_node,
int
directlink
,
struct
hard_iface
*
if_outgoing
);
int
add_bcast_packet_to_list
(
struct
bat_priv
*
bat_priv
,
const
struct
sk_buff
*
skb
);
const
struct
sk_buff
*
skb
,
unsigned
long
delay
);
void
send_outstanding_bat_packet
(
struct
work_struct
*
work
);
void
purge_outstanding_packets
(
struct
bat_priv
*
bat_priv
,
const
struct
hard_iface
*
hard_iface
);
...
...
net/batman-adv/soft-interface.c
浏览文件 @
f8bae99e
...
...
@@ -634,7 +634,7 @@ static int interface_tx(struct sk_buff *skb, struct net_device *soft_iface)
bcast_packet
->
seqno
=
htonl
(
atomic_inc_return
(
&
bat_priv
->
bcast_seqno
));
add_bcast_packet_to_list
(
bat_priv
,
skb
);
add_bcast_packet_to_list
(
bat_priv
,
skb
,
1
);
/* a copy is stored in the bcast list, therefore removing
* the original skb. */
...
...
net/batman-adv/translation-table.c
浏览文件 @
f8bae99e
...
...
@@ -143,8 +143,8 @@ static void tt_global_entry_free_ref(struct tt_global_entry *tt_global_entry)
kfree_rcu
(
tt_global_entry
,
rcu
);
}
static
void
tt_local_event
(
struct
bat_priv
*
bat_priv
,
uint8_t
op
,
const
uint8_t
*
addr
,
bool
roaming
)
static
void
tt_local_event
(
struct
bat_priv
*
bat_priv
,
const
uint8_t
*
addr
,
uint8_t
flags
)
{
struct
tt_change_node
*
tt_change_node
;
...
...
@@ -153,10 +153,7 @@ static void tt_local_event(struct bat_priv *bat_priv, uint8_t op,
if
(
!
tt_change_node
)
return
;
tt_change_node
->
change
.
flags
=
op
;
if
(
roaming
)
tt_change_node
->
change
.
flags
|=
TT_CLIENT_ROAM
;
tt_change_node
->
change
.
flags
=
flags
;
memcpy
(
tt_change_node
->
change
.
addr
,
addr
,
ETH_ALEN
);
spin_lock_bh
(
&
bat_priv
->
tt_changes_list_lock
);
...
...
@@ -203,21 +200,20 @@ void tt_local_add(struct net_device *soft_iface, const uint8_t *addr)
if
(
!
tt_local_entry
)
goto
out
;
tt_local_event
(
bat_priv
,
NO_FLAGS
,
addr
,
false
);
bat_dbg
(
DBG_TT
,
bat_priv
,
"Creating new local tt entry: %pM (ttvn: %d)
\n
"
,
addr
,
(
uint8_t
)
atomic_read
(
&
bat_priv
->
ttvn
));
memcpy
(
tt_local_entry
->
addr
,
addr
,
ETH_ALEN
);
tt_local_entry
->
last_seen
=
jiffies
;
tt_local_entry
->
flags
=
NO_FLAGS
;
atomic_set
(
&
tt_local_entry
->
refcount
,
2
);
/* the batman interface mac address should never be purged */
if
(
compare_eth
(
addr
,
soft_iface
->
dev_addr
))
tt_local_entry
->
never_purge
=
1
;
else
tt_local_entry
->
never_purge
=
0
;
tt_local_entry
->
flags
|=
TT_CLIENT_NOPURGE
;
tt_local_event
(
bat_priv
,
addr
,
tt_local_entry
->
flags
)
;
hash_add
(
bat_priv
->
tt_local_hash
,
compare_ltt
,
choose_orig
,
tt_local_entry
,
&
tt_local_entry
->
hash_entry
);
...
...
@@ -387,7 +383,9 @@ void tt_local_remove(struct bat_priv *bat_priv, const uint8_t *addr,
if
(
!
tt_local_entry
)
goto
out
;
tt_local_event
(
bat_priv
,
TT_CHANGE_DEL
,
tt_local_entry
->
addr
,
roaming
);
tt_local_event
(
bat_priv
,
tt_local_entry
->
addr
,
tt_local_entry
->
flags
|
TT_CLIENT_DEL
|
(
roaming
?
TT_CLIENT_ROAM
:
NO_FLAGS
));
tt_local_del
(
bat_priv
,
tt_local_entry
,
message
);
out:
if
(
tt_local_entry
)
...
...
@@ -410,15 +408,15 @@ static void tt_local_purge(struct bat_priv *bat_priv)
spin_lock_bh
(
list_lock
);
hlist_for_each_entry_safe
(
tt_local_entry
,
node
,
node_tmp
,
head
,
hash_entry
)
{
if
(
tt_local_entry
->
never_purge
)
if
(
tt_local_entry
->
flags
&
TT_CLIENT_NOPURGE
)
continue
;
if
(
!
is_out_of_time
(
tt_local_entry
->
last_seen
,
TT_LOCAL_TIMEOUT
*
1000
))
continue
;
tt_local_event
(
bat_priv
,
TT_CHANGE_DEL
,
tt_local_entry
->
addr
,
false
);
tt_local_event
(
bat_priv
,
tt_local_entry
->
addr
,
tt_local_entry
->
flags
|
TT_CLIENT_DEL
);
atomic_dec
(
&
bat_priv
->
num_local_tt
);
bat_dbg
(
DBG_TT
,
bat_priv
,
"Deleting local "
"tt entry (%pM): timed out
\n
"
,
...
...
@@ -1335,7 +1333,7 @@ static void _tt_update_changes(struct bat_priv *bat_priv,
int
i
;
for
(
i
=
0
;
i
<
tt_num_changes
;
i
++
)
{
if
((
tt_change
+
i
)
->
flags
&
TT_C
HANGE
_DEL
)
if
((
tt_change
+
i
)
->
flags
&
TT_C
LIENT
_DEL
)
tt_global_del
(
bat_priv
,
orig_node
,
(
tt_change
+
i
)
->
addr
,
"tt removed by changes"
,
...
...
net/batman-adv/translation-table.h
浏览文件 @
f8bae99e
...
...
@@ -30,8 +30,7 @@ void tt_local_add(struct net_device *soft_iface, const uint8_t *addr);
void
tt_local_remove
(
struct
bat_priv
*
bat_priv
,
const
uint8_t
*
addr
,
const
char
*
message
,
bool
roaming
);
int
tt_local_seq_print_text
(
struct
seq_file
*
seq
,
void
*
offset
);
void
tt_global_add_orig
(
struct
bat_priv
*
bat_priv
,
struct
orig_node
*
orig_node
,
void
tt_global_add_orig
(
struct
bat_priv
*
bat_priv
,
struct
orig_node
*
orig_node
,
const
unsigned
char
*
tt_buff
,
int
tt_buff_len
);
int
tt_global_add
(
struct
bat_priv
*
bat_priv
,
struct
orig_node
*
orig_node
,
const
unsigned
char
*
addr
,
...
...
net/batman-adv/types.h
浏览文件 @
f8bae99e
...
...
@@ -224,7 +224,7 @@ struct socket_packet {
struct
tt_local_entry
{
uint8_t
addr
[
ETH_ALEN
];
unsigned
long
last_seen
;
char
never_purge
;
uint16_t
flags
;
atomic_t
refcount
;
struct
rcu_head
rcu
;
struct
hlist_node
hash_entry
;
...
...
@@ -234,7 +234,7 @@ struct tt_global_entry {
uint8_t
addr
[
ETH_ALEN
];
struct
orig_node
*
orig_node
;
uint8_t
ttvn
;
uint
8
_t
flags
;
/* only TT_GLOBAL_ROAM is used */
uint
16
_t
flags
;
/* only TT_GLOBAL_ROAM is used */
unsigned
long
roam_at
;
/* time at which TT_GLOBAL_ROAM was set */
atomic_t
refcount
;
struct
rcu_head
rcu
;
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录