[next] batman-adv: fix alignment for batadv_tvlv_tt_change

Message ID 1387110415-1062-1-git-send-email-antonio@meshcoding.com (mailing list archive)
State Accepted, archived
Commit 6639da59f7dd3c08c54b0ecab3a709b37d1d1e49
Headers

Commit Message

Antonio Quartulli Dec. 15, 2013, 12:26 p.m. UTC
  Make struct batadv_tvlv_tt_change 4 bytes long to avoid
padding on any architecture.

Signed-off-by: Antonio Quartulli <antonio@meshcoding.com>
---
 packet.h            | 4 ++--
 translation-table.c | 6 ++++--
 2 files changed, 6 insertions(+), 4 deletions(-)
  

Comments

Marek Lindner Dec. 16, 2013, 2:26 p.m. UTC | #1
On Sunday 15 December 2013 13:26:55 Antonio Quartulli wrote:
> Make struct batadv_tvlv_tt_change 4 bytes long to avoid
> padding on any architecture.
> 
> Signed-off-by: Antonio Quartulli <antonio@meshcoding.com>
> ---
>  packet.h            | 4 ++--
>  translation-table.c | 6 ++++--
>  2 files changed, 6 insertions(+), 4 deletions(-)

Applied in revision 6639da5.

Thanks,
Marek
  

Patch

diff --git a/packet.h b/packet.h
index 04cf27c..2dd8f24 100644
--- a/packet.h
+++ b/packet.h
@@ -484,13 +484,13 @@  struct batadv_tvlv_tt_vlan_data {
  * struct batadv_tvlv_tt_change - translation table diff data
  * @flags: status indicators concerning the non-mesh client (see
  *  batadv_tt_client_flags)
- * @reserved: reserved field
+ * @reserved: reserved field - useful for alignment purposes only
  * @addr: mac address of non-mesh client that triggered this tt change
  * @vid: VLAN identifier
  */
 struct batadv_tvlv_tt_change {
 	uint8_t flags;
-	uint8_t reserved;
+	uint8_t reserved[3];
 	uint8_t addr[ETH_ALEN];
 	__be16 vid;
 };
diff --git a/translation-table.c b/translation-table.c
index 4add57d..ff625fe 100644
--- a/translation-table.c
+++ b/translation-table.c
@@ -333,7 +333,8 @@  static void batadv_tt_local_event(struct batadv_priv *bat_priv,
 		return;
 
 	tt_change_node->change.flags = flags;
-	tt_change_node->change.reserved = 0;
+	memset(tt_change_node->change.reserved, 0,
+	       sizeof(tt_change_node->change.reserved));
 	memcpy(tt_change_node->change.addr, common->addr, ETH_ALEN);
 	tt_change_node->change.vid = htons(common->vid);
 
@@ -2221,7 +2222,8 @@  static void batadv_tt_tvlv_generate(struct batadv_priv *bat_priv,
 			       ETH_ALEN);
 			tt_change->flags = tt_common_entry->flags;
 			tt_change->vid = htons(tt_common_entry->vid);
-			tt_change->reserved = 0;
+			memset(tt_change->reserved, 0,
+			       sizeof(tt_change->reserved));
 
 			tt_num_entries++;
 			tt_change++;