diff options
author | Anders Broman <anders.broman@ericsson.com> | 2012-03-06 09:02:06 +0000 |
---|---|---|
committer | Anders Broman <anders.broman@ericsson.com> | 2012-03-06 09:02:06 +0000 |
commit | 7fba54762bbd8b18aab65253071a0f375c626011 (patch) | |
tree | d5e66878eeb782fa468ec97e8040e1f23f5a4384 | |
parent | 3b06ee6ca07223fe7594bfec7031a26d6219be0e (diff) |
From Mike Wakerly: Add wiretap suport for LINKTYPE_NFC_LLCP
svn path=/trunk/; revision=41368
-rw-r--r-- | wiretap/pcap-common.c | 40 | ||||
-rw-r--r-- | wiretap/wtap.c | 5 | ||||
-rw-r--r-- | wiretap/wtap.h | 8 |
3 files changed, 52 insertions, 1 deletions
diff --git a/wiretap/pcap-common.c b/wiretap/pcap-common.c index da08af1ae3..c5780cd47f 100644 --- a/wiretap/pcap-common.c +++ b/wiretap/pcap-common.c @@ -385,6 +385,8 @@ static const struct { { 242, WTAP_ENCAP_IP_OVER_IB }, /* ISO/IEC 13818-1 MPEG2-TS packets */ { 243, WTAP_ENCAP_MPEG_2_TS }, + /* NFC LLCP */ + { 245, WTAP_ENCAP_NFC_LLCP }, /* * To repeat: @@ -717,6 +719,13 @@ wtap_wtap_encap_to_pcap_encap(int encap) #define LAPD_SLL_LEN 16 /* length of the header */ /* + * The NFC LLCP per-packet header. + */ +#define LLCP_ADAPTER_OFFSET 0 +#define LLCP_FLAGS_OFFSET 1 +#define LLCP_HEADER_LEN 2 + +/* * I2C link-layer on-disk format */ struct i2c_file_hdr { @@ -1217,6 +1226,26 @@ pcap_read_bt_pseudoheader(FILE_T fh, } static gboolean +pcap_read_llcp_pseudoheader(FILE_T fh, + union wtap_pseudo_header *pseudo_header, int *err, gchar **err_info) +{ + int bytes_read; + guint8 phdr[LLCP_HEADER_LEN]; + + errno = WTAP_ERR_CANT_READ; + bytes_read = file_read(phdr, LLCP_HEADER_LEN, fh); + if (bytes_read != LLCP_HEADER_LEN) { + *err = file_error(fh, err_info); + if (*err == 0) + *err = WTAP_ERR_SHORT_READ; + return FALSE; + } + pseudo_header->llcp.adapter = phdr[LLCP_ADAPTER_OFFSET]; + pseudo_header->llcp.flags = phdr[LLCP_FLAGS_OFFSET]; + return TRUE; +} + +static gboolean pcap_read_ppp_pseudoheader(FILE_T fh, union wtap_pseudo_header *pseudo_header, int *err, gchar **err_info) { @@ -1556,6 +1585,17 @@ pcap_process_pseudo_header(FILE_T fh, int file_type, int wtap_encap, phdr_len = (int)sizeof (struct libpcap_bt_phdr); break; + case WTAP_ENCAP_NFC_LLCP: + if (check_packet_size && packet_size < LLCP_HEADER_LEN) { + *err = WTAP_ERR_BAD_FILE; + *err_info = g_strdup_printf("pcap: libpcap llcp file too short"); + return -1; + } + if (!pcap_read_llcp_pseudoheader(fh, pseudo_header, err, err_info)) + return -1; /* Read error */ + phdr_len = LLCP_HEADER_LEN; + break; + case WTAP_ENCAP_PPP_WITH_PHDR: if (check_packet_size && packet_size < sizeof (struct libpcap_ppp_phdr)) { diff --git a/wiretap/wtap.c b/wiretap/wtap.c index 3def7c5c47..f1f8212ccd 100644 --- a/wiretap/wtap.c +++ b/wiretap/wtap.c @@ -558,7 +558,10 @@ static struct encap_type_info encap_table_base[] = { { "ISO/IEC 13818-1 MPEG2-TS", "mp2ts" }, /* WTAP_ENCAP_PPP_ETHER */ - { "PPP-over-Ethernet session", "pppoes" } + { "PPP-over-Ethernet session", "pppoes" }, + + /* WTAP_ENCAP_NFC_LLCP */ + { "LLCP", "llcp" } }; gint wtap_num_encap_types = sizeof(encap_table_base) / sizeof(struct encap_type_info); diff --git a/wiretap/wtap.h b/wiretap/wtap.h index 8a563e7426..6ac2322210 100644 --- a/wiretap/wtap.h +++ b/wiretap/wtap.h @@ -229,6 +229,7 @@ extern "C" { #define WTAP_ENCAP_IP_OVER_IB 137 #define WTAP_ENCAP_MPEG_2_TS 138 #define WTAP_ENCAP_PPP_ETHER 139 +#define WTAP_ENCAP_NFC_LLCP 140 #define WTAP_NUM_ENCAP_TYPES wtap_get_num_encap_types() @@ -685,6 +686,12 @@ struct erf_mc_phdr { } subhdr; }; +#define LLCP_PHDR_FLAG_SENT 0 +struct llcp_phdr { + guint8 adapter; + guint8 flags; +}; + #define SITA_FRAME_DIR_TXED (0x00) /* values of sita_phdr.flags */ #define SITA_FRAME_DIR_RXED (0x01) #define SITA_FRAME_DIR (0x01) /* mask */ @@ -815,6 +822,7 @@ union wtap_pseudo_header { struct i2c_phdr i2c; struct gsm_um_phdr gsm_um; struct nstr_phdr nstr; + struct llcp_phdr llcp; }; struct wtap_nstime { |