]> The Tcpdump Group git mirrors - tcpdump/commitdiff
From Carles Kishimoto <[email protected]>:
authorhannes <hannes>
Tue, 24 Jul 2007 16:07:29 +0000 (16:07 +0000)
committerhannes <hannes>
Tue, 24 Jul 2007 16:07:29 +0000 (16:07 +0000)
add initial support for the Light Weight Access Point Protocol
as per draft-ohara-capwap-lwapp-04

FILES
Makefile.in
interface.h
print-lwapp.c [new file with mode: 0644]
print-udp.c
udp.h
win32/prj/GNUmakefile
win32/prj/WinDump.dsp

diff --git a/FILES b/FILES
index 2402bbc44af3ec7043021871fbc32cf8bc183c69..f4e5e5b0160a5ae57f9e04d429904d4a8bf4d7e3 100644 (file)
--- a/FILES
+++ b/FILES
@@ -167,6 +167,7 @@ print-ldp.c
 print-llc.c
 print-lmp.c
 print-lspping.c
+print-lwapp.c
 print-lwres.c
 print-mobile.c
 print-mobility.c
index eae9c3336f9eda97b8f7343a2d78745cf7976476..5c73c0df04a6db5974b37be9621f6ff754e55690 100644 (file)
@@ -17,7 +17,7 @@
 #  WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
 #  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
 #
-# @(#) $Header: /tcpdump/master/tcpdump/Makefile.in,v 1.311 2007-07-24 02:40:59 mcr Exp $ (LBL)
+# @(#) $Header: /tcpdump/master/tcpdump/Makefile.in,v 1.312 2007-07-24 16:07:29 hannes Exp $ (LBL)
 
 #
 # Various configurable paths (remember to edit Makefile.in, not Makefile)
@@ -78,7 +78,7 @@ CSRC =        addrtoname.c af.c checksum.c cpack.c gmpls.c oui.c gmt2local.c ipproto.c
        print-igrp.c print-ip.c print-ipcomp.c print-ipfc.c \
        print-ipx.c print-isakmp.c print-isoclns.c print-juniper.c print-krb.c \
        print-l2tp.c print-lane.c print-ldp.c print-llc.c \
-        print-lmp.c print-lspping.c \
+        print-lmp.c print-lspping.c print-lwapp.c \
        print-lwres.c print-mobile.c print-mpcp.c print-mpls.c print-msdp.c \
        print-nfs.c print-ntp.c print-null.c print-olsr.c print-ospf.c \
        print-pflog.c print-pgm.c print-pim.c print-ppp.c print-pppoe.c \
index f196af5086b5352535126ef062720e8026e73429..ceb366e48cec142fe937b0df949d808e6e9d49cc 100644 (file)
@@ -18,7 +18,7 @@
  * WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
  * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
  *
