aboutsummaryrefslogtreecommitdiffstats
path: root/epan/address.h
diff options
context:
space:
mode:
authorGuy Harris <guy@alum.mit.edu>2004-07-19 02:27:17 +0000
committerGuy Harris <guy@alum.mit.edu>2004-07-19 02:27:17 +0000
commit2ad97737fe50aef1b9fa291316b18621275b5e10 (patch)
treea40416ac4806fa00960df88df6adab7b75d42303 /epan/address.h
parent84479319adb31b26f3b53accc30b532173489d63 (diff)
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
Diffstat (limited to 'epan/address.h')
-rw-r--r--epan/address.h128
1 files changed, 128 insertions, 0 deletions
diff --git a/epan/address.h b/epan/address.h
new file mode 100644
index 0000000000..e0618474f8
--- /dev/null
+++ b/epan/address.h
@@ -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__ */
+