436df2fa96cca494ae00420c974cb81fda12694b
[~tnikolova/compat/.git] / config / rdma.m4
1 dnl Checks for the in-box ib_core
2 AC_DEFUN([RDMA_CONFIG_COMPAT],
3 [
4         AC_MSG_CHECKING([if ib_verbs has ib_dma_map_single])
5         LB_LINUX_TRY_COMPILE([
6                 #include <linux/version.h>
7                 #include <linux/pci.h>
8                 #include <linux/gfp.h>
9                 #include <rdma/ib_verbs.h>
10         ],[
11                 ib_dma_map_single(NULL, NULL, 0, 0);
12                 return 0;
13         ],[
14                 AC_MSG_RESULT(yes)
15                 AC_DEFINE(HAVE_INBOX_IB_DMA_MAP, 1,
16                           [ib_dma_map_single defined])
17         ],[
18                 AC_MSG_RESULT(no)
19         ])
20
21         AC_MSG_CHECKING([if ib_create_cq wants comp_vector])
22         LB_LINUX_TRY_COMPILE([
23                 #include <linux/version.h>
24                 #include <linux/pci.h>
25                 #include <linux/gfp.h>
26                 #include <rdma/ib_verbs.h>
27         ],[
28                 ib_create_cq(NULL, NULL, NULL, NULL, 0, 0);
29                 return 0;
30         ],[
31                 AC_MSG_RESULT(yes)
32                 AC_DEFINE(HAVE_INBOX_IB_COMP_VECTOR, 1,
33                           [has completion vector])
34         ],[
35                 AC_MSG_RESULT(no)
36         ])
37
38         AC_MSG_CHECKING([if rdma_cm has RDMA_CM_EVENT_ADDR_CHANGE])
39         LB_LINUX_TRY_COMPILE([
40                 #include <linux/version.h>
41                 #include <linux/pci.h>
42                 #include <linux/gfp.h>
43                 #include <rdma/rdma_cm.h>
44         ],[
45                 return (RDMA_CM_EVENT_ADDR_CHANGE == 0);
46         ],[
47                 AC_MSG_RESULT(yes)
48                 AC_DEFINE(HAVE_INBOX_RDMA_CMEV_ADDRCHANGE, 1,
49                           [has completion vector])
50         ],[
51                 AC_MSG_RESULT(no)
52         ])
53
54         AC_MSG_CHECKING([if rdma_cm has RDMA_CM_EVENT_TIMEWAIT_EXIT])
55         LB_LINUX_TRY_COMPILE([
56                 #include <linux/version.h>
57                 #include <linux/pci.h>
58                 #include <linux/gfp.h>
59                 #include <rdma/rdma_cm.h>
60         ],[
61                 return (RDMA_CM_EVENT_TIMEWAIT_EXIT == 0);
62         ],[
63                 AC_MSG_RESULT(yes)
64                 AC_DEFINE(HAVE_INBOX_RDMA_CMEV_TIMEWAIT_EXIT, 1,
65                           [has completion vector])
66         ],[
67                 AC_MSG_RESULT(no)
68         ])
69
70         AC_MSG_CHECKING([if rdma_cm has rdma_set_reuseaddr])
71         LB_LINUX_TRY_COMPILE([
72                 #include <linux/version.h>
73                 #include <linux/pci.h>
74                 #include <linux/gfp.h>
75                 #include <rdma/rdma_cm.h>
76         ],[
77                 rdma_set_reuseaddr(NULL, 1);
78                 return 0;
79         ],[
80                 AC_MSG_RESULT(yes)
81                 AC_DEFINE(HAVE_INBOX_RDMA_SET_REUSEADDR, 1,
82                           [rdma_set_reuse defined])
83         ],[
84                 AC_MSG_RESULT(no)
85         ])
86
87         AC_MSG_CHECKING([if struct ib_wc has member named ts])
88         LB_LINUX_TRY_COMPILE([
89                 #include <linux/version.h>
90                 #include <rdma/ib_verbs.h>
91         ],[
92         struct ib_wc wc;
93         wc->ts.timestamp = 0;
94
95                 return 0;
96         ],[
97                 AC_MSG_RESULT(yes)
98                 AC_DEFINE(HAVE_INBOX_IB_WC_TS, 1,
99                           [ib_wc has member named ts])
100         ],[
101                 AC_MSG_RESULT(no)
102         ])
103
104         AC_MSG_CHECKING([if struct ib_ah_attr has member named dmac])
105         LB_LINUX_TRY_COMPILE([
106                 #include <linux/version.h>
107                 #include <rdma/ib_verbs.h>
108         ],[
109         struct ib_ah_attr *ah_attr;
110         memset(ah_attr->dmac, 0, 6);
111
112                 return 0;
113         ],[
114                 AC_MSG_RESULT(yes)
115                 AC_DEFINE(HAVE_INBOX_IB_AH_ATTR_DMAC, 1,
116                           [ah_attr has member named dmac])
117         ],[
118                 AC_MSG_RESULT(no)
119         ])
120
121         AC_MSG_CHECKING([if struct ib_ah_attr has member named vlan_id])
122         LB_LINUX_TRY_COMPILE([
123                 #include <linux/version.h>
124                 #include <rdma/ib_verbs.h>
125         ],[
126         struct ib_ah_attr *ah_attr;
127         ah_attr->vlan_id = 0;
128
129                 return 0;
130         ],[
131                 AC_MSG_RESULT(yes)
132                 AC_DEFINE(HAVE_INBOX_IB_AH_ATTR_VLAN_ID, 1,
133                           [ah_attr has member named vlan_id])
134         ],[
135                 AC_MSG_RESULT(no)
136         ])
137 ])
138
139 dnl Examine kernel functionality
140 AC_DEFUN([LINUX_CONFIG_COMPAT],
141 [
142         AC_MSG_CHECKING([if file_system_type has mount method])
143         LB_LINUX_TRY_COMPILE([
144                 #include <linux/fs.h>
145         ],[
146                 struct file_system_type fst;
147
148                 fst.mount = NULL;
149                 return 0;
150         ],[
151                 AC_MSG_RESULT(yes)
152                 AC_DEFINE(HAVE_MOUNT_METHOD, 1,
153                           [mount method defined])
154         ],[
155                 AC_MSG_RESULT(no)
156         ])
157
158         AC_MSG_CHECKING([if kernel has get_next_ino])
159         LB_LINUX_TRY_COMPILE([
160                 #include <linux/fs.h>
161         ],[
162                 unsigned int ino;
163
164                 ino = get_next_ino();
165                 return 0;
166         ],[
167                 AC_MSG_RESULT(yes)
168                 AC_DEFINE(HAVE_GET_NEXT_INO, 1,
169                           [get_next_ino defined])
170         ],[
171                 AC_MSG_RESULT(no)
172         ])
173
174         AC_MSG_CHECKING([if kernel has ktime_get_ns])
175         LB_LINUX_TRY_COMPILE([
176                 #include <linux/ktime.h>
177         ],[
178                 unsigned long long ns;
179
180                 ns = ktime_get_ns();
181                 return 0;
182         ],[
183                 AC_MSG_RESULT(yes)
184                 AC_DEFINE(HAVE_KTIME_GET_NS, 1,
185                           [ktime_get_ns defined])
186         ],[
187                 AC_MSG_RESULT(no)
188         ])
189
190         AC_MSG_CHECKING([if svc_xprt_class has xcl_ident])
191         LB_LINUX_TRY_COMPILE([
192                 #include <linux/sunrpc/xprt.h>
193                 #include <linux/sunrpc/svc_xprt.h>
194         ],[
195                 struct svc_xprt_class svc_rdma_class = {
196                         .xcl_ident = XPRT_TRANSPORT_RDMA,
197                 };
198                 return 0;
199         ],[
200                 AC_MSG_RESULT(yes)
201                 AC_DEFINE(HAVE_XCL_IDENT, 1,
202                           [xcl_ident defined])
203         ],[
204                 AC_MSG_RESULT(no)
205         ])
206
207         AC_MSG_CHECKING([if struct ifla_vf_info has max_tx_rate])
208         LB_LINUX_TRY_COMPILE([
209                 #include <linux/if_link.h>
210         ],[
211                 struct ifla_vf_info *ivf;
212
213                 ivf->max_tx_rate = 0;
214                 ivf->min_tx_rate = 0;
215
216                 return 0;
217         ],[
218                 AC_MSG_RESULT(yes)
219                 AC_DEFINE(HAVE_TX_RATE_LIMIT, 1,
220                           [max_tx_rate is defined])
221         ],[
222                 AC_MSG_RESULT(no)
223         ])
224
225         AC_MSG_CHECKING([if struct ethtool_ops has get/set_rxfh])
226         LB_LINUX_TRY_COMPILE([
227                 #include <linux/ethtool.h>
228         ],[
229                 const struct ethtool_ops en_ethtool_ops = {
230                         .get_rxfh_indir_size = NULL,
231                         .get_rxfh = NULL,
232                         .set_rxfh = NULL,
233                 };
234
235                 return 0;
236         ],[
237                 AC_MSG_RESULT(yes)
238                 AC_DEFINE(HAVE_GET_SET_RXFH, 1,
239                           [get/set_rxfh is defined])
240         ],[
241                 AC_MSG_RESULT(no)
242         ])
243
244
245         AC_MSG_CHECKING([if struct ethtool_ops has get/set_tunable])
246         LB_LINUX_TRY_COMPILE([
247                 #include <linux/ethtool.h>
248         ],[
249                 const struct ethtool_ops en_ethtool_ops = {
250                         .get_tunable = NULL,
251                         .set_tunable = NULL,
252                 };
253
254                 return 0;
255         ],[
256                 AC_MSG_RESULT(yes)
257                 AC_DEFINE(HAVE_GET_SET_TUNABLE, 1,
258                           [get/set_tunable is defined])
259         ],[
260                 AC_MSG_RESULT(no)
261         ])
262
263         AC_MSG_CHECKING([if exist struct ethtool_ops_ext])
264         LB_LINUX_TRY_COMPILE([
265                 #include <linux/ethtool.h>
266         ],[
267                 const struct ethtool_ops_ext en_ethtool_ops_ext = {
268                         .size = sizeof(struct ethtool_ops_ext),
269                 };
270
271                 return 0;
272         ],[
273                 AC_MSG_RESULT(yes)
274                 AC_DEFINE(HAVE_ETHTOOL_OPS_EXT, 1,
275                           [struct ethtool_ops_ext is defined])
276         ],[
277                 AC_MSG_RESULT(no)
278         ])
279
280         AC_MSG_CHECKING([if struct ethtool_ops_ext has get/set_rxfh])
281         LB_LINUX_TRY_COMPILE([
282                 #include <linux/ethtool.h>
283         ],[
284                 const struct ethtool_ops_ext en_ethtool_ops_ext = {
285                         .get_rxfh_indir_size = NULL,
286                         .get_rxfh = NULL,
287                         .set_rxfh = NULL,
288                 };
289
290                 return 0;
291         ],[
292                 AC_MSG_RESULT(yes)
293                 AC_DEFINE(HAVE_GET_SET_RXFH_OPS_EXT, 1,
294                           [get/set_rxfh is defined])
295         ],[
296                 AC_MSG_RESULT(no)
297         ])
298
299         AC_MSG_CHECKING([if struct ethtool_ops_ext has get/set_rxfh_indir])
300         LB_LINUX_TRY_COMPILE([
301                 #include <linux/ethtool.h>
302         ],[
303                 const struct ethtool_ops_ext en_ethtool_ops_ext = {
304                         .get_rxfh_indir_size = NULL,
305                         .get_rxfh_indir = NULL,
306                         .set_rxfh_indir = NULL,
307                 };
308
309                 return 0;
310         ],[
311                 AC_MSG_RESULT(yes)
312                 AC_DEFINE(HAVE_GET_SET_RXFH_INDIR, 1,
313                           [get/set_rxfh_indir is defined])
314         ],[
315                 AC_MSG_RESULT(no)
316         ])
317
318         AC_MSG_CHECKING([if struct net_device has dev_port])
319         LB_LINUX_TRY_COMPILE([
320                 #include <linux/netdevice.h>
321         ],[
322                 struct net_device *dev = NULL;
323
324                 dev->dev_port = 0;
325
326                 return 0;
327         ],[
328                 AC_MSG_RESULT(yes)
329                 AC_DEFINE(HAVE_NET_DEVICE_DEV_PORT, 1,
330                           [dev_port is defined])
331         ],[
332                 AC_MSG_RESULT(no)
333         ])
334
335         AC_MSG_CHECKING([if struct ptp_clock_info has n_pins])
336         LB_LINUX_TRY_COMPILE([
337                 #include <linux/ptp_clock_kernel.h>
338         ],[
339                 struct ptp_clock_info *info;
340                 info->n_pins = 0;
341
342                 return 0;
343         ],[
344                 AC_MSG_RESULT(yes)
345                 AC_DEFINE(HAVE_PTP_CLOCK_INFO_N_PINS, 1,
346                           [n_pins is defined])
347         ],[
348                 AC_MSG_RESULT(no)
349         ])
350
351         AC_MSG_CHECKING([if pci.h pci_enable_msi_exact])
352         LB_LINUX_TRY_COMPILE([
353                 #include <linux/pci.h>
354         ],[
355                 int x = pci_enable_msi_exact(NULL, 0);
356
357                 return 0;
358         ],[
359                 AC_MSG_RESULT(yes)
360                 AC_DEFINE(HAVE_PCI_ENABLE_MSI_EXACT, 1,
361                           [pci_enable_msi_exact is defined])
362         ],[
363                 AC_MSG_RESULT(no)
364         ])
365
366         AC_MSG_CHECKING([if pci.h pci_enable_msix_range])
367         LB_LINUX_TRY_COMPILE([
368                 #include <linux/pci.h>
369         ],[
370                 int x = pci_enable_msix_range(NULL, 0, 0, 0);
371
372                 return 0;
373         ],[
374                 AC_MSG_RESULT(yes)
375                 AC_DEFINE(HAVE_PCI_ENABLE_MSIX_RANGE, 1,
376                           [pci_enable_msix_range is defined])
377         ],[
378                 AC_MSG_RESULT(no)
379         ])
380
381         AC_MSG_CHECKING([if pci.h pci_msix_vec_count])
382         LB_LINUX_TRY_COMPILE([
383                 #include <linux/pci.h>
384         ],[
385                 int x = pci_msix_vec_count(NULL);
386
387                 return 0;
388         ],[
389                 AC_MSG_RESULT(yes)
390                 AC_DEFINE(HAVE_PCI_MSIX_VEC_COUNT, 1,
391                           [pci_msix_vec_count is defined])
392         ],[
393                 AC_MSG_RESULT(no)
394         ])
395
396         AC_MSG_CHECKING([if pci_dev has msix_cap])
397         LB_LINUX_TRY_COMPILE([
398                 #include <linux/pci.h>
399         ],[
400                 struct pci_dev pdev;
401                 pdev.msix_cap = 0;
402
403                 return 0;
404         ],[
405                 AC_MSG_RESULT(yes)
406                 AC_DEFINE(HAVE_PCI_MSIX_CAP, 1,
407                           [msix_cap is defined])
408         ],[
409                 AC_MSG_RESULT(no)
410         ])
411
412         AC_MSG_CHECKING([if mm_struct has pinned_vm])
413         LB_LINUX_TRY_COMPILE([
414                 #include <linux/mm_types.h>
415         ],[
416                 struct mm_types mmt;
417                 mmt.pinned_vm = 0;
418
419                 return 0;
420         ],[
421                 AC_MSG_RESULT(yes)
422                 AC_DEFINE(HAVE_PINNED_VM, 1,
423                           [pinned_vm is defined])
424         ],[
425                 AC_MSG_RESULT(no)
426         ])
427
428         AC_MSG_CHECKING([if kernel has idr_alloc])
429         LB_LINUX_TRY_COMPILE([
430                 #include <linux/idr.h>
431         ],[
432                 int x;
433                 x =  idr_alloc(NULL, NULL, 0, 0, 0);
434
435                 return 0;
436         ],[
437                 AC_MSG_RESULT(yes)
438                 AC_DEFINE(HAVE_IDR_ALLOC, 1,
439                           [idr_alloc is defined])
440         ],[
441                 AC_MSG_RESULT(no)
442         ])
443
444         AC_MSG_CHECKING([if kernel has percpu variables])
445         LB_LINUX_TRY_COMPILE([
446                 #include <linux/percpu.h>
447         ],[
448                 static DEFINE_PER_CPU(unsigned int, x);
449                 this_cpu_inc(x);
450
451                 return 0;
452         ],[
453                 AC_MSG_RESULT(yes)
454                 AC_DEFINE(HAVE_PERCPU_VARS, 1,
455                           [percpu variables are defined])
456         ],[
457                 AC_MSG_RESULT(no)
458         ])
459
460         AC_MSG_CHECKING([if struct iscsi_transport has attr_is_visible])
461         LB_LINUX_TRY_COMPILE([
462                 #include <scsi/scsi_transport_iscsi.h>
463         ],[
464                 static struct iscsi_transport iscsi_iser_transport = {
465                         .attr_is_visible = NULL,
466                 };
467
468                 return 0;
469         ],[
470                 AC_MSG_RESULT(yes)
471                 AC_DEFINE(HAVE_ISCSI_ATTR_IS_VISIBLE, 1,
472                           [attr_is_visible is defined])
473         ],[
474                 AC_MSG_RESULT(no)
475         ])
476
477         AC_MSG_CHECKING([if struct iscsi_transport has get_ep_param])
478         LB_LINUX_TRY_COMPILE([
479                 #include <scsi/scsi_transport_iscsi.h>
480         ],[
481                 static struct iscsi_transport iscsi_iser_transport = {
482                         .get_ep_param = NULL,
483                 };
484
485                 return 0;
486         ],[
487                 AC_MSG_RESULT(yes)
488                 AC_DEFINE(HAVE_ISCSI_GET_EP_PARAM, 1,
489                           [get_ep_param is defined])
490         ],[
491                 AC_MSG_RESULT(no)
492         ])
493
494         AC_MSG_CHECKING([if struct iscsi_transport has check_protection])
495         LB_LINUX_TRY_COMPILE([
496                 #include <scsi/scsi_transport_iscsi.h>
497         ],[
498                 static struct iscsi_transport iscsi_iser_transport = {
499                         .check_protection = NULL,
500                 };
501
502                 return 0;
503         ],[
504                 AC_MSG_RESULT(yes)
505                 AC_DEFINE(HAVE_ISCSI_CHECK_PROTECTION, 1,
506                           [check_protection is defined])
507         ],[
508                 AC_MSG_RESULT(no)
509         ])
510
511         AC_MSG_CHECKING([if iscsi_proto.h has struct iscsi_scsi_req])
512         LB_LINUX_TRY_COMPILE([
513                 #include <scsi/iscsi_proto.h>
514         ],[
515                 struct iscsi_scsi_req req = {
516                         .opcode = 0,
517                 };
518
519                 return 0;
520         ],[
521                 AC_MSG_RESULT(yes)
522                 AC_DEFINE(HAVE_ISCSI_SCSI_REQ, 1,
523                           [struct iscsi_scsi_req is defined])
524         ],[
525                 AC_MSG_RESULT(no)
526         ])
527
528         AC_MSG_CHECKING([if struct request_queue has request_fn_active])
529         LB_LINUX_TRY_COMPILE([
530                 #include <linux/blkdev.h>
531         ],[
532                 struct request_queue rq = {
533                         .request_fn_active = 0,
534                 };
535
536                 return 0;
537         ],[
538                 AC_MSG_RESULT(yes)
539                 AC_DEFINE(HAVE_REQUEST_QUEUE_REQUEST_FN_ACTIVE, 1,
540                           [struct request_queue has request_fn_active])
541         ],[
542                 AC_MSG_RESULT(no)
543         ])
544
545         AC_MSG_CHECKING([if netdevice.h has select_queue_fallback_t])
546         LB_LINUX_TRY_COMPILE([
547                 #include <linux/netdevice.h>
548         ],[
549                 select_queue_fallback_t fallback;
550
551                 fallback = NULL;
552
553                 return 0;
554         ],[
555                 AC_MSG_RESULT(yes)
556                 AC_DEFINE(HAVE_SELECT_QUEUE_FALLBACK_T, 1,
557                           [select_queue_fallback_t is defined])
558         ],[
559                 AC_MSG_RESULT(no)
560         ])
561
562         AC_MSG_CHECKING([if netdevice.h has skb_set_hash])
563         LB_LINUX_TRY_COMPILE([
564                 #include <linux/netdevice.h>
565         ],[
566                 skb_set_hash(NULL, 0, PKT_HASH_TYPE_L3);
567
568                 return 0;
569         ],[
570                 AC_MSG_RESULT(yes)
571                 AC_DEFINE(HAVE_SKB_SET_HASH, 1,
572                           [skb_set_hash is defined])
573         ],[
574                 AC_MSG_RESULT(no)
575         ])
576
577         AC_MSG_CHECKING([if netdevice.h has alloc_netdev with 4 params])
578         LB_LINUX_TRY_COMPILE([
579                 #include <linux/netdevice.h>
580         ],[
581                 struct net_device *dev;
582
583                 dev = alloc_netdev(0, NULL, 0, NULL);
584
585                 return 0;
586         ],[
587                 AC_MSG_RESULT(yes)
588                 AC_DEFINE(HAVE_ALLOC_NETDEV_4P, 1,
589                           [alloc_netdev has 4 parameters])
590         ],[
591                 AC_MSG_RESULT(no)
592         ])
593
594         AC_MSG_CHECKING([if sockios.h has SIOCGHWTSTAMP])
595         LB_LINUX_TRY_COMPILE([
596                 #include <linux/sockios.h>
597         ],[
598                 int x = SIOCGHWTSTAMP;
599
600                 return 0;
601         ],[
602                 AC_MSG_RESULT(yes)
603                 AC_DEFINE(HAVE_SIOCGHWTSTAMP, 1,
604                           [SIOCGHWTSTAMP is defined])
605         ],[
606                 AC_MSG_RESULT(no)
607         ])
608
609         AC_MSG_CHECKING([if ip.h inet_get_local_port_range has 3 parameters])
610         LB_LINUX_TRY_COMPILE([
611                 #include <net/ip.h>
612         ],[
613                 inet_get_local_port_range(NULL, NULL, NULL);
614
615                 return 0;
616         ],[
617                 AC_MSG_RESULT(yes)
618                 AC_DEFINE(HAVE_INET_GET_LOCAL_PORT_RANGE_3_PARAMS, 1,
619                           [inet_get_local_port_range has 3 parameters])
620         ],[
621                 AC_MSG_RESULT(no)
622         ])
623
624         AC_MSG_CHECKING([if net.h has net_get_random_once])
625         LB_LINUX_TRY_COMPILE([
626                 #include <linux/net.h>
627         ],[
628                 net_get_random_once(NULL, 0);
629
630                 return 0;
631         ],[
632                 AC_MSG_RESULT(yes)
633                 AC_DEFINE(HAVE_NET_GET_RANDOM_ONCE, 1,
634                           [net_get_random_once is defined])
635         ],[
636                 AC_MSG_RESULT(no)
637         ])
638
639         AC_MSG_CHECKING([if inet_sock.h has __inet_ehashfn])
640         LB_LINUX_TRY_COMPILE([
641                 #include <net/inet_sock.h>
642         ],[
643                 __inet_ehashfn(0, 0, 0, 0, 0);
644
645                 return 0;
646         ],[
647                 AC_MSG_RESULT(yes)
648                 AC_DEFINE(HAVE_INET_EHASHFN, 1,
649                           [__inet_ehashfn is defined])
650         ],[
651                 AC_MSG_RESULT(no)
652         ])
653
654         AC_MSG_CHECKING([if err.h has PTR_ERR_OR_ZERO])
655         LB_LINUX_TRY_COMPILE([
656                 #include <linux/err.h>
657         ],[
658                 int x = PTR_ERR_OR_ZERO(NULL);
659
660                 return 0;
661         ],[
662                 AC_MSG_RESULT(yes)
663                 AC_DEFINE(HAVE_PTR_ERR_OR_ZERO, 1,
664                           [PTR_ERR_OR_ZERO is defined])
665         ],[
666                 AC_MSG_RESULT(no)
667         ])
668
669         AC_MSG_CHECKING([if struct iscsi_session has discovery_sess])
670         LB_LINUX_TRY_COMPILE([
671                 #include <scsi/libiscsi.h>
672         ],[
673                 struct iscsi_session session;
674                 session.discovery_sess = 0;
675
676                 return 0;
677         ],[
678                 AC_MSG_RESULT(yes)
679                 AC_DEFINE(HAVE_ISCSI_DISCOVERY_SESS, 1,
680                           [discovery_sess is defined])
681         ],[
682                 AC_MSG_RESULT(no)
683         ])
684
685         AC_MSG_CHECKING([if enum iscsi_param has ISCSI_PARAM_DISCOVERY_SESS])
686         LB_LINUX_TRY_COMPILE([
687                 #include <scsi/iscsi_if.h>
688         ],[
689                 int x = ISCSI_PARAM_DISCOVERY_SESS;
690
691                 return 0;
692         ],[
693                 AC_MSG_RESULT(yes)
694                 AC_DEFINE(HAVE_ISCSI_PARAM_DISCOVERY_SESS, 1,
695                           [ISCSI_PARAM_DISCOVERY_SESS is defined])
696         ],[
697                 AC_MSG_RESULT(no)
698         ])
699
700         AC_MSG_CHECKING([if pci.h has enum pcie_link_width])
701         LB_LINUX_TRY_COMPILE([
702                 #include <linux/pci.h>
703         ],[
704                 enum pcie_link_width width = PCIE_LNK_WIDTH_UNKNOWN;
705
706                 return 0;
707         ],[
708                 AC_MSG_RESULT(yes)
709                 AC_DEFINE(HAVE_PCIE_LINK_WIDTH, 1,
710                           [pcie_link_width is defined])
711         ],[
712                 AC_MSG_RESULT(no)
713         ])
714
715         AC_MSG_CHECKING([if pci.h has enum pci_bus_speed])
716         LB_LINUX_TRY_COMPILE([
717                 #include <linux/pci.h>
718         ],[
719                 enum pci_bus_speed speed = PCI_SPEED_UNKNOWN;
720
721                 return 0;
722         ],[
723                 AC_MSG_RESULT(yes)
724                 AC_DEFINE(HAVE_PCI_BUS_SPEED, 1,
725                           [pci_bus_speed is defined])
726         ],[
727                 AC_MSG_RESULT(no)
728         ])
729
730         AC_MSG_CHECKING([if netdevice.h has struct netdev_phys_port_id])
731         LB_LINUX_TRY_COMPILE([
732                 #include <linux/netdevice.h>
733         ],[
734                 struct netdev_phys_port_id *x = NULL;
735
736                 return 0;
737         ],[
738                 AC_MSG_RESULT(yes)
739                 AC_DEFINE(HAVE_NETDEV_PHYS_PORT_ID, 1,
740                           [netdev_phys_port_id is defined])
741         ],[
742                 AC_MSG_RESULT(no)
743         ])
744
745         AC_MSG_CHECKING([if struct ifla_vf_info has linkstate])
746         LB_LINUX_TRY_COMPILE([
747                 #include <linux/if_link.h>
748         ],[
749                 struct ifla_vf_info *x;
750                 x->linkstate = 0;
751
752                 return 0;
753         ],[
754                 AC_MSG_RESULT(yes)
755                 AC_DEFINE(HAVE_LINKSTATE, 1,
756                           [linkstate is defined])
757         ],[
758                 AC_MSG_RESULT(no)
759         ])
760
761         AC_MSG_CHECKING([if busy_poll.h has skb_mark_napi_id])
762         LB_LINUX_TRY_COMPILE([
763                 #include <net/busy_poll.h>
764         ],[
765                 skb_mark_napi_id(NULL, NULL);
766
767                 return 0;
768         ],[
769                 AC_MSG_RESULT(yes)
770                 AC_DEFINE(HAVE_SKB_MARK_NAPI_ID, 1,
771                           [skb_mark_napi_id is defined])
772         ],[
773                 AC_MSG_RESULT(no)
774         ])
775
776         AC_MSG_CHECKING([if netdevice.h has napi_hash_add])
777         LB_LINUX_TRY_COMPILE([
778                 #include <linux/netdevice.h>
779         ],[
780                 napi_hash_add(NULL);
781
782                 return 0;
783         ],[
784                 AC_MSG_RESULT(yes)
785                 AC_DEFINE(HAVE_NAPI_HASH_ADD, 1,
786                           [napi_hash_add is defined])
787         ],[
788                 AC_MSG_RESULT(no)
789         ])
790
791         AC_MSG_CHECKING([if netdevice.h has netif_keep_dst])
792         LB_LINUX_TRY_COMPILE([
793                 #include <linux/netdevice.h>
794         ],[
795                 netif_keep_dst(NULL);
796
797                 return 0;
798         ],[
799                 AC_MSG_RESULT(yes)
800                 AC_DEFINE(HAVE_NETIF_KEEP_DST, 1,
801                           [netif_keep_dst is defined])
802         ],[
803                 AC_MSG_RESULT(no)
804         ])
805
806         AC_MSG_CHECKING([if netdevice.h has dev_consume_skb_any])
807         LB_LINUX_TRY_COMPILE([
808                 #include <linux/netdevice.h>
809         ],[
810                 dev_consume_skb_any(NULL);
811
812                 return 0;
813         ],[
814                 AC_MSG_RESULT(yes)
815                 AC_DEFINE(HAVE_DEV_CONSUME_SKB_ANY, 1,
816                           [dev_consume_skb_any is defined])
817         ],[
818                 AC_MSG_RESULT(no)
819         ])
820
821         AC_MSG_CHECKING([if netdevice.h has netdev_txq_bql_complete_prefetchw])
822         LB_LINUX_TRY_COMPILE([
823                 #include <linux/netdevice.h>
824         ],[
825                 netdev_txq_bql_complete_prefetchw(NULL);
826                 netdev_txq_bql_enqueue_prefetchw(NULL);
827
828                 return 0;
829         ],[
830                 AC_MSG_RESULT(yes)
831                 AC_DEFINE(HAVE_NETDEV_TXQ_BQL_PREFETCHW, 1,
832                           [netdev_txq_bql_complete_prefetchw is defined])
833         ],[
834                 AC_MSG_RESULT(no)
835         ])
836
837         AC_MSG_CHECKING([if struct sk_buff has xmit_more])
838         LB_LINUX_TRY_COMPILE([
839                 #include <linux/skbuff.h>
840         ],[
841                 struct sk_buff *skb;
842                 skb->xmit_more = 0;
843
844                 return 0;
845         ],[
846                 AC_MSG_RESULT(yes)
847                 AC_DEFINE(HAVE_SK_BUFF_XMIT_MORE, 1,
848                           [xmit_more is defined])
849         ],[
850                 AC_MSG_RESULT(no)
851         ])
852
853         AC_MSG_CHECKING([if struct sk_buff has encapsulation])
854         LB_LINUX_TRY_COMPILE([
855                 #include <linux/skbuff.h>
856         ],[
857                 struct sk_buff *skb;
858                 skb->encapsulation = 0;
859
860                 return 0;
861         ],[
862                 AC_MSG_RESULT(yes)
863                 AC_DEFINE(HAVE_SK_BUFF_ENCAPSULATION, 1,
864                           [encapsulation is defined])
865         ],[
866                 AC_MSG_RESULT(no)
867         ])
868
869         AC_MSG_CHECKING([if etherdevice.h has eth_get_headlen])
870         LB_LINUX_TRY_COMPILE([
871                 #include <linux/etherdevice.h>
872         ],[
873                 eth_get_headlen(NULL, 0);
874
875                 return 0;
876         ],[
877                 AC_MSG_RESULT(yes)
878                 AC_DEFINE(HAVE_ETH_GET_HEADLEN, 1,
879                           [eth_get_headlen is defined])
880         ],[
881                 AC_MSG_RESULT(no)
882         ])
883
884         AC_MSG_CHECKING([if struct sk_buff has csum_level])
885         LB_LINUX_TRY_COMPILE([
886                 #include <linux/skbuff.h>
887         ],[
888                 struct sk_buff *skb;
889                 skb->csum_level = 0;
890
891                 return 0;
892         ],[
893                 AC_MSG_RESULT(yes)
894                 AC_DEFINE(HAVE_SK_BUFF_CSUM_LEVEL, 1,
895                           [csum_level is defined])
896         ],[
897                 AC_MSG_RESULT(no)
898         ])
899
900         AC_MSG_CHECKING([if struct skbuff.h has skb_inner_transport_header])
901         LB_LINUX_TRY_COMPILE([
902                 #include <linux/skbuff.h>
903         ],[
904                 skb_inner_transport_header(NULL);
905
906                 return 0;
907         ],[
908                 AC_MSG_RESULT(yes)
909                 AC_DEFINE(HAVE_SKB_INNER_TRANSPORT_HEADER, 1,
910                           [skb_inner_transport_header is defined])
911         ],[
912                 AC_MSG_RESULT(no)
913         ])
914
915         AC_MSG_CHECKING([if struct skbuff.h has skb_inner_network_header])
916         LB_LINUX_TRY_COMPILE([
917                 #include <linux/skbuff.h>
918         ],[
919                 skb_inner_network_header(NULL);
920
921                 return 0;
922         ],[
923                 AC_MSG_RESULT(yes)
924                 AC_DEFINE(HAVE_SKB_INNER_NETWORK_HEADER, 1,
925                           [skb_inner_network_header is defined])
926         ],[
927                 AC_MSG_RESULT(no)
928         ])
929
930         AC_MSG_CHECKING([if if_vlan.h has vlan_dev_get_egress_qos_mask])
931         LB_LINUX_TRY_COMPILE([
932                 #include <linux/if_vlan.h>
933         ],[
934                 vlan_dev_get_egress_qos_mask(NULL, 0);
935
936                 return 0;
937         ],[
938                 AC_MSG_RESULT(yes)
939                 AC_DEFINE(HAVE_VLAN_DEV_GET_EGRESS_QOS_MASK, 1,
940                           [vlan_dev_get_egress_qos_mask is defined])
941         ],[
942                 AC_MSG_RESULT(no)
943         ])
944
945         AC_MSG_CHECKING([if netdevice.h has netdev_get_prio_tc_map])
946         LB_LINUX_TRY_COMPILE([
947                 #include <linux/netdevice.h>
948         ],[
949                 netdev_get_prio_tc_map(NULL, 0);
950
951                 return 0;
952         ],[
953                 AC_MSG_RESULT(yes)
954                 AC_DEFINE(HAVE_NETDEV_GET_PRIO_TC_MAP, 1,
955                           [netdev_get_prio_tc_map is defined])
956         ],[
957                 AC_MSG_RESULT(no)
958         ])
959
960         AC_MSG_CHECKING([if if_vlan.h has __vlan_find_dev_deep_rcu])
961         LB_LINUX_TRY_COMPILE([
962                 #include <linux/if_vlan.h>
963         ],[
964                 __vlan_find_dev_deep_rcu(NULL, 0, 0);
965
966                 return 0;
967         ],[
968                 AC_MSG_RESULT(yes)
969                 AC_DEFINE(HAVE___VLAN_FIND_DEV_DEEP_RCU, 1,
970                           [__vlan_find_dev_deep_rcu is defined])
971         ],[
972                 AC_MSG_RESULT(no)
973         ])
974
975         AC_MSG_CHECKING([if ndo_select_queue has accel_priv])
976         LB_LINUX_TRY_COMPILE([
977                 #include <linux/netdevice.h>
978
979                 static u16 select_queue(struct net_device *dev, struct sk_buff *skb,
980                                         void *accel_priv)
981                 {
982                         return 0;
983                 }
984         ],[
985                 struct net_device_opts ndops;
986
987                 ndops.ndo_select_queue = select_queue;
988
989                 return 0;
990         ],[
991                 AC_MSG_RESULT(yes)
992                 AC_DEFINE(NDO_SELECT_QUEUE_HAS_ACCEL_PRIV, 1,
993                           [ndo_select_queue has accel_priv])
994         ],[
995                 AC_MSG_RESULT(no)
996         ])
997
998         AC_MSG_CHECKING([if include/net/bonding.h exists])
999         LB_LINUX_TRY_COMPILE([
1000                 #include <net/bonding.h>
1001         ],[
1002                 return 0;
1003         ],[
1004                 AC_MSG_RESULT(yes)
1005                 AC_DEFINE(HAVE_BONDING_H, 1,
1006                           [include/net/bonding.h exists])
1007         ],[
1008                 AC_MSG_RESULT(no)
1009         ])
1010
1011         AC_MSG_CHECKING([if bonding.h bond_for_each_slave has 3 parameters])
1012         LB_LINUX_TRY_COMPILE([
1013                 #include "../drivers/net/bonding/bonding.h"
1014         ],[
1015                 struct bonding *bond = NULL;
1016                 struct list_head *iter = NULL;
1017                 struct slave *slave = NULL;
1018
1019                 bond_for_each_slave(bond, slave, iter) ;
1020
1021                 return 0;
1022         ],[
1023                 AC_MSG_RESULT(yes)
1024                 AC_DEFINE(HAVE_BOND_FOR_EACH_SLAVE_3_PARAMS, 1,
1025                           [bond_for_each_slave has 3 parameters])
1026         ],[
1027                 AC_MSG_RESULT(no)
1028         ])
1029
1030
1031         AC_MSG_CHECKING([if u64_stats_sync.h has u64_stats_init])
1032         LB_LINUX_TRY_COMPILE([
1033                 #include <linux/u64_stats_sync.h>
1034         ],[
1035                 struct u64_stats_sync sync;
1036                 u64_stats_init(&sync);
1037
1038                 return 0;
1039         ],[
1040                 AC_MSG_RESULT(yes)
1041                 AC_DEFINE(HAVE_U64_STATS_SYNC, 1,
1042                           [u64_stats_sync is defined])
1043         ],[
1044                 AC_MSG_RESULT(no)
1045         ])
1046
1047         AC_MSG_CHECKING([if u64_stats_sync.h has u64_stats_fetch_begin_irq])
1048         LB_LINUX_TRY_COMPILE([
1049                 #include <linux/u64_stats_sync.h>
1050         ],[
1051                 struct u64_stats_sync sync;
1052                 u64_stats_fetch_begin_irq(&sync);
1053
1054                 return 0;
1055         ],[
1056                 AC_MSG_RESULT(yes)
1057                 AC_DEFINE(HAVE_U64_STATS_FETCH_BEGIN_IRQ, 1,
1058                           [u64_stats_fetch_begin_irq is defined])
1059         ],[
1060                 AC_MSG_RESULT(no)
1061         ])
1062         AC_MSG_CHECKING([if etherdevice.h has ether_addr_copy])
1063         LB_LINUX_TRY_COMPILE([
1064                 #include <linux/etherdevice.h>
1065         ],[
1066                 char dest[6], src[6];
1067                 ether_addr_copy(&dest, &src);
1068
1069                 return 0;
1070         ],[
1071                 AC_MSG_RESULT(yes)
1072                 AC_DEFINE(HAVE_ETHER_ADDR_COPY, 1,
1073                           [ether_addr_copy is defined])
1074         ],[
1075                 AC_MSG_RESULT(no)
1076         ])
1077
1078         AC_MSG_CHECKING([if struct net_device_ops has *ndo_set_vf_rate])
1079         LB_LINUX_TRY_COMPILE([
1080                 #include <linux/netdevice.h>
1081
1082                 int set_vf_rate(struct net_device *dev, int vf, int min_tx_rate,
1083                                                    int max_tx_rate)
1084                 {
1085                         return 0;
1086                 }
1087         ],[
1088                 struct net_device_ops netdev_ops;
1089
1090                 netdev_ops.ndo_set_vf_rate = set_vf_rate;
1091                 return 0;
1092         ],[
1093                 AC_MSG_RESULT(yes)
1094                 AC_DEFINE(HAVE_SET_VF_RATE, 1,
1095                           [ndo_set_vf_rate is defined])
1096         ],[
1097                 AC_MSG_RESULT(no)
1098         ])
1099
1100         AC_MSG_CHECKING([if netdev_extended has hw_features])
1101         LB_LINUX_TRY_COMPILE([
1102                 #include <linux/netdevice.h>
1103         ],[
1104                 struct net_device *dev = NULL;
1105
1106                 netdev_extended(dev)->hw_features = 0;
1107
1108                 return 0;
1109         ],[
1110                 AC_MSG_RESULT(yes)
1111                 AC_DEFINE(HAVE_NETDEV_EXTENDED_HW_FEATURES, 1,
1112                           [ is defined])
1113         ],[
1114                 AC_MSG_RESULT(no)
1115         ])
1116
1117         AC_MSG_CHECKING([if net_device_extended has _tx_ext])
1118         LB_LINUX_TRY_COMPILE([
1119                 #include <linux/netdevice.h>
1120         ],[
1121                 struct net_device *dev = NULL;
1122
1123                 netdev_extended(dev)->_tx_ext = NULL;
1124
1125                 return 0;
1126         ],[
1127                 AC_MSG_RESULT(yes)
1128                 AC_DEFINE(HAVE_NET_DEVICE_EXTENDED_TX_EXT, 1,
1129                           [ is defined])
1130         ],[
1131                 AC_MSG_RESULT(no)
1132         ])
1133
1134         AC_MSG_CHECKING([if net_device_extended has ndo_busy_poll])
1135         LB_LINUX_TRY_COMPILE([
1136                 #include <linux/netdevice.h>
1137
1138                 int busy_poll(struct napi_struct *napi)
1139                 {
1140                         return 0;
1141                 }
1142         ],[
1143                 struct net_device *dev = NULL;
1144
1145                 netdev_extended(dev)->ndo_busy_poll = busy_poll;
1146
1147                 return 0;
1148         ],[
1149                 AC_MSG_RESULT(yes)
1150                 AC_DEFINE(HAVE_NETDEV_EXTENDED_NDO_BUSY_POLL, 1,
1151                           [ is defined])
1152         ],[
1153                 AC_MSG_RESULT(no)
1154         ])
1155
1156         AC_MSG_CHECKING([if netdevice.h has set_netdev_hw_features])
1157         LB_LINUX_TRY_COMPILE([
1158                 #include <linux/netdevice.h>
1159         ],[
1160                 struct net_device *dev = NULL;
1161
1162                 set_netdev_hw_features(dev, 0);
1163
1164                 return 0;
1165         ],[
1166                 AC_MSG_RESULT(yes)
1167                 AC_DEFINE(HAVE_SET_NETDEV_HW_FEATURES, 1,
1168                           [ is defined])
1169         ],[
1170                 AC_MSG_RESULT(no)
1171         ])
1172
1173         AC_MSG_CHECKING([if netdevice.h has netif_set_xps_queue])
1174         LB_LINUX_TRY_COMPILE([
1175                 #include <linux/netdevice.h>
1176         ],[
1177                 struct net_device *dev = NULL;
1178
1179                 netif_set_xps_queue(dev, NULL, 0);
1180
1181                 return 0;
1182         ],[
1183                 AC_MSG_RESULT(yes)
1184                 AC_DEFINE(HAVE_NETIF_SET_XPS_QUEUE, 1,
1185                           [ is defined])
1186         ],[
1187                 AC_MSG_RESULT(no)
1188         ])
1189
1190
1191         AC_MSG_CHECKING([if struct net_device_ops has *ndo_set_features])
1192         LB_LINUX_TRY_COMPILE([
1193                 #include <linux/netdevice.h>
1194
1195                 int set_features(struct net_device *dev, netdev_features_t features)
1196                 {
1197                         return 0;
1198                 }
1199         ],[
1200                 struct net_device_ops netdev_ops;
1201
1202                 netdev_ops.ndo_set_features = set_features;
1203                 return 0;
1204         ],[
1205                 AC_MSG_RESULT(yes)
1206                 AC_DEFINE(HAVE_NDO_SET_FEATURES, 1,
1207                           [ndo_set_features is defined])
1208         ],[
1209                 AC_MSG_RESULT(no)
1210         ])
1211
1212         AC_MSG_CHECKING([if struct net_device_ops has *ndo_setup_tc])
1213         LB_LINUX_TRY_COMPILE([
1214                 #include <linux/netdevice.h>
1215         ],[
1216                 struct net_device_ops x = {
1217                         .ndo_setup_tc = NULL,
1218                 };
1219
1220                 return 0;
1221         ],[
1222                 AC_MSG_RESULT(yes)
1223                 AC_DEFINE(HAVE_NDO_SETUP_TC, 1,
1224                           [ndo_setup_tc is defined])
1225         ],[
1226                 AC_MSG_RESULT(no)
1227         ])
1228
1229         AC_MSG_CHECKING([if struct net_device_ops has *ndo_rx_flow_steer])
1230         LB_LINUX_TRY_COMPILE([
1231                 #include <linux/netdevice.h>
1232
1233                 int rx_flow_steer(struct net_device *dev,
1234                                                      const struct sk_buff *skb,
1235                                                      u16 rxq_index,
1236                                                      u32 flow_id)
1237                 {
1238                         return 0;
1239                 }
1240         ],[
1241                 struct net_device_ops netdev_ops;
1242
1243                 netdev_ops.ndo_rx_flow_steer = rx_flow_steer;
1244                 return 0;
1245         ],[
1246                 AC_MSG_RESULT(yes)
1247                 AC_DEFINE(HAVE_NDO_RX_FLOW_STEER, 1,
1248                           [ndo_rx_flow_steer is defined])
1249         ],[
1250                 AC_MSG_RESULT(no)
1251         ])
1252
1253         AC_MSG_CHECKING([if struct net_device has priv_flags])
1254         LB_LINUX_TRY_COMPILE([
1255                 #include <linux/netdevice.h>
1256         ],[
1257                 struct net_device *netdev;
1258                 netdev->priv_flags = 0;
1259
1260                 return 0;
1261         ],[
1262                 AC_MSG_RESULT(yes)
1263                 AC_DEFINE(HAVE_NET_DEVICE_PRIV_FLAGS, 1,
1264                           [priv_flags is defined])
1265         ],[
1266                 AC_MSG_RESULT(no)
1267         ])
1268
1269         AC_MSG_CHECKING([if struct net_device_ops has *ndo_get_stats64])
1270         LB_LINUX_TRY_COMPILE([
1271                 #include <linux/netdevice.h>
1272
1273                 struct rtnl_link_stats64* get_stats_64(struct net_device *dev,
1274                                                      struct rtnl_link_stats64 *storage)
1275                 {
1276                         struct rtnl_link_stats64 stats_64;
1277                         return &stats_64;
1278                 }
1279         ],[
1280                 struct net_device_ops netdev_ops;
1281
1282                 netdev_ops.ndo_get_stats64 = get_stats_64;
1283
1284                 return 0;
1285         ],[
1286                 AC_MSG_RESULT(yes)
1287                 AC_DEFINE(HAVE_NDO_GET_STATS64, 1,
1288                           [ndo_get_stats64 is defined])
1289         ],[
1290                 AC_MSG_RESULT(no)
1291         ])
1292         AC_MSG_CHECKING([if struct net_device_ops has ndo_bridge_set/getlink])
1293         LB_LINUX_TRY_COMPILE([
1294                 #include <linux/netdevice.h>
1295         ],[
1296                 struct net_device_ops netdev_ops =  {
1297                         .ndo_bridge_setlink = NULL,
1298                         .ndo_bridge_getlink = NULL,
1299                 };
1300
1301                 return 0;
1302         ],[
1303                 AC_MSG_RESULT(yes)
1304                 AC_DEFINE(HAVE_NDO_BRIDGE_SET_GET_LINK, 1,
1305                           [ndo_bridge_set/getlink is defined])
1306         ],[
1307                 AC_MSG_RESULT(no)
1308         ])
1309
1310         AC_MSG_CHECKING([if struct net_device_ops ndo_vlan_rx_add_vid has 3 parameters ])
1311         LB_LINUX_TRY_COMPILE([
1312                 #include <linux/netdevice.h>
1313
1314         ],[
1315                 int vlan_rx_add_vid(struct net_device *dev,__be16 proto, u16 vid)
1316                 {
1317                         return 0;
1318                 }
1319                 struct net_device_ops netdev_ops;
1320
1321                 netdev_ops.ndo_vlan_rx_add_vid = vlan_rx_add_vid;
1322                 netdev_ops.ndo_vlan_rx_add_vid (NULL, 1, 1) ;
1323
1324                 return 0;
1325         ],[
1326                 AC_MSG_RESULT(yes)
1327                 AC_DEFINE(HAVE_NDO_RX_ADD_VID_HAS_3_PARAMS, 1,
1328                           [ndo_vlan_rx_add_vid has 3 parameters])
1329         ],[
1330                 AC_MSG_RESULT(no)
1331         ])
1332
1333         AC_MSG_CHECKING([if net_device_ops has ndo_get_phys_port_id])
1334         LB_LINUX_TRY_COMPILE([
1335                 #include <linux/netdevice.h>
1336
1337                 int get_phys_port_id(struct net_device *dev,
1338                                      struct netdev_phys_port_id *ppid)
1339                 {
1340                         return 0;
1341                 }
1342         ],[
1343                 struct net_device_ops netdev_ops;
1344
1345                 netdev_ops.ndo_get_phys_port_id = get_phys_port_id;
1346
1347                 return 0;
1348         ],[
1349                 AC_MSG_RESULT(yes)
1350                 AC_DEFINE(HAVE_NETDEV_NDO_GET_PHYS_PORT_ID, 1,
1351                           [ is defined])
1352         ],[
1353                 AC_MSG_RESULT(no)
1354         ])
1355
1356         AC_MSG_CHECKING([if struct net_device_ops_ext exist])
1357         LB_LINUX_TRY_COMPILE([
1358                 #include <linux/netdevice.h>
1359         ],[
1360                 struct net_device_ops_ext netdev_ops_ext = {
1361                         .size = sizeof(struct net_device_ops_ext),
1362                 };
1363
1364                 return 0;
1365         ],[
1366                 AC_MSG_RESULT(yes)
1367                 AC_DEFINE(HAVE_NET_DEVICE_OPS_EXT, 1,
1368                           [struct net_device_ops_ext is defined])
1369         ],[
1370                 AC_MSG_RESULT(no)
1371         ])
1372
1373         AC_MSG_CHECKING([if net_device_ops_ext has ndo_get_phys_port_id])
1374         LB_LINUX_TRY_COMPILE([
1375                 #include <linux/netdevice.h>
1376
1377                 int get_phys_port_id(struct net_device *dev,
1378                                      struct netdev_phys_port_id *ppid)
1379                 {
1380                         return 0;
1381                 }
1382         ],[
1383                 struct net_device_ops_ext netdev_ops_ext;
1384
1385                 netdev_ops_ext.ndo_get_phys_port_id = get_phys_port_id;
1386
1387                 return 0;
1388         ],[
1389                 AC_MSG_RESULT(yes)
1390                 AC_DEFINE(HAVE_NETDEV_EXT_NDO_GET_PHYS_PORT_ID, 1,
1391                           [ndo_get_phys_port_id is defined])
1392         ],[
1393                 AC_MSG_RESULT(no)
1394         ])
1395
1396         AC_MSG_CHECKING([if net_device_ops has ndo_set_vf_spoofchk])
1397         LB_LINUX_TRY_COMPILE([
1398                 #include <linux/netdevice.h>
1399
1400                 int set_vf_spoofchk(struct net_device *dev, int vf, bool setting)
1401                 {
1402                         return 0;
1403                 }
1404         ],[
1405                 struct net_device_ops netdev_ops;
1406
1407                 netdev_ops.ndo_set_vf_spoofchk = set_vf_spoofchk;
1408
1409                 return 0;
1410         ],[
1411                 AC_MSG_RESULT(yes)
1412                 AC_DEFINE(HAVE_NETDEV_OPS_NDO_SET_VF_SPOOFCHK, 1,
1413                           [ndo_set_vf_spoofchk is defined in net_device_ops])
1414         ],[
1415                 AC_MSG_RESULT(no)
1416         ])
1417
1418         AC_MSG_CHECKING([if net_device_ops_ext has ndo_set_vf_spoofchk])
1419         LB_LINUX_TRY_COMPILE([
1420                 #include <linux/netdevice.h>
1421
1422                 int set_vf_spoofchk(struct net_device *dev, int vf, bool setting)
1423                 {
1424                         return 0;
1425                 }
1426         ],[
1427                 struct net_device_ops_ext netdev_ops_ext;
1428
1429                 netdev_ops_ext.ndo_set_vf_spoofchk = set_vf_spoofchk;
1430
1431                 return 0;
1432         ],[
1433                 AC_MSG_RESULT(yes)
1434                 AC_DEFINE(HAVE_NETDEV_OPS_EXT_NDO_SET_VF_SPOOFCHK, 1,
1435                           [ndo_set_vf_spoofchk is defined in net_device_ops_ext])
1436         ],[
1437                 AC_MSG_RESULT(no)
1438         ])
1439
1440         AC_MSG_CHECKING([if net_device_ops has ndo_set_vf_link_state])
1441         LB_LINUX_TRY_COMPILE([
1442                 #include <linux/netdevice.h>
1443
1444                 int set_vf_link_state(struct net_device *dev, int vf, int link_state)
1445                 {
1446                         return 0;
1447                 }
1448         ],[
1449                 struct net_device_ops netdev_ops;
1450
1451                 netdev_ops.ndo_set_vf_link_state = set_vf_link_state;
1452
1453                 return 0;
1454         ],[
1455                 AC_MSG_RESULT(yes)
1456                 AC_DEFINE(HAVE_NETDEV_OPS_NDO_SET_VF_LINK_STATE, 1,
1457                           [ndo_set_vf_link_state is defined in net_device_ops])
1458         ],[
1459                 AC_MSG_RESULT(no)
1460         ])
1461
1462         AC_MSG_CHECKING([if net_device_ops_ext has ndo_set_vf_link_state])
1463         LB_LINUX_TRY_COMPILE([
1464                 #include <linux/netdevice.h>
1465
1466                 int set_vf_link_state(struct net_device *dev, int vf, int link_state)
1467                 {
1468                         return 0;
1469                 }
1470         ],[
1471                 struct net_device_ops_ext netdev_ops_ext;
1472
1473                 netdev_ops_ext.ndo_set_vf_link_state = set_vf_link_state;
1474
1475                 return 0;
1476         ],[
1477                 AC_MSG_RESULT(yes)
1478                 AC_DEFINE(HAVE_NETDEV_OPS_EXT_NDO_SET_VF_LINK_STATE, 1,
1479                           [ndo_set_vf_link_state is defined])
1480         ],[
1481                 AC_MSG_RESULT(no)
1482         ])
1483
1484
1485         AC_MSG_CHECKING([if netdevice.h netif_set_real_num_tx_queues returns int])
1486         LB_LINUX_TRY_COMPILE([
1487                 #include <linux/netdevice.h>
1488         ],[
1489                 struct net_device dev;
1490                 int ret;
1491                 ret = netif_set_real_num_tx_queues(&dev, 2);
1492                 return 0;
1493         ],[
1494                 AC_MSG_RESULT(yes)
1495                 AC_DEFINE(HAVE_RETURN_INT_FOR_SET_NUM_TX_QUEUES, 1,
1496                           [netif_set_real_num_tx_queues returns int])
1497         ],[
1498                 AC_MSG_RESULT(no)
1499         ])
1500
1501         AC_MSG_CHECKING([if struct netdevice.h has struct xps_map])
1502         LB_LINUX_TRY_COMPILE([
1503                 #include <linux/netdevice.h>
1504         ],[
1505                 struct xps_map map;
1506                 map.len = 0;
1507
1508                 return 0;
1509         ],[
1510                 AC_MSG_RESULT(yes)
1511                 AC_DEFINE(HAVE_XPS_MAP, 1,
1512                           [struct xps_map is defined])
1513         ],[
1514                 AC_MSG_RESULT(no)
1515         ])
1516
1517         AC_MSG_CHECKING([if struct ethtool_ops has set_phys_id])
1518         LB_LINUX_TRY_COMPILE([
1519                 #include <linux/ethtool.h>
1520         ],[
1521                 const struct ethtool_ops en_ethtool_ops = {
1522                         .set_phys_id= NULL,
1523                 };
1524
1525                 return 0;
1526         ],[
1527                 AC_MSG_RESULT(yes)
1528                 AC_DEFINE(HAVE_SET_PHYS_ID, 1,
1529                           [set_phys_id is defined])
1530         ],[
1531                 AC_MSG_RESULT(no)
1532         ])
1533
1534         AC_MSG_CHECKING([if struct ethtool_ops has get/set_channels])
1535         LB_LINUX_TRY_COMPILE([
1536                 #include <linux/ethtool.h>
1537         ],[
1538                 const struct ethtool_ops en_ethtool_ops = {
1539                         .get_channels = NULL,
1540                         .set_channels = NULL,
1541                 };
1542
1543                 return 0;
1544         ],[
1545                 AC_MSG_RESULT(yes)
1546                 AC_DEFINE(HAVE_GET_SET_CHANNELS, 1,
1547                           [get/set_channels is defined])
1548         ],[
1549                 AC_MSG_RESULT(no)
1550         ])
1551
1552         AC_MSG_CHECKING([if struct ethtool_ops_ext has get/set_channels])
1553         LB_LINUX_TRY_COMPILE([
1554                 #include <linux/ethtool.h>
1555         ],[
1556                 const struct ethtool_ops_ext en_ethtool_ops_ext = {
1557                         .get_channels = NULL,
1558                         .set_channels = NULL,
1559                 };
1560
1561                 return 0;
1562         ],[
1563                 AC_MSG_RESULT(yes)
1564                 AC_DEFINE(HAVE_GET_SET_CHANNELS_EXT, 1,
1565                           [get/set_channels is defined in ethtool_ops_ext])
1566         ],[
1567                 AC_MSG_RESULT(no)
1568         ])
1569
1570         AC_MSG_CHECKING([if struct ethtool_ops has get_ts_info])
1571         LB_LINUX_TRY_COMPILE([
1572                 #include <linux/ethtool.h>
1573         ],[
1574                 const struct ethtool_ops en_ethtool_ops = {
1575                         .get_ts_info = NULL,
1576                 };
1577
1578                 return 0;
1579         ],[
1580                 AC_MSG_RESULT(yes)
1581                 AC_DEFINE(HAVE_GET_TS_INFO, 1,
1582                           [get_ts_info is defined])
1583         ],[
1584                 AC_MSG_RESULT(no)
1585         ])
1586
1587         AC_MSG_CHECKING([if struct ethtool_ops has set_dump])
1588         LB_LINUX_TRY_COMPILE([
1589                 #include <linux/ethtool.h>
1590         ],[
1591                 const struct ethtool_ops en_ethtool_ops = {
1592                         .set_dump = NULL,
1593                 };
1594
1595                 return 0;
1596         ],[
1597                 AC_MSG_RESULT(yes)
1598                 AC_DEFINE(HAVE_ETHTOOL_OPS_SET_DUMP, 1,
1599                           [set_dump is defined])
1600         ],[
1601                 AC_MSG_RESULT(no)
1602         ])
1603
1604         AC_MSG_CHECKING([if struct ethtool_ops has get_module_info])
1605         LB_LINUX_TRY_COMPILE([
1606                 #include <linux/ethtool.h>
1607         ],[
1608                 const struct ethtool_ops en_ethtool_ops = {
1609                         .get_module_info = NULL,
1610                 };
1611
1612                 return 0;
1613         ],[
1614                 AC_MSG_RESULT(yes)
1615                 AC_DEFINE(HAVE_ETHTOOL_OPS_GET_MODULE_INFO, 1,
1616                           [get_module_info is defined])
1617         ],[
1618                 AC_MSG_RESULT(no)
1619         ])
1620
1621         AC_MSG_CHECKING([if struct ethtool_ops has get_module_eeprom])
1622         LB_LINUX_TRY_COMPILE([
1623                 #include <linux/ethtool.h>
1624         ],[
1625                 const struct ethtool_ops en_ethtool_ops = {
1626                         .get_module_eeprom = NULL,
1627                 };
1628
1629                 return 0;
1630         ],[
1631                 AC_MSG_RESULT(yes)
1632                 AC_DEFINE(HAVE_ETHTOOL_OPS_GET_MODULE_EEPROM, 1,
1633                           [get_module_eeprom is defined])
1634         ],[
1635                 AC_MSG_RESULT(no)
1636         ])
1637
1638         AC_MSG_CHECKING([if struct ethtool_ops_ext has get_ts_info])
1639         LB_LINUX_TRY_COMPILE([
1640                 #include <linux/ethtool.h>
1641         ],[
1642                 const struct ethtool_ops_ext en_ethtool_ops_ext = {
1643                         .get_ts_info = NULL,
1644                 };
1645
1646                 return 0;
1647         ],[
1648                 AC_MSG_RESULT(yes)
1649                 AC_DEFINE(HAVE_GET_TS_INFO_EXT, 1,
1650                           [get_ts_info is defined in ethtool_ops_ext])
1651         ],[
1652                 AC_MSG_RESULT(no)
1653         ])
1654
1655         AC_MSG_CHECKING([if struct ethtool_flow_ext has h_dest])
1656         LB_LINUX_TRY_COMPILE([
1657                 #include <linux/ethtool.h>
1658         ],[
1659                 unsigned char mac[ETH_ALEN];
1660                 struct ethtool_flow_ext h_ext;
1661
1662                 memcpy(&mac, h_ext.h_dest, ETH_ALEN);
1663
1664                 return 0;
1665         ],[
1666                 AC_MSG_RESULT(yes)
1667                 AC_DEFINE(HAVE_ETHTOOL_FLOW_EXT_H_DEST, 1,
1668                           [ethtool_flow_ext has h_dest])
1669         ],[
1670                 AC_MSG_RESULT(no)
1671         ])
1672
1673         AC_MSG_CHECKING([if netdevice.h has struct dev_addr_list])
1674         LB_LINUX_TRY_COMPILE([
1675                 #include <linux/netdevice.h>
1676         ],[
1677                 struct dev_addr_list addr;
1678                 return 0;
1679         ],[
1680                 AC_MSG_RESULT(yes)
1681                 AC_DEFINE(HAVE_NETDEV_DEV_ADDR, 1,
1682                           [dev_addr_list is defined])
1683         ],[
1684                 AC_MSG_RESULT(no)
1685         ])
1686
1687         AC_MSG_CHECKING([if pci.h has pci_vfs_assigned])
1688         LB_LINUX_TRY_COMPILE([
1689                 #include <linux/pci.h>
1690         ],[
1691                 struct pci_dev pdev;
1692                 pci_vfs_assigned(&pdev);
1693                 return 0;
1694         ],[
1695                 AC_MSG_RESULT(yes)
1696                 AC_DEFINE(HAVE_PCI_VF_ASSIGNED, 1,
1697                           [pci_vfs_assigned is defined])
1698         ],[
1699                 AC_MSG_RESULT(no)
1700         ])
1701
1702         AC_MSG_CHECKING([if vlan_insert_tag_set_proto is defined])
1703         LB_LINUX_TRY_COMPILE([
1704                 #include <linux/if_vlan.h>
1705         ],[
1706                 struct sk_buff *skb;
1707                 vlan_insert_tag_set_proto(skb, 0, 0);
1708                 return 0;
1709         ],[
1710                 AC_MSG_RESULT(yes)
1711                 AC_DEFINE(HAVE_VLAN_INSERT_TAG_SET_PROTO, 1,
1712                           [vlan_insert_tag_set_proto is defined])
1713         ],[
1714                 AC_MSG_RESULT(no)
1715                 AC_MSG_CHECKING([if __vlan_put_tag has 3 parameters])
1716                 LB_LINUX_TRY_COMPILE([
1717                         #include <linux/if_vlan.h>
1718                 ],[
1719                         struct sk_buff *skb;
1720                         __vlan_put_tag(skb, 0, 0);
1721                         return 0;
1722                 ],[
1723                         AC_MSG_RESULT(yes)
1724                         AC_DEFINE(HAVE_3_PARAMS_FOR_VLAN_PUT_TAG, 1,
1725                                   [__vlan_put_tag has 3 parameters])
1726                 ],[
1727                         AC_MSG_RESULT(no)
1728                 ])
1729         ])
1730
1731         AC_MSG_CHECKING([if __vlan_hwaccel_put_tag has 3 parameters])
1732         LB_LINUX_TRY_COMPILE([
1733                 #include <linux/if_vlan.h>
1734         ],[
1735                 struct sk_buff *skb;
1736                 __vlan_hwaccel_put_tag(skb, 0, 0);
1737
1738                 return 0;
1739         ],[
1740                 AC_MSG_RESULT(yes)
1741                 AC_DEFINE(HAVE_3_PARAMS_FOR_VLAN_HWACCEL_PUT_TAG, 1,
1742                           [__vlan_hwaccel_put_tag has 3 parameters])
1743         ],[
1744                 AC_MSG_RESULT(no)
1745         ])
1746
1747         AC_MSG_CHECKING([if struct inet6_ifaddr has if_next])
1748         LB_LINUX_TRY_COMPILE([
1749                 #include <net/if_inet6.h>
1750         ],[
1751                 struct inet6_ifaddr ifp ;
1752                 ifp.if_next = 0;
1753
1754                 return 0;
1755         ],[
1756                 AC_MSG_RESULT(yes)
1757                 AC_DEFINE(HAVE_INETADDR_IF_NEXT, 1,
1758                           [if_next is defined])
1759         ],[
1760                 AC_MSG_RESULT(no)
1761         ])
1762
1763         AC_MSG_CHECKING([if struct net_device has hw_features])
1764         LB_LINUX_TRY_COMPILE([
1765                 #include <linux/netdevice.h>
1766         ],[
1767                 struct net_device dev;
1768                 dev.hw_features = 0;
1769
1770                 return 0;
1771         ],[
1772                 AC_MSG_RESULT(yes)
1773                 AC_DEFINE(HAVE_NETDEV_HW_FEATURES, 1,
1774                           [hw_features is defined])
1775         ],[
1776                 AC_MSG_RESULT(no)
1777         ])
1778
1779         AC_MSG_CHECKING([if struct net_device has hw_enc_features])
1780         LB_LINUX_TRY_COMPILE([
1781                 #include <linux/netdevice.h>
1782         ],[
1783                 struct net_device dev;
1784                 dev.hw_enc_features = 0;
1785
1786                 return 0;
1787         ],[
1788                 AC_MSG_RESULT(yes)
1789                 AC_DEFINE(HAVE_NETDEV_HW_ENC_FEATURES, 1,
1790                           [hw_enc_features is defined])
1791         ],[
1792                 AC_MSG_RESULT(no)
1793         ])
1794
1795         AC_MSG_CHECKING([if struct net_device has rx_cpu_rmap])
1796         LB_LINUX_TRY_COMPILE([
1797                 #include <linux/netdevice.h>
1798         ],[
1799                 struct net_device dev;
1800                 dev.rx_cpu_rmap = NULL;
1801
1802                 return 0;
1803         ],[
1804                 AC_MSG_RESULT(yes)
1805                 AC_DEFINE(HAVE_NETDEV_RX_CPU_RMAP, 1,
1806                           [rx_cpu_rmap is defined])
1807         ],[
1808                 AC_MSG_RESULT(no)
1809         ])
1810
1811         AC_MSG_CHECKING([if if_vlan.h has vlan_hwaccel_receive_skb])
1812         LB_LINUX_TRY_COMPILE([
1813                 #include <linux/if_vlan.h>
1814         ],[
1815                 struct sk_buff *skb;
1816                 vlan_hwaccel_receive_skb(skb,0,0);
1817                 return 0;
1818         ],[
1819                 AC_MSG_RESULT(yes)
1820                 AC_DEFINE(HAVE_VLAN_HWACCEL_RECEIVE_SKB, 1,
1821                           [vlan_hwaccel_receive_skb is defined])
1822         ],[
1823                 AC_MSG_RESULT(no)
1824         ])
1825
1826         AC_MSG_CHECKING([if irqdesc.h has irq_desc_get_irq_data])
1827         LB_LINUX_TRY_COMPILE([
1828                 #include <linux/irq.h>
1829                 #include <linux/irqdesc.h>
1830         ],[
1831                 struct irq_desc desc;
1832                 struct irq_data *data = irq_desc_get_irq_data(&desc);
1833
1834                 return 0;
1835         ],[
1836                 AC_MSG_RESULT(yes)
1837                 AC_DEFINE(HAVE_IRQ_DESC_GET_IRQ_DATA, 1,
1838                           [irq_desc_get_irq_data is defined])
1839         ],[
1840                 AC_MSG_RESULT(no)
1841         ])
1842
1843
1844         AC_MSG_CHECKING([if pci_dev has pcie_mpss])
1845         LB_LINUX_TRY_COMPILE([
1846                 #include <linux/pci.h>
1847         ],[
1848                 struct pci_dev *pdev;
1849
1850                 pdev->pcie_mpss = 0;
1851                 return 0;
1852         ],[
1853                 AC_MSG_RESULT(yes)
1854                 AC_DEFINE(HAVE_PCI_DEV_PCIE_MPSS, 1,
1855                           [pcie_mpss is defined])
1856         ],[
1857                 AC_MSG_RESULT(no)
1858         ])
1859
1860         AC_MSG_CHECKING([if uapi/linux/if_ether.h exist])
1861         LB_LINUX_TRY_COMPILE([
1862                 #include <uapi/linux/if_ether.h>
1863         ],[
1864                 return 0;
1865         ],[
1866                 AC_MSG_RESULT(yes)
1867                 AC_DEFINE(HAVE_UAPI_LINUX_IF_ETHER_H, 1,
1868                           [uapi/linux/if_ether.h exist])
1869         ],[
1870                 AC_MSG_RESULT(no)
1871         ])
1872
1873         AC_MSG_CHECKING([if ifla_vf_info has spoofchk])
1874         LB_LINUX_TRY_COMPILE([
1875                 #include <linux/if_link.h>
1876         ],[
1877                 struct ifla_vf_info *ivf;
1878
1879                 ivf->spoofchk = 0;
1880                 return 0;
1881         ],[
1882                 AC_MSG_RESULT(yes)
1883                 AC_DEFINE(HAVE_VF_INFO_SPOOFCHK, 1,
1884                           [spoofchk is defined])
1885         ],[
1886                 AC_MSG_RESULT(no)
1887         ])
1888
1889         AC_MSG_CHECKING([if vxlan.h has vxlan_gso_check])
1890         LB_LINUX_TRY_COMPILE([
1891                 #include <net/vxlan.h>
1892         ],[
1893                 vxlan_gso_check(NULL);
1894
1895                 return 0;
1896         ],[
1897                 AC_MSG_RESULT(yes)
1898                 AC_DEFINE(HAVE_VXLAN_GSO_CHECK, 1,
1899                           [vxlan_gso_check is defined])
1900         ],[
1901                 AC_MSG_RESULT(no)
1902         ])
1903
1904         AC_MSG_CHECKING([if dst.h has dst_get_neighbour])
1905         LB_LINUX_TRY_COMPILE([
1906                 #include <net/dst.h>
1907         ],[
1908                 struct neighbour *neigh = dst_get_neighbour(NULL);
1909
1910                 return 0;
1911         ],[
1912                 AC_MSG_RESULT(yes)
1913                 AC_DEFINE(HAVE_DST_GET_NEIGHBOUR, 1,
1914                           [ is defined])
1915         ],[
1916                 AC_MSG_RESULT(no)
1917         ])
1918
1919         AC_MSG_CHECKING([if netlink_dump_start has 6 parameters])
1920         LB_LINUX_TRY_COMPILE([
1921                 #include <linux/netlink.h>
1922         ],[
1923                 int ret = netlink_dump_start(NULL, NULL, NULL, NULL, NULL, 0);
1924
1925                 return 0;
1926         ],[
1927                 AC_MSG_RESULT(yes)
1928                 AC_DEFINE(HAVE_NETLINK_DUMP_START_6P, 1,
1929                           [ is defined])
1930         ],[
1931                 AC_MSG_RESULT(no)
1932         ])
1933
1934         AC_MSG_CHECKING([if netlink_dump_start has 5 parameters])
1935         LB_LINUX_TRY_COMPILE([
1936                 #include <linux/netlink.h>
1937         ],[
1938                 int ret = netlink_dump_start(NULL, NULL, NULL, NULL, NULL);
1939
1940                 return 0;
1941         ],[
1942                 AC_MSG_RESULT(yes)
1943                 AC_DEFINE(HAVE_NETLINK_DUMP_START_5P, 1,
1944                           [ is defined])
1945         ],[
1946                 AC_MSG_RESULT(no)
1947         ])
1948
1949         AC_MSG_CHECKING([if struct dcbnl_rtnl_ops has ieee_getmaxrate/ieee_setmaxrate])
1950         LB_LINUX_TRY_COMPILE([
1951                 #include <net/dcbnl.h>
1952         ],[
1953                 const struct dcbnl_rtnl_ops en_dcbnl_ops = {
1954                         .ieee_getmaxrate = NULL,
1955                         .ieee_setmaxrate = NULL,
1956                 };
1957
1958                 return 0;
1959         ],[
1960                 AC_MSG_RESULT(yes)
1961                 AC_DEFINE(HAVE_IEEE_GET_SET_MAXRATE, 1,
1962                           [ieee_getmaxrate/ieee_setmaxrate is defined])
1963         ],[
1964                 AC_MSG_RESULT(no)
1965         ])
1966
1967         AC_LANG_PUSH(C)
1968         ac_c_werror_flag=yes
1969         save_EXTRA_KCFLAGS=$EXTRA_KCFLAGS
1970         EXTRA_KCFLAGS="$EXTRA_KCFLAGS -Werror"
1971
1972         AC_MSG_CHECKING([if bonding.h bond_for_each_slave has int for 3rd parameter])
1973         LB_LINUX_TRY_COMPILE([
1974                 #include "../drivers/net/bonding/bonding.h"
1975         ],[
1976                 struct bonding *bond = NULL;
1977                 struct slave *slave = NULL;
1978                 int iter;
1979
1980                 bond_for_each_slave(bond, slave, iter) ;
1981
1982                 return 0;
1983         ],[
1984                 AC_MSG_RESULT(yes)
1985                 AC_DEFINE(HAVE_BOND_FOR_EACH_SLAVE_3RD_PARAM_IS_INT, 1,
1986                           [bond_for_each_slave has int for 3rd parameter])
1987         ],[
1988                 AC_MSG_RESULT(no)
1989         ])
1990         EXTRA_KCFLAGS="$save_EXTRA_KCFLAGS"
1991         ac_c_werror_flag=
1992         AC_LANG_POP
1993
1994         AC_MSG_CHECKING([if netdevice.h has netdev_master_upper_dev_get_rcu])
1995         LB_LINUX_TRY_COMPILE([
1996                 #include <linux/netdevice.h>
1997         ],[
1998                 netdev_master_upper_dev_get_rcu(NULL);
1999
2000                 return 0;
2001         ],[
2002                 AC_MSG_RESULT(yes)
2003                 AC_DEFINE(HAVE_NETDEV_MASTER_UPPER_DEV_GET_RCU, 1,
2004                           [netdev_master_upper_dev_get_rcu is defined])
2005         ],[
2006                 AC_MSG_RESULT(no)
2007         ])
2008
2009         AC_MSG_CHECKING([if __vlan_find_dev_deep has 3 parameters])
2010         LB_LINUX_TRY_COMPILE([
2011                 #include <linux/if_vlan.h>
2012         ],[
2013                 __vlan_find_dev_deep(NULL, 0, 0);
2014
2015                 return 0;
2016         ],[
2017                 AC_MSG_RESULT(yes)
2018                 AC_DEFINE(HAVE__VLAN_FIND_DEV_DEEP_3P, 1,
2019                           [__vlan_find_dev_deep has 3 paramters])
2020         ],[
2021                 AC_MSG_RESULT(no)
2022         ])
2023
2024         AC_MSG_CHECKING([if sk_buff.h has __skb_alloc_page])
2025         LB_LINUX_TRY_COMPILE([
2026                 #include <linux/skbuff.h>
2027         ],[
2028                 __skb_alloc_page(0, NULL);
2029
2030                 return 0;
2031         ],[
2032                 AC_MSG_RESULT(yes)
2033                 AC_DEFINE(HAVE__SKB_ALLOC_PAGE, 1,
2034                           [sk_buff has __skb_alloc_page])
2035         ],[
2036                 AC_MSG_RESULT(no)
2037         ])
2038
2039         AC_MSG_CHECKING([if __vlan_hwaccel_put_tag has 3 parameters])
2040         LB_LINUX_TRY_COMPILE([
2041                 #include <linux/if_vlan.h>
2042         ],[
2043                 __vlan_hwaccel_put_tag(NULL, 0, 0);
2044
2045                 return 0;
2046         ],[
2047                 AC_MSG_RESULT(yes)
2048                 AC_DEFINE(HAVE__VLAN_HWACCEL_PUT_TAG_3P, 1,
2049                           [__vlan_hwaccel_put_tag has 3 paramters])
2050         ],[
2051                 AC_MSG_RESULT(no)
2052         ])
2053
2054         AC_MSG_CHECKING([if linux/mm_types.h has struct page_frag])
2055         LB_LINUX_TRY_COMPILE([
2056                 #include <linux/mm_types.h>
2057         ],[
2058                 struct page_frag frag = {0};
2059
2060                 return 0;
2061         ],[
2062                 AC_MSG_RESULT(yes)
2063                 AC_DEFINE(HAVE_MM_TYPES_PAGE_FRAG, 1,
2064                           [linux/mm_types.h has struct page_frag])
2065         ],[
2066                 AC_MSG_RESULT(no)
2067         ])
2068
2069         AC_MSG_CHECKING([if if_vlan.h has __vlan_find_dev_deep])
2070         LB_LINUX_TRY_COMPILE([
2071                 #include <linux/if_vlan.h>
2072         ],[
2073                 __vlan_find_dev_deep(NULL, 0);
2074
2075                 return 0;
2076         ],[
2077                 AC_MSG_RESULT(yes)
2078                 AC_DEFINE(HAVE___VLAN_FIND_DEV_DEEP, 1,
2079                           [__vlan_find_dev_deep is defined])
2080         ],[
2081                 AC_MSG_RESULT(no)
2082         ])
2083
2084         AC_MSG_CHECKING([if idr .h has idr_Alloc])
2085         LB_LINUX_TRY_COMPILE([
2086                 #include <linux/idr.h>
2087         ],[
2088                 idr_alloc(NULL, NULL, 0, 0, 0);
2089                 return 0;
2090         ],[
2091                 AC_MSG_RESULT(yes)
2092                 AC_DEFINE(HAVE_IDR_NEW_INTERFACE, 1,
2093                           [idr_Alloc is defined]) ],[
2094                 AC_MSG_RESULT(no)
2095         ])
2096
2097         AC_MSG_CHECKING([if completion.h has reinit_completion])
2098         LB_LINUX_TRY_COMPILE([
2099                 #include <linux/completion.h>
2100         ],[
2101                 struct completion c;
2102
2103                 reinit_completion(&c);
2104                 return 0;
2105         ],[
2106                 AC_MSG_RESULT(yes)
2107                 AC_DEFINE(HAVE_REINIT_COMPLETION, 1,
2108                           [reinit_completion is defined])
2109         ],[
2110                 AC_MSG_RESULT(no)
2111         ])
2112
2113         AC_MSG_CHECKING([if dma-mapping.h has dma_set_mask_and_coherent])
2114         LB_LINUX_TRY_COMPILE([
2115                 #include <linux/dma-mapping.h>
2116         ],[
2117                 dma_set_mask_and_coherent(NULL, 0);
2118
2119                 return 0;
2120         ],[
2121                 AC_MSG_RESULT(yes)
2122                 AC_DEFINE(HAVE_DMA_SET_MASK_AND_COHERENT, 1,
2123                           [dma_set_mask_and_coherent is defined])
2124         ],[
2125                 AC_MSG_RESULT(no)
2126         ])
2127
2128         AC_MSG_CHECKING([if in.h has proto_ports_offset])
2129         LB_LINUX_TRY_COMPILE([
2130                 #include <linux/in.h>
2131         ],[
2132                 int x = proto_ports_offset(IPPROTO_TCP);
2133                 return 0;
2134         ],[
2135                 AC_MSG_RESULT(yes)
2136                 AC_DEFINE(HAVE_PROTO_PORTS_OFFSET, 1,
2137                           [proto_ports_offset is defined])
2138         ],[
2139                 AC_MSG_RESULT(no)
2140         ])
2141
2142         LB_CHECK_SYMBOL_EXPORT([elfcorehdr_addr],
2143                 [kernel/crash_dump.c],
2144                 [AC_DEFINE(HAVE_ELFCOREHDR_ADDR_EXPORTED, 1,
2145                         [elfcorehdr_addr is exported by the kernel])],
2146         [])
2147 ])
2148 #
2149 # COMPAT_CONFIG_HEADERS
2150 #
2151 # add -include config.h
2152 #
2153 AC_DEFUN([COMPAT_CONFIG_HEADERS],[
2154         AC_CONFIG_HEADERS([config.h])
2155         EXTRA_KCFLAGS="-include $PWD/config.h $EXTRA_KCFLAGS"
2156         AC_SUBST(EXTRA_KCFLAGS)
2157 ])
2158
2159 AC_DEFUN([OFA_PROG_LINUX],
2160 [
2161
2162 LB_LINUX_PATH
2163 LB_LINUX_SYMVERFILE
2164 LB_LINUX_CONFIG([MODULES],[],[
2165     AC_MSG_ERROR([module support is required to build mlnx kernel modules.])
2166 ])
2167 LB_LINUX_CONFIG([MODVERSIONS])
2168 LB_LINUX_CONFIG([KALLSYMS],[],[
2169     AC_MSG_ERROR([compat_mlnx requires that CONFIG_KALLSYMS is enabled in your kernel.])
2170 ])
2171
2172 LINUX_CONFIG_COMPAT
2173 COMPAT_CONFIG_HEADERS
2174
2175 ])