[SAMBA4][PATCH] don't try to resolv ipaddr-strings into an
ip-address
tridge at samba.org
tridge at samba.org
Tue Sep 13 01:22:30 GMT 2005
Metze,
Here is a implemention of composite_trigger_done(). This allows your
earlier patch to work (and I include that patch here) plus it allows
us to remove some of the other ad-hoc checks for is_ipaddress().
I have also added a LOCAL-RESOLVE test
Cheers, Tridge
==== Patch <composite_trigger> level 1
Source: a953eb74-4aff-0310-a63c-855d20285ebb:/local/samba4:12403
Target: 0c0555d6-39d7-0310-84fc-f1cc0bd64818:/branches/SAMBA_4_0:10193
(svn+ssh://svn.samba.org/home/svn/samba)
Log:
r12399 at blu: tridge | 2005-09-13 11:01:48 +1000
a local name resolution tester, used to measure the overhead of async
name resolution
r12402 at blu: tridge | 2005-09-13 11:11:31 +1000
added a composite_trigger_done() call that allows a composite function
to cause an event to happen immediately. This allows metzes patch for
recognising IPs in resolve_name() to work, and also allows us to
remove some of the other code where we currently do specific checks
for is_ipaddress().
=== source/lib/socket/connect.c
==================================================================
--- source/lib/socket/connect.c (revision 10193)
+++ source/lib/socket/connect.c (patch composite_trigger level 1)
@@ -36,11 +36,6 @@
{
struct nbt_name name;
- if (is_ipaddress(address) || strcasecmp("localhost", address) == 0) {
- *ret_address = address;
- return NT_STATUS_OK;
- }
-
name.name = address;
name.scope = NULL;
name.type = NBT_NAME_CLIENT;
=== source/libcli/resolve/resolve.c
==================================================================
--- source/libcli/resolve/resolve.c (revision 10193)
+++ source/libcli/resolve/resolve.c (patch composite_trigger level 1)
@@ -144,6 +144,15 @@
c->event_ctx = talloc_reference(c, event_ctx);
}
+ if (is_ipaddress(state->name.name) ||
+ strcasecmp(state->name.name, "localhost") == 0) {
+ struct ipv4_addr ip = interpret_addr2(state->name.name);
+ state->reply_addr = talloc_strdup(state, sys_inet_ntoa(ip));
+ if (!state->reply_addr) goto failed;
+ composite_trigger_done(c);
+ return c;
+ }
+
state->req = setup_next_method(c);
if (state->req == NULL) goto failed;
=== source/libcli/composite/composite.c
==================================================================
--- source/libcli/composite/composite.c (revision 10193)
+++ source/libcli/composite/composite.c (patch composite_trigger level 1)
@@ -44,3 +44,27 @@
}
+/*
+ callback from composite_trigger_done()
+*/
+static void composite_trigger(struct event_context *ev, struct timed_event *te,
+ struct timeval t, void *ptr)
+{
+ struct composite_context *c = talloc_get_type(ptr, struct composite_context);
+ c->state = SMBCLI_REQUEST_DONE;
+ if (c->async.fn) {
+ c->async.fn(c);
+ }
+}
+
+
+/*
+ trigger an immediate 'done' event on a composite context
+ this is used when the composite code works out that the call
+ can be completed without waiting for any external event
+*/
+void composite_trigger_done(struct composite_context *c)
+{
+ /* a zero timeout means immediate */
+ event_add_timed(c->event_ctx, c, timeval_zero(), composite_trigger, c);
+}
=== source/libcli/composite/connect.c
==================================================================
--- source/libcli/composite/connect.c (revision 10193)
+++ source/libcli/composite/connect.c (patch composite_trigger level 1)
@@ -352,17 +352,9 @@
c->event_ctx = talloc_reference(c, state->sock->event.ctx);
c->private = state;
- /* if the destination is an IP address, then skip the name resolution part */
- if (is_ipaddress(io->in.dest_host)) {
- state->stage = CONNECT_SOCKET;
- state->creq = smbcli_sock_connect_send(state->sock, io->in.dest_host,
- state->io->in.port,
- io->in.dest_host);
- } else {
- state->stage = CONNECT_RESOLVE;
- make_nbt_name_server(&name, io->in.dest_host);
- state->creq = resolve_name_send(&name, c->event_ctx, lp_name_resolve_order());
- }
+ state->stage = CONNECT_RESOLVE;
+ make_nbt_name_server(&name, io->in.dest_host);
+ state->creq = resolve_name_send(&name, c->event_ctx, lp_name_resolve_order());
if (state->creq == NULL) goto failed;
state->creq->async.private = c;
=== source/torture/torture.c
==================================================================
--- source/torture/torture.c (revision 10193)
+++ source/torture/torture.c (patch composite_trigger level 1)
@@ -2324,6 +2324,7 @@
{"LOCAL-IDTREE", torture_local_idtree, 0},
{"LOCAL-SOCKET", torture_local_socket, 0},
{"LOCAL-PAC", torture_pac, 0},
+ {"LOCAL-RESOLVE", torture_local_resolve, 0},
/* COM (Component Object Model) testers */
{"COM-SIMPLE", torture_com_simple, 0 },
=== source/torture/local/resolve.c
==================================================================
--- source/torture/local/resolve.c (revision 10193)
+++ source/torture/local/resolve.c (patch composite_trigger level 1)
@@ -0,0 +1,87 @@
+/*
+ Unix SMB/CIFS implementation.
+
+ local test for async resolve code
+
+ Copyright (C) Andrew Tridgell 2004
+
+ 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., 675 Mass Ave, Cambridge, MA 02139, USA.
+*/
+
+#include "includes.h"
+#include "lib/events/events.h"
+#include "librpc/gen_ndr/nbt.h"
+
+static BOOL test_async_resolve(TALLOC_CTX *mem_ctx)
+{
+ struct nbt_name n;
+ struct event_context *ev = event_context_find(mem_ctx);
+ int timelimit = lp_parm_int(-1, "torture", "timelimit", 10);
+ const char *host = lp_parm_string(-1, "torture", "host");
+ int count = 0;
+ struct timeval tv = timeval_current();
+
+ ZERO_STRUCT(n);
+ n.name = host;
+
+ printf("Testing async resolve of localhost for %d seconds\n", timelimit);
+ while (timeval_elapsed(&tv) < timelimit) {
+ const char *s;
+ struct composite_context *c = resolve_name_host_send(&n, ev);
+ NTSTATUS status = resolve_name_host_recv(c, mem_ctx, &s);
+ if (!NT_STATUS_IS_OK(status)) {
+ printf("async resolve failed - %s\n", nt_errstr(status));
+ return False;
+ }
+ count++;
+ }
+
+ printf("async rate of %.1f resolves/sec\n", count/timeval_elapsed(&tv));
+ return True;
+}
+
+/*
+ test resolution using sync method
+*/
+static BOOL test_sync_resolve(TALLOC_CTX *mem_ctx)
+{
+ int timelimit = lp_parm_int(-1, "torture", "timelimit", 10);
+ struct timeval tv = timeval_current();
+ int count = 0;
+ const char *host = lp_parm_string(-1, "torture", "host");
+
+ printf("Testing sync resolve of localhost for %d seconds\n", timelimit);
+ while (timeval_elapsed(&tv) < timelimit) {
+ sys_inet_ntoa(interpret_addr2(host));
+ count++;
+ }
+
+ printf("sync rate of %.1f resolves/sec\n", count/timeval_elapsed(&tv));
+ return True;
+}
+
+
+BOOL torture_local_resolve(void)
+{
+ TALLOC_CTX *mem_ctx = talloc_init("torture_local_irpc");
+ BOOL ret = True;
+
+ ret &= test_sync_resolve(mem_ctx);
+ ret &= test_async_resolve(mem_ctx);
+
+ talloc_free(mem_ctx);
+
+ return ret;
+}
=== source/torture/config.mk
==================================================================
--- source/torture/config.mk (revision 10193)
+++ source/torture/config.mk (patch composite_trigger level 1)
@@ -146,7 +146,8 @@
torture/local/binding_string.o \
torture/local/idtree.o \
torture/local/socket.o \
- torture/local/irpc.o
+ torture/local/irpc.o \
+ torture/local/resolve.o
REQUIRED_SUBSYSTEMS = \
LIBSMB \
MESSAGING
==== BEGIN SVK PATCH BLOCK ====
Version: svk 1.04 (linux)
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
==== END SVK PATCH BLOCK ====
More information about the samba-technical
mailing list