aboutsummaryrefslogtreecommitdiffstats
path: root/pcap-util.c
diff options
context:
space:
mode:
authorGuy Harris <guy@alum.mit.edu>2004-07-18 18:47:44 +0000
committerGuy Harris <guy@alum.mit.edu>2004-07-18 18:47:44 +0000
commit2aec055c79298028710da18201d0cdb5a40a504d (patch)
treec248415cbeed737974d41aef46cc5190b1f5ec3d /pcap-util.c
parent669db206cb1f270046ad400fff7655e20c63e723 (diff)
Add support for IPv6 addresses for interfaces.
svn path=/trunk/; revision=11411
Diffstat (limited to 'pcap-util.c')
-rw-r--r--pcap-util.c29
1 files changed, 23 insertions, 6 deletions
diff --git a/pcap-util.c b/pcap-util.c
index a1e9feb8cf..c0b92c91c4 100644
--- a/pcap-util.c
+++ b/pcap-util.c
@@ -197,23 +197,40 @@ if_info_new(char *name, char *description)
void
if_info_add_address(if_info_t *if_info, struct sockaddr *addr)
{
+ if_addr_t *ip_addr;
struct sockaddr_in *ai;
- guint32 *ip_addr;
+#ifdef AF_INET6
+ struct sockaddr_in6 *ai6;
+#endif
switch (addr->sa_family) {
case AF_INET:
ai = (struct sockaddr_in *)addr;
ip_addr = g_malloc(sizeof(*ip_addr));
- *ip_addr = *((guint32 *)&(ai->sin_addr.s_addr));
+ ip_addr->family = FAM_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);
+ break;
+
+#ifdef AF_INET6
+ case AF_INET6:
+ ai6 = (struct sockaddr_in6 *)addr;
+ ip_addr = g_malloc(sizeof(*ip_addr));
+ ip_addr->family = FAM_IPv6;
+ memcpy((void *)&ip_addr->ip_addr.ip6_addr,
+ (void *)&ai6->sin6_addr.s6_addr,
+ sizeof ip_addr->ip_addr.ip6_addr);
if_info->ip_addr = g_slist_append(if_info->ip_addr, ip_addr);
break;
+#endif
}
}
#ifdef HAVE_PCAP_FINDALLDEVS
/*
- * Get all IPv4 address information, and the loopback flag, for the given
+ * Get all IP address information, and the loopback flag, for the given
* interface.
*/
static void
@@ -265,7 +282,7 @@ get_interface_list_findalldevs(int *err, char *err_str)
static void
free_if_info_addr_cb(gpointer addr, gpointer user_data _U_)
{
- g_free(addr);
+ g_free(addr);
}
static void
@@ -277,8 +294,8 @@ free_if_cb(gpointer data, gpointer user_data _U_)
if (if_info->description != NULL)
g_free(if_info->description);
- g_slist_foreach(if_info->ip_addr, free_if_info_addr_cb, NULL);
- g_slist_free(if_info->ip_addr);
+ g_slist_foreach(if_info->ip_addr, free_if_info_addr_cb, NULL);
+ g_slist_free(if_info->ip_addr);
}
void