Skip to content

deprecated options

Thomas Mangin edited this page Aug 16, 2026 · 7 revisions

Pre-Alpha. This page describes behavior that may change.

Configuration syntax that used to work and no longer does, with the migration path for each. ze config migrate handles every item on this list automatically. Read this page only if you want to know what the migrator is doing to your file, or if you want to fix the syntax by hand without running the migrator.

The tool does the work:

ze config validate config.conf              # Show what needs migration
ze config migrate --dry-run config.conf     # Preview the changes
ze config migrate config.conf -o new.conf   # Apply and write

v2 syntax (deprecated)

The neighbor keyword

neighbor was renamed to peer, and the IP and AS moved into nested remote { } and local { } containers.

Before:

neighbor 192.0.2.1 {
    local-as 65000;
    peer-as  65001;
}

After:

peer upstream1 {
    connection { remote { ip 192.0.2.1; } }
    session    { asn { local 65000; remote 65001; } }
}

Run ze config migrate config.conf -o config-v3.conf.

Root-level peer globs

Glob patterns for peer matching moved into a template { match } block. Peer definitions are now always for actual peers.

Before:

peer * {
    hold-time 90;
}

peer 192.168.*.* {
    hold-time 180;
}

After:

template {
    match * {
        timer { hold-time 90; }
    }
    match 192.168.*.* {
        timer { hold-time 180; }
    }
}

template { neighbor }

Renamed to template { group }, because a template block is not a neighbor.

Before:

template {
    neighbor ibgp-rs {
        peer-as 65000;
    }
}

After:

template {
    group ibgp-rs {
        peer-as 65000;
    }
}

Unsupported ExaBGP features

The migrator parses and silently ignores a handful of ExaBGP features that Ze does not implement. The config loads, the session comes up, and the feature is absent. None of these are blockers for migration in practice: the use cases are rare and nobody has asked for them.

multi-session capability

capability {
    multi-session;    # parsed, ignored
}

ExaBGP-specific extension. Ze uses standard BGP session handling. If you actually need multi-session targeting, raise an issue.

operational capability and block

capability {
    operational;      # parsed, ignored
}

peer upstream1 {
    connection { remote { ip 192.0.2.1; } }
    session    { asn { remote 65001; } }
    operational {     # parsed, ignored
        # ...
    }
}

ExaBGP operational messages (ASM, ADM, RPCQ) are not supported. The capability advertisement is dropped, the block is ignored.

set format: inactive prefix replaced by nop keyword

The old set format used set + inactive: prefix to mark nodes inactive:

set system ntp
inactive: system ntp

The new set format uses the nop keyword:

nop system ntp

The old syntax is still accepted during parsing for backward compatibility.

Top-level env { } block removed

A top-level env { } block is refused with a parse error, because env is not a top-level keyword. ze config validate has always rejected it. The daemon used to accept it on one code path, read it once, and discard it. Both keys the block carried have homes under environment { }.

Bare command forms removed

Every command starts with its verb. The bare spellings that once worked without one were removed from the command tree, and the dispatcher answers unknown command for them.

Removed Write instead
daemon reload request reload
daemon status show status
daemon quit request halt
daemon shutdown request shutdown
bgp summary, bgp health, bgp monitor show bgp summary, show bgp health, monitor bgp
system memory, system platform, system sockets tcp, system profile heap, system goroutines summary, system file-descriptors summary, system update the same words after show
interface rate, capture interface, runtime memory show interface rate, show capture interface, show runtime memory

stop, restart, and reboot are the exception. The SSH exec middleware intercepts those three lifecycle verbs before the dispatcher, so they stay spelled exactly as they are. Rewriting them verb-first routes them to a dispatcher that holds no such key.

ze signal is unaffected as an operator command. Its subcommands now send the verb-first spelling under the hood.

show interface subcommand keywords

show interface is a local, in-process handler registered at two words, and its own argument is an interface NAME. Every keyword below it goes to the daemon: brief, scan, type <type>, errors, rate, and the two name <name> ... forms. Only the bare ze show interface and ze show interface <name> are answered in-process. Before this rule existed, all seven reached the local handler and were read as interface names, so ze show interface brief looked for an interface called brief.

The detail and counters forms take the name after a name keyword:

ze show interface name eth0 detail
ze show interface name eth0 counters

The migration workflow

# Check what needs migration
ze config validate config.conf

# Preview changes
ze config migrate --dry-run config.conf

# Apply migration to a new file
ze config migrate config.conf -o config-v3.conf

# Validate the result
ze config validate config-v3.conf

The full list of named transformations is visible with ze config migrate --list. Each transformation runs in order, and transformations that do not apply to your config are skipped.

See also

Adapted from main/docs/deprecated-options.md.

Home

About

First Steps

Configuration

Operation

Interfaces

Plugins

Plugin Development

Chaos Testing

Blueprints

Development

Reference

Clone this wiki locally