From patchwork Sun Jun 17 09:19:58 2012 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Marek Lindner X-Patchwork-Id: 2037 Return-Path: Received: from nm15.bullet.mail.ukl.yahoo.com (nm15.bullet.mail.ukl.yahoo.com [217.146.183.189]) by open-mesh.org (Postfix) with SMTP id EA39060078E for ; Sun, 17 Jun 2012 11:20:07 +0200 (CEST) Authentication-Results: open-mesh.org; dkim=pass (1024-bit key; insecure key) header.i=@yahoo.de; dkim-adsp=pass Received: from [217.146.183.210] by nm15.bullet.mail.ukl.yahoo.com with NNFMP; 17 Jun 2012 09:20:07 -0000 Received: from [77.238.184.70] by tm3.bullet.mail.ukl.yahoo.com with NNFMP; 17 Jun 2012 09:20:07 -0000 Received: from [127.0.0.1] by smtp139.mail.ukl.yahoo.com with NNFMP; 17 Jun 2012 09:20:07 -0000 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=yahoo.de; s=s1024; t=1339924807; bh=pDecqj0kDTMoDIuXzfG2A7Yoj7RpJWUv1OIT3Gt8DTg=; h=X-Yahoo-Newman-Id:X-Yahoo-Newman-Property:X-YMail-OSG:X-Yahoo-SMTP:Received:From:To:Cc:Subject:Date:Message-Id:X-Mailer; b=4pBUQ4avkRp1RJkDM7SGqfyTxU8E9PvvGJsRYBBx+PLCcyFLyW3npRTL/MPrjWFoq5Jyuru/7s6IvyGMxBJQtRR1mJl4xQjRNgKhdd+EGiUW3FUpKIRNYk3KCgBGruPQJuQX6OoB6Emk4ITubn1whYgoIEJ5XavjC+KShVid2WM= X-Yahoo-Newman-Id: 700876.26602.bm@smtp139.mail.ukl.yahoo.com X-Yahoo-Newman-Property: ymail-3 X-YMail-OSG: qaOOjbQVM1ntGR3NzIzqpkoVDvyOSjF1TF9LDZb7NEmCltI 5qm8NqI8.t5MNbmd7Cnmlx72Ucz2n1S9A90oezRc_D1bsjm1iB400VHl7phv nUzGOOGgRoXH24EqENXKEZqeoE5E9lYwWWW5NF1RQwtx8tF3NUFuq41BX9ai 2pHpXgxmjkpK8Y4e.kvZFKUlyk89QLTpYZ5evWtKwX8wbQJpdkJgZnJDlLr9 yxNNln6FpkBmL3K1.XMPp.XXNmpNfz7.BoNYuBcoV34XuN9z504E3iml.ax_ kA8lAlVv1Lw3rU6aDeG4Tb7hyE5963dLwBBARxc4bplaFdqfsyi6pQJPRGF0 VHXJDrVY_MvhvZv29nUA38xsF6cns3FATJz4ym62OgeWwjXefEaoktY9W5YS Nng-- X-Yahoo-SMTP: tW.h3tiswBBMXO2coYcbPigGD5Lt6zY_.Zc- Received: from localhost (lindner_marek@210.177.7.38 with plain) by smtp139.mail.ukl.yahoo.com with SMTP; 17 Jun 2012 09:20:06 +0000 GMT From: Marek Lindner To: b.a.t.m.a.n@lists.open-mesh.org Date: Sun, 17 Jun 2012 17:19:58 +0800 Message-Id: <1339924798-14845-1-git-send-email-lindner_marek@yahoo.de> X-Mailer: git-send-email 1.7.9.1 Cc: Marek Lindner Subject: [B.A.T.M.A.N.] [PATCH] batctl: tcpdump support for bla2 claim packets X-BeenThere: b.a.t.m.a.n@lists.open-mesh.org X-Mailman-Version: 2.1.13 Precedence: list Reply-To: The list for a Better Approach To Mobile Ad-hoc Networking List-Id: The list for a Better Approach To Mobile Ad-hoc Networking List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 17 Jun 2012 09:20:08 -0000 Signed-off-by: Marek Lindner --- tcpdump.c | 75 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++- 1 files changed, 73 insertions(+), 2 deletions(-) diff --git a/tcpdump.c b/tcpdump.c index 302085b..cbae9bb 100644 --- a/tcpdump.c +++ b/tcpdump.c @@ -90,9 +90,75 @@ static int print_time(void) return 1; } -static void dump_arp(unsigned char *packet_buff, ssize_t buff_len, int time_printed) +static int dump_bla2_claim(struct ether_header *eth_hdr, + struct ether_arp *arphdr, int read_opt) +{ + uint8_t bla_claim_magic[3] = {0xff, 0x43, 0x05}; + struct batadv_bla_claim_dst *bla_dst; + int arp_is_bla2_claim = 0; + uint8_t *hw_src, *hw_dst; + + if (arphdr->ea_hdr.ar_hrd != htons(ARPHRD_ETHER)) + goto out; + + if (arphdr->ea_hdr.ar_pro != htons(ETH_P_IP)) + goto out; + + if (arphdr->ea_hdr.ar_hln != ETH_ALEN) + goto out; + + if (arphdr->ea_hdr.ar_pln != 4) + goto out; + + hw_src = arphdr->arp_sha; + hw_dst = arphdr->arp_tha; + bla_dst = (struct batadv_bla_claim_dst *)hw_dst; + + if (memcmp(bla_dst->magic, bla_claim_magic, sizeof(bla_claim_magic)) != 0) + goto out; + + switch (bla_dst->type) { + case BATADV_CLAIM_TYPE_ADD: + printf("BLA CLAIM, backbone %s, ", + get_name_by_macaddr((struct ether_addr *)hw_src, read_opt)); + printf("client %s, bla group %04x\n", + get_name_by_macaddr((struct ether_addr *)eth_hdr->ether_shost, read_opt), + ntohs(bla_dst->group)); + break; + case BATADV_CLAIM_TYPE_DEL: + printf("BLA UNCLAIM, backbone %s, ", + get_name_by_macaddr((struct ether_addr *)eth_hdr->ether_shost, read_opt)); + printf("client %s, bla group %04x\n", + get_name_by_macaddr((struct ether_addr *)hw_src, read_opt), + ntohs(bla_dst->group)); + break; + case BATADV_CLAIM_TYPE_ANNOUNCE: + printf("BLA ANNOUNCE, backbone %s, bla group %04x, crc %04x\n", + get_name_by_macaddr((struct ether_addr *)eth_hdr->ether_shost, read_opt), + ntohs(bla_dst->group), ntohs(*((uint16_t *)(&hw_src[4])))); + break; + case BATADV_CLAIM_TYPE_REQUEST: + printf("BLA REQUEST, src backbone %s, ", + get_name_by_macaddr((struct ether_addr *)hw_src, read_opt)); + printf("dst backbone %s\n", + get_name_by_macaddr((struct ether_addr *)eth_hdr->ether_dhost, read_opt)); + break; + default: + printf("BLA UNKNOWN, type %hhu\n", bla_dst->type); + break; + } + + arp_is_bla2_claim = 1; + +out: + return arp_is_bla2_claim; +} + +static void dump_arp(unsigned char *packet_buff, ssize_t buff_len, + struct ether_header *eth_hdr, int read_opt, int time_printed) { struct ether_arp *arphdr; + int arp_is_bla2_claim; LEN_CHECK((size_t)buff_len, sizeof(struct ether_arp), "ARP"); @@ -108,6 +174,10 @@ static void dump_arp(unsigned char *packet_buff, ssize_t buff_len, int time_prin ether_ntoa_long((struct ether_addr *)&arphdr->arp_sha), buff_len); break; case ARPOP_REPLY: + arp_is_bla2_claim = dump_bla2_claim(eth_hdr, arphdr, read_opt); + if (arp_is_bla2_claim) + break; + printf("ARP, Reply %s is-at %s, length %zd\n", inet_ntoa(*(struct in_addr *)&arphdr->arp_spa), ether_ntoa_long((struct ether_addr *)&arphdr->arp_sha), buff_len); break; @@ -479,7 +549,8 @@ static void parse_eth_hdr(unsigned char *packet_buff, ssize_t buff_len, int read switch (ntohs(eth_hdr->ether_type)) { case ETH_P_ARP: if ((dump_level & DUMP_TYPE_NONBAT) || (time_printed)) - dump_arp(packet_buff + ETH_HLEN, buff_len - ETH_HLEN, time_printed); + dump_arp(packet_buff + ETH_HLEN, buff_len - ETH_HLEN, + eth_hdr, read_opt, time_printed); break; case ETH_P_IP: if ((dump_level & DUMP_TYPE_NONBAT) || (time_printed))