diff options
author | Wataru Ishida <ishida.wataru@lab.ntt.co.jp> | 2016-11-16 21:45:27 -0500 |
---|---|---|
committer | Wataru Ishida <ishida.wataru@lab.ntt.co.jp> | 2016-11-17 23:22:55 -0500 |
commit | 93d1dca70aa0ae3b34050d24ad7462b8757213bf (patch) | |
tree | 29c369dfb6d2180e62bf51a5819eff8644bbc81a /tools | |
parent | 24e397b0f65b1c5294ea711a953501fda944411d (diff) |
config: simplify route-disposition configuration
before:
```yaml
actions:
route-disposition:
accept-route: true
reject-route: false
```
after
```yaml
action:
router-disposition: accept-route
```
Signed-off-by: Wataru Ishida <ishida.wataru@lab.ntt.co.jp>
Diffstat (limited to 'tools')
-rw-r--r-- | tools/config/example_toml.go | 5 | ||||
-rw-r--r-- | tools/pyang_plugins/bgpyang2golang.py | 32 |
2 files changed, 29 insertions, 8 deletions
diff --git a/tools/config/example_toml.go b/tools/config/example_toml.go index 11ab2939..62e6b8f6 100644 --- a/tools/config/example_toml.go +++ b/tools/config/example_toml.go @@ -156,10 +156,7 @@ func policy() config.RoutingPolicy { }, }, Actions: config.Actions{ - RouteDisposition: config.RouteDisposition{ - AcceptRoute: false, - RejectRoute: true, - }, + RouteDisposition: "reject-route", BgpActions: config.BgpActions{ SetCommunity: config.SetCommunity{ SetCommunityMethod: config.SetCommunityMethod{ diff --git a/tools/pyang_plugins/bgpyang2golang.py b/tools/pyang_plugins/bgpyang2golang.py index f6ea1a86..a7a59866 100644 --- a/tools/pyang_plugins/bgpyang2golang.py +++ b/tools/pyang_plugins/bgpyang2golang.py @@ -18,6 +18,7 @@ import optparse import StringIO import sys from pyang import plugin +from collections import namedtuple _COPYRIGHT_NOTICE = """ // DO NOT EDIT @@ -207,6 +208,9 @@ def emit_class_def(ctx, yang_statement, struct_name, prefix): if is_case(child): continue + if is_choice(child) and is_enum_choice(child): + emit_type_name = val_name_go + # case leaflist if is_leaflist(child): type_obj = child.search_one('type') @@ -239,7 +243,7 @@ def emit_class_def(ctx, yang_statement, struct_name, prefix): emit_type_name = '[]'+t.golang_name # case container - elif is_container(child) or is_choice(child): + elif is_container(child) or (is_choice(child) and not is_enum_choice(child)): key = child_prefix+':'+container_or_list_name t = ctx.golang_struct_names[key] val_name_go = t.golang_name @@ -380,7 +384,7 @@ def visit_children(ctx, module, children): t = c.search_one('type') # define container embeded enums - if is_leaf(c) and c.search_one('type').arg == 'enumeration': + def define_enum(c): prefix = module.i_prefix c.path = get_path(c) c.golang_name = convert_to_golang(c.arg) @@ -389,12 +393,17 @@ def visit_children(ctx, module, children): else: ctx.golang_typedef_map[prefix] = {c.arg: c} - if is_list(c) or is_container(c) or is_choice(c): + if is_leaf(c) and c.search_one('type').arg == 'enumeration': + define_enum(c) + elif is_list(c) or is_container(c) or is_choice(c): c.golang_name = convert_to_golang(c.uniq_name) if is_choice(c): picks = pickup_choice(c) c.i_children = picks + if is_enum_choice(c): + define_enum(c) + continue if ctx.golang_struct_names.get(prefix+':'+c.uniq_name): ext_c = ctx.golang_struct_names.get(prefix+':'+c.uniq_name) @@ -504,6 +513,12 @@ def emit_enum(prefix, name, stmt, substmts): const_prefix = convert_const_prefix(type_name_org) print >> o, 'const (' m = {} + + if is_choice(stmt) and is_enum_choice(stmt): + n = namedtuple('Statement', ['arg']) + n.arg = 'none' + substmts = [n] + substmts + for sub in substmts: enum_name = '%s_%s' % (const_prefix, convert_const_prefix(sub.arg)) m[sub.arg.lower()] = enum_name @@ -580,7 +595,9 @@ def emit_typedef(ctx, module): t = stmt.search_one('type') o = StringIO.StringIO() - if t.arg == 'enumeration': + if not t and is_choice(stmt): + emit_enum(prefix, type_name_org, stmt, stmt.i_children) + elif t.arg == 'enumeration': emit_enum(prefix, type_name_org, stmt, t.substmts) elif t.arg == 'union': print >> o, '// typedef for typedef %s:%s'\ @@ -642,6 +659,13 @@ def is_case(s): def is_choice(s): return s.keyword in ['choice'] +def is_enum_choice(s): + return all(e.search_one('type').arg in _type_enum_case for e in s.i_children) + +_type_enum_case = [ + 'empty', +] + def is_builtin_type(t): return t.arg in _type_builtin |