c816cf5986e86ddf3a0cbc8872f7d077c02b634e
[rpld.git] / Makefile
1
2 # /*************************************************
3 # *     rpld - an IBM style RIPL server            *
4 # *************************************************/
5
6 # /* Copyright (c) 1999,2000,2001 James McKenzie.
7 #  *                      All rights reserved
8 #  * Copyright (c) 1998,2000,2001 Christopher Lightfoot.
9 #  *                      All rights reserved
10 #  *
11 #  * NetBSD and BPF support by Takashi YAMAMOTO
12 #  * Copyright (C) 2001 YAMAMOTO Takashi <yamt@netbsd.org>.
13 #  *
14 #  * By using this file, you agree to the terms and conditions set
15 #  * forth in the LICENCE file which can be found at the top level of
16 #  * the rpld distribution.
17 #  *
18 #  * IBM is a trademark of IBM corp.
19 #  *
20 #  */
21
22 #
23 # $Id: Makefile,v 1.26 2001/11/01 15:26:30 root Exp $
24 #
25 # $Log: Makefile,v $
26 # Revision 1.26  2001/11/01 15:26:30  root
27 # #
28 #
29 # Revision 1.25  2001/11/01 15:24:28  root
30 # #
31 #
32 # Revision 1.24  2001/11/01 15:24:00  root
33 # #
34 #
35 # Revision 1.23  2000/09/26 03:46:20  root
36 # #
37 #
38 # Revision 1.22  2000/09/26 02:32:47  root
39 # #
40 #
41 # Revision 1.21  2000/09/26 02:31:39  root
42 # #
43 #
44 # Revision 1.20  2000/09/26 01:03:22  root
45 # #
46 #
47 #
48
49 #
50
51 # Important you need to choose a driver for rpld
52 # there are two sorts of driver for rpld:
53 #   nit: easy to write and dirty
54 #        these drivers send a copy of
55 #        every (LLC) packet transmitted
56 #        or received to rpld, and greatly
57 #        increase CPU load.
58 #
59 #   llc: these are for systems which have
60 #        native LLC support, the kernel
61 #        takes care of the LLC layer and
62 #        passes decoded data down to rpld  
63 #
64
65 # Available NIT drivers: choose from
66 #  linux-nit.c:   For modern kerenels, attempts to persuade the
67 #                 kernel to send rpld only 802.2 frames thus 
68 #                 greatly reducing system load. However some
69 #                 bad voodo magic is required to get it to
70 #                 send properly.
71 #
72 #  linux-old-nit.c:  For older kernels and those with problems.
73 #                    this is the simplest possible form of driver
74 #                    it receives every frame tranmitted of received
75 #                    from the host and places a large extra load on
76 #                    busy machines.
77 #                    
78 #  bpf-nit.c:  For NetBSD and possibly other BPF implementations
79 #              this version seems to do no filtering, so it receives
80 #              every frame - increasing system load.
81 #                    
82 #  llc-nit.c implements the LLC 802.2 layer ontop of the raw packet (nit)
83 #  layer and is needed in all cases
84 #
85 #  Newer driver
86 NIT=linux-nit.c
87 #  Older driver
88 #NIT=linux-old-nit.c
89 #  BPF driver for NetBSD (may old work on SunOS, havent checked)
90 #NIT=bpf-nit.c
91
92 DRIVER=llc-nit.c ${NIT}
93
94 # Native LLC drivers, to use these you require a kernel with native
95 # llc support, for linux 2.2 you can use the patches in ./kernel
96 # for linux 2.3 and 2.4 you can use the LLC stack that comes as 
97 # part of the linux-sna package available at www.linux-sna.org 
98
99 # To use this driver comment out the DRIVER line above and
100 # uncomment this one
101 # DRIVER=llc-linux.c
102
103 DEFINES=
104
105 # where do you want all this stuff
106
107 DESTDIR=/usr/local
108
109 # Stuff
110 CC       = gcc
111 INCLUDES = 
112 OPT      = -O
113 CFLAGS   = ${OPT} ${INCLUDES} ${DEFINES}
114 LIBS     = 
115 LDFLAGS  =
116
117 # Where to find yacc and lex
118 YACC=yacc
119 LEX=lex
120
121 # Where to find BSD compatible install
122 INSTALL=install
123
124 ################# NO USER SERVICABLE PARTS BELOW HERE
125
126 VERSION=1.8
127
128 COFLAGS = -l
129
130 default:do-it-all
131
132 ifeq (.depend,$(wildcard .depend))
133 include .depend
134 do-it-all: all
135         @echo " " Now type make install to install rpld
136         @echo " " or make nics to assemble the adapter utilities
137         @echo " " or make realtime to capture and analyse RPL traffic
138
139 else
140 do-it-all: depend
141         @echo " " Now type make again to build rpld
142 endif
143
144 BINDIR= ${DESTDIR}/sbin
145 NROFF=  groff -Tascii
146 NRCLN = sed 's/.\b//g'
147 MANDOC= -mandoc
148 BINOWN= root
149 BINGRP= kmem
150 BINMODE=555
151
152 MANOWN= bin
153 MANGRP= bin
154 MANMODE=444
155
156 MANROOT=${DESTDIR}/man/man
157 MAN8=   ${MANROOT}8
158 MAN8EXT=8
159 MAN8SRC=man
160 MAN5=   ${MANROOT}5
161 MAN5EXT=5
162 MAN5SRC=man
163
164
165 PROTOSRC = protocol.c rpld.c util.c rpl.c client.c config.c  
166 HSRCS=rpl.h project.h rpl.h llc.h client.h  nit.h
167
168 CSRCS=${PROTOSRC} ${DRIVER}
169
170 YSRCS=rpld_conf.y
171 LSRCS=rpld_conf.lex
172 MANSRCS=rpld.man rpld.conf.man
173
174 ALLSRCS=${CSRCS}
175
176 RCSCFILES=${CSRCS} ${HSRCS} linux-nit.c linux-old-nit.c llc-linux.c bpf-nit.c
177 RCSFILES=${RCSCFILES} ${YSRCS} ${LSRCS} ${MANSRCS} ana.c
178
179
180 PROTOH=prototypes.h
181
182 PROG=rpld
183
184 OBJS=${CSRCS:%.c=%.o} ${YSRCS:%.y=%.yy.o} ${LSRCS:%.lex=%.tab.o}
185
186 YGUFF=${YSRCS:%.y=%.yy.c} ${LSRCS:%.lex=%.tab.c} ${LSRCS:%.lex=%.tab.h}
187
188 all:${PROG} ana doc
189
190
191
192
193 install: install-prog install-docs
194         @echo " " you can find a sample configuration file
195         @echo " " in this directory called rpld.conf.sample
196         @echo " " your config file should be placed in /etc/rpld.conf
197
198 MEN=rpld.conf.5 rpld.8
199 TXTMEN=${MEN:%=doc/%}
200
201 doc:${MEN} 
202
203 doc/rpld.8:rpld.man
204         ${NROFF} ${MANDOC} $< | ${NRCLN} > $@
205 doc/rpld.conf.5:rpld.conf.man
206         ${NROFF} ${MANDOC} $< | ${NRCLN} > $@
207
208 %.${MAN8EXT}:%.${MAN8SRC}
209         cp $< $@
210
211 %.${MAN5EXT}:%.${MAN5SRC}
212         cp $< $@
213
214 install-prog:${PROG}
215         ${INSTALL} -c -o ${BINOWN} -g ${BINGRP} -m ${BINMODE} ${PROG} ${BINDIR}
216
217 install-docs: doc
218         ${INSTALL} -c -o ${MANOWN} -g ${MANGRP} -m ${MANMODE} rpld.${MAN8EXT} ${MAN8}/rpld.${MAN8EXT}
219         ${INSTALL} -c -o ${MANOWN} -g ${MANGRP} -m ${MANMODE} rpld.conf.${MAN5EXT} ${MAN5}/rpld.conf.${MAN5EXT}
220
221 ana:ana.c ${NIT}
222 #linux-old-nit.c
223
224 realtime: ana
225         ./ana
226
227 #capture: 
228 #       tcpdump -x -s 2048 ether[14]=0xfc and ether[15]=0xfc -w capture.dat
229
230 #replay: ana capture.dat
231 #       tcpdump -x -r capture.dat | ana
232
233
234 nics: nics.doesntexist
235
236 nics.doesntexist:
237         ${MAKE} -C nics
238
239 ${PROG}:${OBJS}
240         ${CC} ${CFLAGS} ${LDFLAGS} -o ${PROG} ${OBJS} ${LIBS}
241
242 clean: nodep
243         /bin/rm -rf ${OBJS} *% *~ *.o *.BAK core a.out ${PROG}
244         /bin/rm -rf ${YSRCS:%.y=%.yy.c} ${LSRCS:%.lex=%.tab.c}
245         /bin/rm -rf ${LSRCS:%.lex=%.tab.h}
246         /bin/rm -rf ana capture.dat
247         /bin/rm -rf nics.stamp
248         /bin/rm -rf ${MEN} Makefile.bak
249         ${MAKE} -C nics clean
250
251 proto: ${PROTOSRCS} ${HSRCS} ${LSRCS:%.lex=%.tab.h}
252         echo -n > ${PROTOH}
253         echo -n > ${PROTOH}.tmp
254         for i in ${PROTOSRC}; do cproto -e -v $$i | grep -v inline >> ${PROTOH}.tmp  ; done
255         /bin/mv -f ${PROTOH}.tmp ${PROTOH}
256
257
258
259 depend: ${RCSFILES} ${YSRCS:%.y=%.tab.h} 
260         makedepend -f- ${INCLUDES} ${ALLSRCS} > .depend
261
262 nodep:
263         /bin/rm -rf .depend
264
265 tidy:
266         ci -l -m\# ${RCSFILES}
267         indent -ts0 -i2 ${RCSCFILES}
268         ci -l -m\# ana.c
269         indent -ts0 -i2 ana.c
270         /bin/rm -rf nics.stamp
271         ${MAKE} -C nics tidy
272         ci -l -m\# Makefile
273
274 checkin:
275         ci -m\# ${RCSFILES}
276 checkout:
277         ci -l ${RCSFILES}
278
279 MYDIR=rpld-${VERSION}
280
281 distrib: 
282         ${MAKE} tidy
283         ${MAKE} proto
284         ${MAKE} doc
285         ${MAKE} clean
286         ${MAKE} yguff
287         ${MAKE} ${TXTMEN}
288         ${MAKE} -C nics
289         cd ..; tar cvfzX ${MYDIR}/DISTRIB/${MYDIR}.tar.gz ${MYDIR}/.xclude ${MYDIR}
290
291 yguff:${YGUFF}
292         
293
294 %.tab.c:%.y
295         ${YACC} -d -b ${@:%.tab.c=%} $<
296
297 %.tab.h:%.y
298         ${YACC} -d -b ${@:%.tab.h=%} $<
299
300 %.yy.c:%.lex
301         ${LEX} -o$@ $<
302
303 config.o: rpld_conf.tab.h
304
305 # DO NOT DELETE