Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
L
linux
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
Kirill Smelkov
linux
Commits
47c94655
Commit
47c94655
authored
Sep 23, 2012
by
Antonio Quartulli
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
batman-adv: refactor code to simplify long lines
Signed-off-by:
Antonio Quartulli
<
ordex@autistici.org
>
parent
7c1fd91d
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
30 additions
and
32 deletions
+30
-32
net/batman-adv/translation-table.c
net/batman-adv/translation-table.c
+30
-32
No files found.
net/batman-adv/translation-table.c
View file @
47c94655
...
...
@@ -242,86 +242,84 @@ void batadv_tt_local_add(struct net_device *soft_iface, const uint8_t *addr,
int
ifindex
)
{
struct
batadv_priv
*
bat_priv
=
netdev_priv
(
soft_iface
);
struct
batadv_tt_local_entry
*
tt_local
_entry
=
NULL
;
struct
batadv_tt_global_entry
*
tt_global
_entry
=
NULL
;
struct
batadv_tt_local_entry
*
tt_local
=
NULL
;
struct
batadv_tt_global_entry
*
tt_global
=
NULL
;
struct
hlist_head
*
head
;
struct
hlist_node
*
node
;
struct
batadv_tt_orig_list_entry
*
orig_entry
;
int
hash_added
;
tt_local
_entry
=
batadv_tt_local_hash_find
(
bat_priv
,
addr
);
tt_local
=
batadv_tt_local_hash_find
(
bat_priv
,
addr
);
if
(
tt_local
_entry
)
{
tt_local
_entry
->
last_seen
=
jiffies
;
if
(
tt_local
)
{
tt_local
->
last_seen
=
jiffies
;
/* possibly unset the BATADV_TT_CLIENT_PENDING flag */
tt_local
_entry
->
common
.
flags
&=
~
BATADV_TT_CLIENT_PENDING
;
tt_local
->
common
.
flags
&=
~
BATADV_TT_CLIENT_PENDING
;
goto
out
;
}
tt_local
_entry
=
kmalloc
(
sizeof
(
*
tt_local_entry
),
GFP_ATOMIC
);
if
(
!
tt_local
_entry
)
tt_local
=
kmalloc
(
sizeof
(
*
tt_local
),
GFP_ATOMIC
);
if
(
!
tt_local
)
goto
out
;
batadv_dbg
(
BATADV_DBG_TT
,
bat_priv
,
"Creating new local tt entry: %pM (ttvn: %d)
\n
"
,
addr
,
(
uint8_t
)
atomic_read
(
&
bat_priv
->
tt
.
vn
));
memcpy
(
tt_local
_entry
->
common
.
addr
,
addr
,
ETH_ALEN
);
tt_local
_entry
->
common
.
flags
=
BATADV_NO_FLAGS
;
memcpy
(
tt_local
->
common
.
addr
,
addr
,
ETH_ALEN
);
tt_local
->
common
.
flags
=
BATADV_NO_FLAGS
;
if
(
batadv_is_wifi_iface
(
ifindex
))
tt_local
_entry
->
common
.
flags
|=
BATADV_TT_CLIENT_WIFI
;
atomic_set
(
&
tt_local
_entry
->
common
.
refcount
,
2
);
tt_local
_entry
->
last_seen
=
jiffies
;
tt_local
_entry
->
common
.
added_at
=
tt_local_entry
->
last_seen
;
tt_local
->
common
.
flags
|=
BATADV_TT_CLIENT_WIFI
;
atomic_set
(
&
tt_local
->
common
.
refcount
,
2
);
tt_local
->
last_seen
=
jiffies
;
tt_local
->
common
.
added_at
=
tt_local
->
last_seen
;
/* the batman interface mac address should never be purged */
if
(
batadv_compare_eth
(
addr
,
soft_iface
->
dev_addr
))
tt_local
_entry
->
common
.
flags
|=
BATADV_TT_CLIENT_NOPURGE
;
tt_local
->
common
.
flags
|=
BATADV_TT_CLIENT_NOPURGE
;
/* The local entry has to be marked as NEW to avoid to send it in
* a full table response going out before the next ttvn increment
* (consistency check)
*/
tt_local
_entry
->
common
.
flags
|=
BATADV_TT_CLIENT_NEW
;
tt_local
->
common
.
flags
|=
BATADV_TT_CLIENT_NEW
;
hash_added
=
batadv_hash_add
(
bat_priv
->
tt
.
local_hash
,
batadv_compare_tt
,
batadv_choose_orig
,
&
tt_local_entry
->
common
,
&
tt_local_entry
->
common
.
hash_entry
);
batadv_choose_orig
,
&
tt_local
->
common
,
&
tt_local
->
common
.
hash_entry
);
if
(
unlikely
(
hash_added
!=
0
))
{
/* remove the reference for the hash */
batadv_tt_local_entry_free_ref
(
tt_local
_entry
);
batadv_tt_local_entry_free_ref
(
tt_local
);
goto
out
;
}
batadv_tt_local_event
(
bat_priv
,
addr
,
tt_local
_entry
->
common
.
flags
);
batadv_tt_local_event
(
bat_priv
,
addr
,
tt_local
->
common
.
flags
);
/* remove address from global hash if present */
tt_global
_entry
=
batadv_tt_global_hash_find
(
bat_priv
,
addr
);
tt_global
=
batadv_tt_global_hash_find
(
bat_priv
,
addr
);
/* Check whether it is a roaming! */
if
(
tt_global
_entry
)
{
if
(
tt_global
)
{
/* These node are probably going to update their tt table */
head
=
&
tt_global
_entry
->
orig_list
;
head
=
&
tt_global
->
orig_list
;
rcu_read_lock
();
hlist_for_each_entry_rcu
(
orig_entry
,
node
,
head
,
list
)
{
batadv_send_roam_adv
(
bat_priv
,
tt_global_entry
->
common
.
addr
,
batadv_send_roam_adv
(
bat_priv
,
tt_global
->
common
.
addr
,
orig_entry
->
orig_node
);
}
rcu_read_unlock
();
/* The global entry has to be marked as ROAMING and
* has to be kept for consistency purpose
*/
tt_global
_entry
->
common
.
flags
|=
BATADV_TT_CLIENT_ROAM
;
tt_global
_entry
->
roam_at
=
jiffies
;
tt_global
->
common
.
flags
|=
BATADV_TT_CLIENT_ROAM
;
tt_global
->
roam_at
=
jiffies
;
}
out:
if
(
tt_local
_entry
)
batadv_tt_local_entry_free_ref
(
tt_local
_entry
);
if
(
tt_global
_entry
)
batadv_tt_global_entry_free_ref
(
tt_global
_entry
);
if
(
tt_local
)
batadv_tt_local_entry_free_ref
(
tt_local
);
if
(
tt_global
)
batadv_tt_global_entry_free_ref
(
tt_global
);
}
static
void
batadv_tt_realloc_packet_buff
(
unsigned
char
**
packet_buff
,
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment