diff options
author | Zheng Da <zhengda1936@gmail.com> | 2016-11-02 18:06:53 +0100 |
---|---|---|
committer | Justus Winter <justus@gnupg.org> | 2016-11-04 15:40:53 +0100 |
commit | 25d614aa11e52370c200e677099746a619ea76db (patch) | |
tree | 46bbcbf80c1264131264b6d3ab334d856a17ffdc /eth-multiplexer/util.h | |
parent | 50e14fce11f2bebb4faad220f8f610a55f4110c5 (diff) |
eth-multiplexer: Merge the eth-multiplexer.
* Makefile (prog-subdirs): Add the new program.
* NEWS: Update.
* eth-multiplexer/ChangeLog: New file.
* eth-multiplexer/Makefile: Likewise.
* eth-multiplexer/README: Likewise.
* eth-multiplexer/demuxer.c: Likewise.
* eth-multiplexer/dev_stat.c: Likewise.
* eth-multiplexer/device_impl.c: Likewise.
* eth-multiplexer/ethernet.c: Likewise.
* eth-multiplexer/ethernet.h: Likewise.
* eth-multiplexer/mig-decls.h: Likewise.
* eth-multiplexer/mig-mutate.h: Likewise.
* eth-multiplexer/multiplexer.c: Likewise.
* eth-multiplexer/netfs_impl.c: Likewise.
* eth-multiplexer/netfs_impl.h: Likewise.
* eth-multiplexer/notify_impl.c: Likewise.
* eth-multiplexer/test.c: Likewise.
* eth-multiplexer/util.h: Likewise.
* eth-multiplexer/vdev.c: Likewise.
* eth-multiplexer/vdev.h: Likewise.
The eth-multiplexer has been written by Zheng Da. This merges his
work into the main repository.
Diffstat (limited to 'eth-multiplexer/util.h')
-rw-r--r-- | eth-multiplexer/util.h | 91 |
1 files changed, 91 insertions, 0 deletions
diff --git a/eth-multiplexer/util.h b/eth-multiplexer/util.h new file mode 100644 index 00000000..b062638d --- /dev/null +++ b/eth-multiplexer/util.h @@ -0,0 +1,91 @@ +/* + Copyright (C) 2008 Free Software Foundation, Inc. + Written by Zheng Da. + + This file is part of the GNU Hurd. + + The GNU Hurd 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, or (at your option) + any later version. + + The GNU Hurd 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 the GNU Hurd; see the file COPYING. If not, write to + the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. */ + +#ifndef UTIL_H +#define UTIL_H + +#include <stdio.h> +#include <execinfo.h> + +#include <sys/types.h> +#include <sys/socket.h> +#include <arpa/inet.h> +#include <netinet/ip.h> + +#include <mach.h> + +#ifdef DEBUG + +#define debug(format, ...) do \ +{ \ + char buf[1024]; \ + snprintf (buf, 1024, "multiplexer: %s: %s\n", __func__, format); \ + fprintf (stderr , buf, ## __VA_ARGS__); \ + fflush (stderr); \ +} while (0) + +#else + +#define debug(format, ...) do {} while (0) + +#endif + +#define print_backtrace() do \ +{ \ + size_t size; \ + void *array[30]; \ + size = backtrace (array, sizeof (array)); \ + debug ("the depth of the stack: %d", size); \ + backtrace_symbols_fd(array, size, fileno (stderr)); \ +} while (0) + +#define ETH_ALEN 6 /* Octets in one ethernet addr */ + +struct ethhdr +{ + unsigned char h_dest[ETH_ALEN]; /* destination eth addr */ + unsigned char h_source[ETH_ALEN]; /* source ether addr */ + unsigned short h_proto; /* packet type ID field */ +}; + +static inline void +print_pack (char *packet, int len) +{ +#ifdef DEBUG +#define ETH_P_IP 0x0800 + struct ethhdr *ethh = (struct ethhdr *) packet; + struct iphdr *iph = (struct iphdr *)(ethh + 1); + char src_str[INET_ADDRSTRLEN]; + char dst_str[INET_ADDRSTRLEN]; + if (ntohs (ethh->h_proto) == ETH_P_IP + && len >= sizeof (struct ethhdr) + sizeof (struct iphdr)) + { + debug ("multiplexer: get a IP packet from %s to %s\n", + inet_ntop (AF_INET, &iph->saddr, src_str, INET_ADDRSTRLEN), + inet_ntop (AF_INET, &iph->daddr, dst_str, INET_ADDRSTRLEN)); + } + else + { + debug ("multiplexer: get a non-IP packet\n"); + } +#endif +} + +#endif |