123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261 |
- From 8ed750311482824e427db3b8b2cec6842ea8bc96 Mon Sep 17 00:00:00 2001
- From: Matthias Schiffer <mschiffer@universe-factory.net>
- Date: Thu, 25 Jun 2015 01:03:23 +0200
- Subject: [PATCH] Don't depend on net/if_ether.h
- Instead of adding compatiblity code to make this work with musl, just
- duplicate the needed definitions in fastd.
- [Backport from upstream commit 9ac7f3588dda7d175e04878e7b871a88306d13bf.
- Fixes missing 'sys/queue.h' issue when building with musl.]
- Signed-off-by: Rodrigo Rebello <rprebello@gmail.com>
- ---
- cmake/checks.cmake | 5 -----
- src/compat.h | 22 ----------------------
- src/config.y | 1 +
- src/fastd.h | 15 +++++++++++----
- src/fastd_config.h.in | 3 ---
- src/log.c | 2 +-
- src/peer.c | 7 ++++---
- src/receive.c | 2 +-
- src/send.c | 2 +-
- src/socket.c | 2 ++
- src/status.c | 1 +
- src/types.h | 1 +
- 12 files changed, 23 insertions(+), 40 deletions(-)
- diff --git a/cmake/checks.cmake b/cmake/checks.cmake
- index f9f0399..62d52ff 100644
- --- a/cmake/checks.cmake
- +++ b/cmake/checks.cmake
- @@ -54,11 +54,6 @@ if(NOT DARWIN)
- endif(NOT DARWIN)
-
-
- -set(CMAKE_EXTRA_INCLUDE_FILES "netinet/if_ether.h")
- -check_type_size("struct ethhdr" SIZEOF_ETHHDR)
- -string(COMPARE NOTEQUAL "${SIZEOF_ETHHDR}" "" HAVE_ETHHDR)
- -
- -
- set(CMAKE_REQUIRED_INCLUDES "sys/types.h")
-
- if(NOT DARWIN)
- diff --git a/src/compat.h b/src/compat.h
- index 991c268..29c9253 100644
- --- a/src/compat.h
- +++ b/src/compat.h
- @@ -39,32 +39,10 @@
- #include <unistd.h>
-
- #include <sys/types.h>
- -#include <sys/queue.h>
- #include <sys/socket.h>
-
- -#include <net/if.h>
- -#include <net/if_arp.h>
- #include <netinet/in.h>
- -#include <netinet/if_ether.h>
-
- -#ifndef ETH_ALEN
- -/** The length of a MAC address */
- -#define ETH_ALEN 6
- -#endif
- -
- -#ifndef ETH_HLEN
- -/** The length of the standard ethernet header */
- -#define ETH_HLEN 14
- -#endif
- -
- -#ifndef HAVE_ETHHDR
- -/** An ethernet header */
- -struct ethhdr {
- - uint8_t h_dest[ETH_ALEN]; /**< The destination MAC address field */
- - uint8_t h_source[ETH_ALEN]; /**< The source MAC address field */
- - uint16_t h_proto; /**< The EtherType/length field */
- -} __attribute__((packed));
- -#endif
-
- #if defined(USE_FREEBIND) && !defined(IP_FREEBIND)
- /** Compatiblity define for systems supporting, but not defining IP_FREEBIND */
- diff --git a/src/config.y b/src/config.y
- index f2f597f..5b00d7c 100644
- --- a/src/config.y
- +++ b/src/config.y
- @@ -33,6 +33,7 @@
- %code requires {
- #include <src/fastd.h>
- #include <arpa/inet.h>
- + #include <net/if.h>
- }
-
- %union {
- diff --git a/src/fastd.h b/src/fastd.h
- index f1b2f93..ec2316b 100644
- --- a/src/fastd.h
- +++ b/src/fastd.h
- @@ -58,7 +58,14 @@
-
- /** An ethernet address */
- struct __attribute__((__packed__)) fastd_eth_addr {
- - uint8_t data[ETH_ALEN]; /**< The bytes of the address */
- + uint8_t data[6]; /**< The bytes of the address */
- +};
- +
- +/** An ethernet header */
- +struct __attribute__((packed)) fastd_eth_header {
- + fastd_eth_addr_t dest; /**< The destination MAC address field */
- + fastd_eth_addr_t source; /**< The source MAC address field */
- + uint16_t proto; /**< The EtherType/length field */
- };
-
-
- @@ -408,7 +415,7 @@ static inline void fastd_setnonblock(int fd) {
- static inline size_t fastd_max_payload(void) {
- switch (conf.mode) {
- case MODE_TAP:
- - return conf.mtu+ETH_HLEN;
- + return conf.mtu + sizeof(fastd_eth_header_t);
- case MODE_TUN:
- return conf.mtu;
- default:
- @@ -420,14 +427,14 @@ static inline size_t fastd_max_payload(void) {
- /** Returns the source address of an ethernet packet */
- static inline fastd_eth_addr_t fastd_buffer_source_address(const fastd_buffer_t buffer) {
- fastd_eth_addr_t ret;
- - memcpy(&ret, buffer.data+offsetof(struct ethhdr, h_source), ETH_ALEN);
- + memcpy(&ret, buffer.data + offsetof(fastd_eth_header_t, source), sizeof(fastd_eth_addr_t));
- return ret;
- }
-
- /** Returns the destination address of an ethernet packet */
- static inline fastd_eth_addr_t fastd_buffer_dest_address(const fastd_buffer_t buffer) {
- fastd_eth_addr_t ret;
- - memcpy(&ret, buffer.data+offsetof(struct ethhdr, h_dest), ETH_ALEN);
- + memcpy(&ret, buffer.data + offsetof(fastd_eth_header_t, dest), sizeof(fastd_eth_addr_t));
- return ret;
- }
-
- diff --git a/src/fastd_config.h.in b/src/fastd_config.h.in
- index 6a55930..5f9c868 100644
- --- a/src/fastd_config.h.in
- +++ b/src/fastd_config.h.in
- @@ -35,9 +35,6 @@
- /** Defined if the platform supports the AI_ADDRCONFIG flag to getaddrinfo() */
- #cmakedefine HAVE_AI_ADDRCONFIG
-
- -/** Defined if the platform defines the \e ethhdr struct */
- -#cmakedefine HAVE_ETHHDR
- -
- /** Defined if the platform defines get_current_dir_name() */
- #cmakedefine HAVE_GET_CURRENT_DIR_NAME
-
- diff --git a/src/log.c b/src/log.c
- index 7d1538a..0727bbb 100644
- --- a/src/log.c
- +++ b/src/log.c
- @@ -74,7 +74,7 @@ size_t fastd_snprint_peer_address(char *buffer, size_t size, const fastd_peer_ad
- if (!bind_address && hide)
- return snprintf_safe(buffer, size, "[hidden]:%u", ntohs(address->in6.sin6_port));
- if (inet_ntop(AF_INET6, &address->in6.sin6_addr, addr_buf, sizeof(addr_buf))) {
- - char ifname_buf[IF_NAMESIZE];
- + char ifname_buf[IFNAMSIZ];
- if (!iface && IN6_IS_ADDR_LINKLOCAL(&address->in6.sin6_addr))
- iface = if_indextoname(address->in6.sin6_scope_id, ifname_buf);
-
- diff --git a/src/peer.c b/src/peer.c
- index 9ce5ca2..3313112 100644
- --- a/src/peer.c
- +++ b/src/peer.c
- @@ -34,13 +34,14 @@
- #include "poll.h"
-
- #include <arpa/inet.h>
- +#include <net/if.h>
- #include <sys/wait.h>
-
-
- /** Adds peer-specific fields to \e env */
- void fastd_peer_set_shell_env(fastd_shell_env_t *env, const fastd_peer_t *peer, const fastd_peer_address_t *local_addr, const fastd_peer_address_t *peer_addr) {
- - /* both INET6_ADDRSTRLEN and IFNAMESIZE already include space for the zero termination, so there is no need to add space for the '%' here. */
- - char buf[INET6_ADDRSTRLEN+IF_NAMESIZE];
- + /* both INET6_ADDRSTRLEN and IFNAMSIZ already include space for the zero termination, so there is no need to add space for the '%' here. */
- + char buf[INET6_ADDRSTRLEN+IFNAMSIZ];
-
- fastd_shell_env_set(env, "PEER_NAME", peer ? peer->name : NULL);
-
- @@ -850,7 +851,7 @@ void fastd_peer_set_established(fastd_peer_t *peer) {
-
- /** Compares two MAC addresses */
- static inline int eth_addr_cmp(const fastd_eth_addr_t *addr1, const fastd_eth_addr_t *addr2) {
- - return memcmp(addr1->data, addr2->data, ETH_ALEN);
- + return memcmp(addr1->data, addr2->data, sizeof(fastd_eth_addr_t));
- }
-
- /** Compares two fastd_peer_eth_addr_t entries by their MAC addresses */
- diff --git a/src/receive.c b/src/receive.c
- index 2ee402a..6db5cfd 100644
- --- a/src/receive.c
- +++ b/src/receive.c
- @@ -289,7 +289,7 @@ void fastd_receive(fastd_socket_t *sock) {
- /** Handles a received and decrypted payload packet */
- void fastd_handle_receive(fastd_peer_t *peer, fastd_buffer_t buffer, bool reordered) {
- if (conf.mode == MODE_TAP) {
- - if (buffer.len < ETH_HLEN) {
- + if (buffer.len < sizeof(fastd_eth_header_t)) {
- pr_debug("received truncated packet");
- fastd_buffer_free(buffer);
- return;
- diff --git a/src/send.c b/src/send.c
- index caa7312..6d9f66f 100644
- --- a/src/send.c
- +++ b/src/send.c
- @@ -209,7 +209,7 @@ static inline bool send_data_tap_single(fastd_buffer_t buffer, fastd_peer_t *sou
- if (conf.mode != MODE_TAP)
- return false;
-
- - if (buffer.len < ETH_HLEN) {
- + if (buffer.len < sizeof(fastd_eth_header_t)) {
- pr_debug("truncated ethernet packet");
- fastd_buffer_free(buffer);
- return true;
- diff --git a/src/socket.c b/src/socket.c
- index e932148..03a11a6 100644
- --- a/src/socket.c
- +++ b/src/socket.c
- @@ -32,6 +32,8 @@
- #include "fastd.h"
- #include "poll.h"
-
- +#include <net/if.h>
- +
-
- /**
- Creates a new socket bound to a specific address
- diff --git a/src/status.c b/src/status.c
- index d0b8511..27d6b38 100644
- --- a/src/status.c
- +++ b/src/status.c
- @@ -39,6 +39,7 @@
- #include "peer.h"
-
- #include <json.h>
- +#include <net/if.h>
- #include <sys/un.h>
-
-
- diff --git a/src/types.h b/src/types.h
- index f380541..b684621 100644
- --- a/src/types.h
- +++ b/src/types.h
- @@ -87,6 +87,7 @@ typedef struct fastd_bind_address fastd_bind_address_t;
- typedef struct fastd_socket fastd_socket_t;
- typedef struct fastd_peer_group fastd_peer_group_t;
- typedef struct fastd_eth_addr fastd_eth_addr_t;
- +typedef struct fastd_eth_header fastd_eth_header_t;
- typedef struct fastd_peer fastd_peer_t;
- typedef struct fastd_peer_eth_addr fastd_peer_eth_addr_t;
- typedef struct fastd_remote fastd_remote_t;
- --
- 2.1.4
|