- * @(#) $Header: /tcpdump/master/tcpdump/interface.h,v 1.275 2007-03-27 10:44:09 hannes Exp $ (LBL)
+ * @(#) $Header: /tcpdump/master/tcpdump/interface.h,v 1.276 2007-07-24 16:07:30 hannes Exp $ (LBL)
  */
 
 #ifndef tcpdump_interface_h
@@ -244,6 +244,8 @@ extern void rsvp_print(const u_char *, u_int);
 extern void ldp_print(const u_char *, u_int);
 extern void lmp_print(const u_char *, u_int);
 extern void lspping_print(const u_char *, u_int);
+extern void lwapp_control_print(const u_char *, u_int, int);
+extern void lwapp_data_print(const u_char *, u_int);
 extern void eigrp_print(const u_char *, u_int);
 extern void mobile_print(const u_char *, u_int);
 extern void pim_print(const u_char *, u_int);
diff --git a/print-lwapp.c b/print-lwapp.c
new file mode 100644 (file)
index 0000000..984ebaa
--- /dev/null
@@ -0,0 +1,360 @@
+/*
+ * Copyright (c) 1998-2007 The TCPDUMP project
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that: (1) source code
+ * distributions retain the above copyright notice and this paragraph
+ * in its entirety, and (2) distributions including binary code include
+ * the above copyright notice and this paragraph in its entirety in
+ * the documentation or other materials provided with the distribution.
+ * THIS SOFTWARE IS PROVIDED ``AS IS'' AND
+ * WITHOUT ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, WITHOUT
+ * LIMITATION, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ * FOR A PARTICULAR PURPOSE.
+ *
+ * Support for the Light Weight Access Point Protocol as per draft-ohara-capwap-lwapp-04
+ *
+ * Original code by Carles Kishimoto <[email protected]>
+ */
+
+#ifndef lint
+static const char rcsid[] _U_ =
+"@(#) $Header: /tcpdump/master/tcpdump/print-lwapp.c,v 1.1 2007-07-24 16:07:30 hannes Exp $";
+#endif
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include <tcpdump-stdinc.h>
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+#include "interface.h"
+#include "extract.h"
+#include "addrtoname.h"
+
+/* 
+ * LWAPP transport (common) header
+ *      0                   1                   2                   3
+ *     0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+ *    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ *    |VER| RID |C|F|L|    Frag ID    |            Length             |
+ *    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ *    |          Status/WLANs         |   Payload...  |
+ *    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ *
+ */
+
+struct lwapp_transport_header {
+    u_int8_t  version;
+    u_int8_t  frag_id;
+    u_int8_t  length[2];
+    u_int16_t status;
+};
+
+/*
+ * LWAPP control header
+ *      0                   1                   2                   3
+ *      0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+ *     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ *     |  Message Type |    Seq Num    |      Msg Element Length       |
+ *     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ *     |                           Session ID                          |
+ *     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ *     |      Msg Element [0..N]       |
+ *     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ */
+
+struct lwapp_control_header {
+    u_int8_t  msg_type;
+    u_int8_t  seq_num;
+    u_int8_t  len[2];
+    u_int8_t  session_id[4];
+};
+
+#define LWAPP_VERSION 0
+#define        LWAPP_EXTRACT_VERSION(x) (((x)&0xC0)>>6) 
+#define        LWAPP_EXTRACT_RID(x) (((x)&0x38)>>3) 
+#define LWAPP_EXTRACT_CONTROL_BIT(x) (((x)&0x04)>>2) 
+
+static const struct tok lwapp_header_bits_values[] = {
+    { 0x01, "Last Fragment Bit"},
+    { 0x02, "Fragment Bit"},
+    { 0x04, "Control Bit"},
+    { 0, NULL}
+};
+
+#define        LWAPP_MSGTYPE_DISCOVERY_REQUEST                 1
+#define        LWAPP_MSGTYPE_DISCOVERY_RESPONSE                2
+#define        LWAPP_MSGTYPE_JOIN_REQUEST                      3
+#define LWAPP_MSGTYPE_JOIN_RESPONSE                    4
+#define LWAPP_MSGTYPE_JOIN_ACK                         5
+#define LWAPP_MSGTYPE_JOIN_CONFIRM                     6
+#define LWAPP_MSGTYPE_CONFIGURE_REQUEST                        10
+#define LWAPP_MSGTYPE_CONFIGURE_RESPONSE               11
+#define LWAPP_MSGTYPE_CONF_UPDATE_REQUEST              12
+#define LWAPP_MSGTYPE_CONF_UPDATE_RESPONSE             13
+#define LWAPP_MSGTYPE_WTP_EVENT_REQUEST                        14
+#define LWAPP_MSGTYPE_WTP_EVENT_RESPONSE               15
+#define LWAPP_MSGTYPE_CHANGE_STATE_EVENT_REQUEST       16
+#define LWAPP_MSGTYPE_CHANGE_STATE_EVENT_RESPONSE      17
+#define LWAPP_MSGTYPE_ECHO_REQUEST                     22
+#define LWAPP_MSGTYPE_ECHO_RESPONSE                    23
+#define LWAPP_MSGTYPE_IMAGE_DATA_REQUEST               24
+#define LWAPP_MSGTYPE_IMAGE_DATA_RESPONSE              25
+#define LWAPP_MSGTYPE_RESET_REQUEST                    26
+#define LWAPP_MSGTYPE_RESET_RESPONSE                   27
+#define LWAPP_MSGTYPE_KEY_UPDATE_REQUEST               30
+#define LWAPP_MSGTYPE_KEY_UPDATE_RESPONSE              31
+#define LWAPP_MSGTYPE_PRIMARY_DISCOVERY_REQUEST                32
+#define LWAPP_MSGTYPE_PRIMARY_DISCOVERY_RESPONSE       33
+#define LWAPP_MSGTYPE_DATA_TRANSFER_REQUEST            34
+#define LWAPP_MSGTYPE_DATA_TRANSFER_RESPONSE           35
+#define LWAPP_MSGTYPE_CLEAR_CONFIG_INDICATION          36
+#define LWAPP_MSGTYPE_WLAN_CONFIG_REQUEST              37
+#define LWAPP_MSGTYPE_WLAN_CONFIG_RESPONSE             38
+#define LWAPP_MSGTYPE_MOBILE_CONFIG_REQUEST            39
+#define LWAPP_MSGTYPE_MOBILE_CONFIG_RESPONSE           40
+
+static const struct tok lwapp_msg_type_values[] = {
+    { LWAPP_MSGTYPE_DISCOVERY_REQUEST, "Discovery req"},
+    { LWAPP_MSGTYPE_DISCOVERY_RESPONSE, "Discovery resp"},
+    { LWAPP_MSGTYPE_JOIN_REQUEST, "Join req"},
+    { LWAPP_MSGTYPE_JOIN_RESPONSE, "Join resp"},
+    { LWAPP_MSGTYPE_JOIN_ACK, "Join ack"},
+    { LWAPP_MSGTYPE_JOIN_CONFIRM, "Join confirm"},
+    { LWAPP_MSGTYPE_CONFIGURE_REQUEST, "Configure req"},
+    { LWAPP_MSGTYPE_CONFIGURE_RESPONSE, "Configure resp"},
+    { LWAPP_MSGTYPE_CONF_UPDATE_REQUEST, "Update req"},
+    { LWAPP_MSGTYPE_CONF_UPDATE_RESPONSE, "Update resp"},
+    { LWAPP_MSGTYPE_WTP_EVENT_REQUEST, "WTP event req"},
+    { LWAPP_MSGTYPE_WTP_EVENT_RESPONSE, "WTP event resp"},
+    { LWAPP_MSGTYPE_CHANGE_STATE_EVENT_REQUEST, "Change state event req"},
+    { LWAPP_MSGTYPE_CHANGE_STATE_EVENT_RESPONSE, "Change state event resp"},
+    { LWAPP_MSGTYPE_ECHO_REQUEST, "Echo req"},
+    { LWAPP_MSGTYPE_ECHO_RESPONSE, "Echo resp"},
+    { LWAPP_MSGTYPE_IMAGE_DATA_REQUEST, "Image data req"},
+    { LWAPP_MSGTYPE_IMAGE_DATA_RESPONSE, "Image data resp"},
+    { LWAPP_MSGTYPE_RESET_REQUEST, "Channel status req"},
+    { LWAPP_MSGTYPE_RESET_RESPONSE, "Channel status resp"},
+    { LWAPP_MSGTYPE_KEY_UPDATE_REQUEST, "Key update req"},
+    { LWAPP_MSGTYPE_KEY_UPDATE_RESPONSE, "Key update resp"},
+    { LWAPP_MSGTYPE_PRIMARY_DISCOVERY_REQUEST, "Primary discovery req"},
+    { LWAPP_MSGTYPE_PRIMARY_DISCOVERY_RESPONSE, "Primary discovery resp"},
+    { LWAPP_MSGTYPE_DATA_TRANSFER_REQUEST, "Data transfer req"},
+    { LWAPP_MSGTYPE_DATA_TRANSFER_RESPONSE, "Data transfer resp"},
+    { LWAPP_MSGTYPE_CLEAR_CONFIG_INDICATION, "Clear config ind"},
+    { LWAPP_MSGTYPE_WLAN_CONFIG_REQUEST, "Wlan config req"},
+    { LWAPP_MSGTYPE_WLAN_CONFIG_RESPONSE, "Wlan config resp"},
+    { LWAPP_MSGTYPE_MOBILE_CONFIG_REQUEST, "Mobile config req"},
+    { LWAPP_MSGTYPE_MOBILE_CONFIG_RESPONSE, "Mobile config resp"},
+    { 0, NULL}
+};
+
+/* 
+ * LWAPP message elements
+ * 
+ * 0                   1                   2                   3
+ * 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ * |      Type     |             Length            |   Value ...   |
+ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ */
+struct lwapp_message_header {
+    u_int8_t type;
+    u_int8_t length[2];
+};
+
+void
+lwapp_control_print(const u_char *pptr, u_int len, int has_ap_ident) {
+
+    const struct lwapp_transport_header *lwapp_trans_header;
+    const struct lwapp_control_header *lwapp_control_header;
+    const u_char *tptr;
+    int hexdump,tlen;
+    int  msg_tlen;
+
+    tptr=pptr;
+
+    if (has_ap_ident) {
+        /* check if enough bytes for AP identity */
+        if (!TTEST2(*tptr, 6))
+            goto trunc;
+        lwapp_trans_header = (const struct lwapp_transport_header *)(pptr+6);
+    } else {
+        lwapp_trans_header = (const struct lwapp_transport_header *)pptr;
+    }
+    TCHECK(*lwapp_trans_header);
+
+    /*
+     * Sanity checking of the header.
+     */
+    if (LWAPP_EXTRACT_VERSION(lwapp_trans_header->version) != LWAPP_VERSION) {
+       printf("LWAPP version %u packet not supported",
+               LWAPP_EXTRACT_VERSION(lwapp_trans_header->version));
+       return;
+    }
+
+    /* non-verbose */
+    if (vflag < 1) {
+        printf("LWAPPv%u, %s frame, Flags [%s], length %u",
+               LWAPP_EXTRACT_VERSION(lwapp_trans_header->version),
+               LWAPP_EXTRACT_CONTROL_BIT(lwapp_trans_header->version) ? "Control" : "Data",
+               bittok2str(lwapp_header_bits_values,"none",(lwapp_trans_header->version)&0x07),
+               len);
+        return;
+    }
+
+    /* ok they seem to want to know everything - lets fully decode it */
+    tlen=EXTRACT_16BITS(lwapp_trans_header->length);
+
+    printf("LWAPPv%u, %s frame, Radio-id %u, Flags [%s], Frag-id %u, length %u",
+           LWAPP_EXTRACT_VERSION(lwapp_trans_header->version),
+           LWAPP_EXTRACT_CONTROL_BIT(lwapp_trans_header->version) ? "Control" : "Data",
+           LWAPP_EXTRACT_RID(lwapp_trans_header->version),
+           bittok2str(lwapp_header_bits_values,"none",(lwapp_trans_header->version)&0x07),
+          lwapp_trans_header->frag_id,
+          tlen);
+
+    if (has_ap_ident) {
+        printf("\n\tAP identity: %s",
+               etheraddr_string(tptr));
+        tptr+=sizeof(const struct lwapp_transport_header)+6;
+    } else {
+        tptr+=sizeof(const struct lwapp_transport_header);
+    }
+
+    while(tlen>0) {
+
+        /* did we capture enough for fully decoding the object header ? */
+        if (!TTEST2(*tptr, sizeof(struct lwapp_control_header)))
+            goto trunc;
+
+        lwapp_control_header = (const struct lwapp_control_header *)tptr;
+       msg_tlen = EXTRACT_16BITS(lwapp_control_header->len);
+
+       /* print message header */ 
+        printf("\n\t  Msg type: %s (%u), Seqnum: %u, Msg len: %d, Session: 0x%08x",
+               tok2str(lwapp_msg_type_values,"Unknown",lwapp_control_header->msg_type),
+               lwapp_control_header->msg_type,
+               lwapp_control_header->seq_num,
+               msg_tlen,
+               EXTRACT_32BITS(lwapp_control_header->session_id));
+
+        /* did we capture enough for fully decoding the message */
+        if (!TTEST2(*tptr, msg_tlen))
+            goto trunc;
+        hexdump=FALSE;
+
+       /* XXX - Decode sub messages for each message */
+        switch(lwapp_control_header->msg_type) {
+        case LWAPP_MSGTYPE_DISCOVERY_REQUEST:
+        case LWAPP_MSGTYPE_DISCOVERY_RESPONSE:
+        case LWAPP_MSGTYPE_JOIN_REQUEST:
+        case LWAPP_MSGTYPE_JOIN_RESPONSE:
+        case LWAPP_MSGTYPE_JOIN_ACK:
+        case LWAPP_MSGTYPE_JOIN_CONFIRM:
+        case LWAPP_MSGTYPE_CONFIGURE_REQUEST:
+        case LWAPP_MSGTYPE_CONFIGURE_RESPONSE:
+        case LWAPP_MSGTYPE_CONF_UPDATE_REQUEST:
+        case LWAPP_MSGTYPE_CONF_UPDATE_RESPONSE:
+        case LWAPP_MSGTYPE_WTP_EVENT_REQUEST:
+        case LWAPP_MSGTYPE_WTP_EVENT_RESPONSE:
+        case LWAPP_MSGTYPE_CHANGE_STATE_EVENT_REQUEST:
+        case LWAPP_MSGTYPE_CHANGE_STATE_EVENT_RESPONSE:
+        case LWAPP_MSGTYPE_ECHO_REQUEST:
+        case LWAPP_MSGTYPE_ECHO_RESPONSE:
+        case LWAPP_MSGTYPE_IMAGE_DATA_REQUEST:
+        case LWAPP_MSGTYPE_IMAGE_DATA_RESPONSE:
+        case LWAPP_MSGTYPE_RESET_REQUEST:
+        case LWAPP_MSGTYPE_RESET_RESPONSE:
+        case LWAPP_MSGTYPE_KEY_UPDATE_REQUEST:
+        case LWAPP_MSGTYPE_KEY_UPDATE_RESPONSE:
+        case LWAPP_MSGTYPE_PRIMARY_DISCOVERY_REQUEST:
+        case LWAPP_MSGTYPE_PRIMARY_DISCOVERY_RESPONSE:
+        case LWAPP_MSGTYPE_DATA_TRANSFER_REQUEST:
+        case LWAPP_MSGTYPE_DATA_TRANSFER_RESPONSE:
+        case LWAPP_MSGTYPE_CLEAR_CONFIG_INDICATION:
+        case LWAPP_MSGTYPE_WLAN_CONFIG_REQUEST:
+        case LWAPP_MSGTYPE_WLAN_CONFIG_RESPONSE:
+        case LWAPP_MSGTYPE_MOBILE_CONFIG_REQUEST:
+        case LWAPP_MSGTYPE_MOBILE_CONFIG_RESPONSE:
+        default:
+            break;
+        }
+
+        tptr += sizeof(struct lwapp_control_header) + msg_tlen;
+        tlen -= sizeof(struct lwapp_control_header) + msg_tlen;
+    }
+    return;
+
+ trunc:
+    printf("\n\t\t packet exceeded snapshot");
+}
+
+void
+lwapp_data_print(const u_char *pptr, u_int len) {
+
+    const struct lwapp_transport_header *lwapp_trans_header;
+    const u_char *tptr;
+    int tlen;
+
+    tptr=pptr;
+
+    /* check if enough bytes for AP identity */
+    if (!TTEST2(*tptr, 6))
+        goto trunc;
+    lwapp_trans_header = (const struct lwapp_transport_header *)pptr;
+    TCHECK(*lwapp_trans_header);
+
+    /*
+     * Sanity checking of the header.
+     */
+    if (LWAPP_EXTRACT_VERSION(lwapp_trans_header->version) != LWAPP_VERSION) {
+        printf("LWAPP version %u packet not supported",
+               LWAPP_EXTRACT_VERSION(lwapp_trans_header->version));
+        return;
+    }
+
+    /* non-verbose */
+    if (vflag < 1) {
+        printf("LWAPPv%u, %s frame, Flags [%s], length %u",
+               LWAPP_EXTRACT_VERSION(lwapp_trans_header->version),
+               LWAPP_EXTRACT_CONTROL_BIT(lwapp_trans_header->version) ? "Control" : "Data",
+               bittok2str(lwapp_header_bits_values,"none",(lwapp_trans_header->version)&0x07),
+               len);
+        return;
+    }
+
+    /* ok they seem to want to know everything - lets fully decode it */
+    tlen=EXTRACT_16BITS(lwapp_trans_header->length);
+
+    printf("LWAPPv%u, %s frame, Radio-id  %u, Flags [%s], Frag-id  %u, length %u",
+           LWAPP_EXTRACT_VERSION(lwapp_trans_header->version),
+           LWAPP_EXTRACT_CONTROL_BIT(lwapp_trans_header->version) ? "Control" : "Data",
+           LWAPP_EXTRACT_RID(lwapp_trans_header->version),
+           bittok2str(lwapp_header_bits_values,"none",(lwapp_trans_header->version)&0x07),
+           lwapp_trans_header->frag_id,
+           tlen);
+
+    tptr+=sizeof(const struct lwapp_transport_header);
+    tlen-=sizeof(const struct lwapp_transport_header);
+
+    /* FIX - An IEEE 802.11 frame follows - hexdump for now */
+    print_unknown_data(tptr, "\n\t", tlen);
+
+    return;
+
+ trunc:
+    printf("\n\t\t packet exceeded snapshot");
+}
+
+/*
+ * Local Variables:
+ * c-style: whitesmith
+ * c-basic-offset: 8
+ * End:
+ */
index 2f7ffc771c8e0a8cb1c11e64dd4044577b574f5f..a205cf5d1c1ab2e62b17c056836e38c01d1654fc 100644 (file)
@@ -21,7 +21,7 @@
 
 #ifndef lint
 static const char rcsid[] _U_ =
-    "@(#) $Header: /tcpdump/master/tcpdump/print-udp.c,v 1.140 2007-03-27 10:44:09 hannes Exp $ (LBL)";
+    "@(#) $Header: /tcpdump/master/tcpdump/print-udp.c,v 1.141 2007-07-24 16:07:30 hannes Exp $ (LBL)";
 #endif
 
 #ifdef HAVE_CONFIG_H
@@ -685,6 +685,12 @@ udp_print(register const u_char *bp, u_int length,
                        lmp_print((const u_char *)(up + 1), length);
                else if (ISPORT(VQP_PORT))
                        vqp_print((const u_char *)(up + 1), length);
+               else if (dport == LWAPP_CONTROL_PORT)
+                       lwapp_control_print((const u_char *)(up + 1), length, 1);
+                else if (sport == LWAPP_CONTROL_PORT)
+                        lwapp_control_print((const u_char *)(up + 1), length, 0);
+                else if (ISPORT(LWAPP_DATA_PORT))
+                        lwapp_data_print((const u_char *)(up + 1), length);
                 else if (ISPORT(SIP_PORT))
                        sip_print((const u_char *)(up + 1), length);
                 else if (ISPORT(SYSLOG_PORT))
diff --git a/udp.h b/udp.h
index 86f92f5bc948a9303f5a8567b2ebc347a0ce7f25..c39c3a8543c08a0f5b6267f4f53707578641ec5e 100644 (file)
--- a/udp.h
+++ b/udp.h
@@ -1,4 +1,4 @@
-/* @(#) $Header: /tcpdump/master/tcpdump/udp.h,v 1.11 2007-03-27 10:44:09 hannes Exp $ (LBL) */
+/* @(#) $Header: /tcpdump/master/tcpdump/udp.h,v 1.12 2007-07-24 16:07:30 hannes Exp $ (LBL) */
 /*
  * Copyright (c) 1982, 1986, 1993
  *     The Regents of the University of California.  All rights reserved.
@@ -82,6 +82,8 @@ struct udphdr {
 #define MPLS_LSP_PING_PORT      3503 /* draft-ietf-mpls-lsp-ping-02.txt */
 #define BFD_CONTROL_PORT        3784 /* draft-katz-ward-bfd-v4v6-1hop-00.txt */
 #define BFD_ECHO_PORT           3785 /* draft-katz-ward-bfd-v4v6-1hop-00.txt */
+#define LWAPP_DATA_PORT         12222 /* draft-ohara-capwap-lwapp-04.txt */
+#define LWAPP_CONTROL_PORT      12223 /* draft-ohara-capwap-lwapp-04.txt */
 
 #ifdef INET6
 #define RIPNG_PORT 521         /*XXX*/
index 8b28336a6aa1c4c8b1c36c1f9e04b231e16dc6eb..9d7060c2a4fac9b8932eb5a8d729b604f6c1b28d 100644 (file)
@@ -92,6 +92,7 @@ OBJS = \
        ../../print-lane.o \
        ../../print-ldp.o \
        ../../print-llc.o \
+       ../../print-lwapp.o \
        ../../print-lwres.o \
        ../../print-mobile.o \
        ../../print-mobility.o \
index c4e144f4532e3e3c98c1a6303479fc822fff367b..975d24e9b88c539e16f180eaabee5d1a06356f2f 100644 (file)
@@ -381,6 +381,10 @@ SOURCE="..\..\print-lspping.c"
 # End Source File
 # Begin Source File
 
+SOURCE="..\..\print-lwapp.c"
+# End Source File
+# Begin Source File
+
 SOURCE="..\..\print-lwres.c"
 # End Source File
 # Begin Source File