1009ea47eSEdward Tomasz Napierala %{
2009ea47eSEdward Tomasz Napierala /*-
34d846d26SWarner Losh * SPDX-License-Identifier: BSD-2-Clause
41de7b4b8SPedro F. Giffuni *
5009ea47eSEdward Tomasz Napierala * Copyright (c) 2012 The FreeBSD Foundation
6009ea47eSEdward Tomasz Napierala *
7009ea47eSEdward Tomasz Napierala * This software was developed by Edward Tomasz Napierala under sponsorship
8009ea47eSEdward Tomasz Napierala * from the FreeBSD Foundation.
9009ea47eSEdward Tomasz Napierala *
10009ea47eSEdward Tomasz Napierala * Redistribution and use in source and binary forms, with or without
11009ea47eSEdward Tomasz Napierala * modification, are permitted provided that the following conditions
12009ea47eSEdward Tomasz Napierala * are met:
13009ea47eSEdward Tomasz Napierala * 1. Redistributions of source code must retain the above copyright
14009ea47eSEdward Tomasz Napierala * notice, this list of conditions and the following disclaimer.
15009ea47eSEdward Tomasz Napierala * 2. Redistributions in binary form must reproduce the above copyright
16009ea47eSEdward Tomasz Napierala * notice, this list of conditions and the following disclaimer in the
17009ea47eSEdward Tomasz Napierala * documentation and/or other materials provided with the distribution.
18009ea47eSEdward Tomasz Napierala *
19009ea47eSEdward Tomasz Napierala * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
20009ea47eSEdward Tomasz Napierala * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
21009ea47eSEdward Tomasz Napierala * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
22009ea47eSEdward Tomasz Napierala * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
23009ea47eSEdward Tomasz Napierala * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
24009ea47eSEdward Tomasz Napierala * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
25009ea47eSEdward Tomasz Napierala * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
26009ea47eSEdward Tomasz Napierala * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
27009ea47eSEdward Tomasz Napierala * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
28009ea47eSEdward Tomasz Napierala * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
29009ea47eSEdward Tomasz Napierala * SUCH DAMAGE.
30009ea47eSEdward Tomasz Napierala */
31009ea47eSEdward Tomasz Napierala
32009ea47eSEdward Tomasz Napierala #include <sys/queue.h>
33009ea47eSEdward Tomasz Napierala #include <sys/types.h>
34009ea47eSEdward Tomasz Napierala #include <sys/stat.h>
35009ea47eSEdward Tomasz Napierala #include <assert.h>
36009ea47eSEdward Tomasz Napierala #include <stdio.h>
37009ea47eSEdward Tomasz Napierala #include <stdlib.h>
38009ea47eSEdward Tomasz Napierala #include <string.h>
39009ea47eSEdward Tomasz Napierala
40009ea47eSEdward Tomasz Napierala #include "ctld.h"
4164ffe6d4SRichard Scheffenegger #include <netinet/in.h>
4264ffe6d4SRichard Scheffenegger #include <netinet/ip.h>
43009ea47eSEdward Tomasz Napierala
44009ea47eSEdward Tomasz Napierala extern FILE *yyin;
45009ea47eSEdward Tomasz Napierala extern char *yytext;
46009ea47eSEdward Tomasz Napierala extern int lineno;
47009ea47eSEdward Tomasz Napierala
48009ea47eSEdward Tomasz Napierala static struct conf *conf = NULL;
49009ea47eSEdward Tomasz Napierala static struct auth_group *auth_group = NULL;
50009ea47eSEdward Tomasz Napierala static struct portal_group *portal_group = NULL;
51009ea47eSEdward Tomasz Napierala static struct target *target = NULL;
52009ea47eSEdward Tomasz Napierala static struct lun *lun = NULL;
53009ea47eSEdward Tomasz Napierala
54009ea47eSEdward Tomasz Napierala extern void yyerror(const char *);
55009ea47eSEdward Tomasz Napierala extern void yyrestart(FILE *);
56009ea47eSEdward Tomasz Napierala
57009ea47eSEdward Tomasz Napierala %}
58009ea47eSEdward Tomasz Napierala
59df9900fbSEdward Tomasz Napierala %token ALIAS AUTH_GROUP AUTH_TYPE BACKEND BLOCKSIZE CHAP CHAP_MUTUAL
6091be33dcSAlexander Motin %token CLOSING_BRACKET CTL_LUN DEBUG DEVICE_ID DEVICE_TYPE
6164ffe6d4SRichard Scheffenegger %token DISCOVERY_AUTH_GROUP DISCOVERY_FILTER DSCP FOREIGN
62dbb1ee18SEdward Tomasz Napierala %token INITIATOR_NAME INITIATOR_PORTAL ISNS_SERVER ISNS_PERIOD ISNS_TIMEOUT
6307b49a3eSEdward Tomasz Napierala %token LISTEN LISTEN_ISER LUN MAXPROC OFFLOAD OPENING_BRACKET OPTION
64ea8f1280SRichard Scheffenegger %token PATH PCP PIDFILE PORT PORTAL_GROUP REDIRECT SEMICOLON SERIAL
65ea8f1280SRichard Scheffenegger %token SIZE STR TAG TARGET TIMEOUT
6664ffe6d4SRichard Scheffenegger %token AF11 AF12 AF13 AF21 AF22 AF23 AF31 AF32 AF33 AF41 AF42 AF43
6764ffe6d4SRichard Scheffenegger %token BE EF CS0 CS1 CS2 CS3 CS4 CS5 CS6 CS7
68009ea47eSEdward Tomasz Napierala
69009ea47eSEdward Tomasz Napierala %union
70009ea47eSEdward Tomasz Napierala {
71009ea47eSEdward Tomasz Napierala char *str;
72009ea47eSEdward Tomasz Napierala }
73009ea47eSEdward Tomasz Napierala
74009ea47eSEdward Tomasz Napierala %token <str> STR
75009ea47eSEdward Tomasz Napierala
76009ea47eSEdward Tomasz Napierala %%
77009ea47eSEdward Tomasz Napierala
78009ea47eSEdward Tomasz Napierala statements:
79009ea47eSEdward Tomasz Napierala |
80009ea47eSEdward Tomasz Napierala statements statement
81f9488580SEdward Tomasz Napierala |
82f9488580SEdward Tomasz Napierala statements statement SEMICOLON
83009ea47eSEdward Tomasz Napierala ;
84009ea47eSEdward Tomasz Napierala
85009ea47eSEdward Tomasz Napierala statement:
86e1c0d0d8SEdward Tomasz Napierala debug
87009ea47eSEdward Tomasz Napierala |
88e1c0d0d8SEdward Tomasz Napierala timeout
89009ea47eSEdward Tomasz Napierala |
90e1c0d0d8SEdward Tomasz Napierala maxproc
91009ea47eSEdward Tomasz Napierala |
92e1c0d0d8SEdward Tomasz Napierala pidfile
93009ea47eSEdward Tomasz Napierala |
94829603e2SAlexander Motin isns_server
95829603e2SAlexander Motin |
96829603e2SAlexander Motin isns_period
97829603e2SAlexander Motin |
98829603e2SAlexander Motin isns_timeout
99829603e2SAlexander Motin |
100e1c0d0d8SEdward Tomasz Napierala auth_group
101009ea47eSEdward Tomasz Napierala |
102e1c0d0d8SEdward Tomasz Napierala portal_group
103009ea47eSEdward Tomasz Napierala |
104920c6cbaSAlexander Motin lun
105920c6cbaSAlexander Motin |
106e1c0d0d8SEdward Tomasz Napierala target
107009ea47eSEdward Tomasz Napierala ;
108009ea47eSEdward Tomasz Napierala
1094524db57SEdward Tomasz Napierala debug: DEBUG STR
110009ea47eSEdward Tomasz Napierala {
1114524db57SEdward Tomasz Napierala uint64_t tmp;
1124524db57SEdward Tomasz Napierala
1134524db57SEdward Tomasz Napierala if (expand_number($2, &tmp) != 0) {
114d9b4554dSEdward Tomasz Napierala yyerror("invalid numeric value");
1154524db57SEdward Tomasz Napierala free($2);
1164524db57SEdward Tomasz Napierala return (1);
1174524db57SEdward Tomasz Napierala }
1184524db57SEdward Tomasz Napierala
1194524db57SEdward Tomasz Napierala conf->conf_debug = tmp;
120009ea47eSEdward Tomasz Napierala }
121009ea47eSEdward Tomasz Napierala ;
122009ea47eSEdward Tomasz Napierala
1234524db57SEdward Tomasz Napierala timeout: TIMEOUT STR
124009ea47eSEdward Tomasz Napierala {
1254524db57SEdward Tomasz Napierala uint64_t tmp;
1264524db57SEdward Tomasz Napierala
1274524db57SEdward Tomasz Napierala if (expand_number($2, &tmp) != 0) {
128d9b4554dSEdward Tomasz Napierala yyerror("invalid numeric value");
1294524db57SEdward Tomasz Napierala free($2);
1304524db57SEdward Tomasz Napierala return (1);
1314524db57SEdward Tomasz Napierala }
1324524db57SEdward Tomasz Napierala
1334524db57SEdward Tomasz Napierala conf->conf_timeout = tmp;
134009ea47eSEdward Tomasz Napierala }
135009ea47eSEdward Tomasz Napierala ;
136009ea47eSEdward Tomasz Napierala
1374524db57SEdward Tomasz Napierala maxproc: MAXPROC STR
138009ea47eSEdward Tomasz Napierala {
1394524db57SEdward Tomasz Napierala uint64_t tmp;
1404524db57SEdward Tomasz Napierala
1414524db57SEdward Tomasz Napierala if (expand_number($2, &tmp) != 0) {
142d9b4554dSEdward Tomasz Napierala yyerror("invalid numeric value");
1434524db57SEdward Tomasz Napierala free($2);
1444524db57SEdward Tomasz Napierala return (1);
1454524db57SEdward Tomasz Napierala }
1464524db57SEdward Tomasz Napierala
1474524db57SEdward Tomasz Napierala conf->conf_maxproc = tmp;
148009ea47eSEdward Tomasz Napierala }
149009ea47eSEdward Tomasz Napierala ;
150009ea47eSEdward Tomasz Napierala
151e1c0d0d8SEdward Tomasz Napierala pidfile: PIDFILE STR
152009ea47eSEdward Tomasz Napierala {
153009ea47eSEdward Tomasz Napierala if (conf->conf_pidfile_path != NULL) {
154009ea47eSEdward Tomasz Napierala log_warnx("pidfile specified more than once");
155009ea47eSEdward Tomasz Napierala free($2);
156009ea47eSEdward Tomasz Napierala return (1);
157009ea47eSEdward Tomasz Napierala }
158009ea47eSEdward Tomasz Napierala conf->conf_pidfile_path = $2;
159009ea47eSEdward Tomasz Napierala }
160009ea47eSEdward Tomasz Napierala ;
161009ea47eSEdward Tomasz Napierala
162829603e2SAlexander Motin isns_server: ISNS_SERVER STR
163829603e2SAlexander Motin {
164829603e2SAlexander Motin int error;
165829603e2SAlexander Motin
166829603e2SAlexander Motin error = isns_new(conf, $2);
167829603e2SAlexander Motin free($2);
168829603e2SAlexander Motin if (error != 0)
169829603e2SAlexander Motin return (1);
170829603e2SAlexander Motin }
171829603e2SAlexander Motin ;
172829603e2SAlexander Motin
173d9b4554dSEdward Tomasz Napierala isns_period: ISNS_PERIOD STR
174829603e2SAlexander Motin {
175d9b4554dSEdward Tomasz Napierala uint64_t tmp;
176d9b4554dSEdward Tomasz Napierala
177d9b4554dSEdward Tomasz Napierala if (expand_number($2, &tmp) != 0) {
178d9b4554dSEdward Tomasz Napierala yyerror("invalid numeric value");
179d9b4554dSEdward Tomasz Napierala free($2);
180d9b4554dSEdward Tomasz Napierala return (1);
181d9b4554dSEdward Tomasz Napierala }
182d9b4554dSEdward Tomasz Napierala
183d9b4554dSEdward Tomasz Napierala conf->conf_isns_period = tmp;
184829603e2SAlexander Motin }
185829603e2SAlexander Motin ;
186829603e2SAlexander Motin
187d9b4554dSEdward Tomasz Napierala isns_timeout: ISNS_TIMEOUT STR
188829603e2SAlexander Motin {
189d9b4554dSEdward Tomasz Napierala uint64_t tmp;
190d9b4554dSEdward Tomasz Napierala
191d9b4554dSEdward Tomasz Napierala if (expand_number($2, &tmp) != 0) {
192d9b4554dSEdward Tomasz Napierala yyerror("invalid numeric value");
193d9b4554dSEdward Tomasz Napierala free($2);
194d9b4554dSEdward Tomasz Napierala return (1);
195d9b4554dSEdward Tomasz Napierala }
196d9b4554dSEdward Tomasz Napierala
197d9b4554dSEdward Tomasz Napierala conf->conf_isns_timeout = tmp;
198829603e2SAlexander Motin }
199829603e2SAlexander Motin ;
200829603e2SAlexander Motin
201e1c0d0d8SEdward Tomasz Napierala auth_group: AUTH_GROUP auth_group_name
202009ea47eSEdward Tomasz Napierala OPENING_BRACKET auth_group_entries CLOSING_BRACKET
203009ea47eSEdward Tomasz Napierala {
204009ea47eSEdward Tomasz Napierala auth_group = NULL;
205009ea47eSEdward Tomasz Napierala }
206009ea47eSEdward Tomasz Napierala ;
207009ea47eSEdward Tomasz Napierala
208009ea47eSEdward Tomasz Napierala auth_group_name: STR
209009ea47eSEdward Tomasz Napierala {
210e7977549SEdward Tomasz Napierala /*
211e7977549SEdward Tomasz Napierala * Make it possible to redefine default
212e7977549SEdward Tomasz Napierala * auth-group. but only once.
213e7977549SEdward Tomasz Napierala */
214e7977549SEdward Tomasz Napierala if (strcmp($1, "default") == 0 &&
215e7977549SEdward Tomasz Napierala conf->conf_default_ag_defined == false) {
216e7977549SEdward Tomasz Napierala auth_group = auth_group_find(conf, $1);
217e7977549SEdward Tomasz Napierala conf->conf_default_ag_defined = true;
218e7977549SEdward Tomasz Napierala } else {
219009ea47eSEdward Tomasz Napierala auth_group = auth_group_new(conf, $1);
220e7977549SEdward Tomasz Napierala }
221009ea47eSEdward Tomasz Napierala free($1);
222009ea47eSEdward Tomasz Napierala if (auth_group == NULL)
223009ea47eSEdward Tomasz Napierala return (1);
224009ea47eSEdward Tomasz Napierala }
225009ea47eSEdward Tomasz Napierala ;
226009ea47eSEdward Tomasz Napierala
227009ea47eSEdward Tomasz Napierala auth_group_entries:
228009ea47eSEdward Tomasz Napierala |
229009ea47eSEdward Tomasz Napierala auth_group_entries auth_group_entry
230f9488580SEdward Tomasz Napierala |
231f9488580SEdward Tomasz Napierala auth_group_entries auth_group_entry SEMICOLON
232009ea47eSEdward Tomasz Napierala ;
233009ea47eSEdward Tomasz Napierala
234009ea47eSEdward Tomasz Napierala auth_group_entry:
235df9900fbSEdward Tomasz Napierala auth_group_auth_type
236df9900fbSEdward Tomasz Napierala |
237009ea47eSEdward Tomasz Napierala auth_group_chap
238009ea47eSEdward Tomasz Napierala |
239009ea47eSEdward Tomasz Napierala auth_group_chap_mutual
2408cb2e958SEdward Tomasz Napierala |
2418cb2e958SEdward Tomasz Napierala auth_group_initiator_name
2428cb2e958SEdward Tomasz Napierala |
2438cb2e958SEdward Tomasz Napierala auth_group_initiator_portal
244009ea47eSEdward Tomasz Napierala ;
245009ea47eSEdward Tomasz Napierala
246df9900fbSEdward Tomasz Napierala auth_group_auth_type: AUTH_TYPE STR
247df9900fbSEdward Tomasz Napierala {
248df9900fbSEdward Tomasz Napierala int error;
249df9900fbSEdward Tomasz Napierala
250bd833b11SEdward Tomasz Napierala error = auth_group_set_type(auth_group, $2);
251df9900fbSEdward Tomasz Napierala free($2);
252df9900fbSEdward Tomasz Napierala if (error != 0)
253df9900fbSEdward Tomasz Napierala return (1);
254df9900fbSEdward Tomasz Napierala }
255df9900fbSEdward Tomasz Napierala ;
256df9900fbSEdward Tomasz Napierala
257009ea47eSEdward Tomasz Napierala auth_group_chap: CHAP STR STR
258009ea47eSEdward Tomasz Napierala {
259009ea47eSEdward Tomasz Napierala const struct auth *ca;
260009ea47eSEdward Tomasz Napierala
261009ea47eSEdward Tomasz Napierala ca = auth_new_chap(auth_group, $2, $3);
262009ea47eSEdward Tomasz Napierala free($2);
263009ea47eSEdward Tomasz Napierala free($3);
264009ea47eSEdward Tomasz Napierala if (ca == NULL)
265009ea47eSEdward Tomasz Napierala return (1);
266009ea47eSEdward Tomasz Napierala }
267009ea47eSEdward Tomasz Napierala ;
268009ea47eSEdward Tomasz Napierala
269009ea47eSEdward Tomasz Napierala auth_group_chap_mutual: CHAP_MUTUAL STR STR STR STR
270009ea47eSEdward Tomasz Napierala {
271009ea47eSEdward Tomasz Napierala const struct auth *ca;
272009ea47eSEdward Tomasz Napierala
273009ea47eSEdward Tomasz Napierala ca = auth_new_chap_mutual(auth_group, $2, $3, $4, $5);
274009ea47eSEdward Tomasz Napierala free($2);
275009ea47eSEdward Tomasz Napierala free($3);
276009ea47eSEdward Tomasz Napierala free($4);
277009ea47eSEdward Tomasz Napierala free($5);
278009ea47eSEdward Tomasz Napierala if (ca == NULL)
279009ea47eSEdward Tomasz Napierala return (1);
280009ea47eSEdward Tomasz Napierala }
281009ea47eSEdward Tomasz Napierala ;
282009ea47eSEdward Tomasz Napierala
2838cb2e958SEdward Tomasz Napierala auth_group_initiator_name: INITIATOR_NAME STR
2848cb2e958SEdward Tomasz Napierala {
2858cb2e958SEdward Tomasz Napierala const struct auth_name *an;
2868cb2e958SEdward Tomasz Napierala
2878cb2e958SEdward Tomasz Napierala an = auth_name_new(auth_group, $2);
2888cb2e958SEdward Tomasz Napierala free($2);
2898cb2e958SEdward Tomasz Napierala if (an == NULL)
2908cb2e958SEdward Tomasz Napierala return (1);
2918cb2e958SEdward Tomasz Napierala }
2928cb2e958SEdward Tomasz Napierala ;
2938cb2e958SEdward Tomasz Napierala
2948cb2e958SEdward Tomasz Napierala auth_group_initiator_portal: INITIATOR_PORTAL STR
2958cb2e958SEdward Tomasz Napierala {
2968cb2e958SEdward Tomasz Napierala const struct auth_portal *ap;
2978cb2e958SEdward Tomasz Napierala
2988cb2e958SEdward Tomasz Napierala ap = auth_portal_new(auth_group, $2);
2998cb2e958SEdward Tomasz Napierala free($2);
3008cb2e958SEdward Tomasz Napierala if (ap == NULL)
3018cb2e958SEdward Tomasz Napierala return (1);
3028cb2e958SEdward Tomasz Napierala }
3038cb2e958SEdward Tomasz Napierala ;
3048cb2e958SEdward Tomasz Napierala
305e1c0d0d8SEdward Tomasz Napierala portal_group: PORTAL_GROUP portal_group_name
306009ea47eSEdward Tomasz Napierala OPENING_BRACKET portal_group_entries CLOSING_BRACKET
307009ea47eSEdward Tomasz Napierala {
308009ea47eSEdward Tomasz Napierala portal_group = NULL;
309009ea47eSEdward Tomasz Napierala }
310009ea47eSEdward Tomasz Napierala ;
311009ea47eSEdward Tomasz Napierala
312009ea47eSEdward Tomasz Napierala portal_group_name: STR
313009ea47eSEdward Tomasz Napierala {
314252d941cSEdward Tomasz Napierala /*
315252d941cSEdward Tomasz Napierala * Make it possible to redefine default
316252d941cSEdward Tomasz Napierala * portal-group. but only once.
317252d941cSEdward Tomasz Napierala */
318252d941cSEdward Tomasz Napierala if (strcmp($1, "default") == 0 &&
319252d941cSEdward Tomasz Napierala conf->conf_default_pg_defined == false) {
320252d941cSEdward Tomasz Napierala portal_group = portal_group_find(conf, $1);
321252d941cSEdward Tomasz Napierala conf->conf_default_pg_defined = true;
322252d941cSEdward Tomasz Napierala } else {
323009ea47eSEdward Tomasz Napierala portal_group = portal_group_new(conf, $1);
324252d941cSEdward Tomasz Napierala }
325009ea47eSEdward Tomasz Napierala free($1);
326009ea47eSEdward Tomasz Napierala if (portal_group == NULL)
327009ea47eSEdward Tomasz Napierala return (1);
328009ea47eSEdward Tomasz Napierala }
329009ea47eSEdward Tomasz Napierala ;
330009ea47eSEdward Tomasz Napierala
331009ea47eSEdward Tomasz Napierala portal_group_entries:
332009ea47eSEdward Tomasz Napierala |
333009ea47eSEdward Tomasz Napierala portal_group_entries portal_group_entry
334f9488580SEdward Tomasz Napierala |
335f9488580SEdward Tomasz Napierala portal_group_entries portal_group_entry SEMICOLON
336009ea47eSEdward Tomasz Napierala ;
337009ea47eSEdward Tomasz Napierala
338009ea47eSEdward Tomasz Napierala portal_group_entry:
339009ea47eSEdward Tomasz Napierala portal_group_discovery_auth_group
340009ea47eSEdward Tomasz Napierala |
34105374883SEdward Tomasz Napierala portal_group_discovery_filter
34205374883SEdward Tomasz Napierala |
343db7bf2baSAlexander Motin portal_group_foreign
344db7bf2baSAlexander Motin |
345009ea47eSEdward Tomasz Napierala portal_group_listen
346009ea47eSEdward Tomasz Napierala |
347009ea47eSEdward Tomasz Napierala portal_group_listen_iser
3486dbdbf82SEdward Tomasz Napierala |
349a9d78210SEdward Tomasz Napierala portal_group_offload
350a9d78210SEdward Tomasz Napierala |
351398290f2SAlexander Motin portal_group_option
352398290f2SAlexander Motin |
3536dbdbf82SEdward Tomasz Napierala portal_group_redirect
354db7bf2baSAlexander Motin |
355db7bf2baSAlexander Motin portal_group_tag
35664ffe6d4SRichard Scheffenegger |
35764ffe6d4SRichard Scheffenegger portal_group_dscp
358ea8f1280SRichard Scheffenegger |
359ea8f1280SRichard Scheffenegger portal_group_pcp
360009ea47eSEdward Tomasz Napierala ;
361009ea47eSEdward Tomasz Napierala
362009ea47eSEdward Tomasz Napierala portal_group_discovery_auth_group: DISCOVERY_AUTH_GROUP STR
363009ea47eSEdward Tomasz Napierala {
364009ea47eSEdward Tomasz Napierala if (portal_group->pg_discovery_auth_group != NULL) {
365009ea47eSEdward Tomasz Napierala log_warnx("discovery-auth-group for portal-group "
366009ea47eSEdward Tomasz Napierala "\"%s\" specified more than once",
367009ea47eSEdward Tomasz Napierala portal_group->pg_name);
368009ea47eSEdward Tomasz Napierala return (1);
369009ea47eSEdward Tomasz Napierala }
370009ea47eSEdward Tomasz Napierala portal_group->pg_discovery_auth_group =
371009ea47eSEdward Tomasz Napierala auth_group_find(conf, $2);
372009ea47eSEdward Tomasz Napierala if (portal_group->pg_discovery_auth_group == NULL) {
373009ea47eSEdward Tomasz Napierala log_warnx("unknown discovery-auth-group \"%s\" "
374009ea47eSEdward Tomasz Napierala "for portal-group \"%s\"",
375009ea47eSEdward Tomasz Napierala $2, portal_group->pg_name);
376009ea47eSEdward Tomasz Napierala return (1);
377009ea47eSEdward Tomasz Napierala }
378009ea47eSEdward Tomasz Napierala free($2);
379009ea47eSEdward Tomasz Napierala }
380009ea47eSEdward Tomasz Napierala ;
381009ea47eSEdward Tomasz Napierala
38205374883SEdward Tomasz Napierala portal_group_discovery_filter: DISCOVERY_FILTER STR
38305374883SEdward Tomasz Napierala {
38405374883SEdward Tomasz Napierala int error;
38505374883SEdward Tomasz Napierala
386bd833b11SEdward Tomasz Napierala error = portal_group_set_filter(portal_group, $2);
38705374883SEdward Tomasz Napierala free($2);
38805374883SEdward Tomasz Napierala if (error != 0)
38905374883SEdward Tomasz Napierala return (1);
39005374883SEdward Tomasz Napierala }
39105374883SEdward Tomasz Napierala ;
39205374883SEdward Tomasz Napierala
393db7bf2baSAlexander Motin portal_group_foreign: FOREIGN
394db7bf2baSAlexander Motin {
395db7bf2baSAlexander Motin
396db7bf2baSAlexander Motin portal_group->pg_foreign = 1;
397db7bf2baSAlexander Motin }
398db7bf2baSAlexander Motin ;
399db7bf2baSAlexander Motin
400009ea47eSEdward Tomasz Napierala portal_group_listen: LISTEN STR
401009ea47eSEdward Tomasz Napierala {
402009ea47eSEdward Tomasz Napierala int error;
403009ea47eSEdward Tomasz Napierala
404009ea47eSEdward Tomasz Napierala error = portal_group_add_listen(portal_group, $2, false);
405009ea47eSEdward Tomasz Napierala free($2);
406009ea47eSEdward Tomasz Napierala if (error != 0)
407009ea47eSEdward Tomasz Napierala return (1);
408009ea47eSEdward Tomasz Napierala }
409009ea47eSEdward Tomasz Napierala ;
410009ea47eSEdward Tomasz Napierala
411009ea47eSEdward Tomasz Napierala portal_group_listen_iser: LISTEN_ISER STR
412009ea47eSEdward Tomasz Napierala {
413009ea47eSEdward Tomasz Napierala int error;
414009ea47eSEdward Tomasz Napierala
415009ea47eSEdward Tomasz Napierala error = portal_group_add_listen(portal_group, $2, true);
416009ea47eSEdward Tomasz Napierala free($2);
417009ea47eSEdward Tomasz Napierala if (error != 0)
418009ea47eSEdward Tomasz Napierala return (1);
419009ea47eSEdward Tomasz Napierala }
420009ea47eSEdward Tomasz Napierala ;
421009ea47eSEdward Tomasz Napierala
422a9d78210SEdward Tomasz Napierala portal_group_offload: OFFLOAD STR
423a9d78210SEdward Tomasz Napierala {
424a9d78210SEdward Tomasz Napierala int error;
425a9d78210SEdward Tomasz Napierala
426a9d78210SEdward Tomasz Napierala error = portal_group_set_offload(portal_group, $2);
427a9d78210SEdward Tomasz Napierala free($2);
428a9d78210SEdward Tomasz Napierala if (error != 0)
429a9d78210SEdward Tomasz Napierala return (1);
430a9d78210SEdward Tomasz Napierala }
431a9d78210SEdward Tomasz Napierala ;
432a9d78210SEdward Tomasz Napierala
433398290f2SAlexander Motin portal_group_option: OPTION STR STR
434398290f2SAlexander Motin {
435398290f2SAlexander Motin struct option *o;
436398290f2SAlexander Motin
437398290f2SAlexander Motin o = option_new(&portal_group->pg_options, $2, $3);
438398290f2SAlexander Motin free($2);
439398290f2SAlexander Motin free($3);
440398290f2SAlexander Motin if (o == NULL)
441398290f2SAlexander Motin return (1);
442398290f2SAlexander Motin }
443398290f2SAlexander Motin ;
444398290f2SAlexander Motin
4456dbdbf82SEdward Tomasz Napierala portal_group_redirect: REDIRECT STR
4466dbdbf82SEdward Tomasz Napierala {
4476dbdbf82SEdward Tomasz Napierala int error;
4486dbdbf82SEdward Tomasz Napierala
4496dbdbf82SEdward Tomasz Napierala error = portal_group_set_redirection(portal_group, $2);
4506dbdbf82SEdward Tomasz Napierala free($2);
4516dbdbf82SEdward Tomasz Napierala if (error != 0)
4526dbdbf82SEdward Tomasz Napierala return (1);
4536dbdbf82SEdward Tomasz Napierala }
4546dbdbf82SEdward Tomasz Napierala ;
4556dbdbf82SEdward Tomasz Napierala
456db7bf2baSAlexander Motin portal_group_tag: TAG STR
457db7bf2baSAlexander Motin {
458db7bf2baSAlexander Motin uint64_t tmp;
459db7bf2baSAlexander Motin
460db7bf2baSAlexander Motin if (expand_number($2, &tmp) != 0) {
461db7bf2baSAlexander Motin yyerror("invalid numeric value");
462db7bf2baSAlexander Motin free($2);
463db7bf2baSAlexander Motin return (1);
464db7bf2baSAlexander Motin }
465db7bf2baSAlexander Motin
466db7bf2baSAlexander Motin portal_group->pg_tag = tmp;
467db7bf2baSAlexander Motin }
468db7bf2baSAlexander Motin ;
469db7bf2baSAlexander Motin
47064ffe6d4SRichard Scheffenegger portal_group_dscp
47164ffe6d4SRichard Scheffenegger : DSCP STR
47264ffe6d4SRichard Scheffenegger {
47364ffe6d4SRichard Scheffenegger uint64_t tmp;
47464ffe6d4SRichard Scheffenegger
47564ffe6d4SRichard Scheffenegger if (strcmp($2, "0x") == 0) {
47664ffe6d4SRichard Scheffenegger tmp = strtol($2 + 2, NULL, 16);
47764ffe6d4SRichard Scheffenegger } else if (expand_number($2, &tmp) != 0) {
47864ffe6d4SRichard Scheffenegger yyerror("invalid numeric value");
47964ffe6d4SRichard Scheffenegger free($2);
48064ffe6d4SRichard Scheffenegger return(1);
48164ffe6d4SRichard Scheffenegger }
48264ffe6d4SRichard Scheffenegger if (tmp >= 0x40) {
48364ffe6d4SRichard Scheffenegger yyerror("invalid dscp value");
48464ffe6d4SRichard Scheffenegger return(1);
48564ffe6d4SRichard Scheffenegger }
48664ffe6d4SRichard Scheffenegger
48764ffe6d4SRichard Scheffenegger portal_group->pg_dscp = tmp;
48864ffe6d4SRichard Scheffenegger }
48964ffe6d4SRichard Scheffenegger | DSCP BE { portal_group->pg_dscp = IPTOS_DSCP_CS0 >> 2 ; }
49064ffe6d4SRichard Scheffenegger | DSCP EF { portal_group->pg_dscp = IPTOS_DSCP_EF >> 2 ; }
49164ffe6d4SRichard Scheffenegger | DSCP CS0 { portal_group->pg_dscp = IPTOS_DSCP_CS0 >> 2 ; }
49264ffe6d4SRichard Scheffenegger | DSCP CS1 { portal_group->pg_dscp = IPTOS_DSCP_CS1 >> 2 ; }
49364ffe6d4SRichard Scheffenegger | DSCP CS2 { portal_group->pg_dscp = IPTOS_DSCP_CS2 >> 2 ; }
49464ffe6d4SRichard Scheffenegger | DSCP CS3 { portal_group->pg_dscp = IPTOS_DSCP_CS3 >> 2 ; }
49564ffe6d4SRichard Scheffenegger | DSCP CS4 { portal_group->pg_dscp = IPTOS_DSCP_CS4 >> 2 ; }
49664ffe6d4SRichard Scheffenegger | DSCP CS5 { portal_group->pg_dscp = IPTOS_DSCP_CS5 >> 2 ; }
49764ffe6d4SRichard Scheffenegger | DSCP CS6 { portal_group->pg_dscp = IPTOS_DSCP_CS6 >> 2 ; }
49864ffe6d4SRichard Scheffenegger | DSCP CS7 { portal_group->pg_dscp = IPTOS_DSCP_CS7 >> 2 ; }
49964ffe6d4SRichard Scheffenegger | DSCP AF11 { portal_group->pg_dscp = IPTOS_DSCP_AF11 >> 2 ; }
50064ffe6d4SRichard Scheffenegger | DSCP AF12 { portal_group->pg_dscp = IPTOS_DSCP_AF12 >> 2 ; }
50164ffe6d4SRichard Scheffenegger | DSCP AF13 { portal_group->pg_dscp = IPTOS_DSCP_AF13 >> 2 ; }
50264ffe6d4SRichard Scheffenegger | DSCP AF21 { portal_group->pg_dscp = IPTOS_DSCP_AF21 >> 2 ; }
50364ffe6d4SRichard Scheffenegger | DSCP AF22 { portal_group->pg_dscp = IPTOS_DSCP_AF22 >> 2 ; }
50464ffe6d4SRichard Scheffenegger | DSCP AF23 { portal_group->pg_dscp = IPTOS_DSCP_AF23 >> 2 ; }
50564ffe6d4SRichard Scheffenegger | DSCP AF31 { portal_group->pg_dscp = IPTOS_DSCP_AF31 >> 2 ; }
50664ffe6d4SRichard Scheffenegger | DSCP AF32 { portal_group->pg_dscp = IPTOS_DSCP_AF32 >> 2 ; }
50764ffe6d4SRichard Scheffenegger | DSCP AF33 { portal_group->pg_dscp = IPTOS_DSCP_AF33 >> 2 ; }
50864ffe6d4SRichard Scheffenegger | DSCP AF41 { portal_group->pg_dscp = IPTOS_DSCP_AF41 >> 2 ; }
50964ffe6d4SRichard Scheffenegger | DSCP AF42 { portal_group->pg_dscp = IPTOS_DSCP_AF42 >> 2 ; }
51064ffe6d4SRichard Scheffenegger | DSCP AF43 { portal_group->pg_dscp = IPTOS_DSCP_AF43 >> 2 ; }
51164ffe6d4SRichard Scheffenegger ;
51264ffe6d4SRichard Scheffenegger
513ea8f1280SRichard Scheffenegger portal_group_pcp: PCP STR
514ea8f1280SRichard Scheffenegger {
515ea8f1280SRichard Scheffenegger uint64_t tmp;
516ea8f1280SRichard Scheffenegger
517ea8f1280SRichard Scheffenegger if (expand_number($2, &tmp) != 0) {
518ea8f1280SRichard Scheffenegger yyerror("invalid numeric value");
519ea8f1280SRichard Scheffenegger free($2);
520ea8f1280SRichard Scheffenegger return (1);
521ea8f1280SRichard Scheffenegger }
522e72a100bSAdrian Chadd if (tmp > 7) {
523ea8f1280SRichard Scheffenegger yyerror("invalid pcp value");
524ea8f1280SRichard Scheffenegger free($2);
525ea8f1280SRichard Scheffenegger return (1);
526ea8f1280SRichard Scheffenegger }
527ea8f1280SRichard Scheffenegger
528ea8f1280SRichard Scheffenegger portal_group->pg_pcp = tmp;
529ea8f1280SRichard Scheffenegger }
530ea8f1280SRichard Scheffenegger ;
53164ffe6d4SRichard Scheffenegger
532920c6cbaSAlexander Motin lun: LUN lun_name
533920c6cbaSAlexander Motin OPENING_BRACKET lun_entries CLOSING_BRACKET
534920c6cbaSAlexander Motin {
535920c6cbaSAlexander Motin lun = NULL;
536920c6cbaSAlexander Motin }
537920c6cbaSAlexander Motin ;
538920c6cbaSAlexander Motin
539920c6cbaSAlexander Motin lun_name: STR
540920c6cbaSAlexander Motin {
541920c6cbaSAlexander Motin lun = lun_new(conf, $1);
542920c6cbaSAlexander Motin free($1);
543920c6cbaSAlexander Motin if (lun == NULL)
544920c6cbaSAlexander Motin return (1);
545920c6cbaSAlexander Motin }
546920c6cbaSAlexander Motin ;
547920c6cbaSAlexander Motin
548e1c0d0d8SEdward Tomasz Napierala target: TARGET target_name
549009ea47eSEdward Tomasz Napierala OPENING_BRACKET target_entries CLOSING_BRACKET
550009ea47eSEdward Tomasz Napierala {
551009ea47eSEdward Tomasz Napierala target = NULL;
552009ea47eSEdward Tomasz Napierala }
553009ea47eSEdward Tomasz Napierala ;
554009ea47eSEdward Tomasz Napierala
555e1c0d0d8SEdward Tomasz Napierala target_name: STR
556009ea47eSEdward Tomasz Napierala {
557009ea47eSEdward Tomasz Napierala target = target_new(conf, $1);
558009ea47eSEdward Tomasz Napierala free($1);
559009ea47eSEdward Tomasz Napierala if (target == NULL)
560009ea47eSEdward Tomasz Napierala return (1);
561009ea47eSEdward Tomasz Napierala }
562009ea47eSEdward Tomasz Napierala ;
563009ea47eSEdward Tomasz Napierala
564009ea47eSEdward Tomasz Napierala target_entries:
565009ea47eSEdward Tomasz Napierala |
566009ea47eSEdward Tomasz Napierala target_entries target_entry
567f9488580SEdward Tomasz Napierala |
568f9488580SEdward Tomasz Napierala target_entries target_entry SEMICOLON
569009ea47eSEdward Tomasz Napierala ;
570009ea47eSEdward Tomasz Napierala
571009ea47eSEdward Tomasz Napierala target_entry:
572e1c0d0d8SEdward Tomasz Napierala target_alias
573009ea47eSEdward Tomasz Napierala |
574e1c0d0d8SEdward Tomasz Napierala target_auth_group
575009ea47eSEdward Tomasz Napierala |
576df9900fbSEdward Tomasz Napierala target_auth_type
577df9900fbSEdward Tomasz Napierala |
578e1c0d0d8SEdward Tomasz Napierala target_chap
579009ea47eSEdward Tomasz Napierala |
580e1c0d0d8SEdward Tomasz Napierala target_chap_mutual
581009ea47eSEdward Tomasz Napierala |
582e1c0d0d8SEdward Tomasz Napierala target_initiator_name
5838cb2e958SEdward Tomasz Napierala |
584e1c0d0d8SEdward Tomasz Napierala target_initiator_portal
5858cb2e958SEdward Tomasz Napierala |
586e1c0d0d8SEdward Tomasz Napierala target_portal_group
587009ea47eSEdward Tomasz Napierala |
588057abcb0SAlexander Motin target_port
589057abcb0SAlexander Motin |
5906dbdbf82SEdward Tomasz Napierala target_redirect
5916dbdbf82SEdward Tomasz Napierala |
592e1c0d0d8SEdward Tomasz Napierala target_lun
593920c6cbaSAlexander Motin |
594920c6cbaSAlexander Motin target_lun_ref
595009ea47eSEdward Tomasz Napierala ;
596009ea47eSEdward Tomasz Napierala
597e1c0d0d8SEdward Tomasz Napierala target_alias: ALIAS STR
598009ea47eSEdward Tomasz Napierala {
599009ea47eSEdward Tomasz Napierala if (target->t_alias != NULL) {
600009ea47eSEdward Tomasz Napierala log_warnx("alias for target \"%s\" "
601f7ae5bf8SEdward Tomasz Napierala "specified more than once", target->t_name);
602009ea47eSEdward Tomasz Napierala return (1);
603009ea47eSEdward Tomasz Napierala }
604009ea47eSEdward Tomasz Napierala target->t_alias = $2;
605009ea47eSEdward Tomasz Napierala }
606009ea47eSEdward Tomasz Napierala ;
607009ea47eSEdward Tomasz Napierala
608e1c0d0d8SEdward Tomasz Napierala target_auth_group: AUTH_GROUP STR
609009ea47eSEdward Tomasz Napierala {
610009ea47eSEdward Tomasz Napierala if (target->t_auth_group != NULL) {
611009ea47eSEdward Tomasz Napierala if (target->t_auth_group->ag_name != NULL)
612009ea47eSEdward Tomasz Napierala log_warnx("auth-group for target \"%s\" "
613f7ae5bf8SEdward Tomasz Napierala "specified more than once", target->t_name);
614009ea47eSEdward Tomasz Napierala else
615df9900fbSEdward Tomasz Napierala log_warnx("cannot use both auth-group and explicit "
616009ea47eSEdward Tomasz Napierala "authorisations for target \"%s\"",
617f7ae5bf8SEdward Tomasz Napierala target->t_name);
618009ea47eSEdward Tomasz Napierala return (1);
619009ea47eSEdward Tomasz Napierala }
620009ea47eSEdward Tomasz Napierala target->t_auth_group = auth_group_find(conf, $2);
621009ea47eSEdward Tomasz Napierala if (target->t_auth_group == NULL) {
622009ea47eSEdward Tomasz Napierala log_warnx("unknown auth-group \"%s\" for target "
623f7ae5bf8SEdward Tomasz Napierala "\"%s\"", $2, target->t_name);
624009ea47eSEdward Tomasz Napierala return (1);
625009ea47eSEdward Tomasz Napierala }
626009ea47eSEdward Tomasz Napierala free($2);
627009ea47eSEdward Tomasz Napierala }
628009ea47eSEdward Tomasz Napierala ;
629009ea47eSEdward Tomasz Napierala
630df9900fbSEdward Tomasz Napierala target_auth_type: AUTH_TYPE STR
631df9900fbSEdward Tomasz Napierala {
632df9900fbSEdward Tomasz Napierala int error;
633df9900fbSEdward Tomasz Napierala
634df9900fbSEdward Tomasz Napierala if (target->t_auth_group != NULL) {
635df9900fbSEdward Tomasz Napierala if (target->t_auth_group->ag_name != NULL) {
636df9900fbSEdward Tomasz Napierala log_warnx("cannot use both auth-group and "
637df9900fbSEdward Tomasz Napierala "auth-type for target \"%s\"",
638df9900fbSEdward Tomasz Napierala target->t_name);
639df9900fbSEdward Tomasz Napierala return (1);
640df9900fbSEdward Tomasz Napierala }
641df9900fbSEdward Tomasz Napierala } else {
642df9900fbSEdward Tomasz Napierala target->t_auth_group = auth_group_new(conf, NULL);
643df9900fbSEdward Tomasz Napierala if (target->t_auth_group == NULL) {
644df9900fbSEdward Tomasz Napierala free($2);
645df9900fbSEdward Tomasz Napierala return (1);
646df9900fbSEdward Tomasz Napierala }
647df9900fbSEdward Tomasz Napierala target->t_auth_group->ag_target = target;
648df9900fbSEdward Tomasz Napierala }
649bd833b11SEdward Tomasz Napierala error = auth_group_set_type(target->t_auth_group, $2);
650df9900fbSEdward Tomasz Napierala free($2);
651df9900fbSEdward Tomasz Napierala if (error != 0)
652df9900fbSEdward Tomasz Napierala return (1);
653df9900fbSEdward Tomasz Napierala }
654df9900fbSEdward Tomasz Napierala ;
655df9900fbSEdward Tomasz Napierala
656e1c0d0d8SEdward Tomasz Napierala target_chap: CHAP STR STR
657009ea47eSEdward Tomasz Napierala {
658009ea47eSEdward Tomasz Napierala const struct auth *ca;
659009ea47eSEdward Tomasz Napierala
660009ea47eSEdward Tomasz Napierala if (target->t_auth_group != NULL) {
661009ea47eSEdward Tomasz Napierala if (target->t_auth_group->ag_name != NULL) {
662df9900fbSEdward Tomasz Napierala log_warnx("cannot use both auth-group and "
663df9900fbSEdward Tomasz Napierala "chap for target \"%s\"",
664f7ae5bf8SEdward Tomasz Napierala target->t_name);
665009ea47eSEdward Tomasz Napierala free($2);
666009ea47eSEdward Tomasz Napierala free($3);
667009ea47eSEdward Tomasz Napierala return (1);
668009ea47eSEdward Tomasz Napierala }
669009ea47eSEdward Tomasz Napierala } else {
670009ea47eSEdward Tomasz Napierala target->t_auth_group = auth_group_new(conf, NULL);
671009ea47eSEdward Tomasz Napierala if (target->t_auth_group == NULL) {
672009ea47eSEdward Tomasz Napierala free($2);
673009ea47eSEdward Tomasz Napierala free($3);
674009ea47eSEdward Tomasz Napierala return (1);
675009ea47eSEdward Tomasz Napierala }
676009ea47eSEdward Tomasz Napierala target->t_auth_group->ag_target = target;
677009ea47eSEdward Tomasz Napierala }
678009ea47eSEdward Tomasz Napierala ca = auth_new_chap(target->t_auth_group, $2, $3);
679009ea47eSEdward Tomasz Napierala free($2);
680009ea47eSEdward Tomasz Napierala free($3);
681009ea47eSEdward Tomasz Napierala if (ca == NULL)
682009ea47eSEdward Tomasz Napierala return (1);
683009ea47eSEdward Tomasz Napierala }
684009ea47eSEdward Tomasz Napierala ;
685009ea47eSEdward Tomasz Napierala
686e1c0d0d8SEdward Tomasz Napierala target_chap_mutual: CHAP_MUTUAL STR STR STR STR
687009ea47eSEdward Tomasz Napierala {
688009ea47eSEdward Tomasz Napierala const struct auth *ca;
689009ea47eSEdward Tomasz Napierala
690009ea47eSEdward Tomasz Napierala if (target->t_auth_group != NULL) {
691009ea47eSEdward Tomasz Napierala if (target->t_auth_group->ag_name != NULL) {
692df9900fbSEdward Tomasz Napierala log_warnx("cannot use both auth-group and "
693df9900fbSEdward Tomasz Napierala "chap-mutual for target \"%s\"",
694f7ae5bf8SEdward Tomasz Napierala target->t_name);
695009ea47eSEdward Tomasz Napierala free($2);
696009ea47eSEdward Tomasz Napierala free($3);
697009ea47eSEdward Tomasz Napierala free($4);
698009ea47eSEdward Tomasz Napierala free($5);
699009ea47eSEdward Tomasz Napierala return (1);
700009ea47eSEdward Tomasz Napierala }
701009ea47eSEdward Tomasz Napierala } else {
702009ea47eSEdward Tomasz Napierala target->t_auth_group = auth_group_new(conf, NULL);
703009ea47eSEdward Tomasz Napierala if (target->t_auth_group == NULL) {
704009ea47eSEdward Tomasz Napierala free($2);
705009ea47eSEdward Tomasz Napierala free($3);
706009ea47eSEdward Tomasz Napierala free($4);
707009ea47eSEdward Tomasz Napierala free($5);
708009ea47eSEdward Tomasz Napierala return (1);
709009ea47eSEdward Tomasz Napierala }
710009ea47eSEdward Tomasz Napierala target->t_auth_group->ag_target = target;
711009ea47eSEdward Tomasz Napierala }
712009ea47eSEdward Tomasz Napierala ca = auth_new_chap_mutual(target->t_auth_group,
713009ea47eSEdward Tomasz Napierala $2, $3, $4, $5);
714009ea47eSEdward Tomasz Napierala free($2);
715009ea47eSEdward Tomasz Napierala free($3);
716009ea47eSEdward Tomasz Napierala free($4);
717009ea47eSEdward Tomasz Napierala free($5);
718009ea47eSEdward Tomasz Napierala if (ca == NULL)
719009ea47eSEdward Tomasz Napierala return (1);
720009ea47eSEdward Tomasz Napierala }
721009ea47eSEdward Tomasz Napierala ;
722009ea47eSEdward Tomasz Napierala
723e1c0d0d8SEdward Tomasz Napierala target_initiator_name: INITIATOR_NAME STR
7248cb2e958SEdward Tomasz Napierala {
7258cb2e958SEdward Tomasz Napierala const struct auth_name *an;
7268cb2e958SEdward Tomasz Napierala
7278cb2e958SEdward Tomasz Napierala if (target->t_auth_group != NULL) {
7288cb2e958SEdward Tomasz Napierala if (target->t_auth_group->ag_name != NULL) {
729df9900fbSEdward Tomasz Napierala log_warnx("cannot use both auth-group and "
7308cb2e958SEdward Tomasz Napierala "initiator-name for target \"%s\"",
731f7ae5bf8SEdward Tomasz Napierala target->t_name);
7328cb2e958SEdward Tomasz Napierala free($2);
7338cb2e958SEdward Tomasz Napierala return (1);
7348cb2e958SEdward Tomasz Napierala }
7358cb2e958SEdward Tomasz Napierala } else {
7368cb2e958SEdward Tomasz Napierala target->t_auth_group = auth_group_new(conf, NULL);
7378cb2e958SEdward Tomasz Napierala if (target->t_auth_group == NULL) {
7388cb2e958SEdward Tomasz Napierala free($2);
7398cb2e958SEdward Tomasz Napierala return (1);
7408cb2e958SEdward Tomasz Napierala }
7418cb2e958SEdward Tomasz Napierala target->t_auth_group->ag_target = target;
7428cb2e958SEdward Tomasz Napierala }
7438cb2e958SEdward Tomasz Napierala an = auth_name_new(target->t_auth_group, $2);
7448cb2e958SEdward Tomasz Napierala free($2);
7458cb2e958SEdward Tomasz Napierala if (an == NULL)
7468cb2e958SEdward Tomasz Napierala return (1);
7478cb2e958SEdward Tomasz Napierala }
7488cb2e958SEdward Tomasz Napierala ;
7498cb2e958SEdward Tomasz Napierala
750e1c0d0d8SEdward Tomasz Napierala target_initiator_portal: INITIATOR_PORTAL STR
7518cb2e958SEdward Tomasz Napierala {
7528cb2e958SEdward Tomasz Napierala const struct auth_portal *ap;
7538cb2e958SEdward Tomasz Napierala
7548cb2e958SEdward Tomasz Napierala if (target->t_auth_group != NULL) {
7558cb2e958SEdward Tomasz Napierala if (target->t_auth_group->ag_name != NULL) {
756df9900fbSEdward Tomasz Napierala log_warnx("cannot use both auth-group and "
7578cb2e958SEdward Tomasz Napierala "initiator-portal for target \"%s\"",
758f7ae5bf8SEdward Tomasz Napierala target->t_name);
7598cb2e958SEdward Tomasz Napierala free($2);
7608cb2e958SEdward Tomasz Napierala return (1);
7618cb2e958SEdward Tomasz Napierala }
7628cb2e958SEdward Tomasz Napierala } else {
7638cb2e958SEdward Tomasz Napierala target->t_auth_group = auth_group_new(conf, NULL);
7648cb2e958SEdward Tomasz Napierala if (target->t_auth_group == NULL) {
7658cb2e958SEdward Tomasz Napierala free($2);
7668cb2e958SEdward Tomasz Napierala return (1);
7678cb2e958SEdward Tomasz Napierala }
7688cb2e958SEdward Tomasz Napierala target->t_auth_group->ag_target = target;
7698cb2e958SEdward Tomasz Napierala }
7708cb2e958SEdward Tomasz Napierala ap = auth_portal_new(target->t_auth_group, $2);
7718cb2e958SEdward Tomasz Napierala free($2);
7728cb2e958SEdward Tomasz Napierala if (ap == NULL)
7738cb2e958SEdward Tomasz Napierala return (1);
7748cb2e958SEdward Tomasz Napierala }
7758cb2e958SEdward Tomasz Napierala ;
7768cb2e958SEdward Tomasz Napierala
77792847ee1SAlexander Motin target_portal_group: PORTAL_GROUP STR STR
778009ea47eSEdward Tomasz Napierala {
77992847ee1SAlexander Motin struct portal_group *tpg;
78092847ee1SAlexander Motin struct auth_group *tag;
78192847ee1SAlexander Motin struct port *tp;
78292847ee1SAlexander Motin
78392847ee1SAlexander Motin tpg = portal_group_find(conf, $2);
78492847ee1SAlexander Motin if (tpg == NULL) {
78592847ee1SAlexander Motin log_warnx("unknown portal-group \"%s\" for target "
78692847ee1SAlexander Motin "\"%s\"", $2, target->t_name);
78792847ee1SAlexander Motin free($2);
78892847ee1SAlexander Motin free($3);
78992847ee1SAlexander Motin return (1);
79092847ee1SAlexander Motin }
79192847ee1SAlexander Motin tag = auth_group_find(conf, $3);
79292847ee1SAlexander Motin if (tag == NULL) {
79392847ee1SAlexander Motin log_warnx("unknown auth-group \"%s\" for target "
79492847ee1SAlexander Motin "\"%s\"", $3, target->t_name);
79592847ee1SAlexander Motin free($2);
79692847ee1SAlexander Motin free($3);
79792847ee1SAlexander Motin return (1);
79892847ee1SAlexander Motin }
79992847ee1SAlexander Motin tp = port_new(conf, target, tpg);
80092847ee1SAlexander Motin if (tp == NULL) {
80192847ee1SAlexander Motin log_warnx("can't link portal-group \"%s\" to target "
80292847ee1SAlexander Motin "\"%s\"", $2, target->t_name);
803009ea47eSEdward Tomasz Napierala free($2);
804009ea47eSEdward Tomasz Napierala return (1);
805009ea47eSEdward Tomasz Napierala }
80692847ee1SAlexander Motin tp->p_auth_group = tag;
80792847ee1SAlexander Motin free($2);
80892847ee1SAlexander Motin free($3);
80992847ee1SAlexander Motin }
81092847ee1SAlexander Motin | PORTAL_GROUP STR
81192847ee1SAlexander Motin {
81292847ee1SAlexander Motin struct portal_group *tpg;
81392847ee1SAlexander Motin struct port *tp;
81492847ee1SAlexander Motin
81592847ee1SAlexander Motin tpg = portal_group_find(conf, $2);
81692847ee1SAlexander Motin if (tpg == NULL) {
817009ea47eSEdward Tomasz Napierala log_warnx("unknown portal-group \"%s\" for target "
818f7ae5bf8SEdward Tomasz Napierala "\"%s\"", $2, target->t_name);
819009ea47eSEdward Tomasz Napierala free($2);
820009ea47eSEdward Tomasz Napierala return (1);
821009ea47eSEdward Tomasz Napierala }
82292847ee1SAlexander Motin tp = port_new(conf, target, tpg);
82392847ee1SAlexander Motin if (tp == NULL) {
82492847ee1SAlexander Motin log_warnx("can't link portal-group \"%s\" to target "
82592847ee1SAlexander Motin "\"%s\"", $2, target->t_name);
82692847ee1SAlexander Motin free($2);
82792847ee1SAlexander Motin return (1);
82892847ee1SAlexander Motin }
829009ea47eSEdward Tomasz Napierala free($2);
830009ea47eSEdward Tomasz Napierala }
831009ea47eSEdward Tomasz Napierala ;
832009ea47eSEdward Tomasz Napierala
833057abcb0SAlexander Motin target_port: PORT STR
834057abcb0SAlexander Motin {
835057abcb0SAlexander Motin struct pport *pp;
836057abcb0SAlexander Motin struct port *tp;
8378951f055SMarcelo Araujo int ret, i_pp, i_vp = 0;
838057abcb0SAlexander Motin
8398951f055SMarcelo Araujo ret = sscanf($2, "ioctl/%d/%d", &i_pp, &i_vp);
8408951f055SMarcelo Araujo if (ret > 0) {
8418951f055SMarcelo Araujo tp = port_new_ioctl(conf, target, i_pp, i_vp);
8428951f055SMarcelo Araujo if (tp == NULL) {
8438951f055SMarcelo Araujo log_warnx("can't create new ioctl port for "
8448951f055SMarcelo Araujo "target \"%s\"", target->t_name);
8458951f055SMarcelo Araujo free($2);
8468951f055SMarcelo Araujo return (1);
8478951f055SMarcelo Araujo }
8488951f055SMarcelo Araujo } else {
849057abcb0SAlexander Motin pp = pport_find(conf, $2);
850057abcb0SAlexander Motin if (pp == NULL) {
851057abcb0SAlexander Motin log_warnx("unknown port \"%s\" for target \"%s\"",
852057abcb0SAlexander Motin $2, target->t_name);
853057abcb0SAlexander Motin free($2);
854057abcb0SAlexander Motin return (1);
855057abcb0SAlexander Motin }
856057abcb0SAlexander Motin if (!TAILQ_EMPTY(&pp->pp_ports)) {
857057abcb0SAlexander Motin log_warnx("can't link port \"%s\" to target \"%s\", "
858057abcb0SAlexander Motin "port already linked to some target",
859057abcb0SAlexander Motin $2, target->t_name);
860057abcb0SAlexander Motin free($2);
861057abcb0SAlexander Motin return (1);
862057abcb0SAlexander Motin }
863057abcb0SAlexander Motin tp = port_new_pp(conf, target, pp);
864057abcb0SAlexander Motin if (tp == NULL) {
865057abcb0SAlexander Motin log_warnx("can't link port \"%s\" to target \"%s\"",
866057abcb0SAlexander Motin $2, target->t_name);
867057abcb0SAlexander Motin free($2);
868057abcb0SAlexander Motin return (1);
869057abcb0SAlexander Motin }
8708951f055SMarcelo Araujo }
8718951f055SMarcelo Araujo
872057abcb0SAlexander Motin free($2);
873057abcb0SAlexander Motin }
874057abcb0SAlexander Motin ;
875057abcb0SAlexander Motin
8766dbdbf82SEdward Tomasz Napierala target_redirect: REDIRECT STR
8776dbdbf82SEdward Tomasz Napierala {
8786dbdbf82SEdward Tomasz Napierala int error;
8796dbdbf82SEdward Tomasz Napierala
8806dbdbf82SEdward Tomasz Napierala error = target_set_redirection(target, $2);
8816dbdbf82SEdward Tomasz Napierala free($2);
8826dbdbf82SEdward Tomasz Napierala if (error != 0)
8836dbdbf82SEdward Tomasz Napierala return (1);
8846dbdbf82SEdward Tomasz Napierala }
8856dbdbf82SEdward Tomasz Napierala ;
8866dbdbf82SEdward Tomasz Napierala
887e1c0d0d8SEdward Tomasz Napierala target_lun: LUN lun_number
888e1c0d0d8SEdward Tomasz Napierala OPENING_BRACKET lun_entries CLOSING_BRACKET
889009ea47eSEdward Tomasz Napierala {
890009ea47eSEdward Tomasz Napierala lun = NULL;
891009ea47eSEdward Tomasz Napierala }
892009ea47eSEdward Tomasz Napierala ;
893009ea47eSEdward Tomasz Napierala
8944524db57SEdward Tomasz Napierala lun_number: STR
895009ea47eSEdward Tomasz Napierala {
8964524db57SEdward Tomasz Napierala uint64_t tmp;
897f584f51dSEdward Tomasz Napierala int ret;
898920c6cbaSAlexander Motin char *name;
8994524db57SEdward Tomasz Napierala
9004524db57SEdward Tomasz Napierala if (expand_number($1, &tmp) != 0) {
901d9b4554dSEdward Tomasz Napierala yyerror("invalid numeric value");
9024524db57SEdward Tomasz Napierala free($1);
9034524db57SEdward Tomasz Napierala return (1);
9044524db57SEdward Tomasz Napierala }
905dad99db2SAlexander Motin if (tmp >= MAX_LUNS) {
906dad99db2SAlexander Motin yyerror("LU number is too big");
907dad99db2SAlexander Motin free($1);
908dad99db2SAlexander Motin return (1);
909dad99db2SAlexander Motin }
9104524db57SEdward Tomasz Napierala
911f584f51dSEdward Tomasz Napierala ret = asprintf(&name, "%s,lun,%ju", target->t_name, tmp);
912f584f51dSEdward Tomasz Napierala if (ret <= 0)
913f584f51dSEdward Tomasz Napierala log_err(1, "asprintf");
914920c6cbaSAlexander Motin lun = lun_new(conf, name);
915009ea47eSEdward Tomasz Napierala if (lun == NULL)
916009ea47eSEdward Tomasz Napierala return (1);
917920c6cbaSAlexander Motin
918920c6cbaSAlexander Motin lun_set_scsiname(lun, name);
919920c6cbaSAlexander Motin target->t_luns[tmp] = lun;
920920c6cbaSAlexander Motin }
921920c6cbaSAlexander Motin ;
922920c6cbaSAlexander Motin
923920c6cbaSAlexander Motin target_lun_ref: LUN STR STR
924920c6cbaSAlexander Motin {
925920c6cbaSAlexander Motin uint64_t tmp;
926920c6cbaSAlexander Motin
927920c6cbaSAlexander Motin if (expand_number($2, &tmp) != 0) {
928920c6cbaSAlexander Motin yyerror("invalid numeric value");
929920c6cbaSAlexander Motin free($2);
930920c6cbaSAlexander Motin free($3);
931920c6cbaSAlexander Motin return (1);
932920c6cbaSAlexander Motin }
933920c6cbaSAlexander Motin free($2);
934dad99db2SAlexander Motin if (tmp >= MAX_LUNS) {
935dad99db2SAlexander Motin yyerror("LU number is too big");
936dad99db2SAlexander Motin free($3);
937dad99db2SAlexander Motin return (1);
938dad99db2SAlexander Motin }
939920c6cbaSAlexander Motin
940920c6cbaSAlexander Motin lun = lun_find(conf, $3);
941920c6cbaSAlexander Motin free($3);
942920c6cbaSAlexander Motin if (lun == NULL)
943920c6cbaSAlexander Motin return (1);
944920c6cbaSAlexander Motin
945920c6cbaSAlexander Motin target->t_luns[tmp] = lun;
946009ea47eSEdward Tomasz Napierala }
947009ea47eSEdward Tomasz Napierala ;
948009ea47eSEdward Tomasz Napierala
949e1c0d0d8SEdward Tomasz Napierala lun_entries:
950009ea47eSEdward Tomasz Napierala |
951e1c0d0d8SEdward Tomasz Napierala lun_entries lun_entry
952f9488580SEdward Tomasz Napierala |
953f9488580SEdward Tomasz Napierala lun_entries lun_entry SEMICOLON
954009ea47eSEdward Tomasz Napierala ;
955009ea47eSEdward Tomasz Napierala
956e1c0d0d8SEdward Tomasz Napierala lun_entry:
957e1c0d0d8SEdward Tomasz Napierala lun_backend
958009ea47eSEdward Tomasz Napierala |
959e1c0d0d8SEdward Tomasz Napierala lun_blocksize
960009ea47eSEdward Tomasz Napierala |
961e1c0d0d8SEdward Tomasz Napierala lun_device_id
962009ea47eSEdward Tomasz Napierala |
96391be33dcSAlexander Motin lun_device_type
96491be33dcSAlexander Motin |
9653933f7b1SAlexander Motin lun_ctl_lun
9663933f7b1SAlexander Motin |
967e1c0d0d8SEdward Tomasz Napierala lun_option
968009ea47eSEdward Tomasz Napierala |
969e1c0d0d8SEdward Tomasz Napierala lun_path
970009ea47eSEdward Tomasz Napierala |
971e1c0d0d8SEdward Tomasz Napierala lun_serial
972009ea47eSEdward Tomasz Napierala |
973e1c0d0d8SEdward Tomasz Napierala lun_size
974009ea47eSEdward Tomasz Napierala ;
975009ea47eSEdward Tomasz Napierala
976e1c0d0d8SEdward Tomasz Napierala lun_backend: BACKEND STR
977009ea47eSEdward Tomasz Napierala {
978009ea47eSEdward Tomasz Napierala if (lun->l_backend != NULL) {
979920c6cbaSAlexander Motin log_warnx("backend for lun \"%s\" "
980009ea47eSEdward Tomasz Napierala "specified more than once",
981920c6cbaSAlexander Motin lun->l_name);
982009ea47eSEdward Tomasz Napierala free($2);
983009ea47eSEdward Tomasz Napierala return (1);
984009ea47eSEdward Tomasz Napierala }
985009ea47eSEdward Tomasz Napierala lun_set_backend(lun, $2);
986009ea47eSEdward Tomasz Napierala free($2);
987009ea47eSEdward Tomasz Napierala }
988009ea47eSEdward Tomasz Napierala ;
989009ea47eSEdward Tomasz Napierala
9904524db57SEdward Tomasz Napierala lun_blocksize: BLOCKSIZE STR
991009ea47eSEdward Tomasz Napierala {
9924524db57SEdward Tomasz Napierala uint64_t tmp;
9934524db57SEdward Tomasz Napierala
9944524db57SEdward Tomasz Napierala if (expand_number($2, &tmp) != 0) {
995d9b4554dSEdward Tomasz Napierala yyerror("invalid numeric value");
9964524db57SEdward Tomasz Napierala free($2);
9974524db57SEdward Tomasz Napierala return (1);
9984524db57SEdward Tomasz Napierala }
9994524db57SEdward Tomasz Napierala
1000009ea47eSEdward Tomasz Napierala if (lun->l_blocksize != 0) {
1001920c6cbaSAlexander Motin log_warnx("blocksize for lun \"%s\" "
1002009ea47eSEdward Tomasz Napierala "specified more than once",
1003920c6cbaSAlexander Motin lun->l_name);
1004009ea47eSEdward Tomasz Napierala return (1);
1005009ea47eSEdward Tomasz Napierala }
10064524db57SEdward Tomasz Napierala lun_set_blocksize(lun, tmp);
1007009ea47eSEdward Tomasz Napierala }
1008009ea47eSEdward Tomasz Napierala ;
1009009ea47eSEdward Tomasz Napierala
1010e1c0d0d8SEdward Tomasz Napierala lun_device_id: DEVICE_ID STR
1011009ea47eSEdward Tomasz Napierala {
1012009ea47eSEdward Tomasz Napierala if (lun->l_device_id != NULL) {
1013920c6cbaSAlexander Motin log_warnx("device_id for lun \"%s\" "
1014009ea47eSEdward Tomasz Napierala "specified more than once",
1015920c6cbaSAlexander Motin lun->l_name);
1016009ea47eSEdward Tomasz Napierala free($2);
1017009ea47eSEdward Tomasz Napierala return (1);
1018009ea47eSEdward Tomasz Napierala }
1019009ea47eSEdward Tomasz Napierala lun_set_device_id(lun, $2);
1020009ea47eSEdward Tomasz Napierala free($2);
1021009ea47eSEdward Tomasz Napierala }
1022009ea47eSEdward Tomasz Napierala ;
1023009ea47eSEdward Tomasz Napierala
102491be33dcSAlexander Motin lun_device_type: DEVICE_TYPE STR
102591be33dcSAlexander Motin {
102691be33dcSAlexander Motin uint64_t tmp;
102791be33dcSAlexander Motin
102891be33dcSAlexander Motin if (strcasecmp($2, "disk") == 0 ||
102991be33dcSAlexander Motin strcasecmp($2, "direct") == 0)
103091be33dcSAlexander Motin tmp = 0;
103191be33dcSAlexander Motin else if (strcasecmp($2, "processor") == 0)
103291be33dcSAlexander Motin tmp = 3;
103391be33dcSAlexander Motin else if (strcasecmp($2, "cd") == 0 ||
103491be33dcSAlexander Motin strcasecmp($2, "cdrom") == 0 ||
103591be33dcSAlexander Motin strcasecmp($2, "dvd") == 0 ||
103691be33dcSAlexander Motin strcasecmp($2, "dvdrom") == 0)
103791be33dcSAlexander Motin tmp = 5;
103891be33dcSAlexander Motin else if (expand_number($2, &tmp) != 0 ||
103991be33dcSAlexander Motin tmp > 15) {
104091be33dcSAlexander Motin yyerror("invalid numeric value");
104191be33dcSAlexander Motin free($2);
104291be33dcSAlexander Motin return (1);
104391be33dcSAlexander Motin }
104491be33dcSAlexander Motin
104591be33dcSAlexander Motin lun_set_device_type(lun, tmp);
104691be33dcSAlexander Motin }
104791be33dcSAlexander Motin ;
104891be33dcSAlexander Motin
10493933f7b1SAlexander Motin lun_ctl_lun: CTL_LUN STR
10503933f7b1SAlexander Motin {
10513933f7b1SAlexander Motin uint64_t tmp;
10523933f7b1SAlexander Motin
10533933f7b1SAlexander Motin if (expand_number($2, &tmp) != 0) {
10543933f7b1SAlexander Motin yyerror("invalid numeric value");
10553933f7b1SAlexander Motin free($2);
10563933f7b1SAlexander Motin return (1);
10573933f7b1SAlexander Motin }
10583933f7b1SAlexander Motin
10593933f7b1SAlexander Motin if (lun->l_ctl_lun >= 0) {
10603933f7b1SAlexander Motin log_warnx("ctl_lun for lun \"%s\" "
10613933f7b1SAlexander Motin "specified more than once",
10623933f7b1SAlexander Motin lun->l_name);
10633933f7b1SAlexander Motin return (1);
10643933f7b1SAlexander Motin }
10653933f7b1SAlexander Motin lun_set_ctl_lun(lun, tmp);
10663933f7b1SAlexander Motin }
10673933f7b1SAlexander Motin ;
10683933f7b1SAlexander Motin
1069e1c0d0d8SEdward Tomasz Napierala lun_option: OPTION STR STR
1070009ea47eSEdward Tomasz Napierala {
1071398290f2SAlexander Motin struct option *o;
1072009ea47eSEdward Tomasz Napierala
1073398290f2SAlexander Motin o = option_new(&lun->l_options, $2, $3);
1074009ea47eSEdward Tomasz Napierala free($2);
1075009ea47eSEdward Tomasz Napierala free($3);
1076398290f2SAlexander Motin if (o == NULL)
1077009ea47eSEdward Tomasz Napierala return (1);
1078009ea47eSEdward Tomasz Napierala }
1079009ea47eSEdward Tomasz Napierala ;
1080009ea47eSEdward Tomasz Napierala
1081e1c0d0d8SEdward Tomasz Napierala lun_path: PATH STR
1082009ea47eSEdward Tomasz Napierala {
1083009ea47eSEdward Tomasz Napierala if (lun->l_path != NULL) {
1084920c6cbaSAlexander Motin log_warnx("path for lun \"%s\" "
1085009ea47eSEdward Tomasz Napierala "specified more than once",
1086920c6cbaSAlexander Motin lun->l_name);
1087009ea47eSEdward Tomasz Napierala free($2);
1088009ea47eSEdward Tomasz Napierala return (1);
1089009ea47eSEdward Tomasz Napierala }
1090009ea47eSEdward Tomasz Napierala lun_set_path(lun, $2);
1091009ea47eSEdward Tomasz Napierala free($2);
1092009ea47eSEdward Tomasz Napierala }
1093009ea47eSEdward Tomasz Napierala ;
1094009ea47eSEdward Tomasz Napierala
1095e1c0d0d8SEdward Tomasz Napierala lun_serial: SERIAL STR
1096009ea47eSEdward Tomasz Napierala {
1097009ea47eSEdward Tomasz Napierala if (lun->l_serial != NULL) {
1098920c6cbaSAlexander Motin log_warnx("serial for lun \"%s\" "
1099009ea47eSEdward Tomasz Napierala "specified more than once",
1100920c6cbaSAlexander Motin lun->l_name);
1101009ea47eSEdward Tomasz Napierala free($2);
1102009ea47eSEdward Tomasz Napierala return (1);
1103009ea47eSEdward Tomasz Napierala }
1104009ea47eSEdward Tomasz Napierala lun_set_serial(lun, $2);
1105009ea47eSEdward Tomasz Napierala free($2);
1106009ea47eSEdward Tomasz Napierala }
1107009ea47eSEdward Tomasz Napierala ;
1108009ea47eSEdward Tomasz Napierala
11094524db57SEdward Tomasz Napierala lun_size: SIZE STR
1110009ea47eSEdward Tomasz Napierala {
11114524db57SEdward Tomasz Napierala uint64_t tmp;
11124524db57SEdward Tomasz Napierala
11134524db57SEdward Tomasz Napierala if (expand_number($2, &tmp) != 0) {
1114d9b4554dSEdward Tomasz Napierala yyerror("invalid numeric value");
11154524db57SEdward Tomasz Napierala free($2);
11164524db57SEdward Tomasz Napierala return (1);
11174524db57SEdward Tomasz Napierala }
11184524db57SEdward Tomasz Napierala
1119009ea47eSEdward Tomasz Napierala if (lun->l_size != 0) {
1120920c6cbaSAlexander Motin log_warnx("size for lun \"%s\" "
1121009ea47eSEdward Tomasz Napierala "specified more than once",
1122920c6cbaSAlexander Motin lun->l_name);
1123009ea47eSEdward Tomasz Napierala return (1);
1124009ea47eSEdward Tomasz Napierala }
11254524db57SEdward Tomasz Napierala lun_set_size(lun, tmp);
1126009ea47eSEdward Tomasz Napierala }
1127009ea47eSEdward Tomasz Napierala ;
1128009ea47eSEdward Tomasz Napierala %%
1129009ea47eSEdward Tomasz Napierala
1130009ea47eSEdward Tomasz Napierala void
1131009ea47eSEdward Tomasz Napierala yyerror(const char *str)
1132009ea47eSEdward Tomasz Napierala {
1133009ea47eSEdward Tomasz Napierala
1134009ea47eSEdward Tomasz Napierala log_warnx("error in configuration file at line %d near '%s': %s",
1135009ea47eSEdward Tomasz Napierala lineno, yytext, str);
1136009ea47eSEdward Tomasz Napierala }
1137009ea47eSEdward Tomasz Napierala
11385c734b04SJakub Wojciech Klama int
parse_conf(struct conf * newconf,const char * path)11395c734b04SJakub Wojciech Klama parse_conf(struct conf *newconf, const char *path)
1140009ea47eSEdward Tomasz Napierala {
1141009ea47eSEdward Tomasz Napierala int error;
1142009ea47eSEdward Tomasz Napierala
11435c734b04SJakub Wojciech Klama conf = newconf;
1144009ea47eSEdward Tomasz Napierala yyin = fopen(path, "r");
1145009ea47eSEdward Tomasz Napierala if (yyin == NULL) {
1146009ea47eSEdward Tomasz Napierala log_warn("unable to open configuration file %s", path);
11475c734b04SJakub Wojciech Klama return (1);
1148009ea47eSEdward Tomasz Napierala }
11495c734b04SJakub Wojciech Klama
11506dc3a9f4SEdward Tomasz Napierala lineno = 1;
1151009ea47eSEdward Tomasz Napierala yyrestart(yyin);
1152009ea47eSEdward Tomasz Napierala error = yyparse();
1153009ea47eSEdward Tomasz Napierala auth_group = NULL;
1154009ea47eSEdward Tomasz Napierala portal_group = NULL;
1155009ea47eSEdward Tomasz Napierala target = NULL;
1156009ea47eSEdward Tomasz Napierala lun = NULL;
1157009ea47eSEdward Tomasz Napierala fclose(yyin);
1158009ea47eSEdward Tomasz Napierala
11595c734b04SJakub Wojciech Klama return (error);
1160009ea47eSEdward Tomasz Napierala }
1161