Make IP options into a dissector table.

This provides external access for dissectors and plugins to provide their
own implementation of IP options.

Change-Id: I40ce17ce408217769e3b86e364f372a5181888e1
Reviewed-on: https://code.wireshark.org/review/20163
Petri-Dish: Michael Mann <mmann78@netscape.net>
Tested-by: Petri Dish Buildbot <buildbot-no-reply@wireshark.org>
Reviewed-by: Michael Mann <mmann78@netscape.net>
This commit is contained in:
Michael Mann 2017-02-15 07:17:56 -05:00
parent 67f4673ce5
commit 26512328ae
2 changed files with 338 additions and 447 deletions

File diff suppressed because it is too large Load Diff

View File

@ -35,38 +35,7 @@ typedef enum {
OPT_LEN_VARIABLE_LENGTH /**< option is variable-length - optlen is minimum */
} opt_len_type;
/** Member of table of IP or TCP options. */
typedef struct ip_tcp_opt {
int optcode; /**< code for option */
const char *name; /**< name of option */
int *subtree_index; /**< pointer to subtree index for option */
opt_len_type len_type; /**< type of option length field */
int optlen; /**< value length should be (minimum if VARIABLE) */
void (*dissect)(const struct ip_tcp_opt *,
tvbuff_t *,
int,
guint,
packet_info *,
proto_tree *,
void *); /**< routine to dissect option */
} ip_tcp_opt;
typedef struct ip_tcp_opt_type {
int* phf_opt_type;
int* pett_opt_type;
int* phf_opt_type_copy;
int* phf_opt_type_class;
int* phf_opt_type_number;
} ip_tcp_opt_type;
/** Routine to dissect options that work like IPv4 options, where the
length field in the option, if present, includes the type and
length bytes. */
extern void dissect_ip_tcp_options(tvbuff_t *tvb, int offset, guint length,
const ip_tcp_opt *opttab, int nopts, int eol,
ip_tcp_opt_type* opttypes, expert_field* ei_bad,
packet_info *pinfo, proto_tree *opt_tree,
proto_item *opt_item, void * data);
/* Quick-Start option, as defined by RFC4782 */
#define QS_FUNC_MASK 0xf0