acidjunk / acidjunk/pyang

Deviation/deviate grammar not checked properly

Abierto
#76 0 comentarios 0 reacciones 0 asignados Ver en GitHub
auto-migrated Priority-Medium Type-Defect
Lenguaje dominante
Python
Estrellas
0
Forks
0
Métricas de merge de PR
Sin PR fusionados en 30 d

Descripción

```
I think this is only an omission due to the nature of deviate statements;
grammar for deviations is not checked correctly. The deviate-stmt seems to be
the only YANG statement which “dynamically” changes substatement grammar
based on a statement's argument (all other do this based on keywords, perhaps
only the type-stmt is similar with it's restrictions).

It is not obvious from the text in RFC6020 but YANG grammar specifies the
following:
1. deviation-stmt must have at least one deviate substatement
2. if a deviate-stmt with “not-supported” argument is present within a
deviation-stmt, then no other deviate-stmt may be present as it's sibling
3. deviate-stmts with arguments “add”, “delete” and “replace” may
appear any number of times within a deviation-stmt as long as a
“not-supported” deviate-stmt is not present.
4. a deviate-stmt with a “not-supported” argument must not contain any
substatements
5. a deviate-stmt with arguments “add”, “delete” and “replace” may
or may not contain substatements, but I suggest generating a warning when such
statements are empty
6. a deviate-stmt with argument “add” may only contain the following
substatements which may appear in any order; units-stmt (0..1), must-stmt
(0..n), unique-stmt (0..n), default-stmt (0..1), config-stmt (0..1),
mandatory-stmt (0..1), min-elements-stmt (0..1) and max-elements-stmt (0..1)
7. a deviate-stmt with argument “delete” may only contain the following
substatements which may appear in any order; units-stmt (0..1), must-stmt
(0..n), unique-stmt (0..n) and default-stmt (0..1)
8. a deviate-stmt with argument “replace” may only contain the following
substatements which may appear in any order; type-stmt (0..1), units-stmt
(0..1), default-stmt (0..1), config-stmt (0..1), mandatory-stmt (0..1),
min-elements-stmt (0..1) and max-elements-stmt (0..1)

You probably wanted to check this within validation phases for deviation-stmt
and deviate-stmt, since you cannot specify such a grammar within grammar.py,
because you'd have to check a statement's argument. You should do it in a way
similar to how you check restrictions of the type-stmt.

I confirmed this in the latest svn rev739.

RFC6020 text in 7.18.3 and it's sub-chapters is extremely vague on this matter
but the grammar in chaper 12 is quite clear. I enclosed a YANG module with a
bunch of grammar errors. Pyang does report some errors with this YANG file, but
they shouldn't even be reported since a grammar check should have higher
priority. For example, attempting to add a type statement should never even be
allowed.
```

Original issue reported on code.google.com by `jernej.t...@gmail.com` on 11 Sep 2012 at 8:16

Attachments:
- [deviation-deviate-errs@2012-09-06.yang](https://storage.googleapis.com/google-code-attachments/pyang/issue-76/comment-0/deviation-deviate-errs@2012-09-06.yang)

Guía de contribución

No hay ninguna guía de contribución indexada para este repositorio

Evaluación

Este issue todavía no se ha evaluado.

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.