This patch is not checkpatch.pl --strict clean
On Sun, Oct 30, 2011 at 09:56:00AM +0100, Antonio Quartulli wrote:
ARP messages are now parsed to make it possible to trigger special actions depending on their types (snooping).
Signed-off-by: Antonio Quartulli ordex@autistici.org
arp.c | 43 +++++++++++++++++++++++++++++++++++++++++++ arp.h | 7 +++++++ 2 files changed, 50 insertions(+), 0 deletions(-)
diff --git a/arp.c b/arp.c index 39043b8..ea7cc1e 100644 --- a/arp.c +++ b/arp.c @@ -183,3 +183,46 @@ out: kfree(cand); return ret; }
+/* Returns arphdr->ar_op if the skb contains a valid ARP packet, otherwise
- returns 0 */
+uint16_t arp_get_type(struct bat_priv *bat_priv, struct sk_buff *skb) +{
- struct arphdr *arphdr;
- struct ethhdr *ethhdr;
- uint16_t type = 0;
- if (unlikely(!pskb_may_pull(skb, ETH_HLEN)))
goto out;
- ethhdr = (struct ethhdr *)skb_mac_header(skb);
- if (ethhdr->h_proto != htons(ETH_P_ARP))
goto out;
- if (unlikely(!pskb_may_pull(skb, ETH_HLEN + arp_hdr_len(skb->dev) + 8 + 12)))
goto out;
use ETH_ALEN * 2 + 4 * 2 instead to show where theses numbers come from.
- arphdr = (struct arphdr *)(skb->data + sizeof(struct ethhdr));
- /* Check whether the ARP packet carries a valid
* IP information */
- if (arphdr->ar_hrd != htons(ARPHRD_ETHER))
goto out;
- if (arphdr->ar_pro != htons(ETH_P_IP))
goto out;
- if (arphdr->ar_hln != ETH_ALEN)
goto out;
- if (arphdr->ar_pln != 4)
goto out;
- type = ntohs(arphdr->ar_op);
- bat_dbg(DBG_ARP, bat_priv, "ARP message of type %d recognised "
"[%pM-%pI4 %pM-%pI4]\n", type, ARP_HW_SRC(skb),
&ARP_IP_SRC(skb), ARP_HW_DST(skb), &ARP_IP_DST(skb));
Would you mind printing the type as string? something like REQUEST or REPLY instead of 1 and 2 ...
+out:
- return type;
+}