1009ea47eSEdward Tomasz Napierala %{ 2009ea47eSEdward Tomasz Napierala /*- 31de7b4b8SPedro F. Giffuni * SPDX-License-Identifier: BSD-2-Clause-FreeBSD 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 * $FreeBSD$ 32009ea47eSEdward Tomasz Napierala */ 33009ea47eSEdward Tomasz Napierala 34009ea47eSEdward Tomasz Napierala #include <sys/queue.h> 35009ea47eSEdward Tomasz Napierala #include <sys/types.h> 36009ea47eSEdward Tomasz Napierala #include <sys/stat.h> 37009ea47eSEdward Tomasz Napierala #include <assert.h> 38009ea47eSEdward Tomasz Napierala #include <stdio.h> 39009ea47eSEdward Tomasz Napierala #include <stdlib.h> 40009ea47eSEdward Tomasz Napierala #include <string.h> 41009ea47eSEdward Tomasz Napierala 42009ea47eSEdward Tomasz Napierala #include "ctld.h" 4364ffe6d4SRichard Scheffenegger #include <netinet/in.h> 4464ffe6d4SRichard Scheffenegger #include <netinet/ip.h> 45009ea47eSEdward Tomasz Napierala 46009ea47eSEdward Tomasz Napierala extern FILE *yyin; 47009ea47eSEdward Tomasz Napierala extern char *yytext; 48009ea47eSEdward Tomasz Napierala extern int lineno; 49009ea47eSEdward Tomasz Napierala 50009ea47eSEdward Tomasz Napierala static struct conf *conf = NULL; 51009ea47eSEdward Tomasz Napierala static struct auth_group *auth_group = NULL; 52009ea47eSEdward Tomasz Napierala static struct portal_group *portal_group = NULL; 53009ea47eSEdward Tomasz Napierala static struct target *target = NULL; 54009ea47eSEdward Tomasz Napierala static struct lun *lun = NULL; 55009ea47eSEdward Tomasz Napierala 56009ea47eSEdward Tomasz Napierala extern void yyerror(const char *); 57009ea47eSEdward Tomasz Napierala extern void yyrestart(FILE *); 58009ea47eSEdward Tomasz Napierala 59009ea47eSEdward Tomasz Napierala %} 60009ea47eSEdward Tomasz Napierala 61df9900fbSEdward Tomasz Napierala %token ALIAS AUTH_GROUP AUTH_TYPE BACKEND BLOCKSIZE CHAP CHAP_MUTUAL 6291be33dcSAlexander Motin %token CLOSING_BRACKET CTL_LUN DEBUG DEVICE_ID DEVICE_TYPE 6364ffe6d4SRichard Scheffenegger %token DISCOVERY_AUTH_GROUP DISCOVERY_FILTER DSCP FOREIGN 64dbb1ee18SEdward Tomasz Napierala %token INITIATOR_NAME INITIATOR_PORTAL ISNS_SERVER ISNS_PERIOD ISNS_TIMEOUT 6507b49a3eSEdward Tomasz Napierala %token LISTEN LISTEN_ISER LUN MAXPROC OFFLOAD OPENING_BRACKET OPTION 66ea8f1280SRichard Scheffenegger %token PATH PCP PIDFILE PORT PORTAL_GROUP REDIRECT SEMICOLON SERIAL 67ea8f1280SRichard Scheffenegger %token SIZE STR TAG TARGET TIMEOUT 6864ffe6d4SRichard Scheffenegger %token AF11 AF12 AF13 AF21 AF22 AF23 AF31 AF32 AF33 AF41 AF42 AF43 6964ffe6d4SRichard Scheffenegger %token BE EF CS0 CS1 CS2 CS3 CS4 CS5 CS6 CS7 70009ea47eSEdward Tomasz Napierala 71009ea47eSEdward Tomasz Napierala %union 72009ea47eSEdward Tomasz Napierala { 73009ea47eSEdward Tomasz Napierala char *str; 74009ea47eSEdward Tomasz Napierala } 75009ea47eSEdward Tomasz Napierala 76009ea47eSEdward Tomasz Napierala %token <str> STR 77009ea47eSEdward Tomasz Napierala 78009ea47eSEdward Tomasz Napierala %% 79009ea47eSEdward Tomasz Napierala 80009ea47eSEdward Tomasz Napierala statements: 81009ea47eSEdward Tomasz Napierala | 82009ea47eSEdward Tomasz Napierala statements statement 83f9488580SEdward Tomasz Napierala | 84f9488580SEdward Tomasz Napierala statements statement SEMICOLON 85009ea47eSEdward Tomasz Napierala ; 86009ea47eSEdward Tomasz Napierala 87009ea47eSEdward Tomasz Napierala statement: 88e1c0d0d8SEdward Tomasz Napierala debug 89009ea47eSEdward Tomasz Napierala | 90e1c0d0d8SEdward Tomasz Napierala timeout 91009ea47eSEdward Tomasz Napierala | 92e1c0d0d8SEdward Tomasz Napierala maxproc 93009ea47eSEdward Tomasz Napierala | 94e1c0d0d8SEdward Tomasz Napierala pidfile 95009ea47eSEdward Tomasz Napierala | 96829603e2SAlexander Motin isns_server 97829603e2SAlexander Motin | 98829603e2SAlexander Motin isns_period 99829603e2SAlexander Motin | 100829603e2SAlexander Motin isns_timeout 101829603e2SAlexander Motin | 102e1c0d0d8SEdward Tomasz Napierala auth_group 103009ea47eSEdward Tomasz Napierala | 104e1c0d0d8SEdward Tomasz Napierala portal_group 105009ea47eSEdward Tomasz Napierala | 106920c6cbaSAlexander Motin lun 107920c6cbaSAlexander Motin | 108e1c0d0d8SEdward Tomasz Napierala target 109009ea47eSEdward Tomasz Napierala ; 110009ea47eSEdward Tomasz Napierala 1114524db57SEdward Tomasz Napierala debug: DEBUG STR 112009ea47eSEdward Tomasz Napierala { 1134524db57SEdward Tomasz Napierala uint64_t tmp; 1144524db57SEdward Tomasz Napierala 1154524db57SEdward Tomasz Napierala if (expand_number($2, &tmp) != 0) { 116d9b4554dSEdward Tomasz Napierala yyerror("invalid numeric value"); 1174524db57SEdward Tomasz Napierala free($2); 1184524db57SEdward Tomasz Napierala return (1); 1194524db57SEdward Tomasz Napierala } 1204524db57SEdward Tomasz Napierala 1214524db57SEdward Tomasz Napierala conf->conf_debug = tmp; 122009ea47eSEdward Tomasz Napierala } 123009ea47eSEdward Tomasz Napierala ; 124009ea47eSEdward Tomasz Napierala 1254524db57SEdward Tomasz Napierala timeout: TIMEOUT STR 126009ea47eSEdward Tomasz Napierala { 1274524db57SEdward Tomasz Napierala uint64_t tmp; 1284524db57SEdward Tomasz Napierala 1294524db57SEdward Tomasz Napierala if (expand_number($2, &tmp) != 0) { 130d9b4554dSEdward Tomasz Napierala yyerror("invalid numeric value"); 1314524db57SEdward Tomasz Napierala free($2); 1324524db57SEdward Tomasz Napierala return (1); 1334524db57SEdward Tomasz Napierala } 1344524db57SEdward Tomasz Napierala 1354524db57SEdward Tomasz Napierala conf->conf_timeout = tmp; 136009ea47eSEdward Tomasz Napierala } 137009ea47eSEdward Tomasz Napierala ; 138009ea47eSEdward Tomasz Napierala 1394524db57SEdward Tomasz Napierala maxproc: MAXPROC STR 140009ea47eSEdward Tomasz Napierala { 1414524db57SEdward Tomasz Napierala uint64_t tmp; 1424524db57SEdward Tomasz Napierala 1434524db57SEdward Tomasz Napierala if (expand_number($2, &tmp) != 0) { 144d9b4554dSEdward Tomasz Napierala yyerror("invalid numeric value"); 1454524db57SEdward Tomasz Napierala free($2); 1464524db57SEdward Tomasz Napierala return (1); 1474524db57SEdward Tomasz Napierala } 1484524db57SEdward Tomasz Napierala 1494524db57SEdward Tomasz Napierala conf->conf_maxproc = tmp; 150009ea47eSEdward Tomasz Napierala } 151009ea47eSEdward Tomasz Napierala ; 152009ea47eSEdward Tomasz Napierala 153e1c0d0d8SEdward Tomasz Napierala pidfile: PIDFILE STR 154009ea47eSEdward Tomasz Napierala { 155009ea47eSEdward Tomasz Napierala if (conf->conf_pidfile_path != NULL) { 156009ea47eSEdward Tomasz Napierala log_warnx("pidfile specified more than once"); 157009ea47eSEdward Tomasz Napierala free($2); 158009ea47eSEdward Tomasz Napierala return (1); 159009ea47eSEdward Tomasz Napierala } 160009ea47eSEdward Tomasz Napierala conf->conf_pidfile_path = $2; 161009ea47eSEdward Tomasz Napierala } 162009ea47eSEdward Tomasz Napierala ; 163009ea47eSEdward Tomasz Napierala 164829603e2SAlexander Motin isns_server: ISNS_SERVER STR 165829603e2SAlexander Motin { 166829603e2SAlexander Motin int error; 167829603e2SAlexander Motin 168829603e2SAlexander Motin error = isns_new(conf, $2); 169829603e2SAlexander Motin free($2); 170829603e2SAlexander Motin if (error != 0) 171829603e2SAlexander Motin return (1); 172829603e2SAlexander Motin } 173829603e2SAlexander Motin ; 174829603e2SAlexander Motin 175d9b4554dSEdward Tomasz Napierala isns_period: ISNS_PERIOD STR 176829603e2SAlexander Motin { 177d9b4554dSEdward Tomasz Napierala uint64_t tmp; 178d9b4554dSEdward Tomasz Napierala 179d9b4554dSEdward Tomasz Napierala if (expand_number($2, &tmp) != 0) { 180d9b4554dSEdward Tomasz Napierala yyerror("invalid numeric value"); 181d9b4554dSEdward Tomasz Napierala free($2); 182d9b4554dSEdward Tomasz Napierala return (1); 183d9b4554dSEdward Tomasz Napierala } 184d9b4554dSEdward Tomasz Napierala 185d9b4554dSEdward Tomasz Napierala conf->conf_isns_period = tmp; 186829603e2SAlexander Motin } 187829603e2SAlexander Motin ; 188829603e2SAlexander Motin 189d9b4554dSEdward Tomasz Napierala isns_timeout: ISNS_TIMEOUT STR 190829603e2SAlexander Motin { 191d9b4554dSEdward Tomasz Napierala uint64_t tmp; 192d9b4554dSEdward Tomasz Napierala 193d9b4554dSEdward Tomasz Napierala if (expand_number($2, &tmp) != 0) { 194d9b4554dSEdward Tomasz Napierala yyerror("invalid numeric value"); 195d9b4554dSEdward Tomasz Napierala free($2); 196d9b4554dSEdward Tomasz Napierala return (1); 197d9b4554dSEdward Tomasz Napierala } 198d9b4554dSEdward Tomasz Napierala 199d9b4554dSEdward Tomasz Napierala conf->conf_isns_timeout = tmp; 200829603e2SAlexander Motin } 201829603e2SAlexander Motin ; 202829603e2SAlexander Motin 203e1c0d0d8SEdward Tomasz Napierala auth_group: AUTH_GROUP auth_group_name 204009ea47eSEdward Tomasz Napierala OPENING_BRACKET auth_group_entries CLOSING_BRACKET 205009ea47eSEdward Tomasz Napierala { 206009ea47eSEdward Tomasz Napierala auth_group = NULL; 207009ea47eSEdward Tomasz Napierala } 208009ea47eSEdward Tomasz Napierala ; 209009ea47eSEdward Tomasz Napierala 210009ea47eSEdward Tomasz Napierala auth_group_name: STR 211009ea47eSEdward Tomasz Napierala { 212e7977549SEdward Tomasz Napierala /* 213e7977549SEdward Tomasz Napierala * Make it possible to redefine default 214e7977549SEdward Tomasz Napierala * auth-group. but only once. 215e7977549SEdward Tomasz Napierala */ 216e7977549SEdward Tomasz Napierala if (strcmp($1, "default") == 0 && 217e7977549SEdward Tomasz Napierala conf->conf_default_ag_defined == false) { 218e7977549SEdward Tomasz Napierala auth_group = auth_group_find(conf, $1); 219e7977549SEdward Tomasz Napierala conf->conf_default_ag_defined = true; 220e7977549SEdward Tomasz Napierala } else { 221009ea47eSEdward Tomasz Napierala auth_group = auth_group_new(conf, $1); 222e7977549SEdward Tomasz Napierala } 223009ea47eSEdward Tomasz Napierala free($1); 224009ea47eSEdward Tomasz Napierala if (auth_group == NULL) 225009ea47eSEdward Tomasz Napierala return (1); 226009ea47eSEdward Tomasz Napierala } 227009ea47eSEdward Tomasz Napierala ; 228009ea47eSEdward Tomasz Napierala 229009ea47eSEdward Tomasz Napierala auth_group_entries: 230009ea47eSEdward Tomasz Napierala | 231009ea47eSEdward Tomasz Napierala auth_group_entries auth_group_entry 232f9488580SEdward Tomasz Napierala | 233f9488580SEdward Tomasz Napierala auth_group_entries auth_group_entry SEMICOLON 234009ea47eSEdward Tomasz Napierala ; 235009ea47eSEdward Tomasz Napierala 236009ea47eSEdward Tomasz Napierala auth_group_entry: 237df9900fbSEdward Tomasz Napierala auth_group_auth_type 238df9900fbSEdward Tomasz Napierala | 239009ea47eSEdward Tomasz Napierala auth_group_chap 240009ea47eSEdward Tomasz Napierala | 241009ea47eSEdward Tomasz Napierala auth_group_chap_mutual 2428cb2e958SEdward Tomasz Napierala | 2438cb2e958SEdward Tomasz Napierala auth_group_initiator_name 2448cb2e958SEdward Tomasz Napierala | 2458cb2e958SEdward Tomasz Napierala auth_group_initiator_portal 246009ea47eSEdward Tomasz Napierala ; 247009ea47eSEdward Tomasz Napierala 248df9900fbSEdward Tomasz Napierala auth_group_auth_type: AUTH_TYPE STR 249df9900fbSEdward Tomasz Napierala { 250df9900fbSEdward Tomasz Napierala int error; 251df9900fbSEdward Tomasz Napierala 252bd833b11SEdward Tomasz Napierala error = auth_group_set_type(auth_group, $2); 253df9900fbSEdward Tomasz Napierala free($2); 254df9900fbSEdward Tomasz Napierala if (error != 0) 255df9900fbSEdward Tomasz Napierala return (1); 256df9900fbSEdward Tomasz Napierala } 257df9900fbSEdward Tomasz Napierala ; 258df9900fbSEdward Tomasz Napierala 259009ea47eSEdward Tomasz Napierala auth_group_chap: CHAP STR STR 260009ea47eSEdward Tomasz Napierala { 261009ea47eSEdward Tomasz Napierala const struct auth *ca; 262009ea47eSEdward Tomasz Napierala 263009ea47eSEdward Tomasz Napierala ca = auth_new_chap(auth_group, $2, $3); 264009ea47eSEdward Tomasz Napierala free($2); 265009ea47eSEdward Tomasz Napierala free($3); 266009ea47eSEdward Tomasz Napierala if (ca == NULL) 267009ea47eSEdward Tomasz Napierala return (1); 268009ea47eSEdward Tomasz Napierala } 269009ea47eSEdward Tomasz Napierala ; 270009ea47eSEdward Tomasz Napierala 271009ea47eSEdward Tomasz Napierala auth_group_chap_mutual: CHAP_MUTUAL STR STR STR STR 272009ea47eSEdward Tomasz Napierala { 273009ea47eSEdward Tomasz Napierala const struct auth *ca; 274009ea47eSEdward Tomasz Napierala 275009ea47eSEdward Tomasz Napierala ca = auth_new_chap_mutual(auth_group, $2, $3, $4, $5); 276009ea47eSEdward Tomasz Napierala free($2); 277009ea47eSEdward Tomasz Napierala free($3); 278009ea47eSEdward Tomasz Napierala free($4); 279009ea47eSEdward Tomasz Napierala free($5); 280009ea47eSEdward Tomasz Napierala if (ca == NULL) 281009ea47eSEdward Tomasz Napierala return (1); 282009ea47eSEdward Tomasz Napierala } 283009ea47eSEdward Tomasz Napierala ; 284009ea47eSEdward Tomasz Napierala 2858cb2e958SEdward Tomasz Napierala auth_group_initiator_name: INITIATOR_NAME STR 2868cb2e958SEdward Tomasz Napierala { 2878cb2e958SEdward Tomasz Napierala const struct auth_name *an; 2888cb2e958SEdward Tomasz Napierala 2898cb2e958SEdward Tomasz Napierala an = auth_name_new(auth_group, $2); 2908cb2e958SEdward Tomasz Napierala free($2); 2918cb2e958SEdward Tomasz Napierala if (an == NULL) 2928cb2e958SEdward Tomasz Napierala return (1); 2938cb2e958SEdward Tomasz Napierala } 2948cb2e958SEdward Tomasz Napierala ; 2958cb2e958SEdward Tomasz Napierala 2968cb2e958SEdward Tomasz Napierala auth_group_initiator_portal: INITIATOR_PORTAL STR 2978cb2e958SEdward Tomasz Napierala { 2988cb2e958SEdward Tomasz Napierala const struct auth_portal *ap; 2998cb2e958SEdward Tomasz Napierala 3008cb2e958SEdward Tomasz Napierala ap = auth_portal_new(auth_group, $2); 3018cb2e958SEdward Tomasz Napierala free($2); 3028cb2e958SEdward Tomasz Napierala if (ap == NULL) 3038cb2e958SEdward Tomasz Napierala return (1); 3048cb2e958SEdward Tomasz Napierala } 3058cb2e958SEdward Tomasz Napierala ; 3068cb2e958SEdward Tomasz Napierala 307e1c0d0d8SEdward Tomasz Napierala portal_group: PORTAL_GROUP portal_group_name 308009ea47eSEdward Tomasz Napierala OPENING_BRACKET portal_group_entries CLOSING_BRACKET 309009ea47eSEdward Tomasz Napierala { 310009ea47eSEdward Tomasz Napierala portal_group = NULL; 311009ea47eSEdward Tomasz Napierala } 312009ea47eSEdward Tomasz Napierala ; 313009ea47eSEdward Tomasz Napierala 314009ea47eSEdward Tomasz Napierala portal_group_name: STR 315009ea47eSEdward Tomasz Napierala { 316252d941cSEdward Tomasz Napierala /* 317252d941cSEdward Tomasz Napierala * Make it possible to redefine default 318252d941cSEdward Tomasz Napierala * portal-group. but only once. 319252d941cSEdward Tomasz Napierala */ 320252d941cSEdward Tomasz Napierala if (strcmp($1, "default") == 0 && 321252d941cSEdward Tomasz Napierala conf->conf_default_pg_defined == false) { 322252d941cSEdward Tomasz Napierala portal_group = portal_group_find(conf, $1); 323252d941cSEdward Tomasz Napierala conf->conf_default_pg_defined = true; 324252d941cSEdward Tomasz Napierala } else { 325009ea47eSEdward Tomasz Napierala portal_group = portal_group_new(conf, $1); 326252d941cSEdward Tomasz Napierala } 327009ea47eSEdward Tomasz Napierala free($1); 328009ea47eSEdward Tomasz Napierala if (portal_group == NULL) 329009ea47eSEdward Tomasz Napierala return (1); 330009ea47eSEdward Tomasz Napierala } 331009ea47eSEdward Tomasz Napierala ; 332009ea47eSEdward Tomasz Napierala 333009ea47eSEdward Tomasz Napierala portal_group_entries: 334009ea47eSEdward Tomasz Napierala | 335009ea47eSEdward Tomasz Napierala portal_group_entries portal_group_entry 336f9488580SEdward Tomasz Napierala | 337f9488580SEdward Tomasz Napierala portal_group_entries portal_group_entry SEMICOLON 338009ea47eSEdward Tomasz Napierala ; 339009ea47eSEdward Tomasz Napierala 340009ea47eSEdward Tomasz Napierala portal_group_entry: 341009ea47eSEdward Tomasz Napierala portal_group_discovery_auth_group 342009ea47eSEdward Tomasz Napierala | 34305374883SEdward Tomasz Napierala portal_group_discovery_filter 34405374883SEdward Tomasz Napierala | 345db7bf2baSAlexander Motin portal_group_foreign 346db7bf2baSAlexander Motin | 347009ea47eSEdward Tomasz Napierala portal_group_listen 348009ea47eSEdward Tomasz Napierala | 349009ea47eSEdward Tomasz Napierala portal_group_listen_iser 3506dbdbf82SEdward Tomasz Napierala | 351a9d78210SEdward Tomasz Napierala portal_group_offload 352a9d78210SEdward Tomasz Napierala | 353398290f2SAlexander Motin portal_group_option 354398290f2SAlexander Motin | 3556dbdbf82SEdward Tomasz Napierala portal_group_redirect 356db7bf2baSAlexander Motin | 357db7bf2baSAlexander Motin portal_group_tag 35864ffe6d4SRichard Scheffenegger | 35964ffe6d4SRichard Scheffenegger portal_group_dscp 360ea8f1280SRichard Scheffenegger | 361ea8f1280SRichard Scheffenegger portal_group_pcp 362009ea47eSEdward Tomasz Napierala ; 363009ea47eSEdward Tomasz Napierala 364009ea47eSEdward Tomasz Napierala portal_group_discovery_auth_group: DISCOVERY_AUTH_GROUP STR 365009ea47eSEdward Tomasz Napierala { 366009ea47eSEdward Tomasz Napierala if (portal_group->pg_discovery_auth_group != NULL) { 367009ea47eSEdward Tomasz Napierala log_warnx("discovery-auth-group for portal-group " 368009ea47eSEdward Tomasz Napierala "\"%s\" specified more than once", 369009ea47eSEdward Tomasz Napierala portal_group->pg_name); 370009ea47eSEdward Tomasz Napierala return (1); 371009ea47eSEdward Tomasz Napierala } 372009ea47eSEdward Tomasz Napierala portal_group->pg_discovery_auth_group = 373009ea47eSEdward Tomasz Napierala auth_group_find(conf, $2); 374009ea47eSEdward Tomasz Napierala if (portal_group->pg_discovery_auth_group == NULL) { 375009ea47eSEdward Tomasz Napierala log_warnx("unknown discovery-auth-group \"%s\" " 376009ea47eSEdward Tomasz Napierala "for portal-group \"%s\"", 377009ea47eSEdward Tomasz Napierala $2, portal_group->pg_name); 378009ea47eSEdward Tomasz Napierala return (1); 379009ea47eSEdward Tomasz Napierala } 380009ea47eSEdward Tomasz Napierala free($2); 381009ea47eSEdward Tomasz Napierala } 382009ea47eSEdward Tomasz Napierala ; 383009ea47eSEdward Tomasz Napierala 38405374883SEdward Tomasz Napierala portal_group_discovery_filter: DISCOVERY_FILTER STR 38505374883SEdward Tomasz Napierala { 38605374883SEdward Tomasz Napierala int error; 38705374883SEdward Tomasz Napierala 388bd833b11SEdward Tomasz Napierala error = portal_group_set_filter(portal_group, $2); 38905374883SEdward Tomasz Napierala free($2); 39005374883SEdward Tomasz Napierala if (error != 0) 39105374883SEdward Tomasz Napierala return (1); 39205374883SEdward Tomasz Napierala } 39305374883SEdward Tomasz Napierala ; 39405374883SEdward Tomasz Napierala 395db7bf2baSAlexander Motin portal_group_foreign: FOREIGN 396db7bf2baSAlexander Motin { 397db7bf2baSAlexander Motin 398db7bf2baSAlexander Motin portal_group->pg_foreign = 1; 399db7bf2baSAlexander Motin } 400db7bf2baSAlexander Motin ; 401db7bf2baSAlexander Motin 402009ea47eSEdward Tomasz Napierala portal_group_listen: LISTEN STR 403009ea47eSEdward Tomasz Napierala { 404009ea47eSEdward Tomasz Napierala int error; 405009ea47eSEdward Tomasz Napierala 406009ea47eSEdward Tomasz Napierala error = portal_group_add_listen(portal_group, $2, false); 407009ea47eSEdward Tomasz Napierala free($2); 408009ea47eSEdward Tomasz Napierala if (error != 0) 409009ea47eSEdward Tomasz Napierala return (1); 410009ea47eSEdward Tomasz Napierala } 411009ea47eSEdward Tomasz Napierala ; 412009ea47eSEdward Tomasz Napierala 413009ea47eSEdward Tomasz Napierala portal_group_listen_iser: LISTEN_ISER STR 414009ea47eSEdward Tomasz Napierala { 415009ea47eSEdward Tomasz Napierala int error; 416009ea47eSEdward Tomasz Napierala 417009ea47eSEdward Tomasz Napierala error = portal_group_add_listen(portal_group, $2, true); 418009ea47eSEdward Tomasz Napierala free($2); 419009ea47eSEdward Tomasz Napierala if (error != 0) 420009ea47eSEdward Tomasz Napierala return (1); 421009ea47eSEdward Tomasz Napierala } 422009ea47eSEdward Tomasz Napierala ; 423009ea47eSEdward Tomasz Napierala 424a9d78210SEdward Tomasz Napierala portal_group_offload: OFFLOAD STR 425a9d78210SEdward Tomasz Napierala { 426a9d78210SEdward Tomasz Napierala int error; 427a9d78210SEdward Tomasz Napierala 428a9d78210SEdward Tomasz Napierala error = portal_group_set_offload(portal_group, $2); 429a9d78210SEdward Tomasz Napierala free($2); 430a9d78210SEdward Tomasz Napierala if (error != 0) 431a9d78210SEdward Tomasz Napierala return (1); 432a9d78210SEdward Tomasz Napierala } 433a9d78210SEdward Tomasz Napierala ; 434a9d78210SEdward Tomasz Napierala 435398290f2SAlexander Motin portal_group_option: OPTION STR STR 436398290f2SAlexander Motin { 437398290f2SAlexander Motin struct option *o; 438398290f2SAlexander Motin 439398290f2SAlexander Motin o = option_new(&portal_group->pg_options, $2, $3); 440398290f2SAlexander Motin free($2); 441398290f2SAlexander Motin free($3); 442398290f2SAlexander Motin if (o == NULL) 443398290f2SAlexander Motin return (1); 444398290f2SAlexander Motin } 445398290f2SAlexander Motin ; 446398290f2SAlexander Motin 4476dbdbf82SEdward Tomasz Napierala portal_group_redirect: REDIRECT STR 4486dbdbf82SEdward Tomasz Napierala { 4496dbdbf82SEdward Tomasz Napierala int error; 4506dbdbf82SEdward Tomasz Napierala 4516dbdbf82SEdward Tomasz Napierala error = portal_group_set_redirection(portal_group, $2); 4526dbdbf82SEdward Tomasz Napierala free($2); 4536dbdbf82SEdward Tomasz Napierala if (error != 0) 4546dbdbf82SEdward Tomasz Napierala return (1); 4556dbdbf82SEdward Tomasz Napierala } 4566dbdbf82SEdward Tomasz Napierala ; 4576dbdbf82SEdward Tomasz Napierala 458db7bf2baSAlexander Motin portal_group_tag: TAG STR 459db7bf2baSAlexander Motin { 460db7bf2baSAlexander Motin uint64_t tmp; 461db7bf2baSAlexander Motin 462db7bf2baSAlexander Motin if (expand_number($2, &tmp) != 0) { 463db7bf2baSAlexander Motin yyerror("invalid numeric value"); 464db7bf2baSAlexander Motin free($2); 465db7bf2baSAlexander Motin return (1); 466db7bf2baSAlexander Motin } 467db7bf2baSAlexander Motin 468db7bf2baSAlexander Motin portal_group->pg_tag = tmp; 469db7bf2baSAlexander Motin } 470db7bf2baSAlexander Motin ; 471db7bf2baSAlexander Motin 47264ffe6d4SRichard Scheffenegger portal_group_dscp 47364ffe6d4SRichard Scheffenegger : DSCP STR 47464ffe6d4SRichard Scheffenegger { 47564ffe6d4SRichard Scheffenegger uint64_t tmp; 47664ffe6d4SRichard Scheffenegger 47764ffe6d4SRichard Scheffenegger if (strcmp($2, "0x") == 0) { 47864ffe6d4SRichard Scheffenegger tmp = strtol($2 + 2, NULL, 16); 47964ffe6d4SRichard Scheffenegger } else if (expand_number($2, &tmp) != 0) { 48064ffe6d4SRichard Scheffenegger yyerror("invalid numeric value"); 48164ffe6d4SRichard Scheffenegger free($2); 48264ffe6d4SRichard Scheffenegger return(1); 48364ffe6d4SRichard Scheffenegger } 48464ffe6d4SRichard Scheffenegger if (tmp >= 0x40) { 48564ffe6d4SRichard Scheffenegger yyerror("invalid dscp value"); 48664ffe6d4SRichard Scheffenegger return(1); 48764ffe6d4SRichard Scheffenegger } 48864ffe6d4SRichard Scheffenegger 48964ffe6d4SRichard Scheffenegger portal_group->pg_dscp = tmp; 49064ffe6d4SRichard Scheffenegger } 49164ffe6d4SRichard Scheffenegger | DSCP BE { portal_group->pg_dscp = IPTOS_DSCP_CS0 >> 2 ; } 49264ffe6d4SRichard Scheffenegger | DSCP EF { portal_group->pg_dscp = IPTOS_DSCP_EF >> 2 ; } 49364ffe6d4SRichard Scheffenegger | DSCP CS0 { portal_group->pg_dscp = IPTOS_DSCP_CS0 >> 2 ; } 49464ffe6d4SRichard Scheffenegger | DSCP CS1 { portal_group->pg_dscp = IPTOS_DSCP_CS1 >> 2 ; } 49564ffe6d4SRichard Scheffenegger | DSCP CS2 { portal_group->pg_dscp = IPTOS_DSCP_CS2 >> 2 ; } 49664ffe6d4SRichard Scheffenegger | DSCP CS3 { portal_group->pg_dscp = IPTOS_DSCP_CS3 >> 2 ; } 49764ffe6d4SRichard Scheffenegger | DSCP CS4 { portal_group->pg_dscp = IPTOS_DSCP_CS4 >> 2 ; } 49864ffe6d4SRichard Scheffenegger | DSCP CS5 { portal_group->pg_dscp = IPTOS_DSCP_CS5 >> 2 ; } 49964ffe6d4SRichard Scheffenegger | DSCP CS6 { portal_group->pg_dscp = IPTOS_DSCP_CS6 >> 2 ; } 50064ffe6d4SRichard Scheffenegger | DSCP CS7 { portal_group->pg_dscp = IPTOS_DSCP_CS7 >> 2 ; } 50164ffe6d4SRichard Scheffenegger | DSCP AF11 { portal_group->pg_dscp = IPTOS_DSCP_AF11 >> 2 ; } 50264ffe6d4SRichard Scheffenegger | DSCP AF12 { portal_group->pg_dscp = IPTOS_DSCP_AF12 >> 2 ; } 50364ffe6d4SRichard Scheffenegger | DSCP AF13 { portal_group->pg_dscp = IPTOS_DSCP_AF13 >> 2 ; } 50464ffe6d4SRichard Scheffenegger | DSCP AF21 { portal_group->pg_dscp = IPTOS_DSCP_AF21 >> 2 ; } 50564ffe6d4SRichard Scheffenegger | DSCP AF22 { portal_group->pg_dscp = IPTOS_DSCP_AF22 >> 2 ; } 50664ffe6d4SRichard Scheffenegger | DSCP AF23 { portal_group->pg_dscp = IPTOS_DSCP_AF23 >> 2 ; } 50764ffe6d4SRichard Scheffenegger | DSCP AF31 { portal_group->pg_dscp = IPTOS_DSCP_AF31 >> 2 ; } 50864ffe6d4SRichard Scheffenegger | DSCP AF32 { portal_group->pg_dscp = IPTOS_DSCP_AF32 >> 2 ; } 50964ffe6d4SRichard Scheffenegger | DSCP AF33 { portal_group->pg_dscp = IPTOS_DSCP_AF33 >> 2 ; } 51064ffe6d4SRichard Scheffenegger | DSCP AF41 { portal_group->pg_dscp = IPTOS_DSCP_AF41 >> 2 ; } 51164ffe6d4SRichard Scheffenegger | DSCP AF42 { portal_group->pg_dscp = IPTOS_DSCP_AF42 >> 2 ; } 51264ffe6d4SRichard Scheffenegger | DSCP AF43 { portal_group->pg_dscp = IPTOS_DSCP_AF43 >> 2 ; } 51364ffe6d4SRichard Scheffenegger ; 51464ffe6d4SRichard Scheffenegger 515ea8f1280SRichard Scheffenegger portal_group_pcp: PCP STR 516ea8f1280SRichard Scheffenegger { 517ea8f1280SRichard Scheffenegger uint64_t tmp; 518ea8f1280SRichard Scheffenegger 519ea8f1280SRichard Scheffenegger if (expand_number($2, &tmp) != 0) { 520ea8f1280SRichard Scheffenegger yyerror("invalid numeric value"); 521ea8f1280SRichard Scheffenegger free($2); 522ea8f1280SRichard Scheffenegger return (1); 523ea8f1280SRichard Scheffenegger } 524e72a100bSAdrian Chadd if (tmp > 7) { 525ea8f1280SRichard Scheffenegger yyerror("invalid pcp value"); 526ea8f1280SRichard Scheffenegger free($2); 527ea8f1280SRichard Scheffenegger return (1); 528ea8f1280SRichard Scheffenegger } 529ea8f1280SRichard Scheffenegger 530ea8f1280SRichard Scheffenegger portal_group->pg_pcp = tmp; 531ea8f1280SRichard Scheffenegger } 532ea8f1280SRichard Scheffenegger ; 53364ffe6d4SRichard Scheffenegger 534920c6cbaSAlexander Motin lun: LUN lun_name 535920c6cbaSAlexander Motin OPENING_BRACKET lun_entries CLOSING_BRACKET 536920c6cbaSAlexander Motin { 537920c6cbaSAlexander Motin lun = NULL; 538920c6cbaSAlexander Motin } 539920c6cbaSAlexander Motin ; 540920c6cbaSAlexander Motin 541920c6cbaSAlexander Motin lun_name: STR 542920c6cbaSAlexander Motin { 543920c6cbaSAlexander Motin lun = lun_new(conf, $1); 544920c6cbaSAlexander Motin free($1); 545920c6cbaSAlexander Motin if (lun == NULL) 546920c6cbaSAlexander Motin return (1); 547920c6cbaSAlexander Motin } 548920c6cbaSAlexander Motin ; 549920c6cbaSAlexander Motin 550e1c0d0d8SEdward Tomasz Napierala target: TARGET target_name 551009ea47eSEdward Tomasz Napierala OPENING_BRACKET target_entries CLOSING_BRACKET 552009ea47eSEdward Tomasz Napierala { 553009ea47eSEdward Tomasz Napierala target = NULL; 554009ea47eSEdward Tomasz Napierala } 555009ea47eSEdward Tomasz Napierala ; 556009ea47eSEdward Tomasz Napierala 557e1c0d0d8SEdward Tomasz Napierala target_name: STR 558009ea47eSEdward Tomasz Napierala { 559009ea47eSEdward Tomasz Napierala target = target_new(conf, $1); 560009ea47eSEdward Tomasz Napierala free($1); 561009ea47eSEdward Tomasz Napierala if (target == NULL) 562009ea47eSEdward Tomasz Napierala return (1); 563009ea47eSEdward Tomasz Napierala } 564009ea47eSEdward Tomasz Napierala ; 565009ea47eSEdward Tomasz Napierala 566009ea47eSEdward Tomasz Napierala target_entries: 567009ea47eSEdward Tomasz Napierala | 568009ea47eSEdward Tomasz Napierala target_entries target_entry 569f9488580SEdward Tomasz Napierala | 570f9488580SEdward Tomasz Napierala target_entries target_entry SEMICOLON 571009ea47eSEdward Tomasz Napierala ; 572009ea47eSEdward Tomasz Napierala 573009ea47eSEdward Tomasz Napierala target_entry: 574e1c0d0d8SEdward Tomasz Napierala target_alias 575009ea47eSEdward Tomasz Napierala | 576e1c0d0d8SEdward Tomasz Napierala target_auth_group 577009ea47eSEdward Tomasz Napierala | 578df9900fbSEdward Tomasz Napierala target_auth_type 579df9900fbSEdward Tomasz Napierala | 580e1c0d0d8SEdward Tomasz Napierala target_chap 581009ea47eSEdward Tomasz Napierala | 582e1c0d0d8SEdward Tomasz Napierala target_chap_mutual 583009ea47eSEdward Tomasz Napierala | 584e1c0d0d8SEdward Tomasz Napierala target_initiator_name 5858cb2e958SEdward Tomasz Napierala | 586e1c0d0d8SEdward Tomasz Napierala target_initiator_portal 5878cb2e958SEdward Tomasz Napierala | 588e1c0d0d8SEdward Tomasz Napierala target_portal_group 589009ea47eSEdward Tomasz Napierala | 590057abcb0SAlexander Motin target_port 591057abcb0SAlexander Motin | 5926dbdbf82SEdward Tomasz Napierala target_redirect 5936dbdbf82SEdward Tomasz Napierala | 594e1c0d0d8SEdward Tomasz Napierala target_lun 595920c6cbaSAlexander Motin | 596920c6cbaSAlexander Motin target_lun_ref 597009ea47eSEdward Tomasz Napierala ; 598009ea47eSEdward Tomasz Napierala 599e1c0d0d8SEdward Tomasz Napierala target_alias: ALIAS STR 600009ea47eSEdward Tomasz Napierala { 601009ea47eSEdward Tomasz Napierala if (target->t_alias != NULL) { 602009ea47eSEdward Tomasz Napierala log_warnx("alias for target \"%s\" " 603f7ae5bf8SEdward Tomasz Napierala "specified more than once", target->t_name); 604009ea47eSEdward Tomasz Napierala return (1); 605009ea47eSEdward Tomasz Napierala } 606009ea47eSEdward Tomasz Napierala target->t_alias = $2; 607009ea47eSEdward Tomasz Napierala } 608009ea47eSEdward Tomasz Napierala ; 609009ea47eSEdward Tomasz Napierala 610e1c0d0d8SEdward Tomasz Napierala target_auth_group: AUTH_GROUP STR 611009ea47eSEdward Tomasz Napierala { 612009ea47eSEdward Tomasz Napierala if (target->t_auth_group != NULL) { 613009ea47eSEdward Tomasz Napierala if (target->t_auth_group->ag_name != NULL) 614009ea47eSEdward Tomasz Napierala log_warnx("auth-group for target \"%s\" " 615f7ae5bf8SEdward Tomasz Napierala "specified more than once", target->t_name); 616009ea47eSEdward Tomasz Napierala else 617df9900fbSEdward Tomasz Napierala log_warnx("cannot use both auth-group and explicit " 618009ea47eSEdward Tomasz Napierala "authorisations for target \"%s\"", 619f7ae5bf8SEdward Tomasz Napierala target->t_name); 620009ea47eSEdward Tomasz Napierala return (1); 621009ea47eSEdward Tomasz Napierala } 622009ea47eSEdward Tomasz Napierala target->t_auth_group = auth_group_find(conf, $2); 623009ea47eSEdward Tomasz Napierala if (target->t_auth_group == NULL) { 624009ea47eSEdward Tomasz Napierala log_warnx("unknown auth-group \"%s\" for target " 625f7ae5bf8SEdward Tomasz Napierala "\"%s\"", $2, target->t_name); 626009ea47eSEdward Tomasz Napierala return (1); 627009ea47eSEdward Tomasz Napierala } 628009ea47eSEdward Tomasz Napierala free($2); 629009ea47eSEdward Tomasz Napierala } 630009ea47eSEdward Tomasz Napierala ; 631009ea47eSEdward Tomasz Napierala 632df9900fbSEdward Tomasz Napierala target_auth_type: AUTH_TYPE STR 633df9900fbSEdward Tomasz Napierala { 634df9900fbSEdward Tomasz Napierala int error; 635df9900fbSEdward Tomasz Napierala 636df9900fbSEdward Tomasz Napierala if (target->t_auth_group != NULL) { 637df9900fbSEdward Tomasz Napierala if (target->t_auth_group->ag_name != NULL) { 638df9900fbSEdward Tomasz Napierala log_warnx("cannot use both auth-group and " 639df9900fbSEdward Tomasz Napierala "auth-type for target \"%s\"", 640df9900fbSEdward Tomasz Napierala target->t_name); 641df9900fbSEdward Tomasz Napierala return (1); 642df9900fbSEdward Tomasz Napierala } 643df9900fbSEdward Tomasz Napierala } else { 644df9900fbSEdward Tomasz Napierala target->t_auth_group = auth_group_new(conf, NULL); 645df9900fbSEdward Tomasz Napierala if (target->t_auth_group == NULL) { 646df9900fbSEdward Tomasz Napierala free($2); 647df9900fbSEdward Tomasz Napierala return (1); 648df9900fbSEdward Tomasz Napierala } 649df9900fbSEdward Tomasz Napierala target->t_auth_group->ag_target = target; 650df9900fbSEdward Tomasz Napierala } 651bd833b11SEdward Tomasz Napierala error = auth_group_set_type(target->t_auth_group, $2); 652df9900fbSEdward Tomasz Napierala free($2); 653df9900fbSEdward Tomasz Napierala if (error != 0) 654df9900fbSEdward Tomasz Napierala return (1); 655df9900fbSEdward Tomasz Napierala } 656df9900fbSEdward Tomasz Napierala ; 657df9900fbSEdward Tomasz Napierala 658e1c0d0d8SEdward Tomasz Napierala target_chap: CHAP STR STR 659009ea47eSEdward Tomasz Napierala { 660009ea47eSEdward Tomasz Napierala const struct auth *ca; 661009ea47eSEdward Tomasz Napierala 662009ea47eSEdward Tomasz Napierala if (target->t_auth_group != NULL) { 663009ea47eSEdward Tomasz Napierala if (target->t_auth_group->ag_name != NULL) { 664df9900fbSEdward Tomasz Napierala log_warnx("cannot use both auth-group and " 665df9900fbSEdward Tomasz Napierala "chap for target \"%s\"", 666f7ae5bf8SEdward Tomasz Napierala target->t_name); 667009ea47eSEdward Tomasz Napierala free($2); 668009ea47eSEdward Tomasz Napierala free($3); 669009ea47eSEdward Tomasz Napierala return (1); 670009ea47eSEdward Tomasz Napierala } 671009ea47eSEdward Tomasz Napierala } else { 672009ea47eSEdward Tomasz Napierala target->t_auth_group = auth_group_new(conf, NULL); 673009ea47eSEdward Tomasz Napierala if (target->t_auth_group == NULL) { 674009ea47eSEdward Tomasz Napierala free($2); 675009ea47eSEdward Tomasz Napierala free($3); 676009ea47eSEdward Tomasz Napierala return (1); 677009ea47eSEdward Tomasz Napierala } 678009ea47eSEdward Tomasz Napierala target->t_auth_group->ag_target = target; 679009ea47eSEdward Tomasz Napierala } 680009ea47eSEdward Tomasz Napierala ca = auth_new_chap(target->t_auth_group, $2, $3); 681009ea47eSEdward Tomasz Napierala free($2); 682009ea47eSEdward Tomasz Napierala free($3); 683009ea47eSEdward Tomasz Napierala if (ca == NULL) 684009ea47eSEdward Tomasz Napierala return (1); 685009ea47eSEdward Tomasz Napierala } 686009ea47eSEdward Tomasz Napierala ; 687009ea47eSEdward Tomasz Napierala 688e1c0d0d8SEdward Tomasz Napierala target_chap_mutual: CHAP_MUTUAL STR STR STR STR 689009ea47eSEdward Tomasz Napierala { 690009ea47eSEdward Tomasz Napierala const struct auth *ca; 691009ea47eSEdward Tomasz Napierala 692009ea47eSEdward Tomasz Napierala if (target->t_auth_group != NULL) { 693009ea47eSEdward Tomasz Napierala if (target->t_auth_group->ag_name != NULL) { 694df9900fbSEdward Tomasz Napierala log_warnx("cannot use both auth-group and " 695df9900fbSEdward Tomasz Napierala "chap-mutual for target \"%s\"", 696f7ae5bf8SEdward Tomasz Napierala target->t_name); 697009ea47eSEdward Tomasz Napierala free($2); 698009ea47eSEdward Tomasz Napierala free($3); 699009ea47eSEdward Tomasz Napierala free($4); 700009ea47eSEdward Tomasz Napierala free($5); 701009ea47eSEdward Tomasz Napierala return (1); 702009ea47eSEdward Tomasz Napierala } 703009ea47eSEdward Tomasz Napierala } else { 704009ea47eSEdward Tomasz Napierala target->t_auth_group = auth_group_new(conf, NULL); 705009ea47eSEdward Tomasz Napierala if (target->t_auth_group == NULL) { 706009ea47eSEdward Tomasz Napierala free($2); 707009ea47eSEdward Tomasz Napierala free($3); 708009ea47eSEdward Tomasz Napierala free($4); 709009ea47eSEdward Tomasz Napierala free($5); 710009ea47eSEdward Tomasz Napierala return (1); 711009ea47eSEdward Tomasz Napierala } 712009ea47eSEdward Tomasz Napierala target->t_auth_group->ag_target = target; 713009ea47eSEdward Tomasz Napierala } 714009ea47eSEdward Tomasz Napierala ca = auth_new_chap_mutual(target->t_auth_group, 715009ea47eSEdward Tomasz Napierala $2, $3, $4, $5); 716009ea47eSEdward Tomasz Napierala free($2); 717009ea47eSEdward Tomasz Napierala free($3); 718009ea47eSEdward Tomasz Napierala free($4); 719009ea47eSEdward Tomasz Napierala free($5); 720009ea47eSEdward Tomasz Napierala if (ca == NULL) 721009ea47eSEdward Tomasz Napierala return (1); 722009ea47eSEdward Tomasz Napierala } 723009ea47eSEdward Tomasz Napierala ; 724009ea47eSEdward Tomasz Napierala 725e1c0d0d8SEdward Tomasz Napierala target_initiator_name: INITIATOR_NAME STR 7268cb2e958SEdward Tomasz Napierala { 7278cb2e958SEdward Tomasz Napierala const struct auth_name *an; 7288cb2e958SEdward Tomasz Napierala 7298cb2e958SEdward Tomasz Napierala if (target->t_auth_group != NULL) { 7308cb2e958SEdward Tomasz Napierala if (target->t_auth_group->ag_name != NULL) { 731df9900fbSEdward Tomasz Napierala log_warnx("cannot use both auth-group and " 7328cb2e958SEdward Tomasz Napierala "initiator-name for target \"%s\"", 733f7ae5bf8SEdward Tomasz Napierala target->t_name); 7348cb2e958SEdward Tomasz Napierala free($2); 7358cb2e958SEdward Tomasz Napierala return (1); 7368cb2e958SEdward Tomasz Napierala } 7378cb2e958SEdward Tomasz Napierala } else { 7388cb2e958SEdward Tomasz Napierala target->t_auth_group = auth_group_new(conf, NULL); 7398cb2e958SEdward Tomasz Napierala if (target->t_auth_group == NULL) { 7408cb2e958SEdward Tomasz Napierala free($2); 7418cb2e958SEdward Tomasz Napierala return (1); 7428cb2e958SEdward Tomasz Napierala } 7438cb2e958SEdward Tomasz Napierala target->t_auth_group->ag_target = target; 7448cb2e958SEdward Tomasz Napierala } 7458cb2e958SEdward Tomasz Napierala an = auth_name_new(target->t_auth_group, $2); 7468cb2e958SEdward Tomasz Napierala free($2); 7478cb2e958SEdward Tomasz Napierala if (an == NULL) 7488cb2e958SEdward Tomasz Napierala return (1); 7498cb2e958SEdward Tomasz Napierala } 7508cb2e958SEdward Tomasz Napierala ; 7518cb2e958SEdward Tomasz Napierala 752e1c0d0d8SEdward Tomasz Napierala target_initiator_portal: INITIATOR_PORTAL STR 7538cb2e958SEdward Tomasz Napierala { 7548cb2e958SEdward Tomasz Napierala const struct auth_portal *ap; 7558cb2e958SEdward Tomasz Napierala 7568cb2e958SEdward Tomasz Napierala if (target->t_auth_group != NULL) { 7578cb2e958SEdward Tomasz Napierala if (target->t_auth_group->ag_name != NULL) { 758df9900fbSEdward Tomasz Napierala log_warnx("cannot use both auth-group and " 7598cb2e958SEdward Tomasz Napierala "initiator-portal for target \"%s\"", 760f7ae5bf8SEdward Tomasz Napierala target->t_name); 7618cb2e958SEdward Tomasz Napierala free($2); 7628cb2e958SEdward Tomasz Napierala return (1); 7638cb2e958SEdward Tomasz Napierala } 7648cb2e958SEdward Tomasz Napierala } else { 7658cb2e958SEdward Tomasz Napierala target->t_auth_group = auth_group_new(conf, NULL); 7668cb2e958SEdward Tomasz Napierala if (target->t_auth_group == NULL) { 7678cb2e958SEdward Tomasz Napierala free($2); 7688cb2e958SEdward Tomasz Napierala return (1); 7698cb2e958SEdward Tomasz Napierala } 7708cb2e958SEdward Tomasz Napierala target->t_auth_group->ag_target = target; 7718cb2e958SEdward Tomasz Napierala } 7728cb2e958SEdward Tomasz Napierala ap = auth_portal_new(target->t_auth_group, $2); 7738cb2e958SEdward Tomasz Napierala free($2); 7748cb2e958SEdward Tomasz Napierala if (ap == NULL) 7758cb2e958SEdward Tomasz Napierala return (1); 7768cb2e958SEdward Tomasz Napierala } 7778cb2e958SEdward Tomasz Napierala ; 7788cb2e958SEdward Tomasz Napierala 77992847ee1SAlexander Motin target_portal_group: PORTAL_GROUP STR STR 780009ea47eSEdward Tomasz Napierala { 78192847ee1SAlexander Motin struct portal_group *tpg; 78292847ee1SAlexander Motin struct auth_group *tag; 78392847ee1SAlexander Motin struct port *tp; 78492847ee1SAlexander Motin 78592847ee1SAlexander Motin tpg = portal_group_find(conf, $2); 78692847ee1SAlexander Motin if (tpg == NULL) { 78792847ee1SAlexander Motin log_warnx("unknown portal-group \"%s\" for target " 78892847ee1SAlexander Motin "\"%s\"", $2, target->t_name); 78992847ee1SAlexander Motin free($2); 79092847ee1SAlexander Motin free($3); 79192847ee1SAlexander Motin return (1); 79292847ee1SAlexander Motin } 79392847ee1SAlexander Motin tag = auth_group_find(conf, $3); 79492847ee1SAlexander Motin if (tag == NULL) { 79592847ee1SAlexander Motin log_warnx("unknown auth-group \"%s\" for target " 79692847ee1SAlexander Motin "\"%s\"", $3, target->t_name); 79792847ee1SAlexander Motin free($2); 79892847ee1SAlexander Motin free($3); 79992847ee1SAlexander Motin return (1); 80092847ee1SAlexander Motin } 80192847ee1SAlexander Motin tp = port_new(conf, target, tpg); 80292847ee1SAlexander Motin if (tp == NULL) { 80392847ee1SAlexander Motin log_warnx("can't link portal-group \"%s\" to target " 80492847ee1SAlexander Motin "\"%s\"", $2, target->t_name); 805009ea47eSEdward Tomasz Napierala free($2); 806009ea47eSEdward Tomasz Napierala return (1); 807009ea47eSEdward Tomasz Napierala } 80892847ee1SAlexander Motin tp->p_auth_group = tag; 80992847ee1SAlexander Motin free($2); 81092847ee1SAlexander Motin free($3); 81192847ee1SAlexander Motin } 81292847ee1SAlexander Motin | PORTAL_GROUP STR 81392847ee1SAlexander Motin { 81492847ee1SAlexander Motin struct portal_group *tpg; 81592847ee1SAlexander Motin struct port *tp; 81692847ee1SAlexander Motin 81792847ee1SAlexander Motin tpg = portal_group_find(conf, $2); 81892847ee1SAlexander Motin if (tpg == NULL) { 819009ea47eSEdward Tomasz Napierala log_warnx("unknown portal-group \"%s\" for target " 820f7ae5bf8SEdward Tomasz Napierala "\"%s\"", $2, target->t_name); 821009ea47eSEdward Tomasz Napierala free($2); 822009ea47eSEdward Tomasz Napierala return (1); 823009ea47eSEdward Tomasz Napierala } 82492847ee1SAlexander Motin tp = port_new(conf, target, tpg); 82592847ee1SAlexander Motin if (tp == NULL) { 82692847ee1SAlexander Motin log_warnx("can't link portal-group \"%s\" to target " 82792847ee1SAlexander Motin "\"%s\"", $2, target->t_name); 82892847ee1SAlexander Motin free($2); 82992847ee1SAlexander Motin return (1); 83092847ee1SAlexander Motin } 831009ea47eSEdward Tomasz Napierala free($2); 832009ea47eSEdward Tomasz Napierala } 833009ea47eSEdward Tomasz Napierala ; 834009ea47eSEdward Tomasz Napierala 835057abcb0SAlexander Motin target_port: PORT STR 836057abcb0SAlexander Motin { 837057abcb0SAlexander Motin struct pport *pp; 838057abcb0SAlexander Motin struct port *tp; 8398951f055SMarcelo Araujo int ret, i_pp, i_vp = 0; 840057abcb0SAlexander Motin 8418951f055SMarcelo Araujo ret = sscanf($2, "ioctl/%d/%d", &i_pp, &i_vp); 8428951f055SMarcelo Araujo if (ret > 0) { 8438951f055SMarcelo Araujo tp = port_new_ioctl(conf, target, i_pp, i_vp); 8448951f055SMarcelo Araujo if (tp == NULL) { 8458951f055SMarcelo Araujo log_warnx("can't create new ioctl port for " 8468951f055SMarcelo Araujo "target \"%s\"", target->t_name); 8478951f055SMarcelo Araujo free($2); 8488951f055SMarcelo Araujo return (1); 8498951f055SMarcelo Araujo } 8508951f055SMarcelo Araujo } else { 851057abcb0SAlexander Motin pp = pport_find(conf, $2); 852057abcb0SAlexander Motin if (pp == NULL) { 853057abcb0SAlexander Motin log_warnx("unknown port \"%s\" for target \"%s\"", 854057abcb0SAlexander Motin $2, target->t_name); 855057abcb0SAlexander Motin free($2); 856057abcb0SAlexander Motin return (1); 857057abcb0SAlexander Motin } 858057abcb0SAlexander Motin if (!TAILQ_EMPTY(&pp->pp_ports)) { 859057abcb0SAlexander Motin log_warnx("can't link port \"%s\" to target \"%s\", " 860057abcb0SAlexander Motin "port already linked to some target", 861057abcb0SAlexander Motin $2, target->t_name); 862057abcb0SAlexander Motin free($2); 863057abcb0SAlexander Motin return (1); 864057abcb0SAlexander Motin } 865057abcb0SAlexander Motin tp = port_new_pp(conf, target, pp); 866057abcb0SAlexander Motin if (tp == NULL) { 867057abcb0SAlexander Motin log_warnx("can't link port \"%s\" to target \"%s\"", 868057abcb0SAlexander Motin $2, target->t_name); 869057abcb0SAlexander Motin free($2); 870057abcb0SAlexander Motin return (1); 871057abcb0SAlexander Motin } 8728951f055SMarcelo Araujo } 8738951f055SMarcelo Araujo 874057abcb0SAlexander Motin free($2); 875057abcb0SAlexander Motin } 876057abcb0SAlexander Motin ; 877057abcb0SAlexander Motin 8786dbdbf82SEdward Tomasz Napierala target_redirect: REDIRECT STR 8796dbdbf82SEdward Tomasz Napierala { 8806dbdbf82SEdward Tomasz Napierala int error; 8816dbdbf82SEdward Tomasz Napierala 8826dbdbf82SEdward Tomasz Napierala error = target_set_redirection(target, $2); 8836dbdbf82SEdward Tomasz Napierala free($2); 8846dbdbf82SEdward Tomasz Napierala if (error != 0) 8856dbdbf82SEdward Tomasz Napierala return (1); 8866dbdbf82SEdward Tomasz Napierala } 8876dbdbf82SEdward Tomasz Napierala ; 8886dbdbf82SEdward Tomasz Napierala 889e1c0d0d8SEdward Tomasz Napierala target_lun: LUN lun_number 890e1c0d0d8SEdward Tomasz Napierala OPENING_BRACKET lun_entries CLOSING_BRACKET 891009ea47eSEdward Tomasz Napierala { 892009ea47eSEdward Tomasz Napierala lun = NULL; 893009ea47eSEdward Tomasz Napierala } 894009ea47eSEdward Tomasz Napierala ; 895009ea47eSEdward Tomasz Napierala 8964524db57SEdward Tomasz Napierala lun_number: STR 897009ea47eSEdward Tomasz Napierala { 8984524db57SEdward Tomasz Napierala uint64_t tmp; 899f584f51dSEdward Tomasz Napierala int ret; 900920c6cbaSAlexander Motin char *name; 9014524db57SEdward Tomasz Napierala 9024524db57SEdward Tomasz Napierala if (expand_number($1, &tmp) != 0) { 903d9b4554dSEdward Tomasz Napierala yyerror("invalid numeric value"); 9044524db57SEdward Tomasz Napierala free($1); 9054524db57SEdward Tomasz Napierala return (1); 9064524db57SEdward Tomasz Napierala } 907dad99db2SAlexander Motin if (tmp >= MAX_LUNS) { 908dad99db2SAlexander Motin yyerror("LU number is too big"); 909dad99db2SAlexander Motin free($1); 910dad99db2SAlexander Motin return (1); 911dad99db2SAlexander Motin } 9124524db57SEdward Tomasz Napierala 913f584f51dSEdward Tomasz Napierala ret = asprintf(&name, "%s,lun,%ju", target->t_name, tmp); 914f584f51dSEdward Tomasz Napierala if (ret <= 0) 915f584f51dSEdward Tomasz Napierala log_err(1, "asprintf"); 916920c6cbaSAlexander Motin lun = lun_new(conf, name); 917009ea47eSEdward Tomasz Napierala if (lun == NULL) 918009ea47eSEdward Tomasz Napierala return (1); 919920c6cbaSAlexander Motin 920920c6cbaSAlexander Motin lun_set_scsiname(lun, name); 921920c6cbaSAlexander Motin target->t_luns[tmp] = lun; 922920c6cbaSAlexander Motin } 923920c6cbaSAlexander Motin ; 924920c6cbaSAlexander Motin 925920c6cbaSAlexander Motin target_lun_ref: LUN STR STR 926920c6cbaSAlexander Motin { 927920c6cbaSAlexander Motin uint64_t tmp; 928920c6cbaSAlexander Motin 929920c6cbaSAlexander Motin if (expand_number($2, &tmp) != 0) { 930920c6cbaSAlexander Motin yyerror("invalid numeric value"); 931920c6cbaSAlexander Motin free($2); 932920c6cbaSAlexander Motin free($3); 933920c6cbaSAlexander Motin return (1); 934920c6cbaSAlexander Motin } 935920c6cbaSAlexander Motin free($2); 936dad99db2SAlexander Motin if (tmp >= MAX_LUNS) { 937dad99db2SAlexander Motin yyerror("LU number is too big"); 938dad99db2SAlexander Motin free($3); 939dad99db2SAlexander Motin return (1); 940dad99db2SAlexander Motin } 941920c6cbaSAlexander Motin 942920c6cbaSAlexander Motin lun = lun_find(conf, $3); 943920c6cbaSAlexander Motin free($3); 944920c6cbaSAlexander Motin if (lun == NULL) 945920c6cbaSAlexander Motin return (1); 946920c6cbaSAlexander Motin 947920c6cbaSAlexander Motin target->t_luns[tmp] = lun; 948009ea47eSEdward Tomasz Napierala } 949009ea47eSEdward Tomasz Napierala ; 950009ea47eSEdward Tomasz Napierala 951e1c0d0d8SEdward Tomasz Napierala lun_entries: 952009ea47eSEdward Tomasz Napierala | 953e1c0d0d8SEdward Tomasz Napierala lun_entries lun_entry 954f9488580SEdward Tomasz Napierala | 955f9488580SEdward Tomasz Napierala lun_entries lun_entry SEMICOLON 956009ea47eSEdward Tomasz Napierala ; 957009ea47eSEdward Tomasz Napierala 958e1c0d0d8SEdward Tomasz Napierala lun_entry: 959e1c0d0d8SEdward Tomasz Napierala lun_backend 960009ea47eSEdward Tomasz Napierala | 961e1c0d0d8SEdward Tomasz Napierala lun_blocksize 962009ea47eSEdward Tomasz Napierala | 963e1c0d0d8SEdward Tomasz Napierala lun_device_id 964009ea47eSEdward Tomasz Napierala | 96591be33dcSAlexander Motin lun_device_type 96691be33dcSAlexander Motin | 9673933f7b1SAlexander Motin lun_ctl_lun 9683933f7b1SAlexander Motin | 969e1c0d0d8SEdward Tomasz Napierala lun_option 970009ea47eSEdward Tomasz Napierala | 971e1c0d0d8SEdward Tomasz Napierala lun_path 972009ea47eSEdward Tomasz Napierala | 973e1c0d0d8SEdward Tomasz Napierala lun_serial 974009ea47eSEdward Tomasz Napierala | 975e1c0d0d8SEdward Tomasz Napierala lun_size 976009ea47eSEdward Tomasz Napierala ; 977009ea47eSEdward Tomasz Napierala 978e1c0d0d8SEdward Tomasz Napierala lun_backend: BACKEND STR 979009ea47eSEdward Tomasz Napierala { 980009ea47eSEdward Tomasz Napierala if (lun->l_backend != NULL) { 981920c6cbaSAlexander Motin log_warnx("backend for lun \"%s\" " 982009ea47eSEdward Tomasz Napierala "specified more than once", 983920c6cbaSAlexander Motin lun->l_name); 984009ea47eSEdward Tomasz Napierala free($2); 985009ea47eSEdward Tomasz Napierala return (1); 986009ea47eSEdward Tomasz Napierala } 987009ea47eSEdward Tomasz Napierala lun_set_backend(lun, $2); 988009ea47eSEdward Tomasz Napierala free($2); 989009ea47eSEdward Tomasz Napierala } 990009ea47eSEdward Tomasz Napierala ; 991009ea47eSEdward Tomasz Napierala 9924524db57SEdward Tomasz Napierala lun_blocksize: BLOCKSIZE STR 993009ea47eSEdward Tomasz Napierala { 9944524db57SEdward Tomasz Napierala uint64_t tmp; 9954524db57SEdward Tomasz Napierala 9964524db57SEdward Tomasz Napierala if (expand_number($2, &tmp) != 0) { 997d9b4554dSEdward Tomasz Napierala yyerror("invalid numeric value"); 9984524db57SEdward Tomasz Napierala free($2); 9994524db57SEdward Tomasz Napierala return (1); 10004524db57SEdward Tomasz Napierala } 10014524db57SEdward Tomasz Napierala 1002009ea47eSEdward Tomasz Napierala if (lun->l_blocksize != 0) { 1003920c6cbaSAlexander Motin log_warnx("blocksize for lun \"%s\" " 1004009ea47eSEdward Tomasz Napierala "specified more than once", 1005920c6cbaSAlexander Motin lun->l_name); 1006009ea47eSEdward Tomasz Napierala return (1); 1007009ea47eSEdward Tomasz Napierala } 10084524db57SEdward Tomasz Napierala lun_set_blocksize(lun, tmp); 1009009ea47eSEdward Tomasz Napierala } 1010009ea47eSEdward Tomasz Napierala ; 1011009ea47eSEdward Tomasz Napierala 1012e1c0d0d8SEdward Tomasz Napierala lun_device_id: DEVICE_ID STR 1013009ea47eSEdward Tomasz Napierala { 1014009ea47eSEdward Tomasz Napierala if (lun->l_device_id != NULL) { 1015920c6cbaSAlexander Motin log_warnx("device_id for lun \"%s\" " 1016009ea47eSEdward Tomasz Napierala "specified more than once", 1017920c6cbaSAlexander Motin lun->l_name); 1018009ea47eSEdward Tomasz Napierala free($2); 1019009ea47eSEdward Tomasz Napierala return (1); 1020009ea47eSEdward Tomasz Napierala } 1021009ea47eSEdward Tomasz Napierala lun_set_device_id(lun, $2); 1022009ea47eSEdward Tomasz Napierala free($2); 1023009ea47eSEdward Tomasz Napierala } 1024009ea47eSEdward Tomasz Napierala ; 1025009ea47eSEdward Tomasz Napierala 102691be33dcSAlexander Motin lun_device_type: DEVICE_TYPE STR 102791be33dcSAlexander Motin { 102891be33dcSAlexander Motin uint64_t tmp; 102991be33dcSAlexander Motin 103091be33dcSAlexander Motin if (strcasecmp($2, "disk") == 0 || 103191be33dcSAlexander Motin strcasecmp($2, "direct") == 0) 103291be33dcSAlexander Motin tmp = 0; 103391be33dcSAlexander Motin else if (strcasecmp($2, "processor") == 0) 103491be33dcSAlexander Motin tmp = 3; 103591be33dcSAlexander Motin else if (strcasecmp($2, "cd") == 0 || 103691be33dcSAlexander Motin strcasecmp($2, "cdrom") == 0 || 103791be33dcSAlexander Motin strcasecmp($2, "dvd") == 0 || 103891be33dcSAlexander Motin strcasecmp($2, "dvdrom") == 0) 103991be33dcSAlexander Motin tmp = 5; 104091be33dcSAlexander Motin else if (expand_number($2, &tmp) != 0 || 104191be33dcSAlexander Motin tmp > 15) { 104291be33dcSAlexander Motin yyerror("invalid numeric value"); 104391be33dcSAlexander Motin free($2); 104491be33dcSAlexander Motin return (1); 104591be33dcSAlexander Motin } 104691be33dcSAlexander Motin 104791be33dcSAlexander Motin lun_set_device_type(lun, tmp); 104891be33dcSAlexander Motin } 104991be33dcSAlexander Motin ; 105091be33dcSAlexander Motin 10513933f7b1SAlexander Motin lun_ctl_lun: CTL_LUN STR 10523933f7b1SAlexander Motin { 10533933f7b1SAlexander Motin uint64_t tmp; 10543933f7b1SAlexander Motin 10553933f7b1SAlexander Motin if (expand_number($2, &tmp) != 0) { 10563933f7b1SAlexander Motin yyerror("invalid numeric value"); 10573933f7b1SAlexander Motin free($2); 10583933f7b1SAlexander Motin return (1); 10593933f7b1SAlexander Motin } 10603933f7b1SAlexander Motin 10613933f7b1SAlexander Motin if (lun->l_ctl_lun >= 0) { 10623933f7b1SAlexander Motin log_warnx("ctl_lun for lun \"%s\" " 10633933f7b1SAlexander Motin "specified more than once", 10643933f7b1SAlexander Motin lun->l_name); 10653933f7b1SAlexander Motin return (1); 10663933f7b1SAlexander Motin } 10673933f7b1SAlexander Motin lun_set_ctl_lun(lun, tmp); 10683933f7b1SAlexander Motin } 10693933f7b1SAlexander Motin ; 10703933f7b1SAlexander Motin 1071e1c0d0d8SEdward Tomasz Napierala lun_option: OPTION STR STR 1072009ea47eSEdward Tomasz Napierala { 1073398290f2SAlexander Motin struct option *o; 1074009ea47eSEdward Tomasz Napierala 1075398290f2SAlexander Motin o = option_new(&lun->l_options, $2, $3); 1076009ea47eSEdward Tomasz Napierala free($2); 1077009ea47eSEdward Tomasz Napierala free($3); 1078398290f2SAlexander Motin if (o == NULL) 1079009ea47eSEdward Tomasz Napierala return (1); 1080009ea47eSEdward Tomasz Napierala } 1081009ea47eSEdward Tomasz Napierala ; 1082009ea47eSEdward Tomasz Napierala 1083e1c0d0d8SEdward Tomasz Napierala lun_path: PATH STR 1084009ea47eSEdward Tomasz Napierala { 1085009ea47eSEdward Tomasz Napierala if (lun->l_path != NULL) { 1086920c6cbaSAlexander Motin log_warnx("path for lun \"%s\" " 1087009ea47eSEdward Tomasz Napierala "specified more than once", 1088920c6cbaSAlexander Motin lun->l_name); 1089009ea47eSEdward Tomasz Napierala free($2); 1090009ea47eSEdward Tomasz Napierala return (1); 1091009ea47eSEdward Tomasz Napierala } 1092009ea47eSEdward Tomasz Napierala lun_set_path(lun, $2); 1093009ea47eSEdward Tomasz Napierala free($2); 1094009ea47eSEdward Tomasz Napierala } 1095009ea47eSEdward Tomasz Napierala ; 1096009ea47eSEdward Tomasz Napierala 1097e1c0d0d8SEdward Tomasz Napierala lun_serial: SERIAL STR 1098009ea47eSEdward Tomasz Napierala { 1099009ea47eSEdward Tomasz Napierala if (lun->l_serial != NULL) { 1100920c6cbaSAlexander Motin log_warnx("serial for lun \"%s\" " 1101009ea47eSEdward Tomasz Napierala "specified more than once", 1102920c6cbaSAlexander Motin lun->l_name); 1103009ea47eSEdward Tomasz Napierala free($2); 1104009ea47eSEdward Tomasz Napierala return (1); 1105009ea47eSEdward Tomasz Napierala } 1106009ea47eSEdward Tomasz Napierala lun_set_serial(lun, $2); 1107009ea47eSEdward Tomasz Napierala free($2); 1108009ea47eSEdward Tomasz Napierala } 1109009ea47eSEdward Tomasz Napierala ; 1110009ea47eSEdward Tomasz Napierala 11114524db57SEdward Tomasz Napierala lun_size: SIZE STR 1112009ea47eSEdward Tomasz Napierala { 11134524db57SEdward Tomasz Napierala uint64_t tmp; 11144524db57SEdward Tomasz Napierala 11154524db57SEdward Tomasz Napierala if (expand_number($2, &tmp) != 0) { 1116d9b4554dSEdward Tomasz Napierala yyerror("invalid numeric value"); 11174524db57SEdward Tomasz Napierala free($2); 11184524db57SEdward Tomasz Napierala return (1); 11194524db57SEdward Tomasz Napierala } 11204524db57SEdward Tomasz Napierala 1121009ea47eSEdward Tomasz Napierala if (lun->l_size != 0) { 1122920c6cbaSAlexander Motin log_warnx("size for lun \"%s\" " 1123009ea47eSEdward Tomasz Napierala "specified more than once", 1124920c6cbaSAlexander Motin lun->l_name); 1125009ea47eSEdward Tomasz Napierala return (1); 1126009ea47eSEdward Tomasz Napierala } 11274524db57SEdward Tomasz Napierala lun_set_size(lun, tmp); 1128009ea47eSEdward Tomasz Napierala } 1129009ea47eSEdward Tomasz Napierala ; 1130009ea47eSEdward Tomasz Napierala %% 1131009ea47eSEdward Tomasz Napierala 1132009ea47eSEdward Tomasz Napierala void 1133009ea47eSEdward Tomasz Napierala yyerror(const char *str) 1134009ea47eSEdward Tomasz Napierala { 1135009ea47eSEdward Tomasz Napierala 1136009ea47eSEdward Tomasz Napierala log_warnx("error in configuration file at line %d near '%s': %s", 1137009ea47eSEdward Tomasz Napierala lineno, yytext, str); 1138009ea47eSEdward Tomasz Napierala } 1139009ea47eSEdward Tomasz Napierala 11405c734b04SJakub Wojciech Klama int 11415c734b04SJakub Wojciech Klama parse_conf(struct conf *newconf, const char *path) 1142009ea47eSEdward Tomasz Napierala { 1143009ea47eSEdward Tomasz Napierala int error; 1144009ea47eSEdward Tomasz Napierala 11455c734b04SJakub Wojciech Klama conf = newconf; 1146009ea47eSEdward Tomasz Napierala yyin = fopen(path, "r"); 1147009ea47eSEdward Tomasz Napierala if (yyin == NULL) { 1148009ea47eSEdward Tomasz Napierala log_warn("unable to open configuration file %s", path); 11495c734b04SJakub Wojciech Klama return (1); 1150009ea47eSEdward Tomasz Napierala } 11515c734b04SJakub Wojciech Klama 11526dc3a9f4SEdward Tomasz Napierala lineno = 1; 1153009ea47eSEdward Tomasz Napierala yyrestart(yyin); 1154009ea47eSEdward Tomasz Napierala error = yyparse(); 1155009ea47eSEdward Tomasz Napierala auth_group = NULL; 1156009ea47eSEdward Tomasz Napierala portal_group = NULL; 1157009ea47eSEdward Tomasz Napierala target = NULL; 1158009ea47eSEdward Tomasz Napierala lun = NULL; 1159009ea47eSEdward Tomasz Napierala fclose(yyin); 1160009ea47eSEdward Tomasz Napierala 11615c734b04SJakub Wojciech Klama return (error); 1162009ea47eSEdward Tomasz Napierala } 1163