this was surprisingly straightforward, i just copied it from ospfd.

ok?

Index: parse.y
===================================================================
RCS file: /cvs/src/usr.sbin/ospf6d/parse.y,v
retrieving revision 1.20
diff -u -p -r1.20 parse.y
--- parse.y     13 Dec 2010 13:43:37 -0000      1.20
+++ parse.y     27 Jun 2011 01:29:46 -0000
@@ -121,6 +121,7 @@ typedef struct {
 %token SET TYPE
 %token YES NO
 %token DEMOTE
+%token INCLUDE
 %token ERROR
 %token <v.string>      STRING
 %token <v.number>      NUMBER
@@ -131,6 +132,7 @@ typedef struct {
 %%
 
 grammar                : /* empty */
+               | grammar include '\n'
                | grammar '\n'
                | grammar conf_main '\n'
                | grammar varset '\n'
@@ -138,6 +140,21 @@ grammar            : /* empty */
                | grammar error '\n'            { file->errors++; }
                ;
 
+include                : INCLUDE STRING                {
+                       struct file     *nfile;
+
+                       if ((nfile = pushfile($2, 1)) == NULL) {
+                               yyerror("failed to include file %s", $2);
+                               free($2);
+                               YYERROR;
+                       }
+                       free($2);
+
+                       file = nfile;
+                       lungetc('\n');
+               }
+               ;
+
 string         : string STRING {
                        if (asprintf(&$$, "%s %s", $1, $2) == -1) {
                                free($1);
@@ -526,6 +543,7 @@ lookup(char *s)
                {"external-tag",        EXTTAG},
                {"fib-update",          FIBUPDATE},
                {"hello-interval",      HELLOINTERVAL},
+               {"include",             INCLUDE},
                {"interface",           INTERFACE},
                {"metric",              METRIC},
                {"no",                  NO},

Reply via email to