summaryrefslogtreecommitdiffstats
path: root/proto/ospf/config.Y
blob: 5a58bf2e6906d42b495f23dcfd09e8d0d59a2bf5 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
/*
 *	BIRD -- OSPF Configuration
 *
 *	(c) 1999-2000 Ondrej Filip <feela@network.cz>
 *
 *	Can be freely distributed and used under the terms of the GNU GPL.
 */

CF_HDR

#include "proto/ospf/ospf.h"

CF_DEFINES

#define OSPF_CFG ((struct ospf_config *) this_proto)

CF_DECLS

CF_KEYWORDS(OSPF, AREA, OSPF_METRIC1, OSPF_METRIC2, OSPF_TAG)
CF_KEYWORDS(NEIGHBORS, RFC1583COMPAT)

%type <t> opttext

CF_GRAMMAR

CF_ADDTO(proto, ospf_proto '}')

ospf_proto_start: proto_start OSPF {
     this_proto = proto_config_new(&proto_ospf, sizeof(struct ospf_config));
     this_proto->preference = DEF_PREF_OSPF;
  }
 ;

ospf_proto:
   ospf_proto_start proto_name '{'
 | ospf_proto proto_item ';'
 | ospf_proto ospf_area ';'
 | ospf_proto RFC1583COMPAT bool ';' { OSPF_CFG->rfc1583 = $3; }
 ;

ospf_area: AREA idval {
    ((struct ospf_config *)this_proto)->area = $2;
 }
;

opttext:
    TEXT
| /* empty */ { $$ = NULL; }
;

CF_ADDTO(dynamic_attr, OSPF_METRIC1 { $$ = f_new_dynamic_attr(EAF_TYPE_INT | EAF_TEMP, T_INT, EA_OSPF_METRIC1); })
CF_ADDTO(dynamic_attr, OSPF_METRIC2 { $$ = f_new_dynamic_attr(EAF_TYPE_INT | EAF_TEMP, T_INT, EA_OSPF_METRIC2); })
CF_ADDTO(dynamic_attr, OSPF_TAG { $$ = f_new_dynamic_attr(EAF_TYPE_INT | EAF_TEMP, T_INT, EA_OSPF_TAG); })

CF_CLI(SHOW OSPF, optsym, [<name>], [[Show information about ospf protocol]])
{ ospf_sh(proto_get_named($3, &proto_ospf)); } ;

CF_CLI(SHOW OSPF NEIGHBORS, optsym opttext, [<name>] [\"<interface>\"], [[Show information about ospf neighbors]])
{ ospf_sh_neigh(proto_get_named($4, &proto_ospf), $5); } ;

CF_CLI(SHOW OSPF INTERFACE, optsym opttext, [<name>] [\"<interface>\"], [[Show infomation about interface]])
{ ospf_sh_iface(proto_get_named($4, &proto_ospf), $5); };

CF_CODE

CF_END