wireshark/epan/dissectors/packet-ip.h
João Valverde 7791505168 IPv6: Use ipv6_pinfo_t instead of ws_ip to keep some state
To perform IPv6 defragmentation we need to compute the IPv6 fragment header
payload length by subtracting the length of intermediate extension headers
from the IPv6 payload length.

Add a new frag_plen field to ipv6_pinfo_t to do that instead of (ab)using
struct ws_ip.

Note: The RFC 2460 rules for fragment header order are stricter than the code
suggests but that shouldn't be a problem here.

Change-Id: I76f3cb3a1a29d96b080d3d53c0f493f9d0b2786c
Reviewed-on: https://code.wireshark.org/review/16637
Petri-Dish: João Valverde <j@v6e.pt>
Tested-by: Petri Dish Buildbot <buildbot-no-reply@wireshark.org>
Reviewed-by: João Valverde <j@v6e.pt>
2016-07-25 10:04:49 +00:00

79 lines
2.8 KiB
C

/* packet-ip.h
* Definitions for IP packet disassembly structures and routines
*
* Wireshark - Network traffic analyzer
* By Gerald Combs <gerald@wireshark.org>
* Copyright 1998 Gerald Combs
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation; either version 2
* of the License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*/
#ifndef __PACKET_IP_H__
#define __PACKET_IP_H__
#include "ws_symbol_export.h"
extern int proto_ip;
typedef struct _ws_ip
{
guint8 ip_ver; /* 4 or 6 */
guint8 ip_tos; /* IPv4: type of service; IPv6: traffic class */
guint32 ip_flw; /* IPv4: (zero); IPv6: flow label */
guint32 ip_len; /* IPv4: total length; IPv6: payload length */
guint16 ip_id; /* IPv4: identification; IPv6: (zero) */
guint16 ip_off; /* IPv4: fragment offset; IPv6: (zero) */
guint8 ip_ttl; /* IPv4: time-to-live; IPv6: hop limit */
guint8 ip_nxt; /* IPv4: protocol; IPv6: next header */
guint16 ip_sum; /* IPv4: checksum; IPv6: (zero) */
address ip_src; /* source address */
address ip_dst; /* destination address */
} ws_ip;
/* Differentiated Services Codepoint */
#define IPDSFIELD_DSCP_MASK 0xFC
#define IPDSFIELD_DSCP(dsfield) (((dsfield) & IPDSFIELD_DSCP_MASK) >> 2)
/* Explicit Congestion Notification */
#define IPDSFIELD_ECN_MASK 0x03
#define IPDSFIELD_ECN(dsfield) ((dsfield) & IPDSFIELD_ECN_MASK)
gboolean capture_ip(const guchar *, int, int, capture_packet_info_t *cpinfo, const union wtap_pseudo_header *pseudo_header);
gboolean ip_try_dissect(gboolean heur_first, guint nxt, tvbuff_t *tvb,
packet_info *pinfo, proto_tree *tree, ws_ip *iph);
/* Export the DSCP/ECN extended value-string table for other protocols */
WS_DLL_PUBLIC value_string_ext dscp_vals_ext;
WS_DLL_PUBLIC value_string_ext ecn_vals_ext;
WS_DLL_PUBLIC value_string_ext dscp_short_vals_ext;
WS_DLL_PUBLIC value_string_ext ecn_short_vals_ext;
#endif /* __PACKET_IP_H__ */
/*
* Editor modelines - http://www.wireshark.org/tools/modelines.html
*
* Local variables:
* c-basic-offset: 4
* tab-width: 8
* indent-tabs-mode: nil
* End:
*
* vi: set shiftwidth=4 tabstop=8 expandtab:
* :indentSize=4:tabSize=8:noTabs=true:
*/