From 872e0dfa86417e89022f84ac78b2d90236cb97d4 Mon Sep 17 00:00:00 2001 From: Matthias Schiffer Date: Mon, 16 Apr 2012 07:29:55 +0200 Subject: Lots of fixes and improvements on the resolver code --- src/peer.c | 25 +++++++++++++++++++++---- 1 file changed, 21 insertions(+), 4 deletions(-) (limited to 'src/peer.c') diff --git a/src/peer.c b/src/peer.c index 1a6ddd9..1ad4c7f 100644 --- a/src/peer.c +++ b/src/peer.c @@ -251,7 +251,7 @@ void fastd_peer_config_purge(fastd_context *ctx, fastd_peer_config *conf) { fastd_peer_config_free(conf); } -static bool fastd_peer_addr_equal(const fastd_peer_address *addr1, const fastd_peer_address *addr2) { +bool fastd_peer_addr_equal(const fastd_peer_address *addr1, const fastd_peer_address *addr2) { if (addr1->sa.sa_family != addr2->sa.sa_family) return false; @@ -330,9 +330,6 @@ fastd_peer* fastd_peer_add(fastd_context *ctx, fastd_peer_config *peer_conf) { fastd_peer* fastd_peer_add_temp(fastd_context *ctx, const fastd_peer_address *address) { fastd_peer *peer = add_peer(ctx); - if (!ctx->conf->n_floating) - exit_bug(ctx, "tried to add a temporary peer with no floating remotes defined"); - peer->config = NULL; peer->address = *address; peer->state = STATE_TEMP; @@ -409,6 +406,26 @@ const fastd_eth_addr* fastd_get_dest_address(const fastd_context *ctx, fastd_buf } } +bool fastd_peer_config_matches_dynamic(const fastd_peer_config *config, const fastd_peer_address *addr) { + if (!config->hostname) + return false; + + if (config->address.sa.sa_family != AF_UNSPEC && + config->address.sa.sa_family != addr->sa.sa_family) + return false; + + if (addr->sa.sa_family == AF_INET6) { + if (config->address.in.sin_port != addr->in6.sin6_port) + return false; + } + else { + if (config->address.in.sin_port != addr->in.sin_port) + return false; + } + + return true; +} + static inline int fastd_eth_addr_cmp(const fastd_eth_addr *addr1, const fastd_eth_addr *addr2) { return memcmp(addr1->data, addr2->data, ETH_ALEN); } -- cgit v1.2.3