Pull the address (and port and circuit type) stuff out of
"epan/packet_info.h" and put it in "epan/address.h". Use the AT_ values from "epan/address.h" for address types in the interface lists rather than having our own FAM_ enums. svn path=/trunk/; revision=11427
This commit is contained in:
parent
84479319ad
commit
2ad97737fe
128
epan/address.h
Normal file
128
epan/address.h
Normal file
@ -0,0 +1,128 @@
|
||||
/* address.h
|
||||
* Definitions for structures storing addresses, and for the type of
|
||||
* variables holding port-type values
|
||||
*
|
||||
* $Id$
|
||||
*
|
||||
* Ethereal - Network traffic analyzer
|
||||
* By Gerald Combs <gerald@ethereal.com>
|
||||
* 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
*/
|
||||
|
||||
#ifndef __ADDRESS_H__
|
||||
#define __ADDRESS_H__
|
||||
|
||||
/* Types of addresses Ethereal knows about. */
|
||||
typedef enum {
|
||||
AT_NONE, /* no link-layer address */
|
||||
AT_ETHER, /* MAC (Ethernet, 802.x, FDDI) address */
|
||||
AT_IPv4, /* IPv4 */
|
||||
AT_IPv6, /* IPv6 */
|
||||
AT_IPX, /* IPX */
|
||||
AT_SNA, /* SNA */
|
||||
AT_ATALK, /* Appletalk DDP */
|
||||
AT_VINES, /* Banyan Vines */
|
||||
AT_OSI, /* OSI NSAP */
|
||||
AT_ARCNET, /* ARCNET */
|
||||
AT_FC, /* Fibre Channel */
|
||||
AT_SS7PC, /* SS7 Point Code */
|
||||
AT_STRINGZ, /* null-terminated string */
|
||||
AT_EUI64 /* IEEE EUI-64 */
|
||||
} address_type;
|
||||
|
||||
typedef struct _address {
|
||||
address_type type; /* type of address */
|
||||
int len; /* length of address, in bytes */
|
||||
const guint8 *data; /* bytes that constitute address */
|
||||
} address;
|
||||
|
||||
#define SET_ADDRESS(addr, addr_type, addr_len, addr_data) { \
|
||||
(addr)->type = (addr_type); \
|
||||
(addr)->len = (addr_len); \
|
||||
(addr)->data = (addr_data); \
|
||||
}
|
||||
|
||||
/*
|
||||
* Given two addresses, return
|
||||
* 0 if the addresses are equal,
|
||||
* a positive number if addr1>addr2 in some nondefined metric,
|
||||
* a negative number if addr1<addr2 in some nondefined metric
|
||||
*/
|
||||
#define CMP_ADDRESS(addr1, addr2) \
|
||||
( ((addr1)->type > (addr2)->type)?1: \
|
||||
((addr1)->type < (addr2)->type)?-1: \
|
||||
((addr1)->len > (addr2)->len) ?1: \
|
||||
((addr1)->len < (addr2)->len) ?-1: \
|
||||
memcmp((addr1)->data, (addr2)->data, (addr1)->len)\
|
||||
)
|
||||
|
||||
/*
|
||||
* Given two addresses, return "true" if they're equal, "false" otherwise.
|
||||
* Addresses are equal only if they have the same type; if the type is
|
||||
* AT_NONE, they are then equal, otherwise they must have the same
|
||||
* amount of data and the data must be the same.
|
||||
*/
|
||||
#define ADDRESSES_EQUAL(addr1, addr2) \
|
||||
( \
|
||||
(addr1)->type == (addr2)->type && \
|
||||
( \
|
||||
(addr1)->type == AT_NONE || \
|
||||
( \
|
||||
(addr1)->len == (addr2)->len && \
|
||||
memcmp((addr1)->data, (addr2)->data, (addr1)->len) == 0 \
|
||||
) \
|
||||
) \
|
||||
)
|
||||
|
||||
/*
|
||||
* Copy an address, allocating a new buffer for the address data.
|
||||
*/
|
||||
#define COPY_ADDRESS(to, from) { \
|
||||
guint8 *COPY_ADDRESS_data; \
|
||||
(to)->type = (from)->type; \
|
||||
(to)->len = (from)->len; \
|
||||
COPY_ADDRESS_data = g_malloc((from)->len); \
|
||||
memcpy(COPY_ADDRESS_data, (from)->data, (from)->len); \
|
||||
(to)->data = COPY_ADDRESS_data; \
|
||||
}
|
||||
|
||||
/* Types of port numbers Ethereal knows about. */
|
||||
typedef enum {
|
||||
PT_NONE, /* no port number */
|
||||
PT_SCTP, /* SCTP */
|
||||
PT_TCP, /* TCP */
|
||||
PT_UDP, /* UDP */
|
||||
PT_IPX, /* IPX sockets */
|
||||
PT_NCP, /* NCP connection */
|
||||
PT_EXCHG, /* Fibre Channel exchange */
|
||||
PT_DDP, /* DDP AppleTalk connection */
|
||||
PT_SBCCS /* FICON */
|
||||
} port_type;
|
||||
|
||||
/* Types of circuit IDs Ethereal knows about. */
|
||||
typedef enum {
|
||||
CT_NONE, /* no port number */
|
||||
CT_DLCI, /* Frame Relay DLCI */
|
||||
CT_ISDN, /* ISDN channel number */
|
||||
CT_X25, /* X.25 logical channel number */
|
||||
CT_ISUP, /* ISDN User Part CIC */
|
||||
CT_IAX2 /* IAX2 call id */
|
||||
/* Could also have ATM VPI/VCI pairs */
|
||||
} circuit_type;
|
||||
|
||||
#endif /* __ADDRESS_H__ */
|
||||
|
@ -27,104 +27,7 @@
|
||||
|
||||
#include "frame_data.h"
|
||||
#include "tvbuff.h"
|
||||
|
||||
/* Types of addresses Ethereal knows about. */
|
||||
typedef enum {
|
||||
AT_NONE, /* no link-layer address */
|
||||
AT_ETHER, /* MAC (Ethernet, 802.x, FDDI) address */
|
||||
AT_IPv4, /* IPv4 */
|
||||
AT_IPv6, /* IPv6 */
|
||||
AT_IPX, /* IPX */
|
||||
AT_SNA, /* SNA */
|
||||
AT_ATALK, /* Appletalk DDP */
|
||||
AT_VINES, /* Banyan Vines */
|
||||
AT_OSI, /* OSI NSAP */
|
||||
AT_ARCNET, /* ARCNET */
|
||||
AT_FC, /* Fibre Channel */
|
||||
AT_SS7PC, /* SS7 Point Code */
|
||||
AT_STRINGZ, /* null-terminated string */
|
||||
AT_EUI64 /* IEEE EUI-64 */
|
||||
} address_type;
|
||||
|
||||
typedef struct _address {
|
||||
address_type type; /* type of address */
|
||||
int len; /* length of address, in bytes */
|
||||
const guint8 *data; /* bytes that constitute address */
|
||||
} address;
|
||||
|
||||
#define SET_ADDRESS(addr, addr_type, addr_len, addr_data) { \
|
||||
(addr)->type = (addr_type); \
|
||||
(addr)->len = (addr_len); \
|
||||
(addr)->data = (addr_data); \
|
||||
}
|
||||
|
||||
/*
|
||||
* Given two addresses, return
|
||||
* 0 if the addresses are equal,
|
||||
* a positive number if addr1>addr2 in some nondefined metric,
|
||||
* a negative number if addr1<addr2 in some nondefined metric
|
||||
*/
|
||||
#define CMP_ADDRESS(addr1, addr2) \
|
||||
( ((addr1)->type > (addr2)->type)?1: \
|
||||
((addr1)->type < (addr2)->type)?-1: \
|
||||
((addr1)->len > (addr2)->len) ?1: \
|
||||
((addr1)->len < (addr2)->len) ?-1: \
|
||||
memcmp((addr1)->data, (addr2)->data, (addr1)->len)\
|
||||
)
|
||||
|
||||
/*
|
||||
* Given two addresses, return "true" if they're equal, "false" otherwise.
|
||||
* Addresses are equal only if they have the same type; if the type is
|
||||
* AT_NONE, they are then equal, otherwise they must have the same
|
||||
* amount of data and the data must be the same.
|
||||
*/
|
||||
#define ADDRESSES_EQUAL(addr1, addr2) \
|
||||
( \
|
||||
(addr1)->type == (addr2)->type && \
|
||||
( \
|
||||
(addr1)->type == AT_NONE || \
|
||||
( \
|
||||
(addr1)->len == (addr2)->len && \
|
||||
memcmp((addr1)->data, (addr2)->data, (addr1)->len) == 0 \
|
||||
) \
|
||||
) \
|
||||
)
|
||||
|
||||
/*
|
||||
* Copy an address, allocating a new buffer for the address data.
|
||||
*/
|
||||
#define COPY_ADDRESS(to, from) { \
|
||||
guint8 *COPY_ADDRESS_data; \
|
||||
(to)->type = (from)->type; \
|
||||
(to)->len = (from)->len; \
|
||||
COPY_ADDRESS_data = g_malloc((from)->len); \
|
||||
memcpy(COPY_ADDRESS_data, (from)->data, (from)->len); \
|
||||
(to)->data = COPY_ADDRESS_data; \
|
||||
}
|
||||
|
||||
/* Types of port numbers Ethereal knows about. */
|
||||
typedef enum {
|
||||
PT_NONE, /* no port number */
|
||||
PT_SCTP, /* SCTP */
|
||||
PT_TCP, /* TCP */
|
||||
PT_UDP, /* UDP */
|
||||
PT_IPX, /* IPX sockets */
|
||||
PT_NCP, /* NCP connection */
|
||||
PT_EXCHG, /* Fibre Channel exchange */
|
||||
PT_DDP, /* DDP AppleTalk connection */
|
||||
PT_SBCCS /* FICON */
|
||||
} port_type;
|
||||
|
||||
/* Types of circuit IDs Ethereal knows about. */
|
||||
typedef enum {
|
||||
CT_NONE, /* no port number */
|
||||
CT_DLCI, /* Frame Relay DLCI */
|
||||
CT_ISDN, /* ISDN channel number */
|
||||
CT_X25, /* X.25 logical channel number */
|
||||
CT_ISUP, /* ISDN User Part CIC */
|
||||
CT_IAX2 /* IAX2 call id */
|
||||
/* Could also have ATM VPI/VCI pairs */
|
||||
} circuit_type;
|
||||
#include "address.h"
|
||||
|
||||
#define P2P_DIR_UNKNOWN -1
|
||||
#define P2P_DIR_SENT 0
|
||||
|
@ -280,17 +280,20 @@ set_link_type_list(GtkWidget *linktype_om, GtkWidget *entry)
|
||||
g_string_append(ip_str, ", ");
|
||||
|
||||
ip_addr = (if_addr_t *)curr_ip->data;
|
||||
switch (ip_addr->family) {
|
||||
switch (ip_addr->type) {
|
||||
|
||||
case FAM_IPv4:
|
||||
case AT_IPv4:
|
||||
g_string_append(ip_str,
|
||||
ip_to_str((guint8 *)&ip_addr->ip_addr.ip4_addr));
|
||||
break;
|
||||
|
||||
case FAM_IPv6:
|
||||
case AT_IPv6:
|
||||
g_string_append(ip_str,
|
||||
ip6_to_str((struct e_in6_addr *)&ip_addr->ip_addr.ip6_addr));
|
||||
break;
|
||||
|
||||
default:
|
||||
g_assert_not_reached();
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -442,13 +442,13 @@ capture_if_cb(GtkWidget *w _U_, gpointer d _U_)
|
||||
curr_ip = g_slist_nth(if_info->ip_addr, 0);
|
||||
if(curr_ip) {
|
||||
ip_addr = (if_addr_t *)curr_ip->data;
|
||||
switch (ip_addr->family) {
|
||||
switch (ip_addr->type) {
|
||||
|
||||
case FAM_IPv4:
|
||||
case AT_IPv4:
|
||||
tmp_str = ip_to_str((guint8 *)&ip_addr->ip_addr.ip4_addr);
|
||||
break;
|
||||
|
||||
case FAM_IPv6:
|
||||
case AT_IPv6:
|
||||
tmp_str = ip6_to_str((struct e_in6_addr *)&ip_addr->ip_addr.ip6_addr);
|
||||
break;
|
||||
|
||||
|
@ -208,7 +208,7 @@ if_info_add_address(if_info_t *if_info, struct sockaddr *addr)
|
||||
case AF_INET:
|
||||
ai = (struct sockaddr_in *)addr;
|
||||
ip_addr = g_malloc(sizeof(*ip_addr));
|
||||
ip_addr->family = FAM_IPv4;
|
||||
ip_addr->type = AT_IPv4;
|
||||
ip_addr->ip_addr.ip4_addr =
|
||||
*((guint32 *)&(ai->sin_addr.s_addr));
|
||||
if_info->ip_addr = g_slist_append(if_info->ip_addr, ip_addr);
|
||||
@ -218,7 +218,7 @@ if_info_add_address(if_info_t *if_info, struct sockaddr *addr)
|
||||
case AF_INET6:
|
||||
ai6 = (struct sockaddr_in6 *)addr;
|
||||
ip_addr = g_malloc(sizeof(*ip_addr));
|
||||
ip_addr->family = FAM_IPv6;
|
||||
ip_addr->type = AT_IPv6;
|
||||
memcpy((void *)&ip_addr->ip_addr.ip6_addr,
|
||||
(void *)&ai6->sin6_addr.s6_addr,
|
||||
sizeof ip_addr->ip_addr.ip6_addr);
|
||||
|
@ -31,6 +31,8 @@
|
||||
extern "C" {
|
||||
#endif /* __cplusplus */
|
||||
|
||||
#include <epan/address.h>
|
||||
|
||||
/*
|
||||
* XXX - this is also the traditional default snapshot size in
|
||||
* tcpdump - but, if IPv6 is enabled, it defaults to 96, to get an
|
||||
@ -57,13 +59,8 @@ typedef struct {
|
||||
/*
|
||||
* An address in the "ip_addr" list.
|
||||
*/
|
||||
typedef enum {
|
||||
FAM_IPv4,
|
||||
FAM_IPv6
|
||||
} address_family;
|
||||
|
||||
typedef struct {
|
||||
address_family family;
|
||||
address_type type;
|
||||
union {
|
||||
guint32 ip4_addr;
|
||||
guint8 ip6_addr[16];
|
||||
|
Loading…
x
Reference in New Issue
Block a user