xref: /netbsd-src/external/bsd/nsd/dist/doc/NEW-CFG-OPTION (revision d83a80ee7fb31190352cf1f781441e06ca6a86db)
1*d83a80eeSchristosWhen adding a new configuration option to NSD, several files need to be
2*d83a80eeSchristostouched. This file is an enumeration of files that need to be edited.
3*d83a80eeSchristosSuppose we are going to add a configuration option 'dummy:' that can take
4*d83a80eeSchristosa string. We need to update the following files:
5*d83a80eeSchristos
6*d83a80eeSchristos	1. configlexer.lex
7*d83a80eeSchristos	2. configparser.y
8*d83a80eeSchristos	3. options.h
9*d83a80eeSchristos	4. options.c
10*d83a80eeSchristos	5. nsd.conf.sample.in
11*d83a80eeSchristos	6. nsd.conf.5.in
12*d83a80eeSchristos	7. nsd-checkconf.c
13*d83a80eeSchristos	8. tpkg/checkconf.tpkg
14*d83a80eeSchristos
15*d83a80eeSchristos1. Update configlexer.lex
16*d83a80eeSchristos
17*d83a80eeSchristosMake sure that zonec understands the new option by adding the following
18*d83a80eeSchristosline into configlexer.lex
19*d83a80eeSchristos
20*d83a80eeSchristos	dummy{COLON}  { LEXOUT(("v(%s) ", yytext)); return VAR_DUMMY;}
21*d83a80eeSchristos
22*d83a80eeSchristos2. Update configparser.y
23*d83a80eeSchristos
24*d83a80eeSchristosMake sure that zonec can parse the new option by adding VAR_DUMMY to the set
25*d83a80eeSchristosof tokens:
26*d83a80eeSchristos
27*d83a80eeSchristos	%token VAR_DUMMY
28*d83a80eeSchristos
29*d83a80eeSchristosUpdate the grammar. For example, if it a server option, extend content_server:
30*d83a80eeSchristos
31*d83a80eeSchristos	content_server: server_ip_address | ...
32*d83a80eeSchristos		server_hide_version | server_dummy;
33*d83a80eeSchristos
34*d83a80eeSchristosAnd write down the dummy rule:
35*d83a80eeSchristos
36*d83a80eeSchristos	server_dummy: VAR_DUMMY STRING
37*d83a80eeSchristos        {
38*d83a80eeSchristos                OUTYY(("P(server_dummy:%s)\n", $2));
39*d83a80eeSchristos                cfg_parser->opt->dummy =
40*d83a80eeSchristos			region_strdup(cfg_parser->opt->region, $2);
41*d83a80eeSchristos        }
42*d83a80eeSchristos        ;
43*d83a80eeSchristos
44*d83a80eeSchristos3. Update options.h
45*d83a80eeSchristos
46*d83a80eeSchristosMake sure that there is storage for the dummy option. In struct nsd_options,
47*d83a80eeSchristosadd:
48*d83a80eeSchristos
49*d83a80eeSchristos	const char* dummy;
50*d83a80eeSchristos
51*d83a80eeSchristos4. Update options.c
52*d83a80eeSchristos
53*d83a80eeSchristosSet a default dummy string. In the function nsd_options_create(), add:
54*d83a80eeSchristos
55*d83a80eeSchristos	opt->dummy = "dummy";
56*d83a80eeSchristos
57*d83a80eeSchristos5. Update nsd.conf.sample.in
58*d83a80eeSchristos
59*d83a80eeSchristosAdd a reference in the sample configuration file:
60*d83a80eeSchristos
61*d83a80eeSchristos	# This option does nothing.
62*d83a80eeSchristos	# dummy: "dummy"
63*d83a80eeSchristos
64*d83a80eeSchristos6. Update nsd.conf.5.in
65*d83a80eeSchristos
66*d83a80eeSchristosUpdate the nsd.conf manpage:
67*d83a80eeSchristos
68*d83a80eeSchristos	.TP
69*d83a80eeSchristos	.B dummy:\fR <filename>
70*d83a80eeSchristos	Does nothing.
71*d83a80eeSchristos
72*d83a80eeSchristos7. Update nsd-checkconf.c
73*d83a80eeSchristos
74*d83a80eeSchristosMake the checkconf tool aware of the new option. In config_print_zone(), add:
75*d83a80eeSchristos
76*d83a80eeSchristos	SERV_GET_STR(dummy, o);
77*d83a80eeSchristos
78*d83a80eeSchristosand in config_test_print_server(), add:
79*d83a80eeSchristos
80*d83a80eeSchristos	print_string_var("dummy:", opt->dummy);
81*d83a80eeSchristos
82*d83a80eeSchristos8. Update tpkg/checkconf.tpkg
83*d83a80eeSchristos
84*d83a80eeSchristosMake the test aware of the new option. Extract checkconf.tpkg:
85*d83a80eeSchristos
86*d83a80eeSchristos	$ cd tpkg;
87*d83a80eeSchristos	$ tpkg extract checkconf.tpkg
88*d83a80eeSchristos	$ cd checkconf.dir
89*d83a80eeSchristos
90*d83a80eeSchristosAnd add to the various checkconf.check[1-9] files:
91*d83a80eeSchristos
92*d83a80eeSchristos	dummy: "dummy"
93*d83a80eeSchristos
94*d83a80eeSchristosGo back to the tpkg directory and create the new test:
95*d83a80eeSchristos
96*d83a80eeSchristos	$ cd ..
97*d83a80eeSchristos	$ tpkg create checkconf.tpkg
98*d83a80eeSchristos
99*d83a80eeSchristos9. Update other files
100*d83a80eeSchristos
101*d83a80eeSchristosYou might need to edit other files too:
102*d83a80eeSchristos
103*d83a80eeSchristos- If the new option requires to be enabled at build time, you need to add
104*d83a80eeSchristos  stuff to configure.ac and Makefile.in.
105*d83a80eeSchristos
106*d83a80eeSchristos- Update documentation files, like doc/README, doc/RELNOTES, doc/Changelog.
107*d83a80eeSchristos
108*d83a80eeSchristos- Obviously, the source code files need to be edited to implement the new
109*d83a80eeSchristos  functionality.
110*d83a80eeSchristos
111*d83a80eeSchristos
112