aboutsummaryrefslogtreecommitdiffstats
path: root/packet-ieee80211.c
AgeCommit message (Collapse)AuthorFilesLines
2002-03-09From Jouni Malinen: fix bugs in 802.11 authentication frame dissection.Guy Harris1-3/+3
svn path=/trunk/; revision=4902
2002-02-22Properly handle the "no data" data frames.Guy Harris1-2/+20
svn path=/trunk/; revision=4774
2002-02-21The number of bytes of tagged parameters should be computed by seeingGuy Harris1-9/+9
how many bytes remain in the packet starting at the initial offset of the tagged parameters, not by seeing how many bytes remain in the packet starting 4 bytes later. (If you're trying to avoid counting a CRC that appears at the end of the packet data, then you need to be sure there *is* a CRC first; this may require using a different DLT_ type, in libpcap, for those captures.) svn path=/trunk/; revision=4769
2002-01-28Some capture formats for 802.11 have fixed-length link-layer headersGuy Harris1-6/+52
(padded to the maximum length); add code to handle that. svn path=/trunk/; revision=4614
2002-01-24Replace a bunch of "tvb_length()" and "tvb_length_remaining()" calls inGuy Harris1-2/+2
arguments to "proto_tree_add_text()", and to "proto_tree_add_XXX()" calls that add FT_NONE or FT_PROTO items to the protocol tree, with -1. Replace some calls to "tvb_length()" or "tvb_length_remaining()" with calls to "tvb_reported_length()" and "tvb_reported_length_remaining()", as those give the actual length of the data in the packet, not just the data that happened to be captured. svn path=/trunk/; revision=4605
2002-01-21Include files from the "epan" directory and subdirectories thereof withGuy Harris1-5/+5
"epan/..." pathnames, so as to avoid collisions with header files in any of the directories in which we look (e.g., "proto.h", as some other package has its own "proto.h" file which it installs in the top-level include directory). Don't add "-I" flags to search "epan", as that's no longer necessary (and we want includes of "epan" headers to fail if the "epan/" is left out, so that we don't re-introduce includes lacking "epan/"). svn path=/trunk/; revision=4586
2001-12-10Move the pointer to the "column_info" structure in the "frame_data"Guy Harris1-20/+17
structure to the "packet_info" structure; only stuff that's permanently stored with each frame should be in the "frame_data" structure, and the "column_info" structure is not guaranteed to hold the column values for that frame at all times - it was only in the "frame_data" structure so that it could be passed to dissectors, and, as all dissectors are now passed a pointer to a "packet_info" structure, it could just as well be put in the "packet_info" structure. That saves memory, by shrinking the "frame_data" structure (there's one of those per frame), and also lets us clean up the code a bit. svn path=/trunk/; revision=4370
2001-12-03Make "dissector_add()", "dissector_delete()", and "dissector_change()"Guy Harris1-3/+5
take a dissector handle as an argument, rather than a pointer to a dissector function and a protocol ID. Associate dissector handles with dissector table entries. svn path=/trunk/; revision=4308
2001-11-28Support for 802.11+Prism II monitor-mode link-layer headers, fromGuy Harris1-1/+3
Tim Newsham. Add in missing item for WTAP_ENCAP_CISCO_IOS in the Wiretap encapsulation type table. svn path=/trunk/; revision=4290
2001-11-26Switched from using CHECK_DISPLAY_AS_DATA to using CHECK_DISPLAY_AS_XEd Warnicke1-2/+2
which also takes a handle as an argument and thus doesn't call dissect_data directly. svn path=/trunk/; revision=4270
2001-11-26Moved from using dissect_data() to using call_dissector()Ed Warnicke1-2/+4
svn path=/trunk/; revision=4269
2001-11-20Make the capture routines take an additional argument giving the amountGuy Harris1-4/+13
of packet data captured. Make the "BYTES_ARE_IN_FRAME()" macro take a "captured length of the packet" argument. Add some length checks to capture routines. svn path=/trunk/; revision=4235
2001-09-25If "snprintf()" can't print all the data because there's not enoughGuy Harris1-5/+12
room, it might return -1 in some versions of glibc; check for that, and quit if that happens. It might also return the number of characters that would've been printed had there been enough room; this means that a loop that does n += snprintf (buf + n, BUF_LENGTH - n, ...); may end up making "n" bigger than BUF_LENGTH, and "snprintf()" might not sanely handle being passed a negative length, so if "n" isn't less than the total length of the string buffer, don't add stuff to it. svn path=/trunk/; revision=3952
2001-09-25The data in a tagged field can be up to 255 bytes (the length is anGuy Harris1-2/+2
8-bit value), and the raw data of an SSID parameter is the interpretation, so the buffer into which we put the interpretation must be at least 256 bytes long; it's an array of size SHORT_STR, so boost SHORT_STR to 256. svn path=/trunk/; revision=3951
2001-07-25Add a "wlan.addr" field, and put two instances into it for all framesGuy Harris1-3/+29
with both source and destination addresses - one instance with the source address, and one instance with the destination address - to allow display filtering that checks both the source and destination address against a single value (as the other 802.x dissectors, and the FDDI dissector, do). svn path=/trunk/; revision=3785
2001-07-21I guess some bridges take Netware Ethernet_802_3 frames, which are 802.3Guy Harris1-4/+49
frames (with a length field rather than a type field, but with no 802.2 header in the payload), and just stick the payload into an 802.11 frame. I've seen captures that show frames of that sort. This means we have to do the same check for Netware 802.3 - or, if you will, "Netware 802.11" - that we do in the Ethernet dissector, i.e. checking for 0xffff as the first four bytes of the payload and, if we find it, treating it as an IPX frame. svn path=/trunk/; revision=3759
2001-06-22Allow the 802.11 management-frame protocol to be disabled.Guy Harris1-1/+21
Don't bother doing the WEP processing and child-tvbuff construction for frames other than management and data frames, as they have no payload to be WEP-encrypted or dissected. svn path=/trunk/; revision=3600
2001-06-22Dissect the payload of a management frame as a separate protocol, soGuy Harris1-419/+416
that you can open up that protocol without opening up the 802.11 MAC header; this can save some screen real estate. Make the tree item for all the WEP parameters a text item, rather than a "string" field with a null string pointer, as "strings" with null string pointers give the filtering code gastric distress. Dissect the WEP initialization vector as an FT_UINT24 (as it's a 3-byte field), and dissect the key ID as part of an FT_UINT8 (as it's in an 8-bit byte). After dissecting the frame control field, dissect the rest of the header in one switch statement, and then: handle WEP-encrypted frames with common code for all frame types; handle the payload of other frames. (If we can supply the relevant keys to Ethereal, we could perhaps add code to decrypt the WEP payload and then dissect the decrypted payload the same way we dissect un-encrypted payloads.) svn path=/trunk/; revision=3599
2001-06-22Fix up some incorrect handling of the TO_DS and FROM_DS flags byGuy Harris1-25/+34
#defining all the bits in the flags field, and using those #defines in the macros to test the flag fields, the macros fot the data address types, the value_string table for the data frame to/from DS combinations, and the bitfields for the flag bits. svn path=/trunk/; revision=3598
2001-06-21Get rid of an unused #define.Guy Harris1-5/+30
Make routines not used outside this module static. Make "find_header_length()" return the correct value for management and control frames. svn path=/trunk/; revision=3590
2001-06-21Don't use "tvb_get_ptr()" and "pletohs()" just to fetch a 16-bitGuy Harris1-102/+48
integral value from a packet - "tvb_get_letohs()" can do that just fine. Don't use "tvb_get_ptr()", casting the result to a "guint16 *", and dereferencing that pointer, either: that doesn't handle byte order correctly, and it may fail if the pointer isn't aligned on a 2-byte boundary. For that matter, don't just use "tvb_get_ptr()" and dereference the result to get an 8-bit quantity. Use "proto_tree_add_item()" in many places where it's possible. Reuse the results of "tvb_get_ptr()" calls when possible. Show the fragment number and sequence number in decimal - they're just ordinals. Fix the blurb for the sequence number field. svn path=/trunk/; revision=3589
2001-06-20Make sure the top-level 802.11 item covers the entire frame.Guy Harris1-4/+16
Give the type field values names, rather than just showing them as 0, 1, and 2. svn path=/trunk/; revision=3588
2001-06-20Make the type/subtype field the very first entry in the protocol tree,Guy Harris1-12/+13
and put it under the top-level 802.11 protocol item, so you don't have to open the frame control field to see it. Rename the variable for it, and the value_string array for it, to indicate that it's made out of the type and subtype fields. svn path=/trunk/; revision=3587
2001-06-20All four data frame types are now handled with identical code, so,Guy Harris1-70/+1
instead of having four identical copies of that code in switch statements, just handle all four of them with the same case. svn path=/trunk/; revision=3586
2001-06-20Put the combined type/subtype into the protocol tree, so you can lookGuy Harris1-72/+49
for all Association Request frames, or all frames except for Clear-to-send frames, or.... Compute the composed frame type early in the dissection process, and set the Info column as soon as you've done that, rather than doing it in the later switch statement. svn path=/trunk/; revision=3585
2001-06-20If it's not a protocol, it doesn't belong at the top level of theGuy Harris1-18/+18
protocol tree; not only is putting it at the top level a little weird, it upsets the heck out of the protocol-statistics code, causing it to abort. Put the fixed and tagged parameters under the top-level entry for 802.11 (where one of the fixed-parameters entries already was). Call the top-level item just "IEEE 802.11", not "IEEE 802.11 Header", as it includes management-frame information. svn path=/trunk/; revision=3584
2001-06-20Clean up a string.Guy Harris1-2/+2
svn path=/trunk/; revision=3583
2001-06-20Fix "COOK_ADDR_SELECTOR()" to extract the 2 bits that determine theGuy Harris1-47/+35
interpretation of the address fields, in DATA_ADDR_T{1,2,3,4} format. Clean up a bunch of other macros to enclose their argument in parentheses. Clean up "find_header_length()" - it only needs to take the frame control field of the frame as an argument, and should just check whether "COOK_ADDR_SELECTOR()" returns DATA_ADDR_T4. "tofrom_ds" is a value_string table, not a true_false_string table, so wrap it in "VALS()", not "TFS()". Don't fetch the header length in N different places in the main dissector - just fetch it once and use it throughout. svn path=/trunk/; revision=3582
2001-06-19More signed vs. unsigned cleanups, and initialization cleanups, fromGuy Harris1-2/+3
Joerg Mayer. svn path=/trunk/; revision=3578
2001-06-18From Joerg Mayer: explicitly fill in all members of aGuy Harris1-52/+52
"header_field_info" structure, including the ones that are later set by the routines to register fields. svn path=/trunk/; revision=3561
2001-06-12Display hex numbers with a leading 0x.Guy Harris1-4/+4
Supply "true" and "false" strings for the Order flag bit. svn path=/trunk/; revision=3538
2001-06-10Clean up the handling of MAC addresses - set the addresses in theGuy Harris1-62/+41
standard fashion, for data and managment packets, and set the columns correctly for other packets (as we currently put address types in the address columns; if we don't do so, we could just set the addresses in the standard fashion for those packets as well). svn path=/trunk/; revision=3536
2001-06-08Use "col_set_str()", rather than "col_add_str()", wherever possible.Guy Harris1-114/+109
Don't bother doing multiple "tvb_get_letohs()" to get the frame control field - we fetched it once, just use the value we fetched. Call sub-dissectors *regardless* of whether a protocol tree is being built or not - dissectors should always do so. svn path=/trunk/; revision=3524
2001-06-01Bug fixes, and WEP support, from Javier Achirica.Guy Harris1-65/+221
svn path=/trunk/; revision=3494
2001-05-30Updates from Johan Jorgensen.Guy Harris1-102/+129
Don't use "pinfo->captured_len" to check the length of the packet - that's the length of the *entire* frame, not the length of the portion that belongs to the 802.11 dissector (there are currently no dissectors for protocols in which 802.11 is encapsulated, so it doesn't currently make a difference, but dissectors should use "tvb_length()" and so on to get that information for the tvbuff they were handed). svn path=/trunk/; revision=3483
2001-04-20Fix Gerald's e-mail address - and fix it in "README.developer", soGuy Harris1-2/+2
people don't blindly insert the old address into new dissectors, which is probably how it got into the dissectors being fixed here. svn path=/trunk/; revision=3348
2001-04-17Move the declaration of "etype_vals[]" from "epan/packet.h" toGuy Harris1-2/+2
"etypes.h". svn path=/trunk/; revision=3314
2001-03-15Don't attempt to modify the data pointed to by the result ofGuy Harris1-13/+4
"tvb_get_ptr()". Display a "(B)" flag for supported rates that are in the BSSBasicRate Set. svn path=/trunk/; revision=3129
2001-03-13Make tvb_get_ptr() return 'const guint8*', and clean up all theGilbert Ramirez1-5/+5
usages of tvb_get_ptr(). packet-ieee80211.c still has one bad usage, in which it *does* modify the tvbuff's data. svn path=/trunk/; revision=3128
2001-02-01Updates from Johan Jorgensen:Guy Harris1-48/+68
Correct number of addresses shown in dataframes. Duration ID changed to "Association ID" in power-save polls Added sequence and fragment numbers. Corrected representation of frame-control flags. Added dissection of data frames with piggybacked CF-Ack, Poll but no data. Cleaned up code a bit (mostly empty lines)... svn path=/trunk/; revision=2964
2001-01-23Fix forwarded by Johan Jorgensen of Axis Communications.Guy Harris1-17/+17
Also, print unsigned quantities with %u, not %d. svn path=/trunk/; revision=2936
2001-01-21Remove some more "CHECK_DISPLAY_AS_DATA()" calls and code to setGuy Harris1-12/+2
"pinfo->current_proto", in dissectors always called through dissector tables and handles. Make the IEEE 802.11 dissector static, as it's not called externally. Clear the Info column in the Linux cooked capture and 802.1q VLAN dissectors, before extracting anything from the packet, so that if an exception is thrown, the Info column doesn't reflect the previous protocol. Don't extract the encapsulated protocol in the VLAN dissector until you use it, so that if the frame contains the VLAN ID but not the encapsulated protocol, we at least put the VLAN ID into the protocol tree. svn path=/trunk/; revision=2927
2001-01-10The frame control field is, I infer from "dissect_ieee80211()",Guy Harris1-2/+2
little-endian, so "capture_ieee80211()" should use "pletohs()", not "pntohs()", to fetch it. Also, "pletohs()" takes a *pointer* to the object to be fetched as an argument. svn path=/trunk/; revision=2863
2001-01-09Add an additional "protocol index" argument to "{old_}dissector_add()",Guy Harris1-2/+3
"{old_}heur_dissector_add()", "{old_}conv_dissector_add()", and "register_dissector()", so that an entry in those tables has associated with it the protocol index of the protocol the dissector handles (or -1, if there is no protocol index for it). This is for future use in a number of places. (Arguably, "proto_register_protocol()" should take a dissector pointer as an argument, but 1) it'd have to handle both regular and heuristic dissectors; 2) making it take either a "dissector_t" or a union of that and a "heur_dissector_t" introduces some painful header-file interdependencies so I'm punting on that for now. As with other Ethereal internal APIs, these APIs are subject to change in the future, at least until Ethereal 1.0 comes out....) svn path=/trunk/; revision=2849
2001-01-03Have the TR MAC and LLC dissectors register themselves, make themGuy Harris1-7/+14
static, and have other dissectors call them through handles. svn path=/trunk/; revision=2816
2001-01-03Have "proto_register_protocol()" build a list of data structures forGuy Harris1-2/+3
protocols, in addition to adding structures to the list of filterable fields. Give it an extra argument that specifies a "short name" for the protocol, for use in such places as pinfo->current_proto; the dialog box for constructing filters; the preferences tab for the protocol; and so on (although we're not yet using it in all those places). Make the preference name that appears in the preferences file and the command line for the DIAMETER protocol "diameter", not "Diameter"; the convention is that the name in question be all-lower-case. Make some routines and variables that aren't exported static. Update a comment in the ICP dissector to make it clear that the dissector won't see fragments other than the first fragment of a fragmented datagram. svn path=/trunk/; revision=2810
2000-12-02Add the relevant "CHECK_DISPLAY_AS_DATA()" call.Guy Harris1-1/+3
svn path=/trunk/; revision=2732
2000-11-30Rename "proto_reg_handoff_iee380211()"[sic] toGuy Harris1-3/+3
"proto_reg_handoff_wlan()", to match "proto_register_wlan()". Call it "IEEE 802.11 wireless LAN", not "Wireless ethernet" - that makes it clearer what type of wireless LAN it is (which *isn't* Ethernet at the MAC layer, although I suspect many of the drivers make it look like Ethernet to the rest of the system). svn path=/trunk/; revision=2717
2000-11-29Wrap the dissect_fddi() call (with a 4th argument) withGilbert Ramirez1-1/+7
dissect_fddi_not_bitswapped() and dissect_fddi_bitswapped(), both of which use the standard 3-argument tvbuffified-dissector argument list. Add a dissector table called "wtap_encap" which is used to call dissectors from dissect_frame(). The switch() statement from this top-level dissector is removed. The link-layer dissectors register themselves with the "wtap_encap" dissector table. The dissectors are now static where possible. svn path=/trunk/; revision=2708
2000-11-19For each column, have both a buffer into which strings for that columnGuy Harris1-2/+2
can be put, and a pointer to the string for the column, which might or might not point to that buffer. Add a routine "col_set_str()", which sets the string for the column to the string passed to it as an argument; it should only be handed a static string (a string constant would be ideal). It doesn't do any copying, so it's faster than "col_add_str()". Make the routines that append to columns check whether the pointer to the string for the column points to the buffer for the column and, if not, copy the string for the column to the buffer for the column so that you can append to it (so you can use "col_set_str()" and then use "col_append_str()" or "col_append_fstr()"). Convert a bunch of "col_add_str()" calls that take a string constant as an argument to "col_set_str()" calls. Convert some "col_add_fstr()" calls that take a string constant as the only argument - i.e., the format string doesn't have any "%" slots into which to put strings for subsequent arguments to "col_set_str()" calls (those calls are just like "col_add_str()" calls). Replace an END_OF_FRAME reference in a tvbuffified dissector with a "tvb_length(tvb)" call. svn path=/trunk/; revision=2670