Whamcloud - gitweb
LU-2456 lnet: DLC user space Configuration library
[fs/lustre-release.git] / lnet / autoconf / lustre-lnet.m4
1 #
2 # LN_CONFIG_MAX_PAYLOAD
3 #
4 # configure maximum payload
5 #
6 AC_DEFUN([LN_CONFIG_MAX_PAYLOAD], [
7 AC_MSG_CHECKING([for non-default maximum LNET payload])
8 AC_ARG_WITH([max-payload-mb],
9         AC_HELP_STRING([--with-max-payload-mb=MBytes],
10                 [set maximum lnet payload in MBytes]),
11         [
12                 AC_MSG_RESULT([$with_max_payload_mb])
13                 CONFIG_LNET_MAX_PAYLOAD_MB=$with_max_payload_mb
14                 CONFIG_LNET_MAX_PAYLOAD="(($with_max_payload_mb)<<20)"
15         ], [
16                 AC_MSG_RESULT([no])
17                 CONFIG_LNET_MAX_PAYLOAD="LNET_MTU"
18         ])
19 AC_DEFINE_UNQUOTED(CONFIG_LNET_MAX_PAYLOAD, $CONFIG_LNET_MAX_PAYLOAD,
20         [Max LNET payload])
21 ]) # LN_CONFIG_MAX_PAYLOAD
22
23 #
24 # LN_CHECK_GCC_VERSION
25 #
26 # Check compiler version
27 #
28 AC_DEFUN([LN_CHECK_GCC_VERSION], [
29 AC_MSG_CHECKING([compiler version])
30 PTL_CC_VERSION=`$CC --version | awk '/^gcc/{print $ 3}'`
31 PTL_MIN_CC_VERSION="3.2.2"
32 v2n() {
33         awk -F. '{printf "%d\n", (($ 1)*100+($ 2))*100+($ 3)}'
34 }
35 if test -z "$PTL_CC_VERSION" -o \
36         $(echo $PTL_CC_VERSION | v2n) -ge $(echo $PTL_MIN_CC_VERSION | v2n); then
37         AC_MSG_RESULT([ok])
38 else
39         AC_MSG_RESULT([Buggy compiler found])
40         AC_MSG_ERROR([Need gcc version >= $PTL_MIN_CC_VERSION])
41 fi
42 ]) # LN_CHECK_GCC_VERSION
43
44 #
45 # LN_FUNC_DEV_GET_BY_NAME_2ARG
46 #
47 AC_DEFUN([LN_FUNC_DEV_GET_BY_NAME_2ARG], [
48 LB_CHECK_COMPILE([if 'dev_get_by_name' has two args],
49 dev_get_by_name_2args, [
50         #include <linux/netdevice.h>
51 ],[
52         dev_get_by_name(NULL, NULL);
53 ],[
54         AC_DEFINE(HAVE_DEV_GET_BY_NAME_2ARG, 1,
55                 [dev_get_by_name has 2 args])
56 ])
57 ]) # LN_FUNC_DEV_GET_BY_NAME_2ARG
58
59 #
60 # LN_CONFIG_AFFINITY
61 #
62 # check if cpu affinity is available/wanted
63 #
64 AC_DEFUN([LN_CONFIG_AFFINITY], [
65 AC_MSG_CHECKING([whether to enable CPU affinity support])
66 AC_ARG_ENABLE([affinity],
67         AC_HELP_STRING([--disable-affinity],
68                 [disable process/irq affinity]),
69         [], [enable_affinity="yes"])
70 AC_MSG_RESULT([$enable_affinity])
71 AS_IF([test "x$enable_affinity" = xyes], [
72         LB_CHECK_COMPILE([if Linux kernel has cpu affinity support],
73         set_cpus_allowed_ptr, [
74                 #include <linux/sched.h>
75         ],[
76                 struct task_struct *t;
77                 #if HAVE_CPUMASK_T
78                 cpumask_t     m;
79                 #else
80                 unsigned long m;
81                 #endif
82                 set_cpus_allowed_ptr(t, &m);
83         ],[
84                 AC_DEFINE(CPU_AFFINITY, 1,
85                         [kernel has cpu affinity support])
86         ])
87 ])
88 ]) # LN_CONFIG_AFFINITY
89
90 #
91 # LN_CONFIG_BACKOFF
92 #
93 # check if tunable tcp backoff is available/wanted
94 #
95 AC_DEFUN([LN_CONFIG_BACKOFF], [
96 AC_MSG_CHECKING([whether to enable tunable backoff TCP support])
97 AC_ARG_ENABLE([backoff],
98         AC_HELP_STRING([--disable-backoff],
99                 [disable socknal tunable backoff]),
100         [], [enable_backoff="yes"])
101 AC_MSG_RESULT([$enable_backoff])
102 AS_IF([test "x$enable_backoff" = xyes], [
103         AC_MSG_CHECKING([if Linux kernel has tunable backoff TCP support])
104         AS_IF([grep -c TCP_BACKOFF $LINUX/include/linux/tcp.h >/dev/null], [
105                 AC_MSG_RESULT([yes])
106                 AC_DEFINE(SOCKNAL_BACKOFF, 1, [use tunable backoff TCP])
107                 AS_IF([grep rto_max $LINUX/include/linux/tcp.h | grep -q __u16 >/dev/null],
108                         [AC_DEFINE(SOCKNAL_BACKOFF_MS, 1,
109                                 [tunable backoff TCP in ms])])
110         ], [
111                 AC_MSG_RESULT([no])
112         ])
113 ])
114 ]) # LN_CONFIG_BACKOFF
115
116 #
117 # LN_CONFIG_USOCKLND
118 #
119 # configure support for userspace TCP/IP LND
120 #
121 AC_DEFUN([LN_CONFIG_USOCKLND], [
122 AC_MSG_CHECKING([whether to enable usocklnd])
123 AC_ARG_ENABLE([usocklnd],
124         AC_HELP_STRING([--disable-usocklnd],
125                 [disable usocklnd]),
126         [], [enable_usocklnd="yes"])
127 AC_MSG_RESULT([$enable_usocklnd])
128 USOCKLND=""
129 AS_IF([test "x$enable_usocklnd" = xyes], [
130         AC_MSG_CHECKING([whether to build usocklnd])
131         AS_IF([test "$ENABLE_LIBPTHREAD" = yes], [
132                 AC_MSG_RESULT([yes])
133                 USOCKLND="usocklnd"
134         ], [
135                 AC_MSG_RESULT([no (libpthread not present or disabled)])
136         ])
137 ])
138 AC_SUBST(USOCKLND)
139 ]) # LN_CONFIG_USOCKLND
140
141 #
142 # LN_CONFIG_DLC
143 #
144 # Configure dlc if enabled
145 #
146 # if libyaml is set (IE libyaml installed) and enable_dlc = yes then build
147 # dlc other wise (IE if libyaml is not set or enable_dlc = no) then don't
148 # build dlc.
149 #
150 AC_DEFUN([LN_CONFIG_DLC], [
151         AC_CHECK_LIB([yaml],  [yaml_parser_initialize],[
152                 LIBYAML="libyaml"],[
153                 LIBYAML=""],[-lm])
154         AC_MSG_CHECKING([whether to enable dlc])
155         AC_ARG_ENABLE([dlc],
156                 AC_HELP_STRING([--disable-dlc],
157                         [disable building dlc]),
158                         [], [enable_dlc="yes"])
159         AC_MSG_RESULT([$enable_dlc])
160         USE_DLC=""
161         AS_IF([test "x$enable_dlc" = xyes],
162               [AS_IF([test "x$LIBYAML" = xlibyaml], [
163                         USE_DLC="yes"
164                 ], [
165                         AC_MSG_RESULT([no (libyaml not present)])
166                 ])
167         ])
168         AC_SUBST(USE_DLC)
169 ])
170
171 #
172 # LN_CONFIG_QUADRICS
173 #
174 # check if quadrics support is in this kernel
175 #
176 AC_DEFUN([LN_CONFIG_QUADRICS], [
177 AC_MSG_CHECKING([for QsNet sources])
178 AC_ARG_WITH([qsnet],
179         AC_HELP_STRING([--with-qsnet=path],
180                 [set path to qsnet source (default=$LINUX)]),
181         [QSNET=$with_qsnet], [QSNET=$LINUX])
182 AC_MSG_RESULT([$QSNET])
183
184 QSWLND=""
185 QSWCPPFLAGS=""
186 AC_MSG_CHECKING([if quadrics kernel headers are present])
187 AS_IF([test -d $QSNET/drivers/net/qsnet], [
188         AC_MSG_RESULT([yes])
189         QSWLND="qswlnd"
190         AC_MSG_CHECKING([for multirail EKC])
191         AS_IF([test -f $QSNET/include/elan/epcomms.h], [
192                 AC_MSG_RESULT([supported])
193                 QSNET=$(readlink --canonicalize $QSNET)
194                 QSWCPPFLAGS="-I$QSNET/include -DMULTIRAIL_EKC=1"
195         ], [
196                 AC_MSG_RESULT([not supported])
197                 AC_MSG_ERROR([Need multirail EKC])
198         ])
199
200         AS_IF([test x$QSNET = x$LINUX], [
201                 LB_CHECK_CONFIG([QSNET], [], [
202                         LB_CHECK_CONFIG([QSNET_MODULE], [], [
203                                 AC_MSG_WARN([QSNET is not enabled in this kernel; not building qswlnd.])
204                                 QSWLND=""
205                                 QSWCPPFLAGS=""
206                         ])
207                 ])
208         ])
209 ], [
210         AC_MSG_RESULT([no])
211 ])
212 AC_SUBST(QSWLND)
213 AC_SUBST(QSWCPPFLAGS)
214 ]) # LN_CONFIG_QUADRICS
215
216 #
217 # LN_CONFIG_MX
218 #
219 AC_DEFUN([LN_CONFIG_MX], [
220 # set default
221 MXPATH="/opt/mx"
222 AC_MSG_CHECKING([whether to enable Myrinet MX support])
223 AC_ARG_WITH([mx],
224         AC_HELP_STRING([--with-mx=path],
225                 [build mxlnd against path]),
226         [
227                 case $with_mx in
228                 yes) ENABLEMX=2 ;;
229                 no)  ENABLEMX=0 ;;
230                 *)   ENABLEMX=3; MXPATH=$with_mx ;;
231                 esac
232         ],[
233                 ENABLEMX=1
234         ])
235 AS_IF([test $ENABLEMX -eq 0], [
236         AC_MSG_RESULT([disabled])
237 ], [test ! \( -f ${MXPATH}/include/myriexpress.h -a \
238               -f ${MXPATH}/include/mx_kernel_api.h -a \
239               -f ${MXPATH}/include/mx_pin.h \)], [
240         AC_MSG_RESULT([no])
241         case $ENABLEMX in
242         1) ;;
243         2) AC_MSG_ERROR([Myrinet MX kernel headers not present]) ;;
244         3) AC_MSG_ERROR([bad --with-mx path]) ;;
245         *) AC_MSG_ERROR([internal error]) ;;
246         esac
247 ], [
248         AC_MSG_RESULT([check])
249         MXPATH=$(readlink --canonicalize $MXPATH)
250         MXCPPFLAGS="-I$MXPATH/include"
251         MXLIBS="-L$MXPATH/lib"
252         EXTRA_KCFLAGS_save="$EXTRA_KCFLAGS"
253         EXTRA_KCFLAGS="$EXTRA_KCFLAGS $MXCPPFLAGS"
254         LB_CHECK_COMPILE([if have Myrinet MX support],
255         myrinet_mx_support, [
256                 #define MX_KERNEL 1
257                 #include <mx_extensions.h>
258                 #include <myriexpress.h>
259         ],[
260                 mx_endpoint_t   end;
261                 mx_status_t     status;
262                 mx_request_t    request;
263                 int             result;
264                 mx_init();
265                 mx_open_endpoint(MX_ANY_NIC, MX_ANY_ENDPOINT, 0, NULL, 0, &end);
266                 mx_register_unexp_handler(end, (mx_unexp_handler_t) NULL, NULL);
267                 mx_wait_any(end, MX_INFINITE, 0LL, 0LL, &status, &result);
268                 mx_iconnect(end, 0LL, 0, 0, 0, NULL, &request);
269                 return 0;
270         ],[
271                 MXLND="mxlnd"
272         ],[
273                 case $ENABLEMX in
274                 1) ;;
275                 2) AC_MSG_ERROR([can't compile with Myrinet MX kernel headers]) ;;
276                 3) AC_MSG_ERROR([can't compile with Myrinet MX headers under $MXPATH]) ;;
277                 *) AC_MSG_ERROR([internal error]) ;;
278                 esac
279                 MXCPPFLAGS=""
280                 MXLIBS=""
281                 MXLND=""
282         ])
283         EXTRA_KCFLAGS="$EXTRA_KCFLAGS_save"
284 ])
285 AC_SUBST(MXCPPFLAGS)
286 AC_SUBST(MXLIBS)
287 AC_SUBST(MXLND)
288 ]) # LN_CONFIG_MX
289
290 #
291 # LN_CONFIG_O2IB
292 #
293 AC_DEFUN([LN_CONFIG_O2IB], [
294 AC_MSG_CHECKING([whether to use Compat RDMA])
295 AC_ARG_WITH([o2ib],
296         AC_HELP_STRING([--with-o2ib=path],
297                 [build o2iblnd against path]),
298         [
299                 case $with_o2ib in
300                 yes)    O2IBPATHS="$LINUX $LINUX/drivers/infiniband"
301                         ENABLEO2IB=2
302                         ;;
303                 no)     ENABLEO2IB=0
304                         ;;
305                 *)      O2IBPATHS=$with_o2ib
306                         ENABLEO2IB=3
307                         ;;
308                 esac
309         ],[
310                 O2IBPATHS="$LINUX $LINUX/drivers/infiniband"
311                 ENABLEO2IB=1
312         ])
313 AS_IF([test $ENABLEO2IB -eq 0], [
314         AC_MSG_RESULT([no])
315 ], [
316         o2ib_found=false
317         for O2IBPATH in $O2IBPATHS; do
318                 AS_IF([test \( -f ${O2IBPATH}/include/rdma/rdma_cm.h -a \
319                            -f ${O2IBPATH}/include/rdma/ib_cm.h -a \
320                            -f ${O2IBPATH}/include/rdma/ib_verbs.h -a \
321                            -f ${O2IBPATH}/include/rdma/ib_fmr_pool.h \)], [
322                         AS_IF([test \( -d ${O2IBPATH}/kernel_patches -a \
323                                    -f ${O2IBPATH}/Makefile \)], [
324                                 AC_MSG_RESULT([no])
325                                 AC_MSG_ERROR([
326
327 you appear to be trying to use the OFED distribution's source
328 directory (${O2IBPATH}) rather than the "development/headers"
329 directory which is likely in ${O2IBPATH%-*}
330 ])
331                         ])
332                         o2ib_found=true
333                         break
334                 ])
335         done
336         if ! $o2ib_found; then
337                 AC_MSG_RESULT([no])
338                 case $ENABLEO2IB in
339                         1) ;;
340                         2) AC_MSG_ERROR([kernel OpenIB gen2 headers not present]) ;;
341                         3) AC_MSG_ERROR([bad --with-o2ib path]) ;;
342                         *) AC_MSG_ERROR([internal error]) ;;
343                 esac
344         else
345                 compatrdma_found=false
346                 if test -f ${O2IBPATH}/include/linux/compat-2.6.h; then
347                         AC_MSG_RESULT([yes])
348                         compatrdma_found=true
349                         AC_DEFINE(HAVE_COMPAT_RDMA, 1, [compat rdma found])
350                 else
351                         AC_MSG_RESULT([no])
352                 fi
353                 if ! $compatrdma_found; then
354                         if test -f "$O2IBPATH/config.mk"; then
355                                 . "$O2IBPATH/config.mk"
356                         elif test -f "$O2IBPATH/ofed_patch.mk"; then
357                                 . "$O2IBPATH/ofed_patch.mk"
358                         fi
359                 else
360                         if test "x$RHEL_KERNEL" = xyes; then
361                                 case "$RHEL_KERNEL_VERSION" in
362                                         2.6.32-358*)
363                                                 EXTRA_OFED_INCLUDE="$EXTRA_OFED_INCLUDE -DCONFIG_COMPAT_RHEL_6_4" ;;
364                                         2.6.32-431*)
365                                                 EXTRA_OFED_INCLUDE="$EXTRA_OFED_INCLUDE -DCONFIG_COMPAT_RHEL_6_4 -DCONFIG_COMPAT_RHEL_6_5" ;;
366                                 esac
367                         elif test "x$SUSE_KERNEL" = xyes; then
368                                 SP=$(grep PATCHLEVEL /etc/SuSE-release | sed -e 's/.*= *//')
369                                 EXTRA_OFED_INCLUDE="$EXTRA_OFED_INCLUDE -DCONFIG_COMPAT_SLES_11_$SP"
370                         fi
371                 fi
372                 AC_MSG_CHECKING([whether to use any OFED backport headers])
373                 if test -n "$BACKPORT_INCLUDES"; then
374                         AC_MSG_RESULT([yes])
375                         OFED_BACKPORT_PATH="$O2IBPATH/${BACKPORT_INCLUDES/*\/kernel_addons/kernel_addons}/"
376                         EXTRA_OFED_INCLUDE="-I$OFED_BACKPORT_PATH $EXTRA_OFED_INCLUDE"
377                 else
378                         AC_MSG_RESULT([no])
379                 fi
380
381                 O2IBLND=""
382                 O2IBPATH=$(readlink --canonicalize $O2IBPATH)
383                 EXTRA_OFED_INCLUDE="$EXTRA_OFED_INCLUDE -I$O2IBPATH/include"
384                 LB_CHECK_COMPILE([whether to enable OpenIB gen2 support],
385                 openib_gen2_support, [
386                         #include <linux/version.h>
387                         #include <linux/pci.h>
388                         #include <linux/gfp.h>
389                         #ifdef HAVE_COMPAT_RDMA
390                         #include <linux/compat-2.6.h>
391                         #endif
392                         #include <rdma/rdma_cm.h>
393                         #include <rdma/ib_cm.h>
394                         #include <rdma/ib_verbs.h>
395                         #include <rdma/ib_fmr_pool.h>
396                 ],[
397                         struct rdma_cm_id      *cm_idi __attribute__ ((unused));
398                         struct rdma_conn_param  conn_param __attribute__ ((unused));
399                         struct ib_device_attr   device_attr __attribute__ ((unused));
400                         struct ib_qp_attr       qp_attr __attribute__ ((unused));
401                         struct ib_pool_fmr      pool_fmr __attribute__ ((unused));
402                         enum   ib_cm_rej_reason rej_reason __attribute__ ((unused));
403                         rdma_destroy_id(NULL);
404                 ],[
405                         O2IBLND="o2iblnd"
406                 ],[
407                         case $ENABLEO2IB in
408                         1) ;;
409                         2) AC_MSG_ERROR([can't compile with kernel OpenIB gen2 headers]) ;;
410                         3) AC_MSG_ERROR([can't compile with OpenIB gen2 headers under $O2IBPATH]) ;;
411                         *) AC_MSG_ERROR([internal error]) ;;
412                         esac
413                 ])
414                 # we know at this point that the found OFED source is good
415                 O2IB_SYMVER=""
416                 if test $ENABLEO2IB -eq 3 ; then
417                         # OFED default rpm not handle sles10 Modules.symvers name
418                         for name in Module.symvers Modules.symvers; do
419                                 if test -f $O2IBPATH/$name; then
420                                         O2IB_SYMVER=$name;
421                                         break;
422                                 fi
423                         done
424                         if test -n "$O2IB_SYMVER"; then
425                                 AC_MSG_NOTICE([adding $O2IBPATH/$O2IB_SYMVER to $PWD/$SYMVERFILE])
426                                 # strip out the existing symbols versions first
427                                 if test -f $PWD/$SYMVERFILE; then
428                                 egrep -v $(echo $(awk '{ print $2 }' $O2IBPATH/$O2IB_SYMVER) | tr ' ' '|') $PWD/$SYMVERFILE > $PWD/$SYMVERFILE.old
429                                 else
430                                         touch $PWD/$SYMVERFILE.old
431                                 fi
432                                 cat $PWD/$SYMVERFILE.old $O2IBPATH/$O2IB_SYMVER > $PWD/$SYMVERFILE
433                                 rm $PWD/$SYMVERFILE.old
434                         else
435                                 AC_MSG_ERROR([an external source tree was specified for o2iblnd however I could not find a $O2IBPATH/Module.symvers there])
436                         fi
437                 fi
438
439                 LN_CONFIG_OFED_SPEC
440         fi
441 ])
442 AC_SUBST(EXTRA_OFED_INCLUDE)
443 AC_SUBST(O2IBLND)
444
445 # In RHEL 6.2, rdma_create_id() takes the queue-pair type as a fourth argument
446 AS_IF([test $ENABLEO2IB -ne 0], [
447         LB_CHECK_COMPILE([if 'rdma_create_id' wants four args],
448         rdma_create_id_4args, [
449                 #ifdef HAVE_COMPAT_RDMA
450                 #include <linux/compat-2.6.h>
451                 #endif
452                 #include <rdma/rdma_cm.h>
453         ],[
454                 rdma_create_id(NULL, NULL, 0, 0);
455         ],[
456                 AC_DEFINE(HAVE_RDMA_CREATE_ID_4ARG, 1,
457                         [rdma_create_id wants 4 args])
458         ])
459 ])
460 ]) # LN_CONFIG_O2IB
461
462 #
463 # LN_CONFIG_RALND
464 #
465 # check whether to use the RapidArray lnd
466 #
467 AC_DEFUN([LN_CONFIG_RALND], [
468 RALND=""
469 RACPPFLAGS="-I${LINUX}/drivers/xd1/include"
470 EXTRA_KCFLAGS_save="$EXTRA_KCFLAGS"
471 EXTRA_KCFLAGS="$EXTRA_KCFLAGS $RACPPFLAGS"
472 LB_CHECK_COMPILE([if 'RapidArray' kernel headers are present],
473 RapkGetDeviceByIndex, [
474         #include <linux/types.h>
475         #include <rapl.h>
476 ],[
477         RAP_RETURN rc;
478         RAP_PVOID  dev_handle;
479         rc = RapkGetDeviceByIndex(0, NULL, &dev_handle);
480         return rc == RAP_SUCCESS ? 0 : 1;
481 ],[
482         RALND="ralnd"
483 ],[
484         RACPPFLAGS=""
485 ])
486 EXTRA_KCFLAGS="$EXTRA_KCFLAGS_save"
487 AC_SUBST(RACPPFLAGS)
488 AC_SUBST(RALND)
489 ]) # LN_CONFIG_RALND
490
491 #
492 # LN_CONFIG_GNILND
493 #
494 # check whether to use the Gemini Network Interface lnd
495 #
496 AC_DEFUN([LN_CONFIG_GNILND], [
497 AC_MSG_CHECKING([whether to enable GNI lnd])
498 AC_ARG_ENABLE([gni],
499         AC_HELP_STRING([--enable-gni],
500                 [enable GNI lnd]),
501         [], [enable_gni="no"])
502 AC_MSG_RESULT([$enable_gni])
503
504 AS_IF([test "x$enable_gni" = xyes], [
505         # GNICPPFLAGS was set in spec file
506         EXTRA_KCFLAGS_save="$EXTRA_KCFLAGS"
507         EXTRA_KCFLAGS="$EXTRA_KCFLAGS $GNICPPFLAGS"
508         LB_CHECK_COMPILE([if GNI kernel headers are present],
509         GNI_header, [
510                 #include <linux/types.h>
511                 #include <gni_pub.h>
512         ],[
513                 gni_cdm_handle_t kgni_domain;
514                 gni_return_t     rc;
515                 int              rrc;
516                 rc = gni_cdm_create(0, 1, 1, 0, &kgni_domain);
517                 rrc = (rc == GNI_RC_SUCCESS) ? 0 : 1;
518                 return rrc;
519         ],[
520                 GNILND="gnilnd"
521         ],[
522                 AC_MSG_ERROR([can't compile gnilnd with given GNICPPFLAGS: $GNICPPFLAGS])
523         ])
524         # at this point, we have gnilnd basic support,
525         # now check for extra features
526         LB_CHECK_COMPILE([to use RCA in gnilnd],
527         RCA_gnilnd, [
528                 #include <linux/types.h>
529                 #include <gni_pub.h>
530                 #include <krca_lib.h>
531         ],[
532                 gni_cdm_handle_t kgni_domain;
533                 gni_return_t     rc;
534                 krca_ticket_t    ticket = KRCA_NULL_TICKET;
535                 int              rrc;
536                 __u32            nid = 0, nic_addr;
537                 rc = gni_cdm_create(0, 1, 1, 0, &kgni_domain);
538                 rrc = (rc == GNI_RC_SUCCESS) ? 0 : 1;
539                 rrc += krca_nid_to_nicaddrs(nid, 1, &nic_addr);
540                 rrc += krca_register(&ticket, RCA_MAKE_SERVICE_INDEX(RCA_IO_CLASS, 9), 99, 0);
541                 return rrc;
542         ],[
543                 GNICPPFLAGS="$GNICPPFLAGS -DGNILND_USE_RCA=1"
544                 GNILNDRCA="gnilndrca"
545         ])
546         EXTRA_KCFLAGS="$EXTRA_KCFLAGS_save"
547 ])
548 AC_SUBST(GNICPPFLAGS)
549 AC_SUBST(GNILNDRCA)
550 AC_SUBST(GNILND)
551 ]) # LN_CONFIG_GNILND
552
553 #
554 # LN_CONFIG_USERSPACE
555 #
556 # This is defined but empty because it is called from
557 # build/autconf/lustre-build.m4 which is shared by all branches.
558 #
559 AC_DEFUN([LN_CONFIG_USERSPACE], [
560 ]) # LN_CONFIG_USERSPACE
561
562 #
563 # LN_CONFIG_TCP_SENDPAGE
564 #
565 # 2.6.36 tcp_sendpage() first parameter is 'struct sock' instead of 'struct socket'.
566 #
567 AC_DEFUN([LN_CONFIG_TCP_SENDPAGE], [
568 tmp_flags="$EXTRA_KCFLAGS"
569 EXTRA_KCFLAGS="-Werror"
570 LB_CHECK_COMPILE([if 'tcp_sendpage' first parameter is socket],
571 tcp_sendpage_socket, [
572         #include <linux/net.h>
573         #include <net/tcp.h>
574 ],[
575         tcp_sendpage((struct socket*)0, NULL, 0, 0, 0);
576 ],[
577         AC_DEFINE(HAVE_TCP_SENDPAGE_USE_SOCKET, 1,
578                 [tcp_sendpage use socket as first parameter])
579 ])
580 EXTRA_KCFLAGS="$tmp_flags"
581 ]) # LN_CONFIG_TCP_SENDPAGE
582
583 #
584 # LN_CONFIG_SK_DATA_READY
585 #
586 # 2.6.36 tcp_sendpage() first parameter is 'struct sock' instead of 'struct socket'.
587 #
588 AC_DEFUN([LN_CONFIG_SK_DATA_READY], [
589 tmp_flags="$EXTRA_KCFLAGS"
590 EXTRA_KCFLAGS="-Werror"
591 LB_CHECK_COMPILE([if 'sk_data_ready' takes only one argument],
592 sk_data_ready, [
593         #include <linux/net.h>
594         #include <net/sock.h>
595 ],[
596         ((struct sock *)0)->sk_data_ready(NULL);
597 ],[
598         AC_DEFINE(HAVE_SK_DATA_READY_ONE_ARG, 1,
599                 [sk_data_ready uses only one argument])
600 ])
601 EXTRA_KCFLAGS="$tmp_flags"
602 ]) # LN_CONFIG_SK_DATA_READY
603
604 #
605 # LN_PROG_LINUX
606 #
607 # LNet linux kernel checks
608 #
609 AC_DEFUN([LN_PROG_LINUX], [
610 AC_MSG_NOTICE([LNet kernel checks
611 ==============================================================================])
612
613 LN_FUNC_DEV_GET_BY_NAME_2ARG
614 LN_CONFIG_AFFINITY
615 LN_CONFIG_BACKOFF
616 LN_CONFIG_QUADRICS
617 LN_CONFIG_O2IB
618 LN_CONFIG_RALND
619 LN_CONFIG_GNILND
620 LN_CONFIG_MX
621 # 2.6.36
622 LN_CONFIG_TCP_SENDPAGE
623 # 3.15
624 LN_CONFIG_SK_DATA_READY
625 ]) # LN_PROG_LINUX
626
627 #
628 # LN_PATH_DEFAULTS
629 #
630 # default paths for installed files
631 #
632 AC_DEFUN([LN_PATH_DEFAULTS], [
633 ]) # LN_PATH_DEFAULTS
634
635 #
636 # LN_CONFIGURE
637 #
638 # other configure checks
639 #
640 AC_DEFUN([LN_CONFIGURE], [
641 AC_MSG_NOTICE([LNet core checks
642 ==============================================================================])
643
644 # lnet/utils/portals.c
645 AC_CHECK_HEADERS([netdb.h netinet/tcp.h asm/types.h endian.h sys/ioctl.h])
646 AC_CHECK_FUNCS([gethostbyname socket connect])
647
648 # lnet/utils/debug.c
649 AC_CHECK_HEADERS([linux/version.h])
650
651 # lnet/utils/wirecheck.c
652 AC_CHECK_FUNCS([strnlen])
653
654 # --------  Check for required packages  --------------
655
656 #
657 # LC_CONFIG_READLINE
658 #
659 # Build with readline
660 #
661 AC_MSG_CHECKING([whether to enable readline support])
662 AC_ARG_ENABLE(readline,
663         AC_HELP_STRING([--disable-readline],
664                 [disable readline support]),
665         [], [enable_readline="yes"])
666 AC_MSG_RESULT([$enable_readline])
667
668 # -------- check for readline if enabled ----
669
670 LIBREADLINE=""
671 AS_IF([test "x$enable_readline" = xyes], [
672         AC_CHECK_LIB([readline], [readline], [
673                 LIBREADLINE="-lreadline"
674                 AC_DEFINE(HAVE_LIBREADLINE, 1,
675                         [readline library is available])])
676 ])
677 AC_SUBST(LIBREADLINE)
678
679 # -------- enable acceptor libwrap (TCP wrappers) support? -------
680
681 AC_MSG_CHECKING([if libwrap support is requested])
682 AC_ARG_ENABLE([libwrap],
683         AC_HELP_STRING([--enable-libwrap], [use TCP wrappers]),
684         [case "${enableval}" in
685                 yes) enable_libwrap="yes" ;;
686                 no)  enable_libwrap="no" ;;
687                 *) AC_MSG_ERROR(bad value ${enableval} for --enable-libwrap) ;;
688         esac], [enable_libwrap="no"])
689 AC_MSG_RESULT([$enable_libwrap])
690 LIBWRAP=""
691 AS_IF([test "x$enable_libwrap" = xyes], [
692         LIBWRAP="-lwrap"
693         AC_DEFINE(HAVE_LIBWRAP, 1,
694                 [libwrap support is requested])
695 ])
696 AC_SUBST(LIBWRAP)
697
698 LN_CONFIG_MAX_PAYLOAD
699 LN_CONFIG_USOCKLND
700 LN_CONFIG_DLC
701 ]) # LN_CONFIGURE
702
703 #
704 # LN_CONDITIONALS
705 #
706 # AM_CONDITOINAL defines for lnet
707 #
708 AC_DEFUN([LN_CONDITIONALS], [
709 AM_CONDITIONAL(BUILD_QSWLND,     test x$QSWLND = "xqswlnd")
710 AM_CONDITIONAL(BUILD_MXLND,      test x$MXLND = "xmxlnd")
711 AM_CONDITIONAL(BUILD_O2IBLND,    test x$O2IBLND = "xo2iblnd")
712 AM_CONDITIONAL(BUILD_RALND,      test x$RALND = "xralnd")
713 AM_CONDITIONAL(BUILD_GNILND,     test x$GNILND = "xgnilnd")
714 AM_CONDITIONAL(BUILD_GNILND_RCA, test x$GNILNDRCA = "xgnilndrca")
715 AM_CONDITIONAL(BUILD_USOCKLND,   test x$USOCKLND = "xusocklnd")
716 AM_CONDITIONAL(BUILD_DLC,        test x$USE_DLC = "xyes")
717 ]) # LN_CONDITIONALS
718
719 #
720 # LN_CONFIG_FILES
721 #
722 # files that should be generated with AC_OUTPUT
723 #
724 AC_DEFUN([LN_CONFIG_FILES], [
725 AC_CONFIG_FILES([
726 lnet/Kernelenv
727 lnet/Makefile
728 lnet/autoMakefile
729 lnet/autoconf/Makefile
730 lnet/doc/Makefile
731 lnet/include/Makefile
732 lnet/include/lnet/Makefile
733 lnet/include/lnet/linux/Makefile
734 lnet/klnds/Makefile
735 lnet/klnds/autoMakefile
736 lnet/klnds/mxlnd/autoMakefile
737 lnet/klnds/mxlnd/Makefile
738 lnet/klnds/o2iblnd/Makefile
739 lnet/klnds/o2iblnd/autoMakefile
740 lnet/klnds/qswlnd/Makefile
741 lnet/klnds/qswlnd/autoMakefile
742 lnet/klnds/ralnd/Makefile
743 lnet/klnds/ralnd/autoMakefile
744 lnet/klnds/gnilnd/Makefile
745 lnet/klnds/gnilnd/autoMakefile
746 lnet/klnds/socklnd/Makefile
747 lnet/klnds/socklnd/autoMakefile
748 lnet/lnet/Makefile
749 lnet/lnet/autoMakefile
750 lnet/selftest/Makefile
751 lnet/selftest/autoMakefile
752 lnet/ulnds/Makefile
753 lnet/ulnds/autoMakefile
754 lnet/ulnds/socklnd/Makefile
755 lnet/utils/Makefile
756 lnet/utils/lnetconfig/Makefile
757 ])
758 ]) # LN_CONFIG_FILES