1*9517SBill.Taylor@Sun.COM /*
2*9517SBill.Taylor@Sun.COM * CDDL HEADER START
3*9517SBill.Taylor@Sun.COM *
4*9517SBill.Taylor@Sun.COM * The contents of this file are subject to the terms of the
5*9517SBill.Taylor@Sun.COM * Common Development and Distribution License (the "License").
6*9517SBill.Taylor@Sun.COM * You may not use this file except in compliance with the License.
7*9517SBill.Taylor@Sun.COM *
8*9517SBill.Taylor@Sun.COM * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
9*9517SBill.Taylor@Sun.COM * or http://www.opensolaris.org/os/licensing.
10*9517SBill.Taylor@Sun.COM * See the License for the specific language governing permissions
11*9517SBill.Taylor@Sun.COM * and limitations under the License.
12*9517SBill.Taylor@Sun.COM *
13*9517SBill.Taylor@Sun.COM * When distributing Covered Code, include this CDDL HEADER in each
14*9517SBill.Taylor@Sun.COM * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
15*9517SBill.Taylor@Sun.COM * If applicable, add the following below this CDDL HEADER, with the
16*9517SBill.Taylor@Sun.COM * fields enclosed by brackets "[]" replaced with your own identifying
17*9517SBill.Taylor@Sun.COM * information: Portions Copyright [yyyy] [name of copyright owner]
18*9517SBill.Taylor@Sun.COM *
19*9517SBill.Taylor@Sun.COM * CDDL HEADER END
20*9517SBill.Taylor@Sun.COM */
21*9517SBill.Taylor@Sun.COM
22*9517SBill.Taylor@Sun.COM /*
23*9517SBill.Taylor@Sun.COM * Copyright (c) 2002-2003, Network Appliance, Inc. All rights reserved.
24*9517SBill.Taylor@Sun.COM */
25*9517SBill.Taylor@Sun.COM
26*9517SBill.Taylor@Sun.COM /*
27*9517SBill.Taylor@Sun.COM * Copyright 2004 Sun Microsystems, Inc. All rights reserved.
28*9517SBill.Taylor@Sun.COM * Use is subject to license terms.
29*9517SBill.Taylor@Sun.COM */
30*9517SBill.Taylor@Sun.COM
31*9517SBill.Taylor@Sun.COM /*
32*9517SBill.Taylor@Sun.COM *
33*9517SBill.Taylor@Sun.COM * MODULE: dapl_provider.c
34*9517SBill.Taylor@Sun.COM *
35*9517SBill.Taylor@Sun.COM * PURPOSE: Provider function table
36*9517SBill.Taylor@Sun.COM * Description: DAT Interfaces to this provider
37*9517SBill.Taylor@Sun.COM *
38*9517SBill.Taylor@Sun.COM * $Id: dapl_provider.c,v 1.7 2003/08/08 19:42:54 sjs2 Exp $
39*9517SBill.Taylor@Sun.COM */
40*9517SBill.Taylor@Sun.COM
41*9517SBill.Taylor@Sun.COM #include "dapl_provider.h"
42*9517SBill.Taylor@Sun.COM
43*9517SBill.Taylor@Sun.COM
44*9517SBill.Taylor@Sun.COM /*
45*9517SBill.Taylor@Sun.COM *
46*9517SBill.Taylor@Sun.COM * Global Data
47*9517SBill.Taylor@Sun.COM *
48*9517SBill.Taylor@Sun.COM */
49*9517SBill.Taylor@Sun.COM
50*9517SBill.Taylor@Sun.COM DAPL_PROVIDER_LIST g_dapl_provider_list;
51*9517SBill.Taylor@Sun.COM
52*9517SBill.Taylor@Sun.COM
53*9517SBill.Taylor@Sun.COM /*
54*9517SBill.Taylor@Sun.COM * the function table for this provider
55*9517SBill.Taylor@Sun.COM */
56*9517SBill.Taylor@Sun.COM
57*9517SBill.Taylor@Sun.COM DAT_PROVIDER g_dapl_provider_template =
58*9517SBill.Taylor@Sun.COM {
59*9517SBill.Taylor@Sun.COM NULL,
60*9517SBill.Taylor@Sun.COM 0,
61*9517SBill.Taylor@Sun.COM &dapl_ia_open,
62*9517SBill.Taylor@Sun.COM &dapl_ia_query,
63*9517SBill.Taylor@Sun.COM &dapl_ia_close,
64*9517SBill.Taylor@Sun.COM
65*9517SBill.Taylor@Sun.COM &dapl_set_consumer_context,
66*9517SBill.Taylor@Sun.COM &dapl_get_consumer_context,
67*9517SBill.Taylor@Sun.COM &dapl_get_handle_type,
68*9517SBill.Taylor@Sun.COM
69*9517SBill.Taylor@Sun.COM &dapl_cno_create,
70*9517SBill.Taylor@Sun.COM &dapl_cno_modify_agent,
71*9517SBill.Taylor@Sun.COM &dapl_cno_query,
72*9517SBill.Taylor@Sun.COM &dapl_cno_free,
73*9517SBill.Taylor@Sun.COM &dapl_cno_wait,
74*9517SBill.Taylor@Sun.COM
75*9517SBill.Taylor@Sun.COM &dapl_cr_query,
76*9517SBill.Taylor@Sun.COM &dapl_cr_accept,
77*9517SBill.Taylor@Sun.COM &dapl_cr_reject,
78*9517SBill.Taylor@Sun.COM &dapl_cr_handoff,
79*9517SBill.Taylor@Sun.COM
80*9517SBill.Taylor@Sun.COM &dapl_evd_create,
81*9517SBill.Taylor@Sun.COM &dapl_evd_query,
82*9517SBill.Taylor@Sun.COM &dapl_evd_modify_cno,
83*9517SBill.Taylor@Sun.COM &dapl_evd_enable,
84*9517SBill.Taylor@Sun.COM &dapl_evd_disable,
85*9517SBill.Taylor@Sun.COM &dapl_evd_wait,
86*9517SBill.Taylor@Sun.COM &dapl_evd_resize,
87*9517SBill.Taylor@Sun.COM &dapl_evd_post_se,
88*9517SBill.Taylor@Sun.COM &dapl_evd_dequeue,
89*9517SBill.Taylor@Sun.COM &dapl_evd_free,
90*9517SBill.Taylor@Sun.COM
91*9517SBill.Taylor@Sun.COM &dapl_ep_create,
92*9517SBill.Taylor@Sun.COM &dapl_ep_query,
93*9517SBill.Taylor@Sun.COM &dapl_ep_modify,
94*9517SBill.Taylor@Sun.COM &dapl_ep_connect,
95*9517SBill.Taylor@Sun.COM &dapl_ep_dup_connect,
96*9517SBill.Taylor@Sun.COM &dapl_ep_disconnect,
97*9517SBill.Taylor@Sun.COM &dapl_ep_post_send,
98*9517SBill.Taylor@Sun.COM &dapl_ep_post_recv,
99*9517SBill.Taylor@Sun.COM &dapl_ep_post_rdma_read,
100*9517SBill.Taylor@Sun.COM &dapl_ep_post_rdma_write,
101*9517SBill.Taylor@Sun.COM &dapl_ep_get_status,
102*9517SBill.Taylor@Sun.COM &dapl_ep_free,
103*9517SBill.Taylor@Sun.COM
104*9517SBill.Taylor@Sun.COM &dapl_lmr_create,
105*9517SBill.Taylor@Sun.COM &dapl_lmr_query,
106*9517SBill.Taylor@Sun.COM &dapl_lmr_free,
107*9517SBill.Taylor@Sun.COM
108*9517SBill.Taylor@Sun.COM &dapl_rmr_create,
109*9517SBill.Taylor@Sun.COM &dapl_rmr_query,
110*9517SBill.Taylor@Sun.COM &dapl_rmr_bind,
111*9517SBill.Taylor@Sun.COM &dapl_rmr_free,
112*9517SBill.Taylor@Sun.COM
113*9517SBill.Taylor@Sun.COM &dapl_psp_create,
114*9517SBill.Taylor@Sun.COM &dapl_psp_query,
115*9517SBill.Taylor@Sun.COM &dapl_psp_free,
116*9517SBill.Taylor@Sun.COM
117*9517SBill.Taylor@Sun.COM &dapl_rsp_create,
118*9517SBill.Taylor@Sun.COM &dapl_rsp_query,
119*9517SBill.Taylor@Sun.COM &dapl_rsp_free,
120*9517SBill.Taylor@Sun.COM
121*9517SBill.Taylor@Sun.COM &dapl_pz_create,
122*9517SBill.Taylor@Sun.COM &dapl_pz_query,
123*9517SBill.Taylor@Sun.COM &dapl_pz_free,
124*9517SBill.Taylor@Sun.COM
125*9517SBill.Taylor@Sun.COM &dapl_psp_create_any,
126*9517SBill.Taylor@Sun.COM &dapl_ep_reset,
127*9517SBill.Taylor@Sun.COM &dapl_evd_set_unwaitable,
128*9517SBill.Taylor@Sun.COM &dapl_evd_clear_unwaitable,
129*9517SBill.Taylor@Sun.COM
130*9517SBill.Taylor@Sun.COM &dapl_lmr_sync_rdma_read,
131*9517SBill.Taylor@Sun.COM &dapl_lmr_sync_rdma_write,
132*9517SBill.Taylor@Sun.COM
133*9517SBill.Taylor@Sun.COM &dapl_ep_create_with_srq,
134*9517SBill.Taylor@Sun.COM &dapl_ep_recv_query,
135*9517SBill.Taylor@Sun.COM &dapl_ep_set_watermark,
136*9517SBill.Taylor@Sun.COM
137*9517SBill.Taylor@Sun.COM &dapl_srq_create,
138*9517SBill.Taylor@Sun.COM &dapl_srq_free,
139*9517SBill.Taylor@Sun.COM &dapl_srq_post_recv,
140*9517SBill.Taylor@Sun.COM &dapl_srq_query,
141*9517SBill.Taylor@Sun.COM &dapl_srq_resize,
142*9517SBill.Taylor@Sun.COM &dapl_srq_set_lw
143*9517SBill.Taylor@Sun.COM };
144*9517SBill.Taylor@Sun.COM
145*9517SBill.Taylor@Sun.COM
146*9517SBill.Taylor@Sun.COM
147*9517SBill.Taylor@Sun.COM /*
148*9517SBill.Taylor@Sun.COM *
149*9517SBill.Taylor@Sun.COM * Function Prototypes
150*9517SBill.Taylor@Sun.COM *
151*9517SBill.Taylor@Sun.COM */
152*9517SBill.Taylor@Sun.COM
153*9517SBill.Taylor@Sun.COM static DAT_BOOLEAN
154*9517SBill.Taylor@Sun.COM dapl_provider_list_key_cmp(
155*9517SBill.Taylor@Sun.COM const char *name_a,
156*9517SBill.Taylor@Sun.COM const char *name_b);
157*9517SBill.Taylor@Sun.COM
158*9517SBill.Taylor@Sun.COM
159*9517SBill.Taylor@Sun.COM /*
160*9517SBill.Taylor@Sun.COM *
161*9517SBill.Taylor@Sun.COM * Function Definitions
162*9517SBill.Taylor@Sun.COM *
163*9517SBill.Taylor@Sun.COM */
164*9517SBill.Taylor@Sun.COM
165*9517SBill.Taylor@Sun.COM DAT_RETURN
dapl_provider_list_create(void)166*9517SBill.Taylor@Sun.COM dapl_provider_list_create(void)
167*9517SBill.Taylor@Sun.COM {
168*9517SBill.Taylor@Sun.COM DAT_RETURN status;
169*9517SBill.Taylor@Sun.COM
170*9517SBill.Taylor@Sun.COM status = DAT_SUCCESS;
171*9517SBill.Taylor@Sun.COM
172*9517SBill.Taylor@Sun.COM /* create the head node */
173*9517SBill.Taylor@Sun.COM g_dapl_provider_list.head = dapl_os_alloc(
174*9517SBill.Taylor@Sun.COM sizeof (DAPL_PROVIDER_LIST_NODE));
175*9517SBill.Taylor@Sun.COM if (NULL == g_dapl_provider_list.head) {
176*9517SBill.Taylor@Sun.COM status = DAT_ERROR(DAT_INSUFFICIENT_RESOURCES,
177*9517SBill.Taylor@Sun.COM DAT_RESOURCE_MEMORY);
178*9517SBill.Taylor@Sun.COM goto bail;
179*9517SBill.Taylor@Sun.COM }
180*9517SBill.Taylor@Sun.COM
181*9517SBill.Taylor@Sun.COM (void) dapl_os_memzero(g_dapl_provider_list.head,
182*9517SBill.Taylor@Sun.COM sizeof (DAPL_PROVIDER_LIST_NODE));
183*9517SBill.Taylor@Sun.COM
184*9517SBill.Taylor@Sun.COM /* create the tail node */
185*9517SBill.Taylor@Sun.COM g_dapl_provider_list.tail = dapl_os_alloc(
186*9517SBill.Taylor@Sun.COM sizeof (DAPL_PROVIDER_LIST_NODE));
187*9517SBill.Taylor@Sun.COM if (NULL == g_dapl_provider_list.tail) {
188*9517SBill.Taylor@Sun.COM status = DAT_ERROR(DAT_INSUFFICIENT_RESOURCES,
189*9517SBill.Taylor@Sun.COM DAT_RESOURCE_MEMORY);
190*9517SBill.Taylor@Sun.COM goto bail;
191*9517SBill.Taylor@Sun.COM }
192*9517SBill.Taylor@Sun.COM
193*9517SBill.Taylor@Sun.COM (void) dapl_os_memzero(g_dapl_provider_list.tail,
194*9517SBill.Taylor@Sun.COM sizeof (DAPL_PROVIDER_LIST_NODE));
195*9517SBill.Taylor@Sun.COM
196*9517SBill.Taylor@Sun.COM g_dapl_provider_list.head->next = g_dapl_provider_list.tail;
197*9517SBill.Taylor@Sun.COM g_dapl_provider_list.tail->prev = g_dapl_provider_list.head;
198*9517SBill.Taylor@Sun.COM g_dapl_provider_list.size = 0;
199*9517SBill.Taylor@Sun.COM
200*9517SBill.Taylor@Sun.COM bail:
201*9517SBill.Taylor@Sun.COM if (DAT_SUCCESS != status) {
202*9517SBill.Taylor@Sun.COM if (NULL != g_dapl_provider_list.head) {
203*9517SBill.Taylor@Sun.COM dapl_os_free(g_dapl_provider_list.head,
204*9517SBill.Taylor@Sun.COM sizeof (DAPL_PROVIDER_LIST_NODE));
205*9517SBill.Taylor@Sun.COM }
206*9517SBill.Taylor@Sun.COM
207*9517SBill.Taylor@Sun.COM if (NULL != g_dapl_provider_list.tail) {
208*9517SBill.Taylor@Sun.COM dapl_os_free(g_dapl_provider_list.tail,
209*9517SBill.Taylor@Sun.COM sizeof (DAPL_PROVIDER_LIST_NODE));
210*9517SBill.Taylor@Sun.COM }
211*9517SBill.Taylor@Sun.COM }
212*9517SBill.Taylor@Sun.COM
213*9517SBill.Taylor@Sun.COM return (status);
214*9517SBill.Taylor@Sun.COM }
215*9517SBill.Taylor@Sun.COM
216*9517SBill.Taylor@Sun.COM
217*9517SBill.Taylor@Sun.COM DAT_RETURN
dapl_provider_list_destroy(void)218*9517SBill.Taylor@Sun.COM dapl_provider_list_destroy(void)
219*9517SBill.Taylor@Sun.COM {
220*9517SBill.Taylor@Sun.COM DAPL_PROVIDER_LIST_NODE *cur_node;
221*9517SBill.Taylor@Sun.COM
222*9517SBill.Taylor@Sun.COM while (NULL != g_dapl_provider_list.head) {
223*9517SBill.Taylor@Sun.COM cur_node = g_dapl_provider_list.head;
224*9517SBill.Taylor@Sun.COM g_dapl_provider_list.head = cur_node->next;
225*9517SBill.Taylor@Sun.COM
226*9517SBill.Taylor@Sun.COM dapl_os_free(cur_node, sizeof (DAPL_PROVIDER_LIST_NODE));
227*9517SBill.Taylor@Sun.COM }
228*9517SBill.Taylor@Sun.COM
229*9517SBill.Taylor@Sun.COM return (DAT_SUCCESS);
230*9517SBill.Taylor@Sun.COM }
231*9517SBill.Taylor@Sun.COM
232*9517SBill.Taylor@Sun.COM
233*9517SBill.Taylor@Sun.COM DAT_COUNT
dapl_provider_list_size(void)234*9517SBill.Taylor@Sun.COM dapl_provider_list_size(void)
235*9517SBill.Taylor@Sun.COM {
236*9517SBill.Taylor@Sun.COM return (g_dapl_provider_list.size);
237*9517SBill.Taylor@Sun.COM }
238*9517SBill.Taylor@Sun.COM
239*9517SBill.Taylor@Sun.COM
240*9517SBill.Taylor@Sun.COM DAT_RETURN
dapl_provider_list_insert(IN const char * name,IN DAT_PROVIDER ** p_data)241*9517SBill.Taylor@Sun.COM dapl_provider_list_insert(
242*9517SBill.Taylor@Sun.COM IN const char *name,
243*9517SBill.Taylor@Sun.COM IN DAT_PROVIDER **p_data)
244*9517SBill.Taylor@Sun.COM {
245*9517SBill.Taylor@Sun.COM DAPL_PROVIDER_LIST_NODE *cur_node, *prev_node, *next_node;
246*9517SBill.Taylor@Sun.COM DAT_RETURN status;
247*9517SBill.Taylor@Sun.COM unsigned int len;
248*9517SBill.Taylor@Sun.COM
249*9517SBill.Taylor@Sun.COM status = DAT_SUCCESS;
250*9517SBill.Taylor@Sun.COM *p_data = NULL;
251*9517SBill.Taylor@Sun.COM
252*9517SBill.Taylor@Sun.COM cur_node = dapl_os_alloc(sizeof (DAPL_PROVIDER_LIST_NODE));
253*9517SBill.Taylor@Sun.COM
254*9517SBill.Taylor@Sun.COM if (NULL == cur_node) {
255*9517SBill.Taylor@Sun.COM status = DAT_ERROR(DAT_INSUFFICIENT_RESOURCES,
256*9517SBill.Taylor@Sun.COM DAT_RESOURCE_MEMORY);
257*9517SBill.Taylor@Sun.COM goto bail;
258*9517SBill.Taylor@Sun.COM }
259*9517SBill.Taylor@Sun.COM
260*9517SBill.Taylor@Sun.COM len = dapl_os_strlen(name);
261*9517SBill.Taylor@Sun.COM
262*9517SBill.Taylor@Sun.COM if (DAT_NAME_MAX_LENGTH <= len) {
263*9517SBill.Taylor@Sun.COM status = DAT_ERROR(DAT_INSUFFICIENT_RESOURCES,
264*9517SBill.Taylor@Sun.COM DAT_RESOURCE_MEMORY);
265*9517SBill.Taylor@Sun.COM goto bail;
266*9517SBill.Taylor@Sun.COM }
267*9517SBill.Taylor@Sun.COM
268*9517SBill.Taylor@Sun.COM /* insert node at end of list to preserve registration order */
269*9517SBill.Taylor@Sun.COM prev_node = g_dapl_provider_list.tail->prev;
270*9517SBill.Taylor@Sun.COM next_node = g_dapl_provider_list.tail;
271*9517SBill.Taylor@Sun.COM
272*9517SBill.Taylor@Sun.COM (void) dapl_os_memcpy(cur_node->name, name, len);
273*9517SBill.Taylor@Sun.COM cur_node->name[len] = '\0';
274*9517SBill.Taylor@Sun.COM cur_node->data = g_dapl_provider_template;
275*9517SBill.Taylor@Sun.COM cur_node->data.device_name = cur_node->name;
276*9517SBill.Taylor@Sun.COM cur_node->next = next_node;
277*9517SBill.Taylor@Sun.COM cur_node->prev = prev_node;
278*9517SBill.Taylor@Sun.COM
279*9517SBill.Taylor@Sun.COM prev_node->next = cur_node;
280*9517SBill.Taylor@Sun.COM next_node->prev = cur_node;
281*9517SBill.Taylor@Sun.COM
282*9517SBill.Taylor@Sun.COM g_dapl_provider_list.size++;
283*9517SBill.Taylor@Sun.COM
284*9517SBill.Taylor@Sun.COM if (NULL != p_data) {
285*9517SBill.Taylor@Sun.COM *p_data = &cur_node->data;
286*9517SBill.Taylor@Sun.COM }
287*9517SBill.Taylor@Sun.COM
288*9517SBill.Taylor@Sun.COM bail:
289*9517SBill.Taylor@Sun.COM if (DAT_SUCCESS != status) {
290*9517SBill.Taylor@Sun.COM if (NULL != cur_node) {
291*9517SBill.Taylor@Sun.COM dapl_os_free(cur_node,
292*9517SBill.Taylor@Sun.COM sizeof (DAPL_PROVIDER_LIST_NODE));
293*9517SBill.Taylor@Sun.COM }
294*9517SBill.Taylor@Sun.COM }
295*9517SBill.Taylor@Sun.COM
296*9517SBill.Taylor@Sun.COM return (status);
297*9517SBill.Taylor@Sun.COM }
298*9517SBill.Taylor@Sun.COM
299*9517SBill.Taylor@Sun.COM
300*9517SBill.Taylor@Sun.COM DAT_RETURN
dapl_provider_list_search(IN const char * name,OUT DAT_PROVIDER ** p_data)301*9517SBill.Taylor@Sun.COM dapl_provider_list_search(
302*9517SBill.Taylor@Sun.COM IN const char *name,
303*9517SBill.Taylor@Sun.COM OUT DAT_PROVIDER **p_data)
304*9517SBill.Taylor@Sun.COM {
305*9517SBill.Taylor@Sun.COM DAPL_PROVIDER_LIST_NODE *cur_node;
306*9517SBill.Taylor@Sun.COM DAT_RETURN status;
307*9517SBill.Taylor@Sun.COM
308*9517SBill.Taylor@Sun.COM status = DAT_ERROR(DAT_NAME_NOT_FOUND, 0);
309*9517SBill.Taylor@Sun.COM
310*9517SBill.Taylor@Sun.COM for (cur_node = g_dapl_provider_list.head->next;
311*9517SBill.Taylor@Sun.COM g_dapl_provider_list.tail != cur_node;
312*9517SBill.Taylor@Sun.COM cur_node = cur_node->next) {
313*9517SBill.Taylor@Sun.COM if (dapl_provider_list_key_cmp(cur_node->name, name)) {
314*9517SBill.Taylor@Sun.COM if (NULL != p_data) {
315*9517SBill.Taylor@Sun.COM *p_data = &cur_node->data;
316*9517SBill.Taylor@Sun.COM }
317*9517SBill.Taylor@Sun.COM
318*9517SBill.Taylor@Sun.COM status = DAT_SUCCESS;
319*9517SBill.Taylor@Sun.COM goto bail;
320*9517SBill.Taylor@Sun.COM }
321*9517SBill.Taylor@Sun.COM }
322*9517SBill.Taylor@Sun.COM
323*9517SBill.Taylor@Sun.COM bail:
324*9517SBill.Taylor@Sun.COM return (status);
325*9517SBill.Taylor@Sun.COM }
326*9517SBill.Taylor@Sun.COM
327*9517SBill.Taylor@Sun.COM
328*9517SBill.Taylor@Sun.COM DAT_RETURN
dapl_provider_list_remove(IN const char * name)329*9517SBill.Taylor@Sun.COM dapl_provider_list_remove(
330*9517SBill.Taylor@Sun.COM IN const char *name)
331*9517SBill.Taylor@Sun.COM {
332*9517SBill.Taylor@Sun.COM DAPL_PROVIDER_LIST_NODE *cur_node, *prev_node, *next_node;
333*9517SBill.Taylor@Sun.COM DAT_RETURN status;
334*9517SBill.Taylor@Sun.COM
335*9517SBill.Taylor@Sun.COM status = DAT_ERROR(DAT_NAME_NOT_FOUND, 0);
336*9517SBill.Taylor@Sun.COM
337*9517SBill.Taylor@Sun.COM for (cur_node = g_dapl_provider_list.head->next;
338*9517SBill.Taylor@Sun.COM g_dapl_provider_list.tail != cur_node;
339*9517SBill.Taylor@Sun.COM cur_node = cur_node->next) {
340*9517SBill.Taylor@Sun.COM if (dapl_provider_list_key_cmp(cur_node->name, name)) {
341*9517SBill.Taylor@Sun.COM prev_node = cur_node->prev;
342*9517SBill.Taylor@Sun.COM next_node = cur_node->next;
343*9517SBill.Taylor@Sun.COM
344*9517SBill.Taylor@Sun.COM prev_node->next = next_node;
345*9517SBill.Taylor@Sun.COM next_node->prev = prev_node;
346*9517SBill.Taylor@Sun.COM
347*9517SBill.Taylor@Sun.COM dapl_os_free(cur_node,
348*9517SBill.Taylor@Sun.COM sizeof (DAPL_PROVIDER_LIST_NODE));
349*9517SBill.Taylor@Sun.COM
350*9517SBill.Taylor@Sun.COM g_dapl_provider_list.size--;
351*9517SBill.Taylor@Sun.COM
352*9517SBill.Taylor@Sun.COM status = DAT_SUCCESS;
353*9517SBill.Taylor@Sun.COM goto bail;
354*9517SBill.Taylor@Sun.COM }
355*9517SBill.Taylor@Sun.COM }
356*9517SBill.Taylor@Sun.COM
357*9517SBill.Taylor@Sun.COM bail:
358*9517SBill.Taylor@Sun.COM return (status);
359*9517SBill.Taylor@Sun.COM }
360*9517SBill.Taylor@Sun.COM
361*9517SBill.Taylor@Sun.COM
362*9517SBill.Taylor@Sun.COM DAT_BOOLEAN
dapl_provider_list_key_cmp(const char * name_a,const char * name_b)363*9517SBill.Taylor@Sun.COM dapl_provider_list_key_cmp(
364*9517SBill.Taylor@Sun.COM const char *name_a,
365*9517SBill.Taylor@Sun.COM const char *name_b)
366*9517SBill.Taylor@Sun.COM {
367*9517SBill.Taylor@Sun.COM unsigned int len;
368*9517SBill.Taylor@Sun.COM
369*9517SBill.Taylor@Sun.COM len = dapl_os_strlen(name_a);
370*9517SBill.Taylor@Sun.COM
371*9517SBill.Taylor@Sun.COM if (dapl_os_strlen(name_b) != len) {
372*9517SBill.Taylor@Sun.COM return (DAT_FALSE);
373*9517SBill.Taylor@Sun.COM } else if (dapl_os_memcmp(name_a, name_b, len)) {
374*9517SBill.Taylor@Sun.COM return (DAT_FALSE);
375*9517SBill.Taylor@Sun.COM } else {
376*9517SBill.Taylor@Sun.COM return (DAT_TRUE);
377*9517SBill.Taylor@Sun.COM }
378*9517SBill.Taylor@Sun.COM }
379