📄 gram.c
字号:
#line 304 "gram.y"
{
iface->AdvHomeAgentInfo = (yyvsp[(2) - (3)].bool);
}
break;
case 37:
#line 308 "gram.y"
{
iface->AdvHomeAgentFlag = (yyvsp[(2) - (3)].bool);
}
break;
case 38:
#line 312 "gram.y"
{
iface->HomeAgentPreference = (yyvsp[(2) - (3)].num);
}
break;
case 39:
#line 316 "gram.y"
{
iface->HomeAgentLifetime = (yyvsp[(2) - (3)].num);
}
break;
case 40:
#line 320 "gram.y"
{
iface->UnicastOnly = (yyvsp[(2) - (3)].bool);
}
break;
case 41:
#line 324 "gram.y"
{
iface->AdvMobRtrSupportFlag = (yyvsp[(2) - (3)].bool);
}
break;
case 42:
#line 330 "gram.y"
{
(yyval.pinfo) = (yyvsp[(1) - (1)].pinfo);
}
break;
case 43:
#line 334 "gram.y"
{
(yyvsp[(2) - (2)].pinfo)->next = (yyvsp[(1) - (2)].pinfo);
(yyval.pinfo) = (yyvsp[(2) - (2)].pinfo);
}
break;
case 44:
#line 341 "gram.y"
{
unsigned int dst;
if (prefix->AdvPreferredLifetime >
prefix->AdvValidLifetime)
{
flog(LOG_ERR, "AdvValidLifeTime must be "
"greater than AdvPreferredLifetime in %s, line %d",
conf_file, num_lines);
ABORT;
}
if( prefix->if6to4[0] )
{
if (get_v4addr(prefix->if6to4, &dst) < 0)
{
flog(LOG_ERR, "interface %s has no IPv4 addresses, disabling 6to4 prefix", prefix->if6to4 );
prefix->enabled = 0;
} else
{
*((uint16_t *)(prefix->Prefix.s6_addr)) = htons(0x2002);
memcpy( prefix->Prefix.s6_addr + 2, &dst, sizeof( dst ) );
}
}
(yyval.pinfo) = prefix;
prefix = NULL;
}
break;
case 45:
#line 372 "gram.y"
{
prefix = malloc(sizeof(struct AdvPrefix));
if (prefix == NULL) {
flog(LOG_CRIT, "malloc failed: %s", strerror(errno));
ABORT;
}
prefix_init_defaults(prefix);
if ((yyvsp[(4) - (4)].num) > MAX_PrefixLen)
{
flog(LOG_ERR, "invalid prefix length in %s, line %d", conf_file, num_lines);
ABORT;
}
prefix->PrefixLen = (yyvsp[(4) - (4)].num);
memcpy(&prefix->Prefix, (yyvsp[(2) - (4)].addr), sizeof(struct in6_addr));
}
break;
case 50:
#line 403 "gram.y"
{
prefix->AdvOnLinkFlag = (yyvsp[(2) - (3)].bool);
}
break;
case 51:
#line 407 "gram.y"
{
prefix->AdvAutonomousFlag = (yyvsp[(2) - (3)].bool);
}
break;
case 52:
#line 411 "gram.y"
{
prefix->AdvRouterAddr = (yyvsp[(2) - (3)].bool);
}
break;
case 53:
#line 415 "gram.y"
{
prefix->AdvValidLifetime = (yyvsp[(2) - (3)].num);
}
break;
case 54:
#line 419 "gram.y"
{
prefix->AdvPreferredLifetime = (yyvsp[(2) - (3)].num);
}
break;
case 55:
#line 423 "gram.y"
{
dlog(LOG_DEBUG, 4, "using interface %s for 6to4", (yyvsp[(2) - (3)].str));
strncpy(prefix->if6to4, (yyvsp[(2) - (3)].str), IFNAMSIZ-1);
prefix->if6to4[IFNAMSIZ-1] = '\0';
}
break;
case 56:
#line 431 "gram.y"
{
(yyval.rinfo) = (yyvsp[(1) - (1)].rinfo);
}
break;
case 57:
#line 435 "gram.y"
{
(yyvsp[(2) - (2)].rinfo)->next = (yyvsp[(1) - (2)].rinfo);
(yyval.rinfo) = (yyvsp[(2) - (2)].rinfo);
}
break;
case 58:
#line 442 "gram.y"
{
(yyval.rinfo) = route;
route = NULL;
}
break;
case 59:
#line 450 "gram.y"
{
route = malloc(sizeof(struct AdvRoute));
if (route == NULL) {
flog(LOG_CRIT, "malloc failed: %s", strerror(errno));
ABORT;
}
route_init_defaults(route, iface);
if ((yyvsp[(4) - (4)].num) > MAX_PrefixLen)
{
flog(LOG_ERR, "invalid route prefix length in %s, line %d", conf_file, num_lines);
ABORT;
}
route->PrefixLen = (yyvsp[(4) - (4)].num);
memcpy(&route->Prefix, (yyvsp[(2) - (4)].addr), sizeof(struct in6_addr));
}
break;
case 64:
#line 483 "gram.y"
{
route->AdvRoutePreference = (yyvsp[(2) - (3)].snum);
}
break;
case 65:
#line 487 "gram.y"
{
route->AdvRouteLifetime = (yyvsp[(2) - (3)].num);
}
break;
case 66:
#line 493 "gram.y"
{
(yyval.rdnssinfo) = (yyvsp[(1) - (1)].rdnssinfo);
}
break;
case 67:
#line 497 "gram.y"
{
(yyvsp[(2) - (2)].rdnssinfo)->next = (yyvsp[(1) - (2)].rdnssinfo);
(yyval.rdnssinfo) = (yyvsp[(2) - (2)].rdnssinfo);
}
break;
case 68:
#line 504 "gram.y"
{
(yyval.rdnssinfo) = rdnss;
rdnss = NULL;
}
break;
case 71:
#line 515 "gram.y"
{
if (!rdnss) {
/* first IP found */
rdnss = malloc(sizeof(struct AdvRDNSS));
if (rdnss == NULL) {
flog(LOG_CRIT, "malloc failed: %s", strerror(errno));
ABORT;
}
rdnss_init_defaults(rdnss, iface);
}
switch (rdnss->AdvRDNSSNumber) {
case 0:
memcpy(&rdnss->AdvRDNSSAddr1, (yyvsp[(1) - (1)].addr), sizeof(struct in6_addr));
rdnss->AdvRDNSSNumber++;
break;
case 1:
memcpy(&rdnss->AdvRDNSSAddr2, (yyvsp[(1) - (1)].addr), sizeof(struct in6_addr));
rdnss->AdvRDNSSNumber++;
break;
case 2:
memcpy(&rdnss->AdvRDNSSAddr3, (yyvsp[(1) - (1)].addr), sizeof(struct in6_addr));
rdnss->AdvRDNSSNumber++;
break;
default:
flog(LOG_CRIT, "Too many addresses in RDNSS section");
ABORT;
}
}
break;
case 72:
#line 550 "gram.y"
{
if (!rdnss) {
flog(LOG_CRIT, "No address specified in RDNSS section");
ABORT;
}
}
break;
case 77:
#line 568 "gram.y"
{
rdnss->AdvRDNSSPreference = (yyvsp[(2) - (3)].num);
}
break;
case 78:
#line 572 "gram.y"
{
rdnss->AdvRDNSSOpenFlag = (yyvsp[(2) - (3)].bool);
}
break;
case 79:
#line 576 "gram.y"
{
if ((yyvsp[(2) - (3)].num) < iface->MaxRtrAdvInterval && (yyvsp[(2) - (3)].num) != 0) {
flog(LOG_ERR, "AdvRDNSSLifetime must be at least MaxRtrAdvInterval");
ABORT;
}
if ((yyvsp[(2) - (3)].num) > 2*(iface->MaxRtrAdvInterval))
flog(LOG_WARNING, "Warning: AdvRDNSSLifetime <= 2*MaxRtrAdvInterval would allow stale DNS servers to be deleted faster");
rdnss->AdvRDNSSLifetime = (yyvsp[(2) - (3)].num);
}
break;
case 80:
#line 589 "gram.y"
{
(yyval.num) = (yyvsp[(1) - (1)].num);
}
break;
case 81:
#line 593 "gram.y"
{
(yyval.num) = (uint32_t)~0;
}
break;
/* Line 1267 of yacc.c. */
#line 2152 "gram.c"
default: break;
}
YY_SYMBOL_PRINT ("-> $$ =", yyr1[yyn], &yyval, &yyloc);
YYPOPSTACK (yylen);
yylen = 0;
YY_STACK_PRINT (yyss, yyssp);
*++yyvsp = yyval;
/* Now `shift' the result of the reduction. Determine what state
that goes to, based on the state we popped back to and the rule
number reduced by. */
yyn = yyr1[yyn];
yystate = yypgoto[yyn - YYNTOKENS] + *yyssp;
if (0 <= yystate && yystate <= YYLAST && yycheck[yystate] == *yyssp)
yystate = yytable[yystate];
else
yystate = yydefgoto[yyn - YYNTOKENS];
goto yynewstate;
/*------------------------------------.
| yyerrlab -- here on detecting error |
`------------------------------------*/
yyerrlab:
/* If not already recovering from an error, report this error. */
if (!yyerrstatus)
{
++yynerrs;
#if ! YYERROR_VERBOSE
yyerror (YY_("syntax error"));
#else
{
YYSIZE_T yysize = yysyntax_error (0, yystate, yychar);
if (yymsg_alloc < yysize && yymsg_alloc < YYSTACK_ALLOC_MAXIMUM)
{
YYSIZE_T yyalloc = 2 * yysize;
if (! (yysize <= yyalloc && yyalloc <= YYSTACK_ALLOC_MAXIMUM))
yyalloc = YYSTACK_ALLOC_MAXIMUM;
if (yymsg != yymsgbuf)
YYSTACK_FREE (yymsg);
yymsg = (char *) YYSTACK_ALLOC (yyalloc);
if (yymsg)
yymsg_alloc = yyalloc;
else
{
yymsg = yymsgbuf;
yymsg_alloc = sizeof yymsgbuf;
}
}
if (0 < yysize && yysize <= yymsg_alloc)
{
(void) yysyntax_error (yymsg, yystate, yychar);
yyerror (yymsg);
}
else
{
yyerror (YY_("syntax error"));
if (yysize != 0)
goto yyexhaustedlab;
}
}
#endif
}
if (yyerrstatus == 3)
{
/* If just tried and failed to reuse look-ahead token after an
error, discard it. */
if (yychar <= YYEOF)
{
/* Return failure if at end of input. */
if (yychar == YYEOF)
YYABORT;
}
else
{
yydestruct ("Error: discarding",
yytoken, &yylval);
yychar = YYEMPTY;
}
}
/* Else will try to reuse look-ahead token after shifting the error
token. */
goto yyerrlab1;
/*---------------------------------------------------.
| yyerrorlab -- error raised explicitly by YYERROR. |
`---------------------------------------------------*/
yyerrorlab:
/* Pacify compilers like GCC when the user code never invokes
YYERROR and the label yyerrorlab therefore never appears in user
code. */
if (/*CONSTCOND*/ 0)
goto yyerrorlab;
/* Do not reclaim the symbols of the rule which action triggered
this YYERROR. */
YYPOPSTACK (yylen);
yylen = 0;
YY_STACK_PRINT (yyss, yyssp);
yystate = *yyssp;
goto yyerrlab1;
/*-------------------------------------------------------------.
| yyerrlab1 -- common code for both syntax error and YYERROR. |
`------------------------------------------------------
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -