Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 219754
b: refs/heads/master
c: b706007
h: refs/heads/master
v: v3
  • Loading branch information
Sven Eckelmann authored and Greg Kroah-Hartman committed Sep 5, 2010
1 parent b9cd499 commit 9710524
Show file tree
Hide file tree
Showing 4 changed files with 25 additions and 24 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: 43bfee7693f458e1ef120d2b310ef0288ab747e8
refs/heads/master: b706007b8903bb3a6ada97665653ba522ae49bb2
22 changes: 12 additions & 10 deletions trunk/drivers/staging/batman-adv/aggregation.c
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,7 @@ static bool can_aggregate_with(struct batman_packet *new_batman_packet,
struct forw_packet *forw_packet)
{
struct batman_packet *batman_packet =
(struct batman_packet *)forw_packet->packet_buff;
(struct batman_packet *)forw_packet->skb->data;
int aggregated_bytes = forw_packet->packet_len + packet_len;

/**
Expand Down Expand Up @@ -106,6 +106,7 @@ static void new_aggregated_packet(unsigned char *packet_buff,
{
struct forw_packet *forw_packet_aggr;
unsigned long flags;
unsigned char *skb_buff;
/* FIXME: each batman_if will be attached to a softif */
struct bat_priv *bat_priv = netdev_priv(soft_device);

Expand All @@ -125,23 +126,22 @@ static void new_aggregated_packet(unsigned char *packet_buff,
return;
}

forw_packet_aggr->packet_buff = kmalloc(MAX_AGGREGATION_BYTES,
GFP_ATOMIC);
if (!forw_packet_aggr->packet_buff) {
forw_packet_aggr->skb = dev_alloc_skb(MAX_AGGREGATION_BYTES +
sizeof(struct ethhdr));
if (!forw_packet_aggr->skb) {
if (!own_packet)
atomic_inc(&bat_priv->batman_queue_left);
kfree(forw_packet_aggr);
return;
}
skb_reserve(forw_packet_aggr->skb, sizeof(struct ethhdr));

INIT_HLIST_NODE(&forw_packet_aggr->list);

skb_buff = skb_put(forw_packet_aggr->skb, packet_len);
forw_packet_aggr->packet_len = packet_len;
memcpy(forw_packet_aggr->packet_buff,
packet_buff,
forw_packet_aggr->packet_len);
memcpy(skb_buff, packet_buff, packet_len);

forw_packet_aggr->skb = NULL;
forw_packet_aggr->own = own_packet;
forw_packet_aggr->if_incoming = if_incoming;
forw_packet_aggr->num_packets = 0;
Expand Down Expand Up @@ -171,8 +171,10 @@ static void aggregate(struct forw_packet *forw_packet_aggr,
int packet_len,
bool direct_link)
{
memcpy((forw_packet_aggr->packet_buff + forw_packet_aggr->packet_len),
packet_buff, packet_len);
unsigned char *skb_buff;

skb_buff = skb_put(forw_packet_aggr->skb, packet_len);
memcpy(skb_buff, packet_buff, packet_len);
forw_packet_aggr->packet_len += packet_len;
forw_packet_aggr->num_packets++;

Expand Down
24 changes: 12 additions & 12 deletions trunk/drivers/staging/batman-adv/send.c
Original file line number Diff line number Diff line change
Expand Up @@ -126,14 +126,14 @@ static void send_packet_to_if(struct forw_packet *forw_packet,
uint8_t packet_num;
int16_t buff_pos;
struct batman_packet *batman_packet;
struct sk_buff *skb;

if (batman_if->if_status != IF_ACTIVE)
return;

packet_num = 0;
buff_pos = 0;
batman_packet = (struct batman_packet *)
(forw_packet->packet_buff);
batman_packet = (struct batman_packet *)forw_packet->skb->data;

/* adjust all flags and log packets */
while (aggregated_packet(buff_pos,
Expand Down Expand Up @@ -165,12 +165,13 @@ static void send_packet_to_if(struct forw_packet *forw_packet,
(batman_packet->num_hna * ETH_ALEN);
packet_num++;
batman_packet = (struct batman_packet *)
(forw_packet->packet_buff + buff_pos);
(forw_packet->skb->data + buff_pos);
}

send_raw_packet(forw_packet->packet_buff,
forw_packet->packet_len,
batman_if, broadcast_addr);
/* create clone because function is called more than once */
skb = skb_clone(forw_packet->skb, GFP_ATOMIC);
if (skb)
send_skb_packet(skb, batman_if, broadcast_addr);
}

/* send a batman packet */
Expand All @@ -180,7 +181,7 @@ static void send_packet(struct forw_packet *forw_packet)
struct bat_priv *bat_priv = netdev_priv(soft_device);
struct batman_if *batman_if;
struct batman_packet *batman_packet =
(struct batman_packet *)(forw_packet->packet_buff);
(struct batman_packet *)(forw_packet->skb->data);
unsigned char directlink = (batman_packet->flags & DIRECTLINK ? 1 : 0);

if (!forw_packet->if_incoming) {
Expand All @@ -206,10 +207,11 @@ static void send_packet(struct forw_packet *forw_packet)
batman_packet->ttl, forw_packet->if_incoming->dev,
forw_packet->if_incoming->addr_str);

send_raw_packet(forw_packet->packet_buff,
forw_packet->packet_len,
forw_packet->if_incoming,
/* skb is only used once and than forw_packet is free'd */
send_skb_packet(forw_packet->skb, forw_packet->if_incoming,
broadcast_addr);
forw_packet->skb = NULL;

return;
}

Expand Down Expand Up @@ -366,7 +368,6 @@ static void forw_packet_free(struct forw_packet *forw_packet)
{
if (forw_packet->skb)
kfree_skb(forw_packet->skb);
kfree(forw_packet->packet_buff);
kfree(forw_packet);
}

Expand Down Expand Up @@ -425,7 +426,6 @@ int add_bcast_packet_to_list(struct sk_buff *skb)
skb_reset_mac_header(skb);

forw_packet->skb = skb;
forw_packet->packet_buff = NULL;

/* how often did we send the bcast packet ? */
forw_packet->num_packets = 0;
Expand Down
1 change: 0 additions & 1 deletion trunk/drivers/staging/batman-adv/types.h
Original file line number Diff line number Diff line change
Expand Up @@ -161,7 +161,6 @@ struct forw_packet {
unsigned long send_time;
uint8_t own;
struct sk_buff *skb;
unsigned char *packet_buff;
uint16_t packet_len;
uint32_t direct_link_flags;
uint8_t num_packets;
Expand Down

0 comments on commit 9710524

Please sign in to comment.