]> git.saurik.com Git - apple/xnu.git/blob - tools/tests/libMicro/apple/getaddrinfo_port.c
xnu-1699.22.81.tar.gz
[apple/xnu.git] / tools / tests / libMicro / apple / getaddrinfo_port.c
1 /*
2 * Copyright (c) 2006 Apple Inc. All Rights Reserved.
3 *
4 * @APPLE_OSREFERENCE_LICENSE_HEADER_START@
5 *
6 * This file contains Original Code and/or Modifications of Original Code
7 * as defined in and that are subject to the Apple Public Source License
8 * Version 2.0 (the 'License'). You may not use this file except in
9 * compliance with the License. The rights granted to you under the License
10 * may not be used to create, or enable the creation or redistribution of,
11 * unlawful or unlicensed copies of an Apple operating system, or to
12 * circumvent, violate, or enable the circumvention or violation of, any
13 * terms of an Apple operating system software license agreement.
14 *
15 * Please obtain a copy of the License at
16 * http://www.opensource.apple.com/apsl/ and read it before using this file.
17 *
18 * The Original Code and all software distributed under the License are
19 * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER
20 * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
21 * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
22 * FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT.
23 * Please see the License for the specific language governing rights and
24 * limitations under the License.
25 *
26 * @APPLE_OSREFERENCE_LICENSE_HEADER_END@
27 */
28
29 #include <unistd.h>
30 #include <stdlib.h>
31 #include <stdio.h>
32 #include <stdbool.h>
33 #include <errno.h>
34 #include <string.h>
35 #include <netdb.h>
36
37 // add additional headers needed here.
38
39 #include "../libmicro.h"
40
41 #if DEBUG
42 # define debug(fmt, args...) (void) fprintf(stderr, fmt "\n" , ##args)
43 #else
44 # define debug(fmt, args...)
45 #endif
46
47
48 // This exercises "ssh" port
49 //
50 // Correct use case
51 //
52 // getaddrinfo_port -E -L -S -W -B 200 -C 100
53 //
54 // libMicro default benchmark run options are "-E -L -S -W -C 200"
55 //
56 // -B is batch size: loop iteration per each benchmark run. Needs to match # of
57 // real lookups. This is total number of lookups to issue.
58 // -C is min sample number: how many benchmark needs to run to get proper sample
59 // 1 is mimumum, but you get at least 3 benchmark run
60 // samples. Do not set to zero. Default is 200 for most
61 // runs in libMicro.
62 //
63
64 extern int gL1CacheEnabled;
65
66 /*
67 * Your state variables should live in the tsd_t struct below
68 */
69 typedef struct {
70 } tsd_t;
71
72
73 int
74 benchmark_init()
75 {
76 debug("benchmark_init");
77
78 (void) sprintf(lm_optstr, "l:");
79 lm_tsdsize = sizeof (tsd_t);
80 lm_defB = 100;
81
82 return (0);
83 }
84
85
86 /*
87 * This is where you parse your lower-case arguments.
88 */
89 int
90 benchmark_optswitch(int opt, char *optarg)
91 {
92 debug("benchmark_optswitch");
93
94 switch (opt) {
95 case 'l':
96 gL1CacheEnabled = atoi(optarg);
97 break;
98 }
99
100 return 0;
101 }
102
103
104 // Initialize all structures that will be used in benchmark()
105 //
106 int
107 benchmark_initrun()
108 {
109 debug("\nbenchmark_initrun");
110
111 return (0);
112 }
113
114
115 int
116 benchmark(void *tsd, result_t *res)
117 {
118 int i, err;
119 struct addrinfo *addi;
120
121 res->re_errors = 0;
122
123 debug("in to benchmark - optB = %i", lm_optB);
124 for (i = 0; i < lm_optB; i++) {
125
126 err = getaddrinfo(NULL, "ssh", NULL, &addi);
127
128 if (err) {
129 debug("error: %s", gai_strerror(err));
130 res->re_errors++;
131 }
132
133 freeaddrinfo (addi);
134 }
135 res->re_count = i;
136
137 return (0);
138 }
139
140 // We need to release all the structures we allocated in benchmark_initrun()
141 int
142 benchmark_finirun(void *tsd)
143 {
144 // tsd_t *ts = (tsd_t *)tsd;
145 debug("benchmark_finirun ");
146
147 return (0);
148 }
149
150 char *
151 benchmark_result()
152 {
153 static char result = '\0';
154 debug("benchmark_result");
155 return (&result);
156 }
157