blob: 469c23bb69abe685429ff7d73a608c5fa5721670 [file] [log] [blame]
%{
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "drbdadm_parser.h"
#include "drbdadm.h"
#include "drbdtool_common.h"
void long_string(char* text);
void long_dqstring(char* text);
void err_dqstring(char* text);
#if 0
#define DP printf("'%s' ",yytext)
#else
#define DP
#endif
#define CP yylval.txt = strdup(yytext); yylval.rc = R_NO_CHECK
#define RC(N) yylval.rc = R_ ## N
#define YY_NO_INPUT 1
#define YY_NO_UNPUT 1
#ifndef YY_FLEX_SUBMINOR_VERSION
#define MAX_INCLUDE_DEPTH 10
YY_BUFFER_STATE include_stack[MAX_INCLUDE_DEPTH];
int include_stack_ptr = 0;
#endif
%}
%option noyywrap
%option nounput
NUM [0-9]{1,8}[MKGs]?
SNUMB [0-9]{1,3}
IPV4ADDR ({SNUMB}"."){3}{SNUMB}
HEX4 [0-9a-fA-F]{1,4}
IPV6ADDR ((({HEX4}":"){0,5}{HEX4})?":"{HEX4}?":"({HEX4}(":"{HEX4}){0,5})?("%"{STRING})?)|("::"[fF]{4}":"{IPV4ADDR})
WS [ \t\r]
OPCHAR [{};\[\]:]
DQSTRING \"([^\"\\\n]|\\[^\n]){0,255}\"
LONG_DQSTRING \"([^\"\\\n]|\\[^\n]){255}.
ERR_DQSTRING \"([^\"\\\n]|\\[^\n]){0,255}[\\\n]
STRING [a-zA-Z0-9/._-]{1,128}
LONG_STRING [a-zA-Z0-9/._-]{129}
%%
\n { line++; }
\#.* /* ignore comments */
{WS} /* ignore whitespaces */
{OPCHAR} { DP; return yytext[0]; }
on { DP; return TK_ON; }
ignore-on { DP; return TK_IGNORE; }
stacked-on-top-of { DP; return TK_STACKED; }
floating { DP; return TK_FLOATING; }
no { DP; return TK_NO; }
net { DP; return TK_NET; }
yes { DP; return TK_YES; }
ask { DP; return TK_ASK; }
skip { DP; return TK_SKIP; }
disk { DP; return TK_DISK; }
proxy { DP; return TK_PROXY; }
minor { DP; return TK_MINOR; }
inside { DP; return TK_INSIDE; }
volume { DP; return TK_VOLUME; }
cmd-timeout-short { DP; return TK_CMD_TIMEOUT_SHORT; }
cmd-timeout-medium { DP; return TK_CMD_TIMEOUT_MEDIUM; }
cmd-timeout-long { DP; return TK_CMD_TIMEOUT_LONG; }
syncer { DP; return TK_SYNCER; }
device { DP; return TK_DEVICE; }
global { DP; return TK_GLOBAL; }
common { DP; return TK_COMMON; }
options { DP; return TK_OPTIONS; }
outside { DP; return TK_OUTSIDE; }
address { DP; return TK_ADDRESS; }
alternate-link-address { DP; return TK_ALT_ADDRESS; }
startup { DP; return TK_STARTUP; }
include { DP; return TK_INCLUDE; }
handlers { DP; return TK_HANDLER; }
minor-count { DP; return TK_MINOR_COUNT; }
disable-ip-verification { DP; return TK_DISABLE_IP_VERIFICATION;}
udev-always-use-vnr { DP; return TK_UDEV_ALWAYS_USE_VNR; }
dialog-refresh { DP; return TK_DIALOG_REFRESH; }
resource { DP; return TK_RESOURCE; }
meta-disk { DP; return TK_META_DISK; }
flexible-meta-disk { DP; return TK_FLEX_META_DISK; }
usage-count { DP; return TK_USAGE_COUNT; }
_this_host { DP; return TK__THIS_HOST; }
_remote_host { DP; return TK__REMOTE_HOST; }
sci { DP; CP; return TK_SCI; }
ssocks { DP; CP; return TK_SSOCKS; }
sdp { DP; CP; return TK_SDP; }
ipv4 { DP; CP; return TK_IPV4; }
ipv6 { DP; CP; return TK_IPV6; }
size { DP; CP; RC(DISK_SIZE); return TK_DISK_OPTION; }
on-io-error { DP; CP; return TK_DISK_OPTION; }
fencing { DP; CP; return TK_DISK_OPTION; }
max-bio-bvecs { DP; CP; return TK_DISK_OPTION; }
disk-timeout { DP; CP; return TK_DISK_OPTION; }
read-balancing { DP; CP; return TK_DISK_OPTION; }
rs-discard-granularity { DP; CP; return TK_DISK_OPTION; }
use-bmbv { DP; CP; return TK_DISK_FLAG; }
disk-barrier { DP; CP; return TK_DISK_FLAG; }
disk-flushes { DP; CP; return TK_DISK_FLAG; }
disk-drain { DP; CP; return TK_DISK_FLAG; }
md-flushes { DP; CP; return TK_DISK_FLAG; }
no-disk-barrier { DP; CP; return TK_DISK_NO_FLAG; }
no-disk-flushes { DP; CP; return TK_DISK_NO_FLAG; }
no-disk-drain { DP; CP; return TK_DISK_NO_FLAG; }
no-md-flushes { DP; CP; return TK_DISK_NO_FLAG; }
timeout { DP; CP; RC(TIMEOUT); return TK_NET_OPTION; }
protocol { DP; CP; RC(PROTOCOL); return TK_NET_OPTION; }
ko-count { DP; CP; RC(KO_COUNT); return TK_NET_OPTION; }
ping-int { DP; CP; RC(PING_INT); return TK_NET_OPTION; }
max-buffers { DP; CP; RC(MAX_BUFFERS); return TK_NET_OPTION;}
sndbuf-size { DP; CP; RC(SNDBUF_SIZE); return TK_NET_OPTION | TK_PROXY_GROUP;}
rcvbuf-size { DP; CP; RC(RCVBUF_SIZE); return TK_NET_OPTION | TK_PROXY_GROUP;}
connect-int { DP; CP; RC(CONNECT_INT); return TK_NET_OPTION;}
cram-hmac-alg { DP; CP; return TK_NET_OPTION; }
shared-secret { DP; CP; return TK_NET_OPTION; }
max-epoch-size { DP; CP; RC(MAX_EPOCH_SIZE); return TK_NET_OPTION;}
after-sb-[012]pri { DP; CP; return TK_NET_OPTION; }
rr-conflict { DP; CP; return TK_NET_OPTION; }
ping-timeout { DP; CP; return TK_NET_OPTION | TK_PROXY_GROUP;}
unplug-watermark { DP; CP; return TK_NET_OPTION; }
data-integrity-alg { DP; CP; return TK_NET_OPTION; }
on-congestion { DP; CP; return TK_NET_OPTION; }
socket-check-timeout { DP; CP; return TK_NET_OPTION; }
congestion-fill { DP; CP; RC(CONG_FILL); return TK_NET_OPTION; }
congestion-extents { DP; CP; RC(CONG_EXTENTS); return TK_NET_OPTION;}
allow-two-primaries { DP; CP; return TK_NET_FLAG; }
always-asbp { DP; CP; return TK_NET_FLAG; }
no-tcp-cork { DP; CP; return TK_NET_NO_FLAG; }
tcp-cork { DP; CP; return TK_NET_FLAG; }
discard-my-data { DP; CP; return TK_NET_DELEGATE; }
rate { DP; CP; RC(RATE); return TK_SYNCER_OLD_OPT | TK_DISK_OPTION; }
resync-rate { DP; CP; RC(RATE); return TK_DISK_OPTION; }
after { DP; CP; return TK_SYNCER_OLD_OPT | TK_DISK_OPTION; }
resync-after { DP; CP; return TK_DISK_OPTION; }
verify-alg { DP; CP; return TK_SYNCER_OLD_OPT | TK_NET_OPTION; }
csums-alg { DP; CP; return TK_SYNCER_OLD_OPT | TK_NET_OPTION; }
csums-after-crash-only { DP; CP; return TK_NET_FLAG; }
al-extents { DP; CP; RC(AL_EXTENTS); return TK_SYNCER_OLD_OPT | TK_DISK_OPTION;}
al-updates { DP; CP; return TK_DISK_FLAG; }
discard-zeroes-if-aligned { DP; CP; return TK_DISK_FLAG; }
cpu-mask { DP; CP; return TK_SYNCER_OLD_OPT | TK_RES_OPTION; }
use-rle { DP; CP; return TK_SYNCER_OLD_OPT | TK_NET_FLAG; }
delay-probe-volume { DP; CP; return TK_DEPRECATED_OPTION; }
delay-probe-interval { DP; CP; return TK_DEPRECATED_OPTION; }
c-plan-ahead { DP; CP; RC(C_PLAN_AHEAD); return TK_SYNCER_OLD_OPT | TK_DISK_OPTION; }
c-delay-target { DP; CP; RC(C_DELAY_TARGET); return TK_SYNCER_OLD_OPT | TK_DISK_OPTION; }
c-fill-target { DP; CP; RC(C_FILL_TARGET); return TK_SYNCER_OLD_OPT | TK_DISK_OPTION; }
c-max-rate { DP; CP; RC(C_MAX_RATE); return TK_SYNCER_OLD_OPT | TK_DISK_OPTION; }
c-min-rate { DP; CP; RC(C_MIN_RATE); return TK_SYNCER_OLD_OPT | TK_DISK_OPTION; }
throttle-threshold { DP; CP; return TK_DEPRECATED_OPTION; }
hold-off-threshold { DP; CP; return TK_DEPRECATED_OPTION; }
on-no-data-accessible { DP; CP; return TK_SYNCER_OLD_OPT | TK_RES_OPTION; }
wfc-timeout { DP; CP; RC(WFC_TIMEOUT); return TK_STARTUP_OPTION;}
degr-wfc-timeout { DP; CP; RC(DEGR_WFC_TIMEOUT); return TK_STARTUP_OPTION;}
outdated-wfc-timeout { DP; CP; RC(OUTDATED_WFC_TIMEOUT); return TK_STARTUP_OPTION;}
stacked-timeouts { DP; return TK_STARTUP_DELEGATE; }
become-primary-on { DP; return TK_STARTUP_DELEGATE; }
wait-after-sb { DP; CP; return TK_STARTUP_FLAG; }
pri-on-incon-degr { DP; CP; return TK_HANDLER_OPTION; }
pri-lost-after-sb { DP; CP; return TK_HANDLER_OPTION; }
pri-lost { DP; CP; return TK_HANDLER_OPTION; }
initial-split-brain { DP; CP; return TK_HANDLER_OPTION; }
split-brain { DP; CP; return TK_HANDLER_OPTION; }
outdate-peer { DP; CP; return TK_HANDLER_OPTION; }
fence-peer { DP; CP; return TK_HANDLER_OPTION; }
unfence-peer { DP; CP; return TK_HANDLER_OPTION; }
local-io-error { DP; CP; return TK_HANDLER_OPTION; }
before-resync-target { DP; CP; return TK_HANDLER_OPTION; }
after-resync-target { DP; CP; return TK_HANDLER_OPTION; }
before-resync-source { DP; CP; return TK_HANDLER_OPTION; }
memlimit { DP; CP; return TK_PROXY_OPTION | TK_PROXY_GROUP; }
read-loops { DP; CP; return TK_PROXY_OPTION | TK_PROXY_GROUP; }
compression { DP; CP; return TK_PROXY_OPTION | TK_PROXY_GROUP; }
bwlimit { DP; CP; return TK_PROXY_OPTION | TK_PROXY_GROUP; }
plugin { DP; CP; return TK_PROXY_DELEGATE; }
out-of-sync { DP; CP; return TK_HANDLER_OPTION; }
{IPV4ADDR} { DP; CP; return TK_IPADDR; }
{IPV6ADDR} { DP; CP; return TK_IPADDR6; }
{NUM} { DP; CP; return TK_INTEGER; }
{DQSTRING} { unescape(yytext); DP; CP; return TK_STRING; }
{STRING} { DP; CP; return TK_STRING; }
{LONG_STRING} { return TK_ERR_STRING_TOO_LONG; }
{LONG_DQSTRING} { return TK_ERR_DQSTRING_TOO_LONG; }
{ERR_DQSTRING} { return TK_ERR_DQSTRING; }
. { DP; return TK_ELSE; }
%%
/* Compatibility cruft for flex version 2.5.4a */
#ifndef YY_FLEX_SUBMINOR_VERSION
/** Pushes the new state onto the stack. The new state becomes
* the current state. This function will allocate the stack
* if necessary.
* @param new_buffer The new state.
*
*/
void yypush_buffer_state (YY_BUFFER_STATE new_buffer )
{
if (new_buffer == NULL)
return;
if ( include_stack_ptr >= MAX_INCLUDE_DEPTH ) {
fprintf( stderr, "Includes nested too deeply" );
exit( 1 );
}
include_stack[include_stack_ptr++] = YY_CURRENT_BUFFER;
yy_switch_to_buffer(new_buffer);
BEGIN(INITIAL);
}
/** Removes and deletes the top of the stack, if present.
* The next element becomes the new top.
*
*/
void yypop_buffer_state (void)
{
if (!YY_CURRENT_BUFFER)
return;
if ( --include_stack_ptr < 0 ) {
fprintf( stderr, "error in flex compat code\n" );
exit( 1 );
}
yy_delete_buffer(YY_CURRENT_BUFFER );
yy_switch_to_buffer(include_stack[include_stack_ptr]);
}
#endif
void my_yypush_buffer_state(FILE *f)
{
/* Since we do not have YY_BUF_SIZE outside of the flex generated file.*/
yypush_buffer_state(yy_create_buffer(f, YY_BUF_SIZE));
}