Named IP Prefixes

In most lab topologies, you probably don’t care about the exact IP addresses and subnets. Defining IPv4 and IPv6 prefixes in [addressing pools](address pools) is good enough.

However, to tighten control over IP address allocation, you can use the prefix attribute on links or VLANS or the ipv4/ipv6 attributes on node interfaces.

However, there are scenarios in which you have to use the same prefix in multiple places, for example:

  • Using a link prefix in the lab validation code or in custom configuration templates

  • Using a link prefix in a prefix list

  • Using the same prefix on multiple links, for example, to implement a stretched subnet using a technology not supported by netlab.

You can use named IP prefixes in all three scenarios. The named prefixes are defined in the top-level prefix dictionary. The dictionary keys are prefix names; the values are dictionaries defining individual prefixes. The prefix values can include ipv4, ipv6, pool and allocation attributes.

The pool attribute in a prefix can be used when you want a well-defined prefix but don’t want to specify IPv4 and IPv6 subnets. The prefix will be allocated from the specified pool on first use.

You can use the names of the named prefixes anywhere you would use an IPv4 or IPv6 prefix, for example, as a links.prefix value or as a vlans.vlan.prefix value. You can also use them in custom configuration templates.

Example

The following lab topology defines two prefixes. One has a static IPv4 and a static IPv6 subnet and uses the sequential IP address allocation method. The second prefix uses the lan pool:

prefix:
  s_pfx:
    ipv4: 192.168.42.0/24
    ipv6: 2001:db8:cafe:42::/64
    allocation: sequential
  d_pfx:
    pool: lan

You can use the above prefixes to address individual links, for example:

nodes: [ r1, r2 ]
links:
- r1:
  prefix: s_pfx
- r2:
  prefix: d_pfx
- r1-r2

netlab generates the following link data from the above lab topology (the printout includes only the addressing portion of the link data):

- bridge: X_1
  interfaces:
  - ifindex: 1
    ipv4: 192.168.42.1/24
    ipv6: 2001:db8:cafe:42::1/64
    node: r1
  prefix:
    _name: s_pfx
    allocation: sequential
    ipv4: 192.168.42.0/24
    ipv6: 2001:db8:cafe:42::/64
  type: stub
- bridge: X_2
  interfaces:
  - ifindex: 1
    ipv4: 172.16.0.2/24
    node: r2
  prefix:
    _name: d_pfx
    ipv4: 172.16.0.0/24
  type: stub
- interfaces:
  - ifindex: 2
    ipv4: 10.1.0.1/30
    node: r1
  - ifindex: 2
    ipv4: 10.1.0.2/30
    node: r2
  prefix:
    ipv4: 10.1.0.0/30
  type: p2p

Finally, you could use named prefixes in a custom configuration template, for example:

ip prefix-list stub-4 permit {{ prefix.s_pfx.ipv4 }}
ipv6 prefix-list stub-6 permit {{ prefix.s_pfx.ipv6 }}

Default Prefixes

The Generic Routing Configuration Module (when enabled in lab topology) adds default prefixes that can be used in routing filters. You can inspect the default prefixes with the netlab show defaults prefix command; the following printout displays the currently defined ones:

any:
  ipv4: 0.0.0.0/0
  ipv6: ::/0