ifchd: Make the command parser much more strict. It now has a concept of
argument types and command types.
This commit is contained in:
parent
62d69e1909
commit
3ef87c1f26
@ -72,38 +72,34 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
interface = 'iface';
|
terminator = ';' > Dispatch;
|
||||||
ip = 'ip';
|
v4addr = digit{1,3} '.' digit{1,3} '.' digit{1,3} '.' digit{1,3};
|
||||||
subnet = 'snet';
|
ip_arg = (v4addr > ArgSt % ArgEn) terminator;
|
||||||
dns = 'dns';
|
iplist_arg = (((v4addr ',')* v4addr) > ArgSt % ArgEn) terminator;
|
||||||
lprsvr = 'lpr';
|
str_arg = ([^;\0]+ > ArgSt % ArgEn) terminator;
|
||||||
ntpsvr = 'ntp';
|
s32_arg = (extend{4} > ArgSt % ArgEn) terminator;
|
||||||
wins = 'wins';
|
u16_arg = (extend{2} > ArgSt % ArgEn) terminator;
|
||||||
router = 'routr';
|
u8_arg = (extend{1} > ArgSt % ArgEn) terminator;
|
||||||
broadcast = 'bcast';
|
|
||||||
timezone = 'tzone';
|
|
||||||
hostname = 'host';
|
|
||||||
domain = 'dom';
|
|
||||||
ipttl = 'ipttl';
|
|
||||||
mtu = 'mtu';
|
|
||||||
|
|
||||||
cmdname = (interface % { cl->state = STATE_INTERFACE; }
|
cmd_ip = ('ip:' % { cl->state = STATE_IP; }
|
||||||
|ip % { cl->state = STATE_IP; }
|
|'snet:' % { cl->state = STATE_SUBNET; }
|
||||||
|subnet % { cl->state = STATE_SUBNET; }
|
|'routr:' % { cl->state = STATE_ROUTER; }
|
||||||
|dns % { cl->state = STATE_DNS; }
|
|'bcast:' % { cl->state = STATE_BROADCAST; }
|
||||||
|lprsvr % { cl->state = STATE_LPRSVR; }
|
) ip_arg;
|
||||||
|ntpsvr % { cl->state = STATE_NTPSVR; }
|
cmd_iplist = ('dns:' % { cl->state = STATE_DNS; }
|
||||||
|wins % { cl->state = STATE_WINS; }
|
|'lpr:' % { cl->state = STATE_LPRSVR; }
|
||||||
|router % { cl->state = STATE_ROUTER; }
|
|'ntp:' % { cl->state = STATE_NTPSVR; }
|
||||||
|broadcast % { cl->state = STATE_BROADCAST; }
|
|'wins:' % { cl->state = STATE_WINS; }
|
||||||
|timezone % { cl->state = STATE_TIMEZONE; }
|
) iplist_arg;
|
||||||
|hostname % { cl->state = STATE_HOSTNAME; }
|
cmd_str = ('iface:' % { cl->state = STATE_INTERFACE; }
|
||||||
|domain % { cl->state = STATE_DOMAIN; }
|
|'host:' % { cl->state = STATE_HOSTNAME; }
|
||||||
|ipttl % { cl->state = STATE_IPTTL; }
|
|'dom:' % { cl->state = STATE_DOMAIN; }
|
||||||
|mtu % { cl->state = STATE_MTU; }
|
) str_arg;
|
||||||
);
|
cmd_s32 = ('tzone:' % { cl->state = STATE_TIMEZONE; }) s32_arg;
|
||||||
|
cmd_u16 = ('mtu:' % { cl->state = STATE_MTU; }) u16_arg;
|
||||||
|
cmd_u8 = ('ipttl:' % { cl->state = STATE_IPTTL; }) u8_arg;
|
||||||
|
|
||||||
command = cmdname ':' ([^;\0]+ > ArgSt % ArgEn) (';' > Dispatch);
|
command = (cmd_ip|cmd_iplist|cmd_str|cmd_s32|cmd_u16|cmd_u8);
|
||||||
main := (command > Reset)+;
|
main := (command > Reset)+;
|
||||||
}%%
|
}%%
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user