diff options
author | guy <guy@f5534014-38df-0310-8fa8-9805f1628bb7> | 2011-11-18 07:13:33 +0000 |
---|---|---|
committer | guy <guy@f5534014-38df-0310-8fa8-9805f1628bb7> | 2011-11-18 07:13:33 +0000 |
commit | 590dc9a3d3dd1ee193da226b947e90dbe9cb50d0 (patch) | |
tree | 2ebce581c408375f44151a4d48ee81230ea19c18 /wiretap | |
parent | 1046ac43811c790431ea9e7c7f76fe01bff37c4a (diff) |
Make sure pcap-ng supports a particular encapsulation type before
trying to write out an interface description block for an interface with
that type.
git-svn-id: http://anonsvn.wireshark.org/wireshark/trunk@39930 f5534014-38df-0310-8fa8-9805f1628bb7
Diffstat (limited to 'wiretap')
-rw-r--r-- | wiretap/pcapng.c | 18 |
1 files changed, 17 insertions, 1 deletions
diff --git a/wiretap/pcapng.c b/wiretap/pcapng.c index c1b4efe0d2..bf233a15f8 100644 --- a/wiretap/pcapng.c +++ b/wiretap/pcapng.c @@ -1948,6 +1948,7 @@ static gboolean pcapng_dump(wtap_dumper *wdh, guint32 interface_id; guint64 ts; pcapng_dump_t *pcapng = (pcapng_dump_t *)wdh->priv; + int pcap_encap; pcapng_debug2("pcapng_dump: encap = %d (%s)", phdr->pkt_encap, @@ -1958,13 +1959,28 @@ static gboolean pcapng_dump(wtap_dumper *wdh, interface_id = pcapng_lookup_interface_id_by_encap(phdr->pkt_encap, wdh); if (interface_id == G_MAXUINT32) { + /* + * We haven't yet written out an interface description + * block for an interface with this encapsulation. + * + * Is this encapsulation even supported in pcap-ng? + */ + pcap_encap = wtap_wtap_encap_to_pcap_encap(phdr->pkt_encap); + if (pcap_encap == -1) { + /* + * No. Fail. + */ + *err = WTAP_ERR_UNSUPPORTED_ENCAP; + return FALSE; + } + /* write the interface description block */ wblock.frame_buffer = NULL; wblock.pseudo_header = NULL; wblock.packet_header = NULL; wblock.file_encap = NULL; wblock.type = BLOCK_TYPE_IDB; - wblock.data.if_descr.link_type = wtap_wtap_encap_to_pcap_encap(phdr->pkt_encap); + wblock.data.if_descr.link_type = pcap_encap; wblock.data.if_descr.snap_len = (wdh->snaplen != 0) ? wdh->snaplen : WTAP_MAX_PACKET_SIZE; /* XXX */ |