LSPGEN
The BNG Blaster includes a tool called lspgen
which is able to generate
ISIS and OSPF topologies with the corresponding link state packets for export
as MRT and PCAP files. Initially, lspgen
was developed exclusively for ISIS,
hence its name. However, with the introduction of OSPF support in BNG Blaster,
lspgen
has been enhanced to accommodate OSPF topologies as well.
The default protocol is ISIS which can be changed using the argument -P ospf2
.
$ lspgen --help
____ __ ____ _ __ ,/
/ __ \ / /_ / __ ) _____ (_)_____ / /__ ,'/
/ /_/ // __// __ |/ ___// // ___// //_/ ,' /
/ _, _// /_ / /_/ // / / // /__ / ,< ,' /_____,
/_/ |_| \__//_____//_/ /_/ \___//_/|_| .'____ ,'
__ _____ ____ ______ / ,'
/ / / ___// __ \/ ____/__ ____ / ,'
/ / \__ \/ /_/ / / __/ _ \/ __ \ /,'
/ /______/ / ____/ /_/ / __/ / / / /
/_____/____/_/ \____/\___/_/ /_/
Usage: lspgen [OPTIONS]
-v --version
-a --area <args>
-P --protocol isis|ospf2|ospf3
-K --authentication-key <args>
-T --authentication-type none|simple|md5
-r --read-config-file <filename>
-w --write-config-file <filename>
-C --connector <args>
-S --control-socket <args>
-l --ipv4-link-prefix <ip-prefix>
-L --ipv6-link-prefix <ip-prefix>
-n --ipv4-node-prefix <ip-prefix>
-N --ipv6-node-prefix <ip-prefix>
-x --ipv4-external-prefix <ip-prefix>
-X --ipv6-external-prefix <ip-prefix>
-u --link-multiplier <args>
-M --lsp-lifetime <args>
-z --no-ipv4
-Z --no-ipv6
-y --no-sr
-e --external-count <args>
-g --graphviz-file <filename>
-h --help
-m --mrt-file <filename>
-c --node-count <args>
-p --pcap-file <filename>
-G --purge
-f --stream-file <filename>
-s --seed <args>
-q --sequence <args>
-Q --quit-loop
-V --level <args>
-t --log normal|debug|lsp|lsdb|packet|ctrl|error
You can generate random topologies or define a topology manually using configuration files.
Connector
The connector (-C --connector <args>
) represents the link between the generated
topology and the attached BNG Blaster instance.
For ISIS topologies, the connector must be set to the system-id
of the ISIS
instance to which this topology is attached. In the BNG Blaster configuration,
the system-id
of the root node from the generated toplogy must be referenced.
$ lspgen -a 49.0001/24 -K secret123 -T md5 -C 1921.6800.1001 -m isis.mrt
...
Sep 04 10:50:55.780109 Generating a graph of 10 nodes and 20 links
Sep 04 10:50:55.780127 Root node 1921.6800.0000.00 (node1)
...
{
"isis": [
{
"instance-id": 1,
"area": [
"49.0001/24",
],
"system-id": "1921.6800.1001",
"router-id": "192.168.1.1",
"hostname": "R1",
"level1-auth-key": "secret123",
"level1-auth-type": "md5",
"external": {
"mrt-file": "isis.mrt",
"connections": [
{
"system-id": "1921.6800.0000.00"
}
]
}
}
]
}
This is simlar for OSPFv2 but here the connector is constructed based on remote router-id
and local link IPv4 address (remote-router-id:local-ipv4-address
).
$ lspgen -P ospf2 -m ospf.mrt -n 10.10.0.1 --connector "10.0.0.11:10.0.0.2" -p lspgen.pcap
...
Sep 04 11:02:59.242810 Generating a graph of 10 nodes and 20 links
Sep 04 11:02:59.242827 Root node 10.10.0.1 (node1)
...
{
"ospf": [
{
"instance-id": 1,
"version": 2,
"router-id": "10.0.0.11",
"hostname": "R1"
"external": {
"mrt-file": "ospf.mrt",
"connections": [
{
"router-id": "10.10.0.1",
"local-ipv4-address": "10.0.0.1",
}
]
}
}
]
}
Random Topologies
The following example generates a random topology with 1000 nodes.
lspgen -m isis.mrt -c 1000 -K <secret> -T md5
The arguments -K
and -T
add a valid authentication TLV
to the generated LSPs in the MRT file.
Those topologies could be even exported as configuration file
with the argument -w
and later imported with the argument -r
.
This allows the generation of a large random topology that can be modified
manually.
Topology from Configuration File
In addition to randomly generated topologies, it is also possible to create them specifically using configuration. The following example shows the configuration for a topology with three nodes.
{
"instance": "default",
"protocol": "isis",
"level1": [
{
"node_id": "1337.0000.0001",
"hostname": "R1",
"area_list": [
"49.1337/24"
],
"protocol_list": [
"ipv4"
],
"ipv4_address_list": [
"10.13.37.1"
],
"ipv4_prefix_list": [
{
"ipv4_prefix": "10.13.37.1/32",
"metric": 0,
"segment_id": 30005,
"node_flag": true
},
{
"ipv4_prefix": "10.0.1.0/24",
"metric": 1000
},
{
"ipv4_prefix": "10.0.2.0/24",
"metric": 1000
}
],
"capability_list": [
{
"router_id": "10.13.37.1",
"mpls_ipv4_flag": true,
"mpls_ipv6_flag": false,
"srgb_base": 100000,
"srgb_range": 36000
}
],
"neighbor_list": [
{
"remote_node_id": "1337.0000.0000.00",
"metric": 10
},
{
"remote_node_id": "1337.0000.0002.00",
"metric": 10
},
{
"remote_node_id": "0204.0000.0003.00",
"metric": 10
}
]
},
{
"node_id": "1337.0000.0002",
"hostname": "R2",
"area_list": [
"49.1337/24"
],
"protocol_list": [
"ipv4"
],
"ipv4_address_list": [
"10.13.37.2"
],
"ipv4_prefix_list": [
{
"ipv4_prefix": "10.13.37.2/32",
"metric": 0,
"segment_id": 30003,
"node_flag": true
}
],
"capability_list": [
{
"router_id": "10.13.37.2",
"mpls_ipv4_flag": true,
"mpls_ipv6_flag": false,
"srgb_base": 100000,
"srgb_range": 36000
}
],
"neighbor_list": [
{
"remote_node_id": "1337.0000.0001.00",
"metric": 10
}
]
},
{
"node_id": "1337.0000.3",
"hostname": "R3",
"area_list": [
"49.1337/24"
],
"protocol_list": [
"ipv4"
],
"ipv4_address_list": [
"10.13.37.3"
],
"ipv4_prefix_list": [
{
"ipv4_prefix": "10.13.37.3/32",
"metric": 0,
"segment_id": 30003,
"node_flag": true
}
],
"capability_list": [
{
"router_id": "10.13.37.3",
"mpls_ipv4_flag": true,
"mpls_ipv6_flag": false,
"srgb_base": 100000,
"srgb_range": 36000
}
],
"neighbor_list": [
{
"remote_node_id": "1337.0000.0001.00",
"metric": 10
}
]
}
]
}
The randomly generated topologies can be also written to a file to have an example or starting point for the desired topologies.
lspgen -P isis -w isis.json
lspgen -P ospf2 -w ospf2.json
lspgen -P ospf3 -w ospf3.json