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