diff --git a/README.md b/README.md index f9a9f98..713e281 100644 --- a/README.md +++ b/README.md @@ -1,16 +1,26 @@ # ifupdown-ng -This package is a work in progress implementation of the ifupdown suite. It is -intended to be largely compatible with ifupdown and ifupdown2, with some caveats: +ifupdown-ng is a network device manager that is largely compatible with Debian +ifupdown, BusyBox ifupdown and Cumulus Networks' ifupdown2. + +## Dependency Resolution + +![Dependency resolution example](doc/img/dependency-resolution.png) + +ifupdown-ng uses a dependency resolver to determine interface bring-up order +in a deterministic way. To use this feature, you must declare relationships +between interfaces with the `requires` keyword. This keeps the implementation +efficient. For convenience, the `requires` keyword is exported to executors +as the `IF_REQUIRES` environment variable. + +For compatibility with some legacy ifupdown executors, we also provide the +`requires` keyword under other environment variables in some cases. + +## Caveats * ifupdown2 python plugins are not supported at this time. An executor could be written to handle them. -* ifupdown-ng uses a SAT solver to determine interface bring-up order, like - ifupdown2. However, relationships must be explicitly defined instead of - inferred by plugins in ifupdown2. This simplifies the executors and ensures - consistent behaviour across executors. - * ifupdown-ng retains compatibility with /etc/network/if-X.d scripts, but will prefer using executors in /usr/libexec/ifupdown-ng where appropriate. diff --git a/doc/img/dependency-resolution.png b/doc/img/dependency-resolution.png new file mode 100644 index 0000000..dc28eea Binary files /dev/null and b/doc/img/dependency-resolution.png differ