From 076fdb70113c3f06e52cae0a02d3d150056a560b Mon Sep 17 00:00:00 2001 From: Christian Giese Date: Thu, 29 Jan 2026 10:56:49 +0100 Subject: [PATCH 01/39] Potential fix for code scanning alert no. 4558: Time-of-check time-of-use filesystem race condition Co-authored-by: Copilot Autofix powered by AI <62310815+github-advanced-security[bot]@users.noreply.github.com> --- code/bngblaster/src/bbl_interface.c | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/code/bngblaster/src/bbl_interface.c b/code/bngblaster/src/bbl_interface.c index d477fdc7..44e2cb2e 100644 --- a/code/bngblaster/src/bbl_interface.c +++ b/code/bngblaster/src/bbl_interface.c @@ -83,8 +83,13 @@ bbl_interface_lock(char *interface_name) return false; } fprintf(lock_file, "%d", lock_pid); + { + int fd = fileno(lock_file); + if(fd >= 0) { + fchmod(fd, 0666); + } + } fclose(lock_file); - chmod(lock_path, 0666); return true; } From 44b42acc64c4f3c31d5b29092408e244949608a0 Mon Sep 17 00:00:00 2001 From: Christian Giese Date: Tue, 24 Feb 2026 15:30:19 +0000 Subject: [PATCH 02/39] check RA autonomous prefix flag (#371) --- code/bngblaster/src/bbl_access.c | 21 +++++++++++++-------- code/bngblaster/src/bbl_network.c | 4 ++-- code/bngblaster/src/bbl_protocols.c | 3 ++- code/bngblaster/src/bbl_protocols.h | 8 +++++--- 4 files changed, 22 insertions(+), 14 deletions(-) diff --git a/code/bngblaster/src/bbl_access.c b/code/bngblaster/src/bbl_access.c index 638998ef..2826ccca 100644 --- a/code/bngblaster/src/bbl_access.c +++ b/code/bngblaster/src/bbl_access.c @@ -542,15 +542,20 @@ bbl_access_rx_icmpv6(bbl_access_interface_s *interface, /* The first RA received ... */ session->icmpv6_ra_received = true; if(icmpv6->prefix.len) { - memcpy(&session->ipv6_prefix, &icmpv6->prefix, sizeof(ipv6_prefix)); - *(uint64_t*)&session->ipv6_address[0] = *(uint64_t*)session->ipv6_prefix.address; - *(uint64_t*)&session->ipv6_address[8] = session->ip6cp_ipv6_identifier; - if(session->access_type == ACCESS_TYPE_PPPOE) { - ACTIVATE_ENDPOINT(session->endpoint.ipv6); + if(icmpv6->prefix_flags & ICMPV6_PREFIX_FLAGS_AUTONOMOUS) { + memcpy(&session->ipv6_prefix, &icmpv6->prefix, sizeof(ipv6_prefix)); + *(uint64_t*)&session->ipv6_address[0] = *(uint64_t*)session->ipv6_prefix.address; + *(uint64_t*)&session->ipv6_address[8] = session->ip6cp_ipv6_identifier; + if(session->access_type == ACCESS_TYPE_PPPOE) { + ACTIVATE_ENDPOINT(session->endpoint.ipv6); + } + session->version++; + LOG(IP, "IPv6 (ID: %u) ICMPv6 RA prefix %s/%d\n", + session->session_id, format_ipv6_address(&session->ipv6_prefix.address), session->ipv6_prefix.len); + } else { + LOG(IP, "IPv6 (ID: %u) ICMPv6 RA prefix %s/%d ignored because of missing autonomous flag\n", + session->session_id, format_ipv6_address(&session->ipv6_prefix.address), session->ipv6_prefix.len); } - session->version++; - LOG(IP, "IPv6 (ID: %u) ICMPv6 RA prefix %s/%d\n", - session->session_id, format_ipv6_address(&session->ipv6_prefix.address), session->ipv6_prefix.len); if(icmpv6->dns1) { memcpy(&session->ipv6_dns1, icmpv6->dns1, IPV6_ADDR_LEN); if(icmpv6->dns2) { diff --git a/code/bngblaster/src/bbl_network.c b/code/bngblaster/src/bbl_network.c index 6c83b1e4..5e3bbbc7 100644 --- a/code/bngblaster/src/bbl_network.c +++ b/code/bngblaster/src/bbl_network.c @@ -422,10 +422,10 @@ bbl_network_rx_icmpv6(bbl_network_interface_s *interface, if(memcmp(icmpv6->prefix.address, interface->gateway6, IPV6_ADDR_LEN) == 0) { interface->icmpv6_nd_resolved = true; if(memcmp(interface->gateway6_mac, "\x00\x00\x00\x00\x00\x00", ETH_ADDR_LEN) == 0) { - if(icmpv6->dst_mac == NULL) { + if(icmpv6->mac == NULL) { gw_mac = eth->src; } else { - gw_mac = icmpv6->dst_mac; + gw_mac = icmpv6->mac; } memcpy(interface->gateway6_mac, gw_mac, ETH_ADDR_LEN); } diff --git a/code/bngblaster/src/bbl_protocols.c b/code/bngblaster/src/bbl_protocols.c index 42b62a0b..2ed46e96 100644 --- a/code/bngblaster/src/bbl_protocols.c +++ b/code/bngblaster/src/bbl_protocols.c @@ -2608,6 +2608,7 @@ decode_icmpv6(uint8_t *buf, uint16_t len, return DECODE_ERROR; } icmpv6->prefix.len = *buf; + icmpv6->prefix_flags = *(buf+1); memcpy(&icmpv6->prefix.address, buf+14, IPV6_ADDR_LEN); } else if(option == ICMPV6_OPTION_DNS) { if(option_len >= 24) { @@ -2647,7 +2648,7 @@ decode_icmpv6(uint8_t *buf, uint16_t len, // Maleformed ICMPv6 packet return DECODE_ERROR; } - icmpv6->dst_mac = buf; + icmpv6->mac = buf; break; } BUMP_BUFFER(buf, len, option_len-2); diff --git a/code/bngblaster/src/bbl_protocols.h b/code/bngblaster/src/bbl_protocols.h index f4a11b23..31c3e975 100644 --- a/code/bngblaster/src/bbl_protocols.h +++ b/code/bngblaster/src/bbl_protocols.h @@ -241,6 +241,8 @@ #define ICMPV6_FLAGS_MANAGED 0x80 #define ICMPV6_FLAGS_OTHER_CONFIG 0x40 +#define ICMPV6_PREFIX_FLAGS_LINK 0x80 +#define ICMPV6_PREFIX_FLAGS_AUTONOMOUS 0x40 #define ICMPV6_OPTION_SOURCE_LINK_LAYER 1 #define ICMPV6_OPTION_DEST_LINK_LAYER 2 #define ICMPV6_OPTION_PREFIX 3 @@ -882,14 +884,14 @@ typedef struct bbl_icmpv6_ { uint8_t type; uint8_t code; uint8_t flags; + uint8_t prefix_flags; uint16_t lifetime; + uint16_t data_len; ipv6_prefix prefix; - uint8_t *mac; uint8_t *data; - uint16_t data_len; + uint8_t *mac; ipv6addr_t *dns1; ipv6addr_t *dns2; - uint8_t *dst_mac; } bbl_icmpv6_s; typedef struct bbl_dhcpv6_ { From 37b37632e8afe4e9a04d3d9d9af1165e8ee1f637 Mon Sep 17 00:00:00 2001 From: Christian Giese Date: Wed, 25 Feb 2026 09:28:56 +0000 Subject: [PATCH 03/39] fix DHCPv6 short lease time corner case --- code/bngblaster/src/bbl_dhcpv6.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/code/bngblaster/src/bbl_dhcpv6.c b/code/bngblaster/src/bbl_dhcpv6.c index 14500280..8baf7c5d 100644 --- a/code/bngblaster/src/bbl_dhcpv6.c +++ b/code/bngblaster/src/bbl_dhcpv6.c @@ -159,8 +159,10 @@ void bbl_dhcpv6_s2(timer_s *timer) { bbl_session_s *session = timer->data; - LOG(DHCP, "DHCPv6 (ID: %u) Lease expired\n", session->session_id); - bbl_dhcpv6_restart(session); + if(session->dhcpv6_state > BBL_DHCP_INIT && session->dhcpv6_state < BBL_DHCP_RELEASE) { + LOG(DHCP, "DHCPv6 (ID: %u) Lease expired\n", session->session_id); + bbl_dhcpv6_restart(session); + } } static bool From c933783af98fc758b4a6bd477137c0a9facbd144 Mon Sep 17 00:00:00 2001 From: Christian Giese Date: Wed, 25 Feb 2026 19:55:23 +0000 Subject: [PATCH 04/39] add BNG Blaster config schema --- schemas/bngblaster-config.json | 3250 ++++++++++++++++++++++++++++++++ 1 file changed, 3250 insertions(+) create mode 100644 schemas/bngblaster-config.json diff --git a/schemas/bngblaster-config.json b/schemas/bngblaster-config.json new file mode 100644 index 00000000..d5d5d417 --- /dev/null +++ b/schemas/bngblaster-config.json @@ -0,0 +1,3250 @@ +{ + "$schema": "https://json-schema.org/draft/2019-09/schema#", + "title": "BNG Blaster Configuration", + "description": "JSON schema for BNG Blaster configuration files", + "type": "object", + "properties": { + "interfaces": { + "type": "object", + "description": "Interface configuration (network, access, a10nsp, links, lag)", + "properties": { + "io-mode": { + "type": "string", + "description": "IO mode", + "default": "packet_mmap_raw" + }, + "io-slots": { + "type": "integer", + "description": "IO slots (ring size)", + "default": 4096, + "minimum": 32, + "maximum": 65535 + }, + "io-burst": { + "type": "integer", + "description": "IO burst (packets)", + "default": 256, + "minimum": 1, + "maximum": 65535 + }, + "qdisc-bypass": { + "type": "boolean", + "description": "Bypass the kernel's qdisc layer", + "default": true + }, + "tx-interval": { + "type": "number", + "description": "TX polling interval in milliseconds", + "default": 0.1, + "minimum": 0.0001, + "maximum": 1000 + }, + "rx-interval": { + "type": "number", + "description": "RX polling interval in milliseconds", + "default": 0.1, + "minimum": 0.0001, + "maximum": 1000 + }, + "tx-threads": { + "type": "integer", + "description": "Number of TX threads per interface link", + "default": 0, + "minimum": 0, + "maximum": 255 + }, + "rx-threads": { + "type": "integer", + "description": "Number of RX threads per interface link", + "default": 0, + "minimum": 0, + "maximum": 255 + }, + "capture-include-streams": { + "type": "boolean", + "description": "Include traffic streams in the capture", + "default": false + }, + "mac-modifier": { + "type": "integer", + "description": "Third byte of access session MAC address (0-255)", + "default": 0, + "minimum": 0, + "maximum": 255 + }, + "links": { + "oneOf": [ + { + "$ref": "#/definitions/link" + }, + { + "type": "array", + "items": { + "$ref": "#/definitions/link" + } + } + ] + }, + "lag": { + "oneOf": [ + { + "$ref": "#/definitions/lagInterface" + }, + { + "type": "array", + "items": { + "$ref": "#/definitions/lagInterface" + } + } + ] + }, + "network": { + "oneOf": [ + { + "$ref": "#/definitions/networkInterface" + }, + { + "type": "array", + "items": { + "$ref": "#/definitions/networkInterface" + } + } + ] + }, + "access": { + "oneOf": [ + { + "$ref": "#/definitions/accessInterface" + }, + { + "type": "array", + "items": { + "$ref": "#/definitions/accessInterface" + } + } + ] + }, + "a10nsp": { + "oneOf": [ + { + "$ref": "#/definitions/a10nspInterface" + }, + { + "type": "array", + "items": { + "$ref": "#/definitions/a10nspInterface" + } + } + ] + } + } + }, + "sessions": { + "type": "object", + "description": "Session configuration", + "properties": { + "count": { + "type": "integer", + "description": "Sessions (PPPoE + IPoE)", + "default": 1, + "minimum": 0, + "maximum": 10000000 + }, + "max-outstanding": { + "type": "integer", + "description": "Max outstanding sessions", + "default": 800, + "minimum": 1, + "maximum": 10000000 + }, + "start-rate": { + "type": "integer", + "description": "Setup request rate in sessions per second", + "default": 400, + "minimum": 1, + "maximum": 65535 + }, + "stop-rate": { + "type": "integer", + "description": "Teardown request rate in sessions per second", + "default": 400, + "minimum": 1, + "maximum": 65535 + }, + "start-delay": { + "type": "integer", + "description": "Wait N seconds after all interfaces are resolved before starting sessions", + "default": 0, + "minimum": 0, + "maximum": 65535 + }, + "reconnect": { + "type": "boolean", + "description": "Automatically reconnect sessions", + "default": false + }, + "autostart": { + "type": "boolean", + "description": "Start sessions automatically", + "default": true + }, + "monkey-autostart": { + "type": "boolean", + "description": "Start monkey testing automatically if enabled", + "default": true + }, + "iterate-vlan-outer": { + "type": "boolean", + "description": "Iterate on outer VLAN first", + "default": false + } + } + }, + "ipoe": { + "type": "object", + "description": "IPoE configuration", + "properties": { + "ipv6": { + "type": "boolean", + "description": "Enable/disable IPv6", + "default": true + }, + "ipv4": { + "type": "boolean", + "description": "Enable/disable IPv4", + "default": true + }, + "arp-timeout": { + "type": "integer", + "description": "Initial ARP timeout/retry interval in seconds", + "default": 1, + "minimum": 1, + "maximum": 65535 + }, + "arp-interval": { + "type": "integer", + "description": "Periodic ARP interval in seconds (0 means disabled)", + "default": 300, + "minimum": 0, + "maximum": 65535 + }, + "vlan-priority": { + "type": "integer", + "description": "VLAN PBIT for all IPoE control traffic.", + "default": 0, + "minimum": 0, + "maximum": 7 + } + } + }, + "pppoe": { + "type": "object", + "description": "PPPoE configuration", + "properties": { + "session-time": { + "type": "integer", + "description": "Max PPPoE session time in seconds (0 = infinity)", + "default": 0, + "minimum": 0, + "maximum": 31536000 + }, + "reconnect": { + "type": "boolean", + "description": "Automatically reconnect sessions if terminated", + "default": false + }, + "discovery-timeout": { + "type": "integer", + "description": "PPPoE discovery (PADI and PADR) timeout in seconds", + "default": 5, + "minimum": 1, + "maximum": 65535 + }, + "discovery-retry": { + "type": "integer", + "description": "PPPoE discovery (PADI and PADR) max retry", + "default": 10, + "minimum": 0, + "maximum": 255 + }, + "service-name": { + "type": "string", + "description": "PPPoE discovery service name" + }, + "host-uniq": { + "type": "boolean", + "description": "PPPoE discovery host-uniq", + "default": false + }, + "max-payload": { + "type": "integer", + "description": "PPP-Max-Payload (RFC4638)", + "default": 0, + "minimum": 1, + "maximum": 65535 + }, + "vlan-priority": { + "type": "integer", + "description": "VLAN PBIT for all PPPoE/PPP control traffic", + "default": 0, + "minimum": 0, + "maximum": 7 + } + } + }, + "ppp": { + "type": "object", + "description": "PPP configuration", + "properties": { + "mru": { + "type": "integer", + "description": "Maximum receive unit", + "default": 1492, + "minimum": 0, + "maximum": 65535 + }, + "authentication": { + "type": "object", + "description": "PPP authentication configuration", + "properties": { + "username": { + "type": "string", + "description": "Username (supports variables: {session-global}, {session}, {outer-vlan}, {inner-vlan}, {i1}, {i2})", + "default": "user{session-global}@rtbrick.com" + }, + "password": { + "type": "string", + "description": "Password", + "default": "test" + }, + "timeout": { + "type": "integer", + "description": "Authentication request timeout in seconds", + "default": 5, + "minimum": 0, + "maximum": 65535 + }, + "retry": { + "type": "integer", + "description": "Authentication request max retry", + "default": 30, + "minimum": 0, + "maximum": 65535 + }, + "protocol": { + "type": "string", + "description": "Authentication protocol (PAP, CHAP)", + "default": "allow both PAP and CHAP", + "enum": [ + "PAP", + "CHAP" + ] + } + } + }, + "lcp": { + "type": "object", + "description": "PPP LCP configuration", + "properties": { + "conf-request-timeout": { + "type": "integer", + "description": "LCP configuration request timeout in seconds", + "default": 5, + "minimum": 0, + "maximum": 65535 + }, + "conf-request-retry": { + "type": "integer", + "description": "LCP configuration request max retry", + "default": 10, + "minimum": 0, + "maximum": 255 + }, + "keepalive-interval": { + "type": "integer", + "description": "LCP echo request interval in seconds (0 = disabled)", + "default": 30, + "minimum": 0, + "maximum": 65535 + }, + "keepalive-retry": { + "type": "integer", + "description": "PPP LCP echo request max retry", + "default": 3, + "minimum": 0, + "maximum": 255 + }, + "start-delay": { + "type": "integer", + "description": "PPP LCP initial request delay in milliseconds", + "default": 0, + "minimum": 0, + "maximum": 999 + }, + "ignore-vendor-specific": { + "type": "boolean", + "description": "Ignore LCP vendor-specific requests", + "default": false + }, + "connection-status-message": { + "type": "boolean", + "description": "Accept LCP connection status messages", + "default": false + } + } + }, + "ipcp": { + "type": "object", + "description": "PPP IPCP configuration", + "properties": { + "enable": { + "type": "boolean", + "description": "Enable IPCP protocol", + "default": true + }, + "request-ip": { + "type": "boolean", + "description": "Include IP-Address with 0.0.0.0 in initial IPCP request", + "default": true + }, + "request-dns1": { + "type": "boolean", + "description": "Request primary DNS server address (option 129)", + "default": true + }, + "request-dns2": { + "type": "boolean", + "description": "Request secondary DNS server address (option 131)", + "default": true + }, + "conf-reject-ignore": { + "type": "boolean", + "description": "Ignore configuration reject messages", + "default": false + }, + "conf-request-timeout": { + "type": "integer", + "description": "IPCP configuration request timeout in seconds", + "default": 5, + "minimum": 0, + "maximum": 65535 + }, + "conf-request-retry": { + "type": "integer", + "description": "IPCP configuration request max retry", + "default": 10, + "minimum": 0, + "maximum": 255 + } + } + }, + "ip6cp": { + "type": "object", + "description": "PPP IP6CP configuration", + "properties": { + "enable": { + "type": "boolean", + "description": "Enable IP6CP protocol", + "default": true + }, + "conf-request-timeout": { + "type": "integer", + "description": "IP6CP configuration request timeout in seconds", + "default": 5, + "minimum": 0, + "maximum": 65535 + }, + "conf-request-retry": { + "type": "integer", + "description": "IP6CP configuration request max retry", + "default": 10, + "minimum": 0, + "maximum": 255 + } + } + } + } + }, + "dhcp": { + "type": "object", + "description": "DHCP configuration", + "properties": { + "enable": { + "type": "boolean", + "description": "Enable DHCP", + "default": true + }, + "broadcast": { + "type": "boolean", + "description": "DHCP broadcast flag", + "default": false + }, + "timeout": { + "type": "integer", + "description": "DHCP timeout in seconds", + "default": 5, + "minimum": 1, + "maximum": 65535 + }, + "retry": { + "type": "integer", + "description": "DHCP retry", + "default": 10, + "minimum": 0, + "maximum": 255 + }, + "release-interval": { + "type": "integer", + "description": "DHCP release interval", + "default": 1, + "minimum": 1, + "maximum": 255 + }, + "release-retry": { + "type": "integer", + "description": "DHCP release retry", + "default": 3, + "minimum": 0, + "maximum": 255 + }, + "keep-address": { + "type": "boolean", + "description": "Emulates init-reboot on stop if enabled together with release-retry set to zero (disabled)", + "default": false + }, + "tos": { + "type": "integer", + "description": "IPv4 TOS for all DHCP control traffic", + "default": 0, + "minimum": 0, + "maximum": 255 + }, + "vlan-priority": { + "type": "integer", + "description": "VLAN PBIT for all DHCP control traffic", + "default": 0, + "minimum": 0, + "maximum": 7 + }, + "access-line": { + "type": "boolean", + "description": "Add access-line attributes like Agent-Remote/Circuit-Id", + "default": true + }, + "vendor-class-identifier": { + "type": "string", + "description": "Add DHCP vendor class id/option 60" + } + } + }, + "dhcpv6": { + "type": "object", + "description": "DHCPv6 configuration", + "properties": { + "enable": { + "type": "boolean", + "description": "Enable DHCPv6", + "default": true + }, + "ia-na": { + "type": "boolean", + "description": "Enable DHCPv6 IA_NA", + "default": true + }, + "ia-pd": { + "type": "boolean", + "description": "Enable DHCPv6 IA_PD", + "default": true + }, + "ia-separate": { + "type": "boolean", + "description": "Seperate requests for IA_NA and IA_PD", + "default": true + }, + "rapid-commit": { + "type": "boolean", + "description": "DHCPv6 rapid commit (2-way handshake)", + "default": true + }, + "timeout": { + "type": "integer", + "description": "DHCPv6 timeout in seconds", + "default": 5, + "minimum": 1, + "maximum": 65535 + }, + "retry": { + "type": "integer", + "description": "DHCPv6 retry", + "default": 10, + "minimum": 1, + "maximum": 255 + }, + "vlan-priority": { + "type": "integer", + "description": "VLAN PBIT for all DHCPv6 control traffic", + "default": 0, + "minimum": 0, + "maximum": 7 + }, + "access-line": { + "type": "boolean", + "description": "Add access-line attributes", + "default": true + }, + "ldra": { + "type": "boolean", + "description": "Enable LDRA (Lightweight DHCPv6 Relay Agent)", + "default": false + } + } + }, + "igmp": { + "type": "object", + "description": "IGMP configuration", + "properties": { + "autostart": { + "type": "boolean", + "description": "Automatically join after the session is established", + "default": true + }, + "start-delay": { + "type": "integer", + "description": "Delay between session established and initial IGMP join in seconds", + "default": 1, + "minimum": 1, + "maximum": 65535 + }, + "version": { + "type": "integer", + "description": "IGMP protocol version", + "default": 3, + "enum": [ + 1, + 2, + 3 + ] + }, + "combined-leave-join": { + "type": "boolean", + "description": "Combine leave and join records in single IGMPv3 report", + "default": false + }, + "group": { + "type": "string", + "description": "Multicast group base address (e.g. 239.0.0.1)", + "format": "ipv4", + "default": "0.0.0.0" + }, + "group-iter": { + "type": "string", + "description": "Multicast group iterator", + "format": "ipv4", + "default": "0.0.0.1" + }, + "group-count": { + "type": "integer", + "description": "Multicast group count", + "default": 1, + "minimum": 0, + "maximum": 65535 + }, + "source": { + "type": "string", + "description": "Multicast source address (0.0.0.0 = ASM)", + "format": "ipv4", + "default": "0.0.0.0" + }, + "zapping-interval": { + "type": "integer", + "description": "IGMP channel zapping interval in seconds (0 = disabled)", + "default": 0, + "minimum": 1, + "maximum": 65535 + }, + "zapping-count": { + "type": "integer", + "description": "Number of channel changes before starting view duration (0 = disabled)", + "default": 0, + "minimum": 0, + "maximum": 65535 + }, + "zapping-wait": { + "type": "boolean", + "description": "Wait for multicast traffic before zapping to next channel", + "default": false + }, + "zapping-view-duration": { + "type": "integer", + "description": "View duration in seconds (0 = disabled)", + "default": 0, + "minimum": 0, + "maximum": 65535 + }, + "max-join-delay": { + "type": "integer", + "description": "Maximum join delay in milliseconds (0 = disabled)", + "default": 0, + "minimum": 0, + "maximum": 65535 + }, + "robustness-interval": { + "type": "integer", + "description": "IGMP robustness interval in milliseconds", + "default": 1000, + "minimum": 1, + "maximum": 65535 + }, + "send-multicast-traffic": { + "type": "boolean", + "description": "Generate multicast traffic on network interface", + "default": false + }, + "multicast-traffic-autostart": { + "type": "boolean", + "description": "Multicast traffic autostart", + "default": true + }, + "multicast-traffic-length": { + "type": "integer", + "description": "Multicast traffic IP length", + "default": 0, + "minimum": 128, + "maximum": 1500 + }, + "multicast-traffic-tos": { + "type": "integer", + "description": "Multicast traffic TOS priority", + "default": 0, + "minimum": 0, + "maximum": 255 + }, + "multicast-traffic-pps": { + "type": "integer", + "description": "Multicast traffic PPS per group", + "default": 1000, + "minimum": 0, + "maximum": 65535 + }, + "network-interface": { + "type": "string", + "description": "Multicast traffic source interface" + } + } + }, + "access-line": { + "type": "object", + "description": "Access line configuration (Broadband Forum attributes)", + "properties": { + "agent-circuit-id": { + "type": "string", + "description": "Agent-Circuit-Id (supports variables: {session-global}, {session}, {outer-vlan}, {inner-vlan}, {i1}, {i2})" + }, + "agent-remote-id": { + "type": "string", + "description": "Agent-Remote-Id (supports variables: {session-global}, {session}, {outer-vlan}, {inner-vlan}, {i1}, {i2})" + }, + "access-aggregation-circuit-id": { + "type": "string", + "description": "Access-Aggregation-Circuit-ID-ASCII (supports variables)" + }, + "rate-up": { + "type": "integer", + "description": "Actual Data Rate Upstream (0 = not sent)", + "default": 0, + "minimum": 0, + "maximum": 4294967295 + }, + "rate-down": { + "type": "integer", + "description": "Actual Data Rate Downstream (0 = not sent)", + "default": 0, + "minimum": 0, + "maximum": 4294967295 + }, + "dsl-type": { + "type": "integer", + "description": "DSL-Type (0 = not sent)", + "default": 0, + "minimum": 0, + "maximum": 4294967295 + } + } + }, + "access-line-profiles": { + "type": "array", + "description": "Access line profile configurations", + "items": { + "type": "object", + "required": [ + "access-line-profile-id" + ], + "properties": { + "access-line-profile-id": { + "type": "integer", + "description": "Access line profile identifier", + "minimum": 1, + "maximum": 65535 + }, + "act-up": { + "type": "integer", + "description": "Actual Data Rate Upstream (overwritten by rate-up)", + "default": 0, + "minimum": 0, + "maximum": 4294967295 + }, + "act-down": { + "type": "integer", + "description": "Actual Data Rate Downstream (overwritten by rate-down)", + "default": 0, + "minimum": 0, + "maximum": 4294967295 + }, + "min-up": { + "type": "integer", + "description": "Minimum Data Rate Upstream", + "default": 0, + "minimum": 0, + "maximum": 4294967295 + }, + "min-down": { + "type": "integer", + "description": "Minimum Data Rate Downstream", + "default": 0, + "minimum": 0, + "maximum": 4294967295 + }, + "att-up": { + "type": "integer", + "description": "Attainable DataRate Upstream", + "default": 0, + "minimum": 0, + "maximum": 4294967295 + }, + "att-down": { + "type": "integer", + "description": "Attainable DataRate Downstream", + "default": 0, + "minimum": 0, + "maximum": 4294967295 + }, + "max-up": { + "type": "integer", + "description": "Maximum Data Rate Upstream", + "default": 0, + "minimum": 0, + "maximum": 4294967295 + }, + "max-down": { + "type": "integer", + "description": "Maximum Data Rate Downstream", + "default": 0, + "minimum": 0, + "maximum": 4294967295 + }, + "min-up-low": { + "type": "integer", + "description": "Min Data Rate Upstream in low power state", + "default": 0, + "minimum": 0, + "maximum": 4294967295 + }, + "min-down-low": { + "type": "integer", + "description": "Min Data Rate Downstream in low power state", + "default": 0, + "minimum": 0, + "maximum": 4294967295 + }, + "max-interl-delay-up": { + "type": "integer", + "description": "Max Interleaving Delay Upstream", + "default": 0, + "minimum": 0, + "maximum": 4294967295 + }, + "act-interl-delay-up": { + "type": "integer", + "description": "Actual Interleaving Delay Upstream", + "default": 0, + "minimum": 0, + "maximum": 4294967295 + }, + "max-interl-delay-down": { + "type": "integer", + "description": "Max Interleaving Delay Downstream", + "default": 0, + "minimum": 0, + "maximum": 4294967295 + }, + "act-interl-delay-down": { + "type": "integer", + "description": "Actual Interleaving Delay Downstream", + "default": 0, + "minimum": 0, + "maximum": 4294967295 + }, + "data-link-encaps": { + "type": "integer", + "description": "Data Link Encapsulation", + "default": 0, + "minimum": 0, + "maximum": 4294967295 + }, + "dsl-type": { + "type": "integer", + "description": "DSL Type", + "default": 0, + "minimum": 0, + "maximum": 4294967295 + }, + "pon-type": { + "type": "integer", + "description": "PON Access Type", + "default": 0, + "minimum": 0, + "maximum": 4294967295 + }, + "etr-up": { + "type": "integer", + "description": "Expected Throughput (ETR) Upstream", + "default": 0, + "minimum": 0, + "maximum": 4294967295 + }, + "etr-down": { + "type": "integer", + "description": "Expected Throughput (ETR) Downstream", + "default": 0, + "minimum": 0, + "maximum": 4294967295 + }, + "attetr-up": { + "type": "integer", + "description": "Attainable Expected Throughput (ATTETR) Upstream", + "default": 0, + "minimum": 0, + "maximum": 4294967295 + }, + "attetr-down": { + "type": "integer", + "description": "Attainable Expected Throughput (ATTETR) Downstream", + "default": 0, + "minimum": 0, + "maximum": 4294967295 + }, + "gdr-up": { + "type": "integer", + "description": "Gamma Data Rate (GDR) Upstream", + "default": 0, + "minimum": 0, + "maximum": 4294967295 + }, + "gdr-down": { + "type": "integer", + "description": "Gamma Data Rate (GDR) Downstream", + "default": 0, + "minimum": 0, + "maximum": 4294967295 + }, + "attgdr-up": { + "type": "integer", + "description": "Attainable Gamma Data Rate (ATTGDR) Upstream", + "default": 0, + "minimum": 0, + "maximum": 4294967295 + }, + "attgdr-down": { + "type": "integer", + "description": "Attainable Gamma Data Rate (ATTGDR) Downstream", + "default": 0, + "minimum": 0, + "maximum": 4294967295 + }, + "ont-onu-avg-down": { + "type": "integer", + "description": "ONT/ONU Average Data Rate Downstream", + "default": 0, + "minimum": 0, + "maximum": 4294967295 + }, + "ont-onu-peak-down": { + "type": "integer", + "description": "ONT/ONU Peak Data Rate Downstream", + "default": 0, + "minimum": 0, + "maximum": 4294967295 + }, + "ont-onu-max-up": { + "type": "integer", + "description": "ONT/ONU Maximum Data Rate Upstream", + "default": 0, + "minimum": 0, + "maximum": 4294967295 + }, + "ont-onu-assured-up": { + "type": "integer", + "description": "ONT/ONU Assured Data Rate Upstream", + "default": 0, + "minimum": 0, + "maximum": 4294967295 + }, + "pon-tree-max-up": { + "type": "integer", + "description": "PON Tree Maximum Data Rate Upstream", + "default": 0, + "minimum": 0, + "maximum": 4294967295 + }, + "pon-tree-max-down": { + "type": "integer", + "description": "PON Tree Maximum Data Rate Downstream", + "default": 0, + "minimum": 0, + "maximum": 4294967295 + }, + "pon-access-line-version": { + "type": "string", + "description": "RFC draft version", + "enum": [ + "DRAFT-LIHAWI-00", + "DRAFT-LIHAWI-04" + ], + "default": "DRAFT-LIHAWI-04" + } + } + } + }, + "session-traffic": { + "type": "object", + "description": "Session traffic configuration", + "properties": { + "autostart": { + "type": "boolean", + "description": "Automatically start session traffic", + "default": true + }, + "ipv4-pps": { + "type": "number", + "description": "Bidirectional IPv4 traffic PPS (0 = disabled)", + "default": 0, + "minimum": 0, + "maximum": 65535 + }, + "ipv4-label": { + "type": "integer", + "description": "Downstream IPv4 traffic MPLS label (0 = unlabeled)", + "default": 0, + "minimum": 0, + "maximum": 1048575 + }, + "ipv4-address": { + "type": "string", + "description": "Overwrite network interface IPv4 address", + "format": "ipv4" + }, + "ipv6-pps": { + "type": "number", + "description": "Bidirectional IPv6 traffic PPS (0 = disabled)", + "default": 0, + "minimum": 0, + "maximum": 65535 + }, + "ipv6-label": { + "type": "integer", + "description": "Downstream IPv6 traffic MPLS label (0 = unlabeled)", + "default": 0, + "minimum": 0, + "maximum": 1048575 + }, + "ipv6-address": { + "type": "string", + "description": "Overwrite network interface IPv6 address", + "format": "ipv6" + }, + "ipv6pd-pps": { + "type": "number", + "description": "Bidirectional IPv6PD traffic PPS (0 = disabled)", + "default": 0, + "minimum": 0, + "maximum": 65535 + } + } + }, + "traffic": { + "type": "object", + "description": "Global traffic configuration", + "properties": { + "autostart": { + "type": "boolean", + "description": "Automatically start traffic globally", + "default": true + }, + "stop-verified": { + "type": "boolean", + "description": "Automatically stop traffic streams if verified", + "default": false + }, + "stream-autostart": { + "type": "boolean", + "description": "Enable stream autostart", + "default": true + }, + "stream-rate-calculation": { + "type": "boolean", + "description": "Enable stream rate calculation", + "default": true + }, + "stream-delay-calculation": { + "type": "boolean", + "description": "Enable stream delay calculation", + "default": true + }, + "stream-burst-ms": { + "type": "integer", + "description": "Maximum burst size per stream in milliseconds", + "default": 100, + "minimum": 1, + "maximum": 1000 + }, + "multicast-autostart": { + "type": "boolean", + "description": "Automatically start multicast traffic", + "default": true + }, + "udp-checksum": { + "type": "boolean", + "description": "Enable UDP checksums", + "default": false + }, + "reassemble-fragments": { + "type": "boolean", + "description": "Enable reassembly of fragmented IPv4 stream packets", + "default": false + } + } + }, + "streams": { + "type": "array", + "description": "Traffic stream definitions", + "items": { + "$ref": "#/definitions/stream" + } + }, + "l2tp-server": { + "type": "array", + "description": "L2TPv2 Server (LNS) configuration", + "items": { + "type": "object", + "required": [ + "name", + "address" + ], + "properties": { + "name": { + "type": "string", + "description": "L2TP LNS server hostname (AVP 7)" + }, + "address": { + "type": "string", + "description": "L2TP server address", + "format": "ipv4" + }, + "secret": { + "type": "string", + "description": "Tunnel secret" + }, + "receive-window": { + "type": "integer", + "description": "Control messages receive window size", + "default": 16, + "minimum": 1, + "maximum": 65535 + }, + "max-retry": { + "type": "integer", + "description": "Control messages max retry", + "default": 5, + "minimum": 1, + "maximum": 65535 + }, + "congestion-mode": { + "type": "string", + "description": "Control messages congestion mode", + "enum": [ + "default", + "slow", + "aggressive" + ], + "default": "default" + }, + "hello-interval": { + "type": "integer", + "description": "Hello interval", + "default": 30, + "minimum": 0, + "maximum": 65535 + }, + "data-control-priority": { + "type": "boolean", + "description": "Set priority bit for non-IP data packets", + "default": false + }, + "data-length": { + "type": "boolean", + "description": "Set length bit for all data packets", + "default": false + }, + "data-offset": { + "type": "boolean", + "description": "Set offset bit with zero for all data packets", + "default": false + }, + "control-tos": { + "type": "integer", + "description": "L2TP control traffic TOS priority", + "default": 0, + "minimum": 0, + "maximum": 255 + }, + "data-control-tos": { + "type": "integer", + "description": "L2TP tunnel TOS for non-IP data packets", + "default": 0, + "minimum": 0, + "maximum": 255 + }, + "lcp-padding": { + "type": "integer", + "description": "Add fixed padding to LCP packets from LNS", + "default": 0, + "minimum": 0, + "maximum": 65535 + }, + "client-auth-id": { + "type": "string", + "description": "Optional check for client-auth-id" + } + } + } + }, + "isis": { + "oneOf": [ + { + "$ref": "#/definitions/isisConfig" + }, + { + "type": "array", + "items": { + "$ref": "#/definitions/isisConfig" + } + } + ] + }, + "ospf": { + "oneOf": [ + { + "$ref": "#/definitions/ospfConfig" + }, + { + "type": "array", + "items": { + "$ref": "#/definitions/ospfConfig" + } + } + ] + }, + "ldp": { + "oneOf": [ + { + "$ref": "#/definitions/ldpConfig" + }, + { + "type": "array", + "items": { + "$ref": "#/definitions/ldpConfig" + } + } + ] + }, + "ldp-raw-update-files": { + "type": "array", + "description": "Pre-Load LDP RAW update files", + "items": { + "type": "string" + }, + "uniqueItems": true, + "minItems": 1 + }, + "bgp": { + "oneOf": [ + { + "$ref": "#/definitions/bgpConfig" + }, + { + "type": "array", + "items": { + "$ref": "#/definitions/bgpConfig" + } + } + ] + }, + "bgp-raw-update-files": { + "type": "array", + "description": "Pre-Load BGP RAW update files", + "items": { + "type": "string" + }, + "uniqueItems": true, + "minItems": 1 + }, + "http-client": { + "oneOf": [ + { + "$ref": "#/definitions/httpClient" + }, + { + "type": "array", + "items": { + "$ref": "#/definitions/httpClient" + } + } + ] + }, + "http-server": { + "oneOf": [ + { + "$ref": "#/definitions/httpServer" + }, + { + "type": "array", + "items": { + "$ref": "#/definitions/httpServer" + } + } + ] + }, + "icmp-client": { + "oneOf": [ + { + "$ref": "#/definitions/icmpClient" + }, + { + "type": "array", + "items": { + "$ref": "#/definitions/icmpClient" + } + } + ] + }, + "arp-client": { + "oneOf": [ + { + "$ref": "#/definitions/arpClient" + }, + { + "type": "array", + "items": { + "$ref": "#/definitions/arpClient" + } + } + ] + } + }, + "definitions": { + "networkInterface": { + "type": "object", + "required": [ + "interface" + ], + "properties": { + "interface": { + "type": "string", + "description": "Parent interface/link name (e.g. eth0)" + }, + "address": { + "type": "string", + "description": "Local IPv4 address (e.g. 10.0.0.1/24)" + }, + "gateway": { + "type": "string", + "description": "Default gateway IPv4 address", + "format": "ipv4" + }, + "address-ipv6": { + "type": "string", + "description": "Local IPv6 address (e.g. fc66::1/64)" + }, + "gateway-ipv6": { + "type": "string", + "description": "Default gateway IPv6 address", + "format": "ipv6" + }, + "ipv6-router-advertisement": { + "type": "boolean", + "description": "Send IPv6 router advertisements (ICMPv6 RA)", + "default": true + }, + "mtu": { + "type": "integer", + "description": "MTU size", + "default": 1500, + "minimum": 64, + "maximum": 9000 + }, + "vlan": { + "type": "integer", + "description": "Network interface VLAN (0 = untagged)", + "default": 0, + "minimum": 0, + "maximum": 4095 + }, + "gateway-mac": { + "type": "string", + "description": "Optional gateway MAC address (resolved via ARP/ND by default)", + "pattern": "^([0-9A-Fa-f]{2}:){5}[0-9A-Fa-f]{2}$" + }, + "gateway-resolve-wait": { + "type": "boolean", + "description": "Wait until gateways are resolved before starting sessions", + "default": true + }, + "isis-instance-id": { + "type": "integer", + "description": "Assign interface to ISIS instance", + "minimum": 0, + "maximum": 65535 + }, + "isis-level": { + "type": "integer", + "description": "ISIS interface level", + "default": 3, + "minimum": 1, + "maximum": 3 + }, + "isis-p2p": { + "type": "boolean", + "description": "ISIS P2P interface", + "default": true + }, + "isis-l1-metric": { + "type": "integer", + "description": "ISIS level 1 interface metric", + "default": 10, + "minimum": 0, + "maximum": 4294967295 + }, + "isis-l2-metric": { + "type": "integer", + "description": "ISIS level 2 interface metric", + "default": 10, + "minimum": 0, + "maximum": 4294967295 + }, + "isis-l1-priority": { + "type": "integer", + "description": "ISIS level 1 interface priority", + "default": 10, + "minimum": 0, + "maximum": 127 + }, + "isis-l2-priority": { + "type": "integer", + "description": "ISIS level 2 interface priority", + "default": 10, + "minimum": 0, + "maximum": 127 + }, + "ospfv2-instance-id": { + "type": "integer", + "description": "Assign interface to OSPFv2 instance", + "minimum": 0, + "maximum": 65535 + }, + "ospfv2-type": { + "type": "string", + "description": "OSPFv2 interface type", + "enum": [ + "p2p", + "broadcast" + ], + "default": "broadcast" + }, + "ospfv2-metric": { + "type": "integer", + "description": "OSPFv2 interface metric", + "default": 10, + "minimum": 0, + "maximum": 4294967295 + }, + "ospfv3-instance-id": { + "type": "integer", + "description": "Assign interface to OSPFv3 instance", + "minimum": 0, + "maximum": 65535 + }, + "ospfv3-type": { + "type": "string", + "description": "OSPFv3 interface type", + "enum": [ + "p2p", + "broadcast" + ], + "default": "broadcast" + }, + "ospfv3-metric": { + "type": "integer", + "description": "OSPFv3 interface metric", + "default": 10, + "minimum": 0, + "maximum": 4294967295 + }, + "ldp-instance-id": { + "type": "integer", + "description": "Assign interface to LDP instance", + "minimum": 0, + "maximum": 65535 + }, + "cfm-cc": { + "type": "boolean", + "description": "Enable EOAM CFM CC", + "default": false + }, + "cfm-level": { + "type": "integer", + "description": "EOAM CFM maintenance domain level", + "default": 0, + "minimum": 0, + "maximum": 7 + }, + "cfm-interval": { + "type": "string", + "description": "EOAM CFM CCM interval", + "enum": [ + "3.33ms", + "10ms", + "100ms", + "1s", + "10s", + "1min", + "10min" + ], + "default": "1s" + }, + "cfm-md-name": { + "type": "string", + "description": "EOAM CFM maintenance domain name" + }, + "cfm-md-name-format": { + "type": "string", + "description": "EOAM CFM MD name format", + "enum": [ + "NONE", + "DNS", + "MAC_INT", + "STRING" + ], + "default": "NONE" + }, + "cfm-ma-id": { + "type": "integer", + "description": "EOAM CFM maintenance association identifier", + "default": 0, + "minimum": 0, + "maximum": 65535 + }, + "cfm-ma-name": { + "type": "string", + "description": "EOAM CFM maintenance association short name" + }, + "cfm-ma-name-format": { + "type": "string", + "description": "EOAM CFM MA name format", + "enum": [ + "VLAN", + "STRING", + "UINT16", + "VPN_ID", + "ICC" + ], + "default": "STRING" + }, + "cfm-cc-seq": { + "type": "boolean", + "description": "Enable EOAM CFM CC sequence numbers", + "default": true + }, + "cfm-cc-vlan-priority": { + "type": "integer", + "description": "EOAM CFM CC VLAN priority (PCP)", + "default": 0, + "minimum": 0, + "maximum": 7 + }, + "a10nsp": { + "type": "boolean", + "description": "Enable A10NSP switch emulation (experimental)", + "default": false + }, + "a10nsp-tx-label": { + "type": "integer", + "description": "Transport label for A10NSP services in downstream direction", + "default": 0, + "minimum": 0, + "maximum": 1048575 + } + } + }, + "accessInterface": { + "type": "object", + "required": [ + "interface" + ], + "properties": { + "interface": { + "type": "string", + "description": "Parent interface/link name (e.g. eth0)" + }, + "network-interface": { + "type": "string", + "description": "Select corresponding network interface for sessions" + }, + "a10nsp-interface": { + "type": "string", + "description": "Select corresponding A10NSP interface for sessions" + }, + "type": { + "type": "string", + "description": "Access type", + "enum": [ + "pppoe", + "ipoe" + ], + "default": "pppoe" + }, + "vlan-mode": { + "type": "string", + "description": "VLAN mode", + "enum": [ + "1:1", + "N:1" + ], + "default": "1:1" + }, + "qinq": { + "type": "boolean", + "description": "Set outer VLAN ethertype to QinQ (0x88a8)", + "default": false + }, + "outer-vlan-min": { + "type": "integer", + "description": "Outer VLAN minimum value (0 = untagged)", + "default": 0, + "minimum": 0, + "maximum": 4094 + }, + "outer-vlan-max": { + "type": "integer", + "description": "Outer VLAN maximum value (0 = untagged)", + "default": 0, + "minimum": 0, + "maximum": 4094 + }, + "outer-vlan-step": { + "type": "integer", + "description": "Outer VLAN step (iterator)", + "default": 1, + "minimum": 0, + "maximum": 4095 + }, + "outer-vlan": { + "type": "integer", + "description": "Set outer-vlan-min/max equally", + "minimum": 0, + "maximum": 4095 + }, + "inner-vlan-min": { + "type": "integer", + "description": "Inner VLAN minimum value (0 = untagged)", + "default": 0, + "minimum": 0, + "maximum": 4095 + }, + "inner-vlan-max": { + "type": "integer", + "description": "Inner VLAN maximum value (0 = untagged)", + "default": 0, + "minimum": 0, + "maximum": 4095 + }, + "inner-vlan-step": { + "type": "integer", + "description": "Inner VLAN step (iterator)", + "default": 1, + "minimum": 0, + "maximum": 4095 + }, + "inner-vlan": { + "type": "integer", + "description": "Set inner-vlan-min/max equally", + "minimum": 0, + "maximum": 4094 + }, + "third-vlan": { + "type": "integer", + "description": "Static third VLAN (most inner, 0 = untagged)", + "default": 0, + "minimum": 0, + "maximum": 4094 + }, + "ipv4": { + "type": "boolean", + "description": "Enable IPv4", + "default": true + }, + "address": { + "type": "string", + "description": "Static IPv4 base address (IPoE only)", + "format": "ipv4" + }, + "address-iter": { + "type": "string", + "description": "Static IPv4 address iterator (IPoE only)", + "format": "ipv4", + "default": "0.0.0.0" + }, + "gateway": { + "type": "string", + "description": "Static IPv4 gateway address (IPoE only)", + "format": "ipv4" + }, + "gateway-iter": { + "type": "string", + "description": "Static IPv4 gateway iterator (IPoE only)", + "format": "ipv4", + "default": "0.0.0.0" + }, + "ipv6": { + "type": "boolean", + "description": "Enable IPv6", + "default": true + }, + "ipv6-link-local": { + "type": "string", + "description": "Static IPv6 link-local address (IPoE only)", + "format": "ipv6" + }, + "address-ipv6": { + "type": "string", + "description": "Static IPv6 address (IPoE only)", + "format": "ipv6" + }, + "gateway-ipv6": { + "type": "string", + "description": "Static IPv6 gateway address (IPoE only)", + "format": "ipv6" + }, + "cfm-cc": { + "type": "boolean", + "default": false + }, + "cfm-level": { + "type": "integer", + "default": 0, + "minimum": 0, + "maximum": 7 + }, + "cfm-interval": { + "type": "string", + "enum": [ + "3.33ms", + "10ms", + "100ms", + "1s", + "10s", + "1min", + "10min" + ], + "default": "1s" + }, + "cfm-md-name": { + "type": "string" + }, + "cfm-md-name-format": { + "type": "string", + "enum": [ + "NONE", + "DNS", + "MAC_INT", + "STRING" + ], + "default": "NONE" + }, + "cfm-ma-id": { + "type": "integer", + "default": 0, + "minimum": 0, + "maximum": 65535 + }, + "cfm-ma-name": { + "type": "string" + }, + "cfm-ma-name-format": { + "type": "string", + "enum": [ + "VLAN", + "STRING", + "UINT16", + "VPN_ID", + "ICC" + ], + "default": "STRING" + }, + "cfm-cc-seq": { + "type": "boolean", + "default": true + }, + "cfm-vlan-priority": { + "type": "integer", + "default": 0, + "minimum": 0, + "maximum": 7 + }, + "username": { + "type": "string", + "description": "Overwrite username (supports variables)" + }, + "password": { + "type": "string", + "description": "Overwrite password" + }, + "authentication-protocol": { + "type": "string", + "description": "Authentication protocol", + "enum": [ + "PAP", + "CHAP" + ] + }, + "agent-circuit-id": { + "type": "string", + "description": "Overwrite agent-circuit-id (supports variables)" + }, + "agent-remote-id": { + "type": "string", + "description": "Overwrite agent-remote-id (supports variables)" + }, + "access-aggregation-circuit-id": { + "type": "string", + "description": "Overwrite access-aggregation-circuit-id" + }, + "rate-up": { + "type": "integer", + "description": "Overwrite rate-up", + "minimum": 0, + "maximum": 4294967295 + }, + "rate-down": { + "type": "integer", + "description": "Overwrite rate-down", + "minimum": 0, + "maximum": 4294967295 + }, + "dsl-type": { + "type": "integer", + "description": "Overwrite dsl-type", + "minimum": 0, + "maximum": 4294967295 + }, + "ppp-mru": { + "type": "integer", + "description": "Overwrite PPP MRU (PPPoE only)", + "minimum": 64, + "maximum": 9000 + }, + "ipcp": { + "type": "boolean", + "description": "Overwrite PPP IPCP enable (PPPoE only)" + }, + "ip6cp": { + "type": "boolean", + "description": "Overwrite PPP IP6CP enable (PPPoE only)" + }, + "dhcp": { + "type": "boolean", + "description": "Overwrite DHCP enable" + }, + "dhcp-vendor-class-id": { + "type": "string", + "description": "Overwrite DHCP vendor class id/option 60" + }, + "dhcpv6": { + "type": "boolean", + "description": "Overwrite DHCPv6 enable" + }, + "dhcpv6-ldra": { + "type": "boolean", + "description": "Overwrite DHCPv6 LDRA" + }, + "igmp-autostart": { + "type": "boolean", + "description": "Overwrite IGMP autostart" + }, + "igmp-version": { + "type": "integer", + "description": "Overwrite IGMP protocol version", + "enum": [ + 1, + 2, + 3 + ] + }, + "access-line-profile-id": { + "type": "integer", + "description": "Access-line-profile identifier", + "default": 0, + "minimum": 0, + "maximum": 65535 + }, + "i1-start": { + "type": "integer", + "description": "Iterator {i1} start value", + "default": 1, + "minimum": 0, + "maximum": 4294967295 + }, + "i1-step": { + "type": "integer", + "description": "Iterator {i1} step per session", + "default": 1, + "minimum": 0, + "maximum": 4294967295 + }, + "i2-start": { + "type": "integer", + "description": "Iterator {i2} start value", + "default": 1, + "minimum": 0, + "maximum": 4294967295 + }, + "i2-step": { + "type": "integer", + "description": "Iterator {i2} step per session", + "default": 1, + "minimum": 0, + "maximum": 4294967295 + }, + "monkey": { + "type": "boolean", + "description": "Enable monkey testing", + "default": false + }, + "session-limit": { + "type": "integer", + "description": "Limit sessions per access interface", + "default": 0, + "minimum": 0, + "maximum": 10000000 + }, + "session-traffic-autostart": { + "type": "boolean", + "description": "Overwrite session-traffic autostart" + }, + "session-group-id": { + "type": "integer", + "description": "Session group identifier", + "default": 0, + "minimum": 0, + "maximum": 65535 + }, + "stream-group-id": { + "type": "integer", + "description": "Stream group identifier", + "default": 0, + "minimum": 0, + "maximum": 65535 + }, + "arp-client-group-id": { + "type": "integer", + "description": "ARP client group identifier", + "default": 0, + "minimum": 0, + "maximum": 65535 + }, + "icmp-client-group-id": { + "type": "integer", + "description": "ICMP client group identifier", + "default": 0, + "minimum": 0, + "maximum": 65535 + }, + "http-client-group-id": { + "type": "integer", + "description": "HTTP client group identifier", + "default": 0, + "minimum": 0, + "maximum": 65535 + }, + "tun": { + "type": "boolean", + "description": "Create dedicated TUN interface for each session", + "default": false + } + } + }, + "a10nspInterface": { + "type": "object", + "required": [ + "interface" + ], + "properties": { + "interface": { + "type": "string", + "description": "Parent interface/link name (e.g. eth0)" + }, + "qinq": { + "type": "boolean", + "description": "Set outer VLAN ethertype to QinQ (0x88a8)", + "default": false + }, + "mac": { + "type": "string", + "description": "Overwrite the A10NSP MAC address", + "pattern": "^([0-9A-Fa-f]{2}:){5}[0-9A-Fa-f]{2}$" + } + } + }, + "lagInterface": { + "type": "object", + "required": [ + "interface" + ], + "properties": { + "interface": { + "type": "string", + "description": "LAG interface name (e.g. lag0)" + }, + "lacp": { + "type": "boolean", + "description": "Enable LACP", + "default": false + }, + "lacp-timeout-short": { + "type": "boolean", + "description": "Enable LACP short timeout (3x1s)", + "default": false + }, + "lacp-system-priority": { + "type": "integer", + "description": "LACP system priority", + "default": 32768, + "minimum": 0, + "maximum": 65535 + }, + "lacp-system-id": { + "type": "string", + "description": "LACP system identifier", + "default": "02:ff:ff:ff:ff:00", + "pattern": "^([0-9A-Fa-f]{2}:){5}[0-9A-Fa-f]{2}$" + }, + "lacp-min-active-links": { + "type": "integer", + "description": "Minimum number of active links", + "default": 0, + "minimum": 0, + "maximum": 255 + }, + "lacp-max-active-links": { + "type": "integer", + "description": "Maximum number of active links", + "default": 255, + "minimum": 1, + "maximum": 255 + }, + "mac": { + "type": "string", + "description": "LAG interface MAC address", + "default": "02:ff:ff:ff:ff:", + "pattern": "^([0-9A-Fa-f]{2}:){5}[0-9A-Fa-f]{2}$" + } + } + }, + "link": { + "type": "object", + "required": [ + "interface" + ], + "properties": { + "interface": { + "type": "string", + "description": "Interface name (e.g. eth0)" + }, + "description": { + "type": "string", + "description": "Interface description" + }, + "mac": { + "type": "string", + "description": "Overwrite the MAC address", + "pattern": "^([0-9A-Fa-f]{2}:){5}[0-9A-Fa-f]{2}$" + }, + "lag-interface": { + "type": "string", + "description": "Add interface/link to LAG group" + }, + "lacp-priority": { + "type": "integer", + "description": "LACP interface priority", + "default": 32768, + "minimum": 0, + "maximum": 65535 + }, + "tx-cpuset": { + "type": "array", + "description": "Pin TX threads to CPU cores (cpuset)", + "items": { + "type": "integer", + "minimum": 0, + "maximum": 4095 + }, + "uniqueItems": true, + "minItems": 1 + }, + "rx-cpuset": { + "type": "array", + "description": "Pin RX threads to CPU cores (cpuset)", + "items": { + "type": "integer", + "minimum": 0, + "maximum": 4095 + }, + "uniqueItems": true, + "minItems": 1 + }, + "io-mode": { + "type": "string", + "description": "Overwrite the IO mode" + }, + "io-burst": { + "type": "integer", + "description": "Overwrite the IO burst (packets)", + "minimum": 1, + "maximum": 65535 + }, + "io-slots": { + "type": "integer", + "description": "Overwrite the IO slots (ring size)", + "minimum": 32, + "maximum": 65535 + }, + "io-slots-tx": { + "type": "integer", + "description": "Overwrite the TX IO slots (ring size)", + "minimum": 32, + "maximum": 65535 + }, + "io-slots-rx": { + "type": "integer", + "description": "Overwrite the RX IO slots (ring size)", + "minimum": 32, + "maximum": 65535 + }, + "qdisc-bypass": { + "type": "boolean", + "description": "Overwrite the kernel’s qdisc layer configuration" + }, + "tx-interval": { + "type": "number", + "description": "Overwrite the TX polling interval in milliseconds", + "minimum": 0.0001, + "maximum": 1000 + }, + "rx-interval": { + "type": "number", + "description": "Overwrite the RX polling interval in milliseconds", + "minimum": 0.0001, + "maximum": 1000 + }, + "tx-threads": { + "type": "integer", + "description": "Overwrite the number of TX threads per interface link", + "minimum": 0, + "maximum": 255 + }, + "rx-threads": { + "type": "integer", + "description": "Overwrite the number of RX threads per interface link", + "minimum": 0, + "maximum": 255 + } + } + }, + "stream": { + "type": "object", + "required": [ + "name", + "type" + ], + "properties": { + "name": { + "type": "string", + "description": "Stream name" + }, + "stream-group-id": { + "type": "integer", + "description": "Stream group identifier (0 = raw)", + "default": 0, + "minimum": 0, + "maximum": 65535 + }, + "type": { + "type": "string", + "description": "Stream type", + "enum": [ + "ipv4", + "ipv6", + "ipv6pd" + ] + }, + "direction": { + "type": "string", + "description": "Stream direction", + "enum": [ + "upstream", + "downstream", + "both" + ], + "default": "both" + }, + "autostart": { + "type": "boolean", + "description": "Enable stream autostart", + "default": true + }, + "source-port": { + "type": "integer", + "description": "Source port", + "default": 65056, + "minimum": 0, + "maximum": 65535 + }, + "destination-port": { + "type": "integer", + "description": "Destination port", + "default": 65056, + "minimum": 0, + "maximum": 65535 + }, + "ipv4-df": { + "type": "boolean", + "description": "Set IPv4 DF bit", + "default": true + }, + "priority": { + "type": "integer", + "description": "IPv4 TOS / IPv6 TC", + "default": 0, + "minimum": 0, + "maximum": 255 + }, + "vlan-priority": { + "type": "integer", + "description": "VLAN priority", + "default": 0, + "minimum": 0, + "maximum": 7 + }, + "inner-vlan-priority": { + "type": "integer", + "description": "Inner VLAN priority", + "minimum": 0, + "maximum": 7 + }, + "length": { + "type": "integer", + "description": "Layer 3 traffic length (IP header + payload)", + "default": 128, + "minimum": 76, + "maximum": 9000 + }, + "ttl": { + "type": "integer", + "description": "TTL", + "default": 64, + "minimum": 0, + "maximum": 255 + }, + "pps": { + "type": "number", + "description": "Stream traffic rate in packets per second", + "default": 1, + "minimum": 0 + }, + "bps": { + "type": "number", + "description": "Stream traffic rate in bits per second (layer 3)" + }, + "Kbps": { + "type": "number", + "description": "Stream rate in Kbps", + "minimum": 0 + }, + "Mbps": { + "type": "number", + "description": "Stream rate in Mbps", + "minimum": 0 + }, + "Gbps": { + "type": "number", + "description": "Stream rate in Gbps", + "minimum": 0 + }, + "pps-upstream": { + "type": "number", + "description": "Overwrite PPS in upstream for bidirectional streams", + "minimum": 0 + }, + "bps-upstream": { + "type": "number", + "description": "Overwrite bps in upstream for bidirectional streams", + "minimum": 0 + }, + "setup-interval": { + "type": "integer", + "description": "Setup interval in seconds (0 = disabled)", + "default": 0, + "minimum": 0, + "maximum": 900 + }, + "a10nsp-interface": { + "type": "string", + "description": "Select corresponding A10NSP interface for stream" + }, + "network-interface": { + "type": "string", + "description": "Select corresponding network interface for stream" + }, + "network-ipv4-address": { + "type": "string", + "description": "Overwrite network interface IPv4 address", + "format": "ipv4" + }, + "network-ipv6-address": { + "type": "string", + "description": "Overwrite network interface IPv6 address", + "format": "ipv6" + }, + "destination-ipv4-address": { + "type": "string", + "description": "Overwrite IPv4 destination address", + "format": "ipv4" + }, + "destination-ipv6-address": { + "type": "string", + "description": "Overwrite IPv6 destination address", + "format": "ipv6" + }, + "access-ipv4-source-address": { + "type": "string", + "description": "Overwrite access IPv4 source address (client)", + "format": "ipv4" + }, + "access-ipv6-source-address": { + "type": "string", + "description": "Overwrite access IPv6 source address (client)", + "format": "ipv6" + }, + "max-packets": { + "type": "integer", + "description": "Send N packets and stop (0 = infinity)", + "default": 0, + "minimum": 0, + "maximum": 4294967295 + }, + "start-delay": { + "type": "integer", + "description": "Wait N seconds after session established before starting", + "default": 0, + "minimum": 0, + "maximum": 4294967295 + }, + "tx-label1": { + "type": "integer", + "description": "MPLS send label (outer)", + "minimum": 0, + "maximum": 1048575 + }, + "tx-label1-exp": { + "type": "integer", + "description": "EXP bits of outer label", + "default": 0, + "minimum": 0, + "maximum": 7 + }, + "tx-label1-ttl": { + "type": "integer", + "description": "TTL of outer label", + "default": 255, + "minimum": 0, + "maximum": 255 + }, + "tx-label2": { + "type": "integer", + "description": "MPLS send label (inner)", + "minimum": 0, + "maximum": 1048575 + }, + "tx-label2-exp": { + "type": "integer", + "description": "EXP bits of inner label", + "default": 0, + "minimum": 0, + "maximum": 7 + }, + "tx-label2-ttl": { + "type": "integer", + "description": "TTL of inner label", + "default": 255, + "minimum": 0, + "maximum": 255 + }, + "rx-label1": { + "type": "integer", + "description": "Expected receive MPLS label (outer)", + "minimum": 0, + "maximum": 1048575 + }, + "rx-label2": { + "type": "integer", + "description": "Expected receive MPLS label (inner)", + "minimum": 0, + "maximum": 1048575 + }, + "ldp-ipv4-lookup-address": { + "type": "string", + "description": "Dynamically resolve outer label", + "format": "ipv4" + }, + "ldp-ipv6-lookup-address": { + "type": "string", + "description": "Dynamically resolve outer label", + "format": "ipv6" + }, + "nat": { + "type": "boolean", + "description": "Enable NAT support", + "default": false + }, + "raw-tcp": { + "type": "boolean", + "description": "Send RAW TCP traffic", + "default": false + } + } + }, + "isisConfig": { + "type": "object", + "required": [ + "instance-id" + ], + "properties": { + "instance-id": { + "type": "integer", + "description": "ISIS instance identifier", + "minimum": 0, + "maximum": 65535 + }, + "level": { + "type": "integer", + "description": "ISIS level", + "default": 3, + "minimum": 1, + "maximum": 3 + }, + "protocol-ipv4": { + "type": "boolean", + "description": "Enable IPv4 routing", + "default": true + }, + "protocol-ipv6": { + "type": "boolean", + "description": "Enable IPv6 routing", + "default": true + }, + "level1-auth-key": { + "type": "string", + "description": "Level 1 authentication key" + }, + "level1-auth-type": { + "type": "string", + "description": "Level 1 authentication type", + "enum": [ + "simple", + "md5" + ] + }, + "level1-auth-hello": { + "type": "boolean", + "default": true + }, + "level1-auth-csnp": { + "type": "boolean", + "default": true + }, + "level1-auth-psnp": { + "type": "boolean", + "default": true + }, + "level2-auth-key": { + "type": "string", + "description": "Level 2 authentication key" + }, + "level2-auth-type": { + "type": "string", + "description": "Level 2 authentication type", + "enum": [ + "simple", + "md5" + ] + }, + "level2-auth-hello": { + "type": "boolean", + "default": true + }, + "level2-auth-csnp": { + "type": "boolean", + "default": true + }, + "level2-auth-psnp": { + "type": "boolean", + "default": true + }, + "hello-interval": { + "type": "integer", + "description": "Hello interval in seconds", + "default": 10, + "minimum": 1, + "maximum": 65535 + }, + "hello-padding": { + "type": "boolean", + "description": "Enable hello padding", + "default": false + }, + "hold-time": { + "type": "integer", + "description": "Hold time in seconds", + "default": 30, + "minimum": 1, + "maximum": 65535 + }, + "lsp-buffer-size": { + "type": "integer", + "description": "LSPBufferSize in bytes", + "default": 1492, + "minimum": 128, + "maximum": 9192 + }, + "lsp-lifetime": { + "type": "integer", + "description": "LSP lifetime in seconds", + "default": 65535, + "minimum": 330, + "maximum": 65535 + }, + "lsp-refresh-interval": { + "type": "integer", + "description": "LSP refresh interval in seconds", + "default": 300, + "minimum": 1, + "maximum": 65535 + }, + "lsp-retry-interval": { + "type": "integer", + "description": "LSP retry interval in seconds", + "default": 5, + "minimum": 1, + "maximum": 65535 + }, + "lsp-tx-interval": { + "type": "integer", + "description": "LSP TX interval in ms", + "default": 10, + "minimum": 1, + "maximum": 65535 + }, + "lsp-tx-window-size": { + "type": "integer", + "description": "LSP TX window size", + "default": 1, + "minimum": 1, + "maximum": 65535 + }, + "csnp-interval": { + "type": "integer", + "description": "CSNP interval in seconds", + "default": 30, + "minimum": 1, + "maximum": 65535 + }, + "hostname": { + "type": "string", + "description": "ISIS hostname", + "default": "bngblaster" + }, + "router-id": { + "type": "string", + "description": "ISIS router identifier", + "format": "ipv4", + "default": "10.10.10.10" + }, + "system-id": { + "type": "string", + "description": "ISIS system identifier", + "default": "0100.1001.0010", + "pattern": "^[0-9a-fA-F]{4}\\.[0-9a-fA-F]{4}\\.[0-9a-fA-F]{4}$" + }, + "area": { + "type": "array", + "description": "ISIS area(s)", + "items": { + "type": "string" + } + }, + "sr-algo": { + "type": "array", + "description": "ISIS SR algorithm(s)", + "items": { + "type": "integer", + "minimum": 0, + "maximum": 255 + } + }, + "sr-base": { + "type": "integer", + "description": "ISIS SR base", + "default": 0, + "minimum": 0, + "maximum": 1048575 + }, + "sr-range": { + "type": "integer", + "description": "ISIS SR range", + "default": 0, + "minimum": 0, + "maximum": 1048575 + }, + "sr-node-sid": { + "type": "integer", + "description": "ISIS SR node SID", + "default": 0, + "minimum": 0, + "maximum": 1048575 + }, + "adjacency-sid-base": { + "type": "integer", + "description": "Adjacency SID base", + "minimum": 256, + "maximum": 4096 + }, + "teardown-time": { + "type": "integer", + "description": "ISIS teardown time in seconds", + "default": 5, + "minimum": 0, + "maximum": 65535 + }, + "external": { + "type": "object", + "properties": { + "purge": { + "type": "boolean", + "description": "Automatically purge all external LSP during teardown", + "default": true + }, + "auto-refresh": { + "type": "boolean", + "description": "Automatically refresh all external LSP", + "default": false + }, + "mrt-file": { + "type": "string", + "description": "MRT file" + }, + "connections": { + "type": "array", + "items": { + "type": "object", + "required": [ + "system-id" + ], + "properties": { + "system-id": { + "type": "string", + "description": "ISIS system identifier", + "pattern": "^[0-9a-fA-F]{4}\\.[0-9a-fA-F]{4}\\.[0-9a-fA-F]{4}$" + }, + "l1-metric": { + "type": "integer", + "description": "Level 1 interface metric", + "default": 10 + }, + "l2-metric": { + "type": "integer", + "description": "Level 2 interface metric", + "default": 10 + } + } + } + } + } + } + } + }, + "ospfConfig": { + "type": "object", + "required": [ + "instance-id" + ], + "properties": { + "instance-id": { + "type": "integer", + "description": "OSPF instance identifier", + "minimum": 0, + "maximum": 65535 + }, + "version": { + "type": "integer", + "description": "OSPF version", + "default": 2, + "enum": [ + 2, + 3 + ] + }, + "auth-key": { + "type": "string", + "description": "OSPF authentication key" + }, + "auth-type": { + "type": "string", + "description": "OSPF authentication type", + "enum": [ + "simple", + "md5" + ] + }, + "hello-interval": { + "type": "integer", + "description": "Hello interval in seconds", + "default": 10, + "minimum": 1, + "maximum": 65535 + }, + "dead-interval": { + "type": "integer", + "description": "Dead interval in seconds", + "default": 40, + "minimum": 1, + "maximum": 65535 + }, + "lsa-retry-interval": { + "type": "integer", + "description": "LSA retry interval in seconds", + "default": 5, + "minimum": 1, + "maximum": 65535 + }, + "hostname": { + "type": "string", + "description": "OSPF hostname", + "default": "bngblaster" + }, + "router-id": { + "type": "string", + "description": "OSPF router identifier", + "format": "ipv4", + "default": "10.10.10.10" + }, + "router-priority": { + "type": "integer", + "description": "OSPF router priority", + "default": 64, + "minimum": 0, + "maximum": 255 + }, + "area": { + "type": "string", + "description": "OSPF area", + "format": "ipv4", + "default": "0.0.0.0" + }, + "sr-base": { + "type": "integer", + "default": 0, + "minimum": 0, + "maximum": 1048575 + }, + "sr-range": { + "type": "integer", + "default": 0, + "minimum": 0, + "maximum": 1048575 + }, + "sr-node-sid": { + "type": "integer", + "default": 0, + "minimum": 0, + "maximum": 1048575 + }, + "teardown-time": { + "type": "integer", + "description": "OSPF teardown time in seconds", + "default": 5, + "minimum": 0, + "maximum": 65535 + }, + "external": { + "type": "object", + "properties": { + "purge": { + "type": "boolean", + "default": true + }, + "mrt-file": { + "type": "string", + "description": "OSPF MRT file" + }, + "connections": { + "type": "array", + "items": { + "type": "object", + "required": [ + "router-id" + ], + "properties": { + "router-id": { + "type": "string", + "format": "ipv4" + }, + "metric": { + "type": "integer", + "default": 10, + "minimum": 0, + "maximum": 4294967295 + }, + "local-ipv4-address": { + "type": "string", + "format": "ipv4" + }, + "local-interface-id": { + "type": "integer", + "default": 1, + "minimum": 0, + "maximum": 4294967295 + }, + "neighbor-interface-id": { + "type": "integer", + "minimum": 0, + "maximum": 4294967295 + } + } + } + } + } + } + } + }, + "ldpConfig": { + "type": "object", + "required": [ + "instance-id" + ], + "properties": { + "instance-id": { + "type": "integer", + "description": "LDP instance identifier", + "minimum": 0, + "maximum": 65535 + }, + "keepalive-time": { + "type": "integer", + "description": "Session keepalive time in seconds", + "default": 15, + "minimum": 0, + "maximum": 65535 + }, + "hold-time": { + "type": "integer", + "description": "Hello hold time in seconds", + "default": 15, + "minimum": 0, + "maximum": 65535 + }, + "teardown-time": { + "type": "integer", + "description": "Teardown time in seconds", + "default": 5, + "minimum": 0, + "maximum": 65535 + }, + "hostname": { + "type": "string", + "description": "LDP hostname", + "default": "bngblaster" + }, + "lsr-id": { + "type": "string", + "description": "LDP LSR identifier", + "format": "ipv4", + "default": "10.10.10.10" + }, + "ipv6-transport-address": { + "type": "string", + "description": "LDP transport IPv6 address", + "format": "ipv6" + }, + "ipv4-transport-address": { + "type": "string", + "description": "LDP transport IPv4 address", + "format": "ipv4" + }, + "no-ipv4-transport": { + "type": "boolean", + "description": "Disable IPv4 LDP hello messages", + "default": false + }, + "prefer-ipv4-transport": { + "type": "boolean", + "description": "Prefer IPv4 transport over IPv6", + "default": false + }, + "raw-update-file": { + "type": "string", + "description": "LDP RAW update file" + }, + "tos": { + "type": "integer", + "description": "LDP TOS/TC", + "default": 0, + "minimum": 0, + "maximum": 255 + } + } + }, + "bgpConfig": { + "type": "object", + "required": [ + "peer-address" + ], + "properties": { + "network-interface": { + "type": "string", + "description": "BGP local interface" + }, + "local-address": { + "type": "string", + "description": "BGP local IPv4/6 address" + }, + "local-as": { + "type": "integer", + "description": "BGP local AS", + "default": 65000, + "minimum": 0, + "maximum": 4294967295 + }, + "peer-address": { + "type": "string", + "description": "BGP peer IPv4/6 address" + }, + "peer-as": { + "type": "integer", + "description": "BGP peer AS", + "minimum": 0, + "maximum": 4294967295 + }, + "hold-time": { + "type": "integer", + "description": "BGP hold-time in seconds", + "default": 90, + "minimum": 0, + "maximum": 65535 + }, + "id": { + "type": "string", + "description": "BGP identifier", + "format": "ipv4", + "default": "1.2.3.4" + }, + "tos": { + "type": "integer", + "description": "BGP IP TOS", + "default": 0, + "minimum": 0, + "maximum": 255 + }, + "ttl": { + "type": "integer", + "description": "BGP IP TTL", + "default": 255, + "minimum": 0, + "maximum": 255 + }, + "reconnect": { + "type": "boolean", + "description": "Reconnect BGP session automatically", + "default": true + }, + "start-traffic": { + "type": "boolean", + "description": "Start traffic after RAW update finished", + "default": false + }, + "teardown-time": { + "type": "integer", + "description": "BGP teardown time in seconds", + "default": 5, + "minimum": 0, + "maximum": 65535 + }, + "raw-update-file": { + "type": "string", + "description": "BGP RAW update file" + }, + "family": { + "type": "array", + "description": "BGP families", + "items": { + "type": "string", + "enum": [ + "ipv4-unicast", + "ipv6-unicast", + "ipv4-multicast", + "ipv6-multicast", + "ipv4-labeled-unicast", + "ipv6-labeled-unicast", + "ipv4-vpn-unicast", + "ipv6-vpn-unicast", + "ipv4-vpn-multicast", + "ipv6-vpn-multicast", + "ipv4-flow", + "ipv6-flow", + "evpn" + ] + } + }, + "extended-nexthop": { + "type": "array", + "description": "BGP extended-nexthop families", + "items": { + "type": "string", + "enum": [ + "ipv4-unicast", + "ipv4-vpn-unicast" + ] + } + } + } + }, + "httpClient": { + "type": "object", + "required": [ + "name", + "http-client-group-id", + "url" + ], + "properties": { + "name": { + "type": "string", + "description": "HTTP client name" + }, + "http-client-group-id": { + "type": "integer", + "description": "HTTP client identifier", + "minimum": 1, + "maximum": 65535 + }, + "url": { + "type": "string", + "description": "HTTP request URL" + }, + "destination-port": { + "type": "integer", + "description": "TCP destination port", + "default": 80, + "minimum": 1, + "maximum": 65535 + }, + "autostart": { + "type": "boolean", + "description": "Autostart", + "default": true + }, + "start-delay": { + "type": "integer", + "description": "Start delay in seconds", + "default": 0, + "minimum": 0, + "maximum": 4294967295 + }, + "destination-ipv4-address": { + "type": "string", + "format": "ipv4" + }, + "destination-ipv6-address": { + "type": "string", + "format": "ipv6" + } + } + }, + "httpServer": { + "type": "object", + "required": [ + "name", + "network-interface" + ], + "properties": { + "name": { + "type": "string", + "description": "HTTP server name" + }, + "network-interface": { + "type": "string", + "description": "Network interface" + }, + "port": { + "type": "integer", + "description": "Local TCP port", + "default": 80, + "minimum": 1, + "maximum": 65535 + }, + "ipv4-address": { + "type": "string", + "format": "ipv4" + }, + "ipv6-address": { + "type": "string", + "format": "ipv6" + } + } + }, + "icmpClient": { + "type": "object", + "properties": { + "icmp-client-group-id": { + "type": "integer", + "description": "ICMP client identifier", + "minimum": 1, + "maximum": 65535 + }, + "network-interface": { + "type": "string", + "description": "Network interface" + }, + "destination-address": { + "type": "string", + "description": "Destination IPv4 address", + "format": "ipv4" + }, + "source-address": { + "type": "string", + "description": "Source IPv4 address", + "format": "ipv4" + }, + "size": { + "type": "integer", + "description": "ICMP data size", + "default": 8, + "minimum": 0, + "maximum": 65507 + }, + "interval": { + "type": "number", + "description": "Send interval in seconds", + "default": 1.0, + "minimum": 0 + }, + "count": { + "type": "integer", + "description": "Requests to send (0 = infinity)", + "default": 0, + "minimum": 0, + "maximum": 65535 + }, + "results": { + "type": "integer", + "description": "Request count to track results for", + "default": 3, + "minimum": 0, + "maximum": 65535 + }, + "ttl": { + "type": "integer", + "description": "IPv4 TTL", + "default": 64, + "minimum": 1, + "maximum": 255 + }, + "tos": { + "type": "integer", + "description": "IPv4 TOS", + "default": 0, + "minimum": 0, + "maximum": 255 + }, + "df": { + "type": "boolean", + "description": "IPv4 DF bit", + "default": false + }, + "autostart": { + "type": "boolean", + "description": "Autostart after session reconnects", + "default": true + }, + "start-delay": { + "type": "integer", + "description": "Start delay in seconds", + "default": 0, + "minimum": 0, + "maximum": 65535 + } + } + }, + "arpClient": { + "type": "object", + "required": [ + "arp-client-group-id", + "target-ip" + ], + "properties": { + "arp-client-group-id": { + "type": "integer", + "description": "ARP client identifier", + "minimum": 1, + "maximum": 65535 + }, + "target-ip": { + "type": "string", + "description": "IPv4 address to resolve", + "format": "ipv4" + }, + "interval": { + "type": "number", + "description": "ARP request interval in seconds", + "default": 1, + "minimum": 1, + "maximum": 255 + }, + "vlan-priority": { + "type": "integer", + "description": "VLAN priority", + "default": 0, + "minimum": 0, + "maximum": 7 + } + } + } + } +} \ No newline at end of file From 8b7860b319cd353aeeb1022314ac4f255f5181f0 Mon Sep 17 00:00:00 2001 From: Christian Giese Date: Wed, 25 Feb 2026 19:55:31 +0000 Subject: [PATCH 05/39] fix example config --- examples/dhcp11.json | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/examples/dhcp11.json b/examples/dhcp11.json index 77f032c0..358bae79 100644 --- a/examples/dhcp11.json +++ b/examples/dhcp11.json @@ -2,21 +2,21 @@ "interfaces": { "network": { "interface": "eth2", - "address": "10.0.0.10", + "address": "10.0.0.10/24", "gateway": "10.0.0.2", "address-ipv6": "fc66:1337:7331:8::10", "gateway-ipv6": "fc66:1337:7331:8::1" }, "access": [ - { - "interface": "eth1", - "type": "ipoe", - "outer-vlan-min": 128, - "outer-vlan-max": 400, - "inner-vlan-min": 7, - "inner-vlan-max": 7 - } - ] + { + "interface": "eth1", + "type": "ipoe", + "outer-vlan-min": 128, + "outer-vlan-max": 400, + "inner-vlan-min": 7, + "inner-vlan-max": 7 + } + ] }, "sessions": { "count": 1, From 905ae9f894cc13b42fe45ba3acd66b84d1ff073e Mon Sep 17 00:00:00 2001 From: Christian Giese Date: Wed, 25 Feb 2026 19:57:25 +0000 Subject: [PATCH 06/39] fix config docs --- docsrc/sources/configuration/dhcpv6.rst | 6 ++++++ docsrc/sources/configuration/igmp.rst | 10 ++++++++-- docsrc/sources/configuration/interfaces_a10nsp.rst | 2 +- docsrc/sources/configuration/ldp.rst | 5 ++++- 4 files changed, 19 insertions(+), 4 deletions(-) diff --git a/docsrc/sources/configuration/dhcpv6.rst b/docsrc/sources/configuration/dhcpv6.rst index 64b74ea8..c84a5ebb 100644 --- a/docsrc/sources/configuration/dhcpv6.rst +++ b/docsrc/sources/configuration/dhcpv6.rst @@ -14,6 +14,9 @@ | **ia-pd** | | This option allows enabling or disabling DHCPv6 IA_PD. | | | | Default: true | +-----------------------------------+----------------------------------------------------------------------+ +| **ia-separate** | | Send seperate requests for IA_NA and IA_PD. | +| | | Default: false | ++-----------------------------------+----------------------------------------------------------------------+ | **rapid-commit** | | DHCPv6 rapid commit (2-way handshake). | | | | Default: true | +-----------------------------------+----------------------------------------------------------------------+ @@ -23,6 +26,9 @@ | **retry** | | DHCPv6 retry. | | | | Default: 10 | +-----------------------------------+----------------------------------------------------------------------+ +| **vlan-priority** | | VLAN PBIT for all DHCPv6 control traffic. | +| | | Default: 0 | ++-----------------------------------+----------------------------------------------------------------------+ | **access-line** | | Add access-line attributes like Agent-Remote/Circuit-Id. | | | | Default: true | +-----------------------------------+----------------------------------------------------------------------+ diff --git a/docsrc/sources/configuration/igmp.rst b/docsrc/sources/configuration/igmp.rst index b3e75ec1..f322218a 100644 --- a/docsrc/sources/configuration/igmp.rst +++ b/docsrc/sources/configuration/igmp.rst @@ -18,7 +18,7 @@ | | | reports. This option allows the combination of leave and join | | | | records within a single IGMPv3 report using multiple group records.| | | | This option applies to the IGMP version 3 only! | -| | | Default: true | +| | | Default: false | +-----------------------------------+----------------------------------------------------------------------+ | **group** | | Multicast group base address (e.g. 239.0.0.1). | | | | If group is set to 293.0.0.1 with group-iter of 0.0.0.2, | @@ -54,15 +54,21 @@ | | | the measured join delay is above this threshold. | | | | Default: 0 (disabled) | +-----------------------------------+----------------------------------------------------------------------+ +| **robustness-interval** | | IGMP robustness interval in milliseconds. | +| | | Default: 1000 | ++-----------------------------------+----------------------------------------------------------------------+ | **send-multicast-traffic** | | If enabled, the BNG Blaster generates multicast traffic on the | | | | network interface based on the specified group and source | | | | attributes mentioned before. This traffic includes some special | | | | signatures for faster processing and more detailed analysis. | | | | Default: false | +-----------------------------------+----------------------------------------------------------------------+ +| **multicast-traffic-autostart** | | Multicast traffic autostart. | +| | | Default: true | ++-----------------------------------+----------------------------------------------------------------------+ | **multicast-traffic-length** | | Multicast traffic IP length. | | | | Only applicable with **send-multicast-traffic** enabled! | -| | | Default: 76 | +| | | Default: 0 | +-----------------------------------+----------------------------------------------------------------------+ | **multicast-traffic-tos** | | Multicast traffic TOS priority. | | | | Only applicable with **send-multicast-traffic** enabled! | diff --git a/docsrc/sources/configuration/interfaces_a10nsp.rst b/docsrc/sources/configuration/interfaces_a10nsp.rst index 4ba6a446..d5877388 100644 --- a/docsrc/sources/configuration/interfaces_a10nsp.rst +++ b/docsrc/sources/configuration/interfaces_a10nsp.rst @@ -10,6 +10,6 @@ | **qinq** | | Set outer VLAN ethertype to QinQ (0x88a8). | | | | Default: false | +-----------------------------------+----------------------------------------------------------------------+ -| **mac** | | Optional set gateway interface address manually. | +| **mac** | | Overwrite the A10NSP MAC address. | | | | Default: `parent interface/link MAC address` | +-----------------------------------+----------------------------------------------------------------------+ \ No newline at end of file diff --git a/docsrc/sources/configuration/ldp.rst b/docsrc/sources/configuration/ldp.rst index 12ba447b..271dfa42 100644 --- a/docsrc/sources/configuration/ldp.rst +++ b/docsrc/sources/configuration/ldp.rst @@ -49,4 +49,7 @@ | | | Default: false | +----------------------------------+------------------------------------------------------------+ | **raw-update-file** | | LDP RAW update file. | -+----------------------------------+------------------------------------------------------------+ \ No newline at end of file ++----------------------------------+------------------------------------------------------------+ +| **tos** | | TOS/TC for all LDP control traffic. | +| | | Default: 0 | ++-----------------------------------+-----------------------------------------------------------+ From e792f23cb5d00e6de0827eb3e870df1e95ea82bc Mon Sep 17 00:00:00 2001 From: Christian Giese Date: Wed, 25 Feb 2026 19:57:39 +0000 Subject: [PATCH 07/39] fix typo in ISIS --- code/bngblaster/src/isis/isis_utils.c | 4 ++-- code/bngblaster/src/isis/isis_utils.h | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/code/bngblaster/src/isis/isis_utils.c b/code/bngblaster/src/isis/isis_utils.c index ce868317..b18dcf58 100644 --- a/code/bngblaster/src/isis/isis_utils.c +++ b/code/bngblaster/src/isis/isis_utils.c @@ -129,7 +129,7 @@ isis_str_to_area(const char *str, isis_area_s *area) } /** - * isis_area_so_str + * isis_area_to_str * * Format an IS-IS area as string * in one of 4 static buffers. @@ -138,7 +138,7 @@ isis_str_to_area(const char *str, isis_area_s *area) * @return IS-IS area string */ char * -isis_area_so_str(isis_area_s *area) +isis_area_to_str(isis_area_s *area) { static char buffer[4][ISIS_MAX_AREA_STR_LEN]; static int idx = 0; diff --git a/code/bngblaster/src/isis/isis_utils.h b/code/bngblaster/src/isis/isis_utils.h index 750883e2..54590ec6 100644 --- a/code/bngblaster/src/isis/isis_utils.h +++ b/code/bngblaster/src/isis/isis_utils.h @@ -31,7 +31,7 @@ bool isis_str_to_area(const char *str, isis_area_s *area); char * -isis_area_so_str(isis_area_s *area); +isis_area_to_str(isis_area_s *area); bool isis_str_to_system_id(const char *str, uint8_t *system_id); From 2477f002c2761d60e544c13a8f8648fa7b39fd99 Mon Sep 17 00:00:00 2001 From: Christian Giese Date: Wed, 25 Feb 2026 19:58:11 +0000 Subject: [PATCH 08/39] fix format in config parser --- code/bngblaster/src/bbl_config.c | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/code/bngblaster/src/bbl_config.c b/code/bngblaster/src/bbl_config.c index 83a09af1..3bc27e3a 100644 --- a/code/bngblaster/src/bbl_config.c +++ b/code/bngblaster/src/bbl_config.c @@ -976,7 +976,6 @@ json_parse_network_interface(json_t *network_interface, bbl_network_config_s *ne } else if(strcmp(s, "broadcast") == 0) { network_config->ospfv2_type = OSPF_INTERFACE_BROADCAST; } else { - return false; } } else { @@ -2016,7 +2015,7 @@ json_parse_isis_config(json_t *isis, isis_config_s *isis_config) for(i = 0; i < isis_config->sr_algo_count; i++) { sub = json_array_get(value, i); if(json_is_number(sub)) { - isis_config->sr_algo[i] = json_number_value(sub); + isis_config->sr_algo[i] = json_number_value(sub); } } } else if(json_is_number(value)) { From 68dc984f59d64a9ad9923b31869a103f50cd2d46 Mon Sep 17 00:00:00 2001 From: Christian Giese Date: Wed, 25 Feb 2026 20:26:36 +0000 Subject: [PATCH 09/39] add config to change tun name (#375) --- code/bngblaster/src/bbl_config.c | 10 +++++++++- code/bngblaster/src/bbl_ctx.h | 1 + code/bngblaster/src/bbl_tun.c | 2 +- docsrc/sources/configuration/interfaces.rst | 5 ++++- schemas/bngblaster-config.json | 4 ++++ 5 files changed, 19 insertions(+), 3 deletions(-) diff --git a/code/bngblaster/src/bbl_config.c b/code/bngblaster/src/bbl_config.c index 3bc27e3a..d8e2e18d 100644 --- a/code/bngblaster/src/bbl_config.c +++ b/code/bngblaster/src/bbl_config.c @@ -4117,7 +4117,7 @@ json_parse_config(json_t *root) const char *schema[] = { "io-mode", "io-slots", "io-burst", "qdisc-bypass", - "tx-interval", "rx-interval", "tx-threads", + "tx-interval", "rx-interval", "tx-threads", "tun-name", "rx-threads", "capture-include-streams", "mac-modifier", "lag", "network", "access", "a10nsp", "links", "a10nsp-dynamic" }; @@ -4190,6 +4190,13 @@ json_parse_config(json_t *root) if(value) { g_ctx->config.a10nsp_dynamic = json_boolean_value(value); } + if(json_unpack(section, "{s:s}", "tun-name", &s) == 0) { + if(strlen(s) > 10) { + fprintf(stderr, "JSON config error: Invalid value for interfaces->tun-name (string length > 10)\n"); + return false; + } + g_ctx->config.tun_name = strdup(s); + } /* LAG Configuration Section */ sub = json_object_get(section, "lag"); if(json_is_array(sub)) { @@ -4668,6 +4675,7 @@ bbl_config_init_defaults() g_ctx->config.io_burst = 256; g_ctx->config.io_max_stream_len = 9000; g_ctx->config.qdisc_bypass = true; + g_ctx->config.tun_name = "bbl"; g_ctx->config.sessions = 1; g_ctx->config.sessions_max_outstanding = 800; g_ctx->config.sessions_start_period_ns = 2500000; /* 400/s */ diff --git a/code/bngblaster/src/bbl_ctx.h b/code/bngblaster/src/bbl_ctx.h index 6106f9eb..5a358dce 100644 --- a/code/bngblaster/src/bbl_ctx.h +++ b/code/bngblaster/src/bbl_ctx.h @@ -161,6 +161,7 @@ typedef struct bbl_ctx_ uint8_t tx_threads; uint8_t rx_threads; + char *tun_name; char *json_report_filename; bool json_report_sessions; /* Include sessions */ bool json_report_streams; /* Include streams */ diff --git a/code/bngblaster/src/bbl_tun.c b/code/bngblaster/src/bbl_tun.c index 3c8ee0c4..03ba1572 100644 --- a/code/bngblaster/src/bbl_tun.c +++ b/code/bngblaster/src/bbl_tun.c @@ -217,7 +217,7 @@ bbl_tun_session_init(bbl_session_s *session) char dev[IFNAMSIZ]; if(!session->access_config->tun) return true; - snprintf(dev, sizeof(dev), "bbl%d", session->session_id); + snprintf(dev, sizeof(dev), "%s%d", g_ctx->config.tun_name, session->session_id); session->tun_dev = strdup(dev); session->tun_fd = bbl_tun_add(session->tun_dev, IFF_TUN|IFF_NO_PI); diff --git a/docsrc/sources/configuration/interfaces.rst b/docsrc/sources/configuration/interfaces.rst index e8c638a4..285c77ff 100644 --- a/docsrc/sources/configuration/interfaces.rst +++ b/docsrc/sources/configuration/interfaces.rst @@ -46,4 +46,7 @@ | | | allows to run multiple BNG Blaster instances with disjoint session | | | | MAC addresses. | | | | Default: 0 | -+-----------------------------------+----------------------------------------------------------------------+ \ No newline at end of file ++-----------------------------------+----------------------------------------------------------------------+ +| **tun-name** | | TUN interface name prefix (``). | +| | | Default: bbl (bbl1, bbl2, ...) | ++-----------------------------------+----------------------------------------------------------------------+ diff --git a/schemas/bngblaster-config.json b/schemas/bngblaster-config.json index d5d5d417..aff2a2d6 100644 --- a/schemas/bngblaster-config.json +++ b/schemas/bngblaster-config.json @@ -72,6 +72,10 @@ "minimum": 0, "maximum": 255 }, + "tun-name": { + "type": "string", + "description": "TUN interface name prefix" + }, "links": { "oneOf": [ { From 0932515ce638e8b9d4c3148ad2a3dca293b8f98f Mon Sep 17 00:00:00 2001 From: Christian Giese Date: Thu, 26 Feb 2026 13:27:08 +0000 Subject: [PATCH 10/39] add IO modes to schema --- schemas/bngblaster-config.json | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/schemas/bngblaster-config.json b/schemas/bngblaster-config.json index aff2a2d6..ed32d2dc 100644 --- a/schemas/bngblaster-config.json +++ b/schemas/bngblaster-config.json @@ -11,7 +11,13 @@ "io-mode": { "type": "string", "description": "IO mode", - "default": "packet_mmap_raw" + "default": "packet_mmap_raw", + "enum": [ + "packet_mmap_raw", + "packet_mmap", + "raw", + "dpdk" + ] }, "io-slots": { "type": "integer", From 8815de3bf63611693c6925bcac08e32f0ad6751c Mon Sep 17 00:00:00 2001 From: Christian Giese Date: Thu, 26 Feb 2026 10:16:44 +0000 Subject: [PATCH 11/39] add stream iterators/counts --- code/bngblaster/src/bbl_config.c | 41 ++++- code/bngblaster/src/bbl_stream.c | 192 ++++++++++++----------- code/bngblaster/src/bbl_stream.h | 15 +- docsrc/sources/configuration/streams.rst | 17 ++ docsrc/sources/streams.rst | 60 ++++++- 5 files changed, 226 insertions(+), 99 deletions(-) diff --git a/code/bngblaster/src/bbl_config.c b/code/bngblaster/src/bbl_config.c index d8e2e18d..d28ea96f 100644 --- a/code/bngblaster/src/bbl_config.c +++ b/code/bngblaster/src/bbl_config.c @@ -2478,9 +2478,10 @@ json_parse_stream(json_t *stream, bbl_stream_config_s *stream_config) const char *schema[] = { "name", "stream-group-id", "type", "autostart", "direction", "network-interface", "a10nsp-interface", - "source-port", "destination-port", "length", "ttl", + "source-port", "source-port-max", "source-port-step", + "destination-port", "destination-port-max", "destination-port-step", "priority", "vlan-priority", "inner-vlan-priority", - "pps", "bps", "Kbps", "Mbps", + "pps", "bps", "Kbps", "Mbps", "length", "ttl", "count", "pps-upstream", "bps-upstream", "Kbps-upstream", "Mbps-upstream", "Gbps", "max-packets", "start-delay", "ldp-ipv4-lookup-address", "ldp-ipv6-lookup-address", @@ -2567,12 +2568,33 @@ json_parse_stream(json_t *stream, bbl_stream_config_s *stream_config) return false; } + JSON_OBJ_GET_NUMBER(stream, value, "stream", "count", 1, 65535); + if(value) { + stream_config->count = json_number_value(value); + } else { + stream_config->count = 1; + } JSON_OBJ_GET_NUMBER(stream, value, "stream", "source-port", 0, 65535); if(value) { stream_config->src_port = json_number_value(value); } else { stream_config->src_port = BBL_UDP_PORT; } + stream_config->src_port_min = stream_config->src_port; + JSON_OBJ_GET_NUMBER(stream, value, "stream", "source-port-step", 0, 65535); + if(value) { + stream_config->src_port_step = json_number_value(value); + } + JSON_OBJ_GET_NUMBER(stream, value, "stream", "source-port-max", 0, 65535); + if(value) { + stream_config->src_port_max = json_number_value(value); + } else { + stream_config->src_port_max = 65535; + } + if(stream_config->src_port_min > stream_config->src_port_max) { + fprintf(stderr, "JSON config error: Invalid value for stream->source-port (source-port > source-port-max)\n"); + return false; + } JSON_OBJ_GET_NUMBER(stream, value, "stream", "destination-port", 0, 65535); if(value) { @@ -2580,6 +2602,21 @@ json_parse_stream(json_t *stream, bbl_stream_config_s *stream_config) } else { stream_config->dst_port = BBL_UDP_PORT; } + stream_config->dst_port_min = stream_config->dst_port; + JSON_OBJ_GET_NUMBER(stream, value, "stream", "destination-port-step", 0, 65535); + if(value) { + stream_config->dst_port_step = json_number_value(value); + } + JSON_OBJ_GET_NUMBER(stream, value, "stream", "destination-port-max", 0, 65535); + if(value) { + stream_config->dst_port_max = json_number_value(value); + } else { + stream_config->dst_port_max = 65535; + } + if(stream_config->dst_port_min > stream_config->dst_port_max) { + fprintf(stderr, "JSON config error: Invalid value for stream->destination-port (destination-port > destination-port-max)\n"); + return false; + } JSON_OBJ_GET_NUMBER(stream, value, "stream", "length", 76, 9000); if(value) { diff --git a/code/bngblaster/src/bbl_stream.c b/code/bngblaster/src/bbl_stream.c index 0d2736db..c9f4e876 100644 --- a/code/bngblaster/src/bbl_stream.c +++ b/code/bngblaster/src/bbl_stream.c @@ -124,8 +124,8 @@ bbl_stream_build_access_pppoe_packet(bbl_stream_s *stream) eth.type = ETH_TYPE_PPPOE_SESSION; eth.next = &pppoe; pppoe.session_id = session->pppoe_session_id; - udp.src = config->src_port; - udp.dst = config->dst_port; + udp.src = stream->src_port; + udp.dst = stream->dst_port; udp.protocol = UDP_PROTOCOL_BBL; udp.next = &bbl; bbl.type = stream->type; @@ -294,21 +294,12 @@ bbl_stream_build_a10nsp_pppoe_packet(bbl_stream_s *stream) eth.src = session->client_mac; eth.qinq = session->access_config->qinq; eth.vlan_outer = session->vlan_key.outer_vlan_id; - udp.src = config->src_port; - udp.dst = config->dst_port; } else { bbl.direction = BBL_DIRECTION_DOWN; eth.dst = session->client_mac; eth.src = session->server_mac; eth.qinq = a10nsp_interface->qinq; eth.vlan_outer = a10nsp_session->s_vlan; - if(stream->reverse) { - udp.src = config->dst_port; - udp.dst = config->src_port; - } else { - udp.src = config->src_port; - udp.dst = config->dst_port; - } } eth.vlan_inner = session->vlan_key.inner_vlan_id; eth.vlan_three = session->access_third_vlan; @@ -318,6 +309,8 @@ bbl_stream_build_a10nsp_pppoe_packet(bbl_stream_s *stream) eth.next = &pppoe; pppoe.session_id = session->pppoe_session_id; udp.protocol = UDP_PROTOCOL_BBL; + udp.src = stream->src_port; + udp.dst = stream->dst_port; udp.next = &bbl; bbl.type = stream->type; bbl.sub_type = stream->sub_type; @@ -437,27 +430,20 @@ bbl_stream_build_a10nsp_ipoe_packet(bbl_stream_s *stream) eth.src = session->client_mac; eth.qinq = session->access_config->qinq; eth.vlan_outer = session->vlan_key.outer_vlan_id; - udp.src = config->src_port; - udp.dst = config->dst_port; } else { bbl.direction = BBL_DIRECTION_DOWN; eth.dst = session->client_mac; eth.src = session->server_mac; eth.qinq = a10nsp_interface->qinq; eth.vlan_outer = a10nsp_session->s_vlan; - if(stream->reverse) { - udp.src = config->dst_port; - udp.dst = config->src_port; - } else { - udp.src = config->src_port; - udp.dst = config->dst_port; - } } eth.vlan_inner = session->vlan_key.inner_vlan_id; eth.vlan_three = session->access_third_vlan; eth.vlan_outer_priority = config->vlan_priority; eth.vlan_inner_priority = config->vlan_inner_priority; udp.protocol = UDP_PROTOCOL_BBL; + udp.src = stream->src_port; + udp.dst = stream->dst_port; udp.next = &bbl; bbl.type = stream->type; bbl.sub_type = stream->sub_type; @@ -589,9 +575,8 @@ bbl_stream_build_access_ipoe_packet(bbl_stream_s *stream) eth.vlan_three = session->access_third_vlan; eth.vlan_outer_priority = config->vlan_priority; eth.vlan_inner_priority = config->vlan_inner_priority; - - udp.src = config->src_port; - udp.dst = config->dst_port; + udp.src = stream->src_port; + udp.dst = stream->dst_port; udp.protocol = UDP_PROTOCOL_BBL; udp.next = &bbl; bbl.type = stream->type; @@ -742,16 +727,9 @@ bbl_stream_build_network_packet(bbl_stream_s *stream) mpls2.ttl = config->tx_mpls2_ttl; } } - - if(stream->reverse) { - udp.src = config->dst_port; - udp.dst = config->src_port; - } else { - udp.src = config->src_port; - udp.dst = config->dst_port; - } - udp.protocol = UDP_PROTOCOL_BBL; + udp.src = stream->src_port; + udp.dst = stream->dst_port; udp.next = &bbl; bbl.type = stream->type; bbl.sub_type = stream->sub_type; @@ -917,14 +895,9 @@ bbl_stream_build_l2tp_packet(bbl_stream_s *stream) l2tp.session_id = l2tp_session->peer_session_id; l2tp.with_length = l2tp_tunnel->server->data_length; l2tp.with_offset = l2tp_tunnel->server->data_offset; - if(stream->reverse) { - udp.src = config->dst_port; - udp.dst = config->src_port; - } else { - udp.src = config->src_port; - udp.dst = config->dst_port; - } udp.protocol = UDP_PROTOCOL_BBL; + udp.src = stream->src_port; + udp.dst = stream->dst_port; udp.next = &bbl; bbl.type = BBL_TYPE_UNICAST; bbl.sub_type = stream->sub_type; @@ -1961,10 +1934,30 @@ bbl_stream_session_add(bbl_stream_config_s *config, bbl_session_s *session) LOG(ERROR, "Failed to add stream %s (downstream) because of missing interface\n", config->name); return false; } - if(stream_up && stream_down) { - stream_up->reverse = stream_down; - stream_down->reverse = stream_up; - } + } + if(stream_up) { + stream_up->src_port = config->src_port; + stream_up->dst_port = config->dst_port; + } + if(stream_up && stream_down) { + stream_up->reverse = stream_down; + stream_down->reverse = stream_up; + stream_down->src_port = stream_up->dst_port; + stream_down->dst_port = stream_up->src_port; + } else if(stream_down) { + stream_down->src_port = config->src_port; + stream_down->dst_port = config->dst_port; + } + /* Iterate layer 4 ports */ + if((config->src_port_max - config->src_port_step) < config->src_port) { + config->src_port = config->src_port_min; + } else { + config->src_port += config->src_port_step; + } + if((config->dst_port_max - config->dst_port_step) < config->dst_port) { + config->dst_port = config->dst_port_min; + } else { + config->dst_port += config->dst_port_step; } return true; } @@ -2017,8 +2010,10 @@ bbl_stream_session_init(bbl_session_s *session) config = g_ctx->config.stream_config; while(config) { if(config->stream_group_id == session->streams.group_id) { - if(!bbl_stream_session_add(config, session)) { - return false; + for(int i=0; i < config->count; i++) { + if(!bbl_stream_session_add(config, session)) { + return false; + } } } config = config->next; @@ -2051,45 +2046,63 @@ bbl_stream_init() { } if(config->direction & BBL_DIRECTION_DOWN) { - stream = calloc(1, sizeof(bbl_stream_s)); - stream->enabled = config->autostart; - stream->endpoint = &g_endpoint; - stream->flow_id = g_ctx->flow_id++; - stream->flow_seq = 1; - stream->tx_first_seq = 1; - stream->config = config; - stream->pps = config->pps; - stream->type = BBL_TYPE_UNICAST; - stream->sub_type = config->type; - if(config->type == BBL_SUB_TYPE_IPV4) { - /* All IPv4 multicast addresses start with 1110 */ - if((config->ipv4_destination_address & htobe32(0xf0000000)) == htobe32(0xe0000000)) { - stream->enabled = true; - stream->endpoint = &(g_ctx->multicast_endpoint); - stream->type = BBL_TYPE_MULTICAST; + for(int i=0; i < config->count; i++) { + stream = calloc(1, sizeof(bbl_stream_s)); + stream->enabled = config->autostart; + stream->endpoint = &g_endpoint; + stream->flow_id = g_ctx->flow_id++; + stream->flow_seq = 1; + stream->tx_first_seq = 1; + stream->config = config; + stream->pps = config->pps; + stream->type = BBL_TYPE_UNICAST; + stream->sub_type = config->type; + if(config->type == BBL_SUB_TYPE_IPV4) { + /* All IPv4 multicast addresses start with 1110 */ + if((config->ipv4_destination_address & htobe32(0xf0000000)) == htobe32(0xe0000000)) { + stream->enabled = true; + stream->endpoint = &(g_ctx->multicast_endpoint); + stream->type = BBL_TYPE_MULTICAST; + } } + stream->direction = BBL_DIRECTION_DOWN; + stream->tx_network_interface = network_interface; + stream->tx_interface = network_interface->interface; + if(network_interface->ldp_adjacency && + (config->ipv4_ldp_lookup_address || + *(uint64_t*)stream->config->ipv6_ldp_lookup_address)) { + stream->ldp_lookup = true; + } + if(config->raw_tcp) { + stream->tcp = true; + } + + stream->src_port = config->src_port; + stream->dst_port = config->dst_port; + + /* Iterate layer 4 ports */ + if((config->src_port_max-config->src_port_step) < config->src_port) { + config->src_port = config->src_port_min; + } else { + config->src_port += config->src_port_step; + } + if((config->dst_port_max-config->dst_port_step) < config->dst_port) { + config->dst_port = config->dst_port_min; + } else { + config->dst_port += config->dst_port_step; + } + + bbl_stream_add(stream); + if(stream->type == BBL_TYPE_MULTICAST) { + LOG(DEBUG, "RAW multicast traffic stream %s added to %s with %0.2lf PPS\n", + config->name, network_interface->name, stream->pps); + } else { + g_ctx->stats.stream_traffic_flows++; + LOG(DEBUG, "RAW traffic stream %s added to %s with %0.2lf PPS\n", + config->name, network_interface->name, stream->pps); + } + g_ctx->stats.raw_traffic_flows++; } - stream->direction = BBL_DIRECTION_DOWN; - stream->tx_network_interface = network_interface; - stream->tx_interface = network_interface->interface; - if(network_interface->ldp_adjacency && - (config->ipv4_ldp_lookup_address || - *(uint64_t*)stream->config->ipv6_ldp_lookup_address)) { - stream->ldp_lookup = true; - } - if(config->raw_tcp) { - stream->tcp = true; - } - bbl_stream_add(stream); - if(stream->type == BBL_TYPE_MULTICAST) { - LOG(DEBUG, "RAW multicast traffic stream %s added to %s with %0.2lf PPS\n", - config->name, network_interface->name, stream->pps); - } else { - g_ctx->stats.stream_traffic_flows++; - LOG(DEBUG, "RAW traffic stream %s added to %s with %0.2lf PPS\n", - config->name, network_interface->name, stream->pps); - } - g_ctx->stats.raw_traffic_flows++; } } config = config->next; @@ -2616,7 +2629,6 @@ bbl_stream_json(bbl_stream_s *stream, bool debug) char *rx_interface = NULL; char *src_address = NULL; char *dst_address = NULL; - uint16_t src_port = 0; uint16_t dst_port = 0; if(!stream) { @@ -2635,14 +2647,7 @@ bbl_stream_json(bbl_stream_s *stream, bool debug) rx_interface = stream->rx_a10nsp_interface->name; } - if (stream->direction == BBL_DIRECTION_DOWN && stream->reverse) { - src_port = stream->config->dst_port; - dst_port = stream->config->src_port; - } else { - src_port = stream->config->src_port; - dst_port = stream->config->dst_port; - } - + dst_port = stream->dst_port; if(stream->ipv6_src && stream->ipv6_dst) { src_address = format_ipv6_address((ipv6addr_t*)stream->ipv6_src); dst_address = format_ipv6_address((ipv6addr_t*)stream->ipv6_dst); @@ -2669,7 +2674,7 @@ bbl_stream_json(bbl_stream_s *stream, bool debug) "active", *(stream->endpoint) == ENDPOINT_ACTIVE ? true : false, "verified", stream->verified, "source-address", src_address, - "source-port", src_port, + "source-port", stream->src_port, "destination-address", dst_address, "destination-port", dst_port, "protocol", stream->tcp ? "tcp" : "udp", @@ -2706,8 +2711,7 @@ bbl_stream_json(bbl_stream_s *stream, bool debug) "rx-mbps-l3", (double)(stream->rate_packets_rx.avg * stream->config->length * 8) / 1000000.0, "tx-first-epoch", stream->tx_first_epoch, "rx-first-epoch", stream->rx_first_epoch, - "rx-last-epoch", stream->rx_last_epoch - ); + "rx-last-epoch", stream->rx_last_epoch); if(stream->rx_interface_changes) { json_object_set_new(root, "rx-interface-changes", json_integer(stream->rx_interface_changes)); diff --git a/code/bngblaster/src/bbl_stream.h b/code/bngblaster/src/bbl_stream.h index 1bfccb91..98c461b3 100644 --- a/code/bngblaster/src/bbl_stream.h +++ b/code/bngblaster/src/bbl_stream.h @@ -33,8 +33,16 @@ typedef struct bbl_stream_config_ uint32_t start_delay; uint32_t setup_interval; + uint16_t count; uint16_t src_port; + uint16_t src_port_min; + uint16_t src_port_step; + uint16_t src_port_max; + uint16_t dst_port; + uint16_t dst_port_min; + uint16_t dst_port_step; + uint16_t dst_port_max; uint16_t length; uint8_t priority; /* IPv4 TOS or IPv6 TC */ @@ -130,14 +138,17 @@ typedef struct bbl_stream_ bool lag; bool ldp_lookup; + double pps; + uint64_t expired; + uint32_t session_version; uint32_t ldp_entry_version; uint32_t ipv4_src; uint32_t ipv4_dst; - double pps; - uint64_t expired; + uint16_t src_port; + uint16_t dst_port; uint16_t tx_len; /* TX length */ uint16_t tx_bbl_hdr_len; /* TX BBL HDR length */ diff --git a/docsrc/sources/configuration/streams.rst b/docsrc/sources/configuration/streams.rst index 911e8370..887baf0f 100644 --- a/docsrc/sources/configuration/streams.rst +++ b/docsrc/sources/configuration/streams.rst @@ -18,16 +18,33 @@ | **autostart** | | Enable stream autostart. | | | | Default: true | +--------------------------------+------------------------------------------------------------------+ +| **count** | | Increment the source port for each instance of this stream. | +| | | Default: 1 Range: 1 - 65535 | ++--------------------------------+------------------------------------------------------------------+ | **source-port** | | Overwrite the default source port. | | | | For bidirectional streams (direction `both`), this is applied | | | | as source port in upstream and destination port in downstream. | | | | Default: 65056 Range: 0 - 65535 | +--------------------------------+------------------------------------------------------------------+ +| **source-port-step** | | Increment the source port for each instance of this stream. | +| | | See chapter Stream Iterators for details. | +| | | Default: 0 Range: 0 - 65535 | ++--------------------------------+------------------------------------------------------------------+ +| **source-port-max** | | Max source port before reset to `destination-port`. | +| | | Default: 65535 Range: 0 - 65535 | ++--------------------------------+------------------------------------------------------------------+ | **destination-port** | | Overwrite the default destination port. | | | | For bidirectional streams (direction `both`), this is applied | | | | as destination port in upstream and source port in downstream. | | | | Default: 65056 Range: 0 - 65535 | +--------------------------------+------------------------------------------------------------------+ +| **destination-port-step** | | Increment the destination port for each instance of this | +| | | stream. See chapter Stream Iterators for details. | +| | | Default: 0 Range: 0 - 65535 | ++--------------------------------+------------------------------------------------------------------+ +| **destination-port-max**. | | Max destination port before reset to `destination-port`. | +| | | Default: 65535 Range: 0 - 65535 | ++--------------------------------+------------------------------------------------------------------+ | **ipv4-df** | | Set IPv4 DF bit. | | | | Default: true | +--------------------------------+------------------------------------------------------------------+ diff --git a/docsrc/sources/streams.rst b/docsrc/sources/streams.rst index f6490869..e37f9895 100644 --- a/docsrc/sources/streams.rst +++ b/docsrc/sources/streams.rst @@ -185,6 +185,64 @@ with the new NAT option to verify NAT TCP streams. For now, TCP flags (SYN, …) are statically set to SYN but this could be adopted if needed. +Stream Iterators +~~~~~~~~~~~~~~~~ + +The BNG Blaster supports several iterators for traffic streams, such as layer 4 ports. + +Source and Destination Ports +^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +The stream configuration options ``source/destination-port-step`` +and ``source/destination-port-max`` enable deterministic port iteration. + +The port incrementor operates as a global iterator across all instances of a stream. +It does not automatically reset for new sessions unless explicitly configured to do so +using the maximum limit. + +**Global Scope:** The incrementor applies to every instance of the stream generated, regardless +of whether those instances are created via the stream count (multiple streams per session) +or across multiple sessions. + +**Step Behavior:** For every new stream instance instantiated, the port is increased +by the port-step configuraton option. + +**Reset Behavior:** The port increments until it exceeds port-max. Once reached, +the port iterator resets to the initial port value and resumes incrementing. + +**Configuration Parameters:** +* ``source/destination-port`` (default: 65056): The starting port number. +* ``source/destination-port-step`` (default: 0): The value by which to increment the port for each new stream instance. +* ``source/destination-port-max`` (default: 65535): The upper limit for the port range. When the current port exceeds this value, it wraps back to source-port. + +**Examples:** +Consider a scenario with 10 sessions, where each session generates 10 instances of a specific stream (total stream count = 100). +The starting source-port is 1000 and source-port-step is 1. + +*Scenario A - Global Unique Ports (Continuous Range):* +If you want every stream across all sessions to have a unique source port, +ensure the source-port-max is high enough to cover the total count. + +Config: source-port-max: 65535 +Result: Ports are assigned sequentially from 1000 to 1099. + +* Session 1: Ports 1000–1009 +* Session 2: Ports 1010–1019 +* ... +* Session 10: Ports 1090–1099 + +*Scenario B - Per-Session Port Reuse (Repeating Range):* +If you want each session to use the same set of source ports, you must configure source-port-max to +force a reset after the stream count for a single session is reached. + +Config: source-port-max: 1009 (Start port 1000 + 9 increments) +Result: Ports are assigned from 1000 to 1009, then reset. + +* Session 1: Ports 1000–1009 (Counter hits max, resets to 1000) +* Session 2: Ports 1000–1009 (Counter hits max, resets to 1000) +* ... +* Session 10: Ports 1000–1009 + Stream Commands ~~~~~~~~~~~~~~~ @@ -558,4 +616,4 @@ jitter calculations. | Nano Seconds | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ -The timestamp 0 means that timestamps are disabled. \ No newline at end of file +The timestamp 0 means that timestamps are disabled. From 7a20d3c2295cbed3916f664735137c11c9ce76bd Mon Sep 17 00:00:00 2001 From: Christian Giese Date: Fri, 27 Feb 2026 07:54:29 +0000 Subject: [PATCH 12/39] DPDK enhancements --- code/bngblaster/src/io/io_dpdk.c | 53 ++++++++++++++++++++------------ 1 file changed, 33 insertions(+), 20 deletions(-) diff --git a/code/bngblaster/src/io/io_dpdk.c b/code/bngblaster/src/io/io_dpdk.c index 789f14cf..36a778ef 100644 --- a/code/bngblaster/src/io/io_dpdk.c +++ b/code/bngblaster/src/io/io_dpdk.c @@ -35,8 +35,9 @@ #include #include -#define NUM_MBUFS 8192 #define MBUF_CACHE_SIZE 256 +#define NUM_MBUFS_RX 131072 +#define NUM_MBUFS_TX 8192 #define BURST_SIZE_RX 256 #define BURST_SIZE_TX 32 @@ -45,7 +46,13 @@ extern bool g_traffic; static struct rte_eth_conf port_conf = { .rxmode = { - .mq_mode = 0, + .mq_mode = RTE_ETH_MQ_RX_RSS, + }, + .rx_adv_conf = { + .rss_conf = { + .rss_key = NULL, + .rss_hf = RTE_ETH_RSS_ETH|RTE_ETH_RSS_IP|RTE_ETH_RSS_TCP|RTE_ETH_RSS_UDP, + }, }, .txmode = { .mq_mode = RTE_ETH_MQ_TX_NONE, @@ -128,14 +135,21 @@ io_dpdk_init() return true; } - char *dpdk_args[2]; + char *dpdk_args[64]; char **argv=dpdk_args; - + int argc = 2; dpdk_args[0] = "bngblaster"; dpdk_args[1] = "-v"; + bbl_link_config_s *link_config = g_ctx->config.link_config; + while(link_config && argc < 62) { + dpdk_args[argc++] = "-a"; + dpdk_args[argc++] = link_config->interface; + link_config = link_config->next; + } + LOG_NOARG(DPDK, "DPDK: init the EAL\n"); - rte_eal_init(2, argv); + rte_eal_init(argc, argv); LOG(DPDK, "DPDK: version %s\n", rte_version()); dpdk_ports = rte_eth_dev_count_avail(); @@ -156,7 +170,10 @@ io_dpdk_init() dev_info.device->name, port_id, dev_info.driver_name); } LOG(DPDK, "DPDK: interface %s (%u) max queues rx %u tx %u\n", - dev_info.device->name, port_id, dev_info.max_rx_queues, dev_info.max_tx_queues); + dev_info.device->name, port_id, dev_info.max_rx_queues, dev_info.max_tx_queues); + + LOG(DPDK, "DPDK: interface %s (%u) RSS offload capa: 0x%lx\n", + dev_info.device->name, port_id, dev_info.flow_type_rss_offloads); } return true; @@ -377,14 +394,11 @@ io_dpdk_thread_rx_run_fn(io_thread_s *thread) assert(io->direction == IO_INGRESS); assert(io->thread); - struct timespec sleep, rem; - sleep.tv_sec = 0; - sleep.tv_nsec = 10; - while(thread->active) { nb_rx = rte_eth_rx_burst(port_id, io->queue, pkts_burst, BURST_SIZE_RX); if(nb_rx == 0) { - nanosleep(&sleep, &rem); + /* rte_pause() optimizes CPU pipeline without context switching */ + rte_pause(); continue; } /* Get RX timestamp */ @@ -423,8 +437,6 @@ io_dpdk_thread_tx_run_fn(io_thread_s *thread) assert(io->direction == IO_EGRESS); assert(io->thread); - - while(thread->active) { nanosleep(&sleep, &rem); if(io->update_streams) { @@ -443,6 +455,7 @@ io_dpdk_thread_tx_run_fn(io_thread_s *thread) } /* Transmit the packet. */ io->mbuf->data_len = slot->packet_len; + io->mbuf->pkt_len = slot->packet_len; memcpy(io->buf, slot->packet, slot->packet_len); if(rte_eth_tx_burst(interface->port_id, io->queue, &io->mbuf, 1) != 0) { io->stats.packets++; @@ -475,6 +488,7 @@ io_dpdk_thread_tx_run_fn(io_thread_s *thread) } /* Transmit the packet. */ io->mbuf->data_len = stream->tx_len; + io->mbuf->pkt_len = stream->tx_len; memcpy(io->buf, stream->tx_buf, stream->tx_len); if(rte_eth_tx_burst(interface->port_id, io->queue, &io->mbuf, 1) != 0) { stream->tx_packets++; @@ -494,9 +508,8 @@ io_dpdk_thread_tx_run_fn(io_thread_s *thread) } } - -bool -io_dpdk_add_mbuf_pool(io_handle_s *io) +static bool +io_dpdk_add_mbuf_pool(io_handle_s *io, unsigned int num_mbufs) { struct rte_mempool *mbuf_pool; char buf[16] = {0}; @@ -507,8 +520,8 @@ io_dpdk_add_mbuf_pool(io_handle_s *io) name = strdup(buf); if(!name) return false; /* very unlikely... */ - mbuf_pool = rte_pktmbuf_pool_create(name, - NUM_MBUFS, MBUF_CACHE_SIZE, 0, + mbuf_pool = rte_pktmbuf_pool_create(name, num_mbufs, + MBUF_CACHE_SIZE, 0, RTE_MBUF_DEFAULT_BUF_SIZE, rte_eth_dev_socket_id(io->interface->port_id)); if(!mbuf_pool) { @@ -624,7 +637,7 @@ io_dpdk_interface_init(bbl_interface_s *interface) config->rx_interval, io, &io_dpdk_rx_job); } io->queue = queue; - if(!io_dpdk_add_mbuf_pool(io)) { + if(!io_dpdk_add_mbuf_pool(io, NUM_MBUFS_RX)) { LOG(ERROR, "DPDK: interface %s (%u) failed to create RX mbuf pool for queue %u\n", interface->name, port_id, queue); return false; @@ -663,7 +676,7 @@ io_dpdk_interface_init(bbl_interface_s *interface) config->tx_interval, io, &io_dpdk_tx_job); } io->queue = queue; - if(!io_dpdk_add_mbuf_pool(io)) { + if(!io_dpdk_add_mbuf_pool(io, NUM_MBUFS_TX)) { LOG(ERROR, "DPDK: interface %s (%u) failed to create TX mbuf pool for queue %u\n", interface->name, port_id, queue); return false; From ab8d74a270f0a42484c176cb8fa1df31b08290cf Mon Sep 17 00:00:00 2001 From: Christian Giese Date: Fri, 27 Feb 2026 07:59:14 +0000 Subject: [PATCH 13/39] DPDK install update --- docsrc/sources/install.rst | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/docsrc/sources/install.rst b/docsrc/sources/install.rst index 30b1997d..659af398 100644 --- a/docsrc/sources/install.rst +++ b/docsrc/sources/install.rst @@ -163,7 +163,7 @@ The following steps are required to build the BNG Blaster with experimental .. note:: - Tested with DPDK version 22.11.5 and Ubuntu 22.04 (LTS)! + Tested with DPDK version 25.11.0 and Ubuntu 22.04 (LTS)! Download and install DPDK: @@ -175,9 +175,9 @@ https://doc.dpdk.org/guides/linux_gsg/build_dpdk.html sudo apt install meson ninja-build # download DPDK - wget https://fast.dpdk.org/rel/dpdk-22.11.5.tar.xz - tar xJf dpdk-22.11.5.tar.xz - cd dpdk-stable-22.11.5 + wget https://fast.dpdk.org/rel/dpdk-25.11.tar.xz + tar xJf dpdk-25.11.tar.xz + cd dpdk-25.11 # build with driver SDK meson -Denable_driver_sdk=true build @@ -202,7 +202,7 @@ If DPDK is installed correctly, cmake should show the following output: -- Build bngblaster with DPDK support -- Found PkgConfig: /usr/bin/pkg-config (found version "1.8.0") -- Checking for module 'libdpdk' - -- Found libdpdk, version 22.11.5 + -- Found libdpdk, version 25.11.0 -- Found DPDK via pkg-config The installed version should now show `dpdk` as new IO mode. From 2af6ecb12ae062956c3d68e9bf1a80c8390f5d8c Mon Sep 17 00:00:00 2001 From: Christian Giese Date: Fri, 27 Feb 2026 14:40:35 +0000 Subject: [PATCH 14/39] API enahncements + add commands API (list all commands) + extend stream-summary + extend command argument schemas --- code/bngblaster/src/bbl_ctrl.c | 306 +++++++++++++++++--------- code/bngblaster/src/bbl_icmp_client.c | 1 - code/bngblaster/src/bbl_stream.c | 193 ++++++++++++---- docs/_sources/api/interfaces.rst.txt | 3 + 4 files changed, 352 insertions(+), 151 deletions(-) diff --git a/code/bngblaster/src/bbl_ctrl.c b/code/bngblaster/src/bbl_ctrl.c index 98c8f6bc..afb7e863 100644 --- a/code/bngblaster/src/bbl_ctrl.c +++ b/code/bngblaster/src/bbl_ctrl.c @@ -30,24 +30,75 @@ extern volatile bool g_monkey; const char *schema_no_args[] = { NULL }; -const char *schema_all_args[] = { +const char *schema_other_args[] = { "interface", "outer-vlan", "inner-vlan", "session-id", "session-group-id", "direction", "reconnect-delay", - "flow-id", "id", "name", "file", "reset", "timer", "pps", + "flow-id", "id", "name", "file", "reset", "pps", "group", "group-iter", "group-count", "source1", "source2", "source3", + "username", "password", "agent-remote-id", "agent-circuit-id", + "network-interface", "ipv6-link-local", + NULL +}; +const char *schema_file[] = { + "file", NULL +}; +const char *schema_interface[] = { + "interface", NULL +}; +const char *schema_session_id[] = { + "session-id", "session-group-id", NULL +}; +const char *schema_session_terminate[] = { + "session-id", "session-group-id", "reconnect-delay", NULL +}; +const char *schema_session_direction[] = { + "session-id", "session-group-id", "direction", NULL +}; +const char *schema_stream[] = { + "interface", "outer-vlan", "inner-vlan", + "session-id", "session-group-id", "direction", + "flow-id", "name", "pps", "tcp-flags", "debug", "detail", + "verified-only", "bidirectional-verified-only", + "network-interface", + "flows", "flow-id-min", "flow-id-max", + NULL +}; +const char *schema_bgp[] = { "local-ipv4-address", "peer-ipv4-address", "local-ipv6-address", "peer-ipv6-address", "ipv6-link-local", - "username", "password", "agent-remote-id", "agent-circuit-id", - "instance", "level", "pdu", "lsa", - "tunnel-id", "sessions", "priority", + "file", + NULL +}; +const char *schema_isis[] = { + "instance", "level", "file", "interface", + "priority", "timer", "id", "pdu", + NULL +}; +const char *schema_ospf[] = { + "instance", "level", "file", "lsa", "pdu", + NULL +}; +const char *schema_ldp[] = { + "ldp-instance-id", + "local-ipv4-address", "peer-ipv4-address", + "local-ipv6-address", "peer-ipv6-address", + "file", + NULL +}; +const char *schema_l2tp[] = { + "tunnel-id", "session-id", "sessions", "result-code", "error-code", "error-message", "disconnect-code", "disconnect-protocol", "disconnect-direction", "disconnect-message", - "ldp-instance-id", "tcp-flags", "debug", "detail", - "verified-only", "bidirectional-verified-only", - "network-interface", "keep-address", NULL }; +const char *schema_icmp[] = { + "session-id", "detail", NULL +}; +const char *schema_dhcp[] = { + "session-id", "session-group-id", "keep-address", NULL +}; + static bool bbl_ctrl_schema(json_t *arguments, const char *const schema[]) @@ -198,119 +249,162 @@ struct action { bool thread_safe; }; +static int bbl_ctrl_commands(int fd, uint32_t session_id, json_t *arguments); + static const struct action actions[] = { {"test-info", bbl_ctrl_test_info, schema_no_args, true}, {"test-stop", bbl_ctrl_test_stop, schema_no_args, true}, - {"terminate", bbl_ctrl_terminate, schema_all_args, false}, - {"traffic-start", bbl_ctrl_traffic_start, schema_all_args, false}, - {"traffic-stop", bbl_ctrl_traffic_stop, schema_all_args, false}, - {"stream-start", bbl_stream_ctrl_start, schema_all_args, true}, - {"stream-stop", bbl_stream_ctrl_stop, schema_all_args, true}, - {"stream-stop-verified", bbl_stream_ctrl_stop_verified, schema_all_args, true}, - {"stream-update", bbl_stream_ctrl_update, schema_all_args, true}, - {"session-traffic-start", bbl_session_ctrl_traffic_start, schema_all_args, true}, - {"session-traffic-stop", bbl_session_ctrl_traffic_stop, schema_all_args, true}, - {"multicast-traffic-start", bbl_ctrl_multicast_traffic_start, schema_all_args, false}, - {"multicast-traffic-stop", bbl_ctrl_multicast_traffic_stop, schema_all_args, false}, - {"stream-info", bbl_stream_ctrl_info, schema_all_args, true}, - {"stream-stats", bbl_stream_ctrl_stats, schema_all_args, true}, - {"stream-reset", bbl_stream_ctrl_reset, schema_all_args, false}, - {"stream-summary", bbl_stream_ctrl_summary, schema_all_args, true}, + {"terminate", bbl_ctrl_terminate, schema_session_terminate, false}, + {"traffic-start", bbl_ctrl_traffic_start, schema_no_args, false}, + {"traffic-stop", bbl_ctrl_traffic_stop, schema_no_args, false}, + {"stream-start", bbl_stream_ctrl_start, schema_stream, true}, + {"stream-stop", bbl_stream_ctrl_stop, schema_stream, true}, + {"stream-stop-verified", bbl_stream_ctrl_stop_verified, schema_stream, true}, + {"stream-update", bbl_stream_ctrl_update, schema_stream, true}, + {"session-traffic-start", bbl_session_ctrl_traffic_start, schema_session_direction, true}, + {"session-traffic-stop", bbl_session_ctrl_traffic_stop, schema_session_direction, true}, + {"multicast-traffic-start", bbl_ctrl_multicast_traffic_start, schema_no_args, false}, + {"multicast-traffic-stop", bbl_ctrl_multicast_traffic_stop, schema_no_args, false}, + {"stream-info", bbl_stream_ctrl_info, schema_other_args, true}, + {"stream-stats", bbl_stream_ctrl_stats, schema_other_args, true}, + {"stream-reset", bbl_stream_ctrl_reset, schema_other_args, false}, + {"stream-summary", bbl_stream_ctrl_summary, schema_other_args, true}, {"streams-pending", bbl_stream_ctrl_pending, schema_no_args, true}, - {"session-traffic", bbl_session_ctrl_traffic_stats, schema_all_args, true}, - {"session-traffic-reset", bbl_session_ctrl_traffic_reset, schema_all_args, false}, + {"session-traffic", bbl_session_ctrl_traffic_stats, schema_other_args, true}, + {"session-traffic-reset", bbl_session_ctrl_traffic_reset, schema_other_args, false}, {"interfaces", bbl_interface_ctrl, schema_no_args, true}, {"access-interfaces", bbl_access_ctrl_interfaces, schema_no_args, true}, {"network-interfaces", bbl_network_ctrl_interfaces, schema_no_args, true}, {"a10nsp-interfaces", bbl_a10nsp_ctrl_interfaces, schema_no_args, true}, - {"interface-enable", bbl_interface_ctrl_enable, schema_all_args, false}, - {"interface-disable", bbl_interface_ctrl_disable, schema_all_args, false}, + {"interface-enable", bbl_interface_ctrl_enable, schema_interface, false}, + {"interface-disable", bbl_interface_ctrl_disable, schema_interface, false}, {"sessions-pending", bbl_session_ctrl_pending, schema_no_args, true}, - {"session-info", bbl_session_ctrl_info, schema_all_args, true}, + {"session-info", bbl_session_ctrl_info, schema_session_id, true}, {"session-counters", bbl_session_ctrl_counters, schema_no_args, true}, - {"session-start", bbl_session_ctrl_start, schema_all_args, false}, - {"session-stop", bbl_session_ctrl_stop, schema_all_args, false}, - {"session-restart", bbl_session_ctrl_restart, schema_all_args, false}, - {"session-streams", bbl_stream_ctrl_session, schema_all_args, true}, - {"igmp-join", bbl_igmp_ctrl_join, schema_all_args, false}, - {"igmp-join-iter", bbl_igmp_ctrl_join_iter, schema_all_args, false}, - {"igmp-leave", bbl_igmp_ctrl_leave, schema_all_args, false}, - {"igmp-leave-all", bbl_igmp_ctrl_leave_all, schema_all_args, false}, - {"igmp-info", bbl_igmp_ctrl_info, schema_all_args, true}, - {"zapping-start", bbl_igmp_ctrl_zapping_start, schema_all_args, true}, - {"zapping-stop", bbl_igmp_ctrl_zapping_stop, schema_all_args, false}, - {"zapping-stats", bbl_igmp_ctrl_zapping_stats, schema_all_args, true}, - {"li-flows", bbl_li_ctrl_flows, schema_all_args, true}, - {"l2tp-tunnels", bbl_l2tp_ctrl_tunnels, schema_all_args, true}, - {"l2tp-sessions", bbl_l2tp_ctrl_sessions, schema_all_args, true}, - {"l2tp-csurq", bbl_l2tp_ctrl_csurq, schema_all_args, false}, - {"l2tp-tunnel-terminate", bbl_l2tp_ctrl_tunnel_terminate, schema_all_args, false}, - {"l2tp-session-terminate", bbl_l2tp_ctrl_session_terminate, schema_all_args, false}, - {"ipcp-open", bbl_session_ctrl_ipcp_open, schema_all_args, false}, - {"ipcp-close", bbl_session_ctrl_ipcp_close, schema_all_args, false}, - {"ip6cp-open", bbl_session_ctrl_ip6cp_open, schema_all_args, false}, - {"ip6cp-close", bbl_session_ctrl_ip6cp_close, schema_all_args, false}, - {"isis-adjacencies", isis_ctrl_adjacencies, schema_all_args, true}, - {"isis-database", isis_ctrl_database, schema_all_args, true}, - {"isis-load-mrt", isis_ctrl_load_mrt, schema_all_args, false}, - {"isis-lsp-update", isis_ctrl_lsp_update, schema_all_args, false}, - {"isis-lsp-purge", isis_ctrl_lsp_purge, schema_all_args, false}, - {"isis-lsp-flap", isis_ctrl_lsp_flap, schema_all_args, false}, - {"isis-teardown", isis_ctrl_teardown, schema_all_args, false}, - {"isis-update-priority", isis_ctrl_update_priority, schema_all_args, false}, - {"ospf-interfaces", ospf_ctrl_interfaces, schema_all_args, true}, - {"ospf-neighbors", ospf_ctrl_neighbors, schema_all_args, true}, - {"ospf-database", ospf_ctrl_database, schema_all_args, true}, - {"ospf-load-mrt", ospf_ctrl_load_mrt, schema_all_args, false}, - {"ospf-lsa-update", ospf_ctrl_lsa_update, schema_all_args, false}, - {"ospf-pdu-update", ospf_ctrl_pdu_update, schema_all_args, false}, - {"ospf-teardown", ospf_ctrl_teardown, schema_all_args, false}, - {"bgp-sessions", bgp_ctrl_sessions, schema_all_args, true}, - {"bgp-disconnect", bgp_ctrl_disconnect, schema_all_args, false}, - {"bgp-teardown", bgp_ctrl_teardown, schema_all_args, true}, - {"bgp-raw-update-list", bgp_ctrl_raw_update_list, schema_all_args, true}, - {"bgp-raw-update", bgp_ctrl_raw_update, schema_all_args, false}, - {"ldp-adjacencies", ldp_ctrl_adjacencies, schema_all_args, true}, - {"ldp-sessions", ldp_ctrl_sessions, schema_all_args, true}, - {"ldp-database", ldb_ctrl_database, schema_all_args, true}, - {"ldp-disconnect", ldp_ctrl_disconnect, schema_all_args, false}, - {"ldp-teardown", ldp_ctrl_teardown, schema_all_args, true}, - {"ldp-raw-update-list", ldp_ctrl_raw_update_list, schema_all_args, true}, - {"ldp-raw-update", ldp_ctrl_raw_update, schema_all_args, false}, - {"monkey-start", bbl_ctrl_monkey_start, schema_all_args, false}, - {"monkey-stop", bbl_ctrl_monkey_stop, schema_all_args, false}, - {"lag-info", bbl_lag_ctrl_info, schema_all_args, true}, - {"icmp-clients", bbl_icmp_client_ctrl, schema_all_args, true}, - {"icmp-clients-start", bbl_icmp_client_ctrl_start, schema_all_args, false}, - {"icmp-clients-stop", bbl_icmp_client_ctrl_stop, schema_all_args, false}, - {"http-clients", bbl_http_client_ctrl, schema_all_args, true}, - {"http-clients-start", bbl_http_client_ctrl_start, schema_all_args, false}, - {"http-clients-stop", bbl_http_client_ctrl_stop, schema_all_args, false}, - {"arp-clients", bbl_arp_client_ctrl, schema_all_args, true}, - {"arp-clients-reset", bbl_arp_client_ctrl_reset, schema_all_args, false}, - {"cfm-cc-start", bbl_cfm_ctrl_cc_start, schema_all_args, false}, - {"cfm-cc-stop", bbl_cfm_ctrl_cc_stop, schema_all_args, false}, - {"cfm-cc-rdi-on", bbl_cfm_ctrl_cc_rdi_on, schema_all_args, false}, - {"cfm-cc-rdi-off", bbl_cfm_ctrl_cc_rdi_off, schema_all_args, false}, - {"lcp-echo-request-ignore", bbl_session_ctrl_lcp_echo_request_ignore, schema_all_args, true}, - {"lcp-echo-request-accept", bbl_session_ctrl_lcp_echo_request_accept, schema_all_args, true}, - {"session-update", bbl_session_ctrl_update, schema_all_args, false}, - {"pcap-start", pcapng_ctrl_start, schema_all_args, false}, + {"session-start", bbl_session_ctrl_start, schema_session_id, false}, + {"session-stop", bbl_session_ctrl_stop, schema_session_id, false}, + {"session-restart", bbl_session_ctrl_restart, schema_session_terminate, false}, + {"session-streams", bbl_stream_ctrl_session, schema_session_id, true}, + {"igmp-join", bbl_igmp_ctrl_join, schema_other_args, false}, + {"igmp-join-iter", bbl_igmp_ctrl_join_iter, schema_other_args, false}, + {"igmp-leave", bbl_igmp_ctrl_leave, schema_other_args, false}, + {"igmp-leave-all", bbl_igmp_ctrl_leave_all, schema_other_args, false}, + {"igmp-info", bbl_igmp_ctrl_info, schema_other_args, true}, + {"zapping-start", bbl_igmp_ctrl_zapping_start, schema_other_args, true}, + {"zapping-stop", bbl_igmp_ctrl_zapping_stop, schema_other_args, false}, + {"zapping-stats", bbl_igmp_ctrl_zapping_stats, schema_other_args, true}, + {"li-flows", bbl_li_ctrl_flows, schema_no_args, true}, + {"l2tp-tunnels", bbl_l2tp_ctrl_tunnels, schema_other_args, true}, + {"l2tp-sessions", bbl_l2tp_ctrl_sessions, schema_other_args, true}, + {"l2tp-csurq", bbl_l2tp_ctrl_csurq, schema_other_args, false}, + {"l2tp-tunnel-terminate", bbl_l2tp_ctrl_tunnel_terminate, schema_other_args, false}, + {"l2tp-session-terminate", bbl_l2tp_ctrl_session_terminate, schema_other_args, false}, + {"ipcp-open", bbl_session_ctrl_ipcp_open, schema_session_id, false}, + {"ipcp-close", bbl_session_ctrl_ipcp_close, schema_session_id, false}, + {"ip6cp-open", bbl_session_ctrl_ip6cp_open, schema_session_id, false}, + {"ip6cp-close", bbl_session_ctrl_ip6cp_close, schema_session_id, false}, + {"isis-adjacencies", isis_ctrl_adjacencies, schema_isis, true}, + {"isis-database", isis_ctrl_database, schema_isis, true}, + {"isis-load-mrt", isis_ctrl_load_mrt, schema_isis, false}, + {"isis-lsp-update", isis_ctrl_lsp_update, schema_isis, false}, + {"isis-lsp-purge", isis_ctrl_lsp_purge, schema_isis, false}, + {"isis-lsp-flap", isis_ctrl_lsp_flap, schema_isis, false}, + {"isis-teardown", isis_ctrl_teardown, schema_isis, false}, + {"isis-update-priority", isis_ctrl_update_priority, schema_isis, false}, + {"ospf-interfaces", ospf_ctrl_interfaces, schema_ospf, true}, + {"ospf-neighbors", ospf_ctrl_neighbors, schema_ospf, true}, + {"ospf-database", ospf_ctrl_database, schema_ospf, true}, + {"ospf-load-mrt", ospf_ctrl_load_mrt, schema_ospf, false}, + {"ospf-lsa-update", ospf_ctrl_lsa_update, schema_ospf, false}, + {"ospf-pdu-update", ospf_ctrl_pdu_update, schema_ospf, false}, + {"ospf-teardown", ospf_ctrl_teardown, schema_ospf, false}, + {"bgp-sessions", bgp_ctrl_sessions, schema_bgp, true}, + {"bgp-disconnect", bgp_ctrl_disconnect, schema_bgp, false}, + {"bgp-teardown", bgp_ctrl_teardown, schema_bgp, true}, + {"bgp-raw-update-list", bgp_ctrl_raw_update_list, schema_bgp, true}, + {"bgp-raw-update", bgp_ctrl_raw_update, schema_bgp, false}, + {"ldp-adjacencies", ldp_ctrl_adjacencies, schema_ldp, true}, + {"ldp-sessions", ldp_ctrl_sessions, schema_ldp, true}, + {"ldp-database", ldb_ctrl_database, schema_ldp, true}, + {"ldp-disconnect", ldp_ctrl_disconnect, schema_ldp, false}, + {"ldp-teardown", ldp_ctrl_teardown, schema_ldp, true}, + {"ldp-raw-update-list", ldp_ctrl_raw_update_list, schema_ldp, true}, + {"ldp-raw-update", ldp_ctrl_raw_update, schema_ldp, false}, + {"monkey-start", bbl_ctrl_monkey_start, schema_no_args, false}, + {"monkey-stop", bbl_ctrl_monkey_stop, schema_no_args, false}, + {"lag-info", bbl_lag_ctrl_info, schema_interface, true}, + {"icmp-clients", bbl_icmp_client_ctrl, schema_icmp, true}, + {"icmp-clients-start", bbl_icmp_client_ctrl_start, schema_icmp, false}, + {"icmp-clients-stop", bbl_icmp_client_ctrl_stop, schema_icmp, false}, + {"http-clients", bbl_http_client_ctrl, schema_other_args, true}, + {"http-clients-start", bbl_http_client_ctrl_start, schema_other_args, false}, + {"http-clients-stop", bbl_http_client_ctrl_stop, schema_other_args, false}, + {"arp-clients", bbl_arp_client_ctrl, schema_other_args, true}, + {"arp-clients-reset", bbl_arp_client_ctrl_reset, schema_other_args, false}, + {"cfm-cc-start", bbl_cfm_ctrl_cc_start, schema_other_args, false}, + {"cfm-cc-stop", bbl_cfm_ctrl_cc_stop, schema_other_args, false}, + {"cfm-cc-rdi-on", bbl_cfm_ctrl_cc_rdi_on, schema_other_args, false}, + {"cfm-cc-rdi-off", bbl_cfm_ctrl_cc_rdi_off, schema_other_args, false}, + {"lcp-echo-request-ignore", bbl_session_ctrl_lcp_echo_request_ignore, schema_session_id, true}, + {"lcp-echo-request-accept", bbl_session_ctrl_lcp_echo_request_accept, schema_session_id, true}, + {"session-update", bbl_session_ctrl_update, schema_other_args, false}, + {"pcap-start", pcapng_ctrl_start, schema_file, false}, {"pcap-stop", pcapng_ctrl_stop, schema_no_args, false}, - {"dhcp-start", bbl_dhcp_ctrl_start, schema_all_args, false}, - {"dhcp-stop", bbl_dhcp_ctrl_stop, schema_all_args, false}, - {"dhcp-release", bbl_dhcp_ctrl_release, schema_all_args, false}, - /* DEPRECATED */ - {"session-traffic-enabled", bbl_session_ctrl_traffic_start, schema_all_args, true}, - {"session-traffic-disabled", bbl_session_ctrl_traffic_stop, schema_all_args, true}, - {"stream-traffic-enabled", bbl_stream_ctrl_start, schema_all_args, true}, - {"stream-traffic-start", bbl_stream_ctrl_start, schema_all_args, true}, - {"stream-traffic-disabled", bbl_stream_ctrl_stop, schema_all_args, true}, - {"stream-traffic-stop", bbl_stream_ctrl_stop, schema_all_args, true}, + {"dhcp-start", bbl_dhcp_ctrl_start, schema_dhcp, false}, + {"dhcp-stop", bbl_dhcp_ctrl_stop, schema_dhcp, false}, + {"dhcp-release", bbl_dhcp_ctrl_release, schema_dhcp, false}, + /* DEPRECATED/HIDDERN COMMANDS */ + {"commands", bbl_ctrl_commands, schema_no_args, true}, + {"session-traffic-enabled", bbl_session_ctrl_traffic_start, schema_session_direction, true}, + {"session-traffic-disabled", bbl_session_ctrl_traffic_stop, schema_session_direction, true}, + {"stream-traffic-enabled", bbl_stream_ctrl_start, schema_stream, true}, + {"stream-traffic-start", bbl_stream_ctrl_start, schema_stream, true}, + {"stream-traffic-disabled", bbl_stream_ctrl_stop, schema_stream, true}, + {"stream-traffic-stop", bbl_stream_ctrl_stop, schema_stream, true}, /* END */ {NULL, NULL, NULL, false}, }; +int +bbl_ctrl_commands(int fd, uint32_t session_id __attribute__((unused)), json_t *arguments __attribute__((unused))) +{ + int result = 0; + json_t *jobj; + json_t *jobj_c_array = json_array(); + json_t *jobj_a_array = json_array(); + const char **schema; + + int i = 0; + int i2; + while(actions[i].name != NULL && strcmp(actions[i].name, "commands") != 0) { + schema = actions[i].schema; + jobj_a_array = json_array(); + i2 = 0; + while(schema[i2] != NULL) { + json_array_append_new(jobj_a_array, json_string(schema[i2++])); + } + jobj = json_pack("{ss* so*}", + "command", actions[i].name, + "arguments", jobj_a_array + ); + if(jobj) { + json_array_append_new(jobj_c_array, jobj); + } + i++; + } + json_t *root = json_pack("{ss si so*}", + "status", "ok", + "code", 200, + "commands", jobj_c_array); + + if(root) { + result = json_dumpfd(root, fd, 0); + } else { + result = bbl_ctrl_status(fd, "error", 500, "internal error"); + } + return result; +} + static void bbl_ctrl_socket_main(bbl_ctrl_thread_s *ctrl) { diff --git a/code/bngblaster/src/bbl_icmp_client.c b/code/bngblaster/src/bbl_icmp_client.c index a1f3fbcf..f0b050d4 100644 --- a/code/bngblaster/src/bbl_icmp_client.c +++ b/code/bngblaster/src/bbl_icmp_client.c @@ -632,7 +632,6 @@ bbl_icmp_client_ctrl(int fd, uint32_t session_id, json_t *arguments) /* Unpack further arguments */ json_unpack(arguments, "{s:b}", "detail", &detail); - if(session_id) { session = bbl_session_get(session_id); if(session) { diff --git a/code/bngblaster/src/bbl_stream.c b/code/bngblaster/src/bbl_stream.c index c9f4e876..b0edfe26 100644 --- a/code/bngblaster/src/bbl_stream.c +++ b/code/bngblaster/src/bbl_stream.c @@ -2577,46 +2577,25 @@ bbl_streams_enable_filter(bool enabled, int session_group_id, } static json_t * -bbl_stream_summary_json(int session_group_id, const char *name, const char *interface, uint8_t direction) +bbl_stream_summary_json(bbl_stream_s *stream) { - bbl_stream_s *stream = g_ctx->stream_head; - json_t *jobj, *jobj_array; - jobj_array = json_array(); - - while(stream) { - - if(session_group_id >= 0) { - if(!(stream->session && stream->session->session_group_id == session_group_id)) goto NEXT; - } - if(name) { - if(!strcmp(name, stream->config->name) == 0) goto NEXT; - } - if(interface) { - if(!strcmp(interface, stream->tx_interface->name) == 0) goto NEXT; - } - if(!(stream->direction & direction)) goto NEXT; - - jobj = json_pack("{si ss* ss ss ss sb sb sb ss*}", - "flow-id", stream->flow_id, - "name", stream->config->name, - "type", stream_type_string(stream), - "sub-type", stream_sub_type_string(stream), - "direction", stream->direction == BBL_DIRECTION_UP ? "upstream" : "downstream", - "enabled", stream->enabled, - "active", *(stream->endpoint) == ENDPOINT_ACTIVE ? true : false, - "verified", stream->verified, - "interface", stream->tx_interface->name); - if(jobj) { - if(stream->session) { - json_object_set_new(jobj, "session-id", json_integer(stream->session->session_id)); - json_object_set_new(jobj, "session-traffic", json_boolean(stream->session_traffic)); - } - json_array_append_new(jobj_array, jobj); - } -NEXT: - stream = stream->next; - } - return jobj_array; + json_t *jobj; + + jobj = json_pack("{si ss* ss ss ss sb sb sb ss*}", + "flow-id", stream->flow_id, + "name", stream->config->name, + "type", stream_type_string(stream), + "sub-type", stream_sub_type_string(stream), + "direction", stream->direction == BBL_DIRECTION_UP ? "upstream" : "downstream", + "enabled", stream->enabled, + "active", *(stream->endpoint) == ENDPOINT_ACTIVE ? true : false, + "verified", stream->verified, + "interface", stream->tx_interface->name); + if(jobj && stream->session) { + json_object_set_new(jobj, "session-id", json_integer(stream->session->session_id)); + json_object_set_new(jobj, "session-traffic", json_boolean(stream->session_traffic)); + } + return jobj; } json_t * @@ -2849,8 +2828,8 @@ bbl_stream_ctrl_info(int fd, uint32_t session_id __attribute__((unused)), json_t } } -int -bbl_stream_ctrl_summary(int fd, uint32_t session_id __attribute__((unused)), json_t *arguments) +static int +bbl_stream_ctrl_summary_filter(int fd, uint32_t session_id, json_t *arguments) { int result = 0; @@ -2859,8 +2838,13 @@ bbl_stream_ctrl_summary(int fd, uint32_t session_id __attribute__((unused)), jso const char *s = NULL; int session_group_id = -1; + uint8_t direction = BBL_DIRECTION_BOTH; + json_t *jobj, *jobj_array; + bbl_stream_s *stream = g_ctx->stream_head; + bbl_session_s *session; + if(json_unpack(arguments, "{s:i}", "session-group-id", &session_group_id) == 0) { if(session_group_id < 0 || session_group_id > UINT16_MAX) { return bbl_ctrl_status(fd, "error", 400, "invalid session-group-id"); @@ -2880,13 +2864,134 @@ bbl_stream_ctrl_summary(int fd, uint32_t session_id __attribute__((unused)), jso json_unpack(arguments, "{s:s}", "name", &name); json_unpack(arguments, "{s:s}", "interface", &interface); + if(json_unpack(arguments, "{s:i}", "flow-id-start", &session_group_id) == 0) { + if(session_group_id < 0 || session_group_id > UINT16_MAX) { + return bbl_ctrl_status(fd, "error", 400, "invalid session-group-id"); + } + } + + if(session_id) { + session = bbl_session_get(session_id); + if(!session) { + return bbl_ctrl_status(fd, "warning", 404, "session not found"); + } + stream = session->streams.head; + } + + jobj_array = json_array(); + while(stream) { + if(session_group_id >= 0) { + if(!(stream->session && stream->session->session_group_id == session_group_id)) goto NEXT; + } + if(name) { + if(!strcmp(name, stream->config->name) == 0) goto NEXT; + } + if(interface) { + if(!strcmp(interface, stream->tx_interface->name) == 0) goto NEXT; + } + if(!(stream->direction & direction)) goto NEXT; + + jobj = bbl_stream_summary_json(stream); + if(jobj) { + json_array_append_new(jobj_array, jobj); + } else { + json_decref(jobj_array); + return bbl_ctrl_status(fd, "error", 500, "internal error"); + } +NEXT: + if(session) { + stream = stream->session_next; + } else { + stream = stream->next; + } + } + + json_t *root = json_pack("{ss si so*}", + "status", "ok", + "code", 200, + "stream-summary", jobj_array); + + if(root) { + result = json_dumpfd(root, fd, 0); + json_decref(root); + } else { + result = bbl_ctrl_status(fd, "error", 500, "internal error"); + json_decref(jobj_array); + } + return result; +} + +int +bbl_stream_ctrl_summary(int fd, uint32_t session_id, json_t *arguments) +{ + int result = 0; + + int flow_id_min = 0; + int flow_id_max = 0; + int size, i; + uint64_t flow_id; + + json_t *jobj, *jobj_array, *flows; + bbl_stream_s *stream; + + flows = json_object_get(arguments, "flows"); + if(flows) { + if(!json_is_array(flows)) { + return bbl_ctrl_status(fd, "error", 400, "flows must be of type array e.g. [1, 2, 3]"); + } + } else { + if(json_unpack(arguments, "{s:i}", "flow-id-min", &flow_id_min) != 0) { + return bbl_stream_ctrl_summary_filter(fd, session_id, arguments); + } + if(json_unpack(arguments, "{s:i}", "flow-id-max", &flow_id_max) != 0) { + return bbl_ctrl_status(fd, "error", 400, "flow-id-max missing"); + } + if(flow_id_min > flow_id_max) { + return bbl_ctrl_status(fd, "error", 400, "flow-id-min > max"); + } + } + + jobj_array = json_array(); + if(flows) { + size = json_array_size(flows); + for (i = 0; i < size; i++) { + jobj = json_array_get(flows, i); + if(json_is_number(jobj)) { + stream = bbl_stream_index_get(json_number_value(jobj)); + if(stream) { + jobj = bbl_stream_summary_json(stream); + if(jobj) { + json_array_append_new(jobj_array, jobj); + } + } + } + } + } else { + while(flow_id_min <= flow_id_max) { + flow_id = flow_id_min; + stream = bbl_stream_index_get(flow_id); + if(stream) { + jobj = bbl_stream_summary_json(stream); + if(jobj) { + json_array_append_new(jobj_array, jobj); + } + } + flow_id_min++; + } + } + json_t *root = json_pack("{ss si so*}", "status", "ok", "code", 200, - "stream-summary", bbl_stream_summary_json(session_group_id, name, interface, direction)); + "stream-summary", jobj_array); - result = json_dumpfd(root, fd, 0); - json_decref(root); + if(root) { + result = json_dumpfd(root, fd, 0); + json_decref(root); + } else { + result = bbl_ctrl_status(fd, "error", 500, "internal error"); + json_decref(jobj_array); + } return result; } diff --git a/docs/_sources/api/interfaces.rst.txt b/docs/_sources/api/interfaces.rst.txt index 18ee43ae..13bda74a 100644 --- a/docs/_sources/api/interfaces.rst.txt +++ b/docs/_sources/api/interfaces.rst.txt @@ -10,6 +10,9 @@ | **a10nsp-interfaces** | | List all a10nsp interface functions. | +-----------------------------------+----------------------------------------------------------------------+ | **lag-info** | | List all link aggregation (LAG) interfaces. | +| | | | +| | | **Arguments:** | +| | | ``interface`` | +-----------------------------------+----------------------------------------------------------------------+ | **interface-enable** | | Enable interface. | | | | | From 40450c85559507a58168cc43587d926c0cd0c10a Mon Sep 17 00:00:00 2001 From: Christian Giese Date: Mon, 2 Mar 2026 08:49:00 +0100 Subject: [PATCH 15/39] cmd arg schema --- code/bngblaster-cli | 50 ++++++++---- code/bngblaster/src/bbl_ctrl.c | 142 +++++++++++++++++++-------------- 2 files changed, 115 insertions(+), 77 deletions(-) diff --git a/code/bngblaster-cli b/code/bngblaster-cli index e4f77038..8df3e96a 100755 --- a/code/bngblaster-cli +++ b/code/bngblaster-cli @@ -39,36 +39,32 @@ Examples: sys.exit(1) -def main(): - """main function""" +def build_request(argv): request = {} - if(len(sys.argv)) < 3: - usage() - - socket_path = sys.argv[1] - - request["command"] = sys.argv[2] - if(len(sys.argv)) > 4: + request["command"] = argv[2] + if(len(argv)) > 4: request["arguments"] = {} - for i in range(3, len(sys.argv), 2): - arg = sys.argv[i+1] + for i in range(3, len(argv), 2): + arg = argv[i+1] try: # integer arguments like "session-id 1" - request["arguments"][sys.argv[i]] = int(arg) + request["arguments"][argv[i]] = int(arg) except: try: # list arguments like "sessions [1,2]"" - request["arguments"][sys.argv[i]] = ast.literal_eval(arg) + request["arguments"][argv[i]] = ast.literal_eval(arg) except: # string arguments like "group 239.0.0.1" - request["arguments"][sys.argv[i]] = arg - #print(json.dumps(request).encode('utf-8')) + request["arguments"][argv[i]] = arg + return request + + +def send_request(socket_path, request): if os.path.exists(socket_path): client = socket.socket(socket.AF_UNIX, socket.SOCK_STREAM) try: client.connect(socket_path) client.send(json.dumps(request).encode('utf-8')) - data = "" while True: junk = client.recv(1024) @@ -76,7 +72,7 @@ def main(): data += junk.decode('utf-8') else: break - print(json.dumps(json.loads(data), indent=4)) + return json.loads(data) except Exception as e: error(e) finally: @@ -84,5 +80,25 @@ def main(): else: error("socket %s not found" % socket_path) + +def main(): + """main function""" + if(len(sys.argv)) < 3: + usage() + if sys.argv[2] == "help": + usage() + + socket_path = sys.argv[1] + request = build_request(sys.argv) + #print(json.dumps(request).encode('utf-8')) + data = send_request(socket_path, request) + + if sys.argv[2] == "commands": + for cmd in data["commands"]: + print("%s %s" % (cmd["command"], str(cmd["arguments"]).replace("', '", "|").replace("'", ""))) + else: + print(json.dumps(data, indent=4)) + + if __name__ == "__main__": main() diff --git a/code/bngblaster/src/bbl_ctrl.c b/code/bngblaster/src/bbl_ctrl.c index afb7e863..9b17e36e 100644 --- a/code/bngblaster/src/bbl_ctrl.c +++ b/code/bngblaster/src/bbl_ctrl.c @@ -30,15 +30,6 @@ extern volatile bool g_monkey; const char *schema_no_args[] = { NULL }; -const char *schema_other_args[] = { - "interface", "outer-vlan", "inner-vlan", - "session-id", "session-group-id", "direction", "reconnect-delay", - "flow-id", "id", "name", "file", "reset", "pps", - "group", "group-iter", "group-count", "source1", "source2", "source3", - "username", "password", "agent-remote-id", "agent-circuit-id", - "network-interface", "ipv6-link-local", - NULL -}; const char *schema_file[] = { "file", NULL }; @@ -46,6 +37,9 @@ const char *schema_interface[] = { "interface", NULL }; const char *schema_session_id[] = { + "session-id", NULL +}; +const char *schema_session_group_id[] = { "session-id", "session-group-id", NULL }; const char *schema_session_terminate[] = { @@ -54,15 +48,34 @@ const char *schema_session_terminate[] = { const char *schema_session_direction[] = { "session-id", "session-group-id", "direction", NULL }; -const char *schema_stream[] = { - "interface", "outer-vlan", "inner-vlan", - "session-id", "session-group-id", "direction", - "flow-id", "name", "pps", "tcp-flags", "debug", "detail", - "verified-only", "bidirectional-verified-only", - "network-interface", +const char *schema_session_update[] = { + "session-id", "username", "password", + "agent-remote-id", "agent-circuit-id", "ipv6-link-local" + NULL +}; +const char *schema_session_summary[] = { + "session-id", "sessions", "session-id-min", "session-id-max", + NULL +}; +const char *schema_stream_info[] = { + "flow-id", "debug", NULL +}; +const char *schema_stream_summary[] = { + "session-group-id", "flows", "flow-id-min", "flow-id-max", + "name", "interface", "direction", NULL }; +const char *schema_stream_start_stop[] = { + "flow-id", "session-id", "session-group-id", + "flows", "flow-id-min", "flow-id-max", + "name", "interface", "direction", + "verified-only", "bidirectional-verified-only", + NULL +}; +const char *schema_stream_update[] = { + "flow-id", "tcp-flags", "pps", NULL +}; const char *schema_bgp[] = { "local-ipv4-address", "peer-ipv4-address", "local-ipv6-address", "peer-ipv6-address", "ipv6-link-local", @@ -98,6 +111,14 @@ const char *schema_icmp[] = { const char *schema_dhcp[] = { "session-id", "session-group-id", "keep-address", NULL }; +const char *schema_cfm[] = { + "session-id", "network-interface", NULL +}; +const char *schema_igmp[] = { + "session-id", "group", "group-iter", "group-count", + "source1", "source2", "source3", "reset", + NULL +}; static bool @@ -257,21 +278,21 @@ static const struct action actions[] = { {"terminate", bbl_ctrl_terminate, schema_session_terminate, false}, {"traffic-start", bbl_ctrl_traffic_start, schema_no_args, false}, {"traffic-stop", bbl_ctrl_traffic_stop, schema_no_args, false}, - {"stream-start", bbl_stream_ctrl_start, schema_stream, true}, - {"stream-stop", bbl_stream_ctrl_stop, schema_stream, true}, - {"stream-stop-verified", bbl_stream_ctrl_stop_verified, schema_stream, true}, - {"stream-update", bbl_stream_ctrl_update, schema_stream, true}, + {"stream-start", bbl_stream_ctrl_start, schema_stream_start_stop, true}, + {"stream-stop", bbl_stream_ctrl_stop, schema_stream_start_stop, true}, + {"stream-stop-verified", bbl_stream_ctrl_stop_verified, schema_stream_start_stop, true}, + {"stream-update", bbl_stream_ctrl_update, schema_stream_update, true}, {"session-traffic-start", bbl_session_ctrl_traffic_start, schema_session_direction, true}, {"session-traffic-stop", bbl_session_ctrl_traffic_stop, schema_session_direction, true}, {"multicast-traffic-start", bbl_ctrl_multicast_traffic_start, schema_no_args, false}, {"multicast-traffic-stop", bbl_ctrl_multicast_traffic_stop, schema_no_args, false}, - {"stream-info", bbl_stream_ctrl_info, schema_other_args, true}, - {"stream-stats", bbl_stream_ctrl_stats, schema_other_args, true}, - {"stream-reset", bbl_stream_ctrl_reset, schema_other_args, false}, - {"stream-summary", bbl_stream_ctrl_summary, schema_other_args, true}, + {"stream-info", bbl_stream_ctrl_info, schema_stream_info, true}, + {"stream-stats", bbl_stream_ctrl_stats, schema_no_args, true}, + {"stream-reset", bbl_stream_ctrl_reset, schema_no_args, false}, + {"stream-summary", bbl_stream_ctrl_summary, schema_stream_summary, true}, {"streams-pending", bbl_stream_ctrl_pending, schema_no_args, true}, - {"session-traffic", bbl_session_ctrl_traffic_stats, schema_other_args, true}, - {"session-traffic-reset", bbl_session_ctrl_traffic_reset, schema_other_args, false}, + {"session-traffic", bbl_session_ctrl_traffic_stats, schema_no_args, true}, + {"session-traffic-reset", bbl_session_ctrl_traffic_reset, schema_session_group_id, false}, {"interfaces", bbl_interface_ctrl, schema_no_args, true}, {"access-interfaces", bbl_access_ctrl_interfaces, schema_no_args, true}, {"network-interfaces", bbl_network_ctrl_interfaces, schema_no_args, true}, @@ -281,28 +302,29 @@ static const struct action actions[] = { {"sessions-pending", bbl_session_ctrl_pending, schema_no_args, true}, {"session-info", bbl_session_ctrl_info, schema_session_id, true}, {"session-counters", bbl_session_ctrl_counters, schema_no_args, true}, - {"session-start", bbl_session_ctrl_start, schema_session_id, false}, - {"session-stop", bbl_session_ctrl_stop, schema_session_id, false}, + {"session-start", bbl_session_ctrl_start, schema_session_group_id, false}, + {"session-stop", bbl_session_ctrl_stop, schema_session_group_id, false}, {"session-restart", bbl_session_ctrl_restart, schema_session_terminate, false}, {"session-streams", bbl_stream_ctrl_session, schema_session_id, true}, - {"igmp-join", bbl_igmp_ctrl_join, schema_other_args, false}, - {"igmp-join-iter", bbl_igmp_ctrl_join_iter, schema_other_args, false}, - {"igmp-leave", bbl_igmp_ctrl_leave, schema_other_args, false}, - {"igmp-leave-all", bbl_igmp_ctrl_leave_all, schema_other_args, false}, - {"igmp-info", bbl_igmp_ctrl_info, schema_other_args, true}, - {"zapping-start", bbl_igmp_ctrl_zapping_start, schema_other_args, true}, - {"zapping-stop", bbl_igmp_ctrl_zapping_stop, schema_other_args, false}, - {"zapping-stats", bbl_igmp_ctrl_zapping_stats, schema_other_args, true}, + {"session-summary", bbl_session_ctrl_summary, schema_session_summary, true}, + {"igmp-join", bbl_igmp_ctrl_join, schema_igmp, false}, + {"igmp-join-iter", bbl_igmp_ctrl_join_iter, schema_igmp, false}, + {"igmp-leave", bbl_igmp_ctrl_leave, schema_igmp, false}, + {"igmp-leave-all", bbl_igmp_ctrl_leave_all, schema_igmp, false}, + {"igmp-info", bbl_igmp_ctrl_info, schema_igmp, true}, + {"zapping-start", bbl_igmp_ctrl_zapping_start, schema_igmp, true}, + {"zapping-stop", bbl_igmp_ctrl_zapping_stop, schema_igmp, false}, + {"zapping-stats", bbl_igmp_ctrl_zapping_stats, schema_igmp, true}, {"li-flows", bbl_li_ctrl_flows, schema_no_args, true}, - {"l2tp-tunnels", bbl_l2tp_ctrl_tunnels, schema_other_args, true}, - {"l2tp-sessions", bbl_l2tp_ctrl_sessions, schema_other_args, true}, - {"l2tp-csurq", bbl_l2tp_ctrl_csurq, schema_other_args, false}, - {"l2tp-tunnel-terminate", bbl_l2tp_ctrl_tunnel_terminate, schema_other_args, false}, - {"l2tp-session-terminate", bbl_l2tp_ctrl_session_terminate, schema_other_args, false}, - {"ipcp-open", bbl_session_ctrl_ipcp_open, schema_session_id, false}, - {"ipcp-close", bbl_session_ctrl_ipcp_close, schema_session_id, false}, - {"ip6cp-open", bbl_session_ctrl_ip6cp_open, schema_session_id, false}, - {"ip6cp-close", bbl_session_ctrl_ip6cp_close, schema_session_id, false}, + {"l2tp-tunnels", bbl_l2tp_ctrl_tunnels, schema_l2tp, true}, + {"l2tp-sessions", bbl_l2tp_ctrl_sessions, schema_l2tp, true}, + {"l2tp-csurq", bbl_l2tp_ctrl_csurq, schema_l2tp, false}, + {"l2tp-tunnel-terminate", bbl_l2tp_ctrl_tunnel_terminate, schema_l2tp, false}, + {"l2tp-session-terminate", bbl_l2tp_ctrl_session_terminate, schema_l2tp, false}, + {"ipcp-open", bbl_session_ctrl_ipcp_open, schema_session_group_id, false}, + {"ipcp-close", bbl_session_ctrl_ipcp_close, schema_session_group_id, false}, + {"ip6cp-open", bbl_session_ctrl_ip6cp_open, schema_session_group_id, false}, + {"ip6cp-close", bbl_session_ctrl_ip6cp_close, schema_session_group_id, false}, {"isis-adjacencies", isis_ctrl_adjacencies, schema_isis, true}, {"isis-database", isis_ctrl_database, schema_isis, true}, {"isis-load-mrt", isis_ctrl_load_mrt, schema_isis, false}, @@ -336,18 +358,18 @@ static const struct action actions[] = { {"icmp-clients", bbl_icmp_client_ctrl, schema_icmp, true}, {"icmp-clients-start", bbl_icmp_client_ctrl_start, schema_icmp, false}, {"icmp-clients-stop", bbl_icmp_client_ctrl_stop, schema_icmp, false}, - {"http-clients", bbl_http_client_ctrl, schema_other_args, true}, - {"http-clients-start", bbl_http_client_ctrl_start, schema_other_args, false}, - {"http-clients-stop", bbl_http_client_ctrl_stop, schema_other_args, false}, - {"arp-clients", bbl_arp_client_ctrl, schema_other_args, true}, - {"arp-clients-reset", bbl_arp_client_ctrl_reset, schema_other_args, false}, - {"cfm-cc-start", bbl_cfm_ctrl_cc_start, schema_other_args, false}, - {"cfm-cc-stop", bbl_cfm_ctrl_cc_stop, schema_other_args, false}, - {"cfm-cc-rdi-on", bbl_cfm_ctrl_cc_rdi_on, schema_other_args, false}, - {"cfm-cc-rdi-off", bbl_cfm_ctrl_cc_rdi_off, schema_other_args, false}, - {"lcp-echo-request-ignore", bbl_session_ctrl_lcp_echo_request_ignore, schema_session_id, true}, - {"lcp-echo-request-accept", bbl_session_ctrl_lcp_echo_request_accept, schema_session_id, true}, - {"session-update", bbl_session_ctrl_update, schema_other_args, false}, + {"http-clients", bbl_http_client_ctrl, schema_session_id, true}, + {"http-clients-start", bbl_http_client_ctrl_start, schema_session_id, false}, + {"http-clients-stop", bbl_http_client_ctrl_stop, schema_session_id, false}, + {"arp-clients", bbl_arp_client_ctrl, schema_session_id, true}, + {"arp-clients-reset", bbl_arp_client_ctrl_reset, schema_session_id, false}, + {"cfm-cc-start", bbl_cfm_ctrl_cc_start, schema_cfm, false}, + {"cfm-cc-stop", bbl_cfm_ctrl_cc_stop, schema_cfm, false}, + {"cfm-cc-rdi-on", bbl_cfm_ctrl_cc_rdi_on, schema_cfm, false}, + {"cfm-cc-rdi-off", bbl_cfm_ctrl_cc_rdi_off, schema_cfm, false}, + {"lcp-echo-request-ignore", bbl_session_ctrl_lcp_echo_request_ignore, schema_session_group_id, true}, + {"lcp-echo-request-accept", bbl_session_ctrl_lcp_echo_request_accept, schema_session_group_id, true}, + {"session-update", bbl_session_ctrl_update, schema_session_update, false}, {"pcap-start", pcapng_ctrl_start, schema_file, false}, {"pcap-stop", pcapng_ctrl_stop, schema_no_args, false}, {"dhcp-start", bbl_dhcp_ctrl_start, schema_dhcp, false}, @@ -357,10 +379,10 @@ static const struct action actions[] = { {"commands", bbl_ctrl_commands, schema_no_args, true}, {"session-traffic-enabled", bbl_session_ctrl_traffic_start, schema_session_direction, true}, {"session-traffic-disabled", bbl_session_ctrl_traffic_stop, schema_session_direction, true}, - {"stream-traffic-enabled", bbl_stream_ctrl_start, schema_stream, true}, - {"stream-traffic-start", bbl_stream_ctrl_start, schema_stream, true}, - {"stream-traffic-disabled", bbl_stream_ctrl_stop, schema_stream, true}, - {"stream-traffic-stop", bbl_stream_ctrl_stop, schema_stream, true}, + {"stream-traffic-enabled", bbl_stream_ctrl_start, schema_stream_start_stop, true}, + {"stream-traffic-start", bbl_stream_ctrl_start, schema_stream_start_stop, true}, + {"stream-traffic-disabled", bbl_stream_ctrl_stop, schema_stream_start_stop, true}, + {"stream-traffic-stop", bbl_stream_ctrl_stop, schema_stream_start_stop, true}, /* END */ {NULL, NULL, NULL, false}, }; From a9fd3f82b35073d7fc5b6a710ba0c7545503f24b Mon Sep 17 00:00:00 2001 From: Christian Giese Date: Mon, 2 Mar 2026 08:49:30 +0100 Subject: [PATCH 16/39] stream summary cmd traffic stats --- code/bngblaster/src/bbl_stream.c | 15 ++++++--------- 1 file changed, 6 insertions(+), 9 deletions(-) diff --git a/code/bngblaster/src/bbl_stream.c b/code/bngblaster/src/bbl_stream.c index b0edfe26..2d3b3bae 100644 --- a/code/bngblaster/src/bbl_stream.c +++ b/code/bngblaster/src/bbl_stream.c @@ -2581,7 +2581,7 @@ bbl_stream_summary_json(bbl_stream_s *stream) { json_t *jobj; - jobj = json_pack("{si ss* ss ss ss sb sb sb ss*}", + jobj = json_pack("{si ss* ss ss ss sb sb sb ss* sI sI sI}", "flow-id", stream->flow_id, "name", stream->config->name, "type", stream_type_string(stream), @@ -2590,7 +2590,10 @@ bbl_stream_summary_json(bbl_stream_s *stream) "enabled", stream->enabled, "active", *(stream->endpoint) == ENDPOINT_ACTIVE ? true : false, "verified", stream->verified, - "interface", stream->tx_interface->name); + "interface", stream->tx_interface->name, + "rx-loss", stream->rx_loss - stream->reset_loss, + "rx-pps", stream->rate_packets_rx.avg, + "tx-pps", stream->rate_packets_tx.avg); if(jobj && stream->session) { json_object_set_new(jobj, "session-id", json_integer(stream->session->session_id)); json_object_set_new(jobj, "session-traffic", json_boolean(stream->session_traffic)); @@ -2864,12 +2867,6 @@ bbl_stream_ctrl_summary_filter(int fd, uint32_t session_id, json_t *arguments) json_unpack(arguments, "{s:s}", "name", &name); json_unpack(arguments, "{s:s}", "interface", &interface); - if(json_unpack(arguments, "{s:i}", "flow-id-start", &session_group_id) == 0) { - if(session_group_id < 0 || session_group_id > UINT16_MAX) { - return bbl_ctrl_status(fd, "error", 400, "invalid session-group-id"); - } - } - if(session_id) { session = bbl_session_get(session_id); if(!session) { @@ -2937,7 +2934,7 @@ bbl_stream_ctrl_summary(int fd, uint32_t session_id, json_t *arguments) flows = json_object_get(arguments, "flows"); if(flows) { if(!json_is_array(flows)) { - return bbl_ctrl_status(fd, "error", 400, "flows must be of type array e.g. [1, 2, 3]"); + return bbl_ctrl_status(fd, "error", 400, "flows must be of type array e.g. [1,2,3]"); } } else { if(json_unpack(arguments, "{s:i}", "flow-id-min", &flow_id_min) != 0) { From e32dda51da3ab3769a62665cbd8bfaa55a566be6 Mon Sep 17 00:00:00 2001 From: Christian Giese Date: Mon, 2 Mar 2026 08:49:41 +0100 Subject: [PATCH 17/39] add session summary cmd --- code/bngblaster/src/bbl_session.c | 169 ++++++++++++++++++++++++++++-- code/bngblaster/src/bbl_session.h | 5 +- 2 files changed, 164 insertions(+), 10 deletions(-) diff --git a/code/bngblaster/src/bbl_session.c b/code/bngblaster/src/bbl_session.c index 5c5aa884..d0532881 100644 --- a/code/bngblaster/src/bbl_session.c +++ b/code/bngblaster/src/bbl_session.c @@ -1496,6 +1496,57 @@ bbl_session_json(bbl_session_s *session) return root; } +json_t * +bbl_session_summary_json(bbl_session_s *session) +{ + json_t *root = NULL; + + if(!session) { + return NULL; + } + + if(session->access_type == ACCESS_TYPE_PPPOE) { + root = json_pack("{ss si ss* ss* si ss* si si ss* ss* ss* ss* ss* ss* ss* ss* sI sI}", + "type", "pppoe", + "session-id", session->session_id, + "session-state", session_state_string(session->session_state), + "session-substate", bbl_session_substate_pppoe(session), + "flapped", session->stats.flapped, + "interface", session->access_interface->name, + "outer-vlan", session->vlan_key.outer_vlan_id, + "inner-vlan", session->vlan_key.inner_vlan_id, + "mac", format_mac_address(session->client_mac), + "username", session->username, + "agent-circuit-id", session->agent_circuit_id, + "agent-remote-id", session->agent_remote_id, + "lcp-state", ppp_state_string(session->lcp_state), + "ipcp-state", ppp_state_string(session->ipcp_state), + "ip6cp-state", ppp_state_string(session->ip6cp_state), + "dhcpv6-state", dhcp_state_string(session->dhcpv6_state), + "tx-packets", session->stats.packets_tx, + "rx-packets", session->stats.packets_rx); + } else { + root = json_pack("{ss si ss* ss* si ss* si si ss* ss* ss* ss* ss* sI sI}", + "type", "ipoe", + "session-id", session->session_id, + "session-state", session_state_string(session->session_state), + "session-substate", bbl_session_substate_ipoe(session), + "flapped", session->stats.flapped, + "interface", session->access_interface->name, + "outer-vlan", session->vlan_key.outer_vlan_id, + "inner-vlan", session->vlan_key.inner_vlan_id, + "mac", format_mac_address(session->client_mac), + "agent-circuit-id", session->agent_circuit_id, + "agent-remote-id", session->agent_remote_id, + "dhcp-state", dhcp_state_string(session->dhcp_state), + "dhcpv6-state", dhcp_state_string(session->dhcpv6_state), + "tx-packets", session->stats.packets_tx, + "rx-packets", session->stats.packets_rx); + } + return root; +} + + /* Control Socket Commands */ int @@ -1929,7 +1980,7 @@ bbl_session_ctrl_traffic_stop(int fd, uint32_t session_id, json_t *arguments) } int -bbl_session_ctrl_traffic_reset(int fd, uint32_t session_id __attribute__((unused)), json_t *arguments) +bbl_session_ctrl_traffic_reset(int fd, uint32_t session_id, json_t *arguments) { bbl_session_s *session; uint32_t i; @@ -1942,14 +1993,9 @@ bbl_session_ctrl_traffic_reset(int fd, uint32_t session_id __attribute__((unused } } - /* Iterate over all sessions */ - for(i = 0; i < g_ctx->sessions; i++) { - session = &g_ctx->session_list[i]; + if(session_id) { + session = bbl_session_get(session_id); if(session) { - if(session_group_id >= 0 && session->session_group_id != session_group_id) { - /* Skip sessions with wrong session-group-id if present. */ - continue; - } if(g_ctx->stats.session_traffic_flows_verified >= session->session_traffic.flows_verified) { g_ctx->stats.session_traffic_flows_verified -= session->session_traffic.flows_verified; } @@ -1960,8 +2006,31 @@ bbl_session_ctrl_traffic_reset(int fd, uint32_t session_id __attribute__((unused bbl_stream_reset(session->session_traffic.ipv6_down); bbl_stream_reset(session->session_traffic.ipv6pd_up); bbl_stream_reset(session->session_traffic.ipv6pd_down); + } else { + return bbl_ctrl_status(fd, "warning", 404, "session not found"); + } + } else { + /* Iterate over all sessions */ + for(i = 0; i < g_ctx->sessions; i++) { + session = &g_ctx->session_list[i]; + if(session) { + if(session_group_id >= 0 && session->session_group_id != session_group_id) { + /* Skip sessions with wrong session-group-id if present. */ + continue; + } + if(g_ctx->stats.session_traffic_flows_verified >= session->session_traffic.flows_verified) { + g_ctx->stats.session_traffic_flows_verified -= session->session_traffic.flows_verified; + } + session->session_traffic.flows_verified = 0; + bbl_stream_reset(session->session_traffic.ipv4_up); + bbl_stream_reset(session->session_traffic.ipv4_down); + bbl_stream_reset(session->session_traffic.ipv6_up); + bbl_stream_reset(session->session_traffic.ipv6_down); + bbl_stream_reset(session->session_traffic.ipv6pd_up); + bbl_stream_reset(session->session_traffic.ipv6pd_down); + } } - } + } return bbl_ctrl_status(fd, "ok", 200, NULL); } @@ -2023,3 +2092,85 @@ bbl_session_ctrl_update(int fd, uint32_t session_id, json_t *arguments) session->version++; return bbl_ctrl_status(fd, "ok", 200, NULL); } + +int +bbl_session_ctrl_summary(int fd, uint32_t session_id, json_t *arguments) +{ + int result = 0; + + int session_id_min = 0; + int session_id_max = 0; + int size, i; + + json_t *jobj, *jobj_array, *sessions; + bbl_session_s *session; + + sessions = json_object_get(arguments, "sessions"); + if(sessions) { + if(!json_is_array(sessions)) { + return bbl_ctrl_status(fd, "error", 400, "sessions must be of type array e.g. [1,2,3]"); + } + } else { + if(json_unpack(arguments, "{s:i}", "session-id-min", &session_id_min) != 0) { + return bbl_stream_ctrl_summary_filter(fd, session_id, arguments); + } + if(json_unpack(arguments, "{s:i}", "session-id-max", &session_id_max) != 0) { + return bbl_ctrl_status(fd, "error", 400, "session-id-max missing"); + } + if(session_id_min > session_id_max) { + return bbl_ctrl_status(fd, "error", 400, "session-id-min > max"); + } + } + + jobj_array = json_array(); + if(session_id) { + session = bbl_session_get(session_id); + if(session) { + jobj = bbl_session_summary_json(session); + if(jobj) { + json_array_append_new(jobj_array, jobj); + } + } + } + if(sessions) { + size = json_array_size(sessions); + for (i = 0; i < size; i++) { + jobj = json_array_get(sessions, i); + if(json_is_number(jobj)) { + session = bbl_session_get(json_number_value(jobj)); + if(session) { + jobj = bbl_session_summary_json(session); + if(jobj) { + json_array_append_new(jobj_array, jobj); + } + } + } + } + } else { + while(session_id_min <= session_id_max) { + session_id = session_id_min; + session = bbl_session_get(session_id); + if(session) { + jobj = bbl_session_summary_json(session); + if(jobj) { + json_array_append_new(jobj_array, jobj); + } + } + session_id_min++; + } + } + + json_t *root = json_pack("{ss si so*}", + "status", "ok", + "code", 200, + "session-summary", jobj_array); + + if(root) { + result = json_dumpfd(root, fd, 0); + json_decref(root); + } else { + result = bbl_ctrl_status(fd, "error", 500, "internal error"); + json_decref(jobj_array); + } + return result; +} diff --git a/code/bngblaster/src/bbl_session.h b/code/bngblaster/src/bbl_session.h index 2198e921..fe9b7cd8 100644 --- a/code/bngblaster/src/bbl_session.h +++ b/code/bngblaster/src/bbl_session.h @@ -433,7 +433,7 @@ int bbl_session_ctrl_traffic_stop(int fd, uint32_t session_id, json_t *arguments); int -bbl_session_ctrl_traffic_reset(int fd, uint32_t session_id __attribute__((unused)), json_t *arguments); +bbl_session_ctrl_traffic_reset(int fd, uint32_t session_id, json_t *arguments); int bbl_session_ctrl_traffic_stats(int fd, uint32_t session_id __attribute__((unused)), json_t *arguments __attribute__((unused))); @@ -441,4 +441,7 @@ bbl_session_ctrl_traffic_stats(int fd, uint32_t session_id __attribute__((unused int bbl_session_ctrl_update(int fd, uint32_t session_id, json_t *arguments); +int +bbl_session_ctrl_summary(int fd, uint32_t session_id, json_t *arguments); + #endif \ No newline at end of file From 171dcf76cf26faf9c2f0c59a901847fc03db41e3 Mon Sep 17 00:00:00 2001 From: Christian Giese Date: Mon, 2 Mar 2026 08:49:52 +0100 Subject: [PATCH 18/39] docu fix --- docsrc/sources/api/streams.rst | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/docsrc/sources/api/streams.rst b/docsrc/sources/api/streams.rst index 0003a9c4..53b37af8 100644 --- a/docsrc/sources/api/streams.rst +++ b/docsrc/sources/api/streams.rst @@ -6,7 +6,8 @@ | **stream-info** | | Display stream/flow information. | | | | | | | | **Arguments:** | -| | | ``flow-id`` | +| | | ``flow-id`` Mandatory | +| | | ``debug`` | +-----------------------------------+------------------------------------------------------------------------+ | **stream-summary** | | Display stream/flow summary information. | | | | | @@ -15,6 +16,9 @@ | | | ``name`` stream name | | | | ``interface`` TX interface name | | | | ``direction`` [both(default), upstream, downstream] | +| | | ``flows`` list of flows (e.g. ``[1,2,3]``). | +| | | ``flow-id-min`` flow range | +| | | ``flow-id-max`` | +-----------------------------------+------------------------------------------------------------------------+ | **stream-reset** | | Reset all traffic streams. | +-----------------------------------+------------------------------------------------------------------------+ @@ -40,7 +44,7 @@ | **stream-update** | | Update stream/flow configuration. | | | | | | | | **Arguments:** | -| | | ``flow-id`` | +| | | ``flow-id`` Mandatory | | | | ``tcp-flags`` [ack, fin, fin-ack, syn, syn-ack, rst, push, push-ack] | | | | ``pps`` | +-----------------------------------+------------------------------------------------------------------------+ From f05220512ab09fbd809c4475481a349a2790e713 Mon Sep 17 00:00:00 2001 From: Christian Giese Date: Mon, 2 Mar 2026 20:25:22 +0000 Subject: [PATCH 19/39] fix build errors --- code/bngblaster/src/bbl_ctrl.c | 2 +- code/bngblaster/src/bbl_session.c | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/code/bngblaster/src/bbl_ctrl.c b/code/bngblaster/src/bbl_ctrl.c index 9b17e36e..6953cd01 100644 --- a/code/bngblaster/src/bbl_ctrl.c +++ b/code/bngblaster/src/bbl_ctrl.c @@ -50,7 +50,7 @@ const char *schema_session_direction[] = { }; const char *schema_session_update[] = { "session-id", "username", "password", - "agent-remote-id", "agent-circuit-id", "ipv6-link-local" + "agent-remote-id", "agent-circuit-id", "ipv6-link-local", NULL }; const char *schema_session_summary[] = { diff --git a/code/bngblaster/src/bbl_session.c b/code/bngblaster/src/bbl_session.c index d0532881..0c2d0044 100644 --- a/code/bngblaster/src/bbl_session.c +++ b/code/bngblaster/src/bbl_session.c @@ -2112,7 +2112,7 @@ bbl_session_ctrl_summary(int fd, uint32_t session_id, json_t *arguments) } } else { if(json_unpack(arguments, "{s:i}", "session-id-min", &session_id_min) != 0) { - return bbl_stream_ctrl_summary_filter(fd, session_id, arguments); + return bbl_ctrl_status(fd, "error", 400, "sessions or session-id-min/max required"); } if(json_unpack(arguments, "{s:i}", "session-id-max", &session_id_max) != 0) { return bbl_ctrl_status(fd, "error", 400, "session-id-max missing"); From 90d67daa79d5e27bfa0d51fbef1927b664c0b3bb Mon Sep 17 00:00:00 2001 From: Christian Giese Date: Mon, 2 Mar 2026 20:25:36 +0000 Subject: [PATCH 20/39] fix MPLS markings for A10NSP --- code/bngblaster/src/bbl_stream.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/code/bngblaster/src/bbl_stream.c b/code/bngblaster/src/bbl_stream.c index 2d3b3bae..3e15f06d 100644 --- a/code/bngblaster/src/bbl_stream.c +++ b/code/bngblaster/src/bbl_stream.c @@ -251,9 +251,12 @@ bbl_stream_encode_a10nsp_mpls(bbl_a10nsp_interface_s *interface, if(interface->tx_label) { mpls_transport.label = interface->tx_label; mpls_transport.ttl = 64; + mpls_transport.exp = stream->config->tx_mpls1_exp; + mpls_service.exp = stream->config->tx_mpls2_exp; mpls_transport.next = &mpls_service; eth_mpls.mpls = &mpls_transport; } else { + mpls_service.exp = stream->config->tx_mpls1_exp; eth_mpls.mpls = &mpls_service; } if(encode_ethernet(stream->tx_buf, &tx_len, ð_mpls) != PROTOCOL_SUCCESS) { From 42e2fe3d339b251d2e25dd908aa7eb17756e95b2 Mon Sep 17 00:00:00 2001 From: Christian Giese Date: Thu, 5 Mar 2026 09:35:31 +0000 Subject: [PATCH 21/39] update session/stream commands --- code/bngblaster/src/bbl_ctrl.c | 38 +- code/bngblaster/src/bbl_session.c | 31 +- code/bngblaster/src/bbl_session.h | 1 + code/bngblaster/src/bbl_stream.c | 592 ++++++++++++++---------------- code/bngblaster/src/bbl_stream.h | 21 ++ docsrc/sources/api/sessions.rst | 8 + docsrc/sources/api/streams.rst | 32 +- 7 files changed, 374 insertions(+), 349 deletions(-) diff --git a/code/bngblaster/src/bbl_ctrl.c b/code/bngblaster/src/bbl_ctrl.c index 6953cd01..93fa71f6 100644 --- a/code/bngblaster/src/bbl_ctrl.c +++ b/code/bngblaster/src/bbl_ctrl.c @@ -54,28 +54,30 @@ const char *schema_session_update[] = { NULL }; const char *schema_session_summary[] = { - "session-id", "sessions", "session-id-min", "session-id-max", + "session-id", "session-group-id", + "sessions", "session-id-min", "session-id-max", NULL }; const char *schema_stream_info[] = { "flow-id", "debug", NULL }; -const char *schema_stream_summary[] = { - "session-group-id", - "flows", "flow-id-min", "flow-id-max", +const char *schema_stream_args[] = { + "session-id", "session-group-id", + "flows", "flow-id", "flow-id-min", "flow-id-max", "name", "interface", "direction", + "verified-only", "bidirectional-verified-only", + "pending-only", NULL }; -const char *schema_stream_start_stop[] = { - "flow-id", "session-id", "session-group-id", - "flows", "flow-id-min", "flow-id-max", +const char *schema_stream_update[] = { + "session-id", "session-group-id", + "flows", "flow-id", "flow-id-min", "flow-id-max", "name", "interface", "direction", "verified-only", "bidirectional-verified-only", + "pending-only", + "tcp-flags", "pps", NULL }; -const char *schema_stream_update[] = { - "flow-id", "tcp-flags", "pps", NULL -}; const char *schema_bgp[] = { "local-ipv4-address", "peer-ipv4-address", "local-ipv6-address", "peer-ipv6-address", "ipv6-link-local", @@ -278,9 +280,9 @@ static const struct action actions[] = { {"terminate", bbl_ctrl_terminate, schema_session_terminate, false}, {"traffic-start", bbl_ctrl_traffic_start, schema_no_args, false}, {"traffic-stop", bbl_ctrl_traffic_stop, schema_no_args, false}, - {"stream-start", bbl_stream_ctrl_start, schema_stream_start_stop, true}, - {"stream-stop", bbl_stream_ctrl_stop, schema_stream_start_stop, true}, - {"stream-stop-verified", bbl_stream_ctrl_stop_verified, schema_stream_start_stop, true}, + {"stream-start", bbl_stream_ctrl_start, schema_stream_args, true}, + {"stream-stop", bbl_stream_ctrl_stop, schema_stream_args, true}, + {"stream-stop-verified", bbl_stream_ctrl_stop_verified, schema_stream_args, true}, {"stream-update", bbl_stream_ctrl_update, schema_stream_update, true}, {"session-traffic-start", bbl_session_ctrl_traffic_start, schema_session_direction, true}, {"session-traffic-stop", bbl_session_ctrl_traffic_stop, schema_session_direction, true}, @@ -289,7 +291,7 @@ static const struct action actions[] = { {"stream-info", bbl_stream_ctrl_info, schema_stream_info, true}, {"stream-stats", bbl_stream_ctrl_stats, schema_no_args, true}, {"stream-reset", bbl_stream_ctrl_reset, schema_no_args, false}, - {"stream-summary", bbl_stream_ctrl_summary, schema_stream_summary, true}, + {"stream-summary", bbl_stream_ctrl_summary, schema_stream_args, true}, {"streams-pending", bbl_stream_ctrl_pending, schema_no_args, true}, {"session-traffic", bbl_session_ctrl_traffic_stats, schema_no_args, true}, {"session-traffic-reset", bbl_session_ctrl_traffic_reset, schema_session_group_id, false}, @@ -379,10 +381,10 @@ static const struct action actions[] = { {"commands", bbl_ctrl_commands, schema_no_args, true}, {"session-traffic-enabled", bbl_session_ctrl_traffic_start, schema_session_direction, true}, {"session-traffic-disabled", bbl_session_ctrl_traffic_stop, schema_session_direction, true}, - {"stream-traffic-enabled", bbl_stream_ctrl_start, schema_stream_start_stop, true}, - {"stream-traffic-start", bbl_stream_ctrl_start, schema_stream_start_stop, true}, - {"stream-traffic-disabled", bbl_stream_ctrl_stop, schema_stream_start_stop, true}, - {"stream-traffic-stop", bbl_stream_ctrl_stop, schema_stream_start_stop, true}, + {"stream-traffic-enabled", bbl_stream_ctrl_start, schema_stream_args, true}, + {"stream-traffic-start", bbl_stream_ctrl_start, schema_stream_args, true}, + {"stream-traffic-disabled", bbl_stream_ctrl_stop, schema_stream_args, true}, + {"stream-traffic-stop", bbl_stream_ctrl_stop, schema_stream_args, true}, /* END */ {NULL, NULL, NULL, false}, }; diff --git a/code/bngblaster/src/bbl_session.c b/code/bngblaster/src/bbl_session.c index 0c2d0044..ea90ffdb 100644 --- a/code/bngblaster/src/bbl_session.c +++ b/code/bngblaster/src/bbl_session.c @@ -2097,10 +2097,12 @@ int bbl_session_ctrl_summary(int fd, uint32_t session_id, json_t *arguments) { int result = 0; + int session_group_id = -1; + int size; + int intv; - int session_id_min = 0; - int session_id_max = 0; - int size, i; + uint32_t session_id_min = 1; + uint32_t session_id_max = g_ctx->sessions; json_t *jobj, *jobj_array, *sessions; bbl_session_s *session; @@ -2111,16 +2113,27 @@ bbl_session_ctrl_summary(int fd, uint32_t session_id, json_t *arguments) return bbl_ctrl_status(fd, "error", 400, "sessions must be of type array e.g. [1,2,3]"); } } else { - if(json_unpack(arguments, "{s:i}", "session-id-min", &session_id_min) != 0) { - return bbl_ctrl_status(fd, "error", 400, "sessions or session-id-min/max required"); + if(json_unpack(arguments, "{s:i}", "session-id-min", &intv) == 0) { + if(intv < 1 || (uint32_t)intv > UINT32_MAX) { + return bbl_ctrl_status(fd, "warning", 400, "invalid session-id-min"); + } + session_id_min = intv; } - if(json_unpack(arguments, "{s:i}", "session-id-max", &session_id_max) != 0) { - return bbl_ctrl_status(fd, "error", 400, "session-id-max missing"); + if(json_unpack(arguments, "{s:i}", "session-id-max", &intv) == 0) { + if(intv < 0 || (uint32_t)intv > UINT32_MAX) { + return bbl_ctrl_status(fd, "warning", 400, "invalid session-id-max"); + } + if((uint32_t)intv < g_ctx->sessions) session_id_max = intv; } if(session_id_min > session_id_max) { return bbl_ctrl_status(fd, "error", 400, "session-id-min > max"); } } + if(json_unpack(arguments, "{s:i}", "session-group-id", &session_group_id) == 0) { + if(session_group_id < 0 || session_group_id > UINT16_MAX) { + return bbl_ctrl_status(fd, "error", 400, "invalid session-group-id"); + } + } jobj_array = json_array(); if(session_id) { @@ -2134,7 +2147,7 @@ bbl_session_ctrl_summary(int fd, uint32_t session_id, json_t *arguments) } if(sessions) { size = json_array_size(sessions); - for (i = 0; i < size; i++) { + for(int i = 0; i < size; i++) { jobj = json_array_get(sessions, i); if(json_is_number(jobj)) { session = bbl_session_get(json_number_value(jobj)); @@ -2150,7 +2163,7 @@ bbl_session_ctrl_summary(int fd, uint32_t session_id, json_t *arguments) while(session_id_min <= session_id_max) { session_id = session_id_min; session = bbl_session_get(session_id); - if(session) { + if(session && (session_group_id < 0 || session->session_group_id == session_group_id)) { jobj = bbl_session_summary_json(session); if(jobj) { json_array_append_new(jobj_array, jobj); diff --git a/code/bngblaster/src/bbl_session.h b/code/bngblaster/src/bbl_session.h index fe9b7cd8..953e03e1 100644 --- a/code/bngblaster/src/bbl_session.h +++ b/code/bngblaster/src/bbl_session.h @@ -271,6 +271,7 @@ typedef struct bbl_session_ struct { uint16_t group_id; bbl_stream_s *head; + bbl_stream_s *tail; } streams; struct { diff --git a/code/bngblaster/src/bbl_stream.c b/code/bngblaster/src/bbl_stream.c index 3e15f06d..d6695979 100644 --- a/code/bngblaster/src/bbl_stream.c +++ b/code/bngblaster/src/bbl_stream.c @@ -1853,8 +1853,12 @@ bbl_stream_session_add(bbl_stream_config_s *config, bbl_session_s *session) } stream_up->tx_access_interface = access_interface; stream_up->tx_interface = access_interface->interface; - stream_up->session_next = session->streams.head; - session->streams.head = stream_up; + if(session->streams.tail) { + session->streams.tail->session_next = stream_up; + } else { + session->streams.head = stream_up; + } + session->streams.tail = stream_up; bbl_stream_add(stream_up); if(stream_up->session_traffic) { g_ctx->stats.session_traffic_flows++; @@ -1898,8 +1902,12 @@ bbl_stream_session_add(bbl_stream_config_s *config, bbl_session_s *session) stream_down->tcp = true; } stream_down->session_traffic = config->session_traffic; - stream_down->session_next = session->streams.head; - session->streams.head = stream_down; + if(session->streams.tail) { + session->streams.tail->session_next = stream_down; + } else { + session->streams.head = stream_down; + } + session->streams.tail = stream_down; if(network_interface) { stream_down->tx_network_interface = network_interface; stream_down->tx_interface = network_interface->interface; @@ -2479,106 +2487,6 @@ bbl_stream_rx(bbl_ethernet_header_s *eth, uint8_t *mac) } } -/** - * This function enables or disabled all - * streams except session-traffic and multicast - * of the given session, optionally - * filtered by name! - * - * @param enabled true (start) / false (stop) - * @param session session object - * @param name optionally filter by name - * @param direction optionally filter by direction - * @param state optionally filter by state - */ -static void -bbl_stream_enable_session(bool enabled, bbl_session_s *session, - const char *name, uint8_t direction, - stream_state_t state) -{ - bbl_stream_s *stream = session->streams.head; - while(stream) { - if(state == STREAM_STATE_VERIFIED || state == STREAM_STATE_BIVERIFIED) { - if((stream->verified == false) || - (state == STREAM_STATE_BIVERIFIED && stream->reverse && stream->reverse->verified == false)) { - stream = stream->session_next; continue; - } - } - if(stream->session_traffic == false && - stream->type != BBL_TYPE_MULTICAST && - stream->direction & direction) { - if(name) { - if(strcmp(name, stream->config->name) == 0) { - stream->enabled = enabled; - } - } else { - stream->enabled = enabled; - } - } - stream = stream->session_next; - } -} - -/** - * This function enables or disabled all - * streams except session-traffic and multicast - * optionally filtered by session-group-id - * and name! The session-group-id must be set to -1 - * to not filter based on session-group-id. If set - * to 0 will match all streams belonging to - * session of the default session-group-id 0. - * - * @param enabled true (start) / false (stop) - * @param session_group_id session-group-id - * @param name optionally filter by name - * @param direction optionally filter by direction - * @param verified_only optionally match verified streams only - * @param state optionally filter by state - */ -static void -bbl_streams_enable_filter(bool enabled, int session_group_id, - const char *name, const char *interface, uint8_t direction, - stream_state_t state) -{ - bbl_stream_s *stream = g_ctx->stream_head; - bbl_session_s *session; - uint32_t i; - - if(session_group_id < 0) { - while(stream) { - if(state == STREAM_STATE_VERIFIED || state == STREAM_STATE_BIVERIFIED) { - if((stream->verified == false) || - (state == STREAM_STATE_BIVERIFIED && stream->reverse && stream->reverse->verified == false)) { - stream = stream->next; continue; - } - } - if(stream->session_traffic == false && - stream->type != BBL_TYPE_MULTICAST && - stream->direction & direction) { - if(interface) { - if(strcmp(interface, stream->tx_interface->name) != 0) { - stream = stream->next; continue; - } - } - if(name) { - if(strcmp(name, stream->config->name) != 0) { - stream = stream->next; continue; - } - } - stream->enabled = enabled; - } - stream = stream->next; - } - } else { - for(i = 0; i < g_ctx->sessions; i++) { - session = &g_ctx->session_list[i]; - if(session && session->session_group_id == session_group_id) { - bbl_stream_enable_session(enabled, session, name, direction, state); - } - } - } -} - static json_t * bbl_stream_summary_json(bbl_stream_s *stream) { @@ -2775,16 +2683,155 @@ bbl_stream_json(bbl_stream_s *stream, bool debug) /* Control Socket Commands */ +/** + * bbl_stream_ctrl_args + * + * Parse common control command arguments used by stream commands + * to select or filter streams. + */ +static int +bbl_stream_ctrl_args(int fd, uint32_t session_id, json_t *arguments, bbl_stream_args_s *args) +{ + const char *s = NULL; + int intv; + + /* Init defaults */ + args->session_group_id = -1; + args->flow_id_max = UINT64_MAX; + args->direction = BBL_DIRECTION_BOTH; + + if(session_id) { + args->session = bbl_session_get(session_id); + if(!args->session) { + return bbl_ctrl_status(fd, "warning", 404, "session not found"); + } + } + + if(json_unpack(arguments, "{s:i}", "flow-id", &intv) == 0) { + if(intv < 0) { + return bbl_ctrl_status(fd, "warning", 400, "invalid flow-id"); + } + args->flow_id = intv; + args->stream = bbl_stream_index_get(args->flow_id); + if(args->stream) return 0; + return bbl_ctrl_status(fd, "warning", 404, "stream not found"); + } + + args->flows = json_object_get(arguments, "flows"); + if(args->flows) { + if(json_is_array(args->flows)) { + args->flows_array_len = json_array_size(args->flows); + return 0; + } + return bbl_ctrl_status(fd, "error", 400, "flows must be of type array e.g. [1,2,3]"); + } + + if(json_unpack(arguments, "{s:i}", "flow-id-min", &intv) == 0) { + if(intv < 0) { + return bbl_ctrl_status(fd, "warning", 400, "invalid flow-id-min"); + } + args->flow_id_min = intv; + } + + if(json_unpack(arguments, "{s:i}", "flow-id-max", &intv) == 0) { + if(intv < 0) { + return bbl_ctrl_status(fd, "warning", 400, "invalid flow-id-max"); + } + args->flow_id_max = intv; + if(args->flow_id_min > args->flow_id_max) { + return bbl_ctrl_status(fd, "warning", 400, "flow-id-min > max"); + } + } + + if(json_unpack(arguments, "{s:i}", "session-group-id", &intv) == 0) { + if(intv < 0 || intv > UINT16_MAX) { + return bbl_ctrl_status(fd, "error", 400, "invalid session-group-id"); + } + args->session_group_id = intv; + } + + if(json_unpack(arguments, "{s:s}", "direction", &s) == 0) { + if(strcmp(s, "upstream") == 0) { + args->direction = BBL_DIRECTION_UP; + } else if(strcmp(s, "downstream") == 0) { + args->direction = BBL_DIRECTION_DOWN; + } else if(strcmp(s, "both") == 0) { + args->direction = BBL_DIRECTION_BOTH; + } else { + return bbl_ctrl_status(fd, "error", 400, "invalid direction"); + } + } + + json_unpack(arguments, "{s:s}", "name", &args->name); + json_unpack(arguments, "{s:s}", "interface", &args->interface); + + intv = 0; + json_unpack(arguments, "{s:b}", "verified-only", &intv); + if(intv) args->state = STREAM_STATE_VERIFIED; + + intv = 0; + json_unpack(arguments, "{s:b}", "bidirectional-verified-only", &intv); + if(intv) args->state = STREAM_STATE_BIVERIFIED; + + intv = 0; + json_unpack(arguments, "{s:b}", "pending-only", &intv); + if(intv) args->state = STREAM_STATE_PENDING; + + return 1; +} + +/** + * bbl_stream_ctrl_args_match + */ +static bool +bbl_stream_ctrl_args_match(bbl_stream_s *stream, bbl_stream_args_s *args) +{ + if(stream->flow_id < args->flow_id_min || + stream->flow_id > args->flow_id_max) { + return false; + } + + if(args->session_group_id >= 0 && stream->session && + stream->session->session_group_id != args->session_group_id) { + return false; + } + if(args->interface && strcmp(args->interface, stream->tx_interface->name) != 0) { + return false; + } + if(args->name && strcmp(args->name, stream->config->name) != 0) { + return false; + } + if(!(stream->direction & args->direction)) { + return false; + } + + switch(args->state) { + case STREAM_STATE_VERIFIED: + if(!stream->verified) return false; + break; + case STREAM_STATE_BIVERIFIED: + if(!stream->verified || (stream->reverse && !stream->reverse->verified)) return false; + break; + case STREAM_STATE_PENDING: + if(stream->verified) return false; + break; + default: + break; + } + return true; +} + int bbl_stream_ctrl_stats(int fd, uint32_t session_id __attribute__((unused)), json_t *arguments __attribute__((unused))) { int result = 0; - json_t *root = json_pack("{ss si s{si si}}", + json_t *root = json_pack("{ss si s{si si sf}}", "status", "ok", "code", 200, "stream-stats", "total-flows", g_ctx->stats.stream_traffic_flows, - "verified-flows", g_ctx->stats.stream_traffic_flows_verified); + "verified-flows", g_ctx->stats.stream_traffic_flows_verified, + "total-pps", g_ctx->total_pps); if(root) { result = json_dumpfd(root, fd, 0); json_decref(root); @@ -2796,24 +2843,19 @@ int bbl_stream_ctrl_info(int fd, uint32_t session_id __attribute__((unused)), json_t *arguments) { int result = 0; + int debug = 0; json_t *root; json_t *json_stream = NULL; bbl_stream_s *stream; - - int number = 0; - int debug = 0; - - uint64_t flow_id; - + json_int_t flow_id; + /* Unpack further arguments */ - if(json_unpack(arguments, "{s:i}", "flow-id", &number) != 0) { + if(json_unpack(arguments, "{s:i}", "flow-id", &flow_id) != 0) { return bbl_ctrl_status(fd, "error", 400, "missing flow-id"); - } + } json_unpack(arguments, "{s:b}", "debug", &debug); - - flow_id = number; stream = bbl_stream_index_get(flow_id); if(stream) { json_stream = bbl_stream_json(stream, debug); @@ -2834,149 +2876,52 @@ bbl_stream_ctrl_info(int fd, uint32_t session_id __attribute__((unused)), json_t } } -static int -bbl_stream_ctrl_summary_filter(int fd, uint32_t session_id, json_t *arguments) -{ - int result = 0; - - const char *name = NULL; - const char *interface = NULL; - const char *s = NULL; - - int session_group_id = -1; - - uint8_t direction = BBL_DIRECTION_BOTH; - - json_t *jobj, *jobj_array; - bbl_stream_s *stream = g_ctx->stream_head; - bbl_session_s *session; - - if(json_unpack(arguments, "{s:i}", "session-group-id", &session_group_id) == 0) { - if(session_group_id < 0 || session_group_id > UINT16_MAX) { - return bbl_ctrl_status(fd, "error", 400, "invalid session-group-id"); - } - } - if(json_unpack(arguments, "{s:s}", "direction", &s) == 0) { - if(strcmp(s, "upstream") == 0) { - direction = BBL_DIRECTION_UP; - } else if(strcmp(s, "downstream") == 0) { - direction = BBL_DIRECTION_DOWN; - } else if(strcmp(s, "both") == 0) { - direction = BBL_DIRECTION_BOTH; - } else { - return bbl_ctrl_status(fd, "error", 400, "invalid direction"); - } - } - json_unpack(arguments, "{s:s}", "name", &name); - json_unpack(arguments, "{s:s}", "interface", &interface); - - if(session_id) { - session = bbl_session_get(session_id); - if(!session) { - return bbl_ctrl_status(fd, "warning", 404, "session not found"); - } - stream = session->streams.head; - } - - jobj_array = json_array(); - while(stream) { - if(session_group_id >= 0) { - if(!(stream->session && stream->session->session_group_id == session_group_id)) goto NEXT; - } - if(name) { - if(!strcmp(name, stream->config->name) == 0) goto NEXT; - } - if(interface) { - if(!strcmp(interface, stream->tx_interface->name) == 0) goto NEXT; - } - if(!(stream->direction & direction)) goto NEXT; - - jobj = bbl_stream_summary_json(stream); - if(jobj) { - json_array_append_new(jobj_array, jobj); - } else { - json_decref(jobj_array); - return bbl_ctrl_status(fd, "error", 500, "internal error"); - } -NEXT: - if(session) { - stream = stream->session_next; - } else { - stream = stream->next; - } - } - - json_t *root = json_pack("{ss si so*}", - "status", "ok", - "code", 200, - "stream-summary", jobj_array); - - if(root) { - result = json_dumpfd(root, fd, 0); - json_decref(root); - } else { - result = bbl_ctrl_status(fd, "error", 500, "internal error"); - json_decref(jobj_array); - } - return result; -} - int bbl_stream_ctrl_summary(int fd, uint32_t session_id, json_t *arguments) { int result = 0; - int flow_id_min = 0; - int flow_id_max = 0; - int size, i; - uint64_t flow_id; - - json_t *jobj, *jobj_array, *flows; + json_t *jobj, *jobj_array; bbl_stream_s *stream; - flows = json_object_get(arguments, "flows"); - if(flows) { - if(!json_is_array(flows)) { - return bbl_ctrl_status(fd, "error", 400, "flows must be of type array e.g. [1,2,3]"); - } - } else { - if(json_unpack(arguments, "{s:i}", "flow-id-min", &flow_id_min) != 0) { - return bbl_stream_ctrl_summary_filter(fd, session_id, arguments); - } - if(json_unpack(arguments, "{s:i}", "flow-id-max", &flow_id_max) != 0) { - return bbl_ctrl_status(fd, "error", 400, "flow-id-max missing"); - } - if(flow_id_min > flow_id_max) { - return bbl_ctrl_status(fd, "error", 400, "flow-id-min > max"); - } - } + bbl_stream_args_s args = {0}; + result = bbl_stream_ctrl_args(fd, session_id, arguments, &args); + if(result != 1) return result; jobj_array = json_array(); - if(flows) { - size = json_array_size(flows); - for (i = 0; i < size; i++) { - jobj = json_array_get(flows, i); + + if(args.stream) { + jobj = bbl_stream_summary_json(args.stream); + if(jobj) json_array_append_new(jobj_array, jobj); + } else if(args.flows) { + for(int i = 0; i < args.flows_array_len; i++) { + jobj = json_array_get(args.flows, i); if(json_is_number(jobj)) { stream = bbl_stream_index_get(json_number_value(jobj)); if(stream) { jobj = bbl_stream_summary_json(stream); - if(jobj) { - json_array_append_new(jobj_array, jobj); - } + if(jobj) json_array_append_new(jobj_array, jobj); } } } } else { - while(flow_id_min <= flow_id_max) { - flow_id = flow_id_min; - stream = bbl_stream_index_get(flow_id); - if(stream) { + if(args.session) { + stream = args.session->streams.head; + } else if(args.flow_id_min) { + stream = bbl_stream_index_get(args.flow_id_min); + } else { + stream = g_ctx->stream_head; + } + while(stream && stream->flow_id <= args.flow_id_max) { + if(bbl_stream_ctrl_args_match(stream, &args)) { jobj = bbl_stream_summary_json(stream); - if(jobj) { - json_array_append_new(jobj_array, jobj); - } + if(jobj) json_array_append_new(jobj_array, jobj); + } + if(args.session) { + stream = stream->session_next; + } else { + stream = stream->next; } - flow_id_min++; } } @@ -3103,65 +3048,53 @@ static int bbl_stream_ctrl_enabled(int fd, uint32_t session_id, json_t *arguments, bool enabled, stream_state_t state) { - bbl_stream_s *stream = g_ctx->stream_head; - bbl_session_s *session; - const char *name = NULL; - const char *interface = NULL; - const char *s = NULL; + int result = 0; - int session_group_id = -1; - int number = 0; - int arg = 0; - uint64_t flow_id = 0; - uint8_t direction = BBL_DIRECTION_BOTH; - - if(json_unpack(arguments, "{s:i}", "flow-id", &number) == 0) { - flow_id = number; - stream = bbl_stream_index_get(flow_id); - if(stream) { - stream->enabled = enabled; - } else { - return bbl_ctrl_status(fd, "warning", 404, "stream not found"); - } - return bbl_ctrl_status(fd, "ok", 200, NULL); - } - - if(json_unpack(arguments, "{s:i}", "session-group-id", &session_group_id) == 0) { - if(session_group_id < 0 || session_group_id > UINT16_MAX) { - return bbl_ctrl_status(fd, "error", 400, "invalid session-group-id"); - } - } - if(json_unpack(arguments, "{s:s}", "direction", &s) == 0) { - if(strcmp(s, "upstream") == 0) { - direction = BBL_DIRECTION_UP; - } else if(strcmp(s, "downstream") == 0) { - direction = BBL_DIRECTION_DOWN; - } else if(strcmp(s, "both") == 0) { - direction = BBL_DIRECTION_BOTH; - } else { - return bbl_ctrl_status(fd, "error", 400, "invalid direction"); - } - } - json_unpack(arguments, "{s:s}", "name", &name); - json_unpack(arguments, "{s:s}", "interface", &interface); + bbl_stream_s *stream; + json_t *jobj; - arg = 0; - json_unpack(arguments, "{s:b}", "verified-only", &arg); - if(arg) state = STREAM_STATE_VERIFIED; + bbl_stream_args_s args = {0}; + result = bbl_stream_ctrl_args(fd, session_id, arguments, &args); + if(result != 1) return result; - arg = 0; - json_unpack(arguments, "{s:b}", "bidirectional-verified-only", &arg); - if(arg) state = STREAM_STATE_BIVERIFIED; + if(state) args.state = state; - if(session_id) { - session = bbl_session_get(session_id); - if(session) { - bbl_stream_enable_session(enabled, session, name, direction, state); - } else { - return bbl_ctrl_status(fd, "warning", 404, "session not found"); + if(args.stream) { + if(stream->session_traffic == false && + stream->type != BBL_TYPE_MULTICAST) { + args.stream->enabled = enabled; + } + } else if(args.flows) { + for(int i = 0; i < args.flows_array_len; i++) { + jobj = json_array_get(args.flows, i); + if(json_is_number(jobj)) { + stream = bbl_stream_index_get(json_number_value(jobj)); + if(stream && stream->session_traffic == false && + stream->type != BBL_TYPE_MULTICAST) { + args.stream->enabled = enabled; + } + } } } else { - bbl_streams_enable_filter(enabled, session_group_id, name, interface, direction, state); + if(args.session) { + stream = args.session->streams.head; + } else if(args.flow_id_min) { + stream = bbl_stream_index_get(args.flow_id_min); + } else { + stream = g_ctx->stream_head; + } + while(stream && stream->flow_id <= args.flow_id_max) { + if(stream->session_traffic == false && + stream->type != BBL_TYPE_MULTICAST && + bbl_stream_ctrl_args_match(stream, &args)) { + args.stream->enabled = enabled; + } + if(args.session) { + stream = stream->session_next; + } else { + stream = stream->next; + } + } } return bbl_ctrl_status(fd, "ok", 200, NULL); } @@ -3184,24 +3117,35 @@ bbl_stream_ctrl_stop_verified(int fd, uint32_t session_id, json_t *arguments) return bbl_stream_ctrl_enabled(fd, session_id, arguments, false, STREAM_STATE_VERIFIED); } +static void +bbl_stream_ctrl_update_stream(bbl_stream_s *stream, uint8_t tcp_flags, double pps) +{ + if(tcp_flags) { + stream->tcp_flags = tcp_flags; + } + if(pps) { + stream->update_pps = true; + stream->pps = pps; + stream->io->update_streams = true; + } +} + int bbl_stream_ctrl_update(int fd, uint32_t session_id __attribute__((unused)), json_t *arguments) { bbl_stream_s *stream; - json_t *value = NULL; + json_t *jobj; const char *s = NULL; + int result = 0; - int number = 0; - uint64_t flow_id; - - /* Unpack further arguments */ - if(json_unpack(arguments, "{s:i}", "flow-id", &number) != 0) { - return bbl_ctrl_status(fd, "error", 400, "missing flow-id"); - } - + double pps = 0; uint8_t tcp_flags = 0; + bbl_stream_args_s args = {0}; + result = bbl_stream_ctrl_args(fd, session_id, arguments, &args); + if(result != 1) return result; + if(json_unpack(arguments, "{s:s}", "tcp-flags", &s) == 0) { if(strcmp(s, "ack") == 0) { tcp_flags = 0x10; @@ -3223,23 +3167,37 @@ bbl_stream_ctrl_update(int fd, uint32_t session_id __attribute__((unused)), json return bbl_ctrl_status(fd, "error", 400, "invalid tcp-flags (ack|fin|fin-ack|syn|syn-ack|rst|push|push-ack)"); } } - double pps = 0; - value = json_object_get(arguments, "pps"); - if(value) pps = json_number_value(value); + jobj = json_object_get(arguments, "pps"); + if(jobj) pps = json_number_value(jobj); - flow_id = number; - stream = bbl_stream_index_get(flow_id); - if(stream) { - if(tcp_flags) { - stream->tcp_flags = tcp_flags; - } - if(pps) { - stream->update_pps = true; - stream->pps = pps; - stream->io->update_streams = true; + if(args.stream) { + bbl_stream_ctrl_update_stream(args.stream, tcp_flags, pps); + } else if(args.flows) { + for(int i = 0; i < args.flows_array_len; i++) { + jobj = json_array_get(args.flows, i); + if(json_is_number(jobj)) { + stream = bbl_stream_index_get(json_number_value(jobj)); + if(stream) bbl_stream_ctrl_update_stream(stream, tcp_flags, pps); + } } } else { - return bbl_ctrl_status(fd, "warning", 404, "stream not found"); + if(args.session) { + stream = args.session->streams.head; + } else if(args.flow_id_min) { + stream = bbl_stream_index_get(args.flow_id_min); + } else { + stream = g_ctx->stream_head; + } + while(stream && stream->flow_id <= args.flow_id_max) { + if(bbl_stream_ctrl_args_match(stream, &args)) { + bbl_stream_ctrl_update_stream(stream, tcp_flags, pps); + } + if(args.session) { + stream = stream->session_next; + } else { + stream = stream->next; + } + } } return bbl_ctrl_status(fd, "ok", 200, NULL); -} +} \ No newline at end of file diff --git a/code/bngblaster/src/bbl_stream.h b/code/bngblaster/src/bbl_stream.h index 98c461b3..0a4e5bff 100644 --- a/code/bngblaster/src/bbl_stream.h +++ b/code/bngblaster/src/bbl_stream.h @@ -13,6 +13,7 @@ typedef enum { STREAM_STATE_ANY = 0, STREAM_STATE_VERIFIED = 1, STREAM_STATE_BIVERIFIED = 2, + STREAM_STATE_PENDING = 3, } stream_state_t; typedef struct bbl_stream_config_ @@ -93,6 +94,26 @@ typedef struct bbl_stream_group_ bbl_stream_group_s *next; } bbl_stream_group_s; +typedef struct bbl_stream_args_ +{ + const char *name; + const char *interface; + + bbl_stream_s *stream; + bbl_session_s *session; + + json_t *flows; + uint64_t flow_id; + uint64_t flow_id_min; + uint64_t flow_id_max; + + stream_state_t state; + + int flows_array_len; + int session_group_id; + uint8_t direction; +} bbl_stream_args_s; + /** * In the architecture of BNG Blaster, every traffic stream * corresponds to one or two flows, namely upstream and downstream. diff --git a/docsrc/sources/api/sessions.rst b/docsrc/sources/api/sessions.rst index d71aa53f..78bf07f6 100644 --- a/docsrc/sources/api/sessions.rst +++ b/docsrc/sources/api/sessions.rst @@ -56,3 +56,11 @@ | | | ``agent-circuit-id`` update agent-circuit-id | | | | ``ipv6-link-local`` update IPv6 link-local address | +-----------------------------------+----------------------------------------------------------------------+ +| **session-summary** | | Display session summary information. | +| | | | +| | | **Arguments:** | +| | | ``session-id`` | +| | | ``session-group-id`` (ignored if session-id is present) | +| | | ``session-id-min`` session range | +| | | ``session-id-max`` | ++-----------------------------------+----------------------------------------------------------------------+ diff --git a/docsrc/sources/api/streams.rst b/docsrc/sources/api/streams.rst index 53b37af8..2de41928 100644 --- a/docsrc/sources/api/streams.rst +++ b/docsrc/sources/api/streams.rst @@ -12,13 +12,18 @@ | **stream-summary** | | Display stream/flow summary information. | | | | | | | | **Arguments:** | +| | | ``flow-id`` | +| | | ``flow-id-min`` flow range | +| | | ``flow-id-max`` | +| | | ``flows`` list of flows (e.g. ``[1,2,3]``) | +| | | ``session-id`` | | | | ``session-group-id`` | | | | ``name`` stream name | | | | ``interface`` TX interface name | | | | ``direction`` [both(default), upstream, downstream] | -| | | ``flows`` list of flows (e.g. ``[1,2,3]``). | -| | | ``flow-id-min`` flow range | -| | | ``flow-id-max`` | +| | | ``verified-only`` streams verified | +| | | ``bidirectional-verified-only`` streams verified in both directions | +| | | ``pending-only`` streams not verified | +-----------------------------------+------------------------------------------------------------------------+ | **stream-reset** | | Reset all traffic streams. | +-----------------------------------+------------------------------------------------------------------------+ @@ -33,18 +38,35 @@ | | | | | | | **Arguments:** | | | | ``flow-id`` | +| | | ``flow-id-min`` flow range | +| | | ``flow-id-max`` | +| | | ``flows`` list of flows (e.g. ``[1,2,3]``) | | | | ``session-id`` | -| | | ``session-group-id`` (ignored if session-id is present) | +| | | ``session-group-id`` | | | | ``name`` stream name | | | | ``interface`` TX interface name | | | | ``direction`` [both(default), upstream, downstream] | +| | | ``verified-only`` streams verified | +| | | ``bidirectional-verified-only`` streams verified in both directions | +| | | ``pending-only`` streams not verified | +-----------------------------------+------------------------------------------------------------------------+ | **streams-pending** | | List flow-id of all pending (not verified) traffic streams. | +-----------------------------------+------------------------------------------------------------------------+ | **stream-update** | | Update stream/flow configuration. | | | | | | | | **Arguments:** | -| | | ``flow-id`` Mandatory | +| | | ``flow-id`` | +| | | ``flow-id-min`` flow range | +| | | ``flow-id-max`` | +| | | ``flows`` list of flows (e.g. ``[1,2,3]``) | +| | | ``session-id`` | +| | | ``session-group-id`` | +| | | ``name`` stream name | +| | | ``interface`` TX interface name | +| | | ``direction`` [both(default), upstream, downstream] | +| | | ``verified-only`` streams verified | +| | | ``bidirectional-verified-only`` streams verified in both directions | +| | | ``pending-only`` streams not verified | | | | ``tcp-flags`` [ack, fin, fin-ack, syn, syn-ack, rst, push, push-ack] | | | | ``pps`` | +-----------------------------------+------------------------------------------------------------------------+ From f8acc1a102ec55028ccdfa05d4501c14db421f4b Mon Sep 17 00:00:00 2001 From: Andreas Zimber Date: Tue, 3 Mar 2026 17:25:13 +0100 Subject: [PATCH 22/39] add missing documentation as well as set pcp for ARP and ICMPv6 ND/RS/NS when client type is ipoe --- code/bngblaster/src/bbl_tx.c | 6 ++++++ docsrc/sources/configuration/dhcp.rst | 1 + docsrc/sources/configuration/dhcpv6.rst | 2 +- docsrc/sources/configuration/ipoe.rst | 8 +++++++- 4 files changed, 15 insertions(+), 2 deletions(-) diff --git a/code/bngblaster/src/bbl_tx.c b/code/bngblaster/src/bbl_tx.c index 247b1bfa..fa9b3ba8 100644 --- a/code/bngblaster/src/bbl_tx.c +++ b/code/bngblaster/src/bbl_tx.c @@ -452,6 +452,8 @@ bbl_tx_encode_packet_icmpv6_ns(bbl_session_s *session) eth.vlan_outer = session->vlan_key.outer_vlan_id; eth.vlan_inner = session->vlan_key.inner_vlan_id; eth.vlan_three = session->access_third_vlan; + eth.vlan_outer_priority = g_ctx->config.ipoe_vlan_priority; + eth.vlan_inner_priority = eth.vlan_outer_priority; memcpy((uint8_t*)&ipv6_dst, &ipv6_solicited_node_multicast, sizeof(ipv6addr_t)); ((uint8_t*)ipv6_dst)[13] = ((uint8_t*)session->icmpv6_ns_request)[13]; @@ -1385,6 +1387,8 @@ bbl_tx_encode_packet_arp_request(bbl_session_s *session) eth.vlan_outer = session->vlan_key.outer_vlan_id; eth.vlan_inner = session->vlan_key.inner_vlan_id; eth.vlan_three = session->access_third_vlan; + eth.vlan_outer_priority = g_ctx->config.ipoe_vlan_priority; + eth.vlan_inner_priority = eth.vlan_outer_priority; eth.type = ETH_TYPE_ARP; eth.next = &arp; arp.code = ARP_REQUEST; @@ -1421,6 +1425,8 @@ bbl_tx_encode_packet_arp_reply(bbl_session_s *session) eth.vlan_outer = session->vlan_key.outer_vlan_id; eth.vlan_inner = session->vlan_key.inner_vlan_id; eth.vlan_three = session->access_third_vlan; + eth.vlan_outer_priority = g_ctx->config.ipoe_vlan_priority; + eth.vlan_inner_priority = eth.vlan_outer_priority; eth.type = ETH_TYPE_ARP; eth.next = &arp; arp.code = ARP_REPLY; diff --git a/docsrc/sources/configuration/dhcp.rst b/docsrc/sources/configuration/dhcp.rst index 105290e7..466ba898 100644 --- a/docsrc/sources/configuration/dhcp.rst +++ b/docsrc/sources/configuration/dhcp.rst @@ -27,6 +27,7 @@ | | | Default: 0 | +-----------------------------------+----------------------------------------------------------------------+ | **vlan-priority** | | VLAN PBIT for all DHCP control traffic. | +| | | Overrides **ipoe.vlan-priority** for DHCP packets only. | | | | Default: 0 | +-----------------------------------+----------------------------------------------------------------------+ | **access-line** | | Add access-line attributes like Agent-Remote/Circuit-Id. | diff --git a/docsrc/sources/configuration/dhcpv6.rst b/docsrc/sources/configuration/dhcpv6.rst index c84a5ebb..ef4c190e 100644 --- a/docsrc/sources/configuration/dhcpv6.rst +++ b/docsrc/sources/configuration/dhcpv6.rst @@ -27,6 +27,7 @@ | | | Default: 10 | +-----------------------------------+----------------------------------------------------------------------+ | **vlan-priority** | | VLAN PBIT for all DHCPv6 control traffic. | +| | | Overrides **ipoe.vlan-priority** for DHCPv6 packets only. | | | | Default: 0 | +-----------------------------------+----------------------------------------------------------------------+ | **access-line** | | Add access-line attributes like Agent-Remote/Circuit-Id. | @@ -39,4 +40,3 @@ | | | Agent-Circuit-Id should be used with LDRA enabled only. | | | | Default: false | +-----------------------------------+----------------------------------------------------------------------+ - diff --git a/docsrc/sources/configuration/ipoe.rst b/docsrc/sources/configuration/ipoe.rst index 1d6c3cfe..51f9fa1e 100644 --- a/docsrc/sources/configuration/ipoe.rst +++ b/docsrc/sources/configuration/ipoe.rst @@ -16,4 +16,10 @@ +-----------------------------------+----------------------------------------------------------------------+ | **arp-interval** | | Periodic ARP interval in seconds (0 means disabled). | | | | Default: 300 | -+-----------------------------------+----------------------------------------------------------------------+ \ No newline at end of file ++-----------------------------------+----------------------------------------------------------------------+ +| **vlan-priority** | | VLAN PBIT for generic IPoE control traffic. | +| | | Used for ARP and ICMPv6 ND/RS/NS control traffic. | +| | | Default master value for IPoE traffic (including DHCP and DHCPv6) | +| | | unless overridden by protocol-specific settings. | +| | | Default: 0 | ++-----------------------------------+----------------------------------------------------------------------+ From 6389d325bfcb4e8a52de012820c630c722b5a5c4 Mon Sep 17 00:00:00 2001 From: Christian Giese Date: Thu, 5 Mar 2026 10:39:29 +0000 Subject: [PATCH 23/39] docs update --- docsrc/sources/configuration/dhcp.rst | 2 +- docsrc/sources/configuration/dhcpv6.rst | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/docsrc/sources/configuration/dhcp.rst b/docsrc/sources/configuration/dhcp.rst index 466ba898..d841ed21 100644 --- a/docsrc/sources/configuration/dhcp.rst +++ b/docsrc/sources/configuration/dhcp.rst @@ -27,7 +27,7 @@ | | | Default: 0 | +-----------------------------------+----------------------------------------------------------------------+ | **vlan-priority** | | VLAN PBIT for all DHCP control traffic. | -| | | Overrides **ipoe.vlan-priority** for DHCP packets only. | +| | | Overrides IPoE vlan-priority for DHCP packets only. | | | | Default: 0 | +-----------------------------------+----------------------------------------------------------------------+ | **access-line** | | Add access-line attributes like Agent-Remote/Circuit-Id. | diff --git a/docsrc/sources/configuration/dhcpv6.rst b/docsrc/sources/configuration/dhcpv6.rst index ef4c190e..dd293baa 100644 --- a/docsrc/sources/configuration/dhcpv6.rst +++ b/docsrc/sources/configuration/dhcpv6.rst @@ -27,7 +27,7 @@ | | | Default: 10 | +-----------------------------------+----------------------------------------------------------------------+ | **vlan-priority** | | VLAN PBIT for all DHCPv6 control traffic. | -| | | Overrides **ipoe.vlan-priority** for DHCPv6 packets only. | +| | | Overrides IPoE vlan-priority for DHCPv6 packets only. | | | | Default: 0 | +-----------------------------------+----------------------------------------------------------------------+ | **access-line** | | Add access-line attributes like Agent-Remote/Circuit-Id. | From 3df5c7352ab7b986769fe56bb20f250d73854f53 Mon Sep 17 00:00:00 2001 From: Christian Giese Date: Thu, 5 Mar 2026 11:30:50 +0000 Subject: [PATCH 24/39] fix stream ctrl command --- code/bngblaster/src/bbl_stream.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/code/bngblaster/src/bbl_stream.c b/code/bngblaster/src/bbl_stream.c index d6695979..6926bf5e 100644 --- a/code/bngblaster/src/bbl_stream.c +++ b/code/bngblaster/src/bbl_stream.c @@ -3060,9 +3060,10 @@ bbl_stream_ctrl_enabled(int fd, uint32_t session_id, json_t *arguments, if(state) args.state = state; if(args.stream) { + stream = args.stream; if(stream->session_traffic == false && stream->type != BBL_TYPE_MULTICAST) { - args.stream->enabled = enabled; + stream->enabled = enabled; } } else if(args.flows) { for(int i = 0; i < args.flows_array_len; i++) { From 6dd61d9e468a9aa35d910d43da8ecf131b3beda8 Mon Sep 17 00:00:00 2001 From: Christian Giese Date: Thu, 5 Mar 2026 12:35:36 +0000 Subject: [PATCH 25/39] add config for LI udp port --- code/bngblaster/src/bbl_config.c | 9 +++++- code/bngblaster/src/bbl_interactive.c | 6 ++++ code/bngblaster/src/bbl_protocols.c | 35 +++++++++++------------- docsrc/sources/configuration/traffic.rst | 3 ++ 4 files changed, 33 insertions(+), 20 deletions(-) diff --git a/code/bngblaster/src/bbl_config.c b/code/bngblaster/src/bbl_config.c index d28ea96f..a2445a65 100644 --- a/code/bngblaster/src/bbl_config.c +++ b/code/bngblaster/src/bbl_config.c @@ -20,6 +20,8 @@ const char g_default_system_id[] = "0100.1001.0010"; const char g_default_area[] = "49.0001/24"; const char g_default_ospf_area[] = "0.0.0.0"; +extern uint16_t g_li_udp_port; + #define JSON_OBJ_GET_BOOL(_json, _val, _section, _key) \ do { \ _val = json_object_get(_json, _key); \ @@ -3938,7 +3940,8 @@ json_parse_config(json_t *root) "stream-burst-ms", "reassemble-fragments", "multicast-autostart", - "udp-checksum" + "udp-checksum", + "li-udp-port" }; if(!schema_validate(section, "traffic", schema, sizeof(schema)/sizeof(schema[0]))) { @@ -3981,6 +3984,10 @@ json_parse_config(json_t *root) if(value) { g_ctx->config.stream_udp_checksum = json_boolean_value(value); } + JSON_OBJ_GET_NUMBER(section, value, "traffic", "li-udp-port", 0, 65535); + if(value) { + g_li_udp_port = json_number_value(value); + } } /* Session Traffic Configuration */ diff --git a/code/bngblaster/src/bbl_interactive.c b/code/bngblaster/src/bbl_interactive.c index 246ef3d5..dc34a2e4 100644 --- a/code/bngblaster/src/bbl_interactive.c +++ b/code/bngblaster/src/bbl_interactive.c @@ -163,9 +163,15 @@ void bbl_interactive_read_key_job(timer_s *timer) { int ch; + static bool show_li = false; UNUSED(timer); + if(!show_li && dict_count(g_ctx->li_flow_dict)) { + show_li = true; + bbl_interactive_init_window(); + } + ch = getch(); switch (ch) { case KEY_F(1): diff --git a/code/bngblaster/src/bbl_protocols.c b/code/bngblaster/src/bbl_protocols.c index 2ed46e96..48a4423d 100644 --- a/code/bngblaster/src/bbl_protocols.c +++ b/code/bngblaster/src/bbl_protocols.c @@ -16,6 +16,8 @@ static protocol_error_t decode_l2tp(uint8_t *buf, uint16_t len, uint8_t *sp, uint16_t sp_len, bbl_ethernet_header_s *eth, bbl_l2tp_s **_l2tp); static protocol_error_t encode_l2tp(uint8_t *buf, uint16_t *len, bbl_l2tp_s *l2tp); +uint16_t g_li_udp_port = QMX_LI_UDP_PORT; + /** * This function searches for the BNG Blaster data * traffic signature and returns true if found. @@ -3427,10 +3429,6 @@ decode_udp(uint8_t *buf, uint16_t len, udp->protocol = UDP_PROTOCOL_DHCP; ret_val = decode_dhcp(buf, len, sp, sp_len, (bbl_dhcp_s**)&udp->next); break; - case QMX_LI_UDP_PORT: - udp->protocol = UDP_PROTOCOL_QMX_LI; - ret_val = decode_qmx_li(buf, len, sp, sp_len, (bbl_qmx_li_s**)&udp->next); - break; case LDP_PORT: if(udp->src == LDP_PORT) { udp->protocol = UDP_PROTOCOL_LDP; @@ -3438,26 +3436,25 @@ decode_udp(uint8_t *buf, uint16_t len, } break; default: + if(udp->dst == g_li_udp_port || udp->src == g_li_udp_port) { + udp->protocol = UDP_PROTOCOL_QMX_LI; + ret_val = decode_qmx_li(buf, len, sp, sp_len, (bbl_qmx_li_s**)&udp->next); + } break; } if(ret_val == UNKNOWN_PROTOCOL) { - if(udp->src == QMX_LI_UDP_PORT) { - udp->protocol = UDP_PROTOCOL_QMX_LI; - ret_val = decode_qmx_li(buf, len, sp, sp_len, (bbl_qmx_li_s**)&udp->next); + /* Try if payload could be decoded as BBL! + * This fails fast if the 64 bit magic number + * is not found on the expected position. */ + ret_val = decode_bbl(buf, len, sp, sp_len, (bbl_bbl_s**)&udp->next); + if(ret_val == PROTOCOL_SUCCESS) { + udp->protocol = UDP_PROTOCOL_BBL; + eth->bbl = udp->next; } else { - /* Try if payload could be decoded as BBL! - * This fails fast if the 64 bit magic number - * is not found on the expected position. */ - ret_val = decode_bbl(buf, len, sp, sp_len, (bbl_bbl_s**)&udp->next); - if(ret_val == PROTOCOL_SUCCESS) { - udp->protocol = UDP_PROTOCOL_BBL; - eth->bbl = udp->next; - } else { - ret_val = PROTOCOL_SUCCESS; - udp->protocol = 0; - udp->next = NULL; - } + ret_val = PROTOCOL_SUCCESS; + udp->protocol = 0; + udp->next = NULL; } } diff --git a/docsrc/sources/configuration/traffic.rst b/docsrc/sources/configuration/traffic.rst index 59204330..127943fb 100644 --- a/docsrc/sources/configuration/traffic.rst +++ b/docsrc/sources/configuration/traffic.rst @@ -57,4 +57,7 @@ | | | Currently, this is restricted to BBL stream traffic | | | | only! | | | | Default: false | ++---------------------------------+--------------------------------------------------------+ +| **li-udp-port** | | Change default UDP port for LI traffic. | +| | | Default: 49152 | +---------------------------------+--------------------------------------------------------+ \ No newline at end of file From 8439a068033263f2b354774108881b8cab0e5c2a Mon Sep 17 00:00:00 2001 From: Christian Giese Date: Thu, 5 Mar 2026 18:42:12 +0000 Subject: [PATCH 26/39] fix regression tests --- code/bngblaster/src/bbl_ctrl.c | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/code/bngblaster/src/bbl_ctrl.c b/code/bngblaster/src/bbl_ctrl.c index 93fa71f6..a5ed108a 100644 --- a/code/bngblaster/src/bbl_ctrl.c +++ b/code/bngblaster/src/bbl_ctrl.c @@ -142,6 +142,16 @@ bbl_ctrl_schema(json_t *arguments, const char *const schema[]) if(valid) { continue; } + /* Deprecated! + * For backward compatibility with version 0.4.X, we still + * support per session commands using VLAN index instead of + * new session-id. */ + if(strcmp(key, "outer-vlan") == 0 || + strcmp(key, "inner-vlan") == 0 || + strcmp(key, "interface") == 0 || + strcmp(key, "ifindex") == 0) { + continue; + } return false; } return true; From 7ec2ca490c29ff1970052dd52da38022f7866b44 Mon Sep 17 00:00:00 2001 From: Christian Giese Date: Thu, 5 Mar 2026 18:42:34 +0000 Subject: [PATCH 27/39] CLI error message --- code/bngblaster-cli | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/code/bngblaster-cli b/code/bngblaster-cli index 8df3e96a..1223a555 100755 --- a/code/bngblaster-cli +++ b/code/bngblaster-cli @@ -89,7 +89,10 @@ def main(): usage() socket_path = sys.argv[1] - request = build_request(sys.argv) + try: + request = build_request(sys.argv) + except Exception as e: + error("invalid command") #print(json.dumps(request).encode('utf-8')) data = send_request(socket_path, request) From ffe2f4c1601edb9222692bf45c0988a4edffe690 Mon Sep 17 00:00:00 2001 From: Christian Giese Date: Thu, 5 Mar 2026 22:41:41 +0000 Subject: [PATCH 28/39] fix regression tests --- code/bngblaster/src/bbl_session.c | 50 +++++++++++++++---------------- code/bngblaster/src/bbl_stream.c | 12 ++++---- 2 files changed, 31 insertions(+), 31 deletions(-) diff --git a/code/bngblaster/src/bbl_session.c b/code/bngblaster/src/bbl_session.c index ea90ffdb..c107ba63 100644 --- a/code/bngblaster/src/bbl_session.c +++ b/code/bngblaster/src/bbl_session.c @@ -1276,15 +1276,6 @@ bbl_session_json(bbl_session_s *session) session_traffic = json_pack("{si si}", "total-flows", session->session_traffic.flows, "verified-flows", session->session_traffic.flows_verified); - if(session->session_traffic.ipv4_down) { - stream = session->session_traffic.ipv4_down; - json_object_set_new(session_traffic, "downstream-ipv4-flow-id", json_integer(stream->flow_id)); - json_object_set_new(session_traffic, "downstream-ipv4-tx-packets", json_integer(stream->tx_packets - stream->reset_packets_tx)); - json_object_set_new(session_traffic, "downstream-ipv4-rx-packets", json_integer(stream->rx_packets - stream->reset_packets_rx)); - json_object_set_new(session_traffic, "downstream-ipv4-rx-first-seq", json_integer(stream->rx_first_seq)); - json_object_set_new(session_traffic, "downstream-ipv4-loss", json_integer(stream->rx_loss - stream->reset_loss)); - json_object_set_new(session_traffic, "downstream-ipv4-wrong-session", json_integer(stream->rx_wrong_session)); - } if(session->session_traffic.ipv4_up) { stream = session->session_traffic.ipv4_up; json_object_set_new(session_traffic, "upstream-ipv4-flow-id", json_integer(stream->flow_id)); @@ -1294,14 +1285,14 @@ bbl_session_json(bbl_session_s *session) json_object_set_new(session_traffic, "upstream-ipv4-loss", json_integer(stream->rx_loss - stream->reset_loss)); json_object_set_new(session_traffic, "upstream-ipv4-wrong-session", json_integer(stream->rx_wrong_session)); } - if(session->session_traffic.ipv6_down) { - stream = session->session_traffic.ipv6_down; - json_object_set_new(session_traffic, "downstream-ipv6-flow-id", json_integer(stream->flow_id)); - json_object_set_new(session_traffic, "downstream-ipv6-tx-packets", json_integer(stream->tx_packets - stream->reset_packets_tx)); - json_object_set_new(session_traffic, "downstream-ipv6-rx-packets", json_integer(stream->rx_packets - stream->reset_packets_rx)); - json_object_set_new(session_traffic, "downstream-ipv6-rx-first-seq", json_integer(stream->rx_first_seq)); - json_object_set_new(session_traffic, "downstream-ipv6-loss", json_integer(stream->rx_loss - stream->reset_loss)); - json_object_set_new(session_traffic, "downstream-ipv6-wrong-session", json_integer(stream->rx_wrong_session)); + if(session->session_traffic.ipv4_down) { + stream = session->session_traffic.ipv4_down; + json_object_set_new(session_traffic, "downstream-ipv4-flow-id", json_integer(stream->flow_id)); + json_object_set_new(session_traffic, "downstream-ipv4-tx-packets", json_integer(stream->tx_packets - stream->reset_packets_tx)); + json_object_set_new(session_traffic, "downstream-ipv4-rx-packets", json_integer(stream->rx_packets - stream->reset_packets_rx)); + json_object_set_new(session_traffic, "downstream-ipv4-rx-first-seq", json_integer(stream->rx_first_seq)); + json_object_set_new(session_traffic, "downstream-ipv4-loss", json_integer(stream->rx_loss - stream->reset_loss)); + json_object_set_new(session_traffic, "downstream-ipv4-wrong-session", json_integer(stream->rx_wrong_session)); } if(session->session_traffic.ipv6_up) { stream = session->session_traffic.ipv6_up; @@ -1312,14 +1303,14 @@ bbl_session_json(bbl_session_s *session) json_object_set_new(session_traffic, "upstream-ipv6-loss", json_integer(stream->rx_loss - stream->reset_loss)); json_object_set_new(session_traffic, "upstream-ipv6-wrong-session", json_integer(stream->rx_wrong_session)); } - if(session->session_traffic.ipv6pd_down) { - stream = session->session_traffic.ipv6pd_down; - json_object_set_new(session_traffic, "downstream-ipv6pd-flow-id", json_integer(stream->flow_id)); - json_object_set_new(session_traffic, "downstream-ipv6pd-tx-packets", json_integer(stream->tx_packets - stream->reset_packets_tx)); - json_object_set_new(session_traffic, "downstream-ipv6pd-rx-packets", json_integer(stream->rx_packets - stream->reset_packets_rx)); - json_object_set_new(session_traffic, "downstream-ipv6pd-rx-first-seq", json_integer(stream->rx_first_seq)); - json_object_set_new(session_traffic, "downstream-ipv6pd-loss", json_integer(stream->rx_loss - stream->reset_loss)); - json_object_set_new(session_traffic, "downstream-ipv6pd-wrong-session", json_integer(stream->rx_wrong_session)); + if(session->session_traffic.ipv6_down) { + stream = session->session_traffic.ipv6_down; + json_object_set_new(session_traffic, "downstream-ipv6-flow-id", json_integer(stream->flow_id)); + json_object_set_new(session_traffic, "downstream-ipv6-tx-packets", json_integer(stream->tx_packets - stream->reset_packets_tx)); + json_object_set_new(session_traffic, "downstream-ipv6-rx-packets", json_integer(stream->rx_packets - stream->reset_packets_rx)); + json_object_set_new(session_traffic, "downstream-ipv6-rx-first-seq", json_integer(stream->rx_first_seq)); + json_object_set_new(session_traffic, "downstream-ipv6-loss", json_integer(stream->rx_loss - stream->reset_loss)); + json_object_set_new(session_traffic, "downstream-ipv6-wrong-session", json_integer(stream->rx_wrong_session)); } if(session->session_traffic.ipv6pd_up) { stream = session->session_traffic.ipv6pd_up; @@ -1330,6 +1321,15 @@ bbl_session_json(bbl_session_s *session) json_object_set_new(session_traffic, "upstream-ipv6pd-loss", json_integer(stream->rx_loss - stream->reset_loss)); json_object_set_new(session_traffic, "upstream-ipv6pd-wrong-session", json_integer(stream->rx_wrong_session)); } + if(session->session_traffic.ipv6pd_down) { + stream = session->session_traffic.ipv6pd_down; + json_object_set_new(session_traffic, "downstream-ipv6pd-flow-id", json_integer(stream->flow_id)); + json_object_set_new(session_traffic, "downstream-ipv6pd-tx-packets", json_integer(stream->tx_packets - stream->reset_packets_tx)); + json_object_set_new(session_traffic, "downstream-ipv6pd-rx-packets", json_integer(stream->rx_packets - stream->reset_packets_rx)); + json_object_set_new(session_traffic, "downstream-ipv6pd-rx-first-seq", json_integer(stream->rx_first_seq)); + json_object_set_new(session_traffic, "downstream-ipv6pd-loss", json_integer(stream->rx_loss - stream->reset_loss)); + json_object_set_new(session_traffic, "downstream-ipv6pd-wrong-session", json_integer(stream->rx_wrong_session)); + } } if(session->a10nsp_session) { a10nsp_session = json_pack("{ss si sb sb ss* ss* ss* ss* ss* ss* sI sI}", diff --git a/code/bngblaster/src/bbl_stream.c b/code/bngblaster/src/bbl_stream.c index 6926bf5e..39128f43 100644 --- a/code/bngblaster/src/bbl_stream.c +++ b/code/bngblaster/src/bbl_stream.c @@ -1983,37 +1983,37 @@ bbl_stream_session_init(bbl_session_s *session) if(!bbl_stream_session_add(g_ctx->config.stream_config_session_ipv4_up, session)) { return false; } - session->session_traffic.ipv4_up = session->streams.head; + session->session_traffic.ipv4_up = session->streams.tail; } if(g_ctx->config.stream_config_session_ipv4_down && session->endpoint.ipv4) { if(!bbl_stream_session_add(g_ctx->config.stream_config_session_ipv4_down, session)) { return false; } - session->session_traffic.ipv4_down = session->streams.head; + session->session_traffic.ipv4_down = session->streams.tail; } if(g_ctx->config.stream_config_session_ipv6_up && session->endpoint.ipv6) { if(!bbl_stream_session_add(g_ctx->config.stream_config_session_ipv6_up, session)) { return false; } - session->session_traffic.ipv6_up = session->streams.head; + session->session_traffic.ipv6_up = session->streams.tail; } if(g_ctx->config.stream_config_session_ipv6_down && session->endpoint.ipv6) { if(!bbl_stream_session_add(g_ctx->config.stream_config_session_ipv6_down, session)) { return false; } - session->session_traffic.ipv6_down = session->streams.head; + session->session_traffic.ipv6_down = session->streams.tail; } if(g_ctx->config.stream_config_session_ipv6pd_up && session->endpoint.ipv6pd) { if(!bbl_stream_session_add(g_ctx->config.stream_config_session_ipv6pd_up, session)) { return false; } - session->session_traffic.ipv6pd_up = session->streams.head; + session->session_traffic.ipv6pd_up = session->streams.tail; } if(g_ctx->config.stream_config_session_ipv6pd_down && session->endpoint.ipv6pd) { if(!bbl_stream_session_add(g_ctx->config.stream_config_session_ipv6pd_down, session)) { return false; } - session->session_traffic.ipv6pd_down = session->streams.head; + session->session_traffic.ipv6pd_down = session->streams.tail; } /** Add streams of corresponding stream-group-id */ From ef19a5e9c39ae9f67cd704c688734098e2f78b31 Mon Sep 17 00:00:00 2001 From: Christian Giese Date: Tue, 10 Mar 2026 13:33:58 +0000 Subject: [PATCH 29/39] fix stream/flow API --- code/bngblaster/src/bbl_stream.c | 65 ++++++++++++++++++-------------- 1 file changed, 37 insertions(+), 28 deletions(-) diff --git a/code/bngblaster/src/bbl_stream.c b/code/bngblaster/src/bbl_stream.c index 39128f43..1607df3a 100644 --- a/code/bngblaster/src/bbl_stream.c +++ b/code/bngblaster/src/bbl_stream.c @@ -2693,7 +2693,8 @@ static int bbl_stream_ctrl_args(int fd, uint32_t session_id, json_t *arguments, bbl_stream_args_s *args) { const char *s = NULL; - int intv; + json_int_t number; + int value; /* Init defaults */ args->session_group_id = -1; @@ -2707,13 +2708,15 @@ bbl_stream_ctrl_args(int fd, uint32_t session_id, json_t *arguments, bbl_stream_ } } - if(json_unpack(arguments, "{s:i}", "flow-id", &intv) == 0) { - if(intv < 0) { + if(json_unpack(arguments, "{s:I}", "flow-id", &number) == 0) { + if(number < 1) { return bbl_ctrl_status(fd, "warning", 400, "invalid flow-id"); } - args->flow_id = intv; + args->flow_id = number; args->stream = bbl_stream_index_get(args->flow_id); - if(args->stream) return 0; + if(args->stream) { + return 1; + } return bbl_ctrl_status(fd, "warning", 404, "stream not found"); } @@ -2721,33 +2724,33 @@ bbl_stream_ctrl_args(int fd, uint32_t session_id, json_t *arguments, bbl_stream_ if(args->flows) { if(json_is_array(args->flows)) { args->flows_array_len = json_array_size(args->flows); - return 0; + return 1; } return bbl_ctrl_status(fd, "error", 400, "flows must be of type array e.g. [1,2,3]"); } - if(json_unpack(arguments, "{s:i}", "flow-id-min", &intv) == 0) { - if(intv < 0) { + if(json_unpack(arguments, "{s:I}", "flow-id-min", &number) == 0) { + if(number < 0) { return bbl_ctrl_status(fd, "warning", 400, "invalid flow-id-min"); } - args->flow_id_min = intv; + args->flow_id_min = number; } - if(json_unpack(arguments, "{s:i}", "flow-id-max", &intv) == 0) { - if(intv < 0) { + if(json_unpack(arguments, "{s:I}", "flow-id-max", &number) == 0) { + if(number < 0) { return bbl_ctrl_status(fd, "warning", 400, "invalid flow-id-max"); } - args->flow_id_max = intv; + args->flow_id_max = number; if(args->flow_id_min > args->flow_id_max) { return bbl_ctrl_status(fd, "warning", 400, "flow-id-min > max"); } } - if(json_unpack(arguments, "{s:i}", "session-group-id", &intv) == 0) { - if(intv < 0 || intv > UINT16_MAX) { + if(json_unpack(arguments, "{s:I}", "session-group-id", &number) == 0) { + if(number < 0 || number > UINT16_MAX) { return bbl_ctrl_status(fd, "error", 400, "invalid session-group-id"); } - args->session_group_id = intv; + args->session_group_id = number; } if(json_unpack(arguments, "{s:s}", "direction", &s) == 0) { @@ -2765,17 +2768,17 @@ bbl_stream_ctrl_args(int fd, uint32_t session_id, json_t *arguments, bbl_stream_ json_unpack(arguments, "{s:s}", "name", &args->name); json_unpack(arguments, "{s:s}", "interface", &args->interface); - intv = 0; - json_unpack(arguments, "{s:b}", "verified-only", &intv); - if(intv) args->state = STREAM_STATE_VERIFIED; + value = 0; + json_unpack(arguments, "{s:b}", "verified-only", &value); + if(value) args->state = STREAM_STATE_VERIFIED; - intv = 0; - json_unpack(arguments, "{s:b}", "bidirectional-verified-only", &intv); - if(intv) args->state = STREAM_STATE_BIVERIFIED; + value = 0; + json_unpack(arguments, "{s:b}", "bidirectional-verified-only", &value); + if(value) args->state = STREAM_STATE_BIVERIFIED; - intv = 0; - json_unpack(arguments, "{s:b}", "pending-only", &intv); - if(intv) args->state = STREAM_STATE_PENDING; + value = 0; + json_unpack(arguments, "{s:b}", "pending-only", &value); + if(value) args->state = STREAM_STATE_PENDING; return 1; } @@ -2849,13 +2852,19 @@ bbl_stream_ctrl_info(int fd, uint32_t session_id __attribute__((unused)), json_t json_t *json_stream = NULL; bbl_stream_s *stream; - json_int_t flow_id; - + json_int_t number; + uint64_t flow_id; + /* Unpack further arguments */ - if(json_unpack(arguments, "{s:i}", "flow-id", &flow_id) != 0) { + json_unpack(arguments, "{s:b}", "debug", &debug); + if(json_unpack(arguments, "{s:I}", "flow-id", &number) != 0) { return bbl_ctrl_status(fd, "error", 400, "missing flow-id"); } - json_unpack(arguments, "{s:b}", "debug", &debug); + if(number < 1) { + return bbl_ctrl_status(fd, "error", 400, "invalid flow-id"); + } + flow_id = number; + stream = bbl_stream_index_get(flow_id); if(stream) { json_stream = bbl_stream_json(stream, debug); From 84985925438e99f7c067b4362762b6d6fde9b517 Mon Sep 17 00:00:00 2001 From: Christian Giese Date: Tue, 24 Mar 2026 17:18:48 +0000 Subject: [PATCH 30/39] fix access interface dhcpv6-ldra config --- code/bngblaster/src/bbl_tx.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/bngblaster/src/bbl_tx.c b/code/bngblaster/src/bbl_tx.c index fa9b3ba8..23015945 100644 --- a/code/bngblaster/src/bbl_tx.c +++ b/code/bngblaster/src/bbl_tx.c @@ -528,7 +528,7 @@ bbl_tx_encode_packet_dhcpv6_request(bbl_session_s *session) return IGNORED; } - if(g_ctx->config.dhcpv6_ldra) { + if(session->access_config->dhcpv6_ldra) { dhcpv6_relay.type = DHCPV6_MESSAGE_RELAY_FORW; dhcpv6_relay.peer_address = (void*)session->link_local_ipv6_address; dhcpv6_relay.relay_message = &dhcpv6; From 1c5bafe73eb4845f90cd9d6ee2ecd21167ea4ef5 Mon Sep 17 00:00:00 2001 From: Christian Giese Date: Tue, 24 Mar 2026 17:21:43 +0000 Subject: [PATCH 31/39] fix docs/table --- docsrc/sources/configuration/ipoe.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docsrc/sources/configuration/ipoe.rst b/docsrc/sources/configuration/ipoe.rst index 51f9fa1e..79319b6c 100644 --- a/docsrc/sources/configuration/ipoe.rst +++ b/docsrc/sources/configuration/ipoe.rst @@ -20,6 +20,6 @@ | **vlan-priority** | | VLAN PBIT for generic IPoE control traffic. | | | | Used for ARP and ICMPv6 ND/RS/NS control traffic. | | | | Default master value for IPoE traffic (including DHCP and DHCPv6) | -| | | unless overridden by protocol-specific settings. | +| | | unless overridden by protocol-specific settings. | | | | Default: 0 | +-----------------------------------+----------------------------------------------------------------------+ From 3eccc7b1fcddd8709817c7c57614676f2f7de2d7 Mon Sep 17 00:00:00 2001 From: Christian Giese Date: Tue, 24 Mar 2026 17:22:51 +0000 Subject: [PATCH 32/39] github pages --- docs/.buildinfo | 4 +- docs/_sources/api/interfaces.rst.txt | 3 - docs/_sources/api/sessions.rst.txt | 8 + docs/_sources/api/streams.rst.txt | 30 ++- docs/_sources/configuration/dhcp.rst.txt | 1 + docs/_sources/configuration/dhcpv6.rst.txt | 8 +- docs/_sources/configuration/igmp.rst.txt | 10 +- .../_sources/configuration/interfaces.rst.txt | 5 +- .../configuration/interfaces_a10nsp.rst.txt | 2 +- docs/_sources/configuration/ipoe.rst.txt | 8 +- docs/_sources/configuration/ldp.rst.txt | 5 +- docs/_sources/configuration/streams.rst.txt | 17 ++ docs/_sources/configuration/traffic.rst.txt | 3 + docs/_sources/install.rst.txt | 10 +- docs/_sources/streams.rst.txt | 60 ++++- docs/access/ipoe.html | 32 ++- docs/access/multicast.html | 20 +- docs/api/index.html | 42 +++- docs/api/sessions.html | 12 + docs/api/streams.html | 30 ++- docs/configuration/dhcp.html | 1 + docs/configuration/dhcpv6.html | 21 +- docs/configuration/igmp.html | 20 +- docs/configuration/index.html | 207 +++++++++++++----- docs/configuration/interfaces.html | 7 + docs/configuration/interfaces_a10nsp.html | 2 +- docs/configuration/ipoe.html | 10 + docs/configuration/ldp.html | 32 ++- docs/configuration/streams.html | 107 ++++++--- docs/configuration/traffic.html | 7 + docs/install.html | 10 +- docs/interfaces.html | 9 +- docs/routing/ldp.html | 32 ++- docs/searchindex.js | 2 +- docs/streams.html | 159 +++++++++++--- 35 files changed, 744 insertions(+), 192 deletions(-) diff --git a/docs/.buildinfo b/docs/.buildinfo index 1d1617ba..651942c7 100644 --- a/docs/.buildinfo +++ b/docs/.buildinfo @@ -1,4 +1,4 @@ # Sphinx build info version 1 -# This file records the configuration used when building these files. When it is not found, a full rebuild will be done. -config: c78719281f6c206f60fae59bc1d43df3 +# This file hashes the configuration used when building these files. When it is not found, a full rebuild will be done. +config: 920f489800452f0dcf37ddfeea461411 tags: 645f666f9bcd5a90fca523b33c5a78b7 diff --git a/docs/_sources/api/interfaces.rst.txt b/docs/_sources/api/interfaces.rst.txt index 13bda74a..18ee43ae 100644 --- a/docs/_sources/api/interfaces.rst.txt +++ b/docs/_sources/api/interfaces.rst.txt @@ -10,9 +10,6 @@ | **a10nsp-interfaces** | | List all a10nsp interface functions. | +-----------------------------------+----------------------------------------------------------------------+ | **lag-info** | | List all link aggregation (LAG) interfaces. | -| | | | -| | | **Arguments:** | -| | | ``interface`` | +-----------------------------------+----------------------------------------------------------------------+ | **interface-enable** | | Enable interface. | | | | | diff --git a/docs/_sources/api/sessions.rst.txt b/docs/_sources/api/sessions.rst.txt index d71aa53f..78bf07f6 100644 --- a/docs/_sources/api/sessions.rst.txt +++ b/docs/_sources/api/sessions.rst.txt @@ -56,3 +56,11 @@ | | | ``agent-circuit-id`` update agent-circuit-id | | | | ``ipv6-link-local`` update IPv6 link-local address | +-----------------------------------+----------------------------------------------------------------------+ +| **session-summary** | | Display session summary information. | +| | | | +| | | **Arguments:** | +| | | ``session-id`` | +| | | ``session-group-id`` (ignored if session-id is present) | +| | | ``session-id-min`` session range | +| | | ``session-id-max`` | ++-----------------------------------+----------------------------------------------------------------------+ diff --git a/docs/_sources/api/streams.rst.txt b/docs/_sources/api/streams.rst.txt index 0003a9c4..2de41928 100644 --- a/docs/_sources/api/streams.rst.txt +++ b/docs/_sources/api/streams.rst.txt @@ -6,15 +6,24 @@ | **stream-info** | | Display stream/flow information. | | | | | | | | **Arguments:** | -| | | ``flow-id`` | +| | | ``flow-id`` Mandatory | +| | | ``debug`` | +-----------------------------------+------------------------------------------------------------------------+ | **stream-summary** | | Display stream/flow summary information. | | | | | | | | **Arguments:** | +| | | ``flow-id`` | +| | | ``flow-id-min`` flow range | +| | | ``flow-id-max`` | +| | | ``flows`` list of flows (e.g. ``[1,2,3]``) | +| | | ``session-id`` | | | | ``session-group-id`` | | | | ``name`` stream name | | | | ``interface`` TX interface name | | | | ``direction`` [both(default), upstream, downstream] | +| | | ``verified-only`` streams verified | +| | | ``bidirectional-verified-only`` streams verified in both directions | +| | | ``pending-only`` streams not verified | +-----------------------------------+------------------------------------------------------------------------+ | **stream-reset** | | Reset all traffic streams. | +-----------------------------------+------------------------------------------------------------------------+ @@ -29,11 +38,17 @@ | | | | | | | **Arguments:** | | | | ``flow-id`` | +| | | ``flow-id-min`` flow range | +| | | ``flow-id-max`` | +| | | ``flows`` list of flows (e.g. ``[1,2,3]``) | | | | ``session-id`` | -| | | ``session-group-id`` (ignored if session-id is present) | +| | | ``session-group-id`` | | | | ``name`` stream name | | | | ``interface`` TX interface name | | | | ``direction`` [both(default), upstream, downstream] | +| | | ``verified-only`` streams verified | +| | | ``bidirectional-verified-only`` streams verified in both directions | +| | | ``pending-only`` streams not verified | +-----------------------------------+------------------------------------------------------------------------+ | **streams-pending** | | List flow-id of all pending (not verified) traffic streams. | +-----------------------------------+------------------------------------------------------------------------+ @@ -41,6 +56,17 @@ | | | | | | | **Arguments:** | | | | ``flow-id`` | +| | | ``flow-id-min`` flow range | +| | | ``flow-id-max`` | +| | | ``flows`` list of flows (e.g. ``[1,2,3]``) | +| | | ``session-id`` | +| | | ``session-group-id`` | +| | | ``name`` stream name | +| | | ``interface`` TX interface name | +| | | ``direction`` [both(default), upstream, downstream] | +| | | ``verified-only`` streams verified | +| | | ``bidirectional-verified-only`` streams verified in both directions | +| | | ``pending-only`` streams not verified | | | | ``tcp-flags`` [ack, fin, fin-ack, syn, syn-ack, rst, push, push-ack] | | | | ``pps`` | +-----------------------------------+------------------------------------------------------------------------+ diff --git a/docs/_sources/configuration/dhcp.rst.txt b/docs/_sources/configuration/dhcp.rst.txt index 105290e7..d841ed21 100644 --- a/docs/_sources/configuration/dhcp.rst.txt +++ b/docs/_sources/configuration/dhcp.rst.txt @@ -27,6 +27,7 @@ | | | Default: 0 | +-----------------------------------+----------------------------------------------------------------------+ | **vlan-priority** | | VLAN PBIT for all DHCP control traffic. | +| | | Overrides IPoE vlan-priority for DHCP packets only. | | | | Default: 0 | +-----------------------------------+----------------------------------------------------------------------+ | **access-line** | | Add access-line attributes like Agent-Remote/Circuit-Id. | diff --git a/docs/_sources/configuration/dhcpv6.rst.txt b/docs/_sources/configuration/dhcpv6.rst.txt index 64b74ea8..dd293baa 100644 --- a/docs/_sources/configuration/dhcpv6.rst.txt +++ b/docs/_sources/configuration/dhcpv6.rst.txt @@ -14,6 +14,9 @@ | **ia-pd** | | This option allows enabling or disabling DHCPv6 IA_PD. | | | | Default: true | +-----------------------------------+----------------------------------------------------------------------+ +| **ia-separate** | | Send seperate requests for IA_NA and IA_PD. | +| | | Default: false | ++-----------------------------------+----------------------------------------------------------------------+ | **rapid-commit** | | DHCPv6 rapid commit (2-way handshake). | | | | Default: true | +-----------------------------------+----------------------------------------------------------------------+ @@ -23,6 +26,10 @@ | **retry** | | DHCPv6 retry. | | | | Default: 10 | +-----------------------------------+----------------------------------------------------------------------+ +| **vlan-priority** | | VLAN PBIT for all DHCPv6 control traffic. | +| | | Overrides IPoE vlan-priority for DHCPv6 packets only. | +| | | Default: 0 | ++-----------------------------------+----------------------------------------------------------------------+ | **access-line** | | Add access-line attributes like Agent-Remote/Circuit-Id. | | | | Default: true | +-----------------------------------+----------------------------------------------------------------------+ @@ -33,4 +40,3 @@ | | | Agent-Circuit-Id should be used with LDRA enabled only. | | | | Default: false | +-----------------------------------+----------------------------------------------------------------------+ - diff --git a/docs/_sources/configuration/igmp.rst.txt b/docs/_sources/configuration/igmp.rst.txt index b3e75ec1..f322218a 100644 --- a/docs/_sources/configuration/igmp.rst.txt +++ b/docs/_sources/configuration/igmp.rst.txt @@ -18,7 +18,7 @@ | | | reports. This option allows the combination of leave and join | | | | records within a single IGMPv3 report using multiple group records.| | | | This option applies to the IGMP version 3 only! | -| | | Default: true | +| | | Default: false | +-----------------------------------+----------------------------------------------------------------------+ | **group** | | Multicast group base address (e.g. 239.0.0.1). | | | | If group is set to 293.0.0.1 with group-iter of 0.0.0.2, | @@ -54,15 +54,21 @@ | | | the measured join delay is above this threshold. | | | | Default: 0 (disabled) | +-----------------------------------+----------------------------------------------------------------------+ +| **robustness-interval** | | IGMP robustness interval in milliseconds. | +| | | Default: 1000 | ++-----------------------------------+----------------------------------------------------------------------+ | **send-multicast-traffic** | | If enabled, the BNG Blaster generates multicast traffic on the | | | | network interface based on the specified group and source | | | | attributes mentioned before. This traffic includes some special | | | | signatures for faster processing and more detailed analysis. | | | | Default: false | +-----------------------------------+----------------------------------------------------------------------+ +| **multicast-traffic-autostart** | | Multicast traffic autostart. | +| | | Default: true | ++-----------------------------------+----------------------------------------------------------------------+ | **multicast-traffic-length** | | Multicast traffic IP length. | | | | Only applicable with **send-multicast-traffic** enabled! | -| | | Default: 76 | +| | | Default: 0 | +-----------------------------------+----------------------------------------------------------------------+ | **multicast-traffic-tos** | | Multicast traffic TOS priority. | | | | Only applicable with **send-multicast-traffic** enabled! | diff --git a/docs/_sources/configuration/interfaces.rst.txt b/docs/_sources/configuration/interfaces.rst.txt index e8c638a4..285c77ff 100644 --- a/docs/_sources/configuration/interfaces.rst.txt +++ b/docs/_sources/configuration/interfaces.rst.txt @@ -46,4 +46,7 @@ | | | allows to run multiple BNG Blaster instances with disjoint session | | | | MAC addresses. | | | | Default: 0 | -+-----------------------------------+----------------------------------------------------------------------+ \ No newline at end of file ++-----------------------------------+----------------------------------------------------------------------+ +| **tun-name** | | TUN interface name prefix (``). | +| | | Default: bbl (bbl1, bbl2, ...) | ++-----------------------------------+----------------------------------------------------------------------+ diff --git a/docs/_sources/configuration/interfaces_a10nsp.rst.txt b/docs/_sources/configuration/interfaces_a10nsp.rst.txt index 4ba6a446..d5877388 100644 --- a/docs/_sources/configuration/interfaces_a10nsp.rst.txt +++ b/docs/_sources/configuration/interfaces_a10nsp.rst.txt @@ -10,6 +10,6 @@ | **qinq** | | Set outer VLAN ethertype to QinQ (0x88a8). | | | | Default: false | +-----------------------------------+----------------------------------------------------------------------+ -| **mac** | | Optional set gateway interface address manually. | +| **mac** | | Overwrite the A10NSP MAC address. | | | | Default: `parent interface/link MAC address` | +-----------------------------------+----------------------------------------------------------------------+ \ No newline at end of file diff --git a/docs/_sources/configuration/ipoe.rst.txt b/docs/_sources/configuration/ipoe.rst.txt index 1d6c3cfe..79319b6c 100644 --- a/docs/_sources/configuration/ipoe.rst.txt +++ b/docs/_sources/configuration/ipoe.rst.txt @@ -16,4 +16,10 @@ +-----------------------------------+----------------------------------------------------------------------+ | **arp-interval** | | Periodic ARP interval in seconds (0 means disabled). | | | | Default: 300 | -+-----------------------------------+----------------------------------------------------------------------+ \ No newline at end of file ++-----------------------------------+----------------------------------------------------------------------+ +| **vlan-priority** | | VLAN PBIT for generic IPoE control traffic. | +| | | Used for ARP and ICMPv6 ND/RS/NS control traffic. | +| | | Default master value for IPoE traffic (including DHCP and DHCPv6) | +| | | unless overridden by protocol-specific settings. | +| | | Default: 0 | ++-----------------------------------+----------------------------------------------------------------------+ diff --git a/docs/_sources/configuration/ldp.rst.txt b/docs/_sources/configuration/ldp.rst.txt index 12ba447b..271dfa42 100644 --- a/docs/_sources/configuration/ldp.rst.txt +++ b/docs/_sources/configuration/ldp.rst.txt @@ -49,4 +49,7 @@ | | | Default: false | +----------------------------------+------------------------------------------------------------+ | **raw-update-file** | | LDP RAW update file. | -+----------------------------------+------------------------------------------------------------+ \ No newline at end of file ++----------------------------------+------------------------------------------------------------+ +| **tos** | | TOS/TC for all LDP control traffic. | +| | | Default: 0 | ++-----------------------------------+-----------------------------------------------------------+ diff --git a/docs/_sources/configuration/streams.rst.txt b/docs/_sources/configuration/streams.rst.txt index 911e8370..887baf0f 100644 --- a/docs/_sources/configuration/streams.rst.txt +++ b/docs/_sources/configuration/streams.rst.txt @@ -18,16 +18,33 @@ | **autostart** | | Enable stream autostart. | | | | Default: true | +--------------------------------+------------------------------------------------------------------+ +| **count** | | Increment the source port for each instance of this stream. | +| | | Default: 1 Range: 1 - 65535 | ++--------------------------------+------------------------------------------------------------------+ | **source-port** | | Overwrite the default source port. | | | | For bidirectional streams (direction `both`), this is applied | | | | as source port in upstream and destination port in downstream. | | | | Default: 65056 Range: 0 - 65535 | +--------------------------------+------------------------------------------------------------------+ +| **source-port-step** | | Increment the source port for each instance of this stream. | +| | | See chapter Stream Iterators for details. | +| | | Default: 0 Range: 0 - 65535 | ++--------------------------------+------------------------------------------------------------------+ +| **source-port-max** | | Max source port before reset to `destination-port`. | +| | | Default: 65535 Range: 0 - 65535 | ++--------------------------------+------------------------------------------------------------------+ | **destination-port** | | Overwrite the default destination port. | | | | For bidirectional streams (direction `both`), this is applied | | | | as destination port in upstream and source port in downstream. | | | | Default: 65056 Range: 0 - 65535 | +--------------------------------+------------------------------------------------------------------+ +| **destination-port-step** | | Increment the destination port for each instance of this | +| | | stream. See chapter Stream Iterators for details. | +| | | Default: 0 Range: 0 - 65535 | ++--------------------------------+------------------------------------------------------------------+ +| **destination-port-max**. | | Max destination port before reset to `destination-port`. | +| | | Default: 65535 Range: 0 - 65535 | ++--------------------------------+------------------------------------------------------------------+ | **ipv4-df** | | Set IPv4 DF bit. | | | | Default: true | +--------------------------------+------------------------------------------------------------------+ diff --git a/docs/_sources/configuration/traffic.rst.txt b/docs/_sources/configuration/traffic.rst.txt index 59204330..127943fb 100644 --- a/docs/_sources/configuration/traffic.rst.txt +++ b/docs/_sources/configuration/traffic.rst.txt @@ -57,4 +57,7 @@ | | | Currently, this is restricted to BBL stream traffic | | | | only! | | | | Default: false | ++---------------------------------+--------------------------------------------------------+ +| **li-udp-port** | | Change default UDP port for LI traffic. | +| | | Default: 49152 | +---------------------------------+--------------------------------------------------------+ \ No newline at end of file diff --git a/docs/_sources/install.rst.txt b/docs/_sources/install.rst.txt index 30b1997d..659af398 100644 --- a/docs/_sources/install.rst.txt +++ b/docs/_sources/install.rst.txt @@ -163,7 +163,7 @@ The following steps are required to build the BNG Blaster with experimental .. note:: - Tested with DPDK version 22.11.5 and Ubuntu 22.04 (LTS)! + Tested with DPDK version 25.11.0 and Ubuntu 22.04 (LTS)! Download and install DPDK: @@ -175,9 +175,9 @@ https://doc.dpdk.org/guides/linux_gsg/build_dpdk.html sudo apt install meson ninja-build # download DPDK - wget https://fast.dpdk.org/rel/dpdk-22.11.5.tar.xz - tar xJf dpdk-22.11.5.tar.xz - cd dpdk-stable-22.11.5 + wget https://fast.dpdk.org/rel/dpdk-25.11.tar.xz + tar xJf dpdk-25.11.tar.xz + cd dpdk-25.11 # build with driver SDK meson -Denable_driver_sdk=true build @@ -202,7 +202,7 @@ If DPDK is installed correctly, cmake should show the following output: -- Build bngblaster with DPDK support -- Found PkgConfig: /usr/bin/pkg-config (found version "1.8.0") -- Checking for module 'libdpdk' - -- Found libdpdk, version 22.11.5 + -- Found libdpdk, version 25.11.0 -- Found DPDK via pkg-config The installed version should now show `dpdk` as new IO mode. diff --git a/docs/_sources/streams.rst.txt b/docs/_sources/streams.rst.txt index f6490869..e37f9895 100644 --- a/docs/_sources/streams.rst.txt +++ b/docs/_sources/streams.rst.txt @@ -185,6 +185,64 @@ with the new NAT option to verify NAT TCP streams. For now, TCP flags (SYN, …) are statically set to SYN but this could be adopted if needed. +Stream Iterators +~~~~~~~~~~~~~~~~ + +The BNG Blaster supports several iterators for traffic streams, such as layer 4 ports. + +Source and Destination Ports +^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +The stream configuration options ``source/destination-port-step`` +and ``source/destination-port-max`` enable deterministic port iteration. + +The port incrementor operates as a global iterator across all instances of a stream. +It does not automatically reset for new sessions unless explicitly configured to do so +using the maximum limit. + +**Global Scope:** The incrementor applies to every instance of the stream generated, regardless +of whether those instances are created via the stream count (multiple streams per session) +or across multiple sessions. + +**Step Behavior:** For every new stream instance instantiated, the port is increased +by the port-step configuraton option. + +**Reset Behavior:** The port increments until it exceeds port-max. Once reached, +the port iterator resets to the initial port value and resumes incrementing. + +**Configuration Parameters:** +* ``source/destination-port`` (default: 65056): The starting port number. +* ``source/destination-port-step`` (default: 0): The value by which to increment the port for each new stream instance. +* ``source/destination-port-max`` (default: 65535): The upper limit for the port range. When the current port exceeds this value, it wraps back to source-port. + +**Examples:** +Consider a scenario with 10 sessions, where each session generates 10 instances of a specific stream (total stream count = 100). +The starting source-port is 1000 and source-port-step is 1. + +*Scenario A - Global Unique Ports (Continuous Range):* +If you want every stream across all sessions to have a unique source port, +ensure the source-port-max is high enough to cover the total count. + +Config: source-port-max: 65535 +Result: Ports are assigned sequentially from 1000 to 1099. + +* Session 1: Ports 1000–1009 +* Session 2: Ports 1010–1019 +* ... +* Session 10: Ports 1090–1099 + +*Scenario B - Per-Session Port Reuse (Repeating Range):* +If you want each session to use the same set of source ports, you must configure source-port-max to +force a reset after the stream count for a single session is reached. + +Config: source-port-max: 1009 (Start port 1000 + 9 increments) +Result: Ports are assigned from 1000 to 1009, then reset. + +* Session 1: Ports 1000–1009 (Counter hits max, resets to 1000) +* Session 2: Ports 1000–1009 (Counter hits max, resets to 1000) +* ... +* Session 10: Ports 1000–1009 + Stream Commands ~~~~~~~~~~~~~~~ @@ -558,4 +616,4 @@ jitter calculations. | Nano Seconds | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ -The timestamp 0 means that timestamps are disabled. \ No newline at end of file +The timestamp 0 means that timestamps are disabled. diff --git a/docs/access/ipoe.html b/docs/access/ipoe.html index 7e363e19..96d04f6e 100644 --- a/docs/access/ipoe.html +++ b/docs/access/ipoe.html @@ -229,6 +229,16 @@

IPoE +

vlan-priority

+
+
VLAN PBIT for generic IPoE control traffic.
+
Used for ARP and ICMPv6 ND/RS/NS control traffic.
+
Default master value for IPoE traffic (including DHCP and DHCPv6)
+
unless overridden by protocol-specific settings.
+
Default: 0
+
+ + @@ -296,6 +306,7 @@

DHCP<

vlan-priority

VLAN PBIT for all DHCP control traffic.
+
Overrides IPoE vlan-priority for DHCP packets only.
Default: 0
@@ -357,27 +368,42 @@

DHCPv6< -

rapid-commit

+

ia-separate

+
+
Send seperate requests for IA_NA and IA_PD.
+
Default: false
+
+ + +

rapid-commit

DHCPv6 rapid commit (2-way handshake).
Default: true
-

timeout

+

timeout

DHCPv6 timeout in seconds.
Default: 5
-

retry

+

retry

DHCPv6 retry.
Default: 10
+

vlan-priority

+
+
VLAN PBIT for all DHCPv6 control traffic.
+
Overrides IPoE vlan-priority for DHCPv6 packets only.
+
Default: 0
+
+ +

access-line

records within a single IGMPv3 report using multiple group records.
This option applies to the IGMP version 3 only!
-
Default: true
+
Default: false
@@ -395,7 +395,14 @@

IPTV Zapping Test

send-multicast-traffic

+

robustness-interval

+
+
IGMP robustness interval in milliseconds.
+
Default: 1000
+
+ + +

send-multicast-traffic

+

session-summary

+
+
Display session summary information.
+

+
Arguments:
+
session-id
+
session-group-id (ignored if session-id is present)
+
session-id-min session range
+
session-id-max
+
+ + @@ -785,7 +797,8 @@

Streams
Display stream/flow information.

Arguments:
-
flow-id
+
flow-id Mandatory
+
debug
@@ -794,10 +807,18 @@

Streams
Display stream/flow summary information.

Arguments:
+
flow-id
+
flow-id-min flow range
+
flow-id-max
+
flows list of flows (e.g. [1,2,3])
+
session-id
session-group-id
name stream name
interface TX interface name
direction [both(default), upstream, downstream]
+
verified-only streams verified
+
bidirectional-verified-only streams verified in both directions
+
pending-only streams not verified
@@ -823,11 +844,17 @@

Streams

Arguments:
flow-id
+
flow-id-min flow range
+
flow-id-max
+
flows list of flows (e.g. [1,2,3])
session-id
-
session-group-id (ignored if session-id is present)
+
session-group-id
name stream name
interface TX interface name
direction [both(default), upstream, downstream]
+
verified-only streams verified
+
bidirectional-verified-only streams verified in both directions
+
pending-only streams not verified
@@ -843,6 +870,17 @@

Streams

Arguments:
flow-id
+
flow-id-min flow range
+
flow-id-max
+
flows list of flows (e.g. [1,2,3])
+
session-id
+
session-group-id
+
name stream name
+
interface TX interface name
+
direction [both(default), upstream, downstream]
+
verified-only streams verified
+
bidirectional-verified-only streams verified in both directions
+
pending-only streams not verified
tcp-flags [ack, fin, fin-ack, syn, syn-ack, rst, push, push-ack]
pps
diff --git a/docs/api/sessions.html b/docs/api/sessions.html index 927aa70c..f3031baa 100644 --- a/docs/api/sessions.html +++ b/docs/api/sessions.html @@ -194,6 +194,18 @@ +

session-summary

+
+
Display session summary information.
+

+
Arguments:
+
session-id
+
session-group-id (ignored if session-id is present)
+
session-id-min session range
+
session-id-max
+
+ + diff --git a/docs/api/streams.html b/docs/api/streams.html index e87c19d5..6ce820f7 100644 --- a/docs/api/streams.html +++ b/docs/api/streams.html @@ -106,7 +106,8 @@
Display stream/flow information.

Arguments:
-
flow-id
+
flow-id Mandatory
+
debug
@@ -115,10 +116,18 @@
Display stream/flow summary information.

Arguments:
+
flow-id
+
flow-id-min flow range
+
flow-id-max
+
flows list of flows (e.g. [1,2,3])
+
session-id
session-group-id
name stream name
interface TX interface name
direction [both(default), upstream, downstream]
+
verified-only streams verified
+
bidirectional-verified-only streams verified in both directions
+
pending-only streams not verified
@@ -144,11 +153,17 @@

Arguments:
flow-id
+
flow-id-min flow range
+
flow-id-max
+
flows list of flows (e.g. [1,2,3])
session-id
-
session-group-id (ignored if session-id is present)
+
session-group-id
name stream name
interface TX interface name
direction [both(default), upstream, downstream]
+
verified-only streams verified
+
bidirectional-verified-only streams verified in both directions
+
pending-only streams not verified
@@ -164,6 +179,17 @@

Arguments:
flow-id
+
flow-id-min flow range
+
flow-id-max
+
flows list of flows (e.g. [1,2,3])
+
session-id
+
session-group-id
+
name stream name
+
interface TX interface name
+
direction [both(default), upstream, downstream]
+
verified-only streams verified
+
bidirectional-verified-only streams verified in both directions
+
pending-only streams not verified
tcp-flags [ack, fin, fin-ack, syn, syn-ack, rst, push, push-ack]
pps
diff --git a/docs/configuration/dhcp.html b/docs/configuration/dhcp.html index ffb6a11b..c237746a 100644 --- a/docs/configuration/dhcp.html +++ b/docs/configuration/dhcp.html @@ -150,6 +150,7 @@

vlan-priority

VLAN PBIT for all DHCP control traffic.
+
Overrides IPoE vlan-priority for DHCP packets only.
Default: 0
diff --git a/docs/configuration/dhcpv6.html b/docs/configuration/dhcpv6.html index bb1d74fb..21c64c1b 100644 --- a/docs/configuration/dhcpv6.html +++ b/docs/configuration/dhcpv6.html @@ -119,27 +119,42 @@ -

rapid-commit

+

ia-separate

+
+
Send seperate requests for IA_NA and IA_PD.
+
Default: false
+
+ + +

rapid-commit

DHCPv6 rapid commit (2-way handshake).
Default: true
-

timeout

+

timeout

DHCPv6 timeout in seconds.
Default: 5
-

retry

+

retry

DHCPv6 retry.
Default: 10
+

vlan-priority

+
+
VLAN PBIT for all DHCPv6 control traffic.
+
Overrides IPoE vlan-priority for DHCPv6 packets only.
+
Default: 0
+
+ +

access-line

Add access-line attributes like Agent-Remote/Circuit-Id.
diff --git a/docs/configuration/igmp.html b/docs/configuration/igmp.html index 6b6f52f5..7f6f2282 100644 --- a/docs/configuration/igmp.html +++ b/docs/configuration/igmp.html @@ -125,7 +125,7 @@
reports. This option allows the combination of leave and join
records within a single IGMPv3 report using multiple group records.
This option applies to the IGMP version 3 only!
-
Default: true
+
Default: false
@@ -199,7 +199,14 @@ -

send-multicast-traffic

+

robustness-interval

+
+
IGMP robustness interval in milliseconds.
+
Default: 1000
+
+ + +

send-multicast-traffic

If enabled, the BNG Blaster generates multicast traffic on the
network interface based on the specified group and source
@@ -209,11 +216,18 @@
+

multicast-traffic-autostart

+
+
Multicast traffic autostart.
+
Default: true
+
+ +

multicast-traffic-length

Multicast traffic IP length.
Only applicable with send-multicast-traffic enabled!
-
Default: 76
+
Default: 0
diff --git a/docs/configuration/index.html b/docs/configuration/index.html index 61e8d0a2..25cdd28e 100644 --- a/docs/configuration/index.html +++ b/docs/configuration/index.html @@ -280,6 +280,13 @@

Interfaces

tun-name

+
+
TUN interface name prefix (<tun-name><session-id>).
+
Default: bbl (bbl1, bbl2, …)
+
+ +
@@ -1770,6 +1787,7 @@

DHCP<

vlan-priority

VLAN PBIT for all DHCP control traffic.
+
Overrides IPoE vlan-priority for DHCP packets only.
Default: 0
@@ -1831,27 +1849,42 @@

DHCPv6< -

rapid-commit

+

ia-separate

+
+
Send seperate requests for IA_NA and IA_PD.
+
Default: false
+
+ + +

rapid-commit

DHCPv6 rapid commit (2-way handshake).
Default: true
-

timeout

+

timeout

DHCPv6 timeout in seconds.
Default: 5
-

retry

+

retry

DHCPv6 retry.
Default: 10
+

vlan-priority

+
+
VLAN PBIT for all DHCPv6 control traffic.
+
Overrides IPoE vlan-priority for DHCPv6 packets only.
+
Default: 0
+
+ +

access-line

Add access-line attributes like Agent-Remote/Circuit-Id.
@@ -1912,7 +1945,7 @@

IGMP<
reports. This option allows the combination of leave and join
records within a single IGMPv3 report using multiple group records.
This option applies to the IGMP version 3 only!
-
Default: true
+
Default: false

@@ -1986,7 +2019,14 @@

IGMP< -

send-multicast-traffic

+

robustness-interval

+
+
IGMP robustness interval in milliseconds.
+
Default: 1000
+
+ + +

send-multicast-traffic

If enabled, the BNG Blaster generates multicast traffic on the
network interface based on the specified group and source
@@ -1996,11 +2036,18 @@

IGMP<

+

multicast-traffic-autostart

+
+
Multicast traffic autostart.
+
Default: true
+
+ +

multicast-traffic-length

Multicast traffic IP length.
Only applicable with send-multicast-traffic enabled!
-
Default: 76
+
Default: 0
@@ -2250,6 +2297,13 @@

Traffic +

li-udp-port

+
+
Change default UDP port for LI traffic.
+
Default: 49152
+
+ + @@ -2296,7 +2350,14 @@

Traffic-Streams

source-port

+

count

+
+
Increment the source port for each instance of this stream.
+
Default: 1 Range: 1 - 65535
+
+ + +

source-port

Overwrite the default source port.
For bidirectional streams (direction both), this is applied
@@ -2305,7 +2366,22 @@

Traffic-Streams

destination-port

+

source-port-step

+
+
Increment the source port for each instance of this stream.
+
See chapter Stream Iterators for details.
+
Default: 0 Range: 0 - 65535
+
+ + +

source-port-max

+
+
Max source port before reset to destination-port.
+
Default: 65535 Range: 0 - 65535
+
+ + +

destination-port

Overwrite the default destination port.
For bidirectional streams (direction both), this is applied
@@ -2314,14 +2390,29 @@

Traffic-Streams

ipv4-df

+

destination-port-step

+
+
Increment the destination port for each instance of this
+
stream. See chapter Stream Iterators for details.
+
Default: 0 Range: 0 - 65535
+
+ + +

destination-port-max.

+
+
Max destination port before reset to destination-port.
+
Default: 65535 Range: 0 - 65535
+
+ + +

ipv4-df

Set IPv4 DF bit.
Default: true
-

priority

+

priority

IPv4 TOS / IPv6 TC.
For L2TP downstream traffic, the IPv4 TOS is applied
@@ -2330,35 +2421,35 @@

Traffic-Streams

vlan-priority

+

vlan-priority

VLAN priority.
Default: 0 Range: 0 - 7
-

inner-vlan-priority

+

inner-vlan-priority

Inner VLAN priority.
Default: vlan-priority Range: 0 - 7
-

length

+

length

Layer 3 (IP header + payload) traffic length.
Default: 128 Range: 76 - 9000
-

ttl

+

ttl

TTL.
Default: 64 Range: 0 - 255
-

pps

+

pps

Stream traffic rate in packets per second.
This value supports also float numbers like 0.1 or 2.5.
@@ -2367,7 +2458,7 @@

Traffic-Streams

bps

+

bps

Stream traffic rate in bits per second (layer 3).
PPS has priority over bps where the second is only a helper
@@ -2381,21 +2472,21 @@

Traffic-Streams

pps-upstream

+

pps-upstream

Optionally overwrite PPS in upstream to support bidirectional
streams with different rates for upstream and downstream.
-

bps-upstream

+

bps-upstream

Optionally overwrite bps in upstream to support bidirectional
streams with different rates for upstream and downstream.
-

setup-interval

+

setup-interval

Set optional setup interval in seconds. If set, sent max 1
packet per setup interval until stream becomes verified.
@@ -2406,43 +2497,43 @@

Traffic-Streams

a10nsp-interface

+

a10nsp-interface

Select the corresponding A10NSP interface for this stream.
-

network-interface

+

network-interface

Select the corresponding network interface for this stream.
-

network-ipv4-address

+

network-ipv4-address

Overwrite network interface IPv4 address.
-

network-ipv6-address

+

network-ipv6-address

Overwrite network interface IPv6 address.
-

destination-ipv4-address

+

destination-ipv4-address

Overwrite the IPv4 destination address.
-

destination-ipv6-address

+

destination-ipv6-address

Overwrite the IPv6 destination address.
-

access-ipv4-source-address

+

access-ipv4-source-address

Overwrite the access IPv4 source address (client).
This option can be used to test the BNG RPF functionality
@@ -2451,7 +2542,7 @@

Traffic-Streams

access-ipv6-source-address

+

access-ipv6-source-address

Overwrite the access IPv6 source address (client).
This option can be used to test the BNG RPF functionality
@@ -2460,14 +2551,14 @@

Traffic-Streams

max-packets

+

max-packets

Send a burst of N packets and stop.
Default: 0 (infinity)
-

start-delay

+

start-delay

Wait N seconds after the session is established
before starting the traffic stream.
@@ -2475,78 +2566,78 @@

Traffic-Streams

tx-label1

+

tx-label1

MPLS send (TX) label (outer label).
-

tx-label1-exp

+

tx-label1-exp

EXP bits of the first label (outer label).
Default: 0
-

tx-label1-ttl

+

tx-label1-ttl

TTL of the first label (outer label).
Default: 255
-

tx-label2

+

tx-label2

MPLS send (TX) label (inner label).
-

tx-label2-exp

+

tx-label2-exp

EXP bits of the second label (inner label).
Default: 0
-

tx-label2-ttl

+

tx-label2-ttl

TTL of the second label (inner label).
Default: 255
-

rx-label1

+

rx-label1

Expected receive MPLS label (outer label).
-

rx-label2

+

rx-label2

Expected receive MPLS label (inner label).
-

ldp-ipv4-lookup-address

+

ldp-ipv4-lookup-address

Dynamically resolve outer label.
-

ldp-ipv6-lookup-address

+

ldp-ipv6-lookup-address

Dynamically resolve outer label.
-

nat

+

nat

Enable NAT support.
Default: false
-

raw-tcp

+

raw-tcp

Send RAW TCP traffic (UDP-like traffic with TCP header).
Default: false
@@ -3467,18 +3558,18 @@

LDP

Attribute

-

Description

+

Description

instance-id

-
+
LDP instance identifier.

keepalive-time

-
+
LDP session keepalive time in seconds.
The keepalive-time defines the local LDP session
keepalive timeout. Each LDP peer must calculate the
@@ -3497,35 +3588,35 @@

LDP

hold-time

-
+
LDP hello hold time in seconds.
Default: 15 Range: 0 - 65535

teardown-time

-
+
LDP teardown time in seconds.
Default: 5 Range: 0 - 65535

hostname

-
+
LDP hostname.
Default: bngblaster

lsr-id

-
+
LDP LSR identifier.
Default: 10.10.10.10

ipv6-transport-address

-
+
LDP transport IPv6 address.
Setting a valid IPv6 address here enables LDP IPv6
hello and transport.
@@ -3533,20 +3624,20 @@

LDP

ipv4-transport-address

-
+
LDP transport IPv4 address.
Default: lsr-id

no-ipv4-transport

-
+
Disable/discard IPv4 LDP hello messages.

prefer-ipv4-transport

-
+
According to RFC7552, IPv6 is preferred over IPv4 which
can be changed with this option to prefer IPv4 transport
even if IPv6 is enabled.
@@ -3555,11 +3646,19 @@

LDP

raw-update-file

-
+
LDP RAW update file.
+
+
tos | | TOS/TC for all LDP control traffic.
+
| Default: 0
+
+
+
+ + diff --git a/docs/configuration/interfaces.html b/docs/configuration/interfaces.html index a22c004a..1aa773c1 100644 --- a/docs/configuration/interfaces.html +++ b/docs/configuration/interfaces.html @@ -180,6 +180,13 @@
+

tun-name

+
+
TUN interface name prefix (<tun-name><session-id>).
+
Default: bbl (bbl1, bbl2, …)
+
+ + diff --git a/docs/configuration/interfaces_a10nsp.html b/docs/configuration/interfaces_a10nsp.html index a1e3084a..8318f2a4 100644 --- a/docs/configuration/interfaces_a10nsp.html +++ b/docs/configuration/interfaces_a10nsp.html @@ -113,7 +113,7 @@

mac

-
Optional set gateway interface address manually.
+
Overwrite the A10NSP MAC address.
Default: parent interface/link MAC address
diff --git a/docs/configuration/ipoe.html b/docs/configuration/ipoe.html index 12784bae..d1762828 100644 --- a/docs/configuration/ipoe.html +++ b/docs/configuration/ipoe.html @@ -126,6 +126,16 @@

+

vlan-priority

+
+
VLAN PBIT for generic IPoE control traffic.
+
Used for ARP and ICMPv6 ND/RS/NS control traffic.
+
Default master value for IPoE traffic (including DHCP and DHCPv6)
+
unless overridden by protocol-specific settings.
+
Default: 0
+
+ + diff --git a/docs/configuration/ldp.html b/docs/configuration/ldp.html index 5d10a181..e74bac0a 100644 --- a/docs/configuration/ldp.html +++ b/docs/configuration/ldp.html @@ -94,18 +94,18 @@ - + - - - - - - - - - - - + +

Attribute

Description

Description

instance-id

+
LDP instance identifier.

keepalive-time

+
LDP session keepalive time in seconds.
The keepalive-time defines the local LDP session
keepalive timeout. Each LDP peer must calculate the
@@ -124,35 +124,35 @@

hold-time

+
LDP hello hold time in seconds.
Default: 15 Range: 0 - 65535

teardown-time

+
LDP teardown time in seconds.
Default: 5 Range: 0 - 65535

hostname

+
LDP hostname.
Default: bngblaster

lsr-id

+
LDP LSR identifier.
Default: 10.10.10.10

ipv6-transport-address

+
LDP transport IPv6 address.
Setting a valid IPv6 address here enables LDP IPv6
hello and transport.
@@ -160,20 +160,20 @@

ipv4-transport-address

+
LDP transport IPv4 address.
Default: lsr-id

no-ipv4-transport

+
Disable/discard IPv4 LDP hello messages.

prefer-ipv4-transport

+
According to RFC7552, IPv6 is preferred over IPv4 which
can be changed with this option to prefer IPv4 transport
even if IPv6 is enabled.
@@ -182,11 +182,19 @@

raw-update-file

+
LDP RAW update file.
+
tos | | TOS/TC for all LDP control traffic.
+
| Default: 0
+
+
+
+
diff --git a/docs/configuration/streams.html b/docs/configuration/streams.html index 4a46c44f..7b43a6ec 100644 --- a/docs/configuration/streams.html +++ b/docs/configuration/streams.html @@ -129,7 +129,14 @@
-

source-port

+

count

+
+
Increment the source port for each instance of this stream.
+
Default: 1 Range: 1 - 65535
+
+ + +

source-port

Overwrite the default source port.
For bidirectional streams (direction both), this is applied
@@ -138,7 +145,22 @@
-

destination-port

+

source-port-step

+
+
Increment the source port for each instance of this stream.
+
See chapter Stream Iterators for details.
+
Default: 0 Range: 0 - 65535
+
+ + +

source-port-max

+
+
Max source port before reset to destination-port.
+
Default: 65535 Range: 0 - 65535
+
+ + +

destination-port

Overwrite the default destination port.
For bidirectional streams (direction both), this is applied
@@ -147,14 +169,29 @@
-

ipv4-df

+

destination-port-step

+
+
Increment the destination port for each instance of this
+
stream. See chapter Stream Iterators for details.
+
Default: 0 Range: 0 - 65535
+
+ + +

destination-port-max.

+
+
Max destination port before reset to destination-port.
+
Default: 65535 Range: 0 - 65535
+
+ + +

ipv4-df

Set IPv4 DF bit.
Default: true
-

priority

+

priority

IPv4 TOS / IPv6 TC.
For L2TP downstream traffic, the IPv4 TOS is applied
@@ -163,35 +200,35 @@
-

vlan-priority

+

vlan-priority

VLAN priority.
Default: 0 Range: 0 - 7
-

inner-vlan-priority

+

inner-vlan-priority

Inner VLAN priority.
Default: vlan-priority Range: 0 - 7
-

length

+

length

Layer 3 (IP header + payload) traffic length.
Default: 128 Range: 76 - 9000
-

ttl

+

ttl

TTL.
Default: 64 Range: 0 - 255
-

pps

+

pps

Stream traffic rate in packets per second.
This value supports also float numbers like 0.1 or 2.5.
@@ -200,7 +237,7 @@
-

bps

+

bps

Stream traffic rate in bits per second (layer 3).
PPS has priority over bps where the second is only a helper
@@ -214,21 +251,21 @@
-

pps-upstream

+

pps-upstream

Optionally overwrite PPS in upstream to support bidirectional
streams with different rates for upstream and downstream.
-

bps-upstream

+

bps-upstream

Optionally overwrite bps in upstream to support bidirectional
streams with different rates for upstream and downstream.
-

setup-interval

+

setup-interval

Set optional setup interval in seconds. If set, sent max 1
packet per setup interval until stream becomes verified.
@@ -239,43 +276,43 @@
-

a10nsp-interface

+

a10nsp-interface

Select the corresponding A10NSP interface for this stream.
-

network-interface

+

network-interface

Select the corresponding network interface for this stream.
-

network-ipv4-address

+

network-ipv4-address

Overwrite network interface IPv4 address.
-

network-ipv6-address

+

network-ipv6-address

Overwrite network interface IPv6 address.
-

destination-ipv4-address

+

destination-ipv4-address

Overwrite the IPv4 destination address.
-

destination-ipv6-address

+

destination-ipv6-address

Overwrite the IPv6 destination address.
-

access-ipv4-source-address

+

access-ipv4-source-address

Overwrite the access IPv4 source address (client).
This option can be used to test the BNG RPF functionality
@@ -284,7 +321,7 @@
-

access-ipv6-source-address

+

access-ipv6-source-address

Overwrite the access IPv6 source address (client).
This option can be used to test the BNG RPF functionality
@@ -293,14 +330,14 @@
-

max-packets

+

max-packets

Send a burst of N packets and stop.
Default: 0 (infinity)
-

start-delay

+

start-delay

Wait N seconds after the session is established
before starting the traffic stream.
@@ -308,78 +345,78 @@
-

tx-label1

+

tx-label1

MPLS send (TX) label (outer label).
-

tx-label1-exp

+

tx-label1-exp

EXP bits of the first label (outer label).
Default: 0
-

tx-label1-ttl

+

tx-label1-ttl

TTL of the first label (outer label).
Default: 255
-

tx-label2

+

tx-label2

MPLS send (TX) label (inner label).
-

tx-label2-exp

+

tx-label2-exp

EXP bits of the second label (inner label).
Default: 0
-

tx-label2-ttl

+

tx-label2-ttl

TTL of the second label (inner label).
Default: 255
-

rx-label1

+

rx-label1

Expected receive MPLS label (outer label).
-

rx-label2

+

rx-label2

Expected receive MPLS label (inner label).
-

ldp-ipv4-lookup-address

+

ldp-ipv4-lookup-address

Dynamically resolve outer label.
-

ldp-ipv6-lookup-address

+

ldp-ipv6-lookup-address

Dynamically resolve outer label.
-

nat

+

nat

Enable NAT support.
Default: false
-

raw-tcp

+

raw-tcp

Send RAW TCP traffic (UDP-like traffic with TCP header).
Default: false
diff --git a/docs/configuration/traffic.html b/docs/configuration/traffic.html index 60d971d0..2312a6ad 100644 --- a/docs/configuration/traffic.html +++ b/docs/configuration/traffic.html @@ -187,6 +187,13 @@
+

li-udp-port

+
+
Change default UDP port for LI traffic.
+
Default: 49152
+
+ + diff --git a/docs/install.html b/docs/install.html index 5af9ea6b..3cf7f662 100644 --- a/docs/install.html +++ b/docs/install.html @@ -231,7 +231,7 @@

Build and Run Unit TestsDPDK support.

Note

-

Tested with DPDK version 22.11.5 and Ubuntu 22.04 (LTS)!

+

Tested with DPDK version 25.11.0 and Ubuntu 22.04 (LTS)!

Download and install DPDK: https://doc.dpdk.org/guides/linux_gsg/build_dpdk.html

@@ -239,9 +239,9 @@

Build and Run Unit Tests
-- Build bngblaster with DPDK support
 -- Found PkgConfig: /usr/bin/pkg-config (found version "1.8.0")
 -- Checking for module 'libdpdk'
---   Found libdpdk, version 22.11.5
+--   Found libdpdk, version 25.11.0
 -- Found DPDK via pkg-config
 

diff --git a/docs/interfaces.html b/docs/interfaces.html index 2370fdd4..a7587ea7 100644 --- a/docs/interfaces.html +++ b/docs/interfaces.html @@ -280,6 +280,13 @@

Interface Settings

tun-name

+
+
TUN interface name prefix (<tun-name><session-id>).
+
Default: bbl (bbl1, bbl2, …)
+
+ +
{
@@ -1567,7 +1574,7 @@ 

Triple Tagged

mac

-
Optional set gateway interface address manually.
+
Overwrite the A10NSP MAC address.
Default: parent interface/link MAC address
diff --git a/docs/routing/ldp.html b/docs/routing/ldp.html index d0229b23..1764517f 100644 --- a/docs/routing/ldp.html +++ b/docs/routing/ldp.html @@ -149,18 +149,18 @@

Configuration

Attribute

-

Description

+

Description

instance-id

-
+
LDP instance identifier.

keepalive-time

-
+
LDP session keepalive time in seconds.
The keepalive-time defines the local LDP session
keepalive timeout. Each LDP peer must calculate the
@@ -179,35 +179,35 @@

Configuration

hold-time

-
+
LDP hello hold time in seconds.
Default: 15 Range: 0 - 65535

teardown-time

-
+
LDP teardown time in seconds.
Default: 5 Range: 0 - 65535

hostname

-
+
LDP hostname.
Default: bngblaster

lsr-id

-
+
LDP LSR identifier.
Default: 10.10.10.10

ipv6-transport-address

-
+
LDP transport IPv6 address.
Setting a valid IPv6 address here enables LDP IPv6
hello and transport.
@@ -215,20 +215,20 @@

Configuration

ipv4-transport-address

-
+
LDP transport IPv4 address.
Default: lsr-id

no-ipv4-transport

-
+
Disable/discard IPv4 LDP hello messages.

prefer-ipv4-transport

-
+
According to RFC7552, IPv6 is preferred over IPv4 which
can be changed with this option to prefer IPv4 transport
even if IPv6 is enabled.
@@ -237,11 +237,19 @@

Configuration

raw-update-file

-
+
LDP RAW update file.
+
+
tos | | TOS/TC for all LDP control traffic.
+
| Default: 0
+
+
+
+ + diff --git a/docs/searchindex.js b/docs/searchindex.js index c723653d..100fd8a6 100644 --- a/docs/searchindex.js +++ b/docs/searchindex.js @@ -1 +1 @@ -Search.setIndex({"docnames": ["access/index", "access/ipoe", "access/l2bsa", "access/l2tp", "access/li", "access/monkey", "access/multicast", "access/pppoe", "access/traffic", "api/arp", "api/bgp", "api/cfm", "api/dhcp", "api/http", "api/icmp", "api/igmp", "api/index", "api/interfaces", "api/isis", "api/l2tp", "api/ldp", "api/li", "api/ospf", "api/pcap", "api/ppp", "api/sessions", "api/streams", "api/traffic", "configuration/access_line", "configuration/access_line_profiles", "configuration/arp_client", "configuration/bgp", "configuration/dhcp", "configuration/dhcpv6", "configuration/http_client", "configuration/http_server", "configuration/icmp_client", "configuration/igmp", "configuration/index", "configuration/interfaces", "configuration/interfaces_a10nsp", "configuration/interfaces_access", "configuration/interfaces_lag", "configuration/interfaces_links", "configuration/interfaces_network", "configuration/ipoe", "configuration/isis", "configuration/isis_external", "configuration/isis_external_connections", "configuration/ldp", "configuration/lns", "configuration/ospf", "configuration/ospf_external", "configuration/ospf_external_connections", "configuration/ppp", "configuration/ppp_authentication", "configuration/ppp_ip6cp", "configuration/ppp_ipcp", "configuration/ppp_lcp", "configuration/pppoe", "configuration/session_traffic", "configuration/sessions", "configuration/streams", "configuration/traffic", "controller", "faq", "http", "icmp", "index", "install", "interfaces", "nat", "performance", "quickstart", "reports", "routing/bgp", "routing/index", "routing/isis", "routing/ldp", "routing/lspgen", "routing/mpls", "routing/ospf", "streams", "troubleshooting"], "filenames": ["access/index.rst", "access/ipoe.rst", "access/l2bsa.rst", "access/l2tp.rst", "access/li.rst", "access/monkey.rst", "access/multicast.rst", "access/pppoe.rst", "access/traffic.rst", "api/arp.rst", "api/bgp.rst", "api/cfm.rst", "api/dhcp.rst", "api/http.rst", "api/icmp.rst", "api/igmp.rst", "api/index.rst", "api/interfaces.rst", "api/isis.rst", "api/l2tp.rst", "api/ldp.rst", "api/li.rst", "api/ospf.rst", "api/pcap.rst", "api/ppp.rst", "api/sessions.rst", "api/streams.rst", "api/traffic.rst", "configuration/access_line.rst", "configuration/access_line_profiles.rst", "configuration/arp_client.rst", "configuration/bgp.rst", "configuration/dhcp.rst", "configuration/dhcpv6.rst", "configuration/http_client.rst", "configuration/http_server.rst", "configuration/icmp_client.rst", "configuration/igmp.rst", "configuration/index.rst", "configuration/interfaces.rst", "configuration/interfaces_a10nsp.rst", "configuration/interfaces_access.rst", "configuration/interfaces_lag.rst", "configuration/interfaces_links.rst", "configuration/interfaces_network.rst", "configuration/ipoe.rst", "configuration/isis.rst", "configuration/isis_external.rst", "configuration/isis_external_connections.rst", "configuration/ldp.rst", "configuration/lns.rst", "configuration/ospf.rst", "configuration/ospf_external.rst", "configuration/ospf_external_connections.rst", "configuration/ppp.rst", "configuration/ppp_authentication.rst", "configuration/ppp_ip6cp.rst", "configuration/ppp_ipcp.rst", "configuration/ppp_lcp.rst", "configuration/pppoe.rst", "configuration/session_traffic.rst", "configuration/sessions.rst", "configuration/streams.rst", "configuration/traffic.rst", "controller.rst", "faq.rst", "http.rst", "icmp.rst", "index.rst", "install.rst", "interfaces.rst", "nat.rst", "performance.rst", "quickstart.rst", "reports.rst", "routing/bgp.rst", "routing/index.rst", "routing/isis.rst", "routing/ldp.rst", "routing/lspgen.rst", "routing/mpls.rst", "routing/ospf.rst", "streams.rst", "troubleshooting.rst"], "titles": ["Access Protocols", "IPoE", "L2BSA", "L2TP", "Legal Interception (LI)", "Monkey", "Multicast and IPTV", "PPPoE", "Session Traffic", "<no title>", "<no title>", "<no title>", "<no title>", "<no title>", "<no title>", "<no title>", "API/CLI", "<no title>", "<no title>", "<no title>", "<no title>", "<no title>", "<no title>", "<no title>", "<no title>", "<no title>", "<no title>", "<no title>", "<no title>", "<no title>", "<no title>", "<no title>", "<no title>", "<no title>", "<no title>", "<no title>", "<no title>", "<no title>", "Configuration", "<no title>", "<no title>", "<no title>", "<no title>", "<no title>", "<no title>", "<no title>", "<no title>", "<no title>", "<no title>", "<no title>", "<no title>", "<no title>", "<no title>", "<no title>", "<no title>", "<no title>", "<no title>", "<no title>", "<no title>", "<no title>", "<no title>", "<no title>", "<no title>", "<no title>", "Controller", "Frequently Asked Questions", "HTTP Emulation", "ICMP", "RtBrick - Routing Protocol and BNG Blaster", "Installation", "Interfaces", "NAT / CGNAT", "Performance Guide", "Quickstart Guide", "Reports", "BGP", "Routing Protocols", "ISIS", "LDP", "LSPGEN", "MPLS", "OSPF", "Traffic Streams", "Troubleshooting"], "terms": {"A": [0, 3, 5, 6, 38, 50, 63, 68, 69, 71, 72, 74, 75, 78, 82], "bng": [0, 1, 2, 3, 4, 5, 6, 7, 8, 24, 28, 37, 38, 39, 49, 50, 62, 64, 65, 66, 67, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 83], "broadband": [0, 2, 28, 38, 66, 68], "network": [0, 1, 3, 4, 6, 7, 8, 11, 16, 17, 31, 35, 36, 37, 41, 44, 60, 62, 64, 66, 67, 68, 69, 71, 72, 74, 75, 76, 77, 78, 81, 82, 83], "gatewai": [0, 1, 2, 3, 4, 6, 7, 38, 40, 41, 44, 66, 67, 68, 70, 71, 73, 75, 77, 78, 81, 82], "i": [0, 1, 2, 3, 4, 5, 6, 7, 8, 12, 16, 19, 23, 24, 25, 26, 28, 29, 30, 31, 33, 36, 37, 38, 42, 43, 44, 49, 50, 60, 62, 63, 64, 65, 66, 67, 68, 69, 71, 72, 73, 74, 75, 77, 78, 79, 81, 82, 83], "devic": [0, 3, 4, 5, 7, 65, 66, 70, 71, 72, 73, 77, 78, 81, 82], "connect": [0, 1, 7, 16, 19, 48, 49, 53, 58, 66, 70, 71, 72, 73, 77, 78, 79, 81], "custom": [0, 2, 38, 64, 76], "premis": 0, "equip": 0, "servic": [0, 1, 2, 6, 7, 38, 44, 59, 64, 68, 70, 71, 77], "provid": [0, 1, 2, 3, 4, 6, 7, 16, 23, 26, 28, 29, 38, 64, 66, 69, 70, 71, 76, 77, 81, 82], "": [0, 1, 2, 6, 16, 37, 38, 39, 43, 46, 64, 66, 70, 71, 72, 73, 75, 77, 79, 81], "manag": [0, 2, 38, 64, 66], "user": [0, 1, 2, 7, 16, 38, 55, 64, 66, 68, 69, 70, 71, 73], "authent": [0, 3, 41, 46, 51, 55, 70, 73, 75, 77, 78, 79, 81], "traffic": [0, 1, 2, 3, 4, 7, 25, 26, 27, 31, 32, 37, 39, 41, 50, 59, 60, 62, 63, 64, 68, 70, 71, 72, 74, 75, 80, 83], "rout": [0, 38, 46, 70, 73, 75, 77, 82], "qualiti": 0, "qo": [0, 68, 73, 82], "internet": [0, 2, 68, 70, 71, 75, 77], "The": [0, 1, 2, 3, 4, 5, 6, 7, 8, 16, 19, 25, 26, 28, 29, 38, 39, 43, 49, 50, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83], "blaster": [0, 1, 2, 3, 4, 6, 7, 8, 28, 37, 38, 39, 49, 50, 64, 65, 66, 67, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 83], "versatil": [0, 1, 66], "support": [0, 1, 2, 3, 4, 6, 7, 16, 28, 38, 39, 42, 50, 62, 64, 68, 70, 71, 72, 73, 75, 77, 78, 79, 81, 82, 83], "variou": [0, 1, 28, 38, 64, 66, 68, 71, 82], "allow": [0, 1, 2, 3, 5, 6, 7, 16, 19, 29, 32, 33, 37, 38, 39, 43, 55, 56, 57, 64, 65, 66, 67, 68, 69, 70, 71, 72, 74, 75, 77, 78, 79, 81, 82, 83], "creation": [0, 76], "seubscrib": 0, "session": [0, 1, 2, 3, 4, 5, 6, 7, 9, 10, 11, 12, 13, 14, 15, 19, 20, 24, 25, 26, 30, 31, 36, 37, 39, 41, 44, 49, 55, 59, 60, 61, 62, 64, 65, 66, 67, 68, 70, 71, 73, 76], "each": [0, 1, 3, 16, 29, 38, 41, 49, 64, 66, 67, 68, 70, 72, 78, 82], "which": [0, 2, 4, 5, 6, 16, 19, 28, 38, 49, 61, 62, 64, 65, 68, 69, 70, 71, 72, 73, 74, 77, 78, 79, 81, 82, 83], "can": [0, 2, 3, 4, 5, 6, 7, 8, 16, 19, 24, 25, 26, 27, 28, 38, 41, 49, 55, 61, 62, 63, 64, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83], "compris": 0, "multipl": [0, 1, 2, 3, 6, 8, 15, 16, 37, 38, 39, 46, 50, 64, 66, 67, 70, 71, 72, 75, 76, 77, 78, 81, 82], "For": [0, 1, 5, 38, 39, 62, 66, 67, 70, 71, 72, 76, 79, 82], "instanc": [0, 4, 6, 9, 13, 14, 16, 18, 20, 22, 38, 39, 44, 46, 49, 51, 66, 67, 70, 72, 73, 77, 78, 79, 81, 82], "case": [0, 1, 7, 8, 16, 26, 67, 76, 77, 81], "dual": 0, "stack": [0, 68], "ipo": [0, 5, 30, 41, 45, 61, 66, 67, 68, 70, 71, 72, 73, 74], "ar": [0, 1, 2, 3, 5, 6, 7, 8, 16, 26, 28, 29, 36, 37, 38, 39, 44, 61, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 81, 82, 83], "form": 0, "combin": [0, 4, 6, 16, 25, 37, 38, 64, 70, 74, 82], "dhcpv4": [0, 2, 5, 28, 38], "dhcpv6": [0, 2, 5, 7, 16, 28, 33, 41, 65, 66, 70, 72, 73, 74], "well": [0, 2, 6, 28, 38, 67, 70, 72, 79], "arp": [0, 1, 9, 30, 41, 44, 45, 70, 74], "nd": [0, 38, 44, 70], "everi": [0, 2, 6, 38, 62, 64, 68, 70, 71, 72, 73, 74, 77, 81, 82], "defin": [0, 1, 2, 3, 6, 7, 16, 25, 28, 29, 33, 37, 38, 39, 42, 43, 49, 54, 63, 64, 66, 67, 70, 73, 75, 76, 77, 78, 79, 81, 82], "an": [0, 2, 3, 6, 8, 16, 26, 28, 38, 43, 44, 49, 64, 65, 66, 67, 68, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 81, 82], "interfac": [0, 1, 2, 3, 4, 5, 6, 7, 8, 11, 17, 18, 22, 26, 28, 29, 31, 35, 36, 37, 39, 40, 41, 42, 43, 44, 48, 53, 60, 61, 62, 64, 65, 66, 67, 68, 69, 71, 72, 73, 74, 75, 76, 77, 78, 82, 83], "function": [0, 1, 2, 3, 4, 5, 6, 8, 16, 17, 38, 43, 62, 64, 66, 68, 71, 72, 76, 77, 78, 81, 82], "identifi": [0, 2, 16, 18, 22, 29, 30, 31, 34, 36, 38, 41, 42, 44, 46, 48, 49, 51, 53, 62, 66, 67, 70, 75, 77, 78, 81], "global": [0, 1, 5, 7, 8, 16, 27, 28, 31, 38, 43, 55, 63, 70, 72, 73, 74, 75, 82], "uniqu": [0, 82], "id": [0, 1, 2, 3, 6, 7, 9, 11, 12, 13, 14, 15, 16, 18, 19, 20, 24, 25, 26, 28, 29, 30, 31, 32, 33, 34, 36, 38, 41, 42, 44, 46, 48, 49, 50, 51, 53, 62, 64, 66, 67, 70, 71, 72, 73, 75, 77, 78, 79, 81, 82], "number": [0, 3, 4, 5, 6, 8, 16, 37, 38, 39, 41, 42, 43, 44, 49, 62, 64, 68, 70, 71, 72, 73, 74, 75, 77, 78, 81, 83], "start": [0, 3, 5, 6, 7, 8, 11, 12, 13, 14, 15, 16, 23, 25, 26, 27, 31, 34, 36, 37, 38, 41, 44, 50, 58, 60, 61, 62, 63, 65, 66, 67, 68, 69, 70, 72, 73, 74, 75, 77, 78, 79, 81, 83], "1": [0, 1, 2, 3, 4, 6, 7, 8, 16, 19, 29, 30, 31, 32, 34, 35, 36, 37, 38, 39, 41, 44, 45, 46, 48, 50, 51, 53, 54, 61, 62, 63, 64, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 77, 78, 79, 81, 82], "increas": [0, 16, 38, 39, 63, 70, 71, 72, 73], "sequenti": [0, 82], "new": [0, 6, 38, 64, 68, 69, 70, 71, 73, 82], "establish": [0, 1, 3, 5, 6, 7, 8, 16, 25, 37, 38, 60, 62, 64, 65, 66, 67, 73, 74, 75, 76, 78, 82], "furthermor": [0, 1, 64, 68, 71], "you": [0, 2, 16, 26, 38, 66, 67, 68, 70, 71, 72, 73, 74, 76, 79, 82, 83], "have": [0, 38, 68, 70, 71, 73, 74, 79, 82], "flexibl": [0, 1, 38, 66], "group": [0, 1, 2, 6, 12, 15, 16, 24, 25, 26, 30, 34, 36, 37, 38, 41, 43, 62, 66, 67, 70, 71, 72, 73, 78, 82], "togeth": [0, 1, 32, 38, 71, 82], "us": [0, 1, 2, 3, 4, 5, 6, 7, 8, 16, 19, 23, 24, 25, 26, 27, 30, 33, 36, 37, 38, 41, 44, 49, 50, 62, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 81, 82, 83], "option": [0, 1, 3, 5, 6, 7, 8, 16, 18, 28, 29, 32, 33, 36, 37, 38, 39, 40, 41, 43, 44, 47, 49, 50, 53, 56, 57, 61, 62, 63, 64, 67, 68, 69, 70, 71, 72, 73, 74, 75, 77, 78, 79, 81, 82, 83], "enabl": [0, 1, 2, 3, 4, 5, 6, 7, 8, 16, 17, 25, 28, 31, 32, 33, 37, 38, 41, 42, 44, 45, 46, 49, 56, 57, 61, 62, 63, 64, 66, 67, 68, 69, 70, 72, 73, 74, 75, 76, 77, 78, 82], "applic": [0, 6, 16, 25, 37, 38, 64, 66, 72], "command": [0, 4, 5, 6, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 31, 38, 66, 67, 69, 70, 71, 72, 73, 75, 76, 78], "entir": [0, 2, 68], "simultan": [0, 66], "eth1": [0, 1, 2, 3, 5, 6, 7, 64, 66, 67, 70, 72, 74, 75, 77, 78, 81, 82], "type": [0, 1, 2, 4, 6, 7, 28, 29, 38, 41, 44, 46, 51, 62, 64, 66, 70, 71, 72, 73, 74, 75, 77, 78, 79, 81, 82], "pppoe": [0, 2, 3, 5, 6, 16, 28, 41, 59, 61, 64, 65, 66, 67, 68, 70, 72, 74, 82, 83], "usernam": [0, 3, 7, 16, 25, 38, 41, 55, 70, 73], "even": [0, 28, 38, 49, 68, 70, 72, 78, 79], "rtbrick": [0, 1, 3, 7, 16, 38, 55, 64, 66, 69, 70, 73, 75, 82], "com": [0, 7, 16, 38, 55, 64, 66, 68, 69, 70, 73, 75], "outer": [0, 1, 2, 3, 7, 16, 38, 40, 41, 50, 61, 62, 64, 65, 66, 67, 70, 72, 73, 75, 78, 82, 83], "vlan": [0, 1, 2, 3, 7, 16, 30, 32, 38, 40, 41, 44, 59, 61, 62, 64, 65, 66, 67, 70, 72, 73, 82, 83], "min": [0, 1, 2, 3, 7, 8, 29, 38, 41, 42, 61, 64, 70, 72, 73, 74, 82], "1000": [0, 3, 6, 7, 37, 38, 39, 63, 64, 70, 72, 73, 74, 75, 77, 79, 81, 82], "max": [0, 1, 2, 3, 6, 7, 8, 29, 37, 38, 41, 42, 50, 55, 56, 57, 58, 59, 61, 62, 64, 70, 71, 72, 73, 74, 81, 82], "1998": [0, 70], "step": [0, 38, 41, 69, 70, 73], "2": [0, 1, 2, 3, 4, 6, 7, 8, 16, 19, 31, 33, 37, 38, 41, 44, 46, 48, 51, 53, 61, 62, 64, 66, 67, 69, 70, 71, 72, 73, 74, 75, 77, 78, 79, 81, 82], "inner": [0, 1, 2, 3, 7, 16, 38, 41, 61, 62, 64, 70, 72, 73, 75, 82], "7": [0, 1, 2, 3, 4, 30, 38, 41, 44, 50, 62, 64, 66, 67, 70, 72, 73, 75, 77, 78, 81, 82], "odd": [0, 70], "1001": [0, 38, 46, 70, 73, 77, 79, 82], "1999": [0, 7, 70], "It": [0, 2, 3, 5, 6, 38, 39, 62, 63, 64, 67, 68, 69, 70, 71, 72, 77, 78, 81, 82], "also": [0, 2, 3, 5, 6, 16, 26, 38, 39, 62, 64, 66, 67, 69, 70, 71, 72, 73, 74, 77, 79, 81, 82, 83], "possibl": [0, 3, 5, 6, 38, 46, 64, 66, 67, 69, 70, 71, 72, 77, 79, 81, 82], "assign": [0, 1, 8, 16, 38, 44, 62, 70, 71, 72, 82], "section": [0, 2, 6, 16, 28, 29, 38, 41, 64, 70, 72, 82], "singl": [0, 2, 3, 6, 16, 37, 38, 71, 72, 73, 78, 82, 83], "l2tp": [0, 19, 38, 50, 62, 68, 70, 72, 82, 83], "l2bsa": [0, 38, 68, 70], "multicast": [0, 16, 26, 27, 31, 37, 38, 63, 68, 70, 74, 75, 78], "iptv": [0, 68, 70], "legal": [0, 68], "intercept": [0, 68], "li": [0, 21, 68], "monkei": [0, 16, 38, 41, 61, 70], "In": [1, 2, 8, 16, 26, 27, 28, 38, 39, 62, 66, 70, 71, 72, 73, 76, 79, 82], "addit": [1, 38, 66, 69, 71, 79], "its": [1, 38, 49, 66, 67, 68, 70, 72, 78, 79, 81, 82], "test": [1, 3, 5, 7, 15, 19, 38, 41, 55, 61, 62, 63, 65, 66, 68, 70, 71, 72, 73, 74, 76, 77, 78, 81, 82, 83], "capabl": [1, 29, 38, 64, 66, 69, 71, 73, 75, 78], "excel": 1, "emul": [1, 2, 3, 4, 6, 7, 32, 38, 44, 68, 70, 71, 73, 76, 77, 81, 82], "ip": [1, 3, 6, 7, 30, 31, 37, 38, 50, 57, 62, 64, 68, 70, 71, 73, 75, 78, 79, 82, 83], "over": [1, 6, 7, 15, 16, 29, 38, 49, 61, 62, 63, 66, 67, 72, 74, 75, 77, 78, 81, 82], "ethernet": [1, 2, 4, 7, 65, 70, 73], "subscrib": [1, 68, 70], "both": [1, 2, 6, 7, 16, 25, 26, 38, 55, 62, 68, 70, 71, 72, 73, 74, 76, 81, 82], "dynam": [1, 38, 62, 65, 68, 70, 71, 72, 75, 76, 78, 81, 82], "thi": [1, 2, 3, 5, 6, 7, 8, 16, 19, 24, 25, 26, 27, 28, 29, 30, 32, 33, 36, 37, 38, 39, 41, 43, 44, 47, 49, 55, 56, 57, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 81, 82, 83], "particularli": [1, 38], "valuabl": [1, 66], "valid": [1, 4, 38, 49, 71, 75, 78, 79, 82], "perform": [1, 64, 66, 68, 70, 71, 76, 82], "behavior": [1, 6, 7, 16, 24, 38, 63, 66, 68, 72, 83], "infrastructur": [1, 2, 71], "compon": 1, "handl": [1, 38, 68, 70, 71, 72], "base": [1, 2, 3, 6, 16, 18, 37, 38, 41, 46, 50, 51, 62, 63, 68, 70, 72, 73, 75, 77, 78, 79, 81, 82], "administr": 1, "develop": [1, 16, 68, 79, 81], "simul": [1, 28, 38, 66, 68, 71, 76], "util": [1, 2, 38, 72, 75], "underli": [1, 64, 66], "link": [1, 2, 16, 17, 25, 29, 39, 40, 41, 42, 43, 44, 64, 68, 72, 73, 76, 77, 78, 79, 81, 82, 83], "layer": [1, 2, 38, 39, 43, 62, 70, 73, 82], "protocol": [1, 3, 4, 6, 7, 16, 19, 28, 29, 37, 38, 41, 44, 46, 55, 56, 57, 65, 70, 71, 73, 74, 75, 77, 78, 79, 81, 82], "extend": [1, 31, 38, 75, 78], "offer": [1, 64, 66, 71, 82], "configur": [1, 2, 6, 16, 25, 26, 28, 31, 37, 41, 43, 50, 56, 57, 58, 61, 64, 65, 66, 67, 68, 70, 71, 72, 73, 83], "method": [1, 5, 82], "scenario": [1, 2, 38, 66, 71, 72], "where": [1, 2, 3, 38, 50, 62, 64, 70, 71, 73, 75, 82, 83], "specif": [1, 2, 7, 16, 26, 38, 58, 64, 66, 68, 71, 72, 79, 81, 82], "individu": 1, "facilit": [1, 64], "accur": 1, "polici": [1, 75], "reli": 1, "alloc": 1, "requir": [1, 2, 5, 7, 36, 38, 43, 47, 62, 63, 66, 67, 69, 70, 71, 72, 77, 82], "like": [1, 6, 32, 33, 38, 62, 68, 70, 71, 75, 77, 78, 81, 82], "host": [1, 2, 4, 7, 38, 59, 70, 82], "realist": 1, "obtain": 1, "similar": [1, 16, 26, 70, 74, 76, 81], "real": [1, 6, 69, 72, 76, 77, 81], "world": [1, 6, 72], "deploy": [1, 66], "differ": [1, 3, 5, 6, 7, 29, 38, 50, 62, 63, 66, 68, 70, 72, 73, 74, 75, 77, 81, 82], "virtual": [1, 68, 73, 76, 77, 81], "local": [1, 2, 10, 16, 19, 20, 25, 31, 35, 38, 41, 44, 49, 53, 64, 66, 70, 71, 72, 73, 75, 78, 79, 81], "area": [1, 38, 46, 51, 73, 77, 79, 81], "mode": [1, 3, 7, 38, 39, 41, 43, 50, 65, 66, 69, 72], "includ": [1, 2, 6, 7, 8, 16, 27, 28, 37, 38, 39, 57, 64, 67, 68, 69, 70, 71, 73, 74, 75, 76, 77, 78, 79, 81, 82, 83], "n": [1, 3, 7, 16, 38, 41, 61, 62, 66, 70, 71, 73, 75, 78, 79, 82], "associ": [1, 38, 41, 44, 66, 67, 70, 71, 72, 81, 82], "dedic": [1, 6, 37, 38, 41, 70, 71, 72], "ensur": [1, 7, 38, 71, 72, 81, 82], "isol": 1, "control": [1, 3, 7, 16, 27, 31, 32, 38, 50, 59, 63, 66, 68, 73, 75, 79, 81, 82], "On": [1, 72, 73], "other": [1, 2, 7, 16, 26, 28, 38, 39, 55, 64, 65, 66, 69, 70, 71, 72, 73, 77, 81, 83], "hand": 1, "share": [1, 70, 71, 72], "common": [1, 3, 5, 68, 77, 81], "By": [1, 28, 38, 64, 66, 75], "comprehens": [1, 64, 66, 68, 71, 76], "environ": [1, 72, 82], "whether": [1, 64, 71, 82], "evalu": [1, 66, 68, 71], "mechan": [1, 71], "assess": [1, 66, 68, 71], "thorough": [1, 68], "optim": [1, 7, 38, 63, 68, 69, 71, 72, 81], "mean": [1, 2, 7, 8, 38, 39, 45, 58, 62, 67, 68, 70, 71, 72, 75, 78, 82], "shown": [1, 3, 4, 6, 16, 19, 69, 70, 71, 77, 78, 81, 83], "exampl": [1, 2, 3, 4, 6, 7, 8, 16, 27, 38, 62, 64, 66, 67, 69, 70, 72, 73, 74, 75, 76, 77, 78, 79, 81, 82], "below": [1, 2, 3, 6, 16, 19, 38, 63, 68, 69, 70, 71, 73, 77, 81, 83], "access": [1, 2, 3, 5, 7, 8, 16, 17, 28, 29, 32, 33, 36, 39, 41, 62, 64, 66, 67, 68, 71, 72, 73, 74, 82], "128": [1, 2, 6, 7, 38, 46, 62, 70, 73, 77, 78, 82], "4000": [1, 2, 3, 64, 70, 72, 73, 82], "200": [1, 3, 4, 7, 16, 64, 66, 70, 71, 73, 74, 77, 78, 81, 82], "0": [1, 2, 3, 4, 6, 7, 8, 16, 18, 28, 29, 30, 31, 32, 34, 36, 37, 38, 39, 41, 42, 44, 45, 46, 49, 50, 51, 53, 57, 58, 59, 60, 61, 62, 64, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 77, 78, 79, 81, 82], "iter": [1, 6, 15, 16, 37, 38, 41, 61, 70, 71], "4": [1, 4, 7, 8, 16, 19, 31, 38, 41, 44, 61, 64, 66, 67, 68, 70, 72, 73, 74, 75, 77, 78, 81, 82], "most": [1, 3, 38, 41, 65, 70, 72, 83], "true": [1, 2, 3, 5, 6, 7, 8, 31, 32, 33, 34, 36, 37, 38, 39, 41, 44, 45, 46, 47, 52, 56, 57, 60, 61, 62, 63, 64, 66, 67, 69, 70, 71, 72, 73, 75, 77, 79, 81, 82, 83], "line": [1, 2, 3, 7, 16, 28, 29, 32, 33, 41, 70, 73, 82], "agent": [1, 2, 3, 7, 16, 25, 28, 32, 33, 38, 41, 70, 73], "remot": [1, 2, 3, 7, 16, 19, 25, 28, 32, 33, 38, 41, 53, 70, 73, 79, 81], "deu": [1, 3, 7, 38, 73], "circuit": [1, 2, 3, 7, 16, 25, 28, 32, 33, 38, 41, 70, 73], "eth": [1, 3, 7, 38, 73], "attribut": [1, 3, 6, 7, 8, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 66, 67, 70, 75, 77, 78, 81, 82], "descript": [1, 3, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 66, 67, 70, 75, 77, 78, 81, 82], "ipv6": [1, 2, 3, 4, 5, 8, 16, 25, 31, 34, 35, 41, 44, 45, 46, 49, 60, 62, 65, 66, 70, 71, 73, 74, 75, 77, 78, 79, 81, 82], "disabl": [1, 2, 5, 6, 7, 8, 16, 17, 28, 32, 33, 37, 38, 45, 46, 49, 56, 57, 58, 59, 60, 62, 70, 71, 73, 77, 78, 82], "default": [1, 3, 4, 5, 6, 7, 8, 16, 18, 24, 26, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 69, 70, 72, 73, 75, 77, 78, 79, 81, 82, 83], "ipv4": [1, 2, 3, 4, 5, 6, 8, 10, 16, 20, 30, 31, 32, 34, 35, 36, 41, 44, 45, 46, 49, 50, 53, 60, 62, 63, 65, 66, 67, 70, 71, 72, 73, 74, 75, 77, 78, 79, 81, 82], "timeout": [1, 2, 3, 7, 16, 24, 32, 33, 38, 42, 45, 49, 55, 56, 57, 58, 59, 70, 74, 78], "initi": [1, 6, 7, 37, 38, 45, 57, 58, 63, 64, 66, 67, 71, 78, 79, 82], "retri": [1, 2, 3, 7, 32, 33, 38, 45, 46, 50, 51, 55, 56, 57, 58, 59, 66, 77, 81], "interv": [1, 3, 6, 7, 30, 32, 36, 37, 38, 39, 41, 43, 44, 45, 46, 49, 50, 51, 58, 62, 63, 66, 67, 70, 73, 77, 78, 81, 82], "second": [1, 6, 7, 8, 16, 25, 30, 31, 32, 33, 34, 36, 37, 38, 45, 46, 49, 51, 55, 56, 57, 58, 59, 61, 62, 66, 67, 71, 73, 74, 75, 77, 78, 81, 82], "period": [1, 38, 45], "300": [1, 38, 45, 46, 77], "broadcast": [1, 32, 38, 44, 70, 73, 77, 81], "flag": [1, 16, 26, 32, 38, 64, 65, 67, 70, 71, 82], "fals": [1, 2, 3, 6, 7, 31, 32, 33, 36, 37, 38, 39, 40, 41, 42, 44, 46, 47, 49, 50, 57, 58, 59, 61, 62, 63, 66, 67, 70, 71, 72, 73, 75, 77, 78, 79, 82], "5": [1, 3, 4, 6, 7, 8, 31, 32, 33, 37, 38, 46, 49, 50, 51, 55, 56, 57, 58, 59, 62, 69, 70, 71, 72, 73, 74, 75, 77, 78, 81, 82], "10": [1, 2, 3, 4, 6, 7, 16, 32, 33, 38, 41, 44, 46, 48, 49, 51, 53, 56, 57, 58, 59, 62, 64, 66, 67, 70, 71, 72, 73, 74, 75, 77, 78, 79, 81, 82], "releas": [1, 12, 16, 32, 38, 64, 69, 72, 75], "3": [1, 2, 3, 4, 6, 7, 8, 16, 19, 31, 32, 36, 37, 38, 41, 44, 46, 49, 53, 58, 61, 62, 67, 68, 70, 72, 73, 74, 75, 77, 78, 79, 81, 82], "tos": [1, 3, 6, 31, 32, 36, 37, 38, 50, 67, 75, 82], "TOS": [1, 3, 6, 31, 32, 36, 37, 38, 50, 62, 67, 75, 82], "all": [1, 2, 3, 5, 6, 7, 8, 9, 10, 13, 14, 15, 16, 17, 19, 20, 21, 25, 26, 27, 32, 38, 39, 47, 50, 52, 59, 60, 61, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 77, 78, 81, 82, 83], "prioriti": [1, 2, 3, 6, 7, 16, 18, 30, 32, 37, 38, 41, 42, 43, 44, 50, 51, 59, 62, 70, 73, 78, 81, 82], "pbit": [1, 7, 32, 38, 59, 82], "add": [1, 3, 32, 33, 38, 41, 43, 50, 70, 73, 75, 79], "vendor": [1, 3, 32, 38, 41, 58, 64, 68, 70], "class": [1, 32, 38, 41, 70, 72], "60": [1, 3, 32, 38, 41, 70, 72, 81], "keep": [1, 5, 12, 16, 32, 38, 71], "init": [1, 12, 16, 32, 38, 73], "reboot": [1, 12, 16, 32, 38], "stop": [1, 5, 6, 7, 11, 12, 13, 14, 15, 16, 23, 25, 26, 27, 32, 36, 38, 61, 62, 63, 66, 67, 70, 73], "set": [1, 3, 6, 7, 8, 11, 16, 28, 32, 36, 37, 38, 40, 41, 43, 44, 49, 50, 55, 62, 63, 66, 67, 69, 71, 72, 73, 74, 75, 78, 79, 82], "zero": [1, 3, 28, 32, 38, 50, 70, 72, 82], "ia": [1, 33, 38], "na": [1, 33, 38], "ia_na": [1, 33, 38], "pd": [1, 33, 38], "ia_pd": [1, 33, 38], "rapid": [1, 7, 33, 38], "commit": [1, 7, 33, 38, 68, 69], "wai": [1, 6, 33, 38, 64, 69, 77, 81], "handshak": [1, 33, 38, 66, 77], "ldra": [1, 28, 33, 38, 41, 70], "lightweight": [1, 28, 33, 38, 66, 68, 73], "relai": [1, 28, 33, 38], "rfc6221": [1, 33, 38], "http": [1, 13, 33, 34, 35, 41, 64, 68, 69, 70, 75, 83], "datatrack": [1, 33, 38], "ietf": [1, 33, 38, 77, 78], "org": [1, 33, 38, 68, 69], "doc": [1, 33, 38, 69], "html": [1, 33, 38, 69], "ad": [1, 16, 33, 38, 71, 73, 82], "inform": [1, 3, 7, 8, 15, 16, 25, 26, 33, 38, 64, 75, 77, 78, 81, 82, 83], "should": [1, 5, 6, 33, 38, 63, 64, 66, 69, 70, 72, 73, 75, 78, 81, 82], "onli": [1, 3, 4, 6, 7, 16, 25, 26, 33, 36, 37, 38, 41, 43, 53, 62, 63, 65, 67, 68, 70, 71, 72, 77, 81, 82, 83], "info": [1, 3, 6, 7, 15, 16, 17, 25, 26, 64, 71, 73, 75, 78, 82, 83], "detail": [1, 2, 3, 4, 6, 7, 8, 16, 21, 37, 38, 64, 67, 68, 69, 70, 73, 74, 81, 82], "sudo": [1, 3, 4, 5, 6, 7, 16, 19, 64, 66, 69, 70, 71, 73, 75, 77, 78, 81, 82, 83], "bngblaster": [1, 3, 4, 5, 6, 7, 16, 19, 38, 39, 46, 49, 51, 64, 66, 68, 69, 70, 71, 73, 75, 77, 78, 81, 82, 83], "cli": [1, 3, 4, 5, 6, 7, 19, 66, 68, 71, 73, 75, 76, 77, 78, 81, 82], "run": [1, 3, 4, 5, 6, 7, 16, 19, 38, 39, 64, 66, 68, 70, 71, 72, 73, 75, 77, 78, 81, 82], "sock": [1, 3, 4, 5, 6, 7, 16, 19, 64, 66, 71, 73, 75, 77, 78, 81, 82], "jq": [1, 7, 16, 66, 73, 77, 81, 82], "statu": [1, 3, 4, 6, 7, 16, 38, 58, 66, 71, 73, 77, 78, 82], "ok": [1, 3, 4, 6, 7, 16, 64, 66, 71, 73, 77, 78, 82], "code": [1, 3, 4, 7, 16, 19, 64, 66, 71, 73, 77, 78, 82], "state": [1, 2, 3, 6, 7, 16, 27, 29, 38, 63, 64, 66, 68, 70, 71, 73, 77, 78, 79, 81, 82], "8": [1, 2, 3, 4, 36, 38, 64, 67, 69, 70, 71, 72, 75, 77, 78, 81, 82], "mac": [1, 2, 7, 38, 39, 40, 42, 43, 44, 67, 70, 73, 82], "02": [1, 2, 7, 38, 42, 70, 73, 79], "00": [1, 2, 7, 8, 29, 38, 42, 69, 70, 72, 73, 74, 77, 79], "01": [1, 2, 7, 64, 70, 73, 74, 77], "netmask": 1, "255": [1, 3, 31, 38, 39, 42, 46, 50, 51, 62, 70, 75, 77, 81, 82], "dns1": [1, 7, 38, 57, 73], "dns2": [1, 7, 38, 57, 73], "prefix": [1, 7, 8, 38, 60, 67, 68, 70, 72, 73, 75, 78, 79, 82], "fc66": [1, 2, 3, 7, 38, 44, 66, 70, 73, 75, 77, 81, 82], "1337": [1, 2, 3, 7, 66, 70, 73, 77, 79, 81, 82], "2222": 1, "deleg": [1, 7, 8, 38, 60], "3333": 1, "64": [1, 7, 8, 36, 38, 44, 51, 62, 66, 67, 70, 71, 72, 73, 77, 81, 82], "bound": [1, 7, 36, 38, 67, 73, 82], "server": [1, 3, 7, 35, 50, 57, 64, 68, 71, 72, 73], "leas": 1, "time": [1, 6, 7, 31, 38, 46, 47, 49, 51, 59, 63, 64, 68, 69, 73, 74, 75, 76, 77, 78, 81, 82, 83], "expir": 1, "299": 1, "t1": 1, "149": 1, "t2": 1, "261": 1, "tx": [1, 2, 3, 7, 16, 26, 38, 39, 42, 43, 44, 46, 62, 70, 72, 73, 74, 75, 77, 78, 82], "rx": [1, 3, 4, 6, 7, 38, 39, 43, 62, 64, 70, 71, 72, 73, 74, 75, 78, 82], "discov": 1, "request": [1, 3, 5, 6, 7, 16, 19, 24, 30, 34, 36, 37, 38, 55, 56, 57, 58, 61, 64, 66, 67, 68, 70, 74, 77, 81], "ack": [1, 16, 26], "nak": 1, "14400": 1, "14399": 1, "899": 1, "1439": 1, "solicit": 1, "advertis": [1, 38, 44, 65, 67, 70, 73, 77, 82], "repli": [1, 67, 73], "renew": 1, "packet": [1, 2, 3, 4, 6, 7, 28, 37, 38, 39, 50, 62, 63, 64, 65, 69, 71, 72, 73, 74, 75, 77, 78, 79, 81, 82, 83], "6": [1, 2, 4, 7, 31, 38, 72, 74, 75, 77, 78, 81, 82], "fragment": [1, 7, 38, 63, 67, 73, 74], "total": [1, 7, 8, 64, 66, 67, 69, 73, 74], "flow": [1, 4, 7, 8, 16, 21, 25, 26, 31, 38, 68, 72, 73, 74, 75], "verifi": [1, 2, 6, 7, 8, 16, 26, 38, 62, 63, 64, 68, 71, 72, 73, 74, 82, 83], "downstream": [1, 2, 4, 6, 7, 8, 16, 25, 26, 28, 29, 38, 60, 62, 70, 71, 73, 74, 78, 82], "13": [1, 3, 7, 38, 41, 44, 70, 72, 73, 78, 79], "first": [1, 2, 6, 7, 8, 16, 31, 37, 38, 41, 61, 62, 70, 71, 72, 73, 74, 75, 81, 82], "seq": [1, 7, 38, 41, 44, 67, 70, 73, 74, 77, 81, 82], "loss": [1, 6, 7, 68, 72, 73, 74, 82, 83], "wrong": [1, 7, 73, 74, 82], "upstream": [1, 2, 4, 7, 8, 16, 25, 26, 28, 29, 38, 62, 71, 73, 74, 82], "ipv6pd": [1, 7, 8, 38, 60, 62, 74, 82], "bitstream": 2, "refer": [2, 4, 7, 70, 75, 77, 78], "make": [2, 28, 38, 64, 69, 71, 75], "hi": 2, "avail": [2, 64, 76], "These": [2, 36, 38, 64, 67, 71, 76, 82], "retail": 2, "who": 2, "germani": 2, "mandat": 2, "feder": 2, "agenc": 2, "german": 2, "bundesnetzagentur": 2, "bnetza": 2, "regulatori": 2, "offic": 2, "electr": 2, "ga": 2, "telecommun": [2, 71], "post": [2, 64], "railwai": 2, "market": 2, "ministri": 2, "econom": 2, "affair": 2, "energi": 2, "locat": [2, 38, 64, 66], "bonn": 2, "definit": [2, 29, 38, 66], "wa": [2, 7, 16, 68, 71, 72, 77, 79], "so": [2, 38, 70, 72], "call": [2, 3, 8, 38, 64, 70, 71, 74, 77, 78, 79, 81, 82], "nga": 2, "forum": [2, 28, 38], "advisori": 2, "board": 2, "found": [2, 16, 64, 66, 68, 69, 72, 77, 78, 81, 82], "mai": [2, 5, 6, 7, 38, 49, 63, 64, 72, 75, 78], "2010": 2, "promot": 2, "dialogu": 2, "between": [2, 6, 8, 29, 37, 38, 46, 49, 60, 63, 66, 67, 70, 72, 73, 74, 75, 77, 78, 79, 81, 82], "oper": [2, 64, 66, 68, 71, 72, 75, 78], "manufactur": 2, "author": 2, "rollout": 2, "two": [2, 5, 7, 36, 38, 66, 67, 70, 72, 73, 75, 77, 78, 80, 81, 82], "u": [2, 16, 38, 70, 79, 82], "a10": [2, 38, 70], "nsp": [2, 38], "those": [2, 7, 8, 16, 29, 38, 41, 62, 64, 67, 70, 71, 72, 73, 74, 75, 77, 78, 79, 81, 82, 83], "were": [2, 38], "introduc": 2, "tr": [2, 70], "101": [2, 6], "migrat": 2, "aggreg": [2, 16, 17, 28, 41, 68, 72, 83], "transpar": 2, "without": [2, 5, 6, 12, 16, 69, 70, 73], "tag": [2, 4, 72], "wholesal": 2, "some": [2, 4, 6, 37, 38, 64, 65, 70, 72, 73, 83], "cpe": [2, 5, 7], "send": [2, 3, 6, 7, 8, 12, 16, 19, 28, 31, 36, 37, 38, 44, 46, 49, 50, 60, 62, 64, 65, 67, 69, 70, 72, 73, 75, 77, 78, 80, 81, 83], "untag": [2, 38, 41, 44], "while": [2, 16, 38, 77, 81, 82], "anoth": [2, 6, 71, 72, 73, 82], "need": [2, 16, 38, 39, 67, 69, 70, 71, 72, 73, 77, 82], "forward": [2, 8, 28, 38, 68, 75, 78, 82], "bundl": 2, "one": [2, 4, 6, 7, 36, 38, 62, 64, 67, 70, 71, 72, 73, 74, 75, 76, 77, 78, 81, 82], "more": [2, 5, 6, 16, 37, 38, 63, 66, 68, 70, 71, 72, 73, 75, 77, 78, 81, 82], "lacp": [2, 38, 42, 43, 70], "least": [2, 16, 36, 38, 67, 70, 72, 82], "limit": [2, 38, 41, 42, 64, 65, 70, 71, 72, 82], "amount": [2, 16, 25, 64], "4094": 2, "per": [2, 5, 6, 7, 16, 37, 38, 39, 41, 43, 44, 46, 61, 62, 63, 64, 68, 69, 70, 71, 72, 74, 75, 77, 82, 83], "caus": [2, 72, 77], "usabl": [2, 64], "rang": [2, 3, 7, 28, 29, 30, 31, 34, 35, 36, 38, 39, 41, 44, 46, 49, 50, 51, 53, 54, 61, 62, 63, 66, 67, 70, 71, 73, 75, 77, 78, 81, 82], "mani": [2, 5, 64, 68, 70, 73], "thei": [2, 29, 38, 71, 73, 82], "address": [2, 3, 4, 6, 7, 8, 10, 12, 16, 20, 25, 27, 30, 31, 32, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 49, 50, 53, 57, 60, 62, 64, 66, 67, 70, 72, 73, 75, 77, 78, 79, 81, 82, 83], "than": [2, 38, 62, 63, 66, 68, 70, 72, 75, 77, 78, 82], "term": [2, 70], "relat": [2, 71, 83], "end": [2, 64, 68, 70, 73, 74, 75, 76, 82], "adsl": [2, 70], "model": [2, 70], "depict": 2, "figur": 2, "core": [2, 38, 43, 68, 70], "subset": 2, "architectur": [2, 72], "compos": 2, "block": [2, 16, 27, 70], "three": [2, 6, 37, 38, 70, 74, 77, 79, 81, 82], "point": [2, 71, 79], "node": [2, 38, 46, 51, 68, 72, 73, 76, 77, 79, 81], "region": 2, "v": [2, 38, 39, 69, 70, 79], "map": [2, 70, 71, 78, 81], "chang": [2, 5, 6, 37, 38, 39, 49, 61, 64, 65, 69, 70, 73, 75, 78, 79, 81, 82], "trigger": [2, 75, 78], "re": [2, 72], "provis": 2, "action": 2, "port": [2, 4, 34, 35, 38, 62, 64, 66, 71, 72, 78, 82], "up": [2, 3, 6, 7, 8, 28, 29, 38, 41, 65, 70, 72, 73, 74, 77, 78, 80, 82], "down": [2, 3, 7, 28, 29, 38, 41, 66, 70, 73], "thu": 2, "discoveri": [2, 3, 7, 28, 38, 59, 78], "v6": 2, "must": [2, 5, 16, 38, 49, 64, 67, 70, 73, 78, 79, 82], "enrich": [2, 38], "extra": 2, "identif": [2, 82], "header": [2, 4, 6, 36, 38, 50, 62, 64, 65, 66, 67, 70, 71, 77, 81, 82, 83], "actual": [2, 16, 28, 29, 38, 39, 62, 70, 71, 72, 74, 75, 78, 82], "data": [2, 28, 29, 36, 38, 50, 63, 64, 67, 74, 75, 77, 81, 82], "rate": [2, 3, 7, 8, 28, 29, 38, 41, 61, 62, 63, 68, 70, 71, 82], "direct": [2, 4, 6, 16, 19, 25, 26, 38, 44, 62, 64, 70, 71, 72, 73, 78, 82], "from": [2, 3, 6, 7, 8, 15, 16, 22, 24, 28, 31, 37, 38, 41, 49, 50, 62, 65, 67, 68, 70, 71, 72, 73, 75, 77, 78, 81, 82, 83], "receiv": [2, 3, 4, 6, 7, 8, 38, 39, 49, 50, 54, 62, 64, 67, 68, 70, 71, 72, 73, 74, 77, 78, 80, 81, 82, 83], "intermedi": [2, 77], "a10nsp": [2, 8, 16, 17, 40, 41, 44, 62, 64, 68, 72, 73, 82], "accept": [2, 7, 16, 24, 38, 58, 70, 73], "follow": [2, 3, 4, 5, 6, 7, 8, 16, 37, 38, 61, 64, 66, 67, 69, 70, 71, 72, 73, 74, 75, 77, 78, 79, 81, 82, 83], "basic": [2, 7, 66, 67, 73, 81], "explain": [2, 16, 38, 64, 69, 70, 72, 73], "eth4": [2, 70], "qinq": [2, 38, 40, 41, 70, 73], "ff": [2, 38, 41, 42, 44, 70], "eth5": [2, 70], "__comment__": [2, 64, 67, 72, 73], "stream": [2, 4, 6, 8, 25, 26, 27, 39, 41, 62, 63, 64, 65, 68, 70, 72, 73, 74, 75, 79, 83], "reconnect": [2, 3, 5, 7, 16, 25, 31, 36, 38, 59, 61, 67, 72, 73, 75], "uniq": [2, 7, 38, 59], "autostart": [2, 3, 5, 6, 8, 34, 36, 37, 38, 41, 60, 61, 62, 63, 66, 67, 70, 82], "pp": [2, 3, 6, 7, 8, 16, 26, 37, 38, 60, 62, 70, 71, 72, 73, 74, 75, 78, 82], "name": [2, 3, 6, 7, 8, 16, 23, 26, 34, 35, 38, 40, 41, 42, 43, 44, 50, 59, 62, 64, 66, 67, 70, 71, 72, 73, 74, 75, 78, 79, 82, 83], "s1": [2, 72, 73, 74, 78], "length": [2, 3, 6, 37, 38, 50, 62, 65, 66, 70, 73, 75, 77, 78, 81, 82], "256": [2, 6, 38, 39, 46, 70, 73, 77, 82], "s2": [2, 73], "same": [2, 3, 4, 6, 16, 38, 50, 66, 67, 70, 72, 73, 74, 75, 78, 81, 82], "static": [2, 38, 41, 70, 71, 82], "directli": [2, 38, 39, 63, 70, 77, 81], "lag": [2, 16, 17, 42, 43, 68, 72, 83], "parent": [2, 38, 40, 41, 44, 70], "manual": [2, 38, 40, 44, 66, 69, 70, 72, 75, 78, 79, 82], "automat": [2, 4, 5, 6, 7, 8, 16, 28, 31, 37, 38, 43, 47, 52, 59, 60, 61, 63, 64, 66, 70, 72, 75, 77, 81, 82], "balanc": [2, 38, 63, 72], "member": [2, 38, 42, 70], "thread": [2, 6, 38, 39, 43, 70, 72, 75, 83], "recommend": [2, 6, 38, 39, 63, 68, 69, 70, 72], "specifi": [2, 6, 8, 16, 23, 29, 37, 38, 60, 63, 73, 78, 82], "correspond": [2, 5, 6, 8, 16, 28, 38, 41, 60, 62, 64, 70, 72, 75, 78, 79, 82], "otherwis": [2, 82], "explicitli": [2, 64, 70, 78, 82], "autogener": [2, 6, 8, 38, 60], "experiment": [2, 38, 39, 44, 68, 69, 70, 72, 81], "featur": [2, 5, 16, 24, 28, 38, 68, 73, 82], "termin": [2, 5, 7, 16, 19, 38, 59, 64, 66, 73], "mpl": [2, 8, 38, 60, 62, 65, 68, 72, 76, 78, 82], "encapsul": [2, 29, 38, 82], "through": [2, 38, 39, 64, 66, 67, 68, 70, 73, 76, 78], "label": [2, 8, 31, 38, 44, 60, 62, 64, 68, 70, 73, 75, 78, 80, 82], "ingress": 2, "egress": 2, "transport": [2, 38, 44, 49, 70, 78], "switch": [2, 29, 38, 44, 70, 78], "eth2": [2, 3, 4, 6, 7, 38, 66, 67, 70, 72, 74, 77, 81, 82], "7331": [2, 3, 7, 66, 70, 73, 77, 82], "13370": 2, "p0": 2, "destin": [2, 4, 6, 16, 27, 34, 36, 38, 62, 66, 67, 70, 71, 72, 73, 78, 82], "bgp": [2, 10, 31, 64, 68, 72, 76, 82, 83], "peer": [2, 3, 10, 16, 20, 31, 38, 49, 50, 73, 75, 77, 78], "raw": [2, 6, 10, 16, 20, 27, 31, 38, 39, 49, 62, 64, 65, 69, 73, 76], "updat": [2, 10, 16, 18, 19, 20, 22, 25, 26, 31, 38, 49, 73, 76], "file": [2, 6, 10, 16, 18, 20, 22, 23, 31, 38, 47, 49, 52, 64, 65, 68, 69, 72, 73, 74, 76, 83], "4200000001": 2, "4200000002": 2, "l2tpv2": [3, 68], "rfc2661": [3, 16, 19, 38, 50], "ln": [3, 50, 68, 83], "abl": [3, 72, 77, 79, 81], "lac": 3, "under": [3, 5, 7, 65, 66, 68, 70, 71, 75, 77, 78, 81, 82], "30": [3, 6, 7, 16, 18, 38, 46, 50, 55, 58, 66, 71, 72, 73, 77, 81], "pap": [3, 7, 38, 55, 74], "chap": [3, 7, 38, 55, 74], "ppp": [3, 41, 54, 55, 56, 57, 58, 59, 70], "mru": [3, 7, 38, 41, 54, 70], "1492": [3, 7, 38, 46, 54, 67, 77, 82], "de": [3, 66, 71, 77], "password": [3, 7, 16, 25, 38, 41, 55, 70], "lcp": [3, 5, 16, 19, 24, 50, 58, 73, 74], "conf": [3, 7, 38, 56, 57, 58, 73], "keepal": [3, 7, 38, 49, 58, 73, 78], "ipcp": [3, 5, 16, 24, 41, 50, 57, 70, 73, 74], "ip6cp": [3, 5, 16, 24, 41, 56, 70, 73, 74], "1024": [3, 7, 77, 81], "16384": [3, 7], "lns1": 3, "11": [3, 6, 64, 66, 69, 72, 73, 78, 79, 81], "secret": [3, 38, 50, 77, 79], "test1": 3, "window": [3, 38, 46, 50, 70, 73, 77, 83], "size": [3, 36, 38, 39, 43, 44, 46, 47, 50, 63, 67, 70, 72, 77, 82], "lns2": 3, "12": [3, 6, 8, 66, 72, 73, 81], "test2": 3, "lns3": 3, "test3": 3, "lns4": 3, "14": [3, 38, 41, 44, 64, 70, 72, 73], "test4": 3, "lns5": 3, "15": [3, 38, 49, 67, 72, 74, 78], "test5": 3, "lns6": 3, "16": [3, 38, 50, 72, 73, 81], "test6": 3, "lns7": 3, "17": [3, 72, 74], "test7": 3, "lns8": 3, "18": [3, 67, 69, 72, 74], "test8": 3, "lns9": 3, "19": [3, 72, 73, 74], "test9": 3, "lns10": 3, "20": [3, 6, 69, 70, 72, 73, 79, 82], "test10": 3, "lns11": 3, "21": [3, 67, 72, 78], "test11": 3, "lns12": 3, "22": [3, 64, 67, 69, 72, 73], "test12": 3, "lns13": 3, "23": [3, 6, 72, 78], "test13": 3, "lns14": 3, "24": [3, 4, 5, 7, 38, 44, 46, 66, 67, 70, 71, 72, 73, 75, 77, 78, 79, 81, 82], "test14": 3, "lns15": 3, "25": [3, 72], "test15": 3, "lns16": 3, "26": [3, 72], "test16": 3, "lns17": 3, "27": [3, 72, 73], "test17": 3, "lns18": 3, "28": [3, 72, 73], "test18": 3, "lns19": 3, "29": [3, 72], "test19": 3, "lns20": 3, "test20": 3, "lns21": 3, "31": [3, 72, 73], "test21": 3, "lns22": 3, "32": [3, 38, 41, 44, 70, 72, 73, 78, 79], "test22": 3, "lns23": 3, "33": [3, 72, 82], "test23": 3, "lns24": 3, "34": [3, 78], "test24": 3, "lns25": 3, "35": [3, 72, 73], "test25": 3, "lns26": 3, "36": [3, 72, 73, 74], "test26": 3, "lns27": 3, "37": [3, 72, 73, 74, 78, 79, 82], "test27": 3, "lns28": 3, "38": [3, 72, 73, 74], "test28": 3, "lns29": 3, "39": [3, 72], "test29": 3, "lns30": 3, "40": [3, 38, 51, 74, 81], "test30": 3, "mandatori": [3, 10, 15, 16, 17, 18, 19, 20, 22, 25, 29, 30, 31, 34, 35, 36, 38, 50, 53, 62, 66, 67, 75, 81, 82], "hostnam": [3, 38, 46, 49, 50, 51, 64, 73, 77, 78, 79, 81], "avp": [3, 38, 50], "tunnel": [3, 16, 19, 38, 50], "messag": [3, 7, 12, 16, 19, 28, 31, 38, 49, 50, 57, 58, 64, 67, 73, 75, 76, 77, 78, 81], "65535": [3, 7, 29, 30, 31, 34, 35, 36, 38, 39, 41, 44, 46, 49, 50, 51, 54, 62, 66, 67, 70, 73, 75, 77, 78, 81, 82], "congest": [3, 6, 38, 50], "slow": [3, 38, 50], "aggress": [3, 38, 50], "reliabl": [3, 6, 38, 50, 71], "deliveri": [3, 38, 50, 81], "describ": [3, 38, 50, 77, 81], "appendix": [3, 38, 50], "channel": [3, 6, 37, 38, 50], "avoid": [3, 38, 50], "fix": [3, 38, 50, 68, 82], "stick": [3, 38, 50], "permit": [3, 28, 38, 50], "hello": [3, 38, 46, 49, 50, 51, 77, 78, 81], "bit": [3, 36, 38, 50, 62, 67, 82], "non": [3, 38, 50, 68, 70, 72, 76], "offset": [3, 38, 50, 82], "sccrq": [3, 38, 50], "icrq": [3, 38, 50], "pad": [3, 38, 46, 50, 74, 77], "client": [3, 6, 9, 12, 13, 14, 16, 30, 34, 36, 41, 50, 62, 64, 68, 70, 72, 73, 77, 81, 82], "auth": [3, 38, 46, 50, 51, 73, 77, 79, 81], "check": [3, 6, 38, 50, 64, 69, 73, 77, 81, 82], "result": [3, 6, 16, 19, 36, 37, 38, 49, 62, 63, 64, 65, 67, 72, 73, 74, 78, 82], "just": [3, 66, 69], "four": 3, "store": [3, 7, 64, 65, 74, 82], "csun": 3, "process": [3, 6, 37, 38, 64, 72, 82], "correctli": [3, 8, 69, 71], "via": [3, 7, 38, 44, 54, 69, 70, 75, 76], "socket": [3, 16, 38, 39, 64, 70, 72, 73, 77, 79, 81], "csurq": [3, 16, 19], "about": [3, 4, 16, 64, 68, 74, 81, 82], "50011": 3, "inc": [3, 68], "102": [3, 6], "dup": 3, "out": [3, 68, 69, 73, 78], "order": [3, 38, 72, 82], "1406": 3, "206": [3, 38, 39, 70, 74], "return": [3, 7, 15, 16, 64, 71, 72, 81, 82], "32867": 3, "proxi": 3, "sub": [3, 4, 71, 82], "bp": [3, 38, 62, 82], "48000": 3, "ari": 3, "aci": 3, "79": [3, 8, 73], "output": [3, 64, 66, 69, 75, 78, 82, 83], "filter": [3, 66, 71, 73, 82, 83], "given": [3, 8, 38, 62, 72, 81, 82], "displai": [3, 4, 9, 10, 13, 14, 15, 16, 18, 19, 20, 22, 25, 26, 71], "mediat": 4, "statist": [4, 16, 21, 25, 26, 38, 63, 64, 68, 73, 74, 82], "todai": 4, "bcm": 4, "qmx": 4, "format": [4, 38, 41, 44, 64, 70, 82], "further": [4, 6, 64, 68, 71, 72, 73, 75, 78, 82], "easili": [4, 69, 74, 75, 78, 82, 83], "integr": [4, 64], "9": [4, 8, 64, 70, 72, 75, 77, 78, 81, 82], "d": [4, 64], "pt": 4, "spt": 4, "liid": 4, "work": [4, 5, 6, 8, 16, 26, 69, 71, 72, 73, 81, 82], "standalon": [4, 73], "100": [4, 6, 7, 8, 38, 63, 66, 67, 69, 70, 71, 72, 73, 74, 75, 77, 82], "sourc": [4, 6, 31, 36, 37, 38, 62, 67, 71, 72, 75, 77, 78, 81, 82], "49152": 4, "doubl": [4, 72], "4194301": 4, "byte": [4, 38, 39, 41, 46, 65, 70, 74, 77, 82], "94": 4, "tcp": [4, 16, 26, 34, 35, 38, 49, 62, 66, 73, 78, 83], "udp": [4, 38, 62, 63, 71, 78, 82], "intern": [4, 65, 71, 74, 77], "next": [4, 6, 37, 38, 66, 73, 75, 82], "160720": 4, "820": 4, "61": [4, 72], "ani": [4, 7, 28, 38, 64, 66, 67, 68, 69, 70, 71, 73, 82], "tester": [4, 66, 68], "59": [4, 72, 73, 79], "robust": [5, 7, 71], "If": [5, 6, 7, 16, 23, 26, 31, 37, 38, 62, 68, 69, 70, 71, 73, 75, 82], "randomli": [5, 79], "kill": [5, 64], "restart": [5, 16, 25, 66, 68, 70], "padt": [5, 74], "e": [5, 6, 37, 38, 40, 41, 42, 43, 44, 63, 64, 70, 73, 77, 79, 81, 82], "g": [5, 6, 37, 38, 40, 41, 42, 43, 44, 62, 63, 64, 70, 79, 81, 82], "power": [5, 8, 29, 38], "outag": 5, "gracefulli": [5, 64], "flap": [5, 16, 18, 74, 76], "independ": 5, "similarli": 5, "auto": [5, 16, 27, 38, 47, 77], "could": [5, 65, 71, 74, 79, 82, 83], "maximum": [5, 6, 7, 29, 37, 38, 39, 41, 42, 49, 54, 63, 70, 72, 74, 78, 82], "As": [5, 64, 69], "soon": [5, 8, 31, 38, 60, 64, 75, 78, 82], "after": [5, 6, 31, 36, 37, 38, 61, 62, 64, 67, 71, 73, 75, 78, 82], "hour": 5, "wait": [5, 6, 37, 38, 44, 61, 62, 66, 70, 71, 82], "becom": [5, 7, 38, 62, 64, 66, 71, 82], "again": [5, 73], "fulli": [5, 68], "recov": [5, 65], "hang": 5, "crash": 5, "memori": [5, 64, 68, 70, 72, 75, 78], "leak": [5, 77], "advanc": [6, 73], "focu": [6, 71], "therefor": [6, 7, 28, 38, 64, 70, 71, 72, 73, 75, 78], "igmp": [6, 15, 37, 41, 70, 74, 83], "version": [6, 29, 37, 38, 41, 51, 64, 66, 69, 70, 71, 73, 77, 78, 79, 81], "implement": [6, 68, 70], "record": [6, 37, 38, 71], "extern": [6, 47, 48, 52, 53, 64, 71, 73, 77, 79, 81], "show": [6, 8, 64, 69, 70, 71, 72, 73, 75, 77, 78, 79, 81, 82, 83], "how": [6, 8, 37, 38, 63, 64, 70, 72, 73, 74, 75, 77, 81, 83], "millisecond": [6, 7, 37, 38, 39, 43, 58, 63, 70], "239": [6, 16, 37, 38, 82], "count": [6, 7, 15, 16, 36, 37, 38, 61, 64, 67, 75, 78, 79, 82], "measur": [6, 8, 37, 38, 63, 68, 74, 75, 82], "delai": [6, 7, 16, 25, 29, 34, 36, 37, 38, 58, 61, 62, 63, 66, 67, 71, 82], "mc1": 6, "mc2": 6, "distribut": [6, 38, 63, 64, 69, 72, 78], "modifi": [6, 38, 39, 70, 75, 78, 79, 82], "enough": [6, 70, 71, 77], "proper": [6, 83], "recogn": 6, "sequenc": [6, 8, 38, 41, 44, 70, 73, 74, 77, 79, 81, 83], "particular": [6, 16, 26, 71, 74, 82], "gap": [6, 82], "last": [6, 12, 16, 74, 75, 82], "would": [6, 8, 65, 72, 73, 74, 82], "report": [6, 8, 37, 38, 68, 73, 82], "argument": [6, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 22, 23, 24, 25, 26, 64, 69, 74, 75, 77, 78, 79, 81, 82, 83], "l": [6, 67, 73, 75, 78, 79, 81, 83], "log": [6, 16, 67, 73, 75, 78, 79], "help": [6, 64, 71, 75, 78, 79, 83], "search": [6, 74], "miss": 6, "captur": [6, 16, 23, 38, 39, 64, 65, 68, 70, 71, 72, 73, 83], "consum": 6, "do": [6, 16, 70, 72], "232": 6, "source1": [6, 15, 16], "202": 6, "source2": [6, 15, 16], "source3": [6, 15, 16], "103": 6, "1291": 6, "activ": [6, 38, 42, 64, 68, 70, 71, 77, 78, 81, 82], "m": [6, 38, 46, 62, 63, 73, 74, 75, 77, 78, 79, 82], "139": [6, 74], "7456": 6, "idl": [6, 66, 73], "114": [6, 82], "kei": [6, 16, 38, 46, 51, 73, 77, 79, 81, 82], "element": [6, 16], "long": [6, 68], "doe": [6, 16, 27, 65, 82], "take": [6, 29, 38, 64, 68, 75], "right": 6, "old": 6, "overlap": 6, "lead": [6, 38, 63, 68], "sent": [6, 8, 37, 38, 39, 62, 63, 64, 70, 71, 72, 73, 78, 82, 83], "fast": [6, 7, 69, 70, 82], "typic": [6, 70, 71, 75, 82], "view": [6, 37, 38, 73], "durat": [6, 37, 38, 74], "within": [6, 29, 37, 38, 63, 65, 68, 71, 77], "igmpv3": [6, 37, 38], "appli": [6, 16, 26, 28, 29, 36, 37, 38, 62, 66, 67, 70, 71, 72, 73, 82], "293": [6, 37, 38], "asm": [6, 37, 38], "befor": [6, 36, 37, 38, 61, 62, 65, 66, 67, 69, 73, 82], "final": [6, 8, 16, 37, 38, 64, 73, 74, 77, 81], "often": [6, 37, 38, 72], "abov": [6, 37, 38, 66, 72], "threshold": [6, 37, 38], "mention": [6, 37, 38], "special": [6, 37, 38], "signatur": [6, 37, 38, 82], "faster": [6, 37, 38, 72, 82], "analysi": [6, 37, 38, 64, 71], "76": [6, 8, 37, 38, 62, 82], "done": [6, 16, 38, 62, 71, 73, 77, 78, 81, 82], "correct": 6, "concept": 7, "lean": 7, "idea": [7, 65], "fail": [7, 69], "expect": [7, 16, 19, 29, 38, 62, 65, 75, 77, 81, 82], "condit": [7, 68, 71], "fulfil": [7, 68], "negoti": 7, "successfulli": [7, 16], "dn": [7, 38, 41, 44, 57, 70], "opposit": [7, 72, 82], "behav": [7, 70, 77, 81], "faulti": 7, "4049": [7, 70], "2000": [7, 70, 73, 77, 82], "2999": [7, 70], "outstand": [7, 38, 61], "800": [7, 38, 61], "400": [7, 38, 61, 66, 67], "infin": [7, 36, 38, 59, 62, 67, 82], "padi": [7, 38, 59, 74], "padr": [7, 38, 59, 74], "payload": [7, 38, 59, 62, 82], "rfc4638": [7, 38, 59], "unit": [7, 38, 54, 64], "propos": [7, 38, 54, 72], "valu": [7, 16, 28, 29, 31, 36, 38, 41, 44, 49, 55, 62, 63, 66, 67, 70, 71, 74, 75, 78, 82], "reject": [7, 38, 55, 57], "echo": [7, 16, 24, 38, 58, 67, 70, 74], "ignor": [7, 12, 16, 24, 25, 26, 38, 57, 58, 78], "primari": [7, 38, 57, 66, 82], "129": [7, 38, 57], "secondari": [7, 38, 57], "131": [7, 38, 57], "chapter": 7, "rfc": [7, 28, 29, 38, 77, 78], "2153": 7, "With": [7, 67, 68, 72], "oui": 7, "kind": [7, 68, 70, 82], "respond": [7, 67, 70], "copi": [7, 70], "respons": [7, 16, 64, 66, 71], "user1": [7, 73], "open": [7, 16, 24, 31, 38, 68, 73, 74, 75, 77, 81], "56": [7, 72, 73], "10036": 7, "10083": 7, "bidirect": [8, 38, 60, 62, 71, 72, 73, 82], "unicast": [8, 31, 38, 71, 73, 75], "tool": [8, 16, 19, 68, 71, 73, 75, 76, 77, 78, 79, 81], "quickli": [8, 68], "unlabel": [8, 38, 60], "overwrit": [8, 38, 41, 43, 60, 62, 70, 82], "gener": [8, 16, 27, 37, 38, 43, 46, 60, 61, 64, 66, 67, 68, 69, 70, 73, 74, 76, 77, 79, 81, 82, 83], "prefer": [8, 38, 49, 75, 78], "select": [8, 38, 39, 41, 62, 70, 82], "config": [8, 38, 64, 65, 69, 73, 74, 79], "96000": 8, "16000": 8, "violat": [8, 74], "12278": 8, "3071": 8, "3040": 8, "6167": 8, "12252": 8, "3185": 8, "2900": 8, "12306": 8, "82": 8, "3123": 8, "2978": 8, "6205": 8, "12314": 8, "83": 8, "3104": 8, "3033": 8, "6177": 8, "3184": 8, "2891": 8, "12361": 8, "88": [8, 74], "3178": 8, "2957": 8, "6226": 8, "73763": 8, "84": 8, "18845": 8, "17799": 8, "37119": 8, "avg": [8, 29, 38, 74], "converg": [8, 68], "64bit": 8, "assum": [8, 38, 49, 61, 72, 78, 82], "took": [8, 82], "until": [8, 38, 44, 62, 64, 66, 70, 71, 78, 82], "reset": [9, 15, 16, 25, 26, 38, 49, 78], "match": [10, 16, 19, 20, 67, 78], "disconnect": [10, 16, 19, 20], "teardown": [10, 16, 18, 20, 22, 31, 38, 46, 47, 49, 51, 52, 61, 66, 75, 77, 78, 81], "list": [10, 16, 17, 19, 20, 21, 25, 26, 38, 39, 64, 68, 70, 73, 75, 77, 81, 82, 83], "load": [10, 16, 18, 20, 22, 64, 73, 74, 75, 77, 78, 81], "path": [10, 16, 23, 75, 77, 81], "cfm": [11, 38, 41, 44, 70], "cc": [11, 16, 38, 41, 44, 70], "eoam": [11, 16, 38, 41, 44, 70], "rdi": [11, 16], "off": [11, 16, 72, 73], "unset": [11, 16], "dhcp": [12, 32, 41, 66, 68, 70, 71, 74, 83], "present": [12, 16, 24, 25, 26, 38, 64, 68], "rememb": [12, 16], "icmp": [14, 36, 41, 68, 70, 74, 83], "join": [15, 16, 37, 38, 83], "leav": [15, 16, 37, 38, 83], "zap": [15, 16, 37, 38], "stat": [15, 16, 26, 71, 73, 74, 78], "unix": 16, "domain": [16, 38, 41, 44, 70], "interact": [16, 64, 66, 73, 83], "json": [16, 38, 64, 69, 73, 75, 77, 79, 81, 83], "rpc": [16, 64, 73], "we": [16, 68, 72, 73, 75], "One": [16, 66, 70, 71, 77, 81], "commun": [16, 68, 70, 71], "contain": [16, 64, 68, 70, 77, 81], "carri": 16, "cat": [16, 72, 77, 81], "counter": [16, 25, 64], "nc": 16, "2xx": 16, "warn": [16, 64, 75, 78], "error": [16, 19, 64, 74, 77, 79, 81, 83], "404": [16, 64], "user10": 16, "altern": [16, 28, 38, 61, 69, 77, 81], "replac": [16, 38, 70, 75, 76], "becaus": [16, 38, 62, 77, 82], "eth0": [16, 38, 40, 41, 43, 44, 70, 72, 78], "python": [16, 74, 75, 78], "script": [16, 64, 74, 75, 78, 82, 83], "simpl": [16, 38, 46, 51, 68, 73, 74, 75, 77, 78, 79, 81, 82], "here": [16, 29, 38, 49, 65, 73, 75, 78, 79], "complex": [16, 71], "chain": 16, "pend": [16, 25, 26], "Then": [16, 69, 73], "extract": [16, 74], "flat": 16, "read": [16, 70, 73, 79], "index": [16, 17, 82], "close": [16, 23, 24, 38, 63, 66, 71, 73, 77, 81], "enforc": [16, 24, 64], "restor": [16, 24], "speed": [16, 19], "execut": [16, 19, 31, 38, 64, 66, 69, 74, 75], "rfc3145": [16, 19], "alter": [16, 27], "current": [16, 23, 27, 38, 39, 63, 64, 70, 72, 75, 77, 78, 82], "ha": [16, 27, 28, 31, 38, 62, 64, 68, 69, 71, 72, 73, 75, 77, 78, 79, 82, 83], "been": [16, 27, 68, 71, 74, 77, 79, 83], "t": [16, 27, 38, 68, 70, 71, 72, 73, 79, 82], "instead": [16, 27, 36, 38, 67], "act": [16, 27, 29, 38], "transmiss": [16, 27, 38, 63, 68, 81], "summari": [16, 26, 82], "except": [16, 26, 38, 39, 70, 77, 81, 82], "fin": [16, 26], "syn": [16, 26, 71, 82], "rst": [16, 26], "push": [16, 26], "adjac": [16, 18, 20, 38, 46, 73, 81], "databas": [16, 18, 20, 22, 38, 47, 74, 78], "lsdb": [16, 18, 22, 79], "level": [16, 18, 38, 41, 44, 46, 48, 70, 73, 75, 77, 78, 79], "mrt": [16, 18, 22, 38, 47, 52, 73, 75, 76, 79], "lsp": [16, 18, 38, 46, 47, 73, 76, 78, 79, 81], "pdu": [16, 18, 22, 38, 49, 77, 78, 81], "purg": [16, 18, 38, 47, 52, 77, 79, 81], "timer": [16, 18, 68], "127": [16, 18, 73, 74], "neighbor": [16, 22, 38, 53, 73], "lsa": [16, 22, 38, 51, 52, 76, 77], "remain": [16, 23, 72, 77], "isi": [18, 44, 46, 47, 48, 64, 68, 70, 76, 79, 82, 83], "ldp": [20, 44, 49, 62, 68, 70, 76, 82], "ospf": [22, 51, 52, 53, 68, 76, 79], "pcap": [23, 65, 73, 75, 77, 78, 79, 81], "design": [28, 38, 71, 72, 75, 76, 77, 81, 82], "subsequ": [28, 38], "emploi": [28, 38], "overwritten": [28, 29, 38], "string": [28, 38, 41, 44, 64, 70], "variabl": [28, 70, 77, 81], "substitut": [28, 38, 70], "ascii": [28, 38, 41, 44, 70, 82], "4294967295": [28, 29, 31, 38, 41, 53, 70, 75, 81], "dsl": [28, 29, 38, 41, 70], "exclud": [28, 38, 82, 83], "imposs": [28, 38], "word": [28, 38, 82], "context": [28, 38, 73], "exclus": [28, 36, 38, 67, 78, 79], "dictat": [28, 38], "deviat": [28, 38], "guidelin": [28, 38], "either": [28, 38, 64, 66, 67, 69, 82], "profil": [29, 41, 70], "treat": [29, 38], "analog": [29, 38], "minimum": [29, 38, 41, 42, 70, 74, 82], "att": [29, 38], "attain": [29, 38], "datar": [29, 38], "low": [29, 38, 68, 70], "interl": [29, 38], "interleav": [29, 38], "encap": [29, 38], "pon": [29, 38], "etr": [29, 38], "throughput": [29, 38, 39, 63, 70, 72], "attetr": [29, 38], "gdr": [29, 38], "gamma": [29, 38], "attgdr": [29, 38], "ont": [29, 38], "onu": [29, 38], "averag": [29, 38, 74], "peak": [29, 38], "ass": [29, 38], "assur": [29, 38], "tree": [29, 38], "draft": [29, 38, 77], "lihawi": [29, 38], "04": [29, 38, 64, 69, 73, 79], "ancp": [29, 38], "extens": [29, 38, 64, 73, 74], "preced": [29, 38], "creat": [30, 36, 38, 41, 61, 67, 70, 73, 75, 76, 77, 78, 79, 81, 82], "target": [30, 38, 63, 69, 78], "resolv": [30, 38, 44, 61, 62, 68, 70, 71, 73, 78, 82], "AS": [31, 38, 73, 75], "65000": [31, 38, 75], "hold": [31, 38, 46, 49, 73, 75, 77, 78], "90": [31, 38, 73, 75], "ttl": [31, 36, 38, 62, 67, 75, 82], "finish": [31, 38, 73, 75], "famili": [31, 38, 75], "vpn": [31, 38, 75], "evpn": [31, 38, 75], "nexthop": [31, 38, 75], "none": [31, 38, 41, 44, 70, 75, 79], "url": [34, 38, 66, 71], "80": [34, 35, 38, 66, 71], "when": [36, 38, 66, 67, 71, 78, 82], "mutual": [36, 38, 67, 78], "them": [36, 38, 64, 66, 67, 70, 73, 77, 79, 81], "65507": [36, 38, 67, 77], "track": [36, 38, 67, 68, 82], "df": [36, 38, 62, 67, 82], "dont": [36, 38, 67], "fragement": [36, 38, 67], "minim": 38, "reloc": 38, "separ": [38, 68, 82], "howev": [38, 66, 72, 79], "import": [38, 74, 77, 79, 81], "note": [38, 81], "main": [38, 39, 64, 70, 72, 77, 81], "approach": 38, "prove": 38, "benefici": 38, "conduct": [38, 68], "involv": [38, 68], "million": [38, 64, 68, 71, 72], "distinct": 38, "maintain": [38, 63, 67, 68, 78], "organ": 38, "effect": [38, 49, 66, 71, 78, 82], "your": [38, 65, 68, 70, 72, 73, 75, 78], "empow": 38, "larg": [38, 63, 64, 68, 70, 71, 77, 79, 81], "scale": [38, 68, 72], "eas": [38, 64], "c": [38, 68, 69, 72, 73, 79, 83], "md": [38, 41, 44, 70], "ma": [38, 41, 44, 70], "increment": [38, 70, 75, 78, 82], "i1": [38, 41, 70], "i2": [38, 41, 70], "10000": [38, 73, 78], "io": [38, 39, 43, 64, 65, 69, 70, 72, 74, 82, 83], "packet_mmap_raw": [38, 39, 69, 70], "consid": [38, 39, 64, 65, 70, 72, 81, 82], "mmap": [38, 39, 65], "ring": [38, 39, 43, 70], "buffer": [38, 39, 46, 70, 77], "slot": [38, 39, 43, 70, 72], "might": [38, 39, 70, 77, 81, 82], "reach": [38, 39, 70, 72], "desir": [38, 39, 63, 70, 74, 79], "depend": [38, 39, 47, 65, 70, 72, 77, 82], "4096": [38, 39, 46, 70, 77], "burst": [38, 39, 43, 62, 63, 70, 82], "qdisc": [38, 39, 43, 70], "bypass": [38, 39, 43, 70], "kernel": [38, 39, 43, 65, 70], "issu": [38, 39, 64, 68, 70, 71, 72], "poll": [38, 39, 43, 70, 74], "0001": [38, 39, 46, 70, 73, 77, 79], "third": [38, 39, 41, 69, 70], "disjoint": [38, 39, 70], "explicit": [38, 43, 70], "referenc": [38, 43, 70, 75, 79], "physic": [38, 43, 70, 72], "32768": [38, 42, 43, 70, 72], "cpuset": [38, 43, 70, 72], "pin": [38, 43, 70], "cpu": [38, 43, 68, 70, 72], "dpdk": [38, 43, 68, 83], "lag0": [38, 42, 70], "short": [38, 41, 42, 44, 68, 70], "3x1": [38, 42, 70], "3x30": [38, 42, 70], "system": [38, 42, 46, 48, 64, 65, 71, 72, 73, 75, 77, 79, 82], "multithread": [38, 42, 70, 72], "router": [38, 44, 46, 51, 53, 65, 68, 70, 73, 76, 77, 78, 79, 81], "icmpv6": [38, 44, 65, 70, 74], "ra": [38, 44, 70], "mtu": [38, 44, 67, 70, 82], "1500": [38, 44, 70, 74], "9000": [38, 44, 62, 65, 70, 82], "p2p": [38, 44, 70, 73, 77, 81], "l1": [38, 44, 48, 70, 73, 74, 77], "metric": [38, 44, 48, 53, 70, 73, 77, 79, 81], "l2": [38, 44, 48, 70, 73, 77, 82], "ospfv2": [38, 44, 53, 68, 70, 79, 81], "ospfv3": [38, 44, 53, 70], "mainten": [38, 41, 44, 70], "ccm": [38, 41, 44, 70], "ieee": [38, 41, 44, 70], "802": [38, 41, 44, 70], "1q": [38, 41, 44, 70], "encod": [38, 41, 44, 70, 77, 81], "33m": [38, 41, 44, 70], "10m": [38, 41, 44, 70], "100m": [38, 41, 44, 70], "1min": [38, 41, 44, 70], "10min": [38, 41, 44, 70], "mac_int": [38, 41, 44, 70], "aa": [38, 41, 44, 70], "bb": [38, 41, 44, 70], "dd": [38, 41, 44, 70], "ee": [38, 41, 44, 70], "123": [38, 41, 44, 70], "uint16": [38, 41, 44, 70], "vpn_id": [38, 41, 44, 70], "hex": [38, 41, 44, 70, 77, 81], "digit": [38, 41, 44, 70], "icc": [38, 41, 44, 70], "char": [38, 41, 44, 70], "pcp": [38, 41, 44, 70], "dowstream": [38, 44, 70], "ethertyp": [38, 40, 41, 70], "0x88a8": [38, 40, 41, 70], "equal": [38, 41, 62, 70, 77, 81, 82], "deactiv": [38, 41, 70], "10000000": [38, 41, 70], "tun": [38, 41, 70], "caution": [38, 41, 70, 72], "sinc": [38, 41, 64, 70], "significantli": [38, 41, 70], "impact": [38, 41, 70, 71], "scalabl": [38, 41, 70, 71], "setup": [38, 61, 62, 67, 68, 72, 73, 78, 82], "signal": [38, 63, 64, 68], "calcul": [38, 49, 62, 63, 65, 71, 74, 78, 82], "massiv": [38, 63, 64, 68, 72], "1m": [38, 63, 67, 71], "live": [38, 63, 71, 76], "regul": [38, 63], "determin": [38, 63, 81, 82], "consist": [38, 63, 82], "influenc": [38, 63], "affect": [38, 63], "adher": [38, 63], "smaller": [38, 49, 63, 78], "smoother": [38, 63], "reduc": [38, 63], "risk": [38, 63], "micro": [38, 63], "fall": [38, 63], "intend": [38, 63], "larger": [38, 63, 70, 78], "toler": [38, 63], "find": [38, 63, 68], "prevent": [38, 63, 65, 66, 70, 72], "checksum": [38, 63, 73], "reassembl": [38, 63, 82], "reassembli": [38, 63, 82], "restrict": [38, 63, 68], "bbl": [38, 63, 82], "65056": [38, 62, 71, 82], "tc": [38, 62, 82], "float": [38, 62, 82], "helper": [38, 62, 82], "put": [38, 62, 64, 82], "capit": [38, 62, 82], "letter": [38, 62, 82], "k": [38, 62, 73, 79, 82], "kilo": [38, 62, 82], "mega": [38, 62, 82], "giga": [38, 62, 82], "front": [38, 62, 82], "better": [38, 62, 68, 71, 74, 82], "readabl": [38, 62, 82], "gbp": [38, 62, 82], "1000000000": [38, 62, 82], "900": [38, 62, 82], "rpf": [38, 62, 82], "label1": [38, 62, 82], "exp": [38, 62, 82], "label2": [38, 62, 82], "lookup": [38, 62, 73, 78, 82], "nat": [38, 62, 66, 68, 82], "level1": [38, 46, 73, 77, 79], "md5": [38, 46, 51, 73, 77, 79, 81], "csnp": [38, 46, 77], "psnp": [38, 46, 77], "level2": [38, 46, 77], "lspbuffers": [38, 46, 77], "9192": [38, 46, 77], "lifetim": [38, 46, 73, 75, 77, 78, 79], "330": [38, 46, 77], "refresh": [38, 46, 47, 73, 77], "0100": [38, 46, 77], "0010": [38, 46, 77], "49": [38, 46, 73, 77, 79], "sr": [38, 46, 51, 73, 77, 79, 81], "algo": [38, 46, 77], "algorithm": [38, 46, 77, 81], "1048575": [38, 46, 51, 77, 81], "sid": [38, 46, 51, 73, 77, 81], "dure": [38, 47, 52, 64, 75, 77, 78, 81], "reason": [38, 47, 77], "dead": [38, 51, 81], "chosen": [38, 49, 78], "indic": [38, 49, 78, 82], "elaps": [38, 49, 78], "receipt": [38, 49, 78], "success": [38, 49, 78], "arriv": [38, 49, 78], "divid": [38, 49, 74, 78, 82], "lsr": [38, 49, 73, 78], "discard": [38, 49, 73, 78], "accord": [38, 49, 66, 78], "rfc7552": [38, 49, 78], "conveni": 64, "rest": [64, 76], "serv": [64, 68, 71], "simplifi": 64, "expos": 64, "programmat": 64, "paramet": [64, 66, 70, 73, 82], "monitor": [64, 75], "progress": 64, "standard": [64, 69, 75, 77, 83], "intuit": 64, "autom": [64, 68], "endpoint": [64, 71, 82], "download": [64, 69, 83], "retriev": 64, "encount": 64, "analyz": [64, 71, 74, 75, 83], "outcom": 64, "troubleshoot": [64, 68, 69], "problem": 64, "document": [64, 68], "purpos": [64, 66, 68, 71], "enhanc": [64, 68, 71, 72, 75, 79], "overal": [64, 66], "streamlin": 64, "seamless": 64, "github": [64, 66, 68, 69, 75], "modern": [64, 68, 69, 72], "linux": [64, 68, 69, 70], "primarili": [64, 69, 72], "debian": [64, 69, 72], "bookworm": [64, 69], "ubuntu": 64, "lt": [64, 69], "packag": [64, 69, 72], "wget": [64, 69], "controller_": 64, "_amd64": 64, "deb": [64, 69], "dpkg": [64, 69], "systemctl": 64, "bngblasterctrl": 64, "lib": 64, "systemd": 64, "preset": 64, "fri": 64, "2022": [64, 68, 73], "07": 64, "utc": 64, "7min": 64, "ago": 64, "pid": 64, "682535": 64, "task": [64, 77], "309235": 64, "6m": 64, "cgroup": 64, "slice": 64, "usr": [64, 69, 74], "bin": [64, 69, 74], "listen": 64, "8001": 64, "addr": [64, 67], "etc": 64, "usag": [64, 71, 75, 78, 79], "color": 64, "turn": 64, "consol": 64, "pretti": 64, "folder": 64, "var": 64, "debug": [64, 69, 75, 78, 79, 83], "sbin": [64, 69], "openapi": 64, "v1": [64, 69], "alreadi": [64, 75], "bodi": 64, "directori": [64, 69, 73, 83], "run_report": 64, "stderr": [64, 77, 81], "stdout": 64, "curl": 64, "quickstart_pppo": 64, "content": [64, 66], "veth1": [64, 73], "_start": 64, "logging_flag": 64, "session_count": 64, "schema": 64, "get": [64, 68, 70, 73, 82], "_command": 64, "pass": [64, 69, 71], "bngbnlaster": 64, "back": 64, "_stop": 64, "sigint": 64, "int": [64, 82], "forcefulli": 64, "report_flag": 64, "huge": 64, "around": [64, 70, 82], "500mb": 64, "categori": 64, "pleas": 64, "pcap_captur": 64, "prometheu": 64, "text": 64, "instances_run": 64, "gaug": 64, "instances_tot": 64, "metric_flag": 64, "access_interfac": 64, "network_interfac": 64, "a10nsp_interfac": 64, "000": [64, 72, 73], "instance_nam": 64, "sessions_establish": 64, "interfaces_rx_packet": 64, "rbf": 64, "interface_nam": 64, "interface_typ": 64, "163": 64, "eth11": 64, "155": 64, "eth12": 64, "158": 64, "150": [64, 74], "driver": [65, 69, 70, 72, 82], "drop": [65, 83], "tri": 65, "occur": [65, 75], "potenti": [65, 71], "failur": 65, "overseen": 65, "why": 65, "3936": [65, 70], "pages": [65, 70], "minu": [65, 70], "overhead": [65, 70], "redirect": 66, "abil": [66, 71, 72], "top": [66, 73], "sever": [66, 75, 82], "translat": [66, 71], "rule": [66, 75], "accuraci": 66, "moreov": 66, "across": [66, 72], "compat": 66, "bind": [66, 67], "startup": [66, 75, 77, 78, 81], "begin": 66, "give": [66, 74], "effici": [66, 71, 77, 81], "minor": [66, 71], "302": 66, "msg": [66, 71, 73], "r": [66, 71, 74, 79], "nlocat": 66, "ncontent": 66, "nserver": [66, 71], "demonstr": [66, 75], "mark": [66, 77], "resum": 66, "previous": 66, "continu": [66, 72], "less": [66, 72, 82], "random": 66, "attempt": 66, "ping": [67, 71], "come": 67, "beyond": [67, 68, 72], "simpli": [67, 68], "consequ": 67, "unreach": 67, "exceed": 67, "properli": [67, 72], "made": 67, "dec": 67, "58": [67, 72], "394677": 67, "395566": 67, "727988": 67, "728992": 67, "63": [67, 72, 73], "rtt": 67, "927569": 67, "928480": 67, "origin": [68, 77, 81], "undergon": 68, "signific": 68, "evolut": 68, "transform": 68, "now": [68, 69, 71, 73, 74, 77, 81, 82], "encompass": [68, 71], "Its": 68, "scope": 68, "expand": [68, 71], "broader": 68, "spectrum": [68, 71], "contrari": 68, "nomenclatur": 68, "isn": 68, "addition": [68, 76], "capac": 68, "verif": [68, 82], "complet": [68, 77, 81], "tabl": [68, 72, 74, 75], "queue": [68, 70, 72], "edg": 68, "latenc": [68, 82], "deutsch": 68, "telekom": 68, "ag": [68, 81], "famou": 68, "project": [68, 69, 75], "hard": [68, 72], "softwar": [68, 70, 72], "footprint": 68, "machin": [68, 73], "space": [68, 70], "friendli": 68, "api": [68, 73, 76, 82], "suit": [68, 71], "thousand": 68, "topologi": [68, 73, 76, 77, 81, 82], "segment": 68, "cgnat": 68, "introduct": [68, 79], "denog15": 68, "There": [68, 69, 73, 75, 78, 81, 82], "video": 68, "built": [68, 71, 76, 78], "scratch": 68, "veri": 68, "event": [68, 83], "loop": [68, 79], "constant": [68, 71, 82], "o": [68, 72, 77, 81], "librari": [68, 75, 78], "delet": 68, "fsm": 68, "evolv": 68, "build": [68, 72, 75, 77, 78, 81], "serious": 68, "look": 68, "contribut": [68, 72], "bug": 68, "welcom": [68, 72], "interest": 68, "go": [68, 73], "quick": 68, "guid": [68, 69, 70, 71], "our": [68, 72], "mission": 68, "instal": [68, 72, 73], "quickstart": 68, "frequent": 68, "ask": 68, "question": 68, "mail": 68, "chat": 68, "matrix": 68, "apnic": 68, "blog": 68, "dknog14": 68, "2024": 68, "2023": 68, "uknof49": 68, "denog13": 68, "2021": 68, "cp": [68, 74, 75], "dp": [68, 75], "bsd": 68, "claus": 68, "free": [68, 72], "commerci": 68, "see": [68, 71, 73, 82], "2020": 68, "2026": 68, "apt": [69, 73], "y": [69, 79], "libssl1": 69, "libncurses5": 69, "libjansson4": 69, "newer": [69, 77, 81], "libssl3": 69, "libncurses6": 69, "libdict": 69, "fork": 69, "unzip": 69, "zip": 69, "libdict_1": 69, "5_amd64": 69, "dev_1": 69, "cmake": 69, "libpcap": 69, "dev": [69, 70, 73], "libcunit1": 69, "libssl": 69, "libjansson": 69, "libnuma": 69, "symbol": 69, "relwithdebinfo": 69, "git": 69, "clone": 69, "cd": 69, "mkdir": 69, "dcmake_build_typ": 69, "gdb": 69, "cpack": 69, "dgit_ref": 69, "rev": 69, "pars": 69, "abbrev": 69, "ref": 69, "head": 69, "dgit_sha": 69, "sha": 69, "df453a5ee9dbf6440aefbfb9630fa0f06e326d44": 69, "packet_mmap": [69, 70], "cmocka": 69, "libcmocka": 69, "bngblaster_test": 69, "dbngblaster_test": 69, "ON": 69, "testprotocol": 69, "sec": 69, "linux_gsg": 69, "build_dpdk": 69, "meson": 69, "ninja": 69, "rel": 69, "tar": 69, "xz": 69, "xjf": 69, "stabl": 69, "sdk": 69, "denable_driver_sdk": 69, "ldconfig": 69, "dbngblaster_dpdk": 69, "pkgconfig": 69, "pkg": 69, "modul": 69, "libdpdk": 69, "compil": [69, 70, 75, 78], "gnu": [69, 70], "permiss": 69, "easiest": 69, "root": [69, 73, 79], "normal": [69, 79], "binari": [69, 75, 78], "setcap": 69, "cap_net_raw": 69, "cap_net_admin": 69, "cap_dac_read_search": 69, "eip": 69, "distinguish": [70, 77, 81], "logic": 70, "attach": [70, 73, 76, 77, 78, 79, 81], "At": 70, "archiv": 70, "netplan": 70, "render": 70, "networkd": 70, "dhcp4": 70, "dhcp6": 70, "hardwar": [70, 72], "higher": [70, 72], "ethtool": [70, 72, 73], "ens5f1": 70, "pre": [70, 75, 78], "mini": 70, "jumbo": 70, "512": 70, "txqueuelen": 70, "lag1": 70, "face": 70, "side": [70, 72, 73], "learn": [70, 71, 77, 78, 81, 83], "own": [70, 72, 75, 77, 78, 81], "inject": [70, 75, 76, 77, 78, 81], "eth3": [70, 74], "s100": 70, "s200": 70, "pta": 70, "belong": [70, 82], "025": 70, "resid": 70, "packet_rx_r": 70, "packet_tx_r": 70, "abstract": 70, "program": 70, "lane": 70, "write": [70, 75, 78, 79, 81], "transmit": [70, 76], "expens": 70, "easi": 70, "calcualt": [70, 71], "osi": [70, 77], "steam": 70, "technologi": [71, 72], "comput": [71, 72, 81], "public": 71, "privat": 71, "entri": [71, 74, 77, 81], "conceal": 71, "structur": 71, "carrier": 71, "grade": 71, "isp": 71, "compani": 71, "scarciti": 71, "incorpor": 71, "tailor": 71, "instrument": 71, "demand": 71, "multitud": 71, "pool": [71, 72], "experi": 71, "broad": 71, "tradit": 71, "rigor": 71, "examin": 71, "invalu": 71, "resourc": 71, "profession": 71, "udp1": 71, "192": [71, 73, 77, 79], "configuraton": [71, 82], "destion": 71, "udp2": 71, "48523": 71, "tcp1": [71, 82], "stand": [71, 72, 82], "alon": [71, 82], "firewal": [71, 82], "adopt": [71, 82], "exist": [71, 75, 77, 78, 81], "uncahng": 71, "x": [71, 75, 79, 83], "enp6s21": 71, "254": 71, "enp6s20": 71, "c1": 71, "c2": 71, "nx": 71, "63122": 71, "63121": 71, "unfortun": 71, "nate": 71, "leverag": 71, "still": [71, 72, 73, 81, 82, 83], "100k": 71, "achiev": 72, "250": 72, "much": 72, "driven": 72, "split": 72, "workload": 72, "worker": 72, "asymmetr": 72, "unidirect": [72, 82], "vice": 72, "versa": 72, "full": [72, 75], "cach": 72, "coher": 72, "everyth": 72, "far": 72, "alwai": [72, 82], "rss": 72, "incom": 72, "improv": 72, "hash": 72, "adapt": [72, 81], "0x8100": 72, "best": [72, 81], "intel": 72, "person": 72, "ddp": 72, "boost": 72, "adjust": 72, "700": 72, "seri": [72, 74, 75, 78], "vari": 72, "usec": 72, "125": 72, "uniform": 72, "multi": 72, "processor": 72, "deriv": [72, 74], "sy": [72, 77, 81], "net": 72, "numa_nod": 72, "lscpu": 72, "node0": 72, "53": [72, 73], "node1": [72, 79], "54": [72, 73], "71": 72, "folow": 72, "55": [72, 73, 79], "57": 72, "nic": 72, "20g": 72, "ens2f2np2": 72, "ens2f3np3": 72, "ens5f2np2": 72, "ens5f3np3": 72, "62": [72, 74], "65": 72, "66": 72, "67": 72, "68": 72, "69": [72, 74], "offici": 72, "0000": [72, 73, 77, 79], "ll": 73, "walk": 73, "pair": 73, "veth": 73, "let": 73, "mar": 73, "303904": 73, "303952": 73, "396765": 73, "press": 73, "ctrl": [73, 79], "print": [73, 77, 81], "j": [73, 74], "p": [73, 75, 78, 79, 83], "what": 73, "happen": [73, 75], "cours": [73, 83], "try": [73, 77, 81], "f1": 73, "navig": 73, "keyboard": [73, 82], "input": [73, 83], "left": 73, "corner": 73, "f9": 73, "enter": 73, "familiar": 73, "repeat": 73, "r1": [73, 77, 79, 81], "r2": [73, 77, 79, 81], "0002": [73, 77, 79], "1921": [73, 77, 79], "6800": [73, 77, 79], "168": [73, 77, 79], "secret123": [73, 79], "1002": [73, 77], "raw1": 73, "lspgen": [73, 76], "647569": 73, "647630": 73, "connector": 73, "0x192168001001": 73, "647633": 73, "647639": 73, "647642": 73, "0x1": 73, "647645": 73, "647648": 73, "647651": 73, "172": 73, "647654": 73, "647657": 73, "fc00": 73, "c0a8": 73, "647660": 73, "ac10": 73, "647669": 73, "a00": 73, "124": 73, "647672": 73, "srgb": 73, "647678": 73, "graph": [73, 77, 79, 81], "647813": 73, "981279": 73, "981314": 73, "981335": 73, "031917": 73, "087877": 73, "087971": 73, "088013": 73, "088035": 73, "088050": 73, "093906": 73, "093964": 73, "gobgp": 73, "gobgpd": 73, "But": 73, "offload": [73, 82], "92": 73, "65001": [73, 75], "afi": 73, "safi": 73, "bgpupdat": [73, 75, 76], "append": [73, 75, 77, 78, 81], "daemon": 73, "f": [73, 74, 75, 78, 79, 81], "08t14": 73, "51": 73, "03": [73, 74], "topic": 73, "apr": 73, "08": 73, "870722": 73, "138": 73, "kb": 73, "904266": 73, "904293": 73, "904369": 73, "52": 73, "904359": 73, "904389": 73, "904448": 73, "905659": 73, "opens": 73, "907888": 73, "907903": 73, "openconfirm": 73, "907917": 73, "907989": 73, "182885": 73, "outq": 73, "flop": 73, "multiprotocol": [73, 78], "octet": 73, "rcvd": 73, "notif": 73, "72": 73, "20000": 73, "100000": [73, 75, 79], "skip": 73, "09": 73, "establ": 73, "120000": 73, "withdraw": [73, 75, 78], "ldpupdat": [73, 76, 78], "Such": [73, 77, 81, 82], "To": [74, 76], "understand": 74, "think": 74, "job": 74, "decreas": 74, "75": 74, "50": [74, 79, 82], "55661": 74, "97": 74, "111410": 74, "12654727": 74, "110161": 74, "12300031": 74, "unknown": 74, "93709": 74, "110156": 74, "12299556": 74, "33319": 74, "32641": 74, "32635": 74, "33311": 74, "32633": 74, "1104": 74, "pado": 74, "500": 74, "373": 74, "4880": 74, "1700": 74, "1840": 74, "350": 74, "108580": 74, "12360218": 74, "106881": 74, "11982029": 74, "95265": 74, "106876": 74, "11981554": 74, "32465": 74, "31896": 74, "31895": 74, "32461": 74, "31894": 74, "1102": 74, "844": 74, "78": 74, "422": 74, "4343": 74, "822": 74, "1816": 74, "322": 74, "197523": 74, "21009053": 74, "188259": 74, "20425245": 74, "74810": 74, "65784": 74, "64537": 74, "61793": 74, "65772": 74, "61790": 74, "6000": 74, "623": 74, "199": 74, "224": [74, 78, 82], "624": 74, "218": 74, "227": 74, "197": 74, "3742": 74, "1198": 74, "1338": 74, "1206": 74, "filenam": [74, 79, 82], "sn": 74, "197340": 74, "188120": 74, "99949": 74, "97909": 74, "ipv6avg": 74, "97391": 74, "95685": 74, "env": 74, "python3": 74, "border": 75, "exterior": 75, "exchang": [75, 78], "reachabl": [75, 77], "among": [75, 82], "autonom": 75, "classifi": [75, 83], "vector": 75, "decis": 75, "plan": 75, "marker": 75, "scapi": [75, 78], "convert": 75, "phase": [75, 78], "update1": [75, 78], "onc": [75, 78], "sens": 75, "update2": 75, "h": [75, 78, 79], "asn": 75, "local_pref": 75, "w": [75, 78, 79], "num": [75, 78], "ifac": 75, "rib": 75, "exit": [75, 77, 78, 81], "hop": [75, 82], "pref": 75, "blueprint": [75, 78], "6pe": 75, "50000": 75, "20001": 75, "48": [75, 82], "plane": 75, "propag": 75, "offlin": 76, "serial": 76, "rfc6396": [76, 77, 81], "produc": 76, "mimic": 76, "written": [77, 79], "move": 77, "iso": 77, "iec": 77, "10589": 77, "2002": 77, "interconnect": 77, "engin": 77, "forc": 77, "republish": 77, "1142": 77, "later": [77, 79], "histor": 77, "7142": 77, "rather": 77, "confus": 77, "facto": 77, "backbon": 77, "synchron": [77, 81], "self": [77, 81], "itself": [77, 81, 82], "3600": 77, "n1": 77, "b1": 77, "0022": 77, "0021": 77, "65529": 77, "0011": 77, "65524": 77, "65506": 77, "whole": 77, "0x83": 77, "831b0100120100000021ffff010203040506000000000003c0d103010403490001": 77, "831b0100120100000021ffff010203040506000100000003bad603010403490001": 77, "contrib": [77, 81], "def": [77, 81], "arg": [77, 79, 81], "kwarg": [77, 81], "execute_command": [77, 81], "socket_path": [77, 81], "af_unix": [77, 81], "sock_stream": [77, 81], "dump": [77, 81], "utf": [77, 81], "junk": [77, 81], "recv": [77, 81], "decod": [77, 81, 82], "els": [77, 81], "break": [77, 81], "indent": [77, 81], "argv": [77, 81], "tlv": [77, 79], "isis_areatlv": 77, "isis_areaentri": 77, "areaid": 77, "isis_commonhdr": 77, "isis_l1_lsp": 77, "lspid": 77, "0102": 77, "0304": 77, "0506": 77, "seqnum": 77, "__name__": [77, 81], "__main__": [77, 81], "timestamp": [77, 81], "subtyp": [77, 81], "field": [77, 81, 82], "export": [77, 79, 81], "bi": 78, "646": 78, "subnet": 78, "5036": 78, "dut": 78, "ecmp": 78, "10001": 78, "exactli": 78, "longest": 78, "henc": 79, "accommod": 79, "ospf2": 79, "____": 79, "__": 79, "_": 79, "_____": 79, "___": 79, "______": 79, "ospf3": 79, "multipli": 79, "z": 79, "graphviz": 79, "seed": 79, "q": 79, "quit": 79, "repres": [79, 82], "toplogi": 79, "sep": 79, "780109": 79, "780127": 79, "simlar": 79, "construct": 79, "242810": 79, "242827": 79, "node_id": 79, "area_list": 79, "protocol_list": 79, "ipv4_address_list": 79, "ipv4_prefix_list": 79, "ipv4_prefix": 79, "segment_id": 79, "30005": 79, "node_flag": 79, "capability_list": 79, "router_id": 79, "mpls_ipv4_flag": 79, "mpls_ipv6_flag": 79, "srgb_base": 79, "srgb_rang": 79, "36000": 79, "neighbor_list": 79, "remote_node_id": 79, "0204": 79, "0003": 79, "30003": 79, "r3": 79, "shortest": 81, "interior": 81, "igp": 81, "wide": 81, "stabil": 81, "000100050ac801000aff010180000001e7790024ffffff00000000140000000000000000": 81, "000100050ac802000aff010180000001dc830024ffffff00000000140000000000000000": 81, "020400400101010100000000456e0000000000000000000000000001000100050ac80c000aff01018000012d13160024ffffff00000000140000000000000000": 81, "0204004001010101000000003b780000000000000000000000000001000100050ac80b000aff01018000012d1e0c0024ffffff00000000140000000000000000": 81, "ospf_external_lsa": 81, "adrout": 81, "mask": 81, "2147483649": 81, "struct": 81, "wb": 81, "222": 81, "2147483949": 81, "ospf_hdr": 81, "ospf_lsupd": 81, "lsacount": 81, "pack": 81, "ii": 81, "ihhi": 81, "len": [81, 82], "although": 81, "compar": 81, "conceptu": 81, "ident": 81, "r6": 81, "instanti": 82, "unless": 82, "certain": 82, "brief": 82, "overview": 82, "2001": 82, "besteffort": 82, "voic": 82, "merg": 82, "ters": 82, "queri": 82, "59670": 82, "54610": 82, "account": 82, "59655": 82, "54594": 82, "1100": 82, "9028800": 82, "8240000": 82, "mbp": 82, "0288": 82, "362": 82, "54593": 82, "1014": 82, "1030": 82, "54232": 82, "98595": 82, "8112000": 82, "l3": 82, "8000000": 82, "112": 82, "1026": 82, "43": 82, "98903": 82, "8208000": 82, "208": 82, "5458": 82, "5422": 82, "41": 82, "96548": 82, "811200": 82, "820800": 82, "800000": 82, "8112": 82, "8208": 82, "microsecond": 82, "subtract": 82, "volum": 82, "jsonpath": 82, "express": 82, "BE": 82, "27040": 82, "213": 82, "126": 82, "27008": 82, "10561": 82, "99": 82, "90288": 82, "99792": 82, "79200": 82, "090288": 82, "099792": 82, "0792": 82, "part": 82, "properti": 82, "readi": 82, "shortcut": 82, "f7": 82, "f8": 82, "respect": 82, "necessari": 82, "largest": 82, "1472": 82, "reserv": 82, "le": 82, "0x5274427269636b21": 82, "jitter": 82, "nano": 82, "meta": 83, "dissector": 83, "lua": 83, "bbl_header": 83, "place": 83, "lua_script": 83}, "objects": {}, "objtypes": {}, "objnames": {}, "titleterms": {"access": [0, 38, 70], "protocol": [0, 68, 76], "ipo": [1, 38], "static": 1, "address": [1, 71], "dhcpv4": 1, "v6": 1, "dhcp": [1, 16, 38, 73], "dhcpv6": [1, 38], "command": [1, 3, 7, 64, 77, 81, 82], "l2bsa": 2, "over": 2, "network": [2, 38, 70, 73], "inerfac": 2, "l2tp": [3, 16], "configur": [3, 7, 8, 38, 75, 77, 78, 79, 81, 82], "variabl": [3, 38], "data": 3, "header": 3, "rfc5515": 3, "legal": [4, 16], "intercept": [4, 16], "li": [4, 16], "monkei": 5, "multicast": [6, 82], "iptv": 6, "gener": [6, 75, 78], "traffic": [6, 8, 16, 38, 73, 78, 82], "manual": 6, "join": 6, "leav": 6, "test": [6, 16, 64, 69, 75], "zap": 6, "limit": [6, 75, 77, 78], "pppoe": [7, 38, 73], "ppp": [7, 16, 38], "authent": [7, 38], "lcp": [7, 38], "ipcp": [7, 38], "ipv4": [7, 38], "ip6cp": [7, 38], "ipv6": [7, 38], "vendor": 7, "extens": [7, 71], "session": [8, 16, 38, 74, 75, 78, 82], "verif": 8, "api": [16, 64], "cli": 16, "bng": [16, 68, 69, 82], "blaster": [16, 68, 69, 82], "interfac": [16, 38, 70, 81], "igmp": [16, 38], "stream": [16, 38, 71, 78, 82], "isi": [16, 38, 73, 77], "ospf": [16, 38, 81], "bgp": [16, 38, 73, 75], "ldp": [16, 38, 73, 78], "cfm": 16, "http": [16, 38, 66, 71], "icmp": [16, 38, 67, 71], "arp": [16, 38], "pcap": [16, 64, 83], "link": [38, 70], "aggreg": [38, 70], "lag": [38, 70], "a10nsp": [38, 70], "l2tpv2": 38, "server": [38, 66], "ln": 38, "line": 38, "profil": 38, "extern": 38, "connect": 38, "client": [38, 66, 67, 71], "control": 64, "instal": [64, 69], "creat": 64, "instanc": 64, "start": [64, 82], "statu": 64, "stop": [64, 82], "delet": 64, "report": [64, 74], "log": [64, 83], "metric": 64, "frequent": 65, "ask": 65, "question": 65, "emul": 66, "rtbrick": 68, "rout": [68, 76], "content": 68, "contact": 68, "articl": 68, "youtub": 68, "train": 68, "exampl": 68, "sourc": [68, 69], "licens": 68, "copyright": 68, "ubuntu": 69, "build": 69, "from": [69, 79], "depend": 69, "run": 69, "unit": 69, "dpdk": [69, 70, 72], "support": 69, "oper": 70, "system": 70, "set": 70, "function": 70, "untag": 70, "singl": 70, "tag": 70, "doubl": 70, "tripl": 70, "i": 70, "o": 70, "mode": 70, "packet": 70, "mmap": 70, "raw": [70, 71, 75, 78, 82], "nat": 71, "cgnat": 71, "featur": 71, "revers": 71, "flow": [71, 82], "enabl": 71, "tcp": [71, 82], "setup": [71, 74], "interv": 71, "scale": 71, "perform": 72, "guid": [72, 73], "numa": 72, "quickstart": 73, "rate": 74, "standard": 74, "output": 74, "json": 74, "updat": [75, 77, 78, 81], "file": [75, 77, 78, 79, 81, 82], "converg": 75, "adjac": [77, 78], "databas": [77, 81], "flood": [77, 81], "lsp": 77, "via": [77, 81], "scapi": [77, 81], "mrt": [77, 81], "lspgen": [77, 79, 81], "connector": 79, "random": 79, "topologi": 79, "mpl": 80, "neighbor": 81, "lsa": 81, "ospfv3": 81, "understand": 82, "fragment": 82, "unicast": 82, "magic": 82, "sequenc": 82, "identifi": 82, "number": 82, "nanosecond": 82, "send": 82, "timestamp": 82, "troubleshoot": 83, "wireshark": 83, "plugin": 83}, "envversion": {"sphinx.domains.c": 3, "sphinx.domains.changeset": 1, "sphinx.domains.citation": 1, "sphinx.domains.cpp": 9, "sphinx.domains.index": 1, "sphinx.domains.javascript": 3, "sphinx.domains.math": 2, "sphinx.domains.python": 4, "sphinx.domains.rst": 2, "sphinx.domains.std": 2, "sphinx": 60}, "alltitles": {"Access Protocols": [[0, "access-protocols"]], "IPoE": [[1, "ipoe"], [1, "id2"], [38, "ipoe"]], "Static Addresses": [[1, "static-addresses"]], "DHCPv4/v6": [[1, "dhcpv4-v6"]], "DHCP": [[1, "dhcp"], [16, "dhcp"], [38, "dhcp"], [73, "dhcp"]], "DHCPv6": [[1, "dhcpv6"], [38, "dhcpv6"]], "IPoE Commands": [[1, "ipoe-commands"]], "L2BSA": [[2, "l2bsa"]], "L2BSA over Network Inerfaces": [[2, "l2bsa-over-network-inerfaces"]], "L2TP": [[3, "l2tp"], [16, "l2tp"]], "Configuration": [[3, "configuration"], [7, "configuration"], [8, "configuration"], [38, "id1"], [75, "configuration"], [77, "configuration"], [78, "configuration"], [81, "configuration"], [82, "configuration"]], "Variable Data Header": [[3, "variable-data-header"]], "RFC5515": [[3, "rfc5515"]], "L2TP Commands": [[3, "l2tp-commands"]], "Legal Interception (LI)": [[4, "legal-interception-li"], [16, "legal-interception-li"]], "Monkey": [[5, "monkey"]], "Multicast and IPTV": [[6, "multicast-and-iptv"]], "Generate Multicast Traffic": [[6, "generate-multicast-traffic"]], "Manual Join/Leave Testing": [[6, "manual-join-leave-testing"]], "IPTV Zapping Test": [[6, "iptv-zapping-test"]], "Multicast Limitations": [[6, "multicast-limitations"]], "PPPoE": [[7, "pppoe"], [7, "id2"], [38, "pppoe"], [73, "pppoe"]], "PPP": [[7, "ppp"], [16, "ppp"], [38, "ppp"]], "PPP Authentication": [[7, "ppp-authentication"], [38, "ppp-authentication"]], "PPP LCP": [[7, "ppp-lcp"], [38, "ppp-lcp"]], "PPP IPCP (IPv4)": [[7, "ppp-ipcp-ipv4"], [38, "ppp-ipcp-ipv4"]], "PPP IP6CP (IPv6)": [[7, "ppp-ip6cp-ipv6"], [38, "ppp-ip6cp-ipv6"]], "LCP Vendor Extension": [[7, "lcp-vendor-extension"]], "PPPoE Commands": [[7, "pppoe-commands"]], "Session Traffic": [[8, "session-traffic"]], "Verification": [[8, "verification"]], "API/CLI": [[16, "api-cli"]], "BNG Blaster CLI": [[16, "bng-blaster-cli"]], "Test": [[16, "test"]], "Interfaces": [[16, "interfaces"], [38, "interfaces"], [70, "interfaces"], [81, "interfaces"]], "Sessions": [[16, "sessions"], [38, "sessions"]], "IGMP": [[16, "igmp"], [38, "igmp"]], "Traffic": [[16, "traffic"], [38, "traffic"]], "Streams": [[16, "streams"]], "ISIS": [[16, "isis"], [38, "isis"], [73, "isis"], [77, "isis"]], "OSPF": [[16, "ospf"], [38, "ospf"], [81, "ospf"]], "BGP": [[16, "bgp"], [38, "bgp"], [73, "bgp"], [75, "bgp"]], "LDP": [[16, "ldp"], [38, "ldp"], [73, "ldp"], [78, "ldp"]], "CFM": [[16, "cfm"]], "HTTP": [[16, "http"]], "ICMP": [[16, "icmp"], [67, "icmp"]], "ARP": [[16, "arp"]], "PCAP": [[16, "pcap"], [64, "pcap"], [83, "pcap"]], "Variables": [[38, "variables"]], "Links": [[38, "links"], [70, "links"]], "Link Aggregation (LAG)": [[38, "link-aggregation-lag"], [70, "link-aggregation-lag"]], "Network Interfaces": [[38, "network-interfaces"], [70, "network-interfaces"]], "Access Interfaces": [[38, "access-interfaces"], [70, "access-interfaces"]], "A10NSP Interfaces": [[38, "a10nsp-interfaces"], [70, "a10nsp-interfaces"]], "L2TPv2 Server (LNS)": [[38, "l2tpv2-server-lns"]], "Traffic-Streams": [[38, "traffic-streams"]], "Session-Traffic": [[38, "session-traffic"]], "Access-Line": [[38, "access-line"]], "Access-Line-Profiles": [[38, "access-line-profiles"]], "ISIS External": [[38, "isis-external"]], "ISIS External Connections": [[38, "isis-external-connections"]], "OSPF External": [[38, "ospf-external"]], "OSPF External Connections": [[38, "ospf-external-connections"]], "HTTP-Client": [[38, "http-client"]], "HTTP-Server": [[38, "http-server"]], "ICMP-Client": [[38, "icmp-client"]], "ARP-Client": [[38, "arp-client"]], "Controller": [[64, "controller"]], "Installation": [[64, "installation"], [69, "installation"]], "API": [[64, "api"]], "Create Test Instance": [[64, "create-test-instance"]], "Start Test": [[64, "start-test"]], "Status": [[64, "status"]], "Command": [[64, "command"]], "Stop Test": [[64, "stop-test"]], "Delete Test Instance": [[64, "delete-test-instance"]], "Reports": [[64, "reports"], [74, "reports"]], "Logs": [[64, "logs"]], "Metrics": [[64, "metrics"]], "Frequently Asked Questions": [[65, "frequently-asked-questions"]], "HTTP Emulation": [[66, "http-emulation"]], "HTTP Client": [[66, "http-client"]], "HTTP Server": [[66, "http-server"]], "ICMP Client": [[67, "icmp-client"], [71, "icmp-client"]], "RtBrick - Routing Protocol and BNG Blaster": [[68, "rtbrick-routing-protocol-and-bng-blaster"]], "Contents": [[68, "contents"]], "Contact": [[68, "contact"]], "Articles": [[68, "articles"]], "YouTube": [[68, "youtube"]], "Trainings and Examples:": [[68, "trainings-and-examples"]], "Sources": [[68, "sources"]], "License": [[68, "license"]], "Copyright": [[68, "copyright"]], "Install Ubuntu": [[69, "install-ubuntu"]], "Build from Sources": [[69, "build-from-sources"]], "Dependencies": [[69, "dependencies"]], "Build": [[69, "build"]], "Install": [[69, "id1"]], "Build and Run Unit Tests": [[69, "build-and-run-unit-tests"]], "Build with DPDK Support": [[69, "build-with-dpdk-support"]], "Running BNG Blaster": [[69, "running-bng-blaster"]], "Operating System Settings": [[70, "operating-system-settings"]], "Interface Settings": [[70, "interface-settings"]], "Interface Functions": [[70, "interface-functions"]], "Untagged": [[70, "untagged"]], "Single Tagged": [[70, "single-tagged"]], "Double Tagged": [[70, "double-tagged"]], "Triple Tagged": [[70, "triple-tagged"]], "I/O Modes": [[70, "i-o-modes"]], "Packet MMAP": [[70, "packet-mmap"]], "RAW": [[70, "raw"]], "DPDK": [[70, "dpdk"], [72, "dpdk"]], "NAT / CGNAT": [[71, "nat-cgnat"]], "NAT Features": [[71, "nat-features"]], "Reverse Flow": [[71, "reverse-flow"]], "Flow Addresses": [[71, "flow-addresses"]], "NAT Enabled Streams": [[71, "nat-enabled-streams"]], "TCP RAW Streams": [[71, "tcp-raw-streams"], [82, "tcp-raw-streams"]], "Stream Setup interval": [[71, "stream-setup-interval"]], "HTTP NAT Extension": [[71, "http-nat-extension"]], "Scaling": [[71, "scaling"]], "Performance Guide": [[72, "performance-guide"]], "NUMA": [[72, "numa"]], "Quickstart Guide": [[73, "quickstart-guide"]], "Network Traffic": [[73, "network-traffic"]], "Session Setup Rate": [[74, "session-setup-rate"]], "Standard Output Reports": [[74, "standard-output-reports"]], "JSON Reports": [[74, "json-reports"]], "BGP Sessions": [[75, "bgp-sessions"]], "Limitations": [[75, "limitations"], [77, "limitations"], [78, "limitations"]], "RAW Update Files": [[75, "raw-update-files"], [78, "raw-update-files"]], "BGP RAW Update Generator": [[75, "bgp-raw-update-generator"]], "BGP Convergence Testing": [[75, "bgp-convergence-testing"]], "Routing Protocols": [[76, "routing-protocols"]], "Adjacencies": [[77, "adjacencies"]], "Database": [[77, "database"], [81, "database"]], "Flooding": [[77, "flooding"], [81, "flooding"]], "LSP Update Command": [[77, "lsp-update-command"]], "LSP Update via Scapy": [[77, "lsp-update-via-scapy"]], "MRT Files": [[77, "mrt-files"], [81, "mrt-files"]], "LSPGEN": [[77, "lspgen"], [79, "lspgen"], [81, "lspgen"]], "LDP Adjacencies": [[78, "ldp-adjacencies"]], "LDP Sessions": [[78, "ldp-sessions"]], "LDP Traffic Streams": [[78, "ldp-traffic-streams"]], "LDP RAW Update Generator": [[78, "ldp-raw-update-generator"]], "Connector": [[79, "connector"]], "Random Topologies": [[79, "random-topologies"]], "Topology from Configuration File": [[79, "topology-from-configuration-file"]], "MPLS": [[80, "mpls"]], "Neighbors": [[81, "neighbors"]], "LSA Update Command": [[81, "lsa-update-command"]], "LSA Update via Scapy": [[81, "lsa-update-via-scapy"]], "OSPFv3": [[81, "ospfv3"]], "Traffic Streams": [[82, "traffic-streams"]], "Understanding Flows": [[82, "understanding-flows"]], "Stream Configuration File": [[82, "stream-configuration-file"]], "RAW Streams": [[82, "raw-streams"]], "Stream Commands": [[82, "stream-commands"]], "Start/Stop Traffic": [[82, "start-stop-traffic"]], "Fragmentation": [[82, "fragmentation"]], "BNG Blaster Traffic": [[82, "bng-blaster-traffic"]], "Unicast Session Traffic": [[82, "unicast-session-traffic"]], "Multicast Traffic": [[82, "multicast-traffic"]], "BNG Blaster Magic Sequence": [[82, "bng-blaster-magic-sequence"]], "Flow Identifier": [[82, "flow-identifier"]], "Flow Sequence Number": [[82, "flow-sequence-number"]], "Nanosecond Send Timestamps": [[82, "nanosecond-send-timestamps"]], "Troubleshooting": [[83, "troubleshooting"]], "Logging": [[83, "logging"]], "Wireshark Plugin": [[83, "wireshark-plugin"]]}, "indexentries": {}}) \ No newline at end of file +Search.setIndex({"docnames": ["access/index", "access/ipoe", "access/l2bsa", "access/l2tp", "access/li", "access/monkey", "access/multicast", "access/pppoe", "access/traffic", "api/arp", "api/bgp", "api/cfm", "api/dhcp", "api/http", "api/icmp", "api/igmp", "api/index", "api/interfaces", "api/isis", "api/l2tp", "api/ldp", "api/li", "api/ospf", "api/pcap", "api/ppp", "api/sessions", "api/streams", "api/traffic", "configuration/access_line", "configuration/access_line_profiles", "configuration/arp_client", "configuration/bgp", "configuration/dhcp", "configuration/dhcpv6", "configuration/http_client", "configuration/http_server", "configuration/icmp_client", "configuration/igmp", "configuration/index", "configuration/interfaces", "configuration/interfaces_a10nsp", "configuration/interfaces_access", "configuration/interfaces_lag", "configuration/interfaces_links", "configuration/interfaces_network", "configuration/ipoe", "configuration/isis", "configuration/isis_external", "configuration/isis_external_connections", "configuration/ldp", "configuration/lns", "configuration/ospf", "configuration/ospf_external", "configuration/ospf_external_connections", "configuration/ppp", "configuration/ppp_authentication", "configuration/ppp_ip6cp", "configuration/ppp_ipcp", "configuration/ppp_lcp", "configuration/pppoe", "configuration/session_traffic", "configuration/sessions", "configuration/streams", "configuration/traffic", "controller", "faq", "http", "icmp", "index", "install", "interfaces", "nat", "performance", "quickstart", "reports", "routing/bgp", "routing/index", "routing/isis", "routing/ldp", "routing/lspgen", "routing/mpls", "routing/ospf", "streams", "troubleshooting"], "filenames": ["access/index.rst", "access/ipoe.rst", "access/l2bsa.rst", "access/l2tp.rst", "access/li.rst", "access/monkey.rst", "access/multicast.rst", "access/pppoe.rst", "access/traffic.rst", "api/arp.rst", "api/bgp.rst", "api/cfm.rst", "api/dhcp.rst", "api/http.rst", "api/icmp.rst", "api/igmp.rst", "api/index.rst", "api/interfaces.rst", "api/isis.rst", "api/l2tp.rst", "api/ldp.rst", "api/li.rst", "api/ospf.rst", "api/pcap.rst", "api/ppp.rst", "api/sessions.rst", "api/streams.rst", "api/traffic.rst", "configuration/access_line.rst", "configuration/access_line_profiles.rst", "configuration/arp_client.rst", "configuration/bgp.rst", "configuration/dhcp.rst", "configuration/dhcpv6.rst", "configuration/http_client.rst", "configuration/http_server.rst", "configuration/icmp_client.rst", "configuration/igmp.rst", "configuration/index.rst", "configuration/interfaces.rst", "configuration/interfaces_a10nsp.rst", "configuration/interfaces_access.rst", "configuration/interfaces_lag.rst", "configuration/interfaces_links.rst", "configuration/interfaces_network.rst", "configuration/ipoe.rst", "configuration/isis.rst", "configuration/isis_external.rst", "configuration/isis_external_connections.rst", "configuration/ldp.rst", "configuration/lns.rst", "configuration/ospf.rst", "configuration/ospf_external.rst", "configuration/ospf_external_connections.rst", "configuration/ppp.rst", "configuration/ppp_authentication.rst", "configuration/ppp_ip6cp.rst", "configuration/ppp_ipcp.rst", "configuration/ppp_lcp.rst", "configuration/pppoe.rst", "configuration/session_traffic.rst", "configuration/sessions.rst", "configuration/streams.rst", "configuration/traffic.rst", "controller.rst", "faq.rst", "http.rst", "icmp.rst", "index.rst", "install.rst", "interfaces.rst", "nat.rst", "performance.rst", "quickstart.rst", "reports.rst", "routing/bgp.rst", "routing/index.rst", "routing/isis.rst", "routing/ldp.rst", "routing/lspgen.rst", "routing/mpls.rst", "routing/ospf.rst", "streams.rst", "troubleshooting.rst"], "titles": ["Access Protocols", "IPoE", "L2BSA", "L2TP", "Legal Interception (LI)", "Monkey", "Multicast and IPTV", "PPPoE", "Session Traffic", "<no title>", "<no title>", "<no title>", "<no title>", "<no title>", "<no title>", "<no title>", "API/CLI", "<no title>", "<no title>", "<no title>", "<no title>", "<no title>", "<no title>", "<no title>", "<no title>", "<no title>", "<no title>", "<no title>", "<no title>", "<no title>", "<no title>", "<no title>", "<no title>", "<no title>", "<no title>", "<no title>", "<no title>", "<no title>", "Configuration", "<no title>", "<no title>", "<no title>", "<no title>", "<no title>", "<no title>", "<no title>", "<no title>", "<no title>", "<no title>", "<no title>", "<no title>", "<no title>", "<no title>", "<no title>", "<no title>", "<no title>", "<no title>", "<no title>", "<no title>", "<no title>", "<no title>", "<no title>", "<no title>", "<no title>", "Controller", "Frequently Asked Questions", "HTTP Emulation", "ICMP", "RtBrick - Routing Protocol and BNG Blaster", "Installation", "Interfaces", "NAT / CGNAT", "Performance Guide", "Quickstart Guide", "Reports", "BGP", "Routing Protocols", "ISIS", "LDP", "LSPGEN", "MPLS", "OSPF", "Traffic Streams", "Troubleshooting"], "terms": {"A": [0, 3, 5, 6, 38, 50, 63, 68, 69, 71, 72, 74, 75, 78, 82], "bng": [0, 1, 2, 3, 4, 5, 6, 7, 8, 24, 28, 37, 38, 39, 49, 50, 62, 64, 65, 66, 67, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 83], "broadband": [0, 2, 28, 38, 66, 68], "network": [0, 1, 3, 4, 6, 7, 8, 11, 16, 17, 31, 35, 36, 37, 41, 44, 60, 62, 64, 66, 67, 68, 69, 71, 72, 74, 75, 76, 77, 78, 81, 82, 83], "gatewai": [0, 1, 2, 3, 4, 6, 7, 38, 41, 44, 66, 67, 68, 70, 71, 73, 75, 77, 78, 81, 82], "i": [0, 1, 2, 3, 4, 5, 6, 7, 8, 12, 16, 19, 23, 24, 25, 28, 29, 30, 31, 33, 36, 37, 38, 42, 43, 44, 49, 50, 60, 62, 63, 64, 65, 66, 67, 68, 69, 71, 72, 73, 74, 75, 77, 78, 79, 81, 82, 83], "devic": [0, 3, 4, 5, 7, 65, 66, 70, 71, 72, 73, 77, 78, 81, 82], "connect": [0, 1, 7, 16, 19, 48, 49, 53, 58, 66, 70, 71, 72, 73, 77, 78, 79, 81], "custom": [0, 2, 38, 64, 76], "premis": 0, "equip": 0, "servic": [0, 1, 2, 6, 7, 38, 44, 59, 64, 68, 70, 71, 77], "provid": [0, 1, 2, 3, 4, 6, 7, 16, 23, 26, 28, 29, 38, 64, 66, 69, 70, 71, 76, 77, 81, 82], "": [0, 1, 2, 6, 16, 37, 38, 39, 43, 46, 64, 66, 70, 71, 72, 73, 75, 77, 79, 81], "manag": [0, 2, 38, 64, 66], "user": [0, 1, 2, 7, 16, 38, 55, 64, 66, 68, 69, 70, 71, 73], "authent": [0, 3, 41, 46, 51, 55, 70, 73, 75, 77, 78, 79, 81], "traffic": [0, 1, 2, 3, 4, 7, 25, 26, 27, 31, 32, 33, 37, 39, 41, 45, 49, 50, 59, 60, 62, 63, 64, 68, 70, 71, 72, 74, 75, 80, 83], "rout": [0, 38, 46, 70, 73, 75, 77, 82], "qualiti": 0, "qo": [0, 68, 73, 82], "internet": [0, 2, 68, 70, 71, 75, 77], "The": [0, 1, 2, 3, 4, 5, 6, 7, 8, 16, 19, 25, 26, 28, 29, 38, 39, 43, 49, 50, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83], "blaster": [0, 1, 2, 3, 4, 6, 7, 8, 28, 37, 38, 39, 49, 50, 64, 65, 66, 67, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 83], "versatil": [0, 1, 66], "support": [0, 1, 2, 3, 4, 6, 7, 16, 28, 38, 39, 42, 50, 62, 64, 68, 70, 71, 72, 73, 75, 77, 78, 79, 81, 82, 83], "variou": [0, 1, 28, 38, 64, 66, 68, 71, 82], "allow": [0, 1, 2, 3, 5, 6, 7, 16, 19, 29, 32, 33, 37, 38, 39, 43, 55, 56, 57, 64, 65, 66, 67, 68, 69, 70, 71, 72, 74, 75, 77, 78, 79, 81, 82, 83], "creation": [0, 76], "seubscrib": 0, "session": [0, 1, 2, 3, 4, 5, 6, 7, 9, 10, 11, 12, 13, 14, 15, 19, 20, 24, 25, 26, 30, 31, 36, 37, 39, 41, 44, 49, 55, 59, 60, 61, 62, 64, 65, 66, 67, 68, 70, 71, 73, 76], "each": [0, 1, 3, 16, 29, 38, 41, 49, 62, 64, 66, 67, 68, 70, 72, 78, 82], "which": [0, 2, 4, 5, 6, 16, 19, 28, 38, 49, 61, 62, 64, 65, 68, 69, 70, 71, 72, 73, 74, 77, 78, 79, 81, 82, 83], "can": [0, 2, 3, 4, 5, 6, 7, 8, 16, 19, 24, 25, 26, 27, 28, 38, 41, 49, 55, 61, 62, 63, 64, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83], "compris": 0, "multipl": [0, 1, 2, 3, 6, 8, 15, 16, 37, 38, 39, 46, 50, 64, 66, 67, 70, 71, 72, 75, 76, 77, 78, 81, 82], "For": [0, 1, 5, 38, 39, 62, 66, 67, 70, 71, 72, 76, 79, 82], "instanc": [0, 4, 6, 9, 13, 14, 16, 18, 20, 22, 38, 39, 44, 46, 49, 51, 62, 66, 67, 70, 72, 73, 77, 78, 79, 81, 82], "case": [0, 1, 7, 8, 16, 26, 67, 76, 77, 81], "dual": 0, "stack": [0, 68], "ipo": [0, 5, 30, 32, 33, 41, 45, 61, 66, 67, 68, 70, 71, 72, 73, 74], "ar": [0, 1, 2, 3, 5, 6, 7, 8, 16, 26, 28, 29, 36, 37, 38, 39, 44, 61, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 81, 82, 83], "form": 0, "combin": [0, 4, 6, 16, 25, 37, 38, 64, 70, 74, 82], "dhcpv4": [0, 2, 5, 28, 38], "dhcpv6": [0, 2, 5, 7, 16, 28, 33, 41, 45, 65, 66, 70, 72, 73, 74], "well": [0, 2, 6, 28, 38, 67, 70, 72, 79], "arp": [0, 1, 9, 30, 41, 44, 45, 70, 74], "nd": [0, 1, 38, 44, 45, 70], "everi": [0, 2, 6, 38, 62, 64, 68, 70, 71, 72, 73, 74, 77, 81, 82], "defin": [0, 1, 2, 3, 6, 7, 16, 25, 28, 29, 33, 37, 38, 39, 42, 43, 49, 54, 63, 64, 66, 67, 70, 73, 75, 76, 77, 78, 79, 81, 82], "an": [0, 2, 3, 6, 8, 16, 26, 28, 38, 43, 44, 49, 64, 65, 66, 67, 68, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 81, 82], "interfac": [0, 1, 2, 3, 4, 5, 6, 7, 8, 11, 17, 18, 22, 26, 28, 29, 31, 35, 36, 37, 39, 40, 41, 42, 43, 44, 48, 53, 60, 61, 62, 64, 65, 66, 67, 68, 69, 71, 72, 73, 74, 75, 76, 77, 78, 82, 83], "function": [0, 1, 2, 3, 4, 5, 6, 8, 16, 17, 38, 43, 62, 64, 66, 68, 71, 72, 76, 77, 78, 81, 82], "identifi": [0, 2, 16, 18, 22, 29, 30, 31, 34, 36, 38, 41, 42, 44, 46, 48, 49, 51, 53, 62, 66, 67, 70, 75, 77, 78, 81], "global": [0, 1, 5, 7, 8, 16, 27, 28, 31, 38, 43, 55, 63, 70, 72, 73, 74, 75, 82], "uniqu": [0, 82], "id": [0, 1, 2, 3, 6, 7, 9, 11, 12, 13, 14, 15, 16, 18, 19, 20, 24, 25, 26, 28, 29, 30, 31, 32, 33, 34, 36, 38, 39, 41, 42, 44, 46, 48, 49, 50, 51, 53, 62, 64, 66, 67, 70, 71, 72, 73, 75, 77, 78, 79, 81, 82], "number": [0, 3, 4, 5, 6, 8, 16, 37, 38, 39, 41, 42, 43, 44, 49, 62, 64, 68, 70, 71, 72, 73, 74, 75, 77, 78, 81, 83], "start": [0, 3, 5, 6, 7, 8, 11, 12, 13, 14, 15, 16, 23, 25, 26, 27, 31, 34, 36, 37, 38, 41, 44, 50, 58, 60, 61, 62, 63, 65, 66, 67, 68, 69, 70, 72, 73, 74, 75, 77, 78, 79, 81, 83], "1": [0, 1, 2, 3, 4, 6, 7, 8, 16, 19, 26, 29, 30, 31, 32, 34, 35, 36, 37, 38, 39, 41, 44, 45, 46, 48, 50, 51, 53, 54, 61, 62, 63, 64, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 77, 78, 79, 81, 82], "increas": [0, 16, 38, 39, 63, 70, 71, 72, 73, 82], "sequenti": [0, 82], "new": [0, 6, 38, 64, 68, 69, 70, 71, 73, 82], "establish": [0, 1, 3, 5, 6, 7, 8, 16, 25, 37, 38, 60, 62, 64, 65, 66, 67, 73, 74, 75, 76, 78, 82], "furthermor": [0, 1, 64, 68, 71], "you": [0, 2, 16, 26, 38, 66, 67, 68, 70, 71, 72, 73, 74, 76, 79, 82, 83], "have": [0, 38, 68, 70, 71, 73, 74, 79, 82], "flexibl": [0, 1, 38, 66], "group": [0, 1, 2, 6, 12, 15, 16, 24, 25, 26, 30, 34, 36, 37, 38, 41, 43, 62, 66, 67, 70, 71, 72, 73, 78, 82], "togeth": [0, 1, 32, 38, 71, 82], "us": [0, 1, 2, 3, 4, 5, 6, 7, 8, 16, 19, 23, 24, 25, 26, 27, 30, 33, 36, 37, 38, 41, 44, 45, 49, 50, 62, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 81, 82, 83], "option": [0, 1, 3, 5, 6, 7, 8, 16, 18, 28, 29, 32, 33, 36, 37, 38, 39, 41, 43, 44, 47, 49, 50, 53, 56, 57, 61, 62, 63, 64, 67, 68, 69, 70, 71, 72, 73, 74, 75, 77, 78, 79, 81, 82, 83], "enabl": [0, 1, 2, 3, 4, 5, 6, 7, 8, 16, 17, 25, 28, 31, 32, 33, 37, 38, 41, 42, 44, 45, 46, 49, 56, 57, 61, 62, 63, 64, 66, 67, 68, 69, 70, 72, 73, 74, 75, 76, 77, 78, 82], "applic": [0, 6, 16, 25, 37, 38, 64, 66, 72], "command": [0, 4, 5, 6, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 31, 38, 66, 67, 69, 70, 71, 72, 73, 75, 76, 78], "entir": [0, 2, 68], "simultan": [0, 66], "eth1": [0, 1, 2, 3, 5, 6, 7, 64, 66, 67, 70, 72, 74, 75, 77, 78, 81, 82], "type": [0, 1, 2, 4, 6, 7, 28, 29, 38, 41, 44, 46, 51, 62, 64, 66, 70, 71, 72, 73, 74, 75, 77, 78, 79, 81, 82], "pppoe": [0, 2, 3, 5, 6, 16, 28, 41, 59, 61, 64, 65, 66, 67, 68, 70, 72, 74, 82, 83], "usernam": [0, 3, 7, 16, 25, 38, 41, 55, 70, 73], "even": [0, 28, 38, 49, 68, 70, 72, 78, 79], "rtbrick": [0, 1, 3, 7, 16, 38, 55, 64, 66, 69, 70, 73, 75, 82], "com": [0, 7, 16, 38, 55, 64, 66, 68, 69, 70, 73, 75], "outer": [0, 1, 2, 3, 7, 16, 38, 40, 41, 50, 61, 62, 64, 65, 66, 67, 70, 72, 73, 75, 78, 82, 83], "vlan": [0, 1, 2, 3, 7, 16, 30, 32, 33, 38, 40, 41, 44, 45, 59, 61, 62, 64, 65, 66, 67, 70, 72, 73, 82, 83], "min": [0, 1, 2, 3, 7, 8, 16, 25, 26, 29, 38, 41, 42, 61, 64, 70, 72, 73, 74, 82], "1000": [0, 3, 6, 7, 37, 38, 39, 63, 64, 70, 72, 73, 74, 75, 77, 79, 81, 82], "max": [0, 1, 2, 3, 6, 7, 8, 16, 25, 26, 29, 37, 38, 41, 42, 50, 55, 56, 57, 58, 59, 61, 62, 64, 70, 71, 72, 73, 74, 81, 82], "1998": [0, 70], "step": [0, 38, 41, 62, 69, 70, 73, 82], "2": [0, 1, 2, 3, 4, 6, 7, 8, 16, 19, 26, 31, 33, 37, 38, 41, 44, 46, 48, 51, 53, 61, 62, 64, 66, 67, 69, 70, 71, 72, 73, 74, 75, 77, 78, 79, 81, 82], "inner": [0, 1, 2, 3, 7, 16, 38, 41, 61, 62, 64, 70, 72, 73, 75, 82], "7": [0, 1, 2, 3, 4, 30, 38, 41, 44, 50, 62, 64, 66, 67, 70, 72, 73, 75, 77, 78, 81, 82], "odd": [0, 70], "1001": [0, 38, 46, 70, 73, 77, 79, 82], "1999": [0, 7, 70], "It": [0, 2, 3, 5, 6, 38, 39, 62, 63, 64, 67, 68, 69, 70, 71, 72, 77, 78, 81, 82], "also": [0, 2, 3, 5, 6, 16, 26, 38, 39, 62, 64, 66, 67, 69, 70, 71, 72, 73, 74, 77, 79, 81, 82, 83], "possibl": [0, 3, 5, 6, 38, 46, 64, 66, 67, 69, 70, 71, 72, 77, 79, 81, 82], "assign": [0, 1, 8, 16, 38, 44, 62, 70, 71, 72, 82], "section": [0, 2, 6, 16, 28, 29, 38, 41, 64, 70, 72, 82], "singl": [0, 2, 3, 6, 16, 37, 38, 71, 72, 73, 78, 82, 83], "l2tp": [0, 19, 38, 50, 62, 68, 70, 72, 82, 83], "l2bsa": [0, 38, 68, 70], "multicast": [0, 16, 26, 27, 31, 37, 38, 63, 68, 70, 74, 75, 78], "iptv": [0, 68, 70], "legal": [0, 68], "intercept": [0, 68], "li": [0, 21, 38, 63, 68], "monkei": [0, 16, 38, 41, 61, 70], "In": [1, 2, 8, 16, 26, 27, 28, 38, 39, 62, 66, 70, 71, 72, 73, 76, 79, 82], "addit": [1, 38, 66, 69, 71, 79], "its": [1, 38, 49, 66, 67, 68, 70, 72, 78, 79, 81, 82], "test": [1, 3, 5, 7, 15, 19, 38, 41, 55, 61, 62, 63, 65, 66, 68, 70, 71, 72, 73, 74, 76, 77, 78, 81, 82, 83], "capabl": [1, 29, 38, 64, 66, 69, 71, 73, 75, 78], "excel": 1, "emul": [1, 2, 3, 4, 6, 7, 32, 38, 44, 68, 70, 71, 73, 76, 77, 81, 82], "ip": [1, 3, 6, 7, 30, 31, 37, 38, 50, 57, 62, 64, 68, 70, 71, 73, 75, 78, 79, 82, 83], "over": [1, 6, 7, 15, 16, 29, 38, 49, 61, 62, 63, 66, 67, 72, 74, 75, 77, 78, 81, 82], "ethernet": [1, 2, 4, 7, 65, 70, 73], "subscrib": [1, 68, 70], "both": [1, 2, 6, 7, 16, 25, 26, 38, 55, 62, 68, 70, 71, 72, 73, 74, 76, 81, 82], "dynam": [1, 38, 62, 65, 68, 70, 71, 72, 75, 76, 78, 81, 82], "thi": [1, 2, 3, 5, 6, 7, 8, 16, 19, 24, 25, 26, 27, 28, 29, 30, 32, 33, 36, 37, 38, 39, 41, 43, 44, 47, 49, 55, 56, 57, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 81, 82, 83], "particularli": [1, 38], "valuabl": [1, 66], "valid": [1, 4, 38, 49, 71, 75, 78, 79, 82], "perform": [1, 64, 66, 68, 70, 71, 76, 82], "behavior": [1, 6, 7, 16, 24, 38, 63, 66, 68, 72, 82, 83], "infrastructur": [1, 2, 71], "compon": 1, "handl": [1, 38, 68, 70, 71, 72], "base": [1, 2, 3, 6, 16, 18, 37, 38, 41, 46, 50, 51, 62, 63, 68, 70, 72, 73, 75, 77, 78, 79, 81, 82], "administr": 1, "develop": [1, 16, 68, 79, 81], "simul": [1, 28, 38, 66, 68, 71, 76], "util": [1, 2, 38, 72, 75], "underli": [1, 64, 66], "link": [1, 2, 16, 17, 25, 29, 39, 40, 41, 42, 43, 44, 64, 68, 72, 73, 76, 77, 78, 79, 81, 82, 83], "layer": [1, 2, 38, 39, 43, 62, 70, 73, 82], "protocol": [1, 3, 4, 6, 7, 16, 19, 28, 29, 37, 38, 41, 44, 45, 46, 55, 56, 57, 65, 70, 71, 73, 74, 75, 77, 78, 79, 81, 82], "extend": [1, 31, 38, 75, 78], "offer": [1, 64, 66, 71, 82], "configur": [1, 2, 6, 16, 25, 26, 28, 31, 37, 41, 43, 50, 56, 57, 58, 61, 64, 65, 66, 67, 68, 70, 71, 72, 73, 83], "method": [1, 5, 82], "scenario": [1, 2, 38, 66, 71, 72, 82], "where": [1, 2, 3, 38, 50, 62, 64, 70, 71, 73, 75, 82, 83], "specif": [1, 2, 7, 16, 26, 38, 45, 58, 64, 66, 68, 71, 72, 79, 81, 82], "individu": 1, "facilit": [1, 64], "accur": 1, "polici": [1, 75], "reli": 1, "alloc": 1, "requir": [1, 2, 5, 7, 36, 38, 43, 47, 62, 63, 66, 67, 69, 70, 71, 72, 77, 82], "like": [1, 6, 32, 33, 38, 62, 68, 70, 71, 75, 77, 78, 81, 82], "host": [1, 2, 4, 7, 38, 59, 70, 82], "realist": 1, "obtain": 1, "similar": [1, 16, 26, 70, 74, 76, 81], "real": [1, 6, 69, 72, 76, 77, 81], "world": [1, 6, 72], "deploy": [1, 66], "differ": [1, 3, 5, 6, 7, 29, 38, 50, 62, 63, 66, 68, 70, 72, 73, 74, 75, 77, 81, 82], "virtual": [1, 68, 73, 76, 77, 81], "local": [1, 2, 10, 16, 19, 20, 25, 31, 35, 38, 41, 44, 49, 53, 64, 66, 70, 71, 72, 73, 75, 78, 79, 81], "area": [1, 38, 46, 51, 73, 77, 79, 81], "mode": [1, 3, 7, 38, 39, 41, 43, 50, 65, 66, 69, 72], "includ": [1, 2, 6, 7, 8, 16, 27, 28, 37, 38, 39, 45, 57, 64, 67, 68, 69, 70, 71, 73, 74, 75, 76, 77, 78, 79, 81, 82, 83], "n": [1, 3, 7, 16, 38, 41, 45, 61, 62, 66, 70, 71, 73, 75, 78, 79, 82], "associ": [1, 38, 41, 44, 66, 67, 70, 71, 72, 81, 82], "dedic": [1, 6, 37, 38, 41, 70, 71, 72], "ensur": [1, 7, 38, 71, 72, 81, 82], "isol": 1, "control": [1, 3, 7, 16, 27, 31, 32, 33, 38, 45, 49, 50, 59, 63, 66, 68, 73, 75, 78, 79, 81, 82], "On": [1, 72, 73], "other": [1, 2, 7, 16, 26, 28, 38, 39, 55, 64, 65, 66, 69, 70, 71, 72, 73, 77, 81, 83], "hand": 1, "share": [1, 70, 71, 72], "common": [1, 3, 5, 68, 77, 81], "By": [1, 28, 38, 64, 66, 75], "comprehens": [1, 64, 66, 68, 71, 76], "environ": [1, 72, 82], "whether": [1, 64, 71, 82], "evalu": [1, 66, 68, 71], "mechan": [1, 71], "assess": [1, 66, 68, 71], "thorough": [1, 68], "optim": [1, 7, 38, 63, 68, 69, 71, 72, 81], "mean": [1, 2, 7, 8, 38, 39, 45, 58, 62, 67, 68, 70, 71, 72, 75, 78, 82], "shown": [1, 3, 4, 6, 16, 19, 69, 70, 71, 77, 78, 81, 83], "exampl": [1, 2, 3, 4, 6, 7, 8, 16, 27, 38, 62, 64, 66, 67, 69, 70, 72, 73, 74, 75, 76, 77, 78, 79, 81, 82], "below": [1, 2, 3, 6, 16, 19, 38, 63, 68, 69, 70, 71, 73, 77, 81, 83], "access": [1, 2, 3, 5, 7, 8, 16, 17, 28, 29, 32, 33, 36, 39, 41, 62, 64, 66, 67, 68, 71, 72, 73, 74, 82], "128": [1, 2, 6, 7, 38, 46, 62, 70, 73, 77, 78, 82], "4000": [1, 2, 3, 64, 70, 72, 73, 82], "200": [1, 3, 4, 7, 16, 64, 66, 70, 71, 73, 74, 77, 78, 81, 82], "0": [1, 2, 3, 4, 6, 7, 8, 16, 18, 28, 29, 30, 31, 32, 33, 34, 36, 37, 38, 39, 41, 42, 44, 45, 46, 49, 50, 51, 53, 57, 58, 59, 60, 61, 62, 64, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 77, 78, 79, 81, 82], "iter": [1, 6, 15, 16, 37, 38, 41, 61, 62, 70, 71], "4": [1, 4, 7, 8, 16, 19, 31, 38, 41, 44, 61, 64, 66, 67, 68, 70, 72, 73, 74, 75, 77, 78, 81, 82], "most": [1, 3, 38, 41, 65, 70, 72, 83], "true": [1, 2, 3, 5, 6, 7, 8, 31, 32, 33, 34, 36, 37, 38, 39, 41, 44, 45, 46, 47, 52, 56, 57, 60, 61, 62, 63, 64, 66, 67, 69, 70, 71, 72, 73, 75, 77, 79, 81, 82, 83], "line": [1, 2, 3, 7, 16, 28, 29, 32, 33, 41, 70, 73, 82], "agent": [1, 2, 3, 7, 16, 25, 28, 32, 33, 38, 41, 70, 73], "remot": [1, 2, 3, 7, 16, 19, 25, 28, 32, 33, 38, 41, 53, 70, 73, 79, 81], "deu": [1, 3, 7, 38, 73], "circuit": [1, 2, 3, 7, 16, 25, 28, 32, 33, 38, 41, 70, 73], "eth": [1, 3, 7, 38, 73], "attribut": [1, 3, 6, 7, 8, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 66, 67, 70, 75, 77, 78, 81, 82], "descript": [1, 3, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 66, 67, 70, 75, 77, 78, 81, 82], "ipv6": [1, 2, 3, 4, 5, 8, 16, 25, 31, 34, 35, 41, 44, 45, 46, 49, 60, 62, 65, 66, 70, 71, 73, 74, 75, 77, 78, 79, 81, 82], "disabl": [1, 2, 5, 6, 7, 8, 16, 17, 28, 32, 33, 37, 38, 45, 46, 49, 56, 57, 58, 59, 60, 62, 70, 71, 73, 77, 78, 82], "default": [1, 3, 4, 5, 6, 7, 8, 16, 18, 24, 26, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 69, 70, 72, 73, 75, 77, 78, 79, 81, 82, 83], "ipv4": [1, 2, 3, 4, 5, 6, 8, 10, 16, 20, 30, 31, 32, 34, 35, 36, 41, 44, 45, 46, 49, 50, 53, 60, 62, 63, 65, 66, 67, 70, 71, 72, 73, 74, 75, 77, 78, 79, 81, 82], "timeout": [1, 2, 3, 7, 16, 24, 32, 33, 38, 42, 45, 49, 55, 56, 57, 58, 59, 70, 74, 78], "initi": [1, 6, 7, 37, 38, 45, 57, 58, 63, 64, 66, 67, 71, 78, 79, 82], "retri": [1, 2, 3, 7, 32, 33, 38, 45, 46, 50, 51, 55, 56, 57, 58, 59, 66, 77, 81], "interv": [1, 3, 6, 7, 30, 32, 36, 37, 38, 39, 41, 43, 44, 45, 46, 49, 50, 51, 58, 62, 63, 66, 67, 70, 73, 77, 78, 81, 82], "second": [1, 6, 7, 8, 16, 25, 30, 31, 32, 33, 34, 36, 37, 38, 45, 46, 49, 51, 55, 56, 57, 58, 59, 61, 62, 66, 67, 71, 73, 74, 75, 77, 78, 81, 82], "period": [1, 38, 45], "300": [1, 38, 45, 46, 77], "prioriti": [1, 2, 3, 6, 7, 16, 18, 30, 32, 33, 37, 38, 41, 42, 43, 44, 45, 50, 51, 59, 62, 70, 73, 78, 81, 82], "pbit": [1, 7, 32, 33, 38, 45, 59, 82], "gener": [1, 8, 16, 27, 37, 38, 43, 45, 46, 60, 61, 64, 66, 67, 68, 69, 70, 73, 74, 76, 77, 79, 81, 82, 83], "icmpv6": [1, 38, 44, 45, 65, 70, 74], "r": [1, 38, 45, 66, 71, 74, 79], "master": [1, 38, 45], "valu": [1, 7, 16, 28, 29, 31, 36, 38, 41, 44, 45, 49, 55, 62, 63, 66, 67, 70, 71, 74, 75, 78, 82], "unless": [1, 38, 45, 82], "overridden": [1, 38, 45], "set": [1, 3, 6, 7, 8, 11, 16, 28, 32, 36, 37, 38, 40, 41, 43, 44, 45, 49, 50, 55, 62, 63, 66, 67, 69, 71, 72, 73, 74, 75, 78, 79, 82], "broadcast": [1, 32, 38, 44, 70, 73, 77, 81], "flag": [1, 16, 26, 32, 38, 64, 65, 67, 70, 71, 82], "fals": [1, 2, 3, 6, 7, 31, 32, 33, 36, 37, 38, 39, 40, 41, 42, 44, 46, 47, 49, 50, 57, 58, 59, 61, 62, 63, 66, 67, 70, 71, 72, 73, 75, 77, 78, 79, 82], "5": [1, 3, 4, 6, 7, 8, 31, 32, 33, 37, 38, 46, 49, 50, 51, 55, 56, 57, 58, 59, 62, 69, 70, 71, 72, 73, 74, 75, 77, 78, 81, 82], "10": [1, 2, 3, 4, 6, 7, 16, 32, 33, 38, 41, 44, 46, 48, 49, 51, 53, 56, 57, 58, 59, 62, 64, 66, 67, 70, 71, 72, 73, 74, 75, 77, 78, 79, 81, 82], "releas": [1, 12, 16, 32, 38, 64, 69, 72, 75], "3": [1, 2, 3, 4, 6, 7, 8, 16, 19, 26, 31, 32, 36, 37, 38, 41, 44, 46, 49, 53, 58, 61, 62, 67, 68, 70, 72, 73, 74, 75, 77, 78, 79, 81, 82], "tos": [1, 3, 6, 31, 32, 36, 37, 38, 49, 50, 67, 75, 78, 82], "TOS": [1, 3, 6, 31, 32, 36, 37, 38, 49, 50, 62, 67, 75, 78, 82], "all": [1, 2, 3, 5, 6, 7, 8, 9, 10, 13, 14, 15, 16, 17, 19, 20, 21, 25, 26, 27, 32, 33, 38, 39, 47, 49, 50, 52, 59, 60, 61, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 77, 78, 81, 82, 83], "overrid": [1, 32, 33, 38], "packet": [1, 2, 3, 4, 6, 7, 28, 32, 33, 37, 38, 39, 50, 62, 63, 64, 65, 69, 71, 72, 73, 74, 75, 77, 78, 79, 81, 82, 83], "onli": [1, 3, 4, 6, 7, 16, 25, 26, 32, 33, 36, 37, 38, 41, 43, 53, 62, 63, 65, 67, 68, 70, 71, 72, 77, 81, 82, 83], "add": [1, 3, 32, 33, 38, 41, 43, 50, 70, 73, 75, 79], "vendor": [1, 3, 32, 38, 41, 58, 64, 68, 70], "class": [1, 32, 38, 41, 70, 72], "60": [1, 3, 32, 38, 41, 70, 72, 81], "keep": [1, 5, 12, 16, 32, 38, 71], "init": [1, 12, 16, 32, 38, 73], "reboot": [1, 12, 16, 32, 38], "stop": [1, 5, 6, 7, 11, 12, 13, 14, 15, 16, 23, 25, 26, 27, 32, 36, 38, 61, 62, 63, 66, 67, 70, 73], "zero": [1, 3, 28, 32, 38, 50, 70, 72, 82], "ia": [1, 33, 38], "na": [1, 33, 38], "ia_na": [1, 33, 38], "pd": [1, 33, 38], "ia_pd": [1, 33, 38], "separ": [1, 33, 38, 68, 82], "send": [1, 2, 3, 6, 7, 8, 12, 16, 19, 28, 31, 33, 36, 37, 38, 44, 46, 49, 50, 60, 62, 64, 65, 67, 69, 70, 72, 73, 75, 77, 78, 80, 81, 83], "seper": [1, 33, 38], "request": [1, 3, 5, 6, 7, 16, 19, 24, 30, 33, 34, 36, 37, 38, 55, 56, 57, 58, 61, 64, 66, 67, 68, 70, 74, 77, 81], "rapid": [1, 7, 33, 38], "commit": [1, 7, 33, 38, 68, 69], "wai": [1, 6, 33, 38, 64, 69, 77, 81], "handshak": [1, 33, 38, 66, 77], "ldra": [1, 28, 33, 38, 41, 70], "lightweight": [1, 28, 33, 38, 66, 68, 73], "relai": [1, 28, 33, 38], "rfc6221": [1, 33, 38], "http": [1, 13, 33, 34, 35, 41, 64, 68, 69, 70, 75, 83], "datatrack": [1, 33, 38], "ietf": [1, 33, 38, 77, 78], "org": [1, 33, 38, 68, 69], "doc": [1, 33, 38, 69], "html": [1, 33, 38, 69], "ad": [1, 16, 33, 38, 71, 73, 82], "inform": [1, 3, 7, 8, 15, 16, 25, 26, 33, 38, 64, 75, 77, 78, 81, 82, 83], "should": [1, 5, 6, 33, 38, 63, 64, 66, 69, 70, 72, 73, 75, 78, 81, 82], "info": [1, 3, 6, 7, 15, 16, 17, 25, 26, 64, 71, 73, 75, 78, 82, 83], "detail": [1, 2, 3, 4, 6, 7, 8, 16, 21, 37, 38, 62, 64, 67, 68, 69, 70, 73, 74, 81, 82], "sudo": [1, 3, 4, 5, 6, 7, 16, 19, 64, 66, 69, 70, 71, 73, 75, 77, 78, 81, 82, 83], "bngblaster": [1, 3, 4, 5, 6, 7, 16, 19, 38, 39, 46, 49, 51, 64, 66, 68, 69, 70, 71, 73, 75, 77, 78, 81, 82, 83], "cli": [1, 3, 4, 5, 6, 7, 19, 66, 68, 71, 73, 75, 76, 77, 78, 81, 82], "run": [1, 3, 4, 5, 6, 7, 16, 19, 38, 39, 64, 66, 68, 70, 71, 72, 73, 75, 77, 78, 81, 82], "sock": [1, 3, 4, 5, 6, 7, 16, 19, 64, 66, 71, 73, 75, 77, 78, 81, 82], "jq": [1, 7, 16, 66, 73, 77, 81, 82], "statu": [1, 3, 4, 6, 7, 16, 38, 58, 66, 71, 73, 77, 78, 82], "ok": [1, 3, 4, 6, 7, 16, 64, 66, 71, 73, 77, 78, 82], "code": [1, 3, 4, 7, 16, 19, 64, 66, 71, 73, 77, 78, 82], "state": [1, 2, 3, 6, 7, 16, 27, 29, 38, 63, 64, 66, 68, 70, 71, 73, 77, 78, 79, 81, 82], "8": [1, 2, 3, 4, 36, 38, 64, 67, 69, 70, 71, 72, 75, 77, 78, 81, 82], "mac": [1, 2, 7, 38, 39, 40, 42, 43, 44, 67, 70, 73, 82], "02": [1, 2, 7, 38, 42, 70, 73, 79], "00": [1, 2, 7, 8, 29, 38, 42, 69, 70, 72, 73, 74, 77, 79], "01": [1, 2, 7, 64, 70, 73, 74, 77], "netmask": 1, "255": [1, 3, 31, 38, 39, 42, 46, 50, 51, 62, 70, 75, 77, 81, 82], "dns1": [1, 7, 38, 57, 73], "dns2": [1, 7, 38, 57, 73], "prefix": [1, 7, 8, 38, 39, 60, 67, 68, 70, 72, 73, 75, 78, 79, 82], "fc66": [1, 2, 3, 7, 38, 44, 66, 70, 73, 75, 77, 81, 82], "1337": [1, 2, 3, 7, 66, 70, 73, 77, 79, 81, 82], "2222": 1, "deleg": [1, 7, 8, 38, 60], "3333": 1, "64": [1, 7, 8, 36, 38, 44, 51, 62, 66, 67, 70, 71, 72, 73, 77, 81, 82], "bound": [1, 7, 36, 38, 67, 73, 82], "server": [1, 3, 7, 35, 50, 57, 64, 68, 71, 72, 73], "leas": 1, "time": [1, 6, 7, 31, 38, 46, 47, 49, 51, 59, 63, 64, 68, 69, 73, 74, 75, 76, 77, 78, 81, 82, 83], "expir": 1, "299": 1, "t1": 1, "149": 1, "t2": 1, "261": 1, "tx": [1, 2, 3, 7, 16, 26, 38, 39, 42, 43, 44, 46, 62, 70, 72, 73, 74, 75, 77, 78, 82], "rx": [1, 3, 4, 6, 7, 38, 39, 43, 62, 64, 70, 71, 72, 73, 74, 75, 78, 82], "discov": 1, "ack": [1, 16, 26], "nak": 1, "14400": 1, "14399": 1, "899": 1, "1439": 1, "solicit": 1, "advertis": [1, 38, 44, 65, 67, 70, 73, 77, 82], "repli": [1, 67, 73], "renew": 1, "6": [1, 2, 4, 7, 31, 38, 72, 74, 75, 77, 78, 81, 82], "fragment": [1, 7, 38, 63, 67, 73, 74], "total": [1, 7, 8, 64, 66, 67, 69, 73, 74, 82], "flow": [1, 4, 7, 8, 16, 21, 25, 26, 31, 38, 68, 72, 73, 74, 75], "verifi": [1, 2, 6, 7, 8, 16, 26, 38, 62, 63, 64, 68, 71, 72, 73, 74, 82, 83], "downstream": [1, 2, 4, 6, 7, 8, 16, 25, 26, 28, 29, 38, 60, 62, 70, 71, 73, 74, 78, 82], "13": [1, 3, 7, 38, 41, 44, 70, 72, 73, 78, 79], "first": [1, 2, 6, 7, 8, 16, 31, 37, 38, 41, 61, 62, 70, 71, 72, 73, 74, 75, 81, 82], "seq": [1, 7, 38, 41, 44, 67, 70, 73, 74, 77, 81, 82], "loss": [1, 6, 7, 68, 72, 73, 74, 82, 83], "wrong": [1, 7, 73, 74, 82], "upstream": [1, 2, 4, 7, 8, 16, 25, 26, 28, 29, 38, 62, 71, 73, 74, 82], "ipv6pd": [1, 7, 8, 38, 60, 62, 74, 82], "bitstream": 2, "refer": [2, 4, 7, 70, 75, 77, 78], "make": [2, 28, 38, 64, 69, 71, 75], "hi": 2, "avail": [2, 64, 76], "These": [2, 36, 38, 64, 67, 71, 76, 82], "retail": 2, "who": 2, "germani": 2, "mandat": 2, "feder": 2, "agenc": 2, "german": 2, "bundesnetzagentur": 2, "bnetza": 2, "regulatori": 2, "offic": 2, "electr": 2, "ga": 2, "telecommun": [2, 71], "post": [2, 64], "railwai": 2, "market": 2, "ministri": 2, "econom": 2, "affair": 2, "energi": 2, "locat": [2, 38, 64, 66], "bonn": 2, "definit": [2, 29, 38, 66], "wa": [2, 7, 16, 68, 71, 72, 77, 79], "so": [2, 38, 70, 72, 82], "call": [2, 3, 8, 38, 64, 70, 71, 74, 77, 78, 79, 81, 82], "nga": 2, "forum": [2, 28, 38], "advisori": 2, "board": 2, "found": [2, 16, 64, 66, 68, 69, 72, 77, 78, 81, 82], "mai": [2, 5, 6, 7, 38, 49, 63, 64, 72, 75, 78], "2010": 2, "promot": 2, "dialogu": 2, "between": [2, 6, 8, 29, 37, 38, 46, 49, 60, 63, 66, 67, 70, 72, 73, 74, 75, 77, 78, 79, 81, 82], "oper": [2, 64, 66, 68, 71, 72, 75, 78, 82], "manufactur": 2, "author": 2, "rollout": 2, "two": [2, 5, 7, 36, 38, 66, 67, 70, 72, 73, 75, 77, 78, 80, 81, 82], "u": [2, 16, 38, 70, 79, 82], "a10": [2, 38, 70], "nsp": [2, 38], "those": [2, 7, 8, 16, 29, 38, 41, 62, 64, 67, 70, 71, 72, 73, 74, 75, 77, 78, 79, 81, 82, 83], "were": [2, 38], "introduc": 2, "tr": [2, 70], "101": [2, 6], "migrat": 2, "aggreg": [2, 16, 17, 28, 41, 68, 72, 83], "transpar": 2, "without": [2, 5, 6, 12, 16, 69, 70, 73], "tag": [2, 4, 72], "wholesal": 2, "some": [2, 4, 6, 37, 38, 64, 65, 70, 72, 73, 83], "cpe": [2, 5, 7], "untag": [2, 38, 41, 44], "while": [2, 16, 38, 77, 81, 82], "anoth": [2, 6, 71, 72, 73, 82], "need": [2, 16, 38, 39, 67, 69, 70, 71, 72, 73, 77, 82], "forward": [2, 8, 28, 38, 68, 75, 78, 82], "bundl": 2, "one": [2, 4, 6, 7, 36, 38, 62, 64, 67, 70, 71, 72, 73, 74, 75, 76, 77, 78, 81, 82], "more": [2, 5, 6, 16, 37, 38, 63, 66, 68, 70, 71, 72, 73, 75, 77, 78, 81, 82], "lacp": [2, 38, 42, 43, 70], "least": [2, 16, 36, 38, 67, 70, 72, 82], "limit": [2, 38, 41, 42, 64, 65, 70, 71, 72, 82], "amount": [2, 16, 25, 64], "4094": 2, "per": [2, 5, 6, 7, 16, 37, 38, 39, 41, 43, 44, 46, 61, 62, 63, 64, 68, 69, 70, 71, 72, 74, 75, 77, 82, 83], "caus": [2, 72, 77], "usabl": [2, 64], "rang": [2, 3, 7, 16, 25, 26, 28, 29, 30, 31, 34, 35, 36, 38, 39, 41, 44, 46, 49, 50, 51, 53, 54, 61, 62, 63, 66, 67, 70, 71, 73, 75, 77, 78, 81, 82], "mani": [2, 5, 64, 68, 70, 73], "thei": [2, 29, 38, 71, 73, 82], "address": [2, 3, 4, 6, 7, 8, 10, 12, 16, 20, 25, 27, 30, 31, 32, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 49, 50, 53, 57, 60, 62, 64, 66, 67, 70, 72, 73, 75, 77, 78, 79, 81, 82, 83], "than": [2, 38, 62, 63, 66, 68, 70, 72, 75, 77, 78, 82], "term": [2, 70], "relat": [2, 71, 83], "end": [2, 64, 68, 70, 73, 74, 75, 76, 82], "adsl": [2, 70], "model": [2, 70], "depict": 2, "figur": 2, "core": [2, 38, 43, 68, 70], "subset": 2, "architectur": [2, 72], "compos": 2, "block": [2, 16, 27, 70], "three": [2, 6, 37, 38, 70, 74, 77, 79, 81, 82], "point": [2, 71, 79], "node": [2, 38, 46, 51, 68, 72, 73, 76, 77, 79, 81], "region": 2, "v": [2, 38, 39, 69, 70, 79], "map": [2, 70, 71, 78, 81], "chang": [2, 5, 6, 37, 38, 39, 49, 61, 63, 64, 65, 69, 70, 73, 75, 78, 79, 81, 82], "trigger": [2, 75, 78], "re": [2, 72], "provis": 2, "action": 2, "port": [2, 4, 34, 35, 38, 62, 63, 64, 66, 71, 72, 78], "up": [2, 3, 6, 7, 8, 28, 29, 38, 41, 65, 70, 72, 73, 74, 77, 78, 80, 82], "down": [2, 3, 7, 28, 29, 38, 41, 66, 70, 73], "thu": 2, "discoveri": [2, 3, 7, 28, 38, 59, 78], "v6": 2, "must": [2, 5, 16, 38, 49, 64, 67, 70, 73, 78, 79, 82], "enrich": [2, 38], "extra": 2, "identif": [2, 82], "header": [2, 4, 6, 36, 38, 50, 62, 64, 65, 66, 67, 70, 71, 77, 81, 82, 83], "actual": [2, 16, 28, 29, 38, 39, 62, 70, 71, 72, 74, 75, 78, 82], "data": [2, 28, 29, 36, 38, 50, 63, 64, 67, 74, 75, 77, 81, 82], "rate": [2, 3, 7, 8, 28, 29, 38, 41, 61, 62, 63, 68, 70, 71, 82], "direct": [2, 4, 6, 16, 19, 25, 26, 38, 44, 62, 64, 70, 71, 72, 73, 78, 82], "from": [2, 3, 6, 7, 8, 15, 16, 22, 24, 28, 31, 37, 38, 41, 49, 50, 62, 65, 67, 68, 70, 71, 72, 73, 75, 77, 78, 81, 82, 83], "receiv": [2, 3, 4, 6, 7, 8, 38, 39, 49, 50, 54, 62, 64, 67, 68, 70, 71, 72, 73, 74, 77, 78, 80, 81, 82, 83], "intermedi": [2, 77], "a10nsp": [2, 8, 16, 17, 40, 41, 44, 62, 64, 68, 72, 73, 82], "accept": [2, 7, 16, 24, 38, 58, 70, 73], "follow": [2, 3, 4, 5, 6, 7, 8, 16, 37, 38, 61, 64, 66, 67, 69, 70, 71, 72, 73, 74, 75, 77, 78, 79, 81, 82, 83], "basic": [2, 7, 66, 67, 73, 81], "explain": [2, 16, 38, 64, 69, 70, 72, 73], "eth4": [2, 70], "qinq": [2, 38, 40, 41, 70, 73], "ff": [2, 38, 41, 42, 44, 70], "eth5": [2, 70], "__comment__": [2, 64, 67, 72, 73], "stream": [2, 4, 6, 8, 25, 26, 27, 39, 41, 62, 63, 64, 65, 68, 70, 72, 73, 74, 75, 79, 83], "reconnect": [2, 3, 5, 7, 16, 25, 31, 36, 38, 59, 61, 67, 72, 73, 75], "uniq": [2, 7, 38, 59], "autostart": [2, 3, 5, 6, 8, 34, 36, 37, 38, 41, 60, 61, 62, 63, 66, 67, 70, 82], "pp": [2, 3, 6, 7, 8, 16, 26, 37, 38, 60, 62, 70, 71, 72, 73, 74, 75, 78, 82], "name": [2, 3, 6, 7, 8, 16, 23, 26, 34, 35, 38, 39, 40, 41, 42, 43, 44, 50, 59, 62, 64, 66, 67, 70, 71, 72, 73, 74, 75, 78, 79, 82, 83], "s1": [2, 72, 73, 74, 78], "length": [2, 3, 6, 37, 38, 50, 62, 65, 66, 70, 73, 75, 77, 78, 81, 82], "256": [2, 6, 38, 39, 46, 70, 73, 77, 82], "s2": [2, 73], "same": [2, 3, 4, 6, 16, 38, 50, 66, 67, 70, 72, 73, 74, 75, 78, 81, 82], "static": [2, 38, 41, 70, 71, 82], "directli": [2, 38, 39, 63, 70, 77, 81], "lag": [2, 16, 17, 42, 43, 68, 72, 83], "parent": [2, 38, 40, 41, 44, 70], "manual": [2, 38, 44, 66, 69, 70, 72, 75, 78, 79, 82], "automat": [2, 4, 5, 6, 7, 8, 16, 28, 31, 37, 38, 43, 47, 52, 59, 60, 61, 63, 64, 66, 70, 72, 75, 77, 81, 82], "balanc": [2, 38, 63, 72], "member": [2, 38, 42, 70], "thread": [2, 6, 38, 39, 43, 70, 72, 75, 83], "recommend": [2, 6, 38, 39, 63, 68, 69, 70, 72], "specifi": [2, 6, 8, 16, 23, 29, 37, 38, 60, 63, 73, 78, 82], "correspond": [2, 5, 6, 8, 16, 28, 38, 41, 60, 62, 64, 70, 72, 75, 78, 79, 82], "otherwis": [2, 82], "explicitli": [2, 64, 70, 78, 82], "autogener": [2, 6, 8, 38, 60], "experiment": [2, 38, 39, 44, 68, 69, 70, 72, 81], "featur": [2, 5, 16, 24, 28, 38, 68, 73, 82], "termin": [2, 5, 7, 16, 19, 38, 59, 64, 66, 73], "mpl": [2, 8, 38, 60, 62, 65, 68, 72, 76, 78, 82], "encapsul": [2, 29, 38, 82], "through": [2, 38, 39, 64, 66, 67, 68, 70, 73, 76, 78], "label": [2, 8, 31, 38, 44, 60, 62, 64, 68, 70, 73, 75, 78, 80, 82], "ingress": 2, "egress": 2, "transport": [2, 38, 44, 49, 70, 78], "switch": [2, 29, 38, 44, 70, 78], "eth2": [2, 3, 4, 6, 7, 38, 66, 67, 70, 72, 74, 77, 81, 82], "7331": [2, 3, 7, 66, 70, 73, 77, 82], "13370": 2, "p0": 2, "destin": [2, 4, 6, 16, 27, 34, 36, 38, 62, 66, 67, 70, 71, 72, 73, 78], "bgp": [2, 10, 31, 64, 68, 72, 76, 82, 83], "peer": [2, 3, 10, 16, 20, 31, 38, 49, 50, 73, 75, 77, 78], "raw": [2, 6, 10, 16, 20, 27, 31, 38, 39, 49, 62, 64, 65, 69, 73, 76], "updat": [2, 10, 16, 18, 19, 20, 22, 25, 26, 31, 38, 49, 73, 76], "file": [2, 6, 10, 16, 18, 20, 22, 23, 31, 38, 47, 49, 52, 64, 65, 68, 69, 72, 73, 74, 76, 83], "4200000001": 2, "4200000002": 2, "l2tpv2": [3, 68], "rfc2661": [3, 16, 19, 38, 50], "ln": [3, 50, 68, 83], "abl": [3, 72, 77, 79, 81], "lac": 3, "under": [3, 5, 7, 65, 66, 68, 70, 71, 75, 77, 78, 81, 82], "30": [3, 6, 7, 16, 18, 38, 46, 50, 55, 58, 66, 71, 72, 73, 77, 81], "pap": [3, 7, 38, 55, 74], "chap": [3, 7, 38, 55, 74], "ppp": [3, 41, 54, 55, 56, 57, 58, 59, 70], "mru": [3, 7, 38, 41, 54, 70], "1492": [3, 7, 38, 46, 54, 67, 77, 82], "de": [3, 66, 71, 77], "password": [3, 7, 16, 25, 38, 41, 55, 70], "lcp": [3, 5, 16, 19, 24, 50, 58, 73, 74], "conf": [3, 7, 38, 56, 57, 58, 73], "keepal": [3, 7, 38, 49, 58, 73, 78], "ipcp": [3, 5, 16, 24, 41, 50, 57, 70, 73, 74], "ip6cp": [3, 5, 16, 24, 41, 56, 70, 73, 74], "1024": [3, 7, 77, 81], "16384": [3, 7], "lns1": 3, "11": [3, 6, 64, 66, 69, 72, 73, 78, 79, 81], "secret": [3, 38, 50, 77, 79], "test1": 3, "window": [3, 38, 46, 50, 70, 73, 77, 83], "size": [3, 36, 38, 39, 43, 44, 46, 47, 50, 63, 67, 70, 72, 77, 82], "lns2": 3, "12": [3, 6, 8, 66, 72, 73, 81], "test2": 3, "lns3": 3, "test3": 3, "lns4": 3, "14": [3, 38, 41, 44, 64, 70, 72, 73], "test4": 3, "lns5": 3, "15": [3, 38, 49, 67, 72, 74, 78], "test5": 3, "lns6": 3, "16": [3, 38, 50, 72, 73, 81], "test6": 3, "lns7": 3, "17": [3, 72, 74], "test7": 3, "lns8": 3, "18": [3, 67, 69, 72, 74], "test8": 3, "lns9": 3, "19": [3, 72, 73, 74], "test9": 3, "lns10": 3, "20": [3, 6, 69, 70, 72, 73, 79, 82], "test10": 3, "lns11": 3, "21": [3, 67, 72, 78], "test11": 3, "lns12": 3, "22": [3, 64, 67, 69, 72, 73], "test12": 3, "lns13": 3, "23": [3, 6, 72, 78], "test13": 3, "lns14": 3, "24": [3, 4, 5, 7, 38, 44, 46, 66, 67, 70, 71, 72, 73, 75, 77, 78, 79, 81, 82], "test14": 3, "lns15": 3, "25": [3, 69, 72], "test15": 3, "lns16": 3, "26": [3, 72], "test16": 3, "lns17": 3, "27": [3, 72, 73], "test17": 3, "lns18": 3, "28": [3, 72, 73], "test18": 3, "lns19": 3, "29": [3, 72], "test19": 3, "lns20": 3, "test20": 3, "lns21": 3, "31": [3, 72, 73], "test21": 3, "lns22": 3, "32": [3, 38, 41, 44, 70, 72, 73, 78, 79], "test22": 3, "lns23": 3, "33": [3, 72, 82], "test23": 3, "lns24": 3, "34": [3, 78], "test24": 3, "lns25": 3, "35": [3, 72, 73], "test25": 3, "lns26": 3, "36": [3, 72, 73, 74], "test26": 3, "lns27": 3, "37": [3, 72, 73, 74, 78, 79, 82], "test27": 3, "lns28": 3, "38": [3, 72, 73, 74], "test28": 3, "lns29": 3, "39": [3, 72], "test29": 3, "lns30": 3, "40": [3, 38, 51, 74, 81], "test30": 3, "mandatori": [3, 10, 15, 16, 17, 18, 19, 20, 22, 25, 26, 29, 30, 31, 34, 35, 36, 38, 50, 53, 62, 66, 67, 75, 81, 82], "hostnam": [3, 38, 46, 49, 50, 51, 64, 73, 77, 78, 79, 81], "avp": [3, 38, 50], "tunnel": [3, 16, 19, 38, 50], "messag": [3, 7, 12, 16, 19, 28, 31, 38, 49, 50, 57, 58, 64, 67, 73, 75, 76, 77, 78, 81], "65535": [3, 7, 29, 30, 31, 34, 35, 36, 38, 39, 41, 44, 46, 49, 50, 51, 54, 62, 66, 67, 70, 73, 75, 77, 78, 81, 82], "congest": [3, 6, 38, 50], "slow": [3, 38, 50], "aggress": [3, 38, 50], "reliabl": [3, 6, 38, 50, 71], "deliveri": [3, 38, 50, 81], "describ": [3, 38, 50, 77, 81], "appendix": [3, 38, 50], "channel": [3, 6, 37, 38, 50], "avoid": [3, 38, 50], "fix": [3, 38, 50, 68, 82], "stick": [3, 38, 50], "permit": [3, 28, 38, 50], "hello": [3, 38, 46, 49, 50, 51, 77, 78, 81], "bit": [3, 36, 38, 50, 62, 67, 82], "non": [3, 38, 50, 68, 70, 72, 76], "offset": [3, 38, 50, 82], "sccrq": [3, 38, 50], "icrq": [3, 38, 50], "pad": [3, 38, 46, 50, 74, 77], "client": [3, 6, 9, 12, 13, 14, 16, 30, 34, 36, 41, 50, 62, 64, 68, 70, 72, 73, 77, 81, 82], "auth": [3, 38, 46, 50, 51, 73, 77, 79, 81], "check": [3, 6, 38, 50, 64, 69, 73, 77, 81, 82], "result": [3, 6, 16, 19, 36, 37, 38, 49, 62, 63, 64, 65, 67, 72, 73, 74, 78, 82], "just": [3, 66, 69], "four": 3, "store": [3, 7, 64, 65, 74, 82], "csun": 3, "process": [3, 6, 37, 38, 64, 72, 82], "correctli": [3, 8, 69, 71], "via": [3, 7, 38, 44, 54, 69, 70, 75, 76, 82], "socket": [3, 16, 38, 39, 64, 70, 72, 73, 77, 79, 81], "csurq": [3, 16, 19], "about": [3, 4, 16, 64, 68, 74, 81, 82], "50011": 3, "inc": [3, 68], "102": [3, 6], "dup": 3, "out": [3, 68, 69, 73, 78], "order": [3, 38, 72, 82], "1406": 3, "206": [3, 38, 39, 70, 74], "return": [3, 7, 15, 16, 64, 71, 72, 81, 82], "32867": 3, "proxi": 3, "sub": [3, 4, 71, 82], "bp": [3, 38, 62, 82], "48000": 3, "ari": 3, "aci": 3, "79": [3, 8, 73], "output": [3, 64, 66, 69, 75, 78, 82, 83], "filter": [3, 66, 71, 73, 82, 83], "given": [3, 8, 38, 62, 72, 81, 82], "displai": [3, 4, 9, 10, 13, 14, 15, 16, 18, 19, 20, 22, 25, 26, 71], "mediat": 4, "statist": [4, 16, 21, 25, 26, 38, 63, 64, 68, 73, 74, 82], "todai": 4, "bcm": 4, "qmx": 4, "format": [4, 38, 41, 44, 64, 70, 82], "further": [4, 6, 64, 68, 71, 72, 73, 75, 78, 82], "easili": [4, 69, 74, 75, 78, 82, 83], "integr": [4, 64], "9": [4, 8, 64, 70, 72, 75, 77, 78, 81, 82], "d": [4, 64], "pt": 4, "spt": 4, "liid": 4, "work": [4, 5, 6, 8, 16, 26, 69, 71, 72, 73, 81, 82], "standalon": [4, 73], "100": [4, 6, 7, 8, 38, 63, 66, 67, 69, 70, 71, 72, 73, 74, 75, 77, 82], "sourc": [4, 6, 31, 36, 37, 38, 62, 67, 71, 72, 75, 77, 78, 81], "49152": [4, 38, 63], "doubl": [4, 72], "4194301": 4, "byte": [4, 38, 39, 41, 46, 65, 70, 74, 77, 82], "94": 4, "tcp": [4, 16, 26, 34, 35, 38, 49, 62, 66, 73, 78, 83], "udp": [4, 38, 62, 63, 71, 78, 82], "intern": [4, 65, 71, 74, 77], "next": [4, 6, 37, 38, 66, 73, 75, 82], "160720": 4, "820": 4, "61": [4, 72], "ani": [4, 7, 28, 38, 64, 66, 67, 68, 69, 70, 71, 73, 82], "tester": [4, 66, 68], "59": [4, 72, 73, 79], "robust": [5, 6, 7, 37, 38, 71], "If": [5, 6, 7, 16, 23, 26, 31, 37, 38, 62, 68, 69, 70, 71, 73, 75, 82], "randomli": [5, 79], "kill": [5, 64], "restart": [5, 16, 25, 66, 68, 70], "padt": [5, 74], "e": [5, 6, 16, 26, 37, 38, 40, 41, 42, 43, 44, 63, 64, 70, 73, 77, 79, 81, 82], "g": [5, 6, 16, 26, 37, 38, 40, 41, 42, 43, 44, 62, 63, 64, 70, 79, 81, 82], "power": [5, 8, 29, 38], "outag": 5, "gracefulli": [5, 64], "flap": [5, 16, 18, 74, 76], "independ": 5, "similarli": 5, "auto": [5, 16, 27, 38, 47, 77], "could": [5, 65, 71, 74, 79, 82, 83], "maximum": [5, 6, 7, 29, 37, 38, 39, 41, 42, 49, 54, 63, 70, 72, 74, 78, 82], "As": [5, 64, 69], "soon": [5, 8, 31, 38, 60, 64, 75, 78, 82], "after": [5, 6, 31, 36, 37, 38, 61, 62, 64, 67, 71, 73, 75, 78, 82], "hour": 5, "wait": [5, 6, 37, 38, 44, 61, 62, 66, 70, 71, 82], "becom": [5, 7, 38, 62, 64, 66, 71, 82], "again": [5, 73], "fulli": [5, 68], "recov": [5, 65], "hang": 5, "crash": 5, "memori": [5, 64, 68, 70, 72, 75, 78], "leak": [5, 77], "advanc": [6, 73], "focu": [6, 71], "therefor": [6, 7, 28, 38, 64, 70, 71, 72, 73, 75, 78], "igmp": [6, 15, 37, 41, 70, 74, 83], "version": [6, 29, 37, 38, 41, 51, 64, 66, 69, 70, 71, 73, 77, 78, 79, 81], "implement": [6, 68, 70], "record": [6, 37, 38, 71], "extern": [6, 47, 48, 52, 53, 64, 71, 73, 77, 79, 81], "show": [6, 8, 64, 69, 70, 71, 72, 73, 75, 77, 78, 79, 81, 82, 83], "how": [6, 8, 37, 38, 63, 64, 70, 72, 73, 74, 75, 77, 81, 83], "millisecond": [6, 7, 37, 38, 39, 43, 58, 63, 70], "239": [6, 16, 37, 38, 82], "count": [6, 7, 15, 16, 36, 37, 38, 61, 62, 64, 67, 75, 78, 79, 82], "measur": [6, 8, 37, 38, 63, 68, 74, 75, 82], "delai": [6, 7, 16, 25, 29, 34, 36, 37, 38, 58, 61, 62, 63, 66, 67, 71, 82], "mc1": 6, "mc2": 6, "distribut": [6, 38, 63, 64, 69, 72, 78], "modifi": [6, 38, 39, 70, 75, 78, 79, 82], "enough": [6, 70, 71, 77, 82], "proper": [6, 83], "recogn": 6, "sequenc": [6, 8, 38, 41, 44, 70, 73, 74, 77, 79, 81, 83], "particular": [6, 16, 26, 71, 74, 82], "gap": [6, 82], "last": [6, 12, 16, 74, 75, 82], "would": [6, 8, 65, 72, 73, 74, 82], "report": [6, 8, 37, 38, 68, 73, 82], "argument": [6, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 22, 23, 24, 25, 26, 64, 69, 74, 75, 77, 78, 79, 81, 82, 83], "l": [6, 67, 73, 75, 78, 79, 81, 83], "log": [6, 16, 67, 73, 75, 78, 79], "help": [6, 64, 71, 75, 78, 79, 83], "search": [6, 74], "miss": 6, "captur": [6, 16, 23, 38, 39, 64, 65, 68, 70, 71, 72, 73, 83], "consum": 6, "do": [6, 16, 70, 72, 82], "232": 6, "source1": [6, 15, 16], "202": 6, "source2": [6, 15, 16], "source3": [6, 15, 16], "103": 6, "1291": 6, "activ": [6, 38, 42, 64, 68, 70, 71, 77, 78, 81, 82], "m": [6, 38, 46, 62, 63, 73, 74, 75, 77, 78, 79, 82], "139": [6, 74], "7456": 6, "idl": [6, 66, 73], "114": [6, 82], "kei": [6, 16, 38, 46, 51, 73, 77, 79, 81, 82], "element": [6, 16], "long": [6, 68], "doe": [6, 16, 27, 65, 82], "take": [6, 29, 38, 64, 68, 75], "right": 6, "old": 6, "overlap": 6, "lead": [6, 38, 63, 68], "sent": [6, 8, 37, 38, 39, 62, 63, 64, 70, 71, 72, 73, 78, 82, 83], "fast": [6, 7, 69, 70, 82], "typic": [6, 70, 71, 75, 82], "view": [6, 37, 38, 73], "durat": [6, 37, 38, 74], "within": [6, 29, 37, 38, 63, 65, 68, 71, 77], "igmpv3": [6, 37, 38], "appli": [6, 16, 26, 28, 29, 36, 37, 38, 62, 66, 67, 70, 71, 72, 73, 82], "293": [6, 37, 38], "asm": [6, 37, 38], "befor": [6, 36, 37, 38, 61, 62, 65, 66, 67, 69, 73, 82], "final": [6, 8, 16, 37, 38, 64, 73, 74, 77, 81], "often": [6, 37, 38, 72], "abov": [6, 37, 38, 66, 72], "threshold": [6, 37, 38], "mention": [6, 37, 38], "special": [6, 37, 38], "signatur": [6, 37, 38, 82], "faster": [6, 37, 38, 72, 82], "analysi": [6, 37, 38, 64, 71], "done": [6, 16, 38, 62, 71, 73, 77, 78, 81, 82], "correct": 6, "concept": 7, "lean": 7, "idea": [7, 65], "fail": [7, 69], "expect": [7, 16, 19, 29, 38, 62, 65, 75, 77, 81, 82], "condit": [7, 68, 71], "fulfil": [7, 68], "negoti": 7, "successfulli": [7, 16], "dn": [7, 38, 41, 44, 57, 70], "opposit": [7, 72, 82], "behav": [7, 70, 77, 81], "faulti": 7, "4049": [7, 70], "2000": [7, 70, 73, 77, 82], "2999": [7, 70], "outstand": [7, 38, 61], "800": [7, 38, 61], "400": [7, 38, 61, 66, 67], "infin": [7, 36, 38, 59, 62, 67, 82], "padi": [7, 38, 59, 74], "padr": [7, 38, 59, 74], "payload": [7, 38, 59, 62, 82], "rfc4638": [7, 38, 59], "unit": [7, 38, 54, 64], "propos": [7, 38, 54, 72], "reject": [7, 38, 55, 57], "echo": [7, 16, 24, 38, 58, 67, 70, 74], "ignor": [7, 12, 16, 24, 25, 26, 38, 57, 58, 78], "primari": [7, 38, 57, 66, 82], "129": [7, 38, 57], "secondari": [7, 38, 57], "131": [7, 38, 57], "chapter": [7, 38, 62, 82], "rfc": [7, 28, 29, 38, 77, 78], "2153": 7, "With": [7, 67, 68, 72], "oui": 7, "kind": [7, 68, 70, 82], "respond": [7, 67, 70], "copi": [7, 70], "respons": [7, 16, 64, 66, 71], "user1": [7, 73], "open": [7, 16, 24, 31, 38, 68, 73, 74, 75, 77, 81], "56": [7, 72, 73], "10036": 7, "10083": 7, "bidirect": [8, 16, 26, 38, 60, 62, 71, 72, 73, 82], "unicast": [8, 31, 38, 71, 73, 75], "tool": [8, 16, 19, 68, 71, 73, 75, 76, 77, 78, 79, 81], "quickli": [8, 68], "unlabel": [8, 38, 60], "overwrit": [8, 38, 40, 41, 43, 60, 62, 70, 82], "prefer": [8, 38, 49, 75, 78], "select": [8, 38, 39, 41, 62, 70, 82], "config": [8, 38, 64, 65, 69, 73, 74, 79, 82], "96000": 8, "16000": 8, "violat": [8, 74], "12278": 8, "3071": 8, "3040": 8, "6167": 8, "12252": 8, "76": [8, 38, 62, 82], "3185": 8, "2900": 8, "12306": 8, "82": 8, "3123": 8, "2978": 8, "6205": 8, "12314": 8, "83": 8, "3104": 8, "3033": 8, "6177": 8, "3184": 8, "2891": 8, "12361": 8, "88": [8, 74], "3178": 8, "2957": 8, "6226": 8, "73763": 8, "84": 8, "18845": 8, "17799": 8, "37119": 8, "avg": [8, 29, 38, 74], "converg": [8, 68], "64bit": 8, "assum": [8, 38, 49, 61, 72, 78, 82], "took": [8, 82], "until": [8, 38, 44, 62, 64, 66, 70, 71, 78, 82], "reset": [9, 15, 16, 25, 26, 38, 49, 62, 78, 82], "match": [10, 16, 19, 20, 67, 78], "disconnect": [10, 16, 19, 20], "teardown": [10, 16, 18, 20, 22, 31, 38, 46, 47, 49, 51, 52, 61, 66, 75, 77, 78, 81], "list": [10, 16, 17, 19, 20, 21, 25, 26, 38, 39, 64, 68, 70, 73, 75, 77, 81, 82, 83], "load": [10, 16, 18, 20, 22, 64, 73, 74, 75, 77, 78, 81], "path": [10, 16, 23, 75, 77, 81], "cfm": [11, 38, 41, 44, 70], "cc": [11, 16, 38, 41, 44, 70], "eoam": [11, 16, 38, 41, 44, 70], "rdi": [11, 16], "off": [11, 16, 72, 73], "unset": [11, 16], "dhcp": [12, 32, 41, 45, 66, 68, 70, 71, 74, 83], "present": [12, 16, 24, 25, 38, 64, 68], "rememb": [12, 16], "icmp": [14, 36, 41, 68, 70, 74, 83], "join": [15, 16, 37, 38, 83], "leav": [15, 16, 37, 38, 83], "zap": [15, 16, 37, 38], "stat": [15, 16, 26, 71, 73, 74, 78], "unix": 16, "domain": [16, 38, 41, 44, 70], "interact": [16, 64, 66, 73, 83], "json": [16, 38, 64, 69, 73, 75, 77, 79, 81, 83], "rpc": [16, 64, 73], "we": [16, 68, 72, 73, 75], "One": [16, 66, 70, 71, 77, 81], "commun": [16, 68, 70, 71], "contain": [16, 64, 68, 70, 77, 81], "carri": 16, "cat": [16, 72, 77, 81], "counter": [16, 25, 64, 82], "nc": 16, "2xx": 16, "warn": [16, 64, 75, 78], "error": [16, 19, 64, 74, 77, 79, 81, 83], "404": [16, 64], "user10": 16, "altern": [16, 28, 38, 61, 69, 77, 81], "replac": [16, 38, 70, 75, 76], "becaus": [16, 38, 62, 77, 82], "eth0": [16, 38, 40, 41, 43, 44, 70, 72, 78], "python": [16, 74, 75, 78], "script": [16, 64, 74, 75, 78, 82, 83], "simpl": [16, 38, 46, 51, 68, 73, 74, 75, 77, 78, 79, 81, 82], "here": [16, 29, 38, 49, 65, 73, 75, 78, 79], "complex": [16, 71], "chain": 16, "pend": [16, 25, 26], "Then": [16, 69, 73], "extract": [16, 74], "flat": 16, "read": [16, 70, 73, 79], "index": [16, 17, 82], "summari": [16, 25, 26, 82], "close": [16, 23, 24, 38, 63, 66, 71, 73, 77, 81], "enforc": [16, 24, 64], "restor": [16, 24], "speed": [16, 19], "execut": [16, 19, 31, 38, 64, 66, 69, 74, 75], "rfc3145": [16, 19], "alter": [16, 27], "current": [16, 23, 27, 38, 39, 63, 64, 70, 72, 75, 77, 78, 82], "ha": [16, 27, 28, 31, 38, 62, 64, 68, 69, 71, 72, 73, 75, 77, 78, 79, 82, 83], "been": [16, 27, 68, 71, 74, 77, 79, 83], "t": [16, 27, 38, 68, 70, 71, 72, 73, 79, 82], "instead": [16, 27, 36, 38, 67], "act": [16, 27, 29, 38], "transmiss": [16, 27, 38, 63, 68, 81], "debug": [16, 26, 64, 69, 75, 78, 79, 83], "except": [16, 26, 38, 39, 70, 77, 81, 82], "fin": [16, 26], "syn": [16, 26, 71, 82], "rst": [16, 26], "push": [16, 26], "adjac": [16, 18, 20, 38, 46, 73, 81], "databas": [16, 18, 20, 22, 38, 47, 74, 78], "lsdb": [16, 18, 22, 79], "level": [16, 18, 38, 41, 44, 46, 48, 70, 73, 75, 77, 78, 79], "mrt": [16, 18, 22, 38, 47, 52, 73, 75, 76, 79], "lsp": [16, 18, 38, 46, 47, 73, 76, 78, 79, 81], "pdu": [16, 18, 22, 38, 49, 77, 78, 81], "purg": [16, 18, 38, 47, 52, 77, 79, 81], "timer": [16, 18, 68], "127": [16, 18, 73, 74], "neighbor": [16, 22, 38, 53, 73], "lsa": [16, 22, 38, 51, 52, 76, 77], "remain": [16, 23, 72, 77], "isi": [18, 44, 46, 47, 48, 64, 68, 70, 76, 79, 82, 83], "ldp": [20, 44, 49, 62, 68, 70, 76, 82], "ospf": [22, 51, 52, 53, 68, 76, 79], "pcap": [23, 65, 73, 75, 77, 78, 79, 81], "design": [28, 38, 71, 72, 75, 76, 77, 81, 82], "subsequ": [28, 38], "emploi": [28, 38], "overwritten": [28, 29, 38], "string": [28, 38, 41, 44, 64, 70], "variabl": [28, 70, 77, 81], "substitut": [28, 38, 70], "ascii": [28, 38, 41, 44, 70, 82], "4294967295": [28, 29, 31, 38, 41, 53, 70, 75, 81], "dsl": [28, 29, 38, 41, 70], "exclud": [28, 38, 82, 83], "imposs": [28, 38], "word": [28, 38, 82], "context": [28, 38, 73], "exclus": [28, 36, 38, 67, 78, 79], "dictat": [28, 38], "deviat": [28, 38], "guidelin": [28, 38], "either": [28, 38, 64, 66, 67, 69, 82], "profil": [29, 41, 70], "treat": [29, 38], "analog": [29, 38], "minimum": [29, 38, 41, 42, 70, 74, 82], "att": [29, 38], "attain": [29, 38], "datar": [29, 38], "low": [29, 38, 68, 70], "interl": [29, 38], "interleav": [29, 38], "encap": [29, 38], "pon": [29, 38], "etr": [29, 38], "throughput": [29, 38, 39, 63, 70, 72], "attetr": [29, 38], "gdr": [29, 38], "gamma": [29, 38], "attgdr": [29, 38], "ont": [29, 38], "onu": [29, 38], "averag": [29, 38, 74], "peak": [29, 38], "ass": [29, 38], "assur": [29, 38], "tree": [29, 38], "draft": [29, 38, 77], "lihawi": [29, 38], "04": [29, 38, 64, 69, 73, 79], "ancp": [29, 38], "extens": [29, 38, 64, 73, 74], "preced": [29, 38], "creat": [30, 36, 38, 41, 61, 67, 70, 73, 75, 76, 77, 78, 79, 81, 82], "target": [30, 38, 63, 69, 78], "resolv": [30, 38, 44, 61, 62, 68, 70, 71, 73, 78, 82], "AS": [31, 38, 73, 75], "65000": [31, 38, 75], "hold": [31, 38, 46, 49, 73, 75, 77, 78], "90": [31, 38, 73, 75], "ttl": [31, 36, 38, 62, 67, 75, 82], "finish": [31, 38, 73, 75], "famili": [31, 38, 75], "vpn": [31, 38, 75], "evpn": [31, 38, 75], "nexthop": [31, 38, 75], "none": [31, 38, 41, 44, 70, 75, 79], "url": [34, 38, 66, 71], "80": [34, 35, 38, 66, 71], "when": [36, 38, 66, 67, 71, 78, 82], "mutual": [36, 38, 67, 78], "them": [36, 38, 64, 66, 67, 70, 73, 77, 79, 81], "65507": [36, 38, 67, 77], "track": [36, 38, 67, 68, 82], "df": [36, 38, 62, 67, 82], "dont": [36, 38, 67], "fragement": [36, 38, 67], "minim": 38, "reloc": 38, "howev": [38, 66, 72, 79], "import": [38, 74, 77, 79, 81], "note": [38, 81], "main": [38, 39, 64, 70, 72, 77, 81], "approach": 38, "prove": 38, "benefici": 38, "conduct": [38, 68], "involv": [38, 68], "million": [38, 64, 68, 71, 72], "distinct": 38, "maintain": [38, 63, 67, 68, 78], "organ": 38, "effect": [38, 49, 66, 71, 78, 82], "your": [38, 65, 68, 70, 72, 73, 75, 78], "empow": 38, "larg": [38, 63, 64, 68, 70, 71, 77, 79, 81], "scale": [38, 68, 72], "eas": [38, 64], "c": [38, 68, 69, 72, 73, 79, 83], "md": [38, 41, 44, 70], "ma": [38, 41, 44, 70], "increment": [38, 62, 70, 75, 78, 82], "i1": [38, 41, 70], "i2": [38, 41, 70], "10000": [38, 73, 78], "io": [38, 39, 43, 64, 65, 69, 70, 72, 74, 82, 83], "packet_mmap_raw": [38, 39, 69, 70], "consid": [38, 39, 64, 65, 70, 72, 81, 82], "mmap": [38, 39, 65], "ring": [38, 39, 43, 70], "buffer": [38, 39, 46, 70, 77], "slot": [38, 39, 43, 70, 72], "might": [38, 39, 70, 77, 81, 82], "reach": [38, 39, 70, 72, 82], "desir": [38, 39, 63, 70, 74, 79], "depend": [38, 39, 47, 65, 70, 72, 77, 82], "4096": [38, 39, 46, 70, 77], "burst": [38, 39, 43, 62, 63, 70, 82], "qdisc": [38, 39, 43, 70], "bypass": [38, 39, 43, 70], "kernel": [38, 39, 43, 65, 70], "issu": [38, 39, 64, 68, 70, 71, 72], "poll": [38, 39, 43, 70, 74], "0001": [38, 39, 46, 70, 73, 77, 79], "third": [38, 39, 41, 69, 70], "disjoint": [38, 39, 70], "tun": [38, 39, 41, 70], "bbl": [38, 39, 63, 70, 82], "bbl1": [38, 39, 70], "bbl2": [38, 39, 70], "explicit": [38, 43, 70], "referenc": [38, 43, 70, 75, 79], "physic": [38, 43, 70, 72], "32768": [38, 42, 43, 70, 72], "cpuset": [38, 43, 70, 72], "pin": [38, 43, 70], "cpu": [38, 43, 68, 70, 72], "dpdk": [38, 43, 68, 83], "lag0": [38, 42, 70], "short": [38, 41, 42, 44, 68, 70], "3x1": [38, 42, 70], "3x30": [38, 42, 70], "system": [38, 42, 46, 48, 64, 65, 71, 72, 73, 75, 77, 79, 82], "multithread": [38, 42, 70, 72], "router": [38, 44, 46, 51, 53, 65, 68, 70, 73, 76, 77, 78, 79, 81], "ra": [38, 44, 70], "mtu": [38, 44, 67, 70, 82], "1500": [38, 44, 70, 74], "9000": [38, 44, 62, 65, 70, 82], "p2p": [38, 44, 70, 73, 77, 81], "l1": [38, 44, 48, 70, 73, 74, 77], "metric": [38, 44, 48, 53, 70, 73, 77, 79, 81], "l2": [38, 44, 48, 70, 73, 77, 82], "ospfv2": [38, 44, 53, 68, 70, 79, 81], "ospfv3": [38, 44, 53, 70], "mainten": [38, 41, 44, 70], "ccm": [38, 41, 44, 70], "ieee": [38, 41, 44, 70], "802": [38, 41, 44, 70], "1q": [38, 41, 44, 70], "encod": [38, 41, 44, 70, 77, 81], "33m": [38, 41, 44, 70], "10m": [38, 41, 44, 70], "100m": [38, 41, 44, 70], "1min": [38, 41, 44, 70], "10min": [38, 41, 44, 70], "mac_int": [38, 41, 44, 70], "aa": [38, 41, 44, 70], "bb": [38, 41, 44, 70], "dd": [38, 41, 44, 70], "ee": [38, 41, 44, 70], "123": [38, 41, 44, 70], "uint16": [38, 41, 44, 70], "vpn_id": [38, 41, 44, 70], "hex": [38, 41, 44, 70, 77, 81], "digit": [38, 41, 44, 70], "icc": [38, 41, 44, 70], "char": [38, 41, 44, 70], "pcp": [38, 41, 44, 70], "dowstream": [38, 44, 70], "ethertyp": [38, 40, 41, 70], "0x88a8": [38, 40, 41, 70], "equal": [38, 41, 62, 70, 77, 81, 82], "deactiv": [38, 41, 70], "10000000": [38, 41, 70], "caution": [38, 41, 70, 72], "sinc": [38, 41, 64, 70], "significantli": [38, 41, 70], "impact": [38, 41, 70, 71], "scalabl": [38, 41, 70, 71], "setup": [38, 61, 62, 67, 68, 72, 73, 78, 82], "signal": [38, 63, 64, 68], "calcul": [38, 49, 62, 63, 65, 71, 74, 78, 82], "massiv": [38, 63, 64, 68, 72], "1m": [38, 63, 67, 71], "live": [38, 63, 71, 76], "regul": [38, 63], "determin": [38, 63, 81, 82], "consist": [38, 63, 82], "influenc": [38, 63], "affect": [38, 63], "adher": [38, 63], "smaller": [38, 49, 63, 78], "smoother": [38, 63], "reduc": [38, 63], "risk": [38, 63], "micro": [38, 63], "fall": [38, 63], "intend": [38, 63], "larger": [38, 63, 70, 78], "toler": [38, 63], "find": [38, 63, 68], "prevent": [38, 63, 65, 66, 70, 72], "checksum": [38, 63, 73], "reassembl": [38, 63, 82], "reassembli": [38, 63, 82], "restrict": [38, 63, 68], "65056": [38, 62, 71, 82], "see": [38, 62, 68, 71, 73, 82], "tc": [38, 49, 62, 78, 82], "float": [38, 62, 82], "helper": [38, 62, 82], "put": [38, 62, 64, 82], "capit": [38, 62, 82], "letter": [38, 62, 82], "k": [38, 62, 73, 79, 82], "kilo": [38, 62, 82], "mega": [38, 62, 82], "giga": [38, 62, 82], "front": [38, 62, 82], "better": [38, 62, 68, 71, 74, 82], "readabl": [38, 62, 82], "gbp": [38, 62, 82], "1000000000": [38, 62, 82], "900": [38, 62, 82], "rpf": [38, 62, 82], "label1": [38, 62, 82], "exp": [38, 62, 82], "label2": [38, 62, 82], "lookup": [38, 62, 73, 78, 82], "nat": [38, 62, 66, 68, 82], "level1": [38, 46, 73, 77, 79], "md5": [38, 46, 51, 73, 77, 79, 81], "csnp": [38, 46, 77], "psnp": [38, 46, 77], "level2": [38, 46, 77], "lspbuffers": [38, 46, 77], "9192": [38, 46, 77], "lifetim": [38, 46, 73, 75, 77, 78, 79], "330": [38, 46, 77], "refresh": [38, 46, 47, 73, 77], "0100": [38, 46, 77], "0010": [38, 46, 77], "49": [38, 46, 73, 77, 79], "sr": [38, 46, 51, 73, 77, 79, 81], "algo": [38, 46, 77], "algorithm": [38, 46, 77, 81], "1048575": [38, 46, 51, 77, 81], "sid": [38, 46, 51, 73, 77, 81], "dure": [38, 47, 52, 64, 75, 77, 78, 81], "reason": [38, 47, 77], "dead": [38, 51, 81], "chosen": [38, 49, 78], "indic": [38, 49, 78, 82], "elaps": [38, 49, 78], "receipt": [38, 49, 78], "success": [38, 49, 78], "arriv": [38, 49, 78], "divid": [38, 49, 74, 78, 82], "lsr": [38, 49, 73, 78], "discard": [38, 49, 73, 78], "accord": [38, 49, 66, 78], "rfc7552": [38, 49, 78], "conveni": 64, "rest": [64, 76], "serv": [64, 68, 71], "simplifi": 64, "expos": 64, "programmat": 64, "paramet": [64, 66, 70, 73, 82], "monitor": [64, 75], "progress": 64, "standard": [64, 69, 75, 77, 83], "intuit": 64, "autom": [64, 68], "endpoint": [64, 71, 82], "download": [64, 69, 83], "retriev": 64, "encount": 64, "analyz": [64, 71, 74, 75, 83], "outcom": 64, "troubleshoot": [64, 68, 69], "problem": 64, "document": [64, 68], "purpos": [64, 66, 68, 71], "enhanc": [64, 68, 71, 72, 75, 79], "overal": [64, 66], "streamlin": 64, "seamless": 64, "github": [64, 66, 68, 69, 75], "modern": [64, 68, 69, 72], "linux": [64, 68, 69, 70], "primarili": [64, 69, 72], "debian": [64, 69, 72], "bookworm": [64, 69], "ubuntu": 64, "lt": [64, 69], "packag": [64, 69, 72], "wget": [64, 69], "controller_": 64, "_amd64": 64, "deb": [64, 69], "dpkg": [64, 69], "systemctl": 64, "bngblasterctrl": 64, "lib": 64, "systemd": 64, "preset": 64, "fri": 64, "2022": [64, 68, 73], "07": 64, "utc": 64, "7min": 64, "ago": 64, "pid": 64, "682535": 64, "task": [64, 77], "309235": 64, "6m": 64, "cgroup": 64, "slice": 64, "usr": [64, 69, 74], "bin": [64, 69, 74], "listen": 64, "8001": 64, "addr": [64, 67], "etc": 64, "usag": [64, 71, 75, 78, 79], "color": 64, "turn": 64, "consol": 64, "pretti": 64, "folder": 64, "var": 64, "sbin": [64, 69], "openapi": 64, "v1": [64, 69], "alreadi": [64, 75], "bodi": 64, "directori": [64, 69, 73, 83], "run_report": 64, "stderr": [64, 77, 81], "stdout": 64, "curl": 64, "quickstart_pppo": 64, "content": [64, 66], "veth1": [64, 73], "_start": 64, "logging_flag": 64, "session_count": 64, "schema": 64, "get": [64, 68, 70, 73, 82], "_command": 64, "pass": [64, 69, 71], "bngbnlaster": 64, "back": [64, 82], "_stop": 64, "sigint": 64, "int": [64, 82], "forcefulli": 64, "report_flag": 64, "huge": 64, "around": [64, 70, 82], "500mb": 64, "categori": 64, "pleas": 64, "pcap_captur": 64, "prometheu": 64, "text": 64, "instances_run": 64, "gaug": 64, "instances_tot": 64, "metric_flag": 64, "access_interfac": 64, "network_interfac": 64, "a10nsp_interfac": 64, "000": [64, 72, 73], "instance_nam": 64, "sessions_establish": 64, "interfaces_rx_packet": 64, "rbf": 64, "interface_nam": 64, "interface_typ": 64, "163": 64, "eth11": 64, "155": 64, "eth12": 64, "158": 64, "150": [64, 74], "driver": [65, 69, 70, 72, 82], "drop": [65, 83], "tri": 65, "occur": [65, 75], "potenti": [65, 71], "failur": 65, "overseen": 65, "why": 65, "3936": [65, 70], "pages": [65, 70], "minu": [65, 70], "overhead": [65, 70], "redirect": 66, "abil": [66, 71, 72], "top": [66, 73], "sever": [66, 75, 82], "translat": [66, 71], "rule": [66, 75], "accuraci": 66, "moreov": 66, "across": [66, 72, 82], "compat": 66, "bind": [66, 67], "startup": [66, 75, 77, 78, 81], "begin": 66, "give": [66, 74], "effici": [66, 71, 77, 81], "minor": [66, 71], "302": 66, "msg": [66, 71, 73], "nlocat": 66, "ncontent": 66, "nserver": [66, 71], "demonstr": [66, 75], "mark": [66, 77], "resum": [66, 82], "previous": 66, "continu": [66, 72, 82], "less": [66, 72, 82], "random": 66, "attempt": 66, "ping": [67, 71], "come": 67, "beyond": [67, 68, 72], "simpli": [67, 68], "consequ": 67, "unreach": 67, "exceed": 67, "properli": [67, 72], "made": 67, "dec": 67, "58": [67, 72], "394677": 67, "395566": 67, "727988": 67, "728992": 67, "63": [67, 72, 73], "rtt": 67, "927569": 67, "928480": 67, "origin": [68, 77, 81], "undergon": 68, "signific": 68, "evolut": 68, "transform": 68, "now": [68, 69, 71, 73, 74, 77, 81, 82], "encompass": [68, 71], "Its": 68, "scope": [68, 82], "expand": [68, 71], "broader": 68, "spectrum": [68, 71], "contrari": 68, "nomenclatur": 68, "isn": 68, "addition": [68, 76], "capac": 68, "verif": [68, 82], "complet": [68, 77, 81], "tabl": [68, 72, 74, 75], "queue": [68, 70, 72], "edg": 68, "latenc": [68, 82], "deutsch": 68, "telekom": 68, "ag": [68, 81], "famou": 68, "project": [68, 69, 75], "hard": [68, 72], "softwar": [68, 70, 72], "footprint": 68, "machin": [68, 73], "space": [68, 70], "friendli": 68, "api": [68, 73, 76, 82], "suit": [68, 71], "thousand": 68, "topologi": [68, 73, 76, 77, 81, 82], "segment": 68, "cgnat": 68, "introduct": [68, 79], "denog15": 68, "There": [68, 69, 73, 75, 78, 81, 82], "video": 68, "built": [68, 71, 76, 78], "scratch": 68, "veri": 68, "event": [68, 83], "loop": [68, 79], "constant": [68, 71, 82], "o": [68, 72, 77, 81], "librari": [68, 75, 78], "delet": 68, "fsm": 68, "evolv": 68, "build": [68, 72, 75, 77, 78, 81], "serious": 68, "look": 68, "contribut": [68, 72], "bug": 68, "welcom": [68, 72], "interest": 68, "go": [68, 73], "quick": 68, "guid": [68, 69, 70, 71], "our": [68, 72], "mission": 68, "instal": [68, 72, 73], "quickstart": 68, "frequent": 68, "ask": 68, "question": 68, "mail": 68, "chat": 68, "matrix": 68, "apnic": 68, "blog": 68, "dknog14": 68, "2024": 68, "2023": 68, "uknof49": 68, "denog13": 68, "2021": 68, "cp": [68, 74, 75], "dp": [68, 75], "bsd": 68, "claus": 68, "free": [68, 72], "commerci": 68, "2020": 68, "2026": 68, "apt": [69, 73], "y": [69, 79], "libssl1": 69, "libncurses5": 69, "libjansson4": 69, "newer": [69, 77, 81], "libssl3": 69, "libncurses6": 69, "libdict": 69, "fork": 69, "unzip": 69, "zip": 69, "libdict_1": 69, "5_amd64": 69, "dev_1": 69, "cmake": 69, "libpcap": 69, "dev": [69, 70, 73], "libcunit1": 69, "libssl": 69, "libjansson": 69, "libnuma": 69, "symbol": 69, "relwithdebinfo": 69, "git": 69, "clone": 69, "cd": 69, "mkdir": 69, "dcmake_build_typ": 69, "gdb": 69, "cpack": 69, "dgit_ref": 69, "rev": 69, "pars": 69, "abbrev": 69, "ref": 69, "head": 69, "dgit_sha": 69, "sha": 69, "df453a5ee9dbf6440aefbfb9630fa0f06e326d44": 69, "packet_mmap": [69, 70], "cmocka": 69, "libcmocka": 69, "bngblaster_test": 69, "dbngblaster_test": 69, "ON": 69, "testprotocol": 69, "sec": 69, "linux_gsg": 69, "build_dpdk": 69, "meson": 69, "ninja": 69, "rel": 69, "tar": 69, "xz": 69, "xjf": 69, "sdk": 69, "denable_driver_sdk": 69, "ldconfig": 69, "dbngblaster_dpdk": 69, "pkgconfig": 69, "pkg": 69, "modul": 69, "libdpdk": 69, "compil": [69, 70, 75, 78], "gnu": [69, 70], "permiss": 69, "easiest": 69, "root": [69, 73, 79], "normal": [69, 79], "binari": [69, 75, 78], "setcap": 69, "cap_net_raw": 69, "cap_net_admin": 69, "cap_dac_read_search": 69, "eip": 69, "distinguish": [70, 77, 81], "logic": 70, "attach": [70, 73, 76, 77, 78, 79, 81], "At": 70, "archiv": 70, "netplan": 70, "render": 70, "networkd": 70, "dhcp4": 70, "dhcp6": 70, "hardwar": [70, 72], "higher": [70, 72], "ethtool": [70, 72, 73], "ens5f1": 70, "pre": [70, 75, 78], "mini": 70, "jumbo": 70, "512": 70, "txqueuelen": 70, "lag1": 70, "face": 70, "side": [70, 72, 73], "learn": [70, 71, 77, 78, 81, 83], "own": [70, 72, 75, 77, 78, 81], "inject": [70, 75, 76, 77, 78, 81], "eth3": [70, 74], "s100": 70, "s200": 70, "pta": 70, "belong": [70, 82], "025": 70, "resid": 70, "packet_rx_r": 70, "packet_tx_r": 70, "abstract": 70, "program": 70, "lane": 70, "write": [70, 75, 78, 79, 81], "transmit": [70, 76], "expens": 70, "easi": 70, "calcualt": [70, 71], "osi": [70, 77], "steam": 70, "technologi": [71, 72], "comput": [71, 72, 81], "public": 71, "privat": 71, "entri": [71, 74, 77, 81], "conceal": 71, "structur": 71, "carrier": 71, "grade": 71, "isp": 71, "compani": 71, "scarciti": 71, "incorpor": 71, "tailor": 71, "instrument": 71, "demand": 71, "multitud": 71, "pool": [71, 72], "experi": 71, "broad": 71, "tradit": 71, "rigor": 71, "examin": 71, "invalu": 71, "resourc": 71, "profession": 71, "udp1": 71, "192": [71, 73, 77, 79], "configuraton": [71, 82], "destion": 71, "udp2": 71, "48523": 71, "tcp1": [71, 82], "stand": [71, 72, 82], "alon": [71, 82], "firewal": [71, 82], "adopt": [71, 82], "exist": [71, 75, 77, 78, 81], "uncahng": 71, "x": [71, 75, 79, 83], "enp6s21": 71, "254": 71, "enp6s20": 71, "c1": 71, "c2": 71, "nx": 71, "63122": 71, "63121": 71, "unfortun": 71, "nate": 71, "leverag": 71, "still": [71, 72, 73, 81, 82, 83], "100k": 71, "achiev": 72, "250": 72, "much": 72, "driven": 72, "split": 72, "workload": 72, "worker": 72, "asymmetr": 72, "unidirect": [72, 82], "vice": 72, "versa": 72, "full": [72, 75], "cach": 72, "coher": 72, "everyth": 72, "far": 72, "alwai": [72, 82], "rss": 72, "incom": 72, "improv": 72, "hash": 72, "adapt": [72, 81], "0x8100": 72, "best": [72, 81], "intel": 72, "person": 72, "ddp": 72, "boost": 72, "adjust": 72, "700": 72, "seri": [72, 74, 75, 78], "vari": 72, "usec": 72, "125": 72, "uniform": 72, "multi": 72, "processor": 72, "deriv": [72, 74], "sy": [72, 77, 81], "net": 72, "numa_nod": 72, "lscpu": 72, "node0": 72, "53": [72, 73], "node1": [72, 79], "54": [72, 73], "71": 72, "folow": 72, "55": [72, 73, 79], "57": 72, "nic": 72, "20g": 72, "ens2f2np2": 72, "ens2f3np3": 72, "ens5f2np2": 72, "ens5f3np3": 72, "62": [72, 74], "65": 72, "66": 72, "67": 72, "68": 72, "69": [72, 74], "offici": 72, "0000": [72, 73, 77, 79], "ll": 73, "walk": 73, "pair": 73, "veth": 73, "let": 73, "mar": 73, "303904": 73, "303952": 73, "396765": 73, "press": 73, "ctrl": [73, 79], "print": [73, 77, 81], "j": [73, 74], "p": [73, 75, 78, 79, 83], "what": 73, "happen": [73, 75], "cours": [73, 83], "try": [73, 77, 81], "f1": 73, "navig": 73, "keyboard": [73, 82], "input": [73, 83], "left": 73, "corner": 73, "f9": 73, "enter": 73, "familiar": 73, "repeat": [73, 82], "r1": [73, 77, 79, 81], "r2": [73, 77, 79, 81], "0002": [73, 77, 79], "1921": [73, 77, 79], "6800": [73, 77, 79], "168": [73, 77, 79], "secret123": [73, 79], "1002": [73, 77], "raw1": 73, "lspgen": [73, 76], "647569": 73, "647630": 73, "connector": 73, "0x192168001001": 73, "647633": 73, "647639": 73, "647642": 73, "0x1": 73, "647645": 73, "647648": 73, "647651": 73, "172": 73, "647654": 73, "647657": 73, "fc00": 73, "c0a8": 73, "647660": 73, "ac10": 73, "647669": 73, "a00": 73, "124": 73, "647672": 73, "srgb": 73, "647678": 73, "graph": [73, 77, 79, 81], "647813": 73, "981279": 73, "981314": 73, "981335": 73, "031917": 73, "087877": 73, "087971": 73, "088013": 73, "088035": 73, "088050": 73, "093906": 73, "093964": 73, "gobgp": 73, "gobgpd": 73, "But": 73, "offload": [73, 82], "92": 73, "65001": [73, 75], "afi": 73, "safi": 73, "bgpupdat": [73, 75, 76], "append": [73, 75, 77, 78, 81], "daemon": 73, "f": [73, 74, 75, 78, 79, 81], "08t14": 73, "51": 73, "03": [73, 74], "topic": 73, "apr": 73, "08": 73, "870722": 73, "138": 73, "kb": 73, "904266": 73, "904293": 73, "904369": 73, "52": 73, "904359": 73, "904389": 73, "904448": 73, "905659": 73, "opens": 73, "907888": 73, "907903": 73, "openconfirm": 73, "907917": 73, "907989": 73, "182885": 73, "outq": 73, "flop": 73, "multiprotocol": [73, 78], "octet": 73, "rcvd": 73, "notif": 73, "72": 73, "20000": 73, "100000": [73, 75, 79], "skip": 73, "09": 73, "establ": 73, "120000": 73, "withdraw": [73, 75, 78], "ldpupdat": [73, 76, 78], "Such": [73, 77, 81, 82], "To": [74, 76], "understand": 74, "think": 74, "job": 74, "decreas": 74, "75": 74, "50": [74, 79, 82], "55661": 74, "97": 74, "111410": 74, "12654727": 74, "110161": 74, "12300031": 74, "unknown": 74, "93709": 74, "110156": 74, "12299556": 74, "33319": 74, "32641": 74, "32635": 74, "33311": 74, "32633": 74, "1104": 74, "pado": 74, "500": 74, "373": 74, "4880": 74, "1700": 74, "1840": 74, "350": 74, "108580": 74, "12360218": 74, "106881": 74, "11982029": 74, "95265": 74, "106876": 74, "11981554": 74, "32465": 74, "31896": 74, "31895": 74, "32461": 74, "31894": 74, "1102": 74, "844": 74, "78": 74, "422": 74, "4343": 74, "822": 74, "1816": 74, "322": 74, "197523": 74, "21009053": 74, "188259": 74, "20425245": 74, "74810": 74, "65784": 74, "64537": 74, "61793": 74, "65772": 74, "61790": 74, "6000": 74, "623": 74, "199": 74, "224": [74, 78, 82], "624": 74, "218": 74, "227": 74, "197": 74, "3742": 74, "1198": 74, "1338": 74, "1206": 74, "filenam": [74, 79, 82], "sn": 74, "197340": 74, "188120": 74, "99949": 74, "97909": 74, "ipv6avg": 74, "97391": 74, "95685": 74, "env": 74, "python3": 74, "border": 75, "exterior": 75, "exchang": [75, 78], "reachabl": [75, 77], "among": [75, 82], "autonom": 75, "classifi": [75, 83], "vector": 75, "decis": 75, "plan": 75, "marker": 75, "scapi": [75, 78], "convert": 75, "phase": [75, 78], "update1": [75, 78], "onc": [75, 78, 82], "sens": 75, "update2": 75, "h": [75, 78, 79], "asn": 75, "local_pref": 75, "w": [75, 78, 79], "num": [75, 78], "ifac": 75, "rib": 75, "exit": [75, 77, 78, 81], "hop": [75, 82], "pref": 75, "blueprint": [75, 78], "6pe": 75, "50000": 75, "20001": 75, "48": [75, 82], "plane": 75, "propag": 75, "offlin": 76, "serial": 76, "rfc6396": [76, 77, 81], "produc": 76, "mimic": 76, "written": [77, 79], "move": 77, "iso": 77, "iec": 77, "10589": 77, "2002": 77, "interconnect": 77, "engin": 77, "forc": [77, 82], "republish": 77, "1142": 77, "later": [77, 79], "histor": 77, "7142": 77, "rather": 77, "confus": 77, "facto": 77, "backbon": 77, "synchron": [77, 81], "self": [77, 81], "itself": [77, 81, 82], "3600": 77, "n1": 77, "b1": 77, "0022": 77, "0021": 77, "65529": 77, "0011": 77, "65524": 77, "65506": 77, "whole": 77, "0x83": 77, "831b0100120100000021ffff010203040506000000000003c0d103010403490001": 77, "831b0100120100000021ffff010203040506000100000003bad603010403490001": 77, "contrib": [77, 81], "def": [77, 81], "arg": [77, 79, 81], "kwarg": [77, 81], "execute_command": [77, 81], "socket_path": [77, 81], "af_unix": [77, 81], "sock_stream": [77, 81], "dump": [77, 81], "utf": [77, 81], "junk": [77, 81], "recv": [77, 81], "decod": [77, 81, 82], "els": [77, 81], "break": [77, 81], "indent": [77, 81], "argv": [77, 81], "tlv": [77, 79], "isis_areatlv": 77, "isis_areaentri": 77, "areaid": 77, "isis_commonhdr": 77, "isis_l1_lsp": 77, "lspid": 77, "0102": 77, "0304": 77, "0506": 77, "seqnum": 77, "__name__": [77, 81], "__main__": [77, 81], "timestamp": [77, 81], "subtyp": [77, 81], "field": [77, 81, 82], "export": [77, 79, 81], "bi": 78, "646": 78, "subnet": 78, "5036": 78, "dut": 78, "ecmp": 78, "10001": 78, "exactli": 78, "longest": 78, "henc": 79, "accommod": 79, "ospf2": 79, "____": 79, "__": 79, "_": 79, "_____": 79, "___": 79, "______": 79, "ospf3": 79, "multipli": 79, "z": 79, "graphviz": 79, "seed": 79, "q": 79, "quit": 79, "repres": [79, 82], "toplogi": 79, "sep": 79, "780109": 79, "780127": 79, "simlar": 79, "construct": 79, "242810": 79, "242827": 79, "node_id": 79, "area_list": 79, "protocol_list": 79, "ipv4_address_list": 79, "ipv4_prefix_list": 79, "ipv4_prefix": 79, "segment_id": 79, "30005": 79, "node_flag": 79, "capability_list": 79, "router_id": 79, "mpls_ipv4_flag": 79, "mpls_ipv6_flag": 79, "srgb_base": 79, "srgb_rang": 79, "36000": 79, "neighbor_list": 79, "remote_node_id": 79, "0204": 79, "0003": 79, "30003": 79, "r3": 79, "shortest": 81, "interior": 81, "igp": 81, "wide": 81, "stabil": 81, "000100050ac801000aff010180000001e7790024ffffff00000000140000000000000000": 81, "000100050ac802000aff010180000001dc830024ffffff00000000140000000000000000": 81, "020400400101010100000000456e0000000000000000000000000001000100050ac80c000aff01018000012d13160024ffffff00000000140000000000000000": 81, "0204004001010101000000003b780000000000000000000000000001000100050ac80b000aff01018000012d1e0c0024ffffff00000000140000000000000000": 81, "ospf_external_lsa": 81, "adrout": 81, "mask": 81, "2147483649": 81, "struct": 81, "wb": 81, "222": 81, "2147483949": 81, "ospf_hdr": 81, "ospf_lsupd": 81, "lsacount": 81, "pack": 81, "ii": 81, "ihhi": 81, "len": [81, 82], "although": 81, "compar": 81, "conceptu": 81, "ident": 81, "r6": 81, "instanti": 82, "certain": 82, "brief": 82, "overview": 82, "2001": 82, "besteffort": 82, "voic": 82, "merg": 82, "determinist": 82, "incrementor": 82, "regardless": 82, "exce": 82, "upper": 82, "wrap": 82, "want": 82, "high": 82, "cover": 82, "1099": 82, "1009": 82, "1010": 82, "1019": 82, "1090": 82, "b": 82, "reus": 82, "hit": 82, "ters": 82, "queri": 82, "59670": 82, "54610": 82, "account": 82, "59655": 82, "54594": 82, "1100": 82, "9028800": 82, "8240000": 82, "mbp": 82, "0288": 82, "362": 82, "54593": 82, "1014": 82, "1030": 82, "54232": 82, "98595": 82, "8112000": 82, "l3": 82, "8000000": 82, "112": 82, "1026": 82, "43": 82, "98903": 82, "8208000": 82, "208": 82, "5458": 82, "5422": 82, "41": 82, "96548": 82, "811200": 82, "820800": 82, "800000": 82, "8112": 82, "8208": 82, "microsecond": 82, "subtract": 82, "volum": 82, "jsonpath": 82, "express": 82, "BE": 82, "27040": 82, "213": 82, "126": 82, "27008": 82, "10561": 82, "99": 82, "90288": 82, "99792": 82, "79200": 82, "090288": 82, "099792": 82, "0792": 82, "part": 82, "properti": 82, "readi": 82, "shortcut": 82, "f7": 82, "f8": 82, "respect": 82, "necessari": 82, "largest": 82, "1472": 82, "reserv": 82, "le": 82, "0x5274427269636b21": 82, "jitter": 82, "nano": 82, "meta": 83, "dissector": 83, "lua": 83, "bbl_header": 83, "place": 83, "lua_script": 83}, "objects": {}, "objtypes": {}, "objnames": {}, "titleterms": {"access": [0, 38, 70], "protocol": [0, 68, 76], "ipo": [1, 38], "static": 1, "address": [1, 71], "dhcpv4": 1, "v6": 1, "dhcp": [1, 16, 38, 73], "dhcpv6": [1, 38], "command": [1, 3, 7, 64, 77, 81, 82], "l2bsa": 2, "over": 2, "network": [2, 38, 70, 73], "inerfac": 2, "l2tp": [3, 16], "configur": [3, 7, 8, 38, 75, 77, 78, 79, 81, 82], "variabl": [3, 38], "data": 3, "header": 3, "rfc5515": 3, "legal": [4, 16], "intercept": [4, 16], "li": [4, 16], "monkei": 5, "multicast": [6, 82], "iptv": 6, "gener": [6, 75, 78], "traffic": [6, 8, 16, 38, 73, 78, 82], "manual": 6, "join": 6, "leav": 6, "test": [6, 16, 64, 69, 75], "zap": 6, "limit": [6, 75, 77, 78], "pppoe": [7, 38, 73], "ppp": [7, 16, 38], "authent": [7, 38], "lcp": [7, 38], "ipcp": [7, 38], "ipv4": [7, 38], "ip6cp": [7, 38], "ipv6": [7, 38], "vendor": 7, "extens": [7, 71], "session": [8, 16, 38, 74, 75, 78, 82], "verif": 8, "api": [16, 64], "cli": 16, "bng": [16, 68, 69, 82], "blaster": [16, 68, 69, 82], "interfac": [16, 38, 70, 81], "igmp": [16, 38], "stream": [16, 38, 71, 78, 82], "isi": [16, 38, 73, 77], "ospf": [16, 38, 81], "bgp": [16, 38, 73, 75], "ldp": [16, 38, 73, 78], "cfm": 16, "http": [16, 38, 66, 71], "icmp": [16, 38, 67, 71], "arp": [16, 38], "pcap": [16, 64, 83], "link": [38, 70], "aggreg": [38, 70], "lag": [38, 70], "a10nsp": [38, 70], "l2tpv2": 38, "server": [38, 66], "ln": 38, "line": 38, "profil": 38, "extern": 38, "connect": 38, "client": [38, 66, 67, 71], "control": 64, "instal": [64, 69], "creat": 64, "instanc": 64, "start": [64, 82], "statu": 64, "stop": [64, 82], "delet": 64, "report": [64, 74], "log": [64, 83], "metric": 64, "frequent": 65, "ask": 65, "question": 65, "emul": 66, "rtbrick": 68, "rout": [68, 76], "content": 68, "contact": 68, "articl": 68, "youtub": 68, "train": 68, "exampl": 68, "sourc": [68, 69, 82], "licens": 68, "copyright": 68, "ubuntu": 69, "build": 69, "from": [69, 79], "depend": 69, "run": 69, "unit": 69, "dpdk": [69, 70, 72], "support": 69, "oper": 70, "system": 70, "set": 70, "function": 70, "untag": 70, "singl": 70, "tag": 70, "doubl": 70, "tripl": 70, "i": 70, "o": 70, "mode": 70, "packet": 70, "mmap": 70, "raw": [70, 71, 75, 78, 82], "nat": 71, "cgnat": 71, "featur": 71, "revers": 71, "flow": [71, 82], "enabl": 71, "tcp": [71, 82], "setup": [71, 74], "interv": 71, "scale": 71, "perform": 72, "guid": [72, 73], "numa": 72, "quickstart": 73, "rate": 74, "standard": 74, "output": 74, "json": 74, "updat": [75, 77, 78, 81], "file": [75, 77, 78, 79, 81, 82], "converg": 75, "adjac": [77, 78], "databas": [77, 81], "flood": [77, 81], "lsp": 77, "via": [77, 81], "scapi": [77, 81], "mrt": [77, 81], "lspgen": [77, 79, 81], "connector": 79, "random": 79, "topologi": 79, "mpl": 80, "neighbor": 81, "lsa": 81, "ospfv3": 81, "understand": 82, "iter": 82, "destin": 82, "port": 82, "fragment": 82, "unicast": 82, "magic": 82, "sequenc": 82, "identifi": 82, "number": 82, "nanosecond": 82, "send": 82, "timestamp": 82, "troubleshoot": 83, "wireshark": 83, "plugin": 83}, "envversion": {"sphinx.domains.c": 3, "sphinx.domains.changeset": 1, "sphinx.domains.citation": 1, "sphinx.domains.cpp": 9, "sphinx.domains.index": 1, "sphinx.domains.javascript": 3, "sphinx.domains.math": 2, "sphinx.domains.python": 4, "sphinx.domains.rst": 2, "sphinx.domains.std": 2, "sphinx": 60}, "alltitles": {"Access Protocols": [[0, "access-protocols"]], "IPoE": [[1, "ipoe"], [1, "id2"], [38, "ipoe"]], "Static Addresses": [[1, "static-addresses"]], "DHCPv4/v6": [[1, "dhcpv4-v6"]], "DHCP": [[1, "dhcp"], [16, "dhcp"], [38, "dhcp"], [73, "dhcp"]], "DHCPv6": [[1, "dhcpv6"], [38, "dhcpv6"]], "IPoE Commands": [[1, "ipoe-commands"]], "L2BSA": [[2, "l2bsa"]], "L2BSA over Network Inerfaces": [[2, "l2bsa-over-network-inerfaces"]], "L2TP": [[3, "l2tp"], [16, "l2tp"]], "Configuration": [[3, "configuration"], [7, "configuration"], [8, "configuration"], [38, "id1"], [75, "configuration"], [77, "configuration"], [78, "configuration"], [81, "configuration"], [82, "configuration"]], "Variable Data Header": [[3, "variable-data-header"]], "RFC5515": [[3, "rfc5515"]], "L2TP Commands": [[3, "l2tp-commands"]], "Legal Interception (LI)": [[4, "legal-interception-li"], [16, "legal-interception-li"]], "Monkey": [[5, "monkey"]], "Multicast and IPTV": [[6, "multicast-and-iptv"]], "Generate Multicast Traffic": [[6, "generate-multicast-traffic"]], "Manual Join/Leave Testing": [[6, "manual-join-leave-testing"]], "IPTV Zapping Test": [[6, "iptv-zapping-test"]], "Multicast Limitations": [[6, "multicast-limitations"]], "PPPoE": [[7, "pppoe"], [7, "id2"], [38, "pppoe"], [73, "pppoe"]], "PPP": [[7, "ppp"], [16, "ppp"], [38, "ppp"]], "PPP Authentication": [[7, "ppp-authentication"], [38, "ppp-authentication"]], "PPP LCP": [[7, "ppp-lcp"], [38, "ppp-lcp"]], "PPP IPCP (IPv4)": [[7, "ppp-ipcp-ipv4"], [38, "ppp-ipcp-ipv4"]], "PPP IP6CP (IPv6)": [[7, "ppp-ip6cp-ipv6"], [38, "ppp-ip6cp-ipv6"]], "LCP Vendor Extension": [[7, "lcp-vendor-extension"]], "PPPoE Commands": [[7, "pppoe-commands"]], "Session Traffic": [[8, "session-traffic"]], "Verification": [[8, "verification"]], "API/CLI": [[16, "api-cli"]], "BNG Blaster CLI": [[16, "bng-blaster-cli"]], "Test": [[16, "test"]], "Interfaces": [[16, "interfaces"], [38, "interfaces"], [70, "interfaces"], [81, "interfaces"]], "Sessions": [[16, "sessions"], [38, "sessions"]], "IGMP": [[16, "igmp"], [38, "igmp"]], "Traffic": [[16, "traffic"], [38, "traffic"]], "Streams": [[16, "streams"]], "ISIS": [[16, "isis"], [38, "isis"], [73, "isis"], [77, "isis"]], "OSPF": [[16, "ospf"], [38, "ospf"], [81, "ospf"]], "BGP": [[16, "bgp"], [38, "bgp"], [73, "bgp"], [75, "bgp"]], "LDP": [[16, "ldp"], [38, "ldp"], [73, "ldp"], [78, "ldp"]], "CFM": [[16, "cfm"]], "HTTP": [[16, "http"]], "ICMP": [[16, "icmp"], [67, "icmp"]], "ARP": [[16, "arp"]], "PCAP": [[16, "pcap"], [64, "pcap"], [83, "pcap"]], "Variables": [[38, "variables"]], "Links": [[38, "links"], [70, "links"]], "Link Aggregation (LAG)": [[38, "link-aggregation-lag"], [70, "link-aggregation-lag"]], "Network Interfaces": [[38, "network-interfaces"], [70, "network-interfaces"]], "Access Interfaces": [[38, "access-interfaces"], [70, "access-interfaces"]], "A10NSP Interfaces": [[38, "a10nsp-interfaces"], [70, "a10nsp-interfaces"]], "L2TPv2 Server (LNS)": [[38, "l2tpv2-server-lns"]], "Traffic-Streams": [[38, "traffic-streams"]], "Session-Traffic": [[38, "session-traffic"]], "Access-Line": [[38, "access-line"]], "Access-Line-Profiles": [[38, "access-line-profiles"]], "ISIS External": [[38, "isis-external"]], "ISIS External Connections": [[38, "isis-external-connections"]], "OSPF External": [[38, "ospf-external"]], "OSPF External Connections": [[38, "ospf-external-connections"]], "HTTP-Client": [[38, "http-client"]], "HTTP-Server": [[38, "http-server"]], "ICMP-Client": [[38, "icmp-client"]], "ARP-Client": [[38, "arp-client"]], "Controller": [[64, "controller"]], "Installation": [[64, "installation"], [69, "installation"]], "API": [[64, "api"]], "Create Test Instance": [[64, "create-test-instance"]], "Start Test": [[64, "start-test"]], "Status": [[64, "status"]], "Command": [[64, "command"]], "Stop Test": [[64, "stop-test"]], "Delete Test Instance": [[64, "delete-test-instance"]], "Reports": [[64, "reports"], [74, "reports"]], "Logs": [[64, "logs"]], "Metrics": [[64, "metrics"]], "Frequently Asked Questions": [[65, "frequently-asked-questions"]], "HTTP Emulation": [[66, "http-emulation"]], "HTTP Client": [[66, "http-client"]], "HTTP Server": [[66, "http-server"]], "ICMP Client": [[67, "icmp-client"], [71, "icmp-client"]], "RtBrick - Routing Protocol and BNG Blaster": [[68, "rtbrick-routing-protocol-and-bng-blaster"]], "Contents": [[68, "contents"]], "Contact": [[68, "contact"]], "Articles": [[68, "articles"]], "YouTube": [[68, "youtube"]], "Trainings and Examples:": [[68, "trainings-and-examples"]], "Sources": [[68, "sources"]], "License": [[68, "license"]], "Copyright": [[68, "copyright"]], "Install Ubuntu": [[69, "install-ubuntu"]], "Build from Sources": [[69, "build-from-sources"]], "Dependencies": [[69, "dependencies"]], "Build": [[69, "build"]], "Install": [[69, "id1"]], "Build and Run Unit Tests": [[69, "build-and-run-unit-tests"]], "Build with DPDK Support": [[69, "build-with-dpdk-support"]], "Running BNG Blaster": [[69, "running-bng-blaster"]], "Operating System Settings": [[70, "operating-system-settings"]], "Interface Settings": [[70, "interface-settings"]], "Interface Functions": [[70, "interface-functions"]], "Untagged": [[70, "untagged"]], "Single Tagged": [[70, "single-tagged"]], "Double Tagged": [[70, "double-tagged"]], "Triple Tagged": [[70, "triple-tagged"]], "I/O Modes": [[70, "i-o-modes"]], "Packet MMAP": [[70, "packet-mmap"]], "RAW": [[70, "raw"]], "DPDK": [[70, "dpdk"], [72, "dpdk"]], "NAT / CGNAT": [[71, "nat-cgnat"]], "NAT Features": [[71, "nat-features"]], "Reverse Flow": [[71, "reverse-flow"]], "Flow Addresses": [[71, "flow-addresses"]], "NAT Enabled Streams": [[71, "nat-enabled-streams"]], "TCP RAW Streams": [[71, "tcp-raw-streams"], [82, "tcp-raw-streams"]], "Stream Setup interval": [[71, "stream-setup-interval"]], "HTTP NAT Extension": [[71, "http-nat-extension"]], "Scaling": [[71, "scaling"]], "Performance Guide": [[72, "performance-guide"]], "NUMA": [[72, "numa"]], "Quickstart Guide": [[73, "quickstart-guide"]], "Network Traffic": [[73, "network-traffic"]], "Session Setup Rate": [[74, "session-setup-rate"]], "Standard Output Reports": [[74, "standard-output-reports"]], "JSON Reports": [[74, "json-reports"]], "BGP Sessions": [[75, "bgp-sessions"]], "Limitations": [[75, "limitations"], [77, "limitations"], [78, "limitations"]], "RAW Update Files": [[75, "raw-update-files"], [78, "raw-update-files"]], "BGP RAW Update Generator": [[75, "bgp-raw-update-generator"]], "BGP Convergence Testing": [[75, "bgp-convergence-testing"]], "Routing Protocols": [[76, "routing-protocols"]], "Adjacencies": [[77, "adjacencies"]], "Database": [[77, "database"], [81, "database"]], "Flooding": [[77, "flooding"], [81, "flooding"]], "LSP Update Command": [[77, "lsp-update-command"]], "LSP Update via Scapy": [[77, "lsp-update-via-scapy"]], "MRT Files": [[77, "mrt-files"], [81, "mrt-files"]], "LSPGEN": [[77, "lspgen"], [79, "lspgen"], [81, "lspgen"]], "LDP Adjacencies": [[78, "ldp-adjacencies"]], "LDP Sessions": [[78, "ldp-sessions"]], "LDP Traffic Streams": [[78, "ldp-traffic-streams"]], "LDP RAW Update Generator": [[78, "ldp-raw-update-generator"]], "Connector": [[79, "connector"]], "Random Topologies": [[79, "random-topologies"]], "Topology from Configuration File": [[79, "topology-from-configuration-file"]], "MPLS": [[80, "mpls"]], "Neighbors": [[81, "neighbors"]], "LSA Update Command": [[81, "lsa-update-command"]], "LSA Update via Scapy": [[81, "lsa-update-via-scapy"]], "OSPFv3": [[81, "ospfv3"]], "Traffic Streams": [[82, "traffic-streams"]], "Understanding Flows": [[82, "understanding-flows"]], "Stream Configuration File": [[82, "stream-configuration-file"]], "RAW Streams": [[82, "raw-streams"]], "Stream Iterators": [[82, "stream-iterators"]], "Source and Destination Ports": [[82, "source-and-destination-ports"]], "Stream Commands": [[82, "stream-commands"]], "Start/Stop Traffic": [[82, "start-stop-traffic"]], "Fragmentation": [[82, "fragmentation"]], "BNG Blaster Traffic": [[82, "bng-blaster-traffic"]], "Unicast Session Traffic": [[82, "unicast-session-traffic"]], "Multicast Traffic": [[82, "multicast-traffic"]], "BNG Blaster Magic Sequence": [[82, "bng-blaster-magic-sequence"]], "Flow Identifier": [[82, "flow-identifier"]], "Flow Sequence Number": [[82, "flow-sequence-number"]], "Nanosecond Send Timestamps": [[82, "nanosecond-send-timestamps"]], "Troubleshooting": [[83, "troubleshooting"]], "Logging": [[83, "logging"]], "Wireshark Plugin": [[83, "wireshark-plugin"]]}, "indexentries": {}}) \ No newline at end of file diff --git a/docs/streams.html b/docs/streams.html index 205fbe0b..14296f2f 100644 --- a/docs/streams.html +++ b/docs/streams.html @@ -59,6 +59,10 @@
  • Stream Configuration File
  • RAW Streams
  • TCP RAW Streams
  • +
  • Stream Iterators +
  • Stream Commands
  • Start/Stop Traffic
  • Fragmentation
  • @@ -244,7 +248,14 @@

    Configuration

    source-port

    +

    count

    +
    +
    Increment the source port for each instance of this stream.
    +
    Default: 1 Range: 1 - 65535
    +
    + + +

    source-port

    Overwrite the default source port.
    For bidirectional streams (direction both), this is applied
    @@ -253,7 +264,22 @@

    Configuration

    destination-port

    +

    source-port-step

    +
    +
    Increment the source port for each instance of this stream.
    +
    See chapter Stream Iterators for details.
    +
    Default: 0 Range: 0 - 65535
    +
    + + +

    source-port-max

    +
    +
    Max source port before reset to destination-port.
    +
    Default: 65535 Range: 0 - 65535
    +
    + + +

    destination-port

    Overwrite the default destination port.
    For bidirectional streams (direction both), this is applied
    @@ -262,14 +288,29 @@

    Configuration

    ipv4-df

    +

    destination-port-step

    +
    +
    Increment the destination port for each instance of this
    +
    stream. See chapter Stream Iterators for details.
    +
    Default: 0 Range: 0 - 65535
    +
    + + +

    destination-port-max.

    +
    +
    Max destination port before reset to destination-port.
    +
    Default: 65535 Range: 0 - 65535
    +
    + + +

    ipv4-df

    Set IPv4 DF bit.
    Default: true
    -

    priority

    +

    priority

    IPv4 TOS / IPv6 TC.
    For L2TP downstream traffic, the IPv4 TOS is applied
    @@ -278,35 +319,35 @@

    Configuration

    vlan-priority

    +

    vlan-priority

    VLAN priority.
    Default: 0 Range: 0 - 7
    -

    inner-vlan-priority

    +

    inner-vlan-priority

    Inner VLAN priority.
    Default: vlan-priority Range: 0 - 7
    -

    length

    +

    length

    Layer 3 (IP header + payload) traffic length.
    Default: 128 Range: 76 - 9000
    -

    ttl

    +

    ttl

    TTL.
    Default: 64 Range: 0 - 255
    -

    pps

    +

    pps

    Stream traffic rate in packets per second.
    This value supports also float numbers like 0.1 or 2.5.
    @@ -315,7 +356,7 @@

    Configuration

    bps

    +

    bps

    Stream traffic rate in bits per second (layer 3).
    PPS has priority over bps where the second is only a helper
    @@ -329,21 +370,21 @@

    Configuration

    pps-upstream

    +

    pps-upstream

    Optionally overwrite PPS in upstream to support bidirectional
    streams with different rates for upstream and downstream.
    -

    bps-upstream

    +

    bps-upstream

    Optionally overwrite bps in upstream to support bidirectional
    streams with different rates for upstream and downstream.
    -

    setup-interval

    +

    setup-interval

    Set optional setup interval in seconds. If set, sent max 1
    packet per setup interval until stream becomes verified.
    @@ -354,43 +395,43 @@

    Configuration

    a10nsp-interface

    +

    a10nsp-interface

    Select the corresponding A10NSP interface for this stream.
    -

    network-interface

    +

    network-interface

    Select the corresponding network interface for this stream.
    -

    network-ipv4-address

    +

    network-ipv4-address

    Overwrite network interface IPv4 address.
    -

    network-ipv6-address

    +

    network-ipv6-address

    Overwrite network interface IPv6 address.
    -

    destination-ipv4-address

    +

    destination-ipv4-address

    Overwrite the IPv4 destination address.
    -

    destination-ipv6-address

    +

    destination-ipv6-address

    Overwrite the IPv6 destination address.
    -

    access-ipv4-source-address

    +

    access-ipv4-source-address

    Overwrite the access IPv4 source address (client).
    This option can be used to test the BNG RPF functionality
    @@ -399,7 +440,7 @@

    Configuration

    access-ipv6-source-address

    +

    access-ipv6-source-address

    Overwrite the access IPv6 source address (client).
    This option can be used to test the BNG RPF functionality
    @@ -408,14 +449,14 @@

    Configuration

    max-packets

    +

    max-packets

    Send a burst of N packets and stop.
    Default: 0 (infinity)
    -

    start-delay

    +

    start-delay

    Wait N seconds after the session is established
    before starting the traffic stream.
    @@ -423,78 +464,78 @@

    Configuration

    tx-label1

    +

    tx-label1

    MPLS send (TX) label (outer label).
    -

    tx-label1-exp

    +

    tx-label1-exp

    EXP bits of the first label (outer label).
    Default: 0
    -

    tx-label1-ttl

    +

    tx-label1-ttl

    TTL of the first label (outer label).
    Default: 255
    -

    tx-label2

    +

    tx-label2

    MPLS send (TX) label (inner label).
    -

    tx-label2-exp

    +

    tx-label2-exp

    EXP bits of the second label (inner label).
    Default: 0
    -

    tx-label2-ttl

    +

    tx-label2-ttl

    TTL of the second label (inner label).
    Default: 255
    -

    rx-label1

    +

    rx-label1

    Expected receive MPLS label (outer label).
    -

    rx-label2

    +

    rx-label2

    Expected receive MPLS label (inner label).
    -

    ldp-ipv4-lookup-address

    +

    ldp-ipv4-lookup-address

    Dynamically resolve outer label.
    -

    ldp-ipv6-lookup-address

    +

    ldp-ipv6-lookup-address

    Dynamically resolve outer label.
    -

    nat

    +

    nat

    Enable NAT support.
    Default: false
    -

    raw-tcp

    +

    raw-tcp

    Send RAW TCP traffic (UDP-like traffic with TCP header).
    Default: false
    @@ -568,6 +609,54 @@

    TCP RAW Streams +

    Stream Iterators

    +

    The BNG Blaster supports several iterators for traffic streams, such as layer 4 ports.

    +
    +

    Source and Destination Ports

    +

    The stream configuration options source/destination-port-step +and source/destination-port-max enable deterministic port iteration.

    +

    The port incrementor operates as a global iterator across all instances of a stream. +It does not automatically reset for new sessions unless explicitly configured to do so +using the maximum limit.

    +

    Global Scope: The incrementor applies to every instance of the stream generated, regardless +of whether those instances are created via the stream count (multiple streams per session) +or across multiple sessions.

    +

    Step Behavior: For every new stream instance instantiated, the port is increased +by the port-step configuraton option.

    +

    Reset Behavior: The port increments until it exceeds port-max. Once reached, +the port iterator resets to the initial port value and resumes incrementing.

    +

    Configuration Parameters: +* source/destination-port (default: 65056): The starting port number. +* source/destination-port-step (default: 0): The value by which to increment the port for each new stream instance. +* source/destination-port-max (default: 65535): The upper limit for the port range. When the current port exceeds this value, it wraps back to source-port.

    +

    Examples: +Consider a scenario with 10 sessions, where each session generates 10 instances of a specific stream (total stream count = 100). +The starting source-port is 1000 and source-port-step is 1.

    +

    Scenario A - Global Unique Ports (Continuous Range): +If you want every stream across all sessions to have a unique source port, +ensure the source-port-max is high enough to cover the total count.

    +

    Config: source-port-max: 65535 +Result: Ports are assigned sequentially from 1000 to 1099.

    +
      +
    • Session 1: Ports 1000–1009

    • +
    • Session 2: Ports 1010–1019

    • +
    • +
    • Session 10: Ports 1090–1099

    • +
    +

    Scenario B - Per-Session Port Reuse (Repeating Range): +If you want each session to use the same set of source ports, you must configure source-port-max to +force a reset after the stream count for a single session is reached.

    +

    Config: source-port-max: 1009 (Start port 1000 + 9 increments) +Result: Ports are assigned from 1000 to 1009, then reset.

    +
      +
    • Session 1: Ports 1000–1009 (Counter hits max, resets to 1000)

    • +
    • Session 2: Ports 1000–1009 (Counter hits max, resets to 1000)

    • +
    • +
    • Session 10: Ports 1000–1009

    • +
    +
    +

    Stream Commands

    The BNG Blaster provides multiple commands to control and check traffic streams. From 000ebc884da1142ef86e2e5ecd1884041307cabc Mon Sep 17 00:00:00 2001 From: Christian Giese Date: Wed, 25 Mar 2026 21:35:15 +0000 Subject: [PATCH 33/39] fix LAG member distribution of stream flows --- code/bngblaster/src/bbl_a10nsp.c | 7 +++++-- code/bngblaster/src/bbl_lag.c | 2 +- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/code/bngblaster/src/bbl_a10nsp.c b/code/bngblaster/src/bbl_a10nsp.c index 71259794..e4fcbc96 100644 --- a/code/bngblaster/src/bbl_a10nsp.c +++ b/code/bngblaster/src/bbl_a10nsp.c @@ -785,9 +785,12 @@ bbl_a10nsp_dynamic(bbl_a10nsp_interface_s *interface, session->session_id, stream->flow_id, stream->tx_a10nsp_interface->name, interface->name); stream->tx_a10nsp_interface = interface; - stream->io->update_streams = true; stream->update_pps = true; + if(stream->io) { + stream->io->update_streams = true; + } + if(stream->lag) { /* Remove stream from LAG interface */ lag = stream->tx_a10nsp_interface->interface->lag; @@ -819,7 +822,7 @@ bbl_a10nsp_dynamic(bbl_a10nsp_interface_s *interface, lag->stream_head = stream; lag->stream_count++; if(lag->active_count) { - key = stream->flow_id % lag->active_count; + key = rand() % lag->active_count; member = lag->active_list[key]; } else { member = CIRCLEQ_FIRST(&lag->lag_member_qhead); diff --git a/code/bngblaster/src/bbl_lag.c b/code/bngblaster/src/bbl_lag.c index 502456c0..f1965a2e 100644 --- a/code/bngblaster/src/bbl_lag.c +++ b/code/bngblaster/src/bbl_lag.c @@ -166,7 +166,7 @@ bbl_lag_select(bbl_lag_s *lag) /* Distribute streams */ stream = lag->stream_head; while(stream) { - key = stream->flow_id % active_count; + key = rand() % active_count; io = lag->active_list[key]->interface->io.tx; io_stream_add(io, stream); stream = stream->lag_next; From a0f5e49696750fe6729ec06d95fdba0a3d7642c8 Mon Sep 17 00:00:00 2001 From: Christian Giese Date: Thu, 26 Mar 2026 09:44:50 +0000 Subject: [PATCH 34/39] fix a10nsp dynamic interfaces --- code/bngblaster/src/bbl_a10nsp.c | 25 +++++++++++++------------ code/bngblaster/src/bbl_rx.c | 4 ++++ 2 files changed, 17 insertions(+), 12 deletions(-) diff --git a/code/bngblaster/src/bbl_a10nsp.c b/code/bngblaster/src/bbl_a10nsp.c index e4fcbc96..b2bebe57 100644 --- a/code/bngblaster/src/bbl_a10nsp.c +++ b/code/bngblaster/src/bbl_a10nsp.c @@ -771,6 +771,7 @@ bbl_a10nsp_dynamic(bbl_a10nsp_interface_s *interface, bbl_lag_s *lag; bbl_lag_member_s *member; + io_handle_s *io_new; uint8_t key; while(stream) { @@ -784,13 +785,6 @@ bbl_a10nsp_dynamic(bbl_a10nsp_interface_s *interface, LOG(DEBUG, "A10NSP (ID: %u) Change TX interface of stream %lu from %s to %s\n", session->session_id, stream->flow_id, stream->tx_a10nsp_interface->name, interface->name); - stream->tx_a10nsp_interface = interface; - stream->update_pps = true; - - if(stream->io) { - stream->io->update_streams = true; - } - if(stream->lag) { /* Remove stream from LAG interface */ lag = stream->tx_a10nsp_interface->interface->lag; @@ -798,11 +792,11 @@ bbl_a10nsp_dynamic(bbl_a10nsp_interface_s *interface, stream_prev = NULL; while(stream_next) { if(stream_next == stream) { - lag->stream_count--; + if(lag->stream_count) lag->stream_count--; if(stream_prev) { stream_prev->lag_next = stream->lag_next; } else { - lag->stream_head = stream_next; + lag->stream_head = stream->lag_next; } stream->lag = false; stream->lag_next = NULL; @@ -813,6 +807,7 @@ bbl_a10nsp_dynamic(bbl_a10nsp_interface_s *interface, } } } + stream->tx_a10nsp_interface = interface; /* Move stream */ if(interface->interface->type == LAG_INTERFACE) { @@ -827,12 +822,18 @@ bbl_a10nsp_dynamic(bbl_a10nsp_interface_s *interface, } else { member = CIRCLEQ_FIRST(&lag->lag_member_qhead); } - stream->io = member->interface->io.tx; - stream->tx_interface = member->interface; + io_new = member->interface->io.tx; + stream->tx_interface = lag->interface; } else { - stream->io = interface->interface->io.tx; + io_new = interface->interface->io.tx; stream->tx_interface = interface->interface; } + if(stream->io) { + stream->update_pps = true; + stream->io->update_streams = true; + } else { + io_stream_add(io_new, stream); + } } } stream = stream->session_next; diff --git a/code/bngblaster/src/bbl_rx.c b/code/bngblaster/src/bbl_rx.c index 706ff0df..90d489b8 100644 --- a/code/bngblaster/src/bbl_rx.c +++ b/code/bngblaster/src/bbl_rx.c @@ -105,6 +105,10 @@ bbl_rx_handler(bbl_interface_s *interface, return; } + if(interface->state == INTERFACE_DOWN) { + return; + } + /* Traffic for emulated A10NSP switches (over network interfaces). */ if(interface->a10nsp && eth->mpls && eth->type == ETH_TYPE_ETH) { ((bbl_ethernet_header_s*)eth->next)->mpls = eth->mpls; From 941fcd977793efe9f646b9b046eb081783fa1c7e Mon Sep 17 00:00:00 2001 From: Christian Giese Date: Thu, 26 Mar 2026 12:57:58 +0000 Subject: [PATCH 35/39] fix ncurses ui --- code/bngblaster/src/bbl_interactive.c | 15 +++++++++------ code/common/src/logging.h | 1 - 2 files changed, 9 insertions(+), 7 deletions(-) diff --git a/code/bngblaster/src/bbl_interactive.c b/code/bngblaster/src/bbl_interactive.c index dc34a2e4..2fa51a3e 100644 --- a/code/bngblaster/src/bbl_interactive.c +++ b/code/bngblaster/src/bbl_interactive.c @@ -806,6 +806,14 @@ bbl_interactive_init() noecho(); keypad(stdscr, TRUE); + start_color(); + use_default_colors(); + + init_pair(1, COLOR_RED, -1); + init_pair(2, COLOR_GREEN, -1); + init_pair(3, COLOR_BLACK, COLOR_CYAN); + init_pair(4, COLOR_BLACK, COLOR_BLUE); + /* Stats window */ stats_win = newwin(LINES, STATS_WIN_SIZE, 0, 0); stats_win_postion = 0; @@ -813,12 +821,7 @@ bbl_interactive_init() /* Log window */ log_win = newwin(LINES, COLS-STATS_WIN_SIZE, 0, STATS_WIN_SIZE); scrollok(log_win, TRUE); - - start_color(); - init_pair(1, COLOR_RED, COLOR_BLACK); - init_pair(2, COLOR_GREEN, COLOR_BLACK); - init_pair(3, COLOR_BLACK, COLOR_CYAN); - init_pair(4, COLOR_BLACK, COLOR_BLUE); + idlok(log_win, TRUE); curs_set(0); /* cursor off */ refresh(); diff --git a/code/common/src/logging.h b/code/common/src/logging.h index 1129ad0d..c027a896 100644 --- a/code/common/src/logging.h +++ b/code/common/src/logging.h @@ -78,7 +78,6 @@ extern uint8_t g_log_buf_cur; if(g_interactive) { \ if (log_id[log_id_].enable) { \ wprintw(log_win, "%s "fmt_, log_format_timestamp(), ##__VA_ARGS__); \ - wrefresh(log_win); \ } \ } else { \ if (log_id[log_id_].enable) { \ From 61adc849d1c5ff24f3e822edd809140e1bf07ffc Mon Sep 17 00:00:00 2001 From: Christian Giese Date: Thu, 26 Mar 2026 13:03:57 +0000 Subject: [PATCH 36/39] remove LI ncourses workaround --- code/bngblaster/src/bbl_interactive.c | 6 ------ 1 file changed, 6 deletions(-) diff --git a/code/bngblaster/src/bbl_interactive.c b/code/bngblaster/src/bbl_interactive.c index 2fa51a3e..2201857f 100644 --- a/code/bngblaster/src/bbl_interactive.c +++ b/code/bngblaster/src/bbl_interactive.c @@ -163,15 +163,9 @@ void bbl_interactive_read_key_job(timer_s *timer) { int ch; - static bool show_li = false; UNUSED(timer); - if(!show_li && dict_count(g_ctx->li_flow_dict)) { - show_li = true; - bbl_interactive_init_window(); - } - ch = getch(); switch (ch) { case KEY_F(1): From 6224ed6cb9a30252f96146f17e35ebc61fe957e0 Mon Sep 17 00:00:00 2001 From: Christian Giese Date: Thu, 26 Mar 2026 13:06:44 +0000 Subject: [PATCH 37/39] fix ncourses log --- code/common/src/logging.h | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/code/common/src/logging.h b/code/common/src/logging.h index c027a896..86c50985 100644 --- a/code/common/src/logging.h +++ b/code/common/src/logging.h @@ -78,6 +78,7 @@ extern uint8_t g_log_buf_cur; if(g_interactive) { \ if (log_id[log_id_].enable) { \ wprintw(log_win, "%s "fmt_, log_format_timestamp(), ##__VA_ARGS__); \ + wrefresh(log_win); \ } \ } else { \ if (log_id[log_id_].enable) { \ @@ -102,7 +103,7 @@ extern uint8_t g_log_buf_cur; if(g_interactive) { \ if (log_id[log_id_].enable) { \ wprintw(log_win, "%s "fmt_, log_format_timestamp()); \ - wrefresh(log_win); \ + wrefresh(log_win); \ } \ } else { \ if (log_id[log_id_].enable) { \ From 81522a01a91827a30fa71b5a5a0ad981a318deed Mon Sep 17 00:00:00 2001 From: Christian Giese Date: Thu, 26 Mar 2026 13:15:18 +0000 Subject: [PATCH 38/39] update docs for a10nsp-dynamic --- docsrc/sources/access/l2bsa.rst | 5 +++++ docsrc/sources/configuration/interfaces.rst | 4 ++++ 2 files changed, 9 insertions(+) diff --git a/docsrc/sources/access/l2bsa.rst b/docsrc/sources/access/l2bsa.rst index b510c31b..5a0aff56 100644 --- a/docsrc/sources/access/l2bsa.rst +++ b/docsrc/sources/access/l2bsa.rst @@ -142,6 +142,11 @@ This interface is used for corresponding traffic streams where the a10nsp-interface is not explicitly defined, including the autogenerated :ref:`session traffic `. +With ``a10nsp-dynamic`` enabled, the A10NSP interface can be learned dynamically +and streams are automatically moved to the correct interface. This feature is only +supported when threading is disabled. + + L2BSA over Network Inerfaces ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ diff --git a/docsrc/sources/configuration/interfaces.rst b/docsrc/sources/configuration/interfaces.rst index 285c77ff..fd968279 100644 --- a/docsrc/sources/configuration/interfaces.rst +++ b/docsrc/sources/configuration/interfaces.rst @@ -50,3 +50,7 @@ | **tun-name** | | TUN interface name prefix (``). | | | | Default: bbl (bbl1, bbl2, ...) | +-----------------------------------+----------------------------------------------------------------------+ +| **a10nsp-dynamic** | | Move streams to dynamically learned A10NSP interface. | +| | | This feature is only supported without threading enabled | +| | | Default: false | ++-----------------------------------+----------------------------------------------------------------------+ From 35a5d5076ff6bd2edfd0c6be4bf376840ccd5764 Mon Sep 17 00:00:00 2001 From: Christian Giese Date: Thu, 26 Mar 2026 13:15:41 +0000 Subject: [PATCH 39/39] github pages --- docs/_sources/access/l2bsa.rst.txt | 5 +++++ docs/_sources/configuration/interfaces.rst.txt | 4 ++++ docs/access/l2bsa.html | 3 +++ docs/configuration/index.html | 8 ++++++++ docs/configuration/interfaces.html | 8 ++++++++ docs/interfaces.html | 8 ++++++++ docs/searchindex.js | 2 +- 7 files changed, 37 insertions(+), 1 deletion(-) diff --git a/docs/_sources/access/l2bsa.rst.txt b/docs/_sources/access/l2bsa.rst.txt index b510c31b..5a0aff56 100644 --- a/docs/_sources/access/l2bsa.rst.txt +++ b/docs/_sources/access/l2bsa.rst.txt @@ -142,6 +142,11 @@ This interface is used for corresponding traffic streams where the a10nsp-interface is not explicitly defined, including the autogenerated :ref:`session traffic `. +With ``a10nsp-dynamic`` enabled, the A10NSP interface can be learned dynamically +and streams are automatically moved to the correct interface. This feature is only +supported when threading is disabled. + + L2BSA over Network Inerfaces ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ diff --git a/docs/_sources/configuration/interfaces.rst.txt b/docs/_sources/configuration/interfaces.rst.txt index 285c77ff..fd968279 100644 --- a/docs/_sources/configuration/interfaces.rst.txt +++ b/docs/_sources/configuration/interfaces.rst.txt @@ -50,3 +50,7 @@ | **tun-name** | | TUN interface name prefix (``). | | | | Default: bbl (bbl1, bbl2, ...) | +-----------------------------------+----------------------------------------------------------------------+ +| **a10nsp-dynamic** | | Move streams to dynamically learned A10NSP interface. | +| | | This feature is only supported without threading enabled | +| | | Default: false | ++-----------------------------------+----------------------------------------------------------------------+ diff --git a/docs/access/l2bsa.html b/docs/access/l2bsa.html index c8982382..29e525d0 100644 --- a/docs/access/l2bsa.html +++ b/docs/access/l2bsa.html @@ -228,6 +228,9 @@ This interface is used for corresponding traffic streams where the a10nsp-interface is not explicitly defined, including the autogenerated session traffic.

    +

    With a10nsp-dynamic enabled, the A10NSP interface can be learned dynamically +and streams are automatically moved to the correct interface. This feature is only +supported when threading is disabled.

    L2BSA over Network Inerfaces

    This experimental feature enables the termination of MPLS-encapsulated diff --git a/docs/configuration/index.html b/docs/configuration/index.html index 25cdd28e..a70e6299 100644 --- a/docs/configuration/index.html +++ b/docs/configuration/index.html @@ -287,6 +287,14 @@

    Interfaces

    a10nsp-dynamic

    +
    +
    Move streams to dynamically learned A10NSP interface.
    +
    This feature is only supported without threading enabled
    +
    Default: false
    +
    + +

    +

    a10nsp-dynamic

    +
    +
    Move streams to dynamically learned A10NSP interface.
    +
    This feature is only supported without threading enabled
    +
    Default: false
    +
    + + diff --git a/docs/interfaces.html b/docs/interfaces.html index a7587ea7..7165ff31 100644 --- a/docs/interfaces.html +++ b/docs/interfaces.html @@ -287,6 +287,14 @@

    Interface Settings

    a10nsp-dynamic

    +
    +
    Move streams to dynamically learned A10NSP interface.
    +
    This feature is only supported without threading enabled
    +
    Default: false
    +
    + +
    {
    diff --git a/docs/searchindex.js b/docs/searchindex.js
    index 100fd8a6..9ebe7337 100644
    --- a/docs/searchindex.js
    +++ b/docs/searchindex.js
    @@ -1 +1 @@
    -Search.setIndex({"docnames": ["access/index", "access/ipoe", "access/l2bsa", "access/l2tp", "access/li", "access/monkey", "access/multicast", "access/pppoe", "access/traffic", "api/arp", "api/bgp", "api/cfm", "api/dhcp", "api/http", "api/icmp", "api/igmp", "api/index", "api/interfaces", "api/isis", "api/l2tp", "api/ldp", "api/li", "api/ospf", "api/pcap", "api/ppp", "api/sessions", "api/streams", "api/traffic", "configuration/access_line", "configuration/access_line_profiles", "configuration/arp_client", "configuration/bgp", "configuration/dhcp", "configuration/dhcpv6", "configuration/http_client", "configuration/http_server", "configuration/icmp_client", "configuration/igmp", "configuration/index", "configuration/interfaces", "configuration/interfaces_a10nsp", "configuration/interfaces_access", "configuration/interfaces_lag", "configuration/interfaces_links", "configuration/interfaces_network", "configuration/ipoe", "configuration/isis", "configuration/isis_external", "configuration/isis_external_connections", "configuration/ldp", "configuration/lns", "configuration/ospf", "configuration/ospf_external", "configuration/ospf_external_connections", "configuration/ppp", "configuration/ppp_authentication", "configuration/ppp_ip6cp", "configuration/ppp_ipcp", "configuration/ppp_lcp", "configuration/pppoe", "configuration/session_traffic", "configuration/sessions", "configuration/streams", "configuration/traffic", "controller", "faq", "http", "icmp", "index", "install", "interfaces", "nat", "performance", "quickstart", "reports", "routing/bgp", "routing/index", "routing/isis", "routing/ldp", "routing/lspgen", "routing/mpls", "routing/ospf", "streams", "troubleshooting"], "filenames": ["access/index.rst", "access/ipoe.rst", "access/l2bsa.rst", "access/l2tp.rst", "access/li.rst", "access/monkey.rst", "access/multicast.rst", "access/pppoe.rst", "access/traffic.rst", "api/arp.rst", "api/bgp.rst", "api/cfm.rst", "api/dhcp.rst", "api/http.rst", "api/icmp.rst", "api/igmp.rst", "api/index.rst", "api/interfaces.rst", "api/isis.rst", "api/l2tp.rst", "api/ldp.rst", "api/li.rst", "api/ospf.rst", "api/pcap.rst", "api/ppp.rst", "api/sessions.rst", "api/streams.rst", "api/traffic.rst", "configuration/access_line.rst", "configuration/access_line_profiles.rst", "configuration/arp_client.rst", "configuration/bgp.rst", "configuration/dhcp.rst", "configuration/dhcpv6.rst", "configuration/http_client.rst", "configuration/http_server.rst", "configuration/icmp_client.rst", "configuration/igmp.rst", "configuration/index.rst", "configuration/interfaces.rst", "configuration/interfaces_a10nsp.rst", "configuration/interfaces_access.rst", "configuration/interfaces_lag.rst", "configuration/interfaces_links.rst", "configuration/interfaces_network.rst", "configuration/ipoe.rst", "configuration/isis.rst", "configuration/isis_external.rst", "configuration/isis_external_connections.rst", "configuration/ldp.rst", "configuration/lns.rst", "configuration/ospf.rst", "configuration/ospf_external.rst", "configuration/ospf_external_connections.rst", "configuration/ppp.rst", "configuration/ppp_authentication.rst", "configuration/ppp_ip6cp.rst", "configuration/ppp_ipcp.rst", "configuration/ppp_lcp.rst", "configuration/pppoe.rst", "configuration/session_traffic.rst", "configuration/sessions.rst", "configuration/streams.rst", "configuration/traffic.rst", "controller.rst", "faq.rst", "http.rst", "icmp.rst", "index.rst", "install.rst", "interfaces.rst", "nat.rst", "performance.rst", "quickstart.rst", "reports.rst", "routing/bgp.rst", "routing/index.rst", "routing/isis.rst", "routing/ldp.rst", "routing/lspgen.rst", "routing/mpls.rst", "routing/ospf.rst", "streams.rst", "troubleshooting.rst"], "titles": ["Access Protocols", "IPoE", "L2BSA", "L2TP", "Legal Interception (LI)", "Monkey", "Multicast and IPTV", "PPPoE", "Session Traffic", "<no title>", "<no title>", "<no title>", "<no title>", "<no title>", "<no title>", "<no title>", "API/CLI", "<no title>", "<no title>", "<no title>", "<no title>", "<no title>", "<no title>", "<no title>", "<no title>", "<no title>", "<no title>", "<no title>", "<no title>", "<no title>", "<no title>", "<no title>", "<no title>", "<no title>", "<no title>", "<no title>", "<no title>", "<no title>", "Configuration", "<no title>", "<no title>", "<no title>", "<no title>", "<no title>", "<no title>", "<no title>", "<no title>", "<no title>", "<no title>", "<no title>", "<no title>", "<no title>", "<no title>", "<no title>", "<no title>", "<no title>", "<no title>", "<no title>", "<no title>", "<no title>", "<no title>", "<no title>", "<no title>", "<no title>", "Controller", "Frequently Asked Questions", "HTTP Emulation", "ICMP", "RtBrick - Routing Protocol and BNG Blaster", "Installation", "Interfaces", "NAT / CGNAT", "Performance Guide", "Quickstart Guide", "Reports", "BGP", "Routing Protocols", "ISIS", "LDP", "LSPGEN", "MPLS", "OSPF", "Traffic Streams", "Troubleshooting"], "terms": {"A": [0, 3, 5, 6, 38, 50, 63, 68, 69, 71, 72, 74, 75, 78, 82], "bng": [0, 1, 2, 3, 4, 5, 6, 7, 8, 24, 28, 37, 38, 39, 49, 50, 62, 64, 65, 66, 67, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 83], "broadband": [0, 2, 28, 38, 66, 68], "network": [0, 1, 3, 4, 6, 7, 8, 11, 16, 17, 31, 35, 36, 37, 41, 44, 60, 62, 64, 66, 67, 68, 69, 71, 72, 74, 75, 76, 77, 78, 81, 82, 83], "gatewai": [0, 1, 2, 3, 4, 6, 7, 38, 41, 44, 66, 67, 68, 70, 71, 73, 75, 77, 78, 81, 82], "i": [0, 1, 2, 3, 4, 5, 6, 7, 8, 12, 16, 19, 23, 24, 25, 28, 29, 30, 31, 33, 36, 37, 38, 42, 43, 44, 49, 50, 60, 62, 63, 64, 65, 66, 67, 68, 69, 71, 72, 73, 74, 75, 77, 78, 79, 81, 82, 83], "devic": [0, 3, 4, 5, 7, 65, 66, 70, 71, 72, 73, 77, 78, 81, 82], "connect": [0, 1, 7, 16, 19, 48, 49, 53, 58, 66, 70, 71, 72, 73, 77, 78, 79, 81], "custom": [0, 2, 38, 64, 76], "premis": 0, "equip": 0, "servic": [0, 1, 2, 6, 7, 38, 44, 59, 64, 68, 70, 71, 77], "provid": [0, 1, 2, 3, 4, 6, 7, 16, 23, 26, 28, 29, 38, 64, 66, 69, 70, 71, 76, 77, 81, 82], "": [0, 1, 2, 6, 16, 37, 38, 39, 43, 46, 64, 66, 70, 71, 72, 73, 75, 77, 79, 81], "manag": [0, 2, 38, 64, 66], "user": [0, 1, 2, 7, 16, 38, 55, 64, 66, 68, 69, 70, 71, 73], "authent": [0, 3, 41, 46, 51, 55, 70, 73, 75, 77, 78, 79, 81], "traffic": [0, 1, 2, 3, 4, 7, 25, 26, 27, 31, 32, 33, 37, 39, 41, 45, 49, 50, 59, 60, 62, 63, 64, 68, 70, 71, 72, 74, 75, 80, 83], "rout": [0, 38, 46, 70, 73, 75, 77, 82], "qualiti": 0, "qo": [0, 68, 73, 82], "internet": [0, 2, 68, 70, 71, 75, 77], "The": [0, 1, 2, 3, 4, 5, 6, 7, 8, 16, 19, 25, 26, 28, 29, 38, 39, 43, 49, 50, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83], "blaster": [0, 1, 2, 3, 4, 6, 7, 8, 28, 37, 38, 39, 49, 50, 64, 65, 66, 67, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 83], "versatil": [0, 1, 66], "support": [0, 1, 2, 3, 4, 6, 7, 16, 28, 38, 39, 42, 50, 62, 64, 68, 70, 71, 72, 73, 75, 77, 78, 79, 81, 82, 83], "variou": [0, 1, 28, 38, 64, 66, 68, 71, 82], "allow": [0, 1, 2, 3, 5, 6, 7, 16, 19, 29, 32, 33, 37, 38, 39, 43, 55, 56, 57, 64, 65, 66, 67, 68, 69, 70, 71, 72, 74, 75, 77, 78, 79, 81, 82, 83], "creation": [0, 76], "seubscrib": 0, "session": [0, 1, 2, 3, 4, 5, 6, 7, 9, 10, 11, 12, 13, 14, 15, 19, 20, 24, 25, 26, 30, 31, 36, 37, 39, 41, 44, 49, 55, 59, 60, 61, 62, 64, 65, 66, 67, 68, 70, 71, 73, 76], "each": [0, 1, 3, 16, 29, 38, 41, 49, 62, 64, 66, 67, 68, 70, 72, 78, 82], "which": [0, 2, 4, 5, 6, 16, 19, 28, 38, 49, 61, 62, 64, 65, 68, 69, 70, 71, 72, 73, 74, 77, 78, 79, 81, 82, 83], "can": [0, 2, 3, 4, 5, 6, 7, 8, 16, 19, 24, 25, 26, 27, 28, 38, 41, 49, 55, 61, 62, 63, 64, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83], "compris": 0, "multipl": [0, 1, 2, 3, 6, 8, 15, 16, 37, 38, 39, 46, 50, 64, 66, 67, 70, 71, 72, 75, 76, 77, 78, 81, 82], "For": [0, 1, 5, 38, 39, 62, 66, 67, 70, 71, 72, 76, 79, 82], "instanc": [0, 4, 6, 9, 13, 14, 16, 18, 20, 22, 38, 39, 44, 46, 49, 51, 62, 66, 67, 70, 72, 73, 77, 78, 79, 81, 82], "case": [0, 1, 7, 8, 16, 26, 67, 76, 77, 81], "dual": 0, "stack": [0, 68], "ipo": [0, 5, 30, 32, 33, 41, 45, 61, 66, 67, 68, 70, 71, 72, 73, 74], "ar": [0, 1, 2, 3, 5, 6, 7, 8, 16, 26, 28, 29, 36, 37, 38, 39, 44, 61, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 81, 82, 83], "form": 0, "combin": [0, 4, 6, 16, 25, 37, 38, 64, 70, 74, 82], "dhcpv4": [0, 2, 5, 28, 38], "dhcpv6": [0, 2, 5, 7, 16, 28, 33, 41, 45, 65, 66, 70, 72, 73, 74], "well": [0, 2, 6, 28, 38, 67, 70, 72, 79], "arp": [0, 1, 9, 30, 41, 44, 45, 70, 74], "nd": [0, 1, 38, 44, 45, 70], "everi": [0, 2, 6, 38, 62, 64, 68, 70, 71, 72, 73, 74, 77, 81, 82], "defin": [0, 1, 2, 3, 6, 7, 16, 25, 28, 29, 33, 37, 38, 39, 42, 43, 49, 54, 63, 64, 66, 67, 70, 73, 75, 76, 77, 78, 79, 81, 82], "an": [0, 2, 3, 6, 8, 16, 26, 28, 38, 43, 44, 49, 64, 65, 66, 67, 68, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 81, 82], "interfac": [0, 1, 2, 3, 4, 5, 6, 7, 8, 11, 17, 18, 22, 26, 28, 29, 31, 35, 36, 37, 39, 40, 41, 42, 43, 44, 48, 53, 60, 61, 62, 64, 65, 66, 67, 68, 69, 71, 72, 73, 74, 75, 76, 77, 78, 82, 83], "function": [0, 1, 2, 3, 4, 5, 6, 8, 16, 17, 38, 43, 62, 64, 66, 68, 71, 72, 76, 77, 78, 81, 82], "identifi": [0, 2, 16, 18, 22, 29, 30, 31, 34, 36, 38, 41, 42, 44, 46, 48, 49, 51, 53, 62, 66, 67, 70, 75, 77, 78, 81], "global": [0, 1, 5, 7, 8, 16, 27, 28, 31, 38, 43, 55, 63, 70, 72, 73, 74, 75, 82], "uniqu": [0, 82], "id": [0, 1, 2, 3, 6, 7, 9, 11, 12, 13, 14, 15, 16, 18, 19, 20, 24, 25, 26, 28, 29, 30, 31, 32, 33, 34, 36, 38, 39, 41, 42, 44, 46, 48, 49, 50, 51, 53, 62, 64, 66, 67, 70, 71, 72, 73, 75, 77, 78, 79, 81, 82], "number": [0, 3, 4, 5, 6, 8, 16, 37, 38, 39, 41, 42, 43, 44, 49, 62, 64, 68, 70, 71, 72, 73, 74, 75, 77, 78, 81, 83], "start": [0, 3, 5, 6, 7, 8, 11, 12, 13, 14, 15, 16, 23, 25, 26, 27, 31, 34, 36, 37, 38, 41, 44, 50, 58, 60, 61, 62, 63, 65, 66, 67, 68, 69, 70, 72, 73, 74, 75, 77, 78, 79, 81, 83], "1": [0, 1, 2, 3, 4, 6, 7, 8, 16, 19, 26, 29, 30, 31, 32, 34, 35, 36, 37, 38, 39, 41, 44, 45, 46, 48, 50, 51, 53, 54, 61, 62, 63, 64, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 77, 78, 79, 81, 82], "increas": [0, 16, 38, 39, 63, 70, 71, 72, 73, 82], "sequenti": [0, 82], "new": [0, 6, 38, 64, 68, 69, 70, 71, 73, 82], "establish": [0, 1, 3, 5, 6, 7, 8, 16, 25, 37, 38, 60, 62, 64, 65, 66, 67, 73, 74, 75, 76, 78, 82], "furthermor": [0, 1, 64, 68, 71], "you": [0, 2, 16, 26, 38, 66, 67, 68, 70, 71, 72, 73, 74, 76, 79, 82, 83], "have": [0, 38, 68, 70, 71, 73, 74, 79, 82], "flexibl": [0, 1, 38, 66], "group": [0, 1, 2, 6, 12, 15, 16, 24, 25, 26, 30, 34, 36, 37, 38, 41, 43, 62, 66, 67, 70, 71, 72, 73, 78, 82], "togeth": [0, 1, 32, 38, 71, 82], "us": [0, 1, 2, 3, 4, 5, 6, 7, 8, 16, 19, 23, 24, 25, 26, 27, 30, 33, 36, 37, 38, 41, 44, 45, 49, 50, 62, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 81, 82, 83], "option": [0, 1, 3, 5, 6, 7, 8, 16, 18, 28, 29, 32, 33, 36, 37, 38, 39, 41, 43, 44, 47, 49, 50, 53, 56, 57, 61, 62, 63, 64, 67, 68, 69, 70, 71, 72, 73, 74, 75, 77, 78, 79, 81, 82, 83], "enabl": [0, 1, 2, 3, 4, 5, 6, 7, 8, 16, 17, 25, 28, 31, 32, 33, 37, 38, 41, 42, 44, 45, 46, 49, 56, 57, 61, 62, 63, 64, 66, 67, 68, 69, 70, 72, 73, 74, 75, 76, 77, 78, 82], "applic": [0, 6, 16, 25, 37, 38, 64, 66, 72], "command": [0, 4, 5, 6, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 31, 38, 66, 67, 69, 70, 71, 72, 73, 75, 76, 78], "entir": [0, 2, 68], "simultan": [0, 66], "eth1": [0, 1, 2, 3, 5, 6, 7, 64, 66, 67, 70, 72, 74, 75, 77, 78, 81, 82], "type": [0, 1, 2, 4, 6, 7, 28, 29, 38, 41, 44, 46, 51, 62, 64, 66, 70, 71, 72, 73, 74, 75, 77, 78, 79, 81, 82], "pppoe": [0, 2, 3, 5, 6, 16, 28, 41, 59, 61, 64, 65, 66, 67, 68, 70, 72, 74, 82, 83], "usernam": [0, 3, 7, 16, 25, 38, 41, 55, 70, 73], "even": [0, 28, 38, 49, 68, 70, 72, 78, 79], "rtbrick": [0, 1, 3, 7, 16, 38, 55, 64, 66, 69, 70, 73, 75, 82], "com": [0, 7, 16, 38, 55, 64, 66, 68, 69, 70, 73, 75], "outer": [0, 1, 2, 3, 7, 16, 38, 40, 41, 50, 61, 62, 64, 65, 66, 67, 70, 72, 73, 75, 78, 82, 83], "vlan": [0, 1, 2, 3, 7, 16, 30, 32, 33, 38, 40, 41, 44, 45, 59, 61, 62, 64, 65, 66, 67, 70, 72, 73, 82, 83], "min": [0, 1, 2, 3, 7, 8, 16, 25, 26, 29, 38, 41, 42, 61, 64, 70, 72, 73, 74, 82], "1000": [0, 3, 6, 7, 37, 38, 39, 63, 64, 70, 72, 73, 74, 75, 77, 79, 81, 82], "max": [0, 1, 2, 3, 6, 7, 8, 16, 25, 26, 29, 37, 38, 41, 42, 50, 55, 56, 57, 58, 59, 61, 62, 64, 70, 71, 72, 73, 74, 81, 82], "1998": [0, 70], "step": [0, 38, 41, 62, 69, 70, 73, 82], "2": [0, 1, 2, 3, 4, 6, 7, 8, 16, 19, 26, 31, 33, 37, 38, 41, 44, 46, 48, 51, 53, 61, 62, 64, 66, 67, 69, 70, 71, 72, 73, 74, 75, 77, 78, 79, 81, 82], "inner": [0, 1, 2, 3, 7, 16, 38, 41, 61, 62, 64, 70, 72, 73, 75, 82], "7": [0, 1, 2, 3, 4, 30, 38, 41, 44, 50, 62, 64, 66, 67, 70, 72, 73, 75, 77, 78, 81, 82], "odd": [0, 70], "1001": [0, 38, 46, 70, 73, 77, 79, 82], "1999": [0, 7, 70], "It": [0, 2, 3, 5, 6, 38, 39, 62, 63, 64, 67, 68, 69, 70, 71, 72, 77, 78, 81, 82], "also": [0, 2, 3, 5, 6, 16, 26, 38, 39, 62, 64, 66, 67, 69, 70, 71, 72, 73, 74, 77, 79, 81, 82, 83], "possibl": [0, 3, 5, 6, 38, 46, 64, 66, 67, 69, 70, 71, 72, 77, 79, 81, 82], "assign": [0, 1, 8, 16, 38, 44, 62, 70, 71, 72, 82], "section": [0, 2, 6, 16, 28, 29, 38, 41, 64, 70, 72, 82], "singl": [0, 2, 3, 6, 16, 37, 38, 71, 72, 73, 78, 82, 83], "l2tp": [0, 19, 38, 50, 62, 68, 70, 72, 82, 83], "l2bsa": [0, 38, 68, 70], "multicast": [0, 16, 26, 27, 31, 37, 38, 63, 68, 70, 74, 75, 78], "iptv": [0, 68, 70], "legal": [0, 68], "intercept": [0, 68], "li": [0, 21, 38, 63, 68], "monkei": [0, 16, 38, 41, 61, 70], "In": [1, 2, 8, 16, 26, 27, 28, 38, 39, 62, 66, 70, 71, 72, 73, 76, 79, 82], "addit": [1, 38, 66, 69, 71, 79], "its": [1, 38, 49, 66, 67, 68, 70, 72, 78, 79, 81, 82], "test": [1, 3, 5, 7, 15, 19, 38, 41, 55, 61, 62, 63, 65, 66, 68, 70, 71, 72, 73, 74, 76, 77, 78, 81, 82, 83], "capabl": [1, 29, 38, 64, 66, 69, 71, 73, 75, 78], "excel": 1, "emul": [1, 2, 3, 4, 6, 7, 32, 38, 44, 68, 70, 71, 73, 76, 77, 81, 82], "ip": [1, 3, 6, 7, 30, 31, 37, 38, 50, 57, 62, 64, 68, 70, 71, 73, 75, 78, 79, 82, 83], "over": [1, 6, 7, 15, 16, 29, 38, 49, 61, 62, 63, 66, 67, 72, 74, 75, 77, 78, 81, 82], "ethernet": [1, 2, 4, 7, 65, 70, 73], "subscrib": [1, 68, 70], "both": [1, 2, 6, 7, 16, 25, 26, 38, 55, 62, 68, 70, 71, 72, 73, 74, 76, 81, 82], "dynam": [1, 38, 62, 65, 68, 70, 71, 72, 75, 76, 78, 81, 82], "thi": [1, 2, 3, 5, 6, 7, 8, 16, 19, 24, 25, 26, 27, 28, 29, 30, 32, 33, 36, 37, 38, 39, 41, 43, 44, 47, 49, 55, 56, 57, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 81, 82, 83], "particularli": [1, 38], "valuabl": [1, 66], "valid": [1, 4, 38, 49, 71, 75, 78, 79, 82], "perform": [1, 64, 66, 68, 70, 71, 76, 82], "behavior": [1, 6, 7, 16, 24, 38, 63, 66, 68, 72, 82, 83], "infrastructur": [1, 2, 71], "compon": 1, "handl": [1, 38, 68, 70, 71, 72], "base": [1, 2, 3, 6, 16, 18, 37, 38, 41, 46, 50, 51, 62, 63, 68, 70, 72, 73, 75, 77, 78, 79, 81, 82], "administr": 1, "develop": [1, 16, 68, 79, 81], "simul": [1, 28, 38, 66, 68, 71, 76], "util": [1, 2, 38, 72, 75], "underli": [1, 64, 66], "link": [1, 2, 16, 17, 25, 29, 39, 40, 41, 42, 43, 44, 64, 68, 72, 73, 76, 77, 78, 79, 81, 82, 83], "layer": [1, 2, 38, 39, 43, 62, 70, 73, 82], "protocol": [1, 3, 4, 6, 7, 16, 19, 28, 29, 37, 38, 41, 44, 45, 46, 55, 56, 57, 65, 70, 71, 73, 74, 75, 77, 78, 79, 81, 82], "extend": [1, 31, 38, 75, 78], "offer": [1, 64, 66, 71, 82], "configur": [1, 2, 6, 16, 25, 26, 28, 31, 37, 41, 43, 50, 56, 57, 58, 61, 64, 65, 66, 67, 68, 70, 71, 72, 73, 83], "method": [1, 5, 82], "scenario": [1, 2, 38, 66, 71, 72, 82], "where": [1, 2, 3, 38, 50, 62, 64, 70, 71, 73, 75, 82, 83], "specif": [1, 2, 7, 16, 26, 38, 45, 58, 64, 66, 68, 71, 72, 79, 81, 82], "individu": 1, "facilit": [1, 64], "accur": 1, "polici": [1, 75], "reli": 1, "alloc": 1, "requir": [1, 2, 5, 7, 36, 38, 43, 47, 62, 63, 66, 67, 69, 70, 71, 72, 77, 82], "like": [1, 6, 32, 33, 38, 62, 68, 70, 71, 75, 77, 78, 81, 82], "host": [1, 2, 4, 7, 38, 59, 70, 82], "realist": 1, "obtain": 1, "similar": [1, 16, 26, 70, 74, 76, 81], "real": [1, 6, 69, 72, 76, 77, 81], "world": [1, 6, 72], "deploy": [1, 66], "differ": [1, 3, 5, 6, 7, 29, 38, 50, 62, 63, 66, 68, 70, 72, 73, 74, 75, 77, 81, 82], "virtual": [1, 68, 73, 76, 77, 81], "local": [1, 2, 10, 16, 19, 20, 25, 31, 35, 38, 41, 44, 49, 53, 64, 66, 70, 71, 72, 73, 75, 78, 79, 81], "area": [1, 38, 46, 51, 73, 77, 79, 81], "mode": [1, 3, 7, 38, 39, 41, 43, 50, 65, 66, 69, 72], "includ": [1, 2, 6, 7, 8, 16, 27, 28, 37, 38, 39, 45, 57, 64, 67, 68, 69, 70, 71, 73, 74, 75, 76, 77, 78, 79, 81, 82, 83], "n": [1, 3, 7, 16, 38, 41, 45, 61, 62, 66, 70, 71, 73, 75, 78, 79, 82], "associ": [1, 38, 41, 44, 66, 67, 70, 71, 72, 81, 82], "dedic": [1, 6, 37, 38, 41, 70, 71, 72], "ensur": [1, 7, 38, 71, 72, 81, 82], "isol": 1, "control": [1, 3, 7, 16, 27, 31, 32, 33, 38, 45, 49, 50, 59, 63, 66, 68, 73, 75, 78, 79, 81, 82], "On": [1, 72, 73], "other": [1, 2, 7, 16, 26, 28, 38, 39, 55, 64, 65, 66, 69, 70, 71, 72, 73, 77, 81, 83], "hand": 1, "share": [1, 70, 71, 72], "common": [1, 3, 5, 68, 77, 81], "By": [1, 28, 38, 64, 66, 75], "comprehens": [1, 64, 66, 68, 71, 76], "environ": [1, 72, 82], "whether": [1, 64, 71, 82], "evalu": [1, 66, 68, 71], "mechan": [1, 71], "assess": [1, 66, 68, 71], "thorough": [1, 68], "optim": [1, 7, 38, 63, 68, 69, 71, 72, 81], "mean": [1, 2, 7, 8, 38, 39, 45, 58, 62, 67, 68, 70, 71, 72, 75, 78, 82], "shown": [1, 3, 4, 6, 16, 19, 69, 70, 71, 77, 78, 81, 83], "exampl": [1, 2, 3, 4, 6, 7, 8, 16, 27, 38, 62, 64, 66, 67, 69, 70, 72, 73, 74, 75, 76, 77, 78, 79, 81, 82], "below": [1, 2, 3, 6, 16, 19, 38, 63, 68, 69, 70, 71, 73, 77, 81, 83], "access": [1, 2, 3, 5, 7, 8, 16, 17, 28, 29, 32, 33, 36, 39, 41, 62, 64, 66, 67, 68, 71, 72, 73, 74, 82], "128": [1, 2, 6, 7, 38, 46, 62, 70, 73, 77, 78, 82], "4000": [1, 2, 3, 64, 70, 72, 73, 82], "200": [1, 3, 4, 7, 16, 64, 66, 70, 71, 73, 74, 77, 78, 81, 82], "0": [1, 2, 3, 4, 6, 7, 8, 16, 18, 28, 29, 30, 31, 32, 33, 34, 36, 37, 38, 39, 41, 42, 44, 45, 46, 49, 50, 51, 53, 57, 58, 59, 60, 61, 62, 64, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 77, 78, 79, 81, 82], "iter": [1, 6, 15, 16, 37, 38, 41, 61, 62, 70, 71], "4": [1, 4, 7, 8, 16, 19, 31, 38, 41, 44, 61, 64, 66, 67, 68, 70, 72, 73, 74, 75, 77, 78, 81, 82], "most": [1, 3, 38, 41, 65, 70, 72, 83], "true": [1, 2, 3, 5, 6, 7, 8, 31, 32, 33, 34, 36, 37, 38, 39, 41, 44, 45, 46, 47, 52, 56, 57, 60, 61, 62, 63, 64, 66, 67, 69, 70, 71, 72, 73, 75, 77, 79, 81, 82, 83], "line": [1, 2, 3, 7, 16, 28, 29, 32, 33, 41, 70, 73, 82], "agent": [1, 2, 3, 7, 16, 25, 28, 32, 33, 38, 41, 70, 73], "remot": [1, 2, 3, 7, 16, 19, 25, 28, 32, 33, 38, 41, 53, 70, 73, 79, 81], "deu": [1, 3, 7, 38, 73], "circuit": [1, 2, 3, 7, 16, 25, 28, 32, 33, 38, 41, 70, 73], "eth": [1, 3, 7, 38, 73], "attribut": [1, 3, 6, 7, 8, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 66, 67, 70, 75, 77, 78, 81, 82], "descript": [1, 3, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 66, 67, 70, 75, 77, 78, 81, 82], "ipv6": [1, 2, 3, 4, 5, 8, 16, 25, 31, 34, 35, 41, 44, 45, 46, 49, 60, 62, 65, 66, 70, 71, 73, 74, 75, 77, 78, 79, 81, 82], "disabl": [1, 2, 5, 6, 7, 8, 16, 17, 28, 32, 33, 37, 38, 45, 46, 49, 56, 57, 58, 59, 60, 62, 70, 71, 73, 77, 78, 82], "default": [1, 3, 4, 5, 6, 7, 8, 16, 18, 24, 26, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 69, 70, 72, 73, 75, 77, 78, 79, 81, 82, 83], "ipv4": [1, 2, 3, 4, 5, 6, 8, 10, 16, 20, 30, 31, 32, 34, 35, 36, 41, 44, 45, 46, 49, 50, 53, 60, 62, 63, 65, 66, 67, 70, 71, 72, 73, 74, 75, 77, 78, 79, 81, 82], "timeout": [1, 2, 3, 7, 16, 24, 32, 33, 38, 42, 45, 49, 55, 56, 57, 58, 59, 70, 74, 78], "initi": [1, 6, 7, 37, 38, 45, 57, 58, 63, 64, 66, 67, 71, 78, 79, 82], "retri": [1, 2, 3, 7, 32, 33, 38, 45, 46, 50, 51, 55, 56, 57, 58, 59, 66, 77, 81], "interv": [1, 3, 6, 7, 30, 32, 36, 37, 38, 39, 41, 43, 44, 45, 46, 49, 50, 51, 58, 62, 63, 66, 67, 70, 73, 77, 78, 81, 82], "second": [1, 6, 7, 8, 16, 25, 30, 31, 32, 33, 34, 36, 37, 38, 45, 46, 49, 51, 55, 56, 57, 58, 59, 61, 62, 66, 67, 71, 73, 74, 75, 77, 78, 81, 82], "period": [1, 38, 45], "300": [1, 38, 45, 46, 77], "prioriti": [1, 2, 3, 6, 7, 16, 18, 30, 32, 33, 37, 38, 41, 42, 43, 44, 45, 50, 51, 59, 62, 70, 73, 78, 81, 82], "pbit": [1, 7, 32, 33, 38, 45, 59, 82], "gener": [1, 8, 16, 27, 37, 38, 43, 45, 46, 60, 61, 64, 66, 67, 68, 69, 70, 73, 74, 76, 77, 79, 81, 82, 83], "icmpv6": [1, 38, 44, 45, 65, 70, 74], "r": [1, 38, 45, 66, 71, 74, 79], "master": [1, 38, 45], "valu": [1, 7, 16, 28, 29, 31, 36, 38, 41, 44, 45, 49, 55, 62, 63, 66, 67, 70, 71, 74, 75, 78, 82], "unless": [1, 38, 45, 82], "overridden": [1, 38, 45], "set": [1, 3, 6, 7, 8, 11, 16, 28, 32, 36, 37, 38, 40, 41, 43, 44, 45, 49, 50, 55, 62, 63, 66, 67, 69, 71, 72, 73, 74, 75, 78, 79, 82], "broadcast": [1, 32, 38, 44, 70, 73, 77, 81], "flag": [1, 16, 26, 32, 38, 64, 65, 67, 70, 71, 82], "fals": [1, 2, 3, 6, 7, 31, 32, 33, 36, 37, 38, 39, 40, 41, 42, 44, 46, 47, 49, 50, 57, 58, 59, 61, 62, 63, 66, 67, 70, 71, 72, 73, 75, 77, 78, 79, 82], "5": [1, 3, 4, 6, 7, 8, 31, 32, 33, 37, 38, 46, 49, 50, 51, 55, 56, 57, 58, 59, 62, 69, 70, 71, 72, 73, 74, 75, 77, 78, 81, 82], "10": [1, 2, 3, 4, 6, 7, 16, 32, 33, 38, 41, 44, 46, 48, 49, 51, 53, 56, 57, 58, 59, 62, 64, 66, 67, 70, 71, 72, 73, 74, 75, 77, 78, 79, 81, 82], "releas": [1, 12, 16, 32, 38, 64, 69, 72, 75], "3": [1, 2, 3, 4, 6, 7, 8, 16, 19, 26, 31, 32, 36, 37, 38, 41, 44, 46, 49, 53, 58, 61, 62, 67, 68, 70, 72, 73, 74, 75, 77, 78, 79, 81, 82], "tos": [1, 3, 6, 31, 32, 36, 37, 38, 49, 50, 67, 75, 78, 82], "TOS": [1, 3, 6, 31, 32, 36, 37, 38, 49, 50, 62, 67, 75, 78, 82], "all": [1, 2, 3, 5, 6, 7, 8, 9, 10, 13, 14, 15, 16, 17, 19, 20, 21, 25, 26, 27, 32, 33, 38, 39, 47, 49, 50, 52, 59, 60, 61, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 77, 78, 81, 82, 83], "overrid": [1, 32, 33, 38], "packet": [1, 2, 3, 4, 6, 7, 28, 32, 33, 37, 38, 39, 50, 62, 63, 64, 65, 69, 71, 72, 73, 74, 75, 77, 78, 79, 81, 82, 83], "onli": [1, 3, 4, 6, 7, 16, 25, 26, 32, 33, 36, 37, 38, 41, 43, 53, 62, 63, 65, 67, 68, 70, 71, 72, 77, 81, 82, 83], "add": [1, 3, 32, 33, 38, 41, 43, 50, 70, 73, 75, 79], "vendor": [1, 3, 32, 38, 41, 58, 64, 68, 70], "class": [1, 32, 38, 41, 70, 72], "60": [1, 3, 32, 38, 41, 70, 72, 81], "keep": [1, 5, 12, 16, 32, 38, 71], "init": [1, 12, 16, 32, 38, 73], "reboot": [1, 12, 16, 32, 38], "stop": [1, 5, 6, 7, 11, 12, 13, 14, 15, 16, 23, 25, 26, 27, 32, 36, 38, 61, 62, 63, 66, 67, 70, 73], "zero": [1, 3, 28, 32, 38, 50, 70, 72, 82], "ia": [1, 33, 38], "na": [1, 33, 38], "ia_na": [1, 33, 38], "pd": [1, 33, 38], "ia_pd": [1, 33, 38], "separ": [1, 33, 38, 68, 82], "send": [1, 2, 3, 6, 7, 8, 12, 16, 19, 28, 31, 33, 36, 37, 38, 44, 46, 49, 50, 60, 62, 64, 65, 67, 69, 70, 72, 73, 75, 77, 78, 80, 81, 83], "seper": [1, 33, 38], "request": [1, 3, 5, 6, 7, 16, 19, 24, 30, 33, 34, 36, 37, 38, 55, 56, 57, 58, 61, 64, 66, 67, 68, 70, 74, 77, 81], "rapid": [1, 7, 33, 38], "commit": [1, 7, 33, 38, 68, 69], "wai": [1, 6, 33, 38, 64, 69, 77, 81], "handshak": [1, 33, 38, 66, 77], "ldra": [1, 28, 33, 38, 41, 70], "lightweight": [1, 28, 33, 38, 66, 68, 73], "relai": [1, 28, 33, 38], "rfc6221": [1, 33, 38], "http": [1, 13, 33, 34, 35, 41, 64, 68, 69, 70, 75, 83], "datatrack": [1, 33, 38], "ietf": [1, 33, 38, 77, 78], "org": [1, 33, 38, 68, 69], "doc": [1, 33, 38, 69], "html": [1, 33, 38, 69], "ad": [1, 16, 33, 38, 71, 73, 82], "inform": [1, 3, 7, 8, 15, 16, 25, 26, 33, 38, 64, 75, 77, 78, 81, 82, 83], "should": [1, 5, 6, 33, 38, 63, 64, 66, 69, 70, 72, 73, 75, 78, 81, 82], "info": [1, 3, 6, 7, 15, 16, 17, 25, 26, 64, 71, 73, 75, 78, 82, 83], "detail": [1, 2, 3, 4, 6, 7, 8, 16, 21, 37, 38, 62, 64, 67, 68, 69, 70, 73, 74, 81, 82], "sudo": [1, 3, 4, 5, 6, 7, 16, 19, 64, 66, 69, 70, 71, 73, 75, 77, 78, 81, 82, 83], "bngblaster": [1, 3, 4, 5, 6, 7, 16, 19, 38, 39, 46, 49, 51, 64, 66, 68, 69, 70, 71, 73, 75, 77, 78, 81, 82, 83], "cli": [1, 3, 4, 5, 6, 7, 19, 66, 68, 71, 73, 75, 76, 77, 78, 81, 82], "run": [1, 3, 4, 5, 6, 7, 16, 19, 38, 39, 64, 66, 68, 70, 71, 72, 73, 75, 77, 78, 81, 82], "sock": [1, 3, 4, 5, 6, 7, 16, 19, 64, 66, 71, 73, 75, 77, 78, 81, 82], "jq": [1, 7, 16, 66, 73, 77, 81, 82], "statu": [1, 3, 4, 6, 7, 16, 38, 58, 66, 71, 73, 77, 78, 82], "ok": [1, 3, 4, 6, 7, 16, 64, 66, 71, 73, 77, 78, 82], "code": [1, 3, 4, 7, 16, 19, 64, 66, 71, 73, 77, 78, 82], "state": [1, 2, 3, 6, 7, 16, 27, 29, 38, 63, 64, 66, 68, 70, 71, 73, 77, 78, 79, 81, 82], "8": [1, 2, 3, 4, 36, 38, 64, 67, 69, 70, 71, 72, 75, 77, 78, 81, 82], "mac": [1, 2, 7, 38, 39, 40, 42, 43, 44, 67, 70, 73, 82], "02": [1, 2, 7, 38, 42, 70, 73, 79], "00": [1, 2, 7, 8, 29, 38, 42, 69, 70, 72, 73, 74, 77, 79], "01": [1, 2, 7, 64, 70, 73, 74, 77], "netmask": 1, "255": [1, 3, 31, 38, 39, 42, 46, 50, 51, 62, 70, 75, 77, 81, 82], "dns1": [1, 7, 38, 57, 73], "dns2": [1, 7, 38, 57, 73], "prefix": [1, 7, 8, 38, 39, 60, 67, 68, 70, 72, 73, 75, 78, 79, 82], "fc66": [1, 2, 3, 7, 38, 44, 66, 70, 73, 75, 77, 81, 82], "1337": [1, 2, 3, 7, 66, 70, 73, 77, 79, 81, 82], "2222": 1, "deleg": [1, 7, 8, 38, 60], "3333": 1, "64": [1, 7, 8, 36, 38, 44, 51, 62, 66, 67, 70, 71, 72, 73, 77, 81, 82], "bound": [1, 7, 36, 38, 67, 73, 82], "server": [1, 3, 7, 35, 50, 57, 64, 68, 71, 72, 73], "leas": 1, "time": [1, 6, 7, 31, 38, 46, 47, 49, 51, 59, 63, 64, 68, 69, 73, 74, 75, 76, 77, 78, 81, 82, 83], "expir": 1, "299": 1, "t1": 1, "149": 1, "t2": 1, "261": 1, "tx": [1, 2, 3, 7, 16, 26, 38, 39, 42, 43, 44, 46, 62, 70, 72, 73, 74, 75, 77, 78, 82], "rx": [1, 3, 4, 6, 7, 38, 39, 43, 62, 64, 70, 71, 72, 73, 74, 75, 78, 82], "discov": 1, "ack": [1, 16, 26], "nak": 1, "14400": 1, "14399": 1, "899": 1, "1439": 1, "solicit": 1, "advertis": [1, 38, 44, 65, 67, 70, 73, 77, 82], "repli": [1, 67, 73], "renew": 1, "6": [1, 2, 4, 7, 31, 38, 72, 74, 75, 77, 78, 81, 82], "fragment": [1, 7, 38, 63, 67, 73, 74], "total": [1, 7, 8, 64, 66, 67, 69, 73, 74, 82], "flow": [1, 4, 7, 8, 16, 21, 25, 26, 31, 38, 68, 72, 73, 74, 75], "verifi": [1, 2, 6, 7, 8, 16, 26, 38, 62, 63, 64, 68, 71, 72, 73, 74, 82, 83], "downstream": [1, 2, 4, 6, 7, 8, 16, 25, 26, 28, 29, 38, 60, 62, 70, 71, 73, 74, 78, 82], "13": [1, 3, 7, 38, 41, 44, 70, 72, 73, 78, 79], "first": [1, 2, 6, 7, 8, 16, 31, 37, 38, 41, 61, 62, 70, 71, 72, 73, 74, 75, 81, 82], "seq": [1, 7, 38, 41, 44, 67, 70, 73, 74, 77, 81, 82], "loss": [1, 6, 7, 68, 72, 73, 74, 82, 83], "wrong": [1, 7, 73, 74, 82], "upstream": [1, 2, 4, 7, 8, 16, 25, 26, 28, 29, 38, 62, 71, 73, 74, 82], "ipv6pd": [1, 7, 8, 38, 60, 62, 74, 82], "bitstream": 2, "refer": [2, 4, 7, 70, 75, 77, 78], "make": [2, 28, 38, 64, 69, 71, 75], "hi": 2, "avail": [2, 64, 76], "These": [2, 36, 38, 64, 67, 71, 76, 82], "retail": 2, "who": 2, "germani": 2, "mandat": 2, "feder": 2, "agenc": 2, "german": 2, "bundesnetzagentur": 2, "bnetza": 2, "regulatori": 2, "offic": 2, "electr": 2, "ga": 2, "telecommun": [2, 71], "post": [2, 64], "railwai": 2, "market": 2, "ministri": 2, "econom": 2, "affair": 2, "energi": 2, "locat": [2, 38, 64, 66], "bonn": 2, "definit": [2, 29, 38, 66], "wa": [2, 7, 16, 68, 71, 72, 77, 79], "so": [2, 38, 70, 72, 82], "call": [2, 3, 8, 38, 64, 70, 71, 74, 77, 78, 79, 81, 82], "nga": 2, "forum": [2, 28, 38], "advisori": 2, "board": 2, "found": [2, 16, 64, 66, 68, 69, 72, 77, 78, 81, 82], "mai": [2, 5, 6, 7, 38, 49, 63, 64, 72, 75, 78], "2010": 2, "promot": 2, "dialogu": 2, "between": [2, 6, 8, 29, 37, 38, 46, 49, 60, 63, 66, 67, 70, 72, 73, 74, 75, 77, 78, 79, 81, 82], "oper": [2, 64, 66, 68, 71, 72, 75, 78, 82], "manufactur": 2, "author": 2, "rollout": 2, "two": [2, 5, 7, 36, 38, 66, 67, 70, 72, 73, 75, 77, 78, 80, 81, 82], "u": [2, 16, 38, 70, 79, 82], "a10": [2, 38, 70], "nsp": [2, 38], "those": [2, 7, 8, 16, 29, 38, 41, 62, 64, 67, 70, 71, 72, 73, 74, 75, 77, 78, 79, 81, 82, 83], "were": [2, 38], "introduc": 2, "tr": [2, 70], "101": [2, 6], "migrat": 2, "aggreg": [2, 16, 17, 28, 41, 68, 72, 83], "transpar": 2, "without": [2, 5, 6, 12, 16, 69, 70, 73], "tag": [2, 4, 72], "wholesal": 2, "some": [2, 4, 6, 37, 38, 64, 65, 70, 72, 73, 83], "cpe": [2, 5, 7], "untag": [2, 38, 41, 44], "while": [2, 16, 38, 77, 81, 82], "anoth": [2, 6, 71, 72, 73, 82], "need": [2, 16, 38, 39, 67, 69, 70, 71, 72, 73, 77, 82], "forward": [2, 8, 28, 38, 68, 75, 78, 82], "bundl": 2, "one": [2, 4, 6, 7, 36, 38, 62, 64, 67, 70, 71, 72, 73, 74, 75, 76, 77, 78, 81, 82], "more": [2, 5, 6, 16, 37, 38, 63, 66, 68, 70, 71, 72, 73, 75, 77, 78, 81, 82], "lacp": [2, 38, 42, 43, 70], "least": [2, 16, 36, 38, 67, 70, 72, 82], "limit": [2, 38, 41, 42, 64, 65, 70, 71, 72, 82], "amount": [2, 16, 25, 64], "4094": 2, "per": [2, 5, 6, 7, 16, 37, 38, 39, 41, 43, 44, 46, 61, 62, 63, 64, 68, 69, 70, 71, 72, 74, 75, 77, 82, 83], "caus": [2, 72, 77], "usabl": [2, 64], "rang": [2, 3, 7, 16, 25, 26, 28, 29, 30, 31, 34, 35, 36, 38, 39, 41, 44, 46, 49, 50, 51, 53, 54, 61, 62, 63, 66, 67, 70, 71, 73, 75, 77, 78, 81, 82], "mani": [2, 5, 64, 68, 70, 73], "thei": [2, 29, 38, 71, 73, 82], "address": [2, 3, 4, 6, 7, 8, 10, 12, 16, 20, 25, 27, 30, 31, 32, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 49, 50, 53, 57, 60, 62, 64, 66, 67, 70, 72, 73, 75, 77, 78, 79, 81, 82, 83], "than": [2, 38, 62, 63, 66, 68, 70, 72, 75, 77, 78, 82], "term": [2, 70], "relat": [2, 71, 83], "end": [2, 64, 68, 70, 73, 74, 75, 76, 82], "adsl": [2, 70], "model": [2, 70], "depict": 2, "figur": 2, "core": [2, 38, 43, 68, 70], "subset": 2, "architectur": [2, 72], "compos": 2, "block": [2, 16, 27, 70], "three": [2, 6, 37, 38, 70, 74, 77, 79, 81, 82], "point": [2, 71, 79], "node": [2, 38, 46, 51, 68, 72, 73, 76, 77, 79, 81], "region": 2, "v": [2, 38, 39, 69, 70, 79], "map": [2, 70, 71, 78, 81], "chang": [2, 5, 6, 37, 38, 39, 49, 61, 63, 64, 65, 69, 70, 73, 75, 78, 79, 81, 82], "trigger": [2, 75, 78], "re": [2, 72], "provis": 2, "action": 2, "port": [2, 4, 34, 35, 38, 62, 63, 64, 66, 71, 72, 78], "up": [2, 3, 6, 7, 8, 28, 29, 38, 41, 65, 70, 72, 73, 74, 77, 78, 80, 82], "down": [2, 3, 7, 28, 29, 38, 41, 66, 70, 73], "thu": 2, "discoveri": [2, 3, 7, 28, 38, 59, 78], "v6": 2, "must": [2, 5, 16, 38, 49, 64, 67, 70, 73, 78, 79, 82], "enrich": [2, 38], "extra": 2, "identif": [2, 82], "header": [2, 4, 6, 36, 38, 50, 62, 64, 65, 66, 67, 70, 71, 77, 81, 82, 83], "actual": [2, 16, 28, 29, 38, 39, 62, 70, 71, 72, 74, 75, 78, 82], "data": [2, 28, 29, 36, 38, 50, 63, 64, 67, 74, 75, 77, 81, 82], "rate": [2, 3, 7, 8, 28, 29, 38, 41, 61, 62, 63, 68, 70, 71, 82], "direct": [2, 4, 6, 16, 19, 25, 26, 38, 44, 62, 64, 70, 71, 72, 73, 78, 82], "from": [2, 3, 6, 7, 8, 15, 16, 22, 24, 28, 31, 37, 38, 41, 49, 50, 62, 65, 67, 68, 70, 71, 72, 73, 75, 77, 78, 81, 82, 83], "receiv": [2, 3, 4, 6, 7, 8, 38, 39, 49, 50, 54, 62, 64, 67, 68, 70, 71, 72, 73, 74, 77, 78, 80, 81, 82, 83], "intermedi": [2, 77], "a10nsp": [2, 8, 16, 17, 40, 41, 44, 62, 64, 68, 72, 73, 82], "accept": [2, 7, 16, 24, 38, 58, 70, 73], "follow": [2, 3, 4, 5, 6, 7, 8, 16, 37, 38, 61, 64, 66, 67, 69, 70, 71, 72, 73, 74, 75, 77, 78, 79, 81, 82, 83], "basic": [2, 7, 66, 67, 73, 81], "explain": [2, 16, 38, 64, 69, 70, 72, 73], "eth4": [2, 70], "qinq": [2, 38, 40, 41, 70, 73], "ff": [2, 38, 41, 42, 44, 70], "eth5": [2, 70], "__comment__": [2, 64, 67, 72, 73], "stream": [2, 4, 6, 8, 25, 26, 27, 39, 41, 62, 63, 64, 65, 68, 70, 72, 73, 74, 75, 79, 83], "reconnect": [2, 3, 5, 7, 16, 25, 31, 36, 38, 59, 61, 67, 72, 73, 75], "uniq": [2, 7, 38, 59], "autostart": [2, 3, 5, 6, 8, 34, 36, 37, 38, 41, 60, 61, 62, 63, 66, 67, 70, 82], "pp": [2, 3, 6, 7, 8, 16, 26, 37, 38, 60, 62, 70, 71, 72, 73, 74, 75, 78, 82], "name": [2, 3, 6, 7, 8, 16, 23, 26, 34, 35, 38, 39, 40, 41, 42, 43, 44, 50, 59, 62, 64, 66, 67, 70, 71, 72, 73, 74, 75, 78, 79, 82, 83], "s1": [2, 72, 73, 74, 78], "length": [2, 3, 6, 37, 38, 50, 62, 65, 66, 70, 73, 75, 77, 78, 81, 82], "256": [2, 6, 38, 39, 46, 70, 73, 77, 82], "s2": [2, 73], "same": [2, 3, 4, 6, 16, 38, 50, 66, 67, 70, 72, 73, 74, 75, 78, 81, 82], "static": [2, 38, 41, 70, 71, 82], "directli": [2, 38, 39, 63, 70, 77, 81], "lag": [2, 16, 17, 42, 43, 68, 72, 83], "parent": [2, 38, 40, 41, 44, 70], "manual": [2, 38, 44, 66, 69, 70, 72, 75, 78, 79, 82], "automat": [2, 4, 5, 6, 7, 8, 16, 28, 31, 37, 38, 43, 47, 52, 59, 60, 61, 63, 64, 66, 70, 72, 75, 77, 81, 82], "balanc": [2, 38, 63, 72], "member": [2, 38, 42, 70], "thread": [2, 6, 38, 39, 43, 70, 72, 75, 83], "recommend": [2, 6, 38, 39, 63, 68, 69, 70, 72], "specifi": [2, 6, 8, 16, 23, 29, 37, 38, 60, 63, 73, 78, 82], "correspond": [2, 5, 6, 8, 16, 28, 38, 41, 60, 62, 64, 70, 72, 75, 78, 79, 82], "otherwis": [2, 82], "explicitli": [2, 64, 70, 78, 82], "autogener": [2, 6, 8, 38, 60], "experiment": [2, 38, 39, 44, 68, 69, 70, 72, 81], "featur": [2, 5, 16, 24, 28, 38, 68, 73, 82], "termin": [2, 5, 7, 16, 19, 38, 59, 64, 66, 73], "mpl": [2, 8, 38, 60, 62, 65, 68, 72, 76, 78, 82], "encapsul": [2, 29, 38, 82], "through": [2, 38, 39, 64, 66, 67, 68, 70, 73, 76, 78], "label": [2, 8, 31, 38, 44, 60, 62, 64, 68, 70, 73, 75, 78, 80, 82], "ingress": 2, "egress": 2, "transport": [2, 38, 44, 49, 70, 78], "switch": [2, 29, 38, 44, 70, 78], "eth2": [2, 3, 4, 6, 7, 38, 66, 67, 70, 72, 74, 77, 81, 82], "7331": [2, 3, 7, 66, 70, 73, 77, 82], "13370": 2, "p0": 2, "destin": [2, 4, 6, 16, 27, 34, 36, 38, 62, 66, 67, 70, 71, 72, 73, 78], "bgp": [2, 10, 31, 64, 68, 72, 76, 82, 83], "peer": [2, 3, 10, 16, 20, 31, 38, 49, 50, 73, 75, 77, 78], "raw": [2, 6, 10, 16, 20, 27, 31, 38, 39, 49, 62, 64, 65, 69, 73, 76], "updat": [2, 10, 16, 18, 19, 20, 22, 25, 26, 31, 38, 49, 73, 76], "file": [2, 6, 10, 16, 18, 20, 22, 23, 31, 38, 47, 49, 52, 64, 65, 68, 69, 72, 73, 74, 76, 83], "4200000001": 2, "4200000002": 2, "l2tpv2": [3, 68], "rfc2661": [3, 16, 19, 38, 50], "ln": [3, 50, 68, 83], "abl": [3, 72, 77, 79, 81], "lac": 3, "under": [3, 5, 7, 65, 66, 68, 70, 71, 75, 77, 78, 81, 82], "30": [3, 6, 7, 16, 18, 38, 46, 50, 55, 58, 66, 71, 72, 73, 77, 81], "pap": [3, 7, 38, 55, 74], "chap": [3, 7, 38, 55, 74], "ppp": [3, 41, 54, 55, 56, 57, 58, 59, 70], "mru": [3, 7, 38, 41, 54, 70], "1492": [3, 7, 38, 46, 54, 67, 77, 82], "de": [3, 66, 71, 77], "password": [3, 7, 16, 25, 38, 41, 55, 70], "lcp": [3, 5, 16, 19, 24, 50, 58, 73, 74], "conf": [3, 7, 38, 56, 57, 58, 73], "keepal": [3, 7, 38, 49, 58, 73, 78], "ipcp": [3, 5, 16, 24, 41, 50, 57, 70, 73, 74], "ip6cp": [3, 5, 16, 24, 41, 56, 70, 73, 74], "1024": [3, 7, 77, 81], "16384": [3, 7], "lns1": 3, "11": [3, 6, 64, 66, 69, 72, 73, 78, 79, 81], "secret": [3, 38, 50, 77, 79], "test1": 3, "window": [3, 38, 46, 50, 70, 73, 77, 83], "size": [3, 36, 38, 39, 43, 44, 46, 47, 50, 63, 67, 70, 72, 77, 82], "lns2": 3, "12": [3, 6, 8, 66, 72, 73, 81], "test2": 3, "lns3": 3, "test3": 3, "lns4": 3, "14": [3, 38, 41, 44, 64, 70, 72, 73], "test4": 3, "lns5": 3, "15": [3, 38, 49, 67, 72, 74, 78], "test5": 3, "lns6": 3, "16": [3, 38, 50, 72, 73, 81], "test6": 3, "lns7": 3, "17": [3, 72, 74], "test7": 3, "lns8": 3, "18": [3, 67, 69, 72, 74], "test8": 3, "lns9": 3, "19": [3, 72, 73, 74], "test9": 3, "lns10": 3, "20": [3, 6, 69, 70, 72, 73, 79, 82], "test10": 3, "lns11": 3, "21": [3, 67, 72, 78], "test11": 3, "lns12": 3, "22": [3, 64, 67, 69, 72, 73], "test12": 3, "lns13": 3, "23": [3, 6, 72, 78], "test13": 3, "lns14": 3, "24": [3, 4, 5, 7, 38, 44, 46, 66, 67, 70, 71, 72, 73, 75, 77, 78, 79, 81, 82], "test14": 3, "lns15": 3, "25": [3, 69, 72], "test15": 3, "lns16": 3, "26": [3, 72], "test16": 3, "lns17": 3, "27": [3, 72, 73], "test17": 3, "lns18": 3, "28": [3, 72, 73], "test18": 3, "lns19": 3, "29": [3, 72], "test19": 3, "lns20": 3, "test20": 3, "lns21": 3, "31": [3, 72, 73], "test21": 3, "lns22": 3, "32": [3, 38, 41, 44, 70, 72, 73, 78, 79], "test22": 3, "lns23": 3, "33": [3, 72, 82], "test23": 3, "lns24": 3, "34": [3, 78], "test24": 3, "lns25": 3, "35": [3, 72, 73], "test25": 3, "lns26": 3, "36": [3, 72, 73, 74], "test26": 3, "lns27": 3, "37": [3, 72, 73, 74, 78, 79, 82], "test27": 3, "lns28": 3, "38": [3, 72, 73, 74], "test28": 3, "lns29": 3, "39": [3, 72], "test29": 3, "lns30": 3, "40": [3, 38, 51, 74, 81], "test30": 3, "mandatori": [3, 10, 15, 16, 17, 18, 19, 20, 22, 25, 26, 29, 30, 31, 34, 35, 36, 38, 50, 53, 62, 66, 67, 75, 81, 82], "hostnam": [3, 38, 46, 49, 50, 51, 64, 73, 77, 78, 79, 81], "avp": [3, 38, 50], "tunnel": [3, 16, 19, 38, 50], "messag": [3, 7, 12, 16, 19, 28, 31, 38, 49, 50, 57, 58, 64, 67, 73, 75, 76, 77, 78, 81], "65535": [3, 7, 29, 30, 31, 34, 35, 36, 38, 39, 41, 44, 46, 49, 50, 51, 54, 62, 66, 67, 70, 73, 75, 77, 78, 81, 82], "congest": [3, 6, 38, 50], "slow": [3, 38, 50], "aggress": [3, 38, 50], "reliabl": [3, 6, 38, 50, 71], "deliveri": [3, 38, 50, 81], "describ": [3, 38, 50, 77, 81], "appendix": [3, 38, 50], "channel": [3, 6, 37, 38, 50], "avoid": [3, 38, 50], "fix": [3, 38, 50, 68, 82], "stick": [3, 38, 50], "permit": [3, 28, 38, 50], "hello": [3, 38, 46, 49, 50, 51, 77, 78, 81], "bit": [3, 36, 38, 50, 62, 67, 82], "non": [3, 38, 50, 68, 70, 72, 76], "offset": [3, 38, 50, 82], "sccrq": [3, 38, 50], "icrq": [3, 38, 50], "pad": [3, 38, 46, 50, 74, 77], "client": [3, 6, 9, 12, 13, 14, 16, 30, 34, 36, 41, 50, 62, 64, 68, 70, 72, 73, 77, 81, 82], "auth": [3, 38, 46, 50, 51, 73, 77, 79, 81], "check": [3, 6, 38, 50, 64, 69, 73, 77, 81, 82], "result": [3, 6, 16, 19, 36, 37, 38, 49, 62, 63, 64, 65, 67, 72, 73, 74, 78, 82], "just": [3, 66, 69], "four": 3, "store": [3, 7, 64, 65, 74, 82], "csun": 3, "process": [3, 6, 37, 38, 64, 72, 82], "correctli": [3, 8, 69, 71], "via": [3, 7, 38, 44, 54, 69, 70, 75, 76, 82], "socket": [3, 16, 38, 39, 64, 70, 72, 73, 77, 79, 81], "csurq": [3, 16, 19], "about": [3, 4, 16, 64, 68, 74, 81, 82], "50011": 3, "inc": [3, 68], "102": [3, 6], "dup": 3, "out": [3, 68, 69, 73, 78], "order": [3, 38, 72, 82], "1406": 3, "206": [3, 38, 39, 70, 74], "return": [3, 7, 15, 16, 64, 71, 72, 81, 82], "32867": 3, "proxi": 3, "sub": [3, 4, 71, 82], "bp": [3, 38, 62, 82], "48000": 3, "ari": 3, "aci": 3, "79": [3, 8, 73], "output": [3, 64, 66, 69, 75, 78, 82, 83], "filter": [3, 66, 71, 73, 82, 83], "given": [3, 8, 38, 62, 72, 81, 82], "displai": [3, 4, 9, 10, 13, 14, 15, 16, 18, 19, 20, 22, 25, 26, 71], "mediat": 4, "statist": [4, 16, 21, 25, 26, 38, 63, 64, 68, 73, 74, 82], "todai": 4, "bcm": 4, "qmx": 4, "format": [4, 38, 41, 44, 64, 70, 82], "further": [4, 6, 64, 68, 71, 72, 73, 75, 78, 82], "easili": [4, 69, 74, 75, 78, 82, 83], "integr": [4, 64], "9": [4, 8, 64, 70, 72, 75, 77, 78, 81, 82], "d": [4, 64], "pt": 4, "spt": 4, "liid": 4, "work": [4, 5, 6, 8, 16, 26, 69, 71, 72, 73, 81, 82], "standalon": [4, 73], "100": [4, 6, 7, 8, 38, 63, 66, 67, 69, 70, 71, 72, 73, 74, 75, 77, 82], "sourc": [4, 6, 31, 36, 37, 38, 62, 67, 71, 72, 75, 77, 78, 81], "49152": [4, 38, 63], "doubl": [4, 72], "4194301": 4, "byte": [4, 38, 39, 41, 46, 65, 70, 74, 77, 82], "94": 4, "tcp": [4, 16, 26, 34, 35, 38, 49, 62, 66, 73, 78, 83], "udp": [4, 38, 62, 63, 71, 78, 82], "intern": [4, 65, 71, 74, 77], "next": [4, 6, 37, 38, 66, 73, 75, 82], "160720": 4, "820": 4, "61": [4, 72], "ani": [4, 7, 28, 38, 64, 66, 67, 68, 69, 70, 71, 73, 82], "tester": [4, 66, 68], "59": [4, 72, 73, 79], "robust": [5, 6, 7, 37, 38, 71], "If": [5, 6, 7, 16, 23, 26, 31, 37, 38, 62, 68, 69, 70, 71, 73, 75, 82], "randomli": [5, 79], "kill": [5, 64], "restart": [5, 16, 25, 66, 68, 70], "padt": [5, 74], "e": [5, 6, 16, 26, 37, 38, 40, 41, 42, 43, 44, 63, 64, 70, 73, 77, 79, 81, 82], "g": [5, 6, 16, 26, 37, 38, 40, 41, 42, 43, 44, 62, 63, 64, 70, 79, 81, 82], "power": [5, 8, 29, 38], "outag": 5, "gracefulli": [5, 64], "flap": [5, 16, 18, 74, 76], "independ": 5, "similarli": 5, "auto": [5, 16, 27, 38, 47, 77], "could": [5, 65, 71, 74, 79, 82, 83], "maximum": [5, 6, 7, 29, 37, 38, 39, 41, 42, 49, 54, 63, 70, 72, 74, 78, 82], "As": [5, 64, 69], "soon": [5, 8, 31, 38, 60, 64, 75, 78, 82], "after": [5, 6, 31, 36, 37, 38, 61, 62, 64, 67, 71, 73, 75, 78, 82], "hour": 5, "wait": [5, 6, 37, 38, 44, 61, 62, 66, 70, 71, 82], "becom": [5, 7, 38, 62, 64, 66, 71, 82], "again": [5, 73], "fulli": [5, 68], "recov": [5, 65], "hang": 5, "crash": 5, "memori": [5, 64, 68, 70, 72, 75, 78], "leak": [5, 77], "advanc": [6, 73], "focu": [6, 71], "therefor": [6, 7, 28, 38, 64, 70, 71, 72, 73, 75, 78], "igmp": [6, 15, 37, 41, 70, 74, 83], "version": [6, 29, 37, 38, 41, 51, 64, 66, 69, 70, 71, 73, 77, 78, 79, 81], "implement": [6, 68, 70], "record": [6, 37, 38, 71], "extern": [6, 47, 48, 52, 53, 64, 71, 73, 77, 79, 81], "show": [6, 8, 64, 69, 70, 71, 72, 73, 75, 77, 78, 79, 81, 82, 83], "how": [6, 8, 37, 38, 63, 64, 70, 72, 73, 74, 75, 77, 81, 83], "millisecond": [6, 7, 37, 38, 39, 43, 58, 63, 70], "239": [6, 16, 37, 38, 82], "count": [6, 7, 15, 16, 36, 37, 38, 61, 62, 64, 67, 75, 78, 79, 82], "measur": [6, 8, 37, 38, 63, 68, 74, 75, 82], "delai": [6, 7, 16, 25, 29, 34, 36, 37, 38, 58, 61, 62, 63, 66, 67, 71, 82], "mc1": 6, "mc2": 6, "distribut": [6, 38, 63, 64, 69, 72, 78], "modifi": [6, 38, 39, 70, 75, 78, 79, 82], "enough": [6, 70, 71, 77, 82], "proper": [6, 83], "recogn": 6, "sequenc": [6, 8, 38, 41, 44, 70, 73, 74, 77, 79, 81, 83], "particular": [6, 16, 26, 71, 74, 82], "gap": [6, 82], "last": [6, 12, 16, 74, 75, 82], "would": [6, 8, 65, 72, 73, 74, 82], "report": [6, 8, 37, 38, 68, 73, 82], "argument": [6, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 22, 23, 24, 25, 26, 64, 69, 74, 75, 77, 78, 79, 81, 82, 83], "l": [6, 67, 73, 75, 78, 79, 81, 83], "log": [6, 16, 67, 73, 75, 78, 79], "help": [6, 64, 71, 75, 78, 79, 83], "search": [6, 74], "miss": 6, "captur": [6, 16, 23, 38, 39, 64, 65, 68, 70, 71, 72, 73, 83], "consum": 6, "do": [6, 16, 70, 72, 82], "232": 6, "source1": [6, 15, 16], "202": 6, "source2": [6, 15, 16], "source3": [6, 15, 16], "103": 6, "1291": 6, "activ": [6, 38, 42, 64, 68, 70, 71, 77, 78, 81, 82], "m": [6, 38, 46, 62, 63, 73, 74, 75, 77, 78, 79, 82], "139": [6, 74], "7456": 6, "idl": [6, 66, 73], "114": [6, 82], "kei": [6, 16, 38, 46, 51, 73, 77, 79, 81, 82], "element": [6, 16], "long": [6, 68], "doe": [6, 16, 27, 65, 82], "take": [6, 29, 38, 64, 68, 75], "right": 6, "old": 6, "overlap": 6, "lead": [6, 38, 63, 68], "sent": [6, 8, 37, 38, 39, 62, 63, 64, 70, 71, 72, 73, 78, 82, 83], "fast": [6, 7, 69, 70, 82], "typic": [6, 70, 71, 75, 82], "view": [6, 37, 38, 73], "durat": [6, 37, 38, 74], "within": [6, 29, 37, 38, 63, 65, 68, 71, 77], "igmpv3": [6, 37, 38], "appli": [6, 16, 26, 28, 29, 36, 37, 38, 62, 66, 67, 70, 71, 72, 73, 82], "293": [6, 37, 38], "asm": [6, 37, 38], "befor": [6, 36, 37, 38, 61, 62, 65, 66, 67, 69, 73, 82], "final": [6, 8, 16, 37, 38, 64, 73, 74, 77, 81], "often": [6, 37, 38, 72], "abov": [6, 37, 38, 66, 72], "threshold": [6, 37, 38], "mention": [6, 37, 38], "special": [6, 37, 38], "signatur": [6, 37, 38, 82], "faster": [6, 37, 38, 72, 82], "analysi": [6, 37, 38, 64, 71], "done": [6, 16, 38, 62, 71, 73, 77, 78, 81, 82], "correct": 6, "concept": 7, "lean": 7, "idea": [7, 65], "fail": [7, 69], "expect": [7, 16, 19, 29, 38, 62, 65, 75, 77, 81, 82], "condit": [7, 68, 71], "fulfil": [7, 68], "negoti": 7, "successfulli": [7, 16], "dn": [7, 38, 41, 44, 57, 70], "opposit": [7, 72, 82], "behav": [7, 70, 77, 81], "faulti": 7, "4049": [7, 70], "2000": [7, 70, 73, 77, 82], "2999": [7, 70], "outstand": [7, 38, 61], "800": [7, 38, 61], "400": [7, 38, 61, 66, 67], "infin": [7, 36, 38, 59, 62, 67, 82], "padi": [7, 38, 59, 74], "padr": [7, 38, 59, 74], "payload": [7, 38, 59, 62, 82], "rfc4638": [7, 38, 59], "unit": [7, 38, 54, 64], "propos": [7, 38, 54, 72], "reject": [7, 38, 55, 57], "echo": [7, 16, 24, 38, 58, 67, 70, 74], "ignor": [7, 12, 16, 24, 25, 26, 38, 57, 58, 78], "primari": [7, 38, 57, 66, 82], "129": [7, 38, 57], "secondari": [7, 38, 57], "131": [7, 38, 57], "chapter": [7, 38, 62, 82], "rfc": [7, 28, 29, 38, 77, 78], "2153": 7, "With": [7, 67, 68, 72], "oui": 7, "kind": [7, 68, 70, 82], "respond": [7, 67, 70], "copi": [7, 70], "respons": [7, 16, 64, 66, 71], "user1": [7, 73], "open": [7, 16, 24, 31, 38, 68, 73, 74, 75, 77, 81], "56": [7, 72, 73], "10036": 7, "10083": 7, "bidirect": [8, 16, 26, 38, 60, 62, 71, 72, 73, 82], "unicast": [8, 31, 38, 71, 73, 75], "tool": [8, 16, 19, 68, 71, 73, 75, 76, 77, 78, 79, 81], "quickli": [8, 68], "unlabel": [8, 38, 60], "overwrit": [8, 38, 40, 41, 43, 60, 62, 70, 82], "prefer": [8, 38, 49, 75, 78], "select": [8, 38, 39, 41, 62, 70, 82], "config": [8, 38, 64, 65, 69, 73, 74, 79, 82], "96000": 8, "16000": 8, "violat": [8, 74], "12278": 8, "3071": 8, "3040": 8, "6167": 8, "12252": 8, "76": [8, 38, 62, 82], "3185": 8, "2900": 8, "12306": 8, "82": 8, "3123": 8, "2978": 8, "6205": 8, "12314": 8, "83": 8, "3104": 8, "3033": 8, "6177": 8, "3184": 8, "2891": 8, "12361": 8, "88": [8, 74], "3178": 8, "2957": 8, "6226": 8, "73763": 8, "84": 8, "18845": 8, "17799": 8, "37119": 8, "avg": [8, 29, 38, 74], "converg": [8, 68], "64bit": 8, "assum": [8, 38, 49, 61, 72, 78, 82], "took": [8, 82], "until": [8, 38, 44, 62, 64, 66, 70, 71, 78, 82], "reset": [9, 15, 16, 25, 26, 38, 49, 62, 78, 82], "match": [10, 16, 19, 20, 67, 78], "disconnect": [10, 16, 19, 20], "teardown": [10, 16, 18, 20, 22, 31, 38, 46, 47, 49, 51, 52, 61, 66, 75, 77, 78, 81], "list": [10, 16, 17, 19, 20, 21, 25, 26, 38, 39, 64, 68, 70, 73, 75, 77, 81, 82, 83], "load": [10, 16, 18, 20, 22, 64, 73, 74, 75, 77, 78, 81], "path": [10, 16, 23, 75, 77, 81], "cfm": [11, 38, 41, 44, 70], "cc": [11, 16, 38, 41, 44, 70], "eoam": [11, 16, 38, 41, 44, 70], "rdi": [11, 16], "off": [11, 16, 72, 73], "unset": [11, 16], "dhcp": [12, 32, 41, 45, 66, 68, 70, 71, 74, 83], "present": [12, 16, 24, 25, 38, 64, 68], "rememb": [12, 16], "icmp": [14, 36, 41, 68, 70, 74, 83], "join": [15, 16, 37, 38, 83], "leav": [15, 16, 37, 38, 83], "zap": [15, 16, 37, 38], "stat": [15, 16, 26, 71, 73, 74, 78], "unix": 16, "domain": [16, 38, 41, 44, 70], "interact": [16, 64, 66, 73, 83], "json": [16, 38, 64, 69, 73, 75, 77, 79, 81, 83], "rpc": [16, 64, 73], "we": [16, 68, 72, 73, 75], "One": [16, 66, 70, 71, 77, 81], "commun": [16, 68, 70, 71], "contain": [16, 64, 68, 70, 77, 81], "carri": 16, "cat": [16, 72, 77, 81], "counter": [16, 25, 64, 82], "nc": 16, "2xx": 16, "warn": [16, 64, 75, 78], "error": [16, 19, 64, 74, 77, 79, 81, 83], "404": [16, 64], "user10": 16, "altern": [16, 28, 38, 61, 69, 77, 81], "replac": [16, 38, 70, 75, 76], "becaus": [16, 38, 62, 77, 82], "eth0": [16, 38, 40, 41, 43, 44, 70, 72, 78], "python": [16, 74, 75, 78], "script": [16, 64, 74, 75, 78, 82, 83], "simpl": [16, 38, 46, 51, 68, 73, 74, 75, 77, 78, 79, 81, 82], "here": [16, 29, 38, 49, 65, 73, 75, 78, 79], "complex": [16, 71], "chain": 16, "pend": [16, 25, 26], "Then": [16, 69, 73], "extract": [16, 74], "flat": 16, "read": [16, 70, 73, 79], "index": [16, 17, 82], "summari": [16, 25, 26, 82], "close": [16, 23, 24, 38, 63, 66, 71, 73, 77, 81], "enforc": [16, 24, 64], "restor": [16, 24], "speed": [16, 19], "execut": [16, 19, 31, 38, 64, 66, 69, 74, 75], "rfc3145": [16, 19], "alter": [16, 27], "current": [16, 23, 27, 38, 39, 63, 64, 70, 72, 75, 77, 78, 82], "ha": [16, 27, 28, 31, 38, 62, 64, 68, 69, 71, 72, 73, 75, 77, 78, 79, 82, 83], "been": [16, 27, 68, 71, 74, 77, 79, 83], "t": [16, 27, 38, 68, 70, 71, 72, 73, 79, 82], "instead": [16, 27, 36, 38, 67], "act": [16, 27, 29, 38], "transmiss": [16, 27, 38, 63, 68, 81], "debug": [16, 26, 64, 69, 75, 78, 79, 83], "except": [16, 26, 38, 39, 70, 77, 81, 82], "fin": [16, 26], "syn": [16, 26, 71, 82], "rst": [16, 26], "push": [16, 26], "adjac": [16, 18, 20, 38, 46, 73, 81], "databas": [16, 18, 20, 22, 38, 47, 74, 78], "lsdb": [16, 18, 22, 79], "level": [16, 18, 38, 41, 44, 46, 48, 70, 73, 75, 77, 78, 79], "mrt": [16, 18, 22, 38, 47, 52, 73, 75, 76, 79], "lsp": [16, 18, 38, 46, 47, 73, 76, 78, 79, 81], "pdu": [16, 18, 22, 38, 49, 77, 78, 81], "purg": [16, 18, 38, 47, 52, 77, 79, 81], "timer": [16, 18, 68], "127": [16, 18, 73, 74], "neighbor": [16, 22, 38, 53, 73], "lsa": [16, 22, 38, 51, 52, 76, 77], "remain": [16, 23, 72, 77], "isi": [18, 44, 46, 47, 48, 64, 68, 70, 76, 79, 82, 83], "ldp": [20, 44, 49, 62, 68, 70, 76, 82], "ospf": [22, 51, 52, 53, 68, 76, 79], "pcap": [23, 65, 73, 75, 77, 78, 79, 81], "design": [28, 38, 71, 72, 75, 76, 77, 81, 82], "subsequ": [28, 38], "emploi": [28, 38], "overwritten": [28, 29, 38], "string": [28, 38, 41, 44, 64, 70], "variabl": [28, 70, 77, 81], "substitut": [28, 38, 70], "ascii": [28, 38, 41, 44, 70, 82], "4294967295": [28, 29, 31, 38, 41, 53, 70, 75, 81], "dsl": [28, 29, 38, 41, 70], "exclud": [28, 38, 82, 83], "imposs": [28, 38], "word": [28, 38, 82], "context": [28, 38, 73], "exclus": [28, 36, 38, 67, 78, 79], "dictat": [28, 38], "deviat": [28, 38], "guidelin": [28, 38], "either": [28, 38, 64, 66, 67, 69, 82], "profil": [29, 41, 70], "treat": [29, 38], "analog": [29, 38], "minimum": [29, 38, 41, 42, 70, 74, 82], "att": [29, 38], "attain": [29, 38], "datar": [29, 38], "low": [29, 38, 68, 70], "interl": [29, 38], "interleav": [29, 38], "encap": [29, 38], "pon": [29, 38], "etr": [29, 38], "throughput": [29, 38, 39, 63, 70, 72], "attetr": [29, 38], "gdr": [29, 38], "gamma": [29, 38], "attgdr": [29, 38], "ont": [29, 38], "onu": [29, 38], "averag": [29, 38, 74], "peak": [29, 38], "ass": [29, 38], "assur": [29, 38], "tree": [29, 38], "draft": [29, 38, 77], "lihawi": [29, 38], "04": [29, 38, 64, 69, 73, 79], "ancp": [29, 38], "extens": [29, 38, 64, 73, 74], "preced": [29, 38], "creat": [30, 36, 38, 41, 61, 67, 70, 73, 75, 76, 77, 78, 79, 81, 82], "target": [30, 38, 63, 69, 78], "resolv": [30, 38, 44, 61, 62, 68, 70, 71, 73, 78, 82], "AS": [31, 38, 73, 75], "65000": [31, 38, 75], "hold": [31, 38, 46, 49, 73, 75, 77, 78], "90": [31, 38, 73, 75], "ttl": [31, 36, 38, 62, 67, 75, 82], "finish": [31, 38, 73, 75], "famili": [31, 38, 75], "vpn": [31, 38, 75], "evpn": [31, 38, 75], "nexthop": [31, 38, 75], "none": [31, 38, 41, 44, 70, 75, 79], "url": [34, 38, 66, 71], "80": [34, 35, 38, 66, 71], "when": [36, 38, 66, 67, 71, 78, 82], "mutual": [36, 38, 67, 78], "them": [36, 38, 64, 66, 67, 70, 73, 77, 79, 81], "65507": [36, 38, 67, 77], "track": [36, 38, 67, 68, 82], "df": [36, 38, 62, 67, 82], "dont": [36, 38, 67], "fragement": [36, 38, 67], "minim": 38, "reloc": 38, "howev": [38, 66, 72, 79], "import": [38, 74, 77, 79, 81], "note": [38, 81], "main": [38, 39, 64, 70, 72, 77, 81], "approach": 38, "prove": 38, "benefici": 38, "conduct": [38, 68], "involv": [38, 68], "million": [38, 64, 68, 71, 72], "distinct": 38, "maintain": [38, 63, 67, 68, 78], "organ": 38, "effect": [38, 49, 66, 71, 78, 82], "your": [38, 65, 68, 70, 72, 73, 75, 78], "empow": 38, "larg": [38, 63, 64, 68, 70, 71, 77, 79, 81], "scale": [38, 68, 72], "eas": [38, 64], "c": [38, 68, 69, 72, 73, 79, 83], "md": [38, 41, 44, 70], "ma": [38, 41, 44, 70], "increment": [38, 62, 70, 75, 78, 82], "i1": [38, 41, 70], "i2": [38, 41, 70], "10000": [38, 73, 78], "io": [38, 39, 43, 64, 65, 69, 70, 72, 74, 82, 83], "packet_mmap_raw": [38, 39, 69, 70], "consid": [38, 39, 64, 65, 70, 72, 81, 82], "mmap": [38, 39, 65], "ring": [38, 39, 43, 70], "buffer": [38, 39, 46, 70, 77], "slot": [38, 39, 43, 70, 72], "might": [38, 39, 70, 77, 81, 82], "reach": [38, 39, 70, 72, 82], "desir": [38, 39, 63, 70, 74, 79], "depend": [38, 39, 47, 65, 70, 72, 77, 82], "4096": [38, 39, 46, 70, 77], "burst": [38, 39, 43, 62, 63, 70, 82], "qdisc": [38, 39, 43, 70], "bypass": [38, 39, 43, 70], "kernel": [38, 39, 43, 65, 70], "issu": [38, 39, 64, 68, 70, 71, 72], "poll": [38, 39, 43, 70, 74], "0001": [38, 39, 46, 70, 73, 77, 79], "third": [38, 39, 41, 69, 70], "disjoint": [38, 39, 70], "tun": [38, 39, 41, 70], "bbl": [38, 39, 63, 70, 82], "bbl1": [38, 39, 70], "bbl2": [38, 39, 70], "explicit": [38, 43, 70], "referenc": [38, 43, 70, 75, 79], "physic": [38, 43, 70, 72], "32768": [38, 42, 43, 70, 72], "cpuset": [38, 43, 70, 72], "pin": [38, 43, 70], "cpu": [38, 43, 68, 70, 72], "dpdk": [38, 43, 68, 83], "lag0": [38, 42, 70], "short": [38, 41, 42, 44, 68, 70], "3x1": [38, 42, 70], "3x30": [38, 42, 70], "system": [38, 42, 46, 48, 64, 65, 71, 72, 73, 75, 77, 79, 82], "multithread": [38, 42, 70, 72], "router": [38, 44, 46, 51, 53, 65, 68, 70, 73, 76, 77, 78, 79, 81], "ra": [38, 44, 70], "mtu": [38, 44, 67, 70, 82], "1500": [38, 44, 70, 74], "9000": [38, 44, 62, 65, 70, 82], "p2p": [38, 44, 70, 73, 77, 81], "l1": [38, 44, 48, 70, 73, 74, 77], "metric": [38, 44, 48, 53, 70, 73, 77, 79, 81], "l2": [38, 44, 48, 70, 73, 77, 82], "ospfv2": [38, 44, 53, 68, 70, 79, 81], "ospfv3": [38, 44, 53, 70], "mainten": [38, 41, 44, 70], "ccm": [38, 41, 44, 70], "ieee": [38, 41, 44, 70], "802": [38, 41, 44, 70], "1q": [38, 41, 44, 70], "encod": [38, 41, 44, 70, 77, 81], "33m": [38, 41, 44, 70], "10m": [38, 41, 44, 70], "100m": [38, 41, 44, 70], "1min": [38, 41, 44, 70], "10min": [38, 41, 44, 70], "mac_int": [38, 41, 44, 70], "aa": [38, 41, 44, 70], "bb": [38, 41, 44, 70], "dd": [38, 41, 44, 70], "ee": [38, 41, 44, 70], "123": [38, 41, 44, 70], "uint16": [38, 41, 44, 70], "vpn_id": [38, 41, 44, 70], "hex": [38, 41, 44, 70, 77, 81], "digit": [38, 41, 44, 70], "icc": [38, 41, 44, 70], "char": [38, 41, 44, 70], "pcp": [38, 41, 44, 70], "dowstream": [38, 44, 70], "ethertyp": [38, 40, 41, 70], "0x88a8": [38, 40, 41, 70], "equal": [38, 41, 62, 70, 77, 81, 82], "deactiv": [38, 41, 70], "10000000": [38, 41, 70], "caution": [38, 41, 70, 72], "sinc": [38, 41, 64, 70], "significantli": [38, 41, 70], "impact": [38, 41, 70, 71], "scalabl": [38, 41, 70, 71], "setup": [38, 61, 62, 67, 68, 72, 73, 78, 82], "signal": [38, 63, 64, 68], "calcul": [38, 49, 62, 63, 65, 71, 74, 78, 82], "massiv": [38, 63, 64, 68, 72], "1m": [38, 63, 67, 71], "live": [38, 63, 71, 76], "regul": [38, 63], "determin": [38, 63, 81, 82], "consist": [38, 63, 82], "influenc": [38, 63], "affect": [38, 63], "adher": [38, 63], "smaller": [38, 49, 63, 78], "smoother": [38, 63], "reduc": [38, 63], "risk": [38, 63], "micro": [38, 63], "fall": [38, 63], "intend": [38, 63], "larger": [38, 63, 70, 78], "toler": [38, 63], "find": [38, 63, 68], "prevent": [38, 63, 65, 66, 70, 72], "checksum": [38, 63, 73], "reassembl": [38, 63, 82], "reassembli": [38, 63, 82], "restrict": [38, 63, 68], "65056": [38, 62, 71, 82], "see": [38, 62, 68, 71, 73, 82], "tc": [38, 49, 62, 78, 82], "float": [38, 62, 82], "helper": [38, 62, 82], "put": [38, 62, 64, 82], "capit": [38, 62, 82], "letter": [38, 62, 82], "k": [38, 62, 73, 79, 82], "kilo": [38, 62, 82], "mega": [38, 62, 82], "giga": [38, 62, 82], "front": [38, 62, 82], "better": [38, 62, 68, 71, 74, 82], "readabl": [38, 62, 82], "gbp": [38, 62, 82], "1000000000": [38, 62, 82], "900": [38, 62, 82], "rpf": [38, 62, 82], "label1": [38, 62, 82], "exp": [38, 62, 82], "label2": [38, 62, 82], "lookup": [38, 62, 73, 78, 82], "nat": [38, 62, 66, 68, 82], "level1": [38, 46, 73, 77, 79], "md5": [38, 46, 51, 73, 77, 79, 81], "csnp": [38, 46, 77], "psnp": [38, 46, 77], "level2": [38, 46, 77], "lspbuffers": [38, 46, 77], "9192": [38, 46, 77], "lifetim": [38, 46, 73, 75, 77, 78, 79], "330": [38, 46, 77], "refresh": [38, 46, 47, 73, 77], "0100": [38, 46, 77], "0010": [38, 46, 77], "49": [38, 46, 73, 77, 79], "sr": [38, 46, 51, 73, 77, 79, 81], "algo": [38, 46, 77], "algorithm": [38, 46, 77, 81], "1048575": [38, 46, 51, 77, 81], "sid": [38, 46, 51, 73, 77, 81], "dure": [38, 47, 52, 64, 75, 77, 78, 81], "reason": [38, 47, 77], "dead": [38, 51, 81], "chosen": [38, 49, 78], "indic": [38, 49, 78, 82], "elaps": [38, 49, 78], "receipt": [38, 49, 78], "success": [38, 49, 78], "arriv": [38, 49, 78], "divid": [38, 49, 74, 78, 82], "lsr": [38, 49, 73, 78], "discard": [38, 49, 73, 78], "accord": [38, 49, 66, 78], "rfc7552": [38, 49, 78], "conveni": 64, "rest": [64, 76], "serv": [64, 68, 71], "simplifi": 64, "expos": 64, "programmat": 64, "paramet": [64, 66, 70, 73, 82], "monitor": [64, 75], "progress": 64, "standard": [64, 69, 75, 77, 83], "intuit": 64, "autom": [64, 68], "endpoint": [64, 71, 82], "download": [64, 69, 83], "retriev": 64, "encount": 64, "analyz": [64, 71, 74, 75, 83], "outcom": 64, "troubleshoot": [64, 68, 69], "problem": 64, "document": [64, 68], "purpos": [64, 66, 68, 71], "enhanc": [64, 68, 71, 72, 75, 79], "overal": [64, 66], "streamlin": 64, "seamless": 64, "github": [64, 66, 68, 69, 75], "modern": [64, 68, 69, 72], "linux": [64, 68, 69, 70], "primarili": [64, 69, 72], "debian": [64, 69, 72], "bookworm": [64, 69], "ubuntu": 64, "lt": [64, 69], "packag": [64, 69, 72], "wget": [64, 69], "controller_": 64, "_amd64": 64, "deb": [64, 69], "dpkg": [64, 69], "systemctl": 64, "bngblasterctrl": 64, "lib": 64, "systemd": 64, "preset": 64, "fri": 64, "2022": [64, 68, 73], "07": 64, "utc": 64, "7min": 64, "ago": 64, "pid": 64, "682535": 64, "task": [64, 77], "309235": 64, "6m": 64, "cgroup": 64, "slice": 64, "usr": [64, 69, 74], "bin": [64, 69, 74], "listen": 64, "8001": 64, "addr": [64, 67], "etc": 64, "usag": [64, 71, 75, 78, 79], "color": 64, "turn": 64, "consol": 64, "pretti": 64, "folder": 64, "var": 64, "sbin": [64, 69], "openapi": 64, "v1": [64, 69], "alreadi": [64, 75], "bodi": 64, "directori": [64, 69, 73, 83], "run_report": 64, "stderr": [64, 77, 81], "stdout": 64, "curl": 64, "quickstart_pppo": 64, "content": [64, 66], "veth1": [64, 73], "_start": 64, "logging_flag": 64, "session_count": 64, "schema": 64, "get": [64, 68, 70, 73, 82], "_command": 64, "pass": [64, 69, 71], "bngbnlaster": 64, "back": [64, 82], "_stop": 64, "sigint": 64, "int": [64, 82], "forcefulli": 64, "report_flag": 64, "huge": 64, "around": [64, 70, 82], "500mb": 64, "categori": 64, "pleas": 64, "pcap_captur": 64, "prometheu": 64, "text": 64, "instances_run": 64, "gaug": 64, "instances_tot": 64, "metric_flag": 64, "access_interfac": 64, "network_interfac": 64, "a10nsp_interfac": 64, "000": [64, 72, 73], "instance_nam": 64, "sessions_establish": 64, "interfaces_rx_packet": 64, "rbf": 64, "interface_nam": 64, "interface_typ": 64, "163": 64, "eth11": 64, "155": 64, "eth12": 64, "158": 64, "150": [64, 74], "driver": [65, 69, 70, 72, 82], "drop": [65, 83], "tri": 65, "occur": [65, 75], "potenti": [65, 71], "failur": 65, "overseen": 65, "why": 65, "3936": [65, 70], "pages": [65, 70], "minu": [65, 70], "overhead": [65, 70], "redirect": 66, "abil": [66, 71, 72], "top": [66, 73], "sever": [66, 75, 82], "translat": [66, 71], "rule": [66, 75], "accuraci": 66, "moreov": 66, "across": [66, 72, 82], "compat": 66, "bind": [66, 67], "startup": [66, 75, 77, 78, 81], "begin": 66, "give": [66, 74], "effici": [66, 71, 77, 81], "minor": [66, 71], "302": 66, "msg": [66, 71, 73], "nlocat": 66, "ncontent": 66, "nserver": [66, 71], "demonstr": [66, 75], "mark": [66, 77], "resum": [66, 82], "previous": 66, "continu": [66, 72, 82], "less": [66, 72, 82], "random": 66, "attempt": 66, "ping": [67, 71], "come": 67, "beyond": [67, 68, 72], "simpli": [67, 68], "consequ": 67, "unreach": 67, "exceed": 67, "properli": [67, 72], "made": 67, "dec": 67, "58": [67, 72], "394677": 67, "395566": 67, "727988": 67, "728992": 67, "63": [67, 72, 73], "rtt": 67, "927569": 67, "928480": 67, "origin": [68, 77, 81], "undergon": 68, "signific": 68, "evolut": 68, "transform": 68, "now": [68, 69, 71, 73, 74, 77, 81, 82], "encompass": [68, 71], "Its": 68, "scope": [68, 82], "expand": [68, 71], "broader": 68, "spectrum": [68, 71], "contrari": 68, "nomenclatur": 68, "isn": 68, "addition": [68, 76], "capac": 68, "verif": [68, 82], "complet": [68, 77, 81], "tabl": [68, 72, 74, 75], "queue": [68, 70, 72], "edg": 68, "latenc": [68, 82], "deutsch": 68, "telekom": 68, "ag": [68, 81], "famou": 68, "project": [68, 69, 75], "hard": [68, 72], "softwar": [68, 70, 72], "footprint": 68, "machin": [68, 73], "space": [68, 70], "friendli": 68, "api": [68, 73, 76, 82], "suit": [68, 71], "thousand": 68, "topologi": [68, 73, 76, 77, 81, 82], "segment": 68, "cgnat": 68, "introduct": [68, 79], "denog15": 68, "There": [68, 69, 73, 75, 78, 81, 82], "video": 68, "built": [68, 71, 76, 78], "scratch": 68, "veri": 68, "event": [68, 83], "loop": [68, 79], "constant": [68, 71, 82], "o": [68, 72, 77, 81], "librari": [68, 75, 78], "delet": 68, "fsm": 68, "evolv": 68, "build": [68, 72, 75, 77, 78, 81], "serious": 68, "look": 68, "contribut": [68, 72], "bug": 68, "welcom": [68, 72], "interest": 68, "go": [68, 73], "quick": 68, "guid": [68, 69, 70, 71], "our": [68, 72], "mission": 68, "instal": [68, 72, 73], "quickstart": 68, "frequent": 68, "ask": 68, "question": 68, "mail": 68, "chat": 68, "matrix": 68, "apnic": 68, "blog": 68, "dknog14": 68, "2024": 68, "2023": 68, "uknof49": 68, "denog13": 68, "2021": 68, "cp": [68, 74, 75], "dp": [68, 75], "bsd": 68, "claus": 68, "free": [68, 72], "commerci": 68, "2020": 68, "2026": 68, "apt": [69, 73], "y": [69, 79], "libssl1": 69, "libncurses5": 69, "libjansson4": 69, "newer": [69, 77, 81], "libssl3": 69, "libncurses6": 69, "libdict": 69, "fork": 69, "unzip": 69, "zip": 69, "libdict_1": 69, "5_amd64": 69, "dev_1": 69, "cmake": 69, "libpcap": 69, "dev": [69, 70, 73], "libcunit1": 69, "libssl": 69, "libjansson": 69, "libnuma": 69, "symbol": 69, "relwithdebinfo": 69, "git": 69, "clone": 69, "cd": 69, "mkdir": 69, "dcmake_build_typ": 69, "gdb": 69, "cpack": 69, "dgit_ref": 69, "rev": 69, "pars": 69, "abbrev": 69, "ref": 69, "head": 69, "dgit_sha": 69, "sha": 69, "df453a5ee9dbf6440aefbfb9630fa0f06e326d44": 69, "packet_mmap": [69, 70], "cmocka": 69, "libcmocka": 69, "bngblaster_test": 69, "dbngblaster_test": 69, "ON": 69, "testprotocol": 69, "sec": 69, "linux_gsg": 69, "build_dpdk": 69, "meson": 69, "ninja": 69, "rel": 69, "tar": 69, "xz": 69, "xjf": 69, "sdk": 69, "denable_driver_sdk": 69, "ldconfig": 69, "dbngblaster_dpdk": 69, "pkgconfig": 69, "pkg": 69, "modul": 69, "libdpdk": 69, "compil": [69, 70, 75, 78], "gnu": [69, 70], "permiss": 69, "easiest": 69, "root": [69, 73, 79], "normal": [69, 79], "binari": [69, 75, 78], "setcap": 69, "cap_net_raw": 69, "cap_net_admin": 69, "cap_dac_read_search": 69, "eip": 69, "distinguish": [70, 77, 81], "logic": 70, "attach": [70, 73, 76, 77, 78, 79, 81], "At": 70, "archiv": 70, "netplan": 70, "render": 70, "networkd": 70, "dhcp4": 70, "dhcp6": 70, "hardwar": [70, 72], "higher": [70, 72], "ethtool": [70, 72, 73], "ens5f1": 70, "pre": [70, 75, 78], "mini": 70, "jumbo": 70, "512": 70, "txqueuelen": 70, "lag1": 70, "face": 70, "side": [70, 72, 73], "learn": [70, 71, 77, 78, 81, 83], "own": [70, 72, 75, 77, 78, 81], "inject": [70, 75, 76, 77, 78, 81], "eth3": [70, 74], "s100": 70, "s200": 70, "pta": 70, "belong": [70, 82], "025": 70, "resid": 70, "packet_rx_r": 70, "packet_tx_r": 70, "abstract": 70, "program": 70, "lane": 70, "write": [70, 75, 78, 79, 81], "transmit": [70, 76], "expens": 70, "easi": 70, "calcualt": [70, 71], "osi": [70, 77], "steam": 70, "technologi": [71, 72], "comput": [71, 72, 81], "public": 71, "privat": 71, "entri": [71, 74, 77, 81], "conceal": 71, "structur": 71, "carrier": 71, "grade": 71, "isp": 71, "compani": 71, "scarciti": 71, "incorpor": 71, "tailor": 71, "instrument": 71, "demand": 71, "multitud": 71, "pool": [71, 72], "experi": 71, "broad": 71, "tradit": 71, "rigor": 71, "examin": 71, "invalu": 71, "resourc": 71, "profession": 71, "udp1": 71, "192": [71, 73, 77, 79], "configuraton": [71, 82], "destion": 71, "udp2": 71, "48523": 71, "tcp1": [71, 82], "stand": [71, 72, 82], "alon": [71, 82], "firewal": [71, 82], "adopt": [71, 82], "exist": [71, 75, 77, 78, 81], "uncahng": 71, "x": [71, 75, 79, 83], "enp6s21": 71, "254": 71, "enp6s20": 71, "c1": 71, "c2": 71, "nx": 71, "63122": 71, "63121": 71, "unfortun": 71, "nate": 71, "leverag": 71, "still": [71, 72, 73, 81, 82, 83], "100k": 71, "achiev": 72, "250": 72, "much": 72, "driven": 72, "split": 72, "workload": 72, "worker": 72, "asymmetr": 72, "unidirect": [72, 82], "vice": 72, "versa": 72, "full": [72, 75], "cach": 72, "coher": 72, "everyth": 72, "far": 72, "alwai": [72, 82], "rss": 72, "incom": 72, "improv": 72, "hash": 72, "adapt": [72, 81], "0x8100": 72, "best": [72, 81], "intel": 72, "person": 72, "ddp": 72, "boost": 72, "adjust": 72, "700": 72, "seri": [72, 74, 75, 78], "vari": 72, "usec": 72, "125": 72, "uniform": 72, "multi": 72, "processor": 72, "deriv": [72, 74], "sy": [72, 77, 81], "net": 72, "numa_nod": 72, "lscpu": 72, "node0": 72, "53": [72, 73], "node1": [72, 79], "54": [72, 73], "71": 72, "folow": 72, "55": [72, 73, 79], "57": 72, "nic": 72, "20g": 72, "ens2f2np2": 72, "ens2f3np3": 72, "ens5f2np2": 72, "ens5f3np3": 72, "62": [72, 74], "65": 72, "66": 72, "67": 72, "68": 72, "69": [72, 74], "offici": 72, "0000": [72, 73, 77, 79], "ll": 73, "walk": 73, "pair": 73, "veth": 73, "let": 73, "mar": 73, "303904": 73, "303952": 73, "396765": 73, "press": 73, "ctrl": [73, 79], "print": [73, 77, 81], "j": [73, 74], "p": [73, 75, 78, 79, 83], "what": 73, "happen": [73, 75], "cours": [73, 83], "try": [73, 77, 81], "f1": 73, "navig": 73, "keyboard": [73, 82], "input": [73, 83], "left": 73, "corner": 73, "f9": 73, "enter": 73, "familiar": 73, "repeat": [73, 82], "r1": [73, 77, 79, 81], "r2": [73, 77, 79, 81], "0002": [73, 77, 79], "1921": [73, 77, 79], "6800": [73, 77, 79], "168": [73, 77, 79], "secret123": [73, 79], "1002": [73, 77], "raw1": 73, "lspgen": [73, 76], "647569": 73, "647630": 73, "connector": 73, "0x192168001001": 73, "647633": 73, "647639": 73, "647642": 73, "0x1": 73, "647645": 73, "647648": 73, "647651": 73, "172": 73, "647654": 73, "647657": 73, "fc00": 73, "c0a8": 73, "647660": 73, "ac10": 73, "647669": 73, "a00": 73, "124": 73, "647672": 73, "srgb": 73, "647678": 73, "graph": [73, 77, 79, 81], "647813": 73, "981279": 73, "981314": 73, "981335": 73, "031917": 73, "087877": 73, "087971": 73, "088013": 73, "088035": 73, "088050": 73, "093906": 73, "093964": 73, "gobgp": 73, "gobgpd": 73, "But": 73, "offload": [73, 82], "92": 73, "65001": [73, 75], "afi": 73, "safi": 73, "bgpupdat": [73, 75, 76], "append": [73, 75, 77, 78, 81], "daemon": 73, "f": [73, 74, 75, 78, 79, 81], "08t14": 73, "51": 73, "03": [73, 74], "topic": 73, "apr": 73, "08": 73, "870722": 73, "138": 73, "kb": 73, "904266": 73, "904293": 73, "904369": 73, "52": 73, "904359": 73, "904389": 73, "904448": 73, "905659": 73, "opens": 73, "907888": 73, "907903": 73, "openconfirm": 73, "907917": 73, "907989": 73, "182885": 73, "outq": 73, "flop": 73, "multiprotocol": [73, 78], "octet": 73, "rcvd": 73, "notif": 73, "72": 73, "20000": 73, "100000": [73, 75, 79], "skip": 73, "09": 73, "establ": 73, "120000": 73, "withdraw": [73, 75, 78], "ldpupdat": [73, 76, 78], "Such": [73, 77, 81, 82], "To": [74, 76], "understand": 74, "think": 74, "job": 74, "decreas": 74, "75": 74, "50": [74, 79, 82], "55661": 74, "97": 74, "111410": 74, "12654727": 74, "110161": 74, "12300031": 74, "unknown": 74, "93709": 74, "110156": 74, "12299556": 74, "33319": 74, "32641": 74, "32635": 74, "33311": 74, "32633": 74, "1104": 74, "pado": 74, "500": 74, "373": 74, "4880": 74, "1700": 74, "1840": 74, "350": 74, "108580": 74, "12360218": 74, "106881": 74, "11982029": 74, "95265": 74, "106876": 74, "11981554": 74, "32465": 74, "31896": 74, "31895": 74, "32461": 74, "31894": 74, "1102": 74, "844": 74, "78": 74, "422": 74, "4343": 74, "822": 74, "1816": 74, "322": 74, "197523": 74, "21009053": 74, "188259": 74, "20425245": 74, "74810": 74, "65784": 74, "64537": 74, "61793": 74, "65772": 74, "61790": 74, "6000": 74, "623": 74, "199": 74, "224": [74, 78, 82], "624": 74, "218": 74, "227": 74, "197": 74, "3742": 74, "1198": 74, "1338": 74, "1206": 74, "filenam": [74, 79, 82], "sn": 74, "197340": 74, "188120": 74, "99949": 74, "97909": 74, "ipv6avg": 74, "97391": 74, "95685": 74, "env": 74, "python3": 74, "border": 75, "exterior": 75, "exchang": [75, 78], "reachabl": [75, 77], "among": [75, 82], "autonom": 75, "classifi": [75, 83], "vector": 75, "decis": 75, "plan": 75, "marker": 75, "scapi": [75, 78], "convert": 75, "phase": [75, 78], "update1": [75, 78], "onc": [75, 78, 82], "sens": 75, "update2": 75, "h": [75, 78, 79], "asn": 75, "local_pref": 75, "w": [75, 78, 79], "num": [75, 78], "ifac": 75, "rib": 75, "exit": [75, 77, 78, 81], "hop": [75, 82], "pref": 75, "blueprint": [75, 78], "6pe": 75, "50000": 75, "20001": 75, "48": [75, 82], "plane": 75, "propag": 75, "offlin": 76, "serial": 76, "rfc6396": [76, 77, 81], "produc": 76, "mimic": 76, "written": [77, 79], "move": 77, "iso": 77, "iec": 77, "10589": 77, "2002": 77, "interconnect": 77, "engin": 77, "forc": [77, 82], "republish": 77, "1142": 77, "later": [77, 79], "histor": 77, "7142": 77, "rather": 77, "confus": 77, "facto": 77, "backbon": 77, "synchron": [77, 81], "self": [77, 81], "itself": [77, 81, 82], "3600": 77, "n1": 77, "b1": 77, "0022": 77, "0021": 77, "65529": 77, "0011": 77, "65524": 77, "65506": 77, "whole": 77, "0x83": 77, "831b0100120100000021ffff010203040506000000000003c0d103010403490001": 77, "831b0100120100000021ffff010203040506000100000003bad603010403490001": 77, "contrib": [77, 81], "def": [77, 81], "arg": [77, 79, 81], "kwarg": [77, 81], "execute_command": [77, 81], "socket_path": [77, 81], "af_unix": [77, 81], "sock_stream": [77, 81], "dump": [77, 81], "utf": [77, 81], "junk": [77, 81], "recv": [77, 81], "decod": [77, 81, 82], "els": [77, 81], "break": [77, 81], "indent": [77, 81], "argv": [77, 81], "tlv": [77, 79], "isis_areatlv": 77, "isis_areaentri": 77, "areaid": 77, "isis_commonhdr": 77, "isis_l1_lsp": 77, "lspid": 77, "0102": 77, "0304": 77, "0506": 77, "seqnum": 77, "__name__": [77, 81], "__main__": [77, 81], "timestamp": [77, 81], "subtyp": [77, 81], "field": [77, 81, 82], "export": [77, 79, 81], "bi": 78, "646": 78, "subnet": 78, "5036": 78, "dut": 78, "ecmp": 78, "10001": 78, "exactli": 78, "longest": 78, "henc": 79, "accommod": 79, "ospf2": 79, "____": 79, "__": 79, "_": 79, "_____": 79, "___": 79, "______": 79, "ospf3": 79, "multipli": 79, "z": 79, "graphviz": 79, "seed": 79, "q": 79, "quit": 79, "repres": [79, 82], "toplogi": 79, "sep": 79, "780109": 79, "780127": 79, "simlar": 79, "construct": 79, "242810": 79, "242827": 79, "node_id": 79, "area_list": 79, "protocol_list": 79, "ipv4_address_list": 79, "ipv4_prefix_list": 79, "ipv4_prefix": 79, "segment_id": 79, "30005": 79, "node_flag": 79, "capability_list": 79, "router_id": 79, "mpls_ipv4_flag": 79, "mpls_ipv6_flag": 79, "srgb_base": 79, "srgb_rang": 79, "36000": 79, "neighbor_list": 79, "remote_node_id": 79, "0204": 79, "0003": 79, "30003": 79, "r3": 79, "shortest": 81, "interior": 81, "igp": 81, "wide": 81, "stabil": 81, "000100050ac801000aff010180000001e7790024ffffff00000000140000000000000000": 81, "000100050ac802000aff010180000001dc830024ffffff00000000140000000000000000": 81, "020400400101010100000000456e0000000000000000000000000001000100050ac80c000aff01018000012d13160024ffffff00000000140000000000000000": 81, "0204004001010101000000003b780000000000000000000000000001000100050ac80b000aff01018000012d1e0c0024ffffff00000000140000000000000000": 81, "ospf_external_lsa": 81, "adrout": 81, "mask": 81, "2147483649": 81, "struct": 81, "wb": 81, "222": 81, "2147483949": 81, "ospf_hdr": 81, "ospf_lsupd": 81, "lsacount": 81, "pack": 81, "ii": 81, "ihhi": 81, "len": [81, 82], "although": 81, "compar": 81, "conceptu": 81, "ident": 81, "r6": 81, "instanti": 82, "certain": 82, "brief": 82, "overview": 82, "2001": 82, "besteffort": 82, "voic": 82, "merg": 82, "determinist": 82, "incrementor": 82, "regardless": 82, "exce": 82, "upper": 82, "wrap": 82, "want": 82, "high": 82, "cover": 82, "1099": 82, "1009": 82, "1010": 82, "1019": 82, "1090": 82, "b": 82, "reus": 82, "hit": 82, "ters": 82, "queri": 82, "59670": 82, "54610": 82, "account": 82, "59655": 82, "54594": 82, "1100": 82, "9028800": 82, "8240000": 82, "mbp": 82, "0288": 82, "362": 82, "54593": 82, "1014": 82, "1030": 82, "54232": 82, "98595": 82, "8112000": 82, "l3": 82, "8000000": 82, "112": 82, "1026": 82, "43": 82, "98903": 82, "8208000": 82, "208": 82, "5458": 82, "5422": 82, "41": 82, "96548": 82, "811200": 82, "820800": 82, "800000": 82, "8112": 82, "8208": 82, "microsecond": 82, "subtract": 82, "volum": 82, "jsonpath": 82, "express": 82, "BE": 82, "27040": 82, "213": 82, "126": 82, "27008": 82, "10561": 82, "99": 82, "90288": 82, "99792": 82, "79200": 82, "090288": 82, "099792": 82, "0792": 82, "part": 82, "properti": 82, "readi": 82, "shortcut": 82, "f7": 82, "f8": 82, "respect": 82, "necessari": 82, "largest": 82, "1472": 82, "reserv": 82, "le": 82, "0x5274427269636b21": 82, "jitter": 82, "nano": 82, "meta": 83, "dissector": 83, "lua": 83, "bbl_header": 83, "place": 83, "lua_script": 83}, "objects": {}, "objtypes": {}, "objnames": {}, "titleterms": {"access": [0, 38, 70], "protocol": [0, 68, 76], "ipo": [1, 38], "static": 1, "address": [1, 71], "dhcpv4": 1, "v6": 1, "dhcp": [1, 16, 38, 73], "dhcpv6": [1, 38], "command": [1, 3, 7, 64, 77, 81, 82], "l2bsa": 2, "over": 2, "network": [2, 38, 70, 73], "inerfac": 2, "l2tp": [3, 16], "configur": [3, 7, 8, 38, 75, 77, 78, 79, 81, 82], "variabl": [3, 38], "data": 3, "header": 3, "rfc5515": 3, "legal": [4, 16], "intercept": [4, 16], "li": [4, 16], "monkei": 5, "multicast": [6, 82], "iptv": 6, "gener": [6, 75, 78], "traffic": [6, 8, 16, 38, 73, 78, 82], "manual": 6, "join": 6, "leav": 6, "test": [6, 16, 64, 69, 75], "zap": 6, "limit": [6, 75, 77, 78], "pppoe": [7, 38, 73], "ppp": [7, 16, 38], "authent": [7, 38], "lcp": [7, 38], "ipcp": [7, 38], "ipv4": [7, 38], "ip6cp": [7, 38], "ipv6": [7, 38], "vendor": 7, "extens": [7, 71], "session": [8, 16, 38, 74, 75, 78, 82], "verif": 8, "api": [16, 64], "cli": 16, "bng": [16, 68, 69, 82], "blaster": [16, 68, 69, 82], "interfac": [16, 38, 70, 81], "igmp": [16, 38], "stream": [16, 38, 71, 78, 82], "isi": [16, 38, 73, 77], "ospf": [16, 38, 81], "bgp": [16, 38, 73, 75], "ldp": [16, 38, 73, 78], "cfm": 16, "http": [16, 38, 66, 71], "icmp": [16, 38, 67, 71], "arp": [16, 38], "pcap": [16, 64, 83], "link": [38, 70], "aggreg": [38, 70], "lag": [38, 70], "a10nsp": [38, 70], "l2tpv2": 38, "server": [38, 66], "ln": 38, "line": 38, "profil": 38, "extern": 38, "connect": 38, "client": [38, 66, 67, 71], "control": 64, "instal": [64, 69], "creat": 64, "instanc": 64, "start": [64, 82], "statu": 64, "stop": [64, 82], "delet": 64, "report": [64, 74], "log": [64, 83], "metric": 64, "frequent": 65, "ask": 65, "question": 65, "emul": 66, "rtbrick": 68, "rout": [68, 76], "content": 68, "contact": 68, "articl": 68, "youtub": 68, "train": 68, "exampl": 68, "sourc": [68, 69, 82], "licens": 68, "copyright": 68, "ubuntu": 69, "build": 69, "from": [69, 79], "depend": 69, "run": 69, "unit": 69, "dpdk": [69, 70, 72], "support": 69, "oper": 70, "system": 70, "set": 70, "function": 70, "untag": 70, "singl": 70, "tag": 70, "doubl": 70, "tripl": 70, "i": 70, "o": 70, "mode": 70, "packet": 70, "mmap": 70, "raw": [70, 71, 75, 78, 82], "nat": 71, "cgnat": 71, "featur": 71, "revers": 71, "flow": [71, 82], "enabl": 71, "tcp": [71, 82], "setup": [71, 74], "interv": 71, "scale": 71, "perform": 72, "guid": [72, 73], "numa": 72, "quickstart": 73, "rate": 74, "standard": 74, "output": 74, "json": 74, "updat": [75, 77, 78, 81], "file": [75, 77, 78, 79, 81, 82], "converg": 75, "adjac": [77, 78], "databas": [77, 81], "flood": [77, 81], "lsp": 77, "via": [77, 81], "scapi": [77, 81], "mrt": [77, 81], "lspgen": [77, 79, 81], "connector": 79, "random": 79, "topologi": 79, "mpl": 80, "neighbor": 81, "lsa": 81, "ospfv3": 81, "understand": 82, "iter": 82, "destin": 82, "port": 82, "fragment": 82, "unicast": 82, "magic": 82, "sequenc": 82, "identifi": 82, "number": 82, "nanosecond": 82, "send": 82, "timestamp": 82, "troubleshoot": 83, "wireshark": 83, "plugin": 83}, "envversion": {"sphinx.domains.c": 3, "sphinx.domains.changeset": 1, "sphinx.domains.citation": 1, "sphinx.domains.cpp": 9, "sphinx.domains.index": 1, "sphinx.domains.javascript": 3, "sphinx.domains.math": 2, "sphinx.domains.python": 4, "sphinx.domains.rst": 2, "sphinx.domains.std": 2, "sphinx": 60}, "alltitles": {"Access Protocols": [[0, "access-protocols"]], "IPoE": [[1, "ipoe"], [1, "id2"], [38, "ipoe"]], "Static Addresses": [[1, "static-addresses"]], "DHCPv4/v6": [[1, "dhcpv4-v6"]], "DHCP": [[1, "dhcp"], [16, "dhcp"], [38, "dhcp"], [73, "dhcp"]], "DHCPv6": [[1, "dhcpv6"], [38, "dhcpv6"]], "IPoE Commands": [[1, "ipoe-commands"]], "L2BSA": [[2, "l2bsa"]], "L2BSA over Network Inerfaces": [[2, "l2bsa-over-network-inerfaces"]], "L2TP": [[3, "l2tp"], [16, "l2tp"]], "Configuration": [[3, "configuration"], [7, "configuration"], [8, "configuration"], [38, "id1"], [75, "configuration"], [77, "configuration"], [78, "configuration"], [81, "configuration"], [82, "configuration"]], "Variable Data Header": [[3, "variable-data-header"]], "RFC5515": [[3, "rfc5515"]], "L2TP Commands": [[3, "l2tp-commands"]], "Legal Interception (LI)": [[4, "legal-interception-li"], [16, "legal-interception-li"]], "Monkey": [[5, "monkey"]], "Multicast and IPTV": [[6, "multicast-and-iptv"]], "Generate Multicast Traffic": [[6, "generate-multicast-traffic"]], "Manual Join/Leave Testing": [[6, "manual-join-leave-testing"]], "IPTV Zapping Test": [[6, "iptv-zapping-test"]], "Multicast Limitations": [[6, "multicast-limitations"]], "PPPoE": [[7, "pppoe"], [7, "id2"], [38, "pppoe"], [73, "pppoe"]], "PPP": [[7, "ppp"], [16, "ppp"], [38, "ppp"]], "PPP Authentication": [[7, "ppp-authentication"], [38, "ppp-authentication"]], "PPP LCP": [[7, "ppp-lcp"], [38, "ppp-lcp"]], "PPP IPCP (IPv4)": [[7, "ppp-ipcp-ipv4"], [38, "ppp-ipcp-ipv4"]], "PPP IP6CP (IPv6)": [[7, "ppp-ip6cp-ipv6"], [38, "ppp-ip6cp-ipv6"]], "LCP Vendor Extension": [[7, "lcp-vendor-extension"]], "PPPoE Commands": [[7, "pppoe-commands"]], "Session Traffic": [[8, "session-traffic"]], "Verification": [[8, "verification"]], "API/CLI": [[16, "api-cli"]], "BNG Blaster CLI": [[16, "bng-blaster-cli"]], "Test": [[16, "test"]], "Interfaces": [[16, "interfaces"], [38, "interfaces"], [70, "interfaces"], [81, "interfaces"]], "Sessions": [[16, "sessions"], [38, "sessions"]], "IGMP": [[16, "igmp"], [38, "igmp"]], "Traffic": [[16, "traffic"], [38, "traffic"]], "Streams": [[16, "streams"]], "ISIS": [[16, "isis"], [38, "isis"], [73, "isis"], [77, "isis"]], "OSPF": [[16, "ospf"], [38, "ospf"], [81, "ospf"]], "BGP": [[16, "bgp"], [38, "bgp"], [73, "bgp"], [75, "bgp"]], "LDP": [[16, "ldp"], [38, "ldp"], [73, "ldp"], [78, "ldp"]], "CFM": [[16, "cfm"]], "HTTP": [[16, "http"]], "ICMP": [[16, "icmp"], [67, "icmp"]], "ARP": [[16, "arp"]], "PCAP": [[16, "pcap"], [64, "pcap"], [83, "pcap"]], "Variables": [[38, "variables"]], "Links": [[38, "links"], [70, "links"]], "Link Aggregation (LAG)": [[38, "link-aggregation-lag"], [70, "link-aggregation-lag"]], "Network Interfaces": [[38, "network-interfaces"], [70, "network-interfaces"]], "Access Interfaces": [[38, "access-interfaces"], [70, "access-interfaces"]], "A10NSP Interfaces": [[38, "a10nsp-interfaces"], [70, "a10nsp-interfaces"]], "L2TPv2 Server (LNS)": [[38, "l2tpv2-server-lns"]], "Traffic-Streams": [[38, "traffic-streams"]], "Session-Traffic": [[38, "session-traffic"]], "Access-Line": [[38, "access-line"]], "Access-Line-Profiles": [[38, "access-line-profiles"]], "ISIS External": [[38, "isis-external"]], "ISIS External Connections": [[38, "isis-external-connections"]], "OSPF External": [[38, "ospf-external"]], "OSPF External Connections": [[38, "ospf-external-connections"]], "HTTP-Client": [[38, "http-client"]], "HTTP-Server": [[38, "http-server"]], "ICMP-Client": [[38, "icmp-client"]], "ARP-Client": [[38, "arp-client"]], "Controller": [[64, "controller"]], "Installation": [[64, "installation"], [69, "installation"]], "API": [[64, "api"]], "Create Test Instance": [[64, "create-test-instance"]], "Start Test": [[64, "start-test"]], "Status": [[64, "status"]], "Command": [[64, "command"]], "Stop Test": [[64, "stop-test"]], "Delete Test Instance": [[64, "delete-test-instance"]], "Reports": [[64, "reports"], [74, "reports"]], "Logs": [[64, "logs"]], "Metrics": [[64, "metrics"]], "Frequently Asked Questions": [[65, "frequently-asked-questions"]], "HTTP Emulation": [[66, "http-emulation"]], "HTTP Client": [[66, "http-client"]], "HTTP Server": [[66, "http-server"]], "ICMP Client": [[67, "icmp-client"], [71, "icmp-client"]], "RtBrick - Routing Protocol and BNG Blaster": [[68, "rtbrick-routing-protocol-and-bng-blaster"]], "Contents": [[68, "contents"]], "Contact": [[68, "contact"]], "Articles": [[68, "articles"]], "YouTube": [[68, "youtube"]], "Trainings and Examples:": [[68, "trainings-and-examples"]], "Sources": [[68, "sources"]], "License": [[68, "license"]], "Copyright": [[68, "copyright"]], "Install Ubuntu": [[69, "install-ubuntu"]], "Build from Sources": [[69, "build-from-sources"]], "Dependencies": [[69, "dependencies"]], "Build": [[69, "build"]], "Install": [[69, "id1"]], "Build and Run Unit Tests": [[69, "build-and-run-unit-tests"]], "Build with DPDK Support": [[69, "build-with-dpdk-support"]], "Running BNG Blaster": [[69, "running-bng-blaster"]], "Operating System Settings": [[70, "operating-system-settings"]], "Interface Settings": [[70, "interface-settings"]], "Interface Functions": [[70, "interface-functions"]], "Untagged": [[70, "untagged"]], "Single Tagged": [[70, "single-tagged"]], "Double Tagged": [[70, "double-tagged"]], "Triple Tagged": [[70, "triple-tagged"]], "I/O Modes": [[70, "i-o-modes"]], "Packet MMAP": [[70, "packet-mmap"]], "RAW": [[70, "raw"]], "DPDK": [[70, "dpdk"], [72, "dpdk"]], "NAT / CGNAT": [[71, "nat-cgnat"]], "NAT Features": [[71, "nat-features"]], "Reverse Flow": [[71, "reverse-flow"]], "Flow Addresses": [[71, "flow-addresses"]], "NAT Enabled Streams": [[71, "nat-enabled-streams"]], "TCP RAW Streams": [[71, "tcp-raw-streams"], [82, "tcp-raw-streams"]], "Stream Setup interval": [[71, "stream-setup-interval"]], "HTTP NAT Extension": [[71, "http-nat-extension"]], "Scaling": [[71, "scaling"]], "Performance Guide": [[72, "performance-guide"]], "NUMA": [[72, "numa"]], "Quickstart Guide": [[73, "quickstart-guide"]], "Network Traffic": [[73, "network-traffic"]], "Session Setup Rate": [[74, "session-setup-rate"]], "Standard Output Reports": [[74, "standard-output-reports"]], "JSON Reports": [[74, "json-reports"]], "BGP Sessions": [[75, "bgp-sessions"]], "Limitations": [[75, "limitations"], [77, "limitations"], [78, "limitations"]], "RAW Update Files": [[75, "raw-update-files"], [78, "raw-update-files"]], "BGP RAW Update Generator": [[75, "bgp-raw-update-generator"]], "BGP Convergence Testing": [[75, "bgp-convergence-testing"]], "Routing Protocols": [[76, "routing-protocols"]], "Adjacencies": [[77, "adjacencies"]], "Database": [[77, "database"], [81, "database"]], "Flooding": [[77, "flooding"], [81, "flooding"]], "LSP Update Command": [[77, "lsp-update-command"]], "LSP Update via Scapy": [[77, "lsp-update-via-scapy"]], "MRT Files": [[77, "mrt-files"], [81, "mrt-files"]], "LSPGEN": [[77, "lspgen"], [79, "lspgen"], [81, "lspgen"]], "LDP Adjacencies": [[78, "ldp-adjacencies"]], "LDP Sessions": [[78, "ldp-sessions"]], "LDP Traffic Streams": [[78, "ldp-traffic-streams"]], "LDP RAW Update Generator": [[78, "ldp-raw-update-generator"]], "Connector": [[79, "connector"]], "Random Topologies": [[79, "random-topologies"]], "Topology from Configuration File": [[79, "topology-from-configuration-file"]], "MPLS": [[80, "mpls"]], "Neighbors": [[81, "neighbors"]], "LSA Update Command": [[81, "lsa-update-command"]], "LSA Update via Scapy": [[81, "lsa-update-via-scapy"]], "OSPFv3": [[81, "ospfv3"]], "Traffic Streams": [[82, "traffic-streams"]], "Understanding Flows": [[82, "understanding-flows"]], "Stream Configuration File": [[82, "stream-configuration-file"]], "RAW Streams": [[82, "raw-streams"]], "Stream Iterators": [[82, "stream-iterators"]], "Source and Destination Ports": [[82, "source-and-destination-ports"]], "Stream Commands": [[82, "stream-commands"]], "Start/Stop Traffic": [[82, "start-stop-traffic"]], "Fragmentation": [[82, "fragmentation"]], "BNG Blaster Traffic": [[82, "bng-blaster-traffic"]], "Unicast Session Traffic": [[82, "unicast-session-traffic"]], "Multicast Traffic": [[82, "multicast-traffic"]], "BNG Blaster Magic Sequence": [[82, "bng-blaster-magic-sequence"]], "Flow Identifier": [[82, "flow-identifier"]], "Flow Sequence Number": [[82, "flow-sequence-number"]], "Nanosecond Send Timestamps": [[82, "nanosecond-send-timestamps"]], "Troubleshooting": [[83, "troubleshooting"]], "Logging": [[83, "logging"]], "Wireshark Plugin": [[83, "wireshark-plugin"]]}, "indexentries": {}})
    \ No newline at end of file
    +Search.setIndex({"docnames": ["access/index", "access/ipoe", "access/l2bsa", "access/l2tp", "access/li", "access/monkey", "access/multicast", "access/pppoe", "access/traffic", "api/arp", "api/bgp", "api/cfm", "api/dhcp", "api/http", "api/icmp", "api/igmp", "api/index", "api/interfaces", "api/isis", "api/l2tp", "api/ldp", "api/li", "api/ospf", "api/pcap", "api/ppp", "api/sessions", "api/streams", "api/traffic", "configuration/access_line", "configuration/access_line_profiles", "configuration/arp_client", "configuration/bgp", "configuration/dhcp", "configuration/dhcpv6", "configuration/http_client", "configuration/http_server", "configuration/icmp_client", "configuration/igmp", "configuration/index", "configuration/interfaces", "configuration/interfaces_a10nsp", "configuration/interfaces_access", "configuration/interfaces_lag", "configuration/interfaces_links", "configuration/interfaces_network", "configuration/ipoe", "configuration/isis", "configuration/isis_external", "configuration/isis_external_connections", "configuration/ldp", "configuration/lns", "configuration/ospf", "configuration/ospf_external", "configuration/ospf_external_connections", "configuration/ppp", "configuration/ppp_authentication", "configuration/ppp_ip6cp", "configuration/ppp_ipcp", "configuration/ppp_lcp", "configuration/pppoe", "configuration/session_traffic", "configuration/sessions", "configuration/streams", "configuration/traffic", "controller", "faq", "http", "icmp", "index", "install", "interfaces", "nat", "performance", "quickstart", "reports", "routing/bgp", "routing/index", "routing/isis", "routing/ldp", "routing/lspgen", "routing/mpls", "routing/ospf", "streams", "troubleshooting"], "filenames": ["access/index.rst", "access/ipoe.rst", "access/l2bsa.rst", "access/l2tp.rst", "access/li.rst", "access/monkey.rst", "access/multicast.rst", "access/pppoe.rst", "access/traffic.rst", "api/arp.rst", "api/bgp.rst", "api/cfm.rst", "api/dhcp.rst", "api/http.rst", "api/icmp.rst", "api/igmp.rst", "api/index.rst", "api/interfaces.rst", "api/isis.rst", "api/l2tp.rst", "api/ldp.rst", "api/li.rst", "api/ospf.rst", "api/pcap.rst", "api/ppp.rst", "api/sessions.rst", "api/streams.rst", "api/traffic.rst", "configuration/access_line.rst", "configuration/access_line_profiles.rst", "configuration/arp_client.rst", "configuration/bgp.rst", "configuration/dhcp.rst", "configuration/dhcpv6.rst", "configuration/http_client.rst", "configuration/http_server.rst", "configuration/icmp_client.rst", "configuration/igmp.rst", "configuration/index.rst", "configuration/interfaces.rst", "configuration/interfaces_a10nsp.rst", "configuration/interfaces_access.rst", "configuration/interfaces_lag.rst", "configuration/interfaces_links.rst", "configuration/interfaces_network.rst", "configuration/ipoe.rst", "configuration/isis.rst", "configuration/isis_external.rst", "configuration/isis_external_connections.rst", "configuration/ldp.rst", "configuration/lns.rst", "configuration/ospf.rst", "configuration/ospf_external.rst", "configuration/ospf_external_connections.rst", "configuration/ppp.rst", "configuration/ppp_authentication.rst", "configuration/ppp_ip6cp.rst", "configuration/ppp_ipcp.rst", "configuration/ppp_lcp.rst", "configuration/pppoe.rst", "configuration/session_traffic.rst", "configuration/sessions.rst", "configuration/streams.rst", "configuration/traffic.rst", "controller.rst", "faq.rst", "http.rst", "icmp.rst", "index.rst", "install.rst", "interfaces.rst", "nat.rst", "performance.rst", "quickstart.rst", "reports.rst", "routing/bgp.rst", "routing/index.rst", "routing/isis.rst", "routing/ldp.rst", "routing/lspgen.rst", "routing/mpls.rst", "routing/ospf.rst", "streams.rst", "troubleshooting.rst"], "titles": ["Access Protocols", "IPoE", "L2BSA", "L2TP", "Legal Interception (LI)", "Monkey", "Multicast and IPTV", "PPPoE", "Session Traffic", "<no title>", "<no title>", "<no title>", "<no title>", "<no title>", "<no title>", "<no title>", "API/CLI", "<no title>", "<no title>", "<no title>", "<no title>", "<no title>", "<no title>", "<no title>", "<no title>", "<no title>", "<no title>", "<no title>", "<no title>", "<no title>", "<no title>", "<no title>", "<no title>", "<no title>", "<no title>", "<no title>", "<no title>", "<no title>", "Configuration", "<no title>", "<no title>", "<no title>", "<no title>", "<no title>", "<no title>", "<no title>", "<no title>", "<no title>", "<no title>", "<no title>", "<no title>", "<no title>", "<no title>", "<no title>", "<no title>", "<no title>", "<no title>", "<no title>", "<no title>", "<no title>", "<no title>", "<no title>", "<no title>", "<no title>", "Controller", "Frequently Asked Questions", "HTTP Emulation", "ICMP", "RtBrick - Routing Protocol and BNG Blaster", "Installation", "Interfaces", "NAT / CGNAT", "Performance Guide", "Quickstart Guide", "Reports", "BGP", "Routing Protocols", "ISIS", "LDP", "LSPGEN", "MPLS", "OSPF", "Traffic Streams", "Troubleshooting"], "terms": {"A": [0, 3, 5, 6, 38, 50, 63, 68, 69, 71, 72, 74, 75, 78, 82], "bng": [0, 1, 2, 3, 4, 5, 6, 7, 8, 24, 28, 37, 38, 39, 49, 50, 62, 64, 65, 66, 67, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 83], "broadband": [0, 2, 28, 38, 66, 68], "network": [0, 1, 3, 4, 6, 7, 8, 11, 16, 17, 31, 35, 36, 37, 41, 44, 60, 62, 64, 66, 67, 68, 69, 71, 72, 74, 75, 76, 77, 78, 81, 82, 83], "gatewai": [0, 1, 2, 3, 4, 6, 7, 38, 41, 44, 66, 67, 68, 70, 71, 73, 75, 77, 78, 81, 82], "i": [0, 1, 2, 3, 4, 5, 6, 7, 8, 12, 16, 19, 23, 24, 25, 28, 29, 30, 31, 33, 36, 37, 38, 39, 42, 43, 44, 49, 50, 60, 62, 63, 64, 65, 66, 67, 68, 69, 71, 72, 73, 74, 75, 77, 78, 79, 81, 82, 83], "devic": [0, 3, 4, 5, 7, 65, 66, 70, 71, 72, 73, 77, 78, 81, 82], "connect": [0, 1, 7, 16, 19, 48, 49, 53, 58, 66, 70, 71, 72, 73, 77, 78, 79, 81], "custom": [0, 2, 38, 64, 76], "premis": 0, "equip": 0, "servic": [0, 1, 2, 6, 7, 38, 44, 59, 64, 68, 70, 71, 77], "provid": [0, 1, 2, 3, 4, 6, 7, 16, 23, 26, 28, 29, 38, 64, 66, 69, 70, 71, 76, 77, 81, 82], "": [0, 1, 2, 6, 16, 37, 38, 39, 43, 46, 64, 66, 70, 71, 72, 73, 75, 77, 79, 81], "manag": [0, 2, 38, 64, 66], "user": [0, 1, 2, 7, 16, 38, 55, 64, 66, 68, 69, 70, 71, 73], "authent": [0, 3, 41, 46, 51, 55, 70, 73, 75, 77, 78, 79, 81], "traffic": [0, 1, 2, 3, 4, 7, 25, 26, 27, 31, 32, 33, 37, 39, 41, 45, 49, 50, 59, 60, 62, 63, 64, 68, 70, 71, 72, 74, 75, 80, 83], "rout": [0, 38, 46, 70, 73, 75, 77, 82], "qualiti": 0, "qo": [0, 68, 73, 82], "internet": [0, 2, 68, 70, 71, 75, 77], "The": [0, 1, 2, 3, 4, 5, 6, 7, 8, 16, 19, 25, 26, 28, 29, 38, 39, 43, 49, 50, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83], "blaster": [0, 1, 2, 3, 4, 6, 7, 8, 28, 37, 38, 39, 49, 50, 64, 65, 66, 67, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 83], "versatil": [0, 1, 66], "support": [0, 1, 2, 3, 4, 6, 7, 16, 28, 38, 39, 42, 50, 62, 64, 68, 70, 71, 72, 73, 75, 77, 78, 79, 81, 82, 83], "variou": [0, 1, 28, 38, 64, 66, 68, 71, 82], "allow": [0, 1, 2, 3, 5, 6, 7, 16, 19, 29, 32, 33, 37, 38, 39, 43, 55, 56, 57, 64, 65, 66, 67, 68, 69, 70, 71, 72, 74, 75, 77, 78, 79, 81, 82, 83], "creation": [0, 76], "seubscrib": 0, "session": [0, 1, 2, 3, 4, 5, 6, 7, 9, 10, 11, 12, 13, 14, 15, 19, 20, 24, 25, 26, 30, 31, 36, 37, 39, 41, 44, 49, 55, 59, 60, 61, 62, 64, 65, 66, 67, 68, 70, 71, 73, 76], "each": [0, 1, 3, 16, 29, 38, 41, 49, 62, 64, 66, 67, 68, 70, 72, 78, 82], "which": [0, 2, 4, 5, 6, 16, 19, 28, 38, 49, 61, 62, 64, 65, 68, 69, 70, 71, 72, 73, 74, 77, 78, 79, 81, 82, 83], "can": [0, 2, 3, 4, 5, 6, 7, 8, 16, 19, 24, 25, 26, 27, 28, 38, 41, 49, 55, 61, 62, 63, 64, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83], "compris": 0, "multipl": [0, 1, 2, 3, 6, 8, 15, 16, 37, 38, 39, 46, 50, 64, 66, 67, 70, 71, 72, 75, 76, 77, 78, 81, 82], "For": [0, 1, 5, 38, 39, 62, 66, 67, 70, 71, 72, 76, 79, 82], "instanc": [0, 4, 6, 9, 13, 14, 16, 18, 20, 22, 38, 39, 44, 46, 49, 51, 62, 66, 67, 70, 72, 73, 77, 78, 79, 81, 82], "case": [0, 1, 7, 8, 16, 26, 67, 76, 77, 81], "dual": 0, "stack": [0, 68], "ipo": [0, 5, 30, 32, 33, 41, 45, 61, 66, 67, 68, 70, 71, 72, 73, 74], "ar": [0, 1, 2, 3, 5, 6, 7, 8, 16, 26, 28, 29, 36, 37, 38, 39, 44, 61, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 81, 82, 83], "form": 0, "combin": [0, 4, 6, 16, 25, 37, 38, 64, 70, 74, 82], "dhcpv4": [0, 2, 5, 28, 38], "dhcpv6": [0, 2, 5, 7, 16, 28, 33, 41, 45, 65, 66, 70, 72, 73, 74], "well": [0, 2, 6, 28, 38, 67, 70, 72, 79], "arp": [0, 1, 9, 30, 41, 44, 45, 70, 74], "nd": [0, 1, 38, 44, 45, 70], "everi": [0, 2, 6, 38, 62, 64, 68, 70, 71, 72, 73, 74, 77, 81, 82], "defin": [0, 1, 2, 3, 6, 7, 16, 25, 28, 29, 33, 37, 38, 39, 42, 43, 49, 54, 63, 64, 66, 67, 70, 73, 75, 76, 77, 78, 79, 81, 82], "an": [0, 2, 3, 6, 8, 16, 26, 28, 38, 43, 44, 49, 64, 65, 66, 67, 68, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 81, 82], "interfac": [0, 1, 2, 3, 4, 5, 6, 7, 8, 11, 17, 18, 22, 26, 28, 29, 31, 35, 36, 37, 39, 40, 41, 42, 43, 44, 48, 53, 60, 61, 62, 64, 65, 66, 67, 68, 69, 71, 72, 73, 74, 75, 76, 77, 78, 82, 83], "function": [0, 1, 2, 3, 4, 5, 6, 8, 16, 17, 38, 43, 62, 64, 66, 68, 71, 72, 76, 77, 78, 81, 82], "identifi": [0, 2, 16, 18, 22, 29, 30, 31, 34, 36, 38, 41, 42, 44, 46, 48, 49, 51, 53, 62, 66, 67, 70, 75, 77, 78, 81], "global": [0, 1, 5, 7, 8, 16, 27, 28, 31, 38, 43, 55, 63, 70, 72, 73, 74, 75, 82], "uniqu": [0, 82], "id": [0, 1, 2, 3, 6, 7, 9, 11, 12, 13, 14, 15, 16, 18, 19, 20, 24, 25, 26, 28, 29, 30, 31, 32, 33, 34, 36, 38, 39, 41, 42, 44, 46, 48, 49, 50, 51, 53, 62, 64, 66, 67, 70, 71, 72, 73, 75, 77, 78, 79, 81, 82], "number": [0, 3, 4, 5, 6, 8, 16, 37, 38, 39, 41, 42, 43, 44, 49, 62, 64, 68, 70, 71, 72, 73, 74, 75, 77, 78, 81, 83], "start": [0, 3, 5, 6, 7, 8, 11, 12, 13, 14, 15, 16, 23, 25, 26, 27, 31, 34, 36, 37, 38, 41, 44, 50, 58, 60, 61, 62, 63, 65, 66, 67, 68, 69, 70, 72, 73, 74, 75, 77, 78, 79, 81, 83], "1": [0, 1, 2, 3, 4, 6, 7, 8, 16, 19, 26, 29, 30, 31, 32, 34, 35, 36, 37, 38, 39, 41, 44, 45, 46, 48, 50, 51, 53, 54, 61, 62, 63, 64, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 77, 78, 79, 81, 82], "increas": [0, 16, 38, 39, 63, 70, 71, 72, 73, 82], "sequenti": [0, 82], "new": [0, 6, 38, 64, 68, 69, 70, 71, 73, 82], "establish": [0, 1, 3, 5, 6, 7, 8, 16, 25, 37, 38, 60, 62, 64, 65, 66, 67, 73, 74, 75, 76, 78, 82], "furthermor": [0, 1, 64, 68, 71], "you": [0, 2, 16, 26, 38, 66, 67, 68, 70, 71, 72, 73, 74, 76, 79, 82, 83], "have": [0, 38, 68, 70, 71, 73, 74, 79, 82], "flexibl": [0, 1, 38, 66], "group": [0, 1, 2, 6, 12, 15, 16, 24, 25, 26, 30, 34, 36, 37, 38, 41, 43, 62, 66, 67, 70, 71, 72, 73, 78, 82], "togeth": [0, 1, 32, 38, 71, 82], "us": [0, 1, 2, 3, 4, 5, 6, 7, 8, 16, 19, 23, 24, 25, 26, 27, 30, 33, 36, 37, 38, 41, 44, 45, 49, 50, 62, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 81, 82, 83], "option": [0, 1, 3, 5, 6, 7, 8, 16, 18, 28, 29, 32, 33, 36, 37, 38, 39, 41, 43, 44, 47, 49, 50, 53, 56, 57, 61, 62, 63, 64, 67, 68, 69, 70, 71, 72, 73, 74, 75, 77, 78, 79, 81, 82, 83], "enabl": [0, 1, 2, 3, 4, 5, 6, 7, 8, 16, 17, 25, 28, 31, 32, 33, 37, 38, 39, 41, 42, 44, 45, 46, 49, 56, 57, 61, 62, 63, 64, 66, 67, 68, 69, 70, 72, 73, 74, 75, 76, 77, 78, 82], "applic": [0, 6, 16, 25, 37, 38, 64, 66, 72], "command": [0, 4, 5, 6, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 31, 38, 66, 67, 69, 70, 71, 72, 73, 75, 76, 78], "entir": [0, 2, 68], "simultan": [0, 66], "eth1": [0, 1, 2, 3, 5, 6, 7, 64, 66, 67, 70, 72, 74, 75, 77, 78, 81, 82], "type": [0, 1, 2, 4, 6, 7, 28, 29, 38, 41, 44, 46, 51, 62, 64, 66, 70, 71, 72, 73, 74, 75, 77, 78, 79, 81, 82], "pppoe": [0, 2, 3, 5, 6, 16, 28, 41, 59, 61, 64, 65, 66, 67, 68, 70, 72, 74, 82, 83], "usernam": [0, 3, 7, 16, 25, 38, 41, 55, 70, 73], "even": [0, 28, 38, 49, 68, 70, 72, 78, 79], "rtbrick": [0, 1, 3, 7, 16, 38, 55, 64, 66, 69, 70, 73, 75, 82], "com": [0, 7, 16, 38, 55, 64, 66, 68, 69, 70, 73, 75], "outer": [0, 1, 2, 3, 7, 16, 38, 40, 41, 50, 61, 62, 64, 65, 66, 67, 70, 72, 73, 75, 78, 82, 83], "vlan": [0, 1, 2, 3, 7, 16, 30, 32, 33, 38, 40, 41, 44, 45, 59, 61, 62, 64, 65, 66, 67, 70, 72, 73, 82, 83], "min": [0, 1, 2, 3, 7, 8, 16, 25, 26, 29, 38, 41, 42, 61, 64, 70, 72, 73, 74, 82], "1000": [0, 3, 6, 7, 37, 38, 39, 63, 64, 70, 72, 73, 74, 75, 77, 79, 81, 82], "max": [0, 1, 2, 3, 6, 7, 8, 16, 25, 26, 29, 37, 38, 41, 42, 50, 55, 56, 57, 58, 59, 61, 62, 64, 70, 71, 72, 73, 74, 81, 82], "1998": [0, 70], "step": [0, 38, 41, 62, 69, 70, 73, 82], "2": [0, 1, 2, 3, 4, 6, 7, 8, 16, 19, 26, 31, 33, 37, 38, 41, 44, 46, 48, 51, 53, 61, 62, 64, 66, 67, 69, 70, 71, 72, 73, 74, 75, 77, 78, 79, 81, 82], "inner": [0, 1, 2, 3, 7, 16, 38, 41, 61, 62, 64, 70, 72, 73, 75, 82], "7": [0, 1, 2, 3, 4, 30, 38, 41, 44, 50, 62, 64, 66, 67, 70, 72, 73, 75, 77, 78, 81, 82], "odd": [0, 70], "1001": [0, 38, 46, 70, 73, 77, 79, 82], "1999": [0, 7, 70], "It": [0, 2, 3, 5, 6, 38, 39, 62, 63, 64, 67, 68, 69, 70, 71, 72, 77, 78, 81, 82], "also": [0, 2, 3, 5, 6, 16, 26, 38, 39, 62, 64, 66, 67, 69, 70, 71, 72, 73, 74, 77, 79, 81, 82, 83], "possibl": [0, 3, 5, 6, 38, 46, 64, 66, 67, 69, 70, 71, 72, 77, 79, 81, 82], "assign": [0, 1, 8, 16, 38, 44, 62, 70, 71, 72, 82], "section": [0, 2, 6, 16, 28, 29, 38, 41, 64, 70, 72, 82], "singl": [0, 2, 3, 6, 16, 37, 38, 71, 72, 73, 78, 82, 83], "l2tp": [0, 19, 38, 50, 62, 68, 70, 72, 82, 83], "l2bsa": [0, 38, 68, 70], "multicast": [0, 16, 26, 27, 31, 37, 38, 63, 68, 70, 74, 75, 78], "iptv": [0, 68, 70], "legal": [0, 68], "intercept": [0, 68], "li": [0, 21, 38, 63, 68], "monkei": [0, 16, 38, 41, 61, 70], "In": [1, 2, 8, 16, 26, 27, 28, 38, 39, 62, 66, 70, 71, 72, 73, 76, 79, 82], "addit": [1, 38, 66, 69, 71, 79], "its": [1, 38, 49, 66, 67, 68, 70, 72, 78, 79, 81, 82], "test": [1, 3, 5, 7, 15, 19, 38, 41, 55, 61, 62, 63, 65, 66, 68, 70, 71, 72, 73, 74, 76, 77, 78, 81, 82, 83], "capabl": [1, 29, 38, 64, 66, 69, 71, 73, 75, 78], "excel": 1, "emul": [1, 2, 3, 4, 6, 7, 32, 38, 44, 68, 70, 71, 73, 76, 77, 81, 82], "ip": [1, 3, 6, 7, 30, 31, 37, 38, 50, 57, 62, 64, 68, 70, 71, 73, 75, 78, 79, 82, 83], "over": [1, 6, 7, 15, 16, 29, 38, 49, 61, 62, 63, 66, 67, 72, 74, 75, 77, 78, 81, 82], "ethernet": [1, 2, 4, 7, 65, 70, 73], "subscrib": [1, 68, 70], "both": [1, 2, 6, 7, 16, 25, 26, 38, 55, 62, 68, 70, 71, 72, 73, 74, 76, 81, 82], "dynam": [1, 2, 38, 39, 62, 65, 68, 70, 71, 72, 75, 76, 78, 81, 82], "thi": [1, 2, 3, 5, 6, 7, 8, 16, 19, 24, 25, 26, 27, 28, 29, 30, 32, 33, 36, 37, 38, 39, 41, 43, 44, 47, 49, 55, 56, 57, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 81, 82, 83], "particularli": [1, 38], "valuabl": [1, 66], "valid": [1, 4, 38, 49, 71, 75, 78, 79, 82], "perform": [1, 64, 66, 68, 70, 71, 76, 82], "behavior": [1, 6, 7, 16, 24, 38, 63, 66, 68, 72, 82, 83], "infrastructur": [1, 2, 71], "compon": 1, "handl": [1, 38, 68, 70, 71, 72], "base": [1, 2, 3, 6, 16, 18, 37, 38, 41, 46, 50, 51, 62, 63, 68, 70, 72, 73, 75, 77, 78, 79, 81, 82], "administr": 1, "develop": [1, 16, 68, 79, 81], "simul": [1, 28, 38, 66, 68, 71, 76], "util": [1, 2, 38, 72, 75], "underli": [1, 64, 66], "link": [1, 2, 16, 17, 25, 29, 39, 40, 41, 42, 43, 44, 64, 68, 72, 73, 76, 77, 78, 79, 81, 82, 83], "layer": [1, 2, 38, 39, 43, 62, 70, 73, 82], "protocol": [1, 3, 4, 6, 7, 16, 19, 28, 29, 37, 38, 41, 44, 45, 46, 55, 56, 57, 65, 70, 71, 73, 74, 75, 77, 78, 79, 81, 82], "extend": [1, 31, 38, 75, 78], "offer": [1, 64, 66, 71, 82], "configur": [1, 2, 6, 16, 25, 26, 28, 31, 37, 41, 43, 50, 56, 57, 58, 61, 64, 65, 66, 67, 68, 70, 71, 72, 73, 83], "method": [1, 5, 82], "scenario": [1, 2, 38, 66, 71, 72, 82], "where": [1, 2, 3, 38, 50, 62, 64, 70, 71, 73, 75, 82, 83], "specif": [1, 2, 7, 16, 26, 38, 45, 58, 64, 66, 68, 71, 72, 79, 81, 82], "individu": 1, "facilit": [1, 64], "accur": 1, "polici": [1, 75], "reli": 1, "alloc": 1, "requir": [1, 2, 5, 7, 36, 38, 43, 47, 62, 63, 66, 67, 69, 70, 71, 72, 77, 82], "like": [1, 6, 32, 33, 38, 62, 68, 70, 71, 75, 77, 78, 81, 82], "host": [1, 2, 4, 7, 38, 59, 70, 82], "realist": 1, "obtain": 1, "similar": [1, 16, 26, 70, 74, 76, 81], "real": [1, 6, 69, 72, 76, 77, 81], "world": [1, 6, 72], "deploy": [1, 66], "differ": [1, 3, 5, 6, 7, 29, 38, 50, 62, 63, 66, 68, 70, 72, 73, 74, 75, 77, 81, 82], "virtual": [1, 68, 73, 76, 77, 81], "local": [1, 2, 10, 16, 19, 20, 25, 31, 35, 38, 41, 44, 49, 53, 64, 66, 70, 71, 72, 73, 75, 78, 79, 81], "area": [1, 38, 46, 51, 73, 77, 79, 81], "mode": [1, 3, 7, 38, 39, 41, 43, 50, 65, 66, 69, 72], "includ": [1, 2, 6, 7, 8, 16, 27, 28, 37, 38, 39, 45, 57, 64, 67, 68, 69, 70, 71, 73, 74, 75, 76, 77, 78, 79, 81, 82, 83], "n": [1, 3, 7, 16, 38, 41, 45, 61, 62, 66, 70, 71, 73, 75, 78, 79, 82], "associ": [1, 38, 41, 44, 66, 67, 70, 71, 72, 81, 82], "dedic": [1, 6, 37, 38, 41, 70, 71, 72], "ensur": [1, 7, 38, 71, 72, 81, 82], "isol": 1, "control": [1, 3, 7, 16, 27, 31, 32, 33, 38, 45, 49, 50, 59, 63, 66, 68, 73, 75, 78, 79, 81, 82], "On": [1, 72, 73], "other": [1, 2, 7, 16, 26, 28, 38, 39, 55, 64, 65, 66, 69, 70, 71, 72, 73, 77, 81, 83], "hand": 1, "share": [1, 70, 71, 72], "common": [1, 3, 5, 68, 77, 81], "By": [1, 28, 38, 64, 66, 75], "comprehens": [1, 64, 66, 68, 71, 76], "environ": [1, 72, 82], "whether": [1, 64, 71, 82], "evalu": [1, 66, 68, 71], "mechan": [1, 71], "assess": [1, 66, 68, 71], "thorough": [1, 68], "optim": [1, 7, 38, 63, 68, 69, 71, 72, 81], "mean": [1, 2, 7, 8, 38, 39, 45, 58, 62, 67, 68, 70, 71, 72, 75, 78, 82], "shown": [1, 3, 4, 6, 16, 19, 69, 70, 71, 77, 78, 81, 83], "exampl": [1, 2, 3, 4, 6, 7, 8, 16, 27, 38, 62, 64, 66, 67, 69, 70, 72, 73, 74, 75, 76, 77, 78, 79, 81, 82], "below": [1, 2, 3, 6, 16, 19, 38, 63, 68, 69, 70, 71, 73, 77, 81, 83], "access": [1, 2, 3, 5, 7, 8, 16, 17, 28, 29, 32, 33, 36, 39, 41, 62, 64, 66, 67, 68, 71, 72, 73, 74, 82], "128": [1, 2, 6, 7, 38, 46, 62, 70, 73, 77, 78, 82], "4000": [1, 2, 3, 64, 70, 72, 73, 82], "200": [1, 3, 4, 7, 16, 64, 66, 70, 71, 73, 74, 77, 78, 81, 82], "0": [1, 2, 3, 4, 6, 7, 8, 16, 18, 28, 29, 30, 31, 32, 33, 34, 36, 37, 38, 39, 41, 42, 44, 45, 46, 49, 50, 51, 53, 57, 58, 59, 60, 61, 62, 64, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 77, 78, 79, 81, 82], "iter": [1, 6, 15, 16, 37, 38, 41, 61, 62, 70, 71], "4": [1, 4, 7, 8, 16, 19, 31, 38, 41, 44, 61, 64, 66, 67, 68, 70, 72, 73, 74, 75, 77, 78, 81, 82], "most": [1, 3, 38, 41, 65, 70, 72, 83], "true": [1, 2, 3, 5, 6, 7, 8, 31, 32, 33, 34, 36, 37, 38, 39, 41, 44, 45, 46, 47, 52, 56, 57, 60, 61, 62, 63, 64, 66, 67, 69, 70, 71, 72, 73, 75, 77, 79, 81, 82, 83], "line": [1, 2, 3, 7, 16, 28, 29, 32, 33, 41, 70, 73, 82], "agent": [1, 2, 3, 7, 16, 25, 28, 32, 33, 38, 41, 70, 73], "remot": [1, 2, 3, 7, 16, 19, 25, 28, 32, 33, 38, 41, 53, 70, 73, 79, 81], "deu": [1, 3, 7, 38, 73], "circuit": [1, 2, 3, 7, 16, 25, 28, 32, 33, 38, 41, 70, 73], "eth": [1, 3, 7, 38, 73], "attribut": [1, 3, 6, 7, 8, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 66, 67, 70, 75, 77, 78, 81, 82], "descript": [1, 3, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 66, 67, 70, 75, 77, 78, 81, 82], "ipv6": [1, 2, 3, 4, 5, 8, 16, 25, 31, 34, 35, 41, 44, 45, 46, 49, 60, 62, 65, 66, 70, 71, 73, 74, 75, 77, 78, 79, 81, 82], "disabl": [1, 2, 5, 6, 7, 8, 16, 17, 28, 32, 33, 37, 38, 45, 46, 49, 56, 57, 58, 59, 60, 62, 70, 71, 73, 77, 78, 82], "default": [1, 3, 4, 5, 6, 7, 8, 16, 18, 24, 26, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 69, 70, 72, 73, 75, 77, 78, 79, 81, 82, 83], "ipv4": [1, 2, 3, 4, 5, 6, 8, 10, 16, 20, 30, 31, 32, 34, 35, 36, 41, 44, 45, 46, 49, 50, 53, 60, 62, 63, 65, 66, 67, 70, 71, 72, 73, 74, 75, 77, 78, 79, 81, 82], "timeout": [1, 2, 3, 7, 16, 24, 32, 33, 38, 42, 45, 49, 55, 56, 57, 58, 59, 70, 74, 78], "initi": [1, 6, 7, 37, 38, 45, 57, 58, 63, 64, 66, 67, 71, 78, 79, 82], "retri": [1, 2, 3, 7, 32, 33, 38, 45, 46, 50, 51, 55, 56, 57, 58, 59, 66, 77, 81], "interv": [1, 3, 6, 7, 30, 32, 36, 37, 38, 39, 41, 43, 44, 45, 46, 49, 50, 51, 58, 62, 63, 66, 67, 70, 73, 77, 78, 81, 82], "second": [1, 6, 7, 8, 16, 25, 30, 31, 32, 33, 34, 36, 37, 38, 45, 46, 49, 51, 55, 56, 57, 58, 59, 61, 62, 66, 67, 71, 73, 74, 75, 77, 78, 81, 82], "period": [1, 38, 45], "300": [1, 38, 45, 46, 77], "prioriti": [1, 2, 3, 6, 7, 16, 18, 30, 32, 33, 37, 38, 41, 42, 43, 44, 45, 50, 51, 59, 62, 70, 73, 78, 81, 82], "pbit": [1, 7, 32, 33, 38, 45, 59, 82], "gener": [1, 8, 16, 27, 37, 38, 43, 45, 46, 60, 61, 64, 66, 67, 68, 69, 70, 73, 74, 76, 77, 79, 81, 82, 83], "icmpv6": [1, 38, 44, 45, 65, 70, 74], "r": [1, 38, 45, 66, 71, 74, 79], "master": [1, 38, 45], "valu": [1, 7, 16, 28, 29, 31, 36, 38, 41, 44, 45, 49, 55, 62, 63, 66, 67, 70, 71, 74, 75, 78, 82], "unless": [1, 38, 45, 82], "overridden": [1, 38, 45], "set": [1, 3, 6, 7, 8, 11, 16, 28, 32, 36, 37, 38, 40, 41, 43, 44, 45, 49, 50, 55, 62, 63, 66, 67, 69, 71, 72, 73, 74, 75, 78, 79, 82], "broadcast": [1, 32, 38, 44, 70, 73, 77, 81], "flag": [1, 16, 26, 32, 38, 64, 65, 67, 70, 71, 82], "fals": [1, 2, 3, 6, 7, 31, 32, 33, 36, 37, 38, 39, 40, 41, 42, 44, 46, 47, 49, 50, 57, 58, 59, 61, 62, 63, 66, 67, 70, 71, 72, 73, 75, 77, 78, 79, 82], "5": [1, 3, 4, 6, 7, 8, 31, 32, 33, 37, 38, 46, 49, 50, 51, 55, 56, 57, 58, 59, 62, 69, 70, 71, 72, 73, 74, 75, 77, 78, 81, 82], "10": [1, 2, 3, 4, 6, 7, 16, 32, 33, 38, 41, 44, 46, 48, 49, 51, 53, 56, 57, 58, 59, 62, 64, 66, 67, 70, 71, 72, 73, 74, 75, 77, 78, 79, 81, 82], "releas": [1, 12, 16, 32, 38, 64, 69, 72, 75], "3": [1, 2, 3, 4, 6, 7, 8, 16, 19, 26, 31, 32, 36, 37, 38, 41, 44, 46, 49, 53, 58, 61, 62, 67, 68, 70, 72, 73, 74, 75, 77, 78, 79, 81, 82], "tos": [1, 3, 6, 31, 32, 36, 37, 38, 49, 50, 67, 75, 78, 82], "TOS": [1, 3, 6, 31, 32, 36, 37, 38, 49, 50, 62, 67, 75, 78, 82], "all": [1, 2, 3, 5, 6, 7, 8, 9, 10, 13, 14, 15, 16, 17, 19, 20, 21, 25, 26, 27, 32, 33, 38, 39, 47, 49, 50, 52, 59, 60, 61, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 77, 78, 81, 82, 83], "overrid": [1, 32, 33, 38], "packet": [1, 2, 3, 4, 6, 7, 28, 32, 33, 37, 38, 39, 50, 62, 63, 64, 65, 69, 71, 72, 73, 74, 75, 77, 78, 79, 81, 82, 83], "onli": [1, 2, 3, 4, 6, 7, 16, 25, 26, 32, 33, 36, 37, 38, 39, 41, 43, 53, 62, 63, 65, 67, 68, 70, 71, 72, 77, 81, 82, 83], "add": [1, 3, 32, 33, 38, 41, 43, 50, 70, 73, 75, 79], "vendor": [1, 3, 32, 38, 41, 58, 64, 68, 70], "class": [1, 32, 38, 41, 70, 72], "60": [1, 3, 32, 38, 41, 70, 72, 81], "keep": [1, 5, 12, 16, 32, 38, 71], "init": [1, 12, 16, 32, 38, 73], "reboot": [1, 12, 16, 32, 38], "stop": [1, 5, 6, 7, 11, 12, 13, 14, 15, 16, 23, 25, 26, 27, 32, 36, 38, 61, 62, 63, 66, 67, 70, 73], "zero": [1, 3, 28, 32, 38, 50, 70, 72, 82], "ia": [1, 33, 38], "na": [1, 33, 38], "ia_na": [1, 33, 38], "pd": [1, 33, 38], "ia_pd": [1, 33, 38], "separ": [1, 33, 38, 68, 82], "send": [1, 2, 3, 6, 7, 8, 12, 16, 19, 28, 31, 33, 36, 37, 38, 44, 46, 49, 50, 60, 62, 64, 65, 67, 69, 70, 72, 73, 75, 77, 78, 80, 81, 83], "seper": [1, 33, 38], "request": [1, 3, 5, 6, 7, 16, 19, 24, 30, 33, 34, 36, 37, 38, 55, 56, 57, 58, 61, 64, 66, 67, 68, 70, 74, 77, 81], "rapid": [1, 7, 33, 38], "commit": [1, 7, 33, 38, 68, 69], "wai": [1, 6, 33, 38, 64, 69, 77, 81], "handshak": [1, 33, 38, 66, 77], "ldra": [1, 28, 33, 38, 41, 70], "lightweight": [1, 28, 33, 38, 66, 68, 73], "relai": [1, 28, 33, 38], "rfc6221": [1, 33, 38], "http": [1, 13, 33, 34, 35, 41, 64, 68, 69, 70, 75, 83], "datatrack": [1, 33, 38], "ietf": [1, 33, 38, 77, 78], "org": [1, 33, 38, 68, 69], "doc": [1, 33, 38, 69], "html": [1, 33, 38, 69], "ad": [1, 16, 33, 38, 71, 73, 82], "inform": [1, 3, 7, 8, 15, 16, 25, 26, 33, 38, 64, 75, 77, 78, 81, 82, 83], "should": [1, 5, 6, 33, 38, 63, 64, 66, 69, 70, 72, 73, 75, 78, 81, 82], "info": [1, 3, 6, 7, 15, 16, 17, 25, 26, 64, 71, 73, 75, 78, 82, 83], "detail": [1, 2, 3, 4, 6, 7, 8, 16, 21, 37, 38, 62, 64, 67, 68, 69, 70, 73, 74, 81, 82], "sudo": [1, 3, 4, 5, 6, 7, 16, 19, 64, 66, 69, 70, 71, 73, 75, 77, 78, 81, 82, 83], "bngblaster": [1, 3, 4, 5, 6, 7, 16, 19, 38, 39, 46, 49, 51, 64, 66, 68, 69, 70, 71, 73, 75, 77, 78, 81, 82, 83], "cli": [1, 3, 4, 5, 6, 7, 19, 66, 68, 71, 73, 75, 76, 77, 78, 81, 82], "run": [1, 3, 4, 5, 6, 7, 16, 19, 38, 39, 64, 66, 68, 70, 71, 72, 73, 75, 77, 78, 81, 82], "sock": [1, 3, 4, 5, 6, 7, 16, 19, 64, 66, 71, 73, 75, 77, 78, 81, 82], "jq": [1, 7, 16, 66, 73, 77, 81, 82], "statu": [1, 3, 4, 6, 7, 16, 38, 58, 66, 71, 73, 77, 78, 82], "ok": [1, 3, 4, 6, 7, 16, 64, 66, 71, 73, 77, 78, 82], "code": [1, 3, 4, 7, 16, 19, 64, 66, 71, 73, 77, 78, 82], "state": [1, 2, 3, 6, 7, 16, 27, 29, 38, 63, 64, 66, 68, 70, 71, 73, 77, 78, 79, 81, 82], "8": [1, 2, 3, 4, 36, 38, 64, 67, 69, 70, 71, 72, 75, 77, 78, 81, 82], "mac": [1, 2, 7, 38, 39, 40, 42, 43, 44, 67, 70, 73, 82], "02": [1, 2, 7, 38, 42, 70, 73, 79], "00": [1, 2, 7, 8, 29, 38, 42, 69, 70, 72, 73, 74, 77, 79], "01": [1, 2, 7, 64, 70, 73, 74, 77], "netmask": 1, "255": [1, 3, 31, 38, 39, 42, 46, 50, 51, 62, 70, 75, 77, 81, 82], "dns1": [1, 7, 38, 57, 73], "dns2": [1, 7, 38, 57, 73], "prefix": [1, 7, 8, 38, 39, 60, 67, 68, 70, 72, 73, 75, 78, 79, 82], "fc66": [1, 2, 3, 7, 38, 44, 66, 70, 73, 75, 77, 81, 82], "1337": [1, 2, 3, 7, 66, 70, 73, 77, 79, 81, 82], "2222": 1, "deleg": [1, 7, 8, 38, 60], "3333": 1, "64": [1, 7, 8, 36, 38, 44, 51, 62, 66, 67, 70, 71, 72, 73, 77, 81, 82], "bound": [1, 7, 36, 38, 67, 73, 82], "server": [1, 3, 7, 35, 50, 57, 64, 68, 71, 72, 73], "leas": 1, "time": [1, 6, 7, 31, 38, 46, 47, 49, 51, 59, 63, 64, 68, 69, 73, 74, 75, 76, 77, 78, 81, 82, 83], "expir": 1, "299": 1, "t1": 1, "149": 1, "t2": 1, "261": 1, "tx": [1, 2, 3, 7, 16, 26, 38, 39, 42, 43, 44, 46, 62, 70, 72, 73, 74, 75, 77, 78, 82], "rx": [1, 3, 4, 6, 7, 38, 39, 43, 62, 64, 70, 71, 72, 73, 74, 75, 78, 82], "discov": 1, "ack": [1, 16, 26], "nak": 1, "14400": 1, "14399": 1, "899": 1, "1439": 1, "solicit": 1, "advertis": [1, 38, 44, 65, 67, 70, 73, 77, 82], "repli": [1, 67, 73], "renew": 1, "6": [1, 2, 4, 7, 31, 38, 72, 74, 75, 77, 78, 81, 82], "fragment": [1, 7, 38, 63, 67, 73, 74], "total": [1, 7, 8, 64, 66, 67, 69, 73, 74, 82], "flow": [1, 4, 7, 8, 16, 21, 25, 26, 31, 38, 68, 72, 73, 74, 75], "verifi": [1, 2, 6, 7, 8, 16, 26, 38, 62, 63, 64, 68, 71, 72, 73, 74, 82, 83], "downstream": [1, 2, 4, 6, 7, 8, 16, 25, 26, 28, 29, 38, 60, 62, 70, 71, 73, 74, 78, 82], "13": [1, 3, 7, 38, 41, 44, 70, 72, 73, 78, 79], "first": [1, 2, 6, 7, 8, 16, 31, 37, 38, 41, 61, 62, 70, 71, 72, 73, 74, 75, 81, 82], "seq": [1, 7, 38, 41, 44, 67, 70, 73, 74, 77, 81, 82], "loss": [1, 6, 7, 68, 72, 73, 74, 82, 83], "wrong": [1, 7, 73, 74, 82], "upstream": [1, 2, 4, 7, 8, 16, 25, 26, 28, 29, 38, 62, 71, 73, 74, 82], "ipv6pd": [1, 7, 8, 38, 60, 62, 74, 82], "bitstream": 2, "refer": [2, 4, 7, 70, 75, 77, 78], "make": [2, 28, 38, 64, 69, 71, 75], "hi": 2, "avail": [2, 64, 76], "These": [2, 36, 38, 64, 67, 71, 76, 82], "retail": 2, "who": 2, "germani": 2, "mandat": 2, "feder": 2, "agenc": 2, "german": 2, "bundesnetzagentur": 2, "bnetza": 2, "regulatori": 2, "offic": 2, "electr": 2, "ga": 2, "telecommun": [2, 71], "post": [2, 64], "railwai": 2, "market": 2, "ministri": 2, "econom": 2, "affair": 2, "energi": 2, "locat": [2, 38, 64, 66], "bonn": 2, "definit": [2, 29, 38, 66], "wa": [2, 7, 16, 68, 71, 72, 77, 79], "so": [2, 38, 70, 72, 82], "call": [2, 3, 8, 38, 64, 70, 71, 74, 77, 78, 79, 81, 82], "nga": 2, "forum": [2, 28, 38], "advisori": 2, "board": 2, "found": [2, 16, 64, 66, 68, 69, 72, 77, 78, 81, 82], "mai": [2, 5, 6, 7, 38, 49, 63, 64, 72, 75, 78], "2010": 2, "promot": 2, "dialogu": 2, "between": [2, 6, 8, 29, 37, 38, 46, 49, 60, 63, 66, 67, 70, 72, 73, 74, 75, 77, 78, 79, 81, 82], "oper": [2, 64, 66, 68, 71, 72, 75, 78, 82], "manufactur": 2, "author": 2, "rollout": 2, "two": [2, 5, 7, 36, 38, 66, 67, 70, 72, 73, 75, 77, 78, 80, 81, 82], "u": [2, 16, 38, 70, 79, 82], "a10": [2, 38, 70], "nsp": [2, 38], "those": [2, 7, 8, 16, 29, 38, 41, 62, 64, 67, 70, 71, 72, 73, 74, 75, 77, 78, 79, 81, 82, 83], "were": [2, 38], "introduc": 2, "tr": [2, 70], "101": [2, 6], "migrat": 2, "aggreg": [2, 16, 17, 28, 41, 68, 72, 83], "transpar": 2, "without": [2, 5, 6, 12, 16, 38, 39, 69, 70, 73], "tag": [2, 4, 72], "wholesal": 2, "some": [2, 4, 6, 37, 38, 64, 65, 70, 72, 73, 83], "cpe": [2, 5, 7], "untag": [2, 38, 41, 44], "while": [2, 16, 38, 77, 81, 82], "anoth": [2, 6, 71, 72, 73, 82], "need": [2, 16, 38, 39, 67, 69, 70, 71, 72, 73, 77, 82], "forward": [2, 8, 28, 38, 68, 75, 78, 82], "bundl": 2, "one": [2, 4, 6, 7, 36, 38, 62, 64, 67, 70, 71, 72, 73, 74, 75, 76, 77, 78, 81, 82], "more": [2, 5, 6, 16, 37, 38, 63, 66, 68, 70, 71, 72, 73, 75, 77, 78, 81, 82], "lacp": [2, 38, 42, 43, 70], "least": [2, 16, 36, 38, 67, 70, 72, 82], "limit": [2, 38, 41, 42, 64, 65, 70, 71, 72, 82], "amount": [2, 16, 25, 64], "4094": 2, "per": [2, 5, 6, 7, 16, 37, 38, 39, 41, 43, 44, 46, 61, 62, 63, 64, 68, 69, 70, 71, 72, 74, 75, 77, 82, 83], "caus": [2, 72, 77], "usabl": [2, 64], "rang": [2, 3, 7, 16, 25, 26, 28, 29, 30, 31, 34, 35, 36, 38, 39, 41, 44, 46, 49, 50, 51, 53, 54, 61, 62, 63, 66, 67, 70, 71, 73, 75, 77, 78, 81, 82], "mani": [2, 5, 64, 68, 70, 73], "thei": [2, 29, 38, 71, 73, 82], "address": [2, 3, 4, 6, 7, 8, 10, 12, 16, 20, 25, 27, 30, 31, 32, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 49, 50, 53, 57, 60, 62, 64, 66, 67, 70, 72, 73, 75, 77, 78, 79, 81, 82, 83], "than": [2, 38, 62, 63, 66, 68, 70, 72, 75, 77, 78, 82], "term": [2, 70], "relat": [2, 71, 83], "end": [2, 64, 68, 70, 73, 74, 75, 76, 82], "adsl": [2, 70], "model": [2, 70], "depict": 2, "figur": 2, "core": [2, 38, 43, 68, 70], "subset": 2, "architectur": [2, 72], "compos": 2, "block": [2, 16, 27, 70], "three": [2, 6, 37, 38, 70, 74, 77, 79, 81, 82], "point": [2, 71, 79], "node": [2, 38, 46, 51, 68, 72, 73, 76, 77, 79, 81], "region": 2, "v": [2, 38, 39, 69, 70, 79], "map": [2, 70, 71, 78, 81], "chang": [2, 5, 6, 37, 38, 39, 49, 61, 63, 64, 65, 69, 70, 73, 75, 78, 79, 81, 82], "trigger": [2, 75, 78], "re": [2, 72], "provis": 2, "action": 2, "port": [2, 4, 34, 35, 38, 62, 63, 64, 66, 71, 72, 78], "up": [2, 3, 6, 7, 8, 28, 29, 38, 41, 65, 70, 72, 73, 74, 77, 78, 80, 82], "down": [2, 3, 7, 28, 29, 38, 41, 66, 70, 73], "thu": 2, "discoveri": [2, 3, 7, 28, 38, 59, 78], "v6": 2, "must": [2, 5, 16, 38, 49, 64, 67, 70, 73, 78, 79, 82], "enrich": [2, 38], "extra": 2, "identif": [2, 82], "header": [2, 4, 6, 36, 38, 50, 62, 64, 65, 66, 67, 70, 71, 77, 81, 82, 83], "actual": [2, 16, 28, 29, 38, 39, 62, 70, 71, 72, 74, 75, 78, 82], "data": [2, 28, 29, 36, 38, 50, 63, 64, 67, 74, 75, 77, 81, 82], "rate": [2, 3, 7, 8, 28, 29, 38, 41, 61, 62, 63, 68, 70, 71, 82], "direct": [2, 4, 6, 16, 19, 25, 26, 38, 44, 62, 64, 70, 71, 72, 73, 78, 82], "from": [2, 3, 6, 7, 8, 15, 16, 22, 24, 28, 31, 37, 38, 41, 49, 50, 62, 65, 67, 68, 70, 71, 72, 73, 75, 77, 78, 81, 82, 83], "receiv": [2, 3, 4, 6, 7, 8, 38, 39, 49, 50, 54, 62, 64, 67, 68, 70, 71, 72, 73, 74, 77, 78, 80, 81, 82, 83], "intermedi": [2, 77], "a10nsp": [2, 8, 16, 17, 39, 40, 41, 44, 62, 64, 68, 72, 73, 82], "accept": [2, 7, 16, 24, 38, 58, 70, 73], "follow": [2, 3, 4, 5, 6, 7, 8, 16, 37, 38, 61, 64, 66, 67, 69, 70, 71, 72, 73, 74, 75, 77, 78, 79, 81, 82, 83], "basic": [2, 7, 66, 67, 73, 81], "explain": [2, 16, 38, 64, 69, 70, 72, 73], "eth4": [2, 70], "qinq": [2, 38, 40, 41, 70, 73], "ff": [2, 38, 41, 42, 44, 70], "eth5": [2, 70], "__comment__": [2, 64, 67, 72, 73], "stream": [2, 4, 6, 8, 25, 26, 27, 39, 41, 62, 63, 64, 65, 68, 70, 72, 73, 74, 75, 79, 83], "reconnect": [2, 3, 5, 7, 16, 25, 31, 36, 38, 59, 61, 67, 72, 73, 75], "uniq": [2, 7, 38, 59], "autostart": [2, 3, 5, 6, 8, 34, 36, 37, 38, 41, 60, 61, 62, 63, 66, 67, 70, 82], "pp": [2, 3, 6, 7, 8, 16, 26, 37, 38, 60, 62, 70, 71, 72, 73, 74, 75, 78, 82], "name": [2, 3, 6, 7, 8, 16, 23, 26, 34, 35, 38, 39, 40, 41, 42, 43, 44, 50, 59, 62, 64, 66, 67, 70, 71, 72, 73, 74, 75, 78, 79, 82, 83], "s1": [2, 72, 73, 74, 78], "length": [2, 3, 6, 37, 38, 50, 62, 65, 66, 70, 73, 75, 77, 78, 81, 82], "256": [2, 6, 38, 39, 46, 70, 73, 77, 82], "s2": [2, 73], "same": [2, 3, 4, 6, 16, 38, 50, 66, 67, 70, 72, 73, 74, 75, 78, 81, 82], "static": [2, 38, 41, 70, 71, 82], "directli": [2, 38, 39, 63, 70, 77, 81], "lag": [2, 16, 17, 42, 43, 68, 72, 83], "parent": [2, 38, 40, 41, 44, 70], "manual": [2, 38, 44, 66, 69, 70, 72, 75, 78, 79, 82], "automat": [2, 4, 5, 6, 7, 8, 16, 28, 31, 37, 38, 43, 47, 52, 59, 60, 61, 63, 64, 66, 70, 72, 75, 77, 81, 82], "balanc": [2, 38, 63, 72], "member": [2, 38, 42, 70], "thread": [2, 6, 38, 39, 43, 70, 72, 75, 83], "recommend": [2, 6, 38, 39, 63, 68, 69, 70, 72], "specifi": [2, 6, 8, 16, 23, 29, 37, 38, 60, 63, 73, 78, 82], "correspond": [2, 5, 6, 8, 16, 28, 38, 41, 60, 62, 64, 70, 72, 75, 78, 79, 82], "otherwis": [2, 82], "explicitli": [2, 64, 70, 78, 82], "autogener": [2, 6, 8, 38, 60], "With": [2, 7, 67, 68, 72], "learn": [2, 38, 39, 70, 71, 77, 78, 81, 83], "move": [2, 38, 39, 70, 77], "correct": [2, 6], "featur": [2, 5, 16, 24, 28, 38, 39, 68, 70, 73, 82], "when": [2, 36, 38, 66, 67, 71, 78, 82], "experiment": [2, 38, 39, 44, 68, 69, 70, 72, 81], "termin": [2, 5, 7, 16, 19, 38, 59, 64, 66, 73], "mpl": [2, 8, 38, 60, 62, 65, 68, 72, 76, 78, 82], "encapsul": [2, 29, 38, 82], "through": [2, 38, 39, 64, 66, 67, 68, 70, 73, 76, 78], "label": [2, 8, 31, 38, 44, 60, 62, 64, 68, 70, 73, 75, 78, 80, 82], "ingress": 2, "egress": 2, "transport": [2, 38, 44, 49, 70, 78], "switch": [2, 29, 38, 44, 70, 78], "eth2": [2, 3, 4, 6, 7, 38, 66, 67, 70, 72, 74, 77, 81, 82], "7331": [2, 3, 7, 66, 70, 73, 77, 82], "13370": 2, "p0": 2, "destin": [2, 4, 6, 16, 27, 34, 36, 38, 62, 66, 67, 70, 71, 72, 73, 78], "bgp": [2, 10, 31, 64, 68, 72, 76, 82, 83], "peer": [2, 3, 10, 16, 20, 31, 38, 49, 50, 73, 75, 77, 78], "raw": [2, 6, 10, 16, 20, 27, 31, 38, 39, 49, 62, 64, 65, 69, 73, 76], "updat": [2, 10, 16, 18, 19, 20, 22, 25, 26, 31, 38, 49, 73, 76], "file": [2, 6, 10, 16, 18, 20, 22, 23, 31, 38, 47, 49, 52, 64, 65, 68, 69, 72, 73, 74, 76, 83], "4200000001": 2, "4200000002": 2, "l2tpv2": [3, 68], "rfc2661": [3, 16, 19, 38, 50], "ln": [3, 50, 68, 83], "abl": [3, 72, 77, 79, 81], "lac": 3, "under": [3, 5, 7, 65, 66, 68, 70, 71, 75, 77, 78, 81, 82], "30": [3, 6, 7, 16, 18, 38, 46, 50, 55, 58, 66, 71, 72, 73, 77, 81], "pap": [3, 7, 38, 55, 74], "chap": [3, 7, 38, 55, 74], "ppp": [3, 41, 54, 55, 56, 57, 58, 59, 70], "mru": [3, 7, 38, 41, 54, 70], "1492": [3, 7, 38, 46, 54, 67, 77, 82], "de": [3, 66, 71, 77], "password": [3, 7, 16, 25, 38, 41, 55, 70], "lcp": [3, 5, 16, 19, 24, 50, 58, 73, 74], "conf": [3, 7, 38, 56, 57, 58, 73], "keepal": [3, 7, 38, 49, 58, 73, 78], "ipcp": [3, 5, 16, 24, 41, 50, 57, 70, 73, 74], "ip6cp": [3, 5, 16, 24, 41, 56, 70, 73, 74], "1024": [3, 7, 77, 81], "16384": [3, 7], "lns1": 3, "11": [3, 6, 64, 66, 69, 72, 73, 78, 79, 81], "secret": [3, 38, 50, 77, 79], "test1": 3, "window": [3, 38, 46, 50, 70, 73, 77, 83], "size": [3, 36, 38, 39, 43, 44, 46, 47, 50, 63, 67, 70, 72, 77, 82], "lns2": 3, "12": [3, 6, 8, 66, 72, 73, 81], "test2": 3, "lns3": 3, "test3": 3, "lns4": 3, "14": [3, 38, 41, 44, 64, 70, 72, 73], "test4": 3, "lns5": 3, "15": [3, 38, 49, 67, 72, 74, 78], "test5": 3, "lns6": 3, "16": [3, 38, 50, 72, 73, 81], "test6": 3, "lns7": 3, "17": [3, 72, 74], "test7": 3, "lns8": 3, "18": [3, 67, 69, 72, 74], "test8": 3, "lns9": 3, "19": [3, 72, 73, 74], "test9": 3, "lns10": 3, "20": [3, 6, 69, 70, 72, 73, 79, 82], "test10": 3, "lns11": 3, "21": [3, 67, 72, 78], "test11": 3, "lns12": 3, "22": [3, 64, 67, 69, 72, 73], "test12": 3, "lns13": 3, "23": [3, 6, 72, 78], "test13": 3, "lns14": 3, "24": [3, 4, 5, 7, 38, 44, 46, 66, 67, 70, 71, 72, 73, 75, 77, 78, 79, 81, 82], "test14": 3, "lns15": 3, "25": [3, 69, 72], "test15": 3, "lns16": 3, "26": [3, 72], "test16": 3, "lns17": 3, "27": [3, 72, 73], "test17": 3, "lns18": 3, "28": [3, 72, 73], "test18": 3, "lns19": 3, "29": [3, 72], "test19": 3, "lns20": 3, "test20": 3, "lns21": 3, "31": [3, 72, 73], "test21": 3, "lns22": 3, "32": [3, 38, 41, 44, 70, 72, 73, 78, 79], "test22": 3, "lns23": 3, "33": [3, 72, 82], "test23": 3, "lns24": 3, "34": [3, 78], "test24": 3, "lns25": 3, "35": [3, 72, 73], "test25": 3, "lns26": 3, "36": [3, 72, 73, 74], "test26": 3, "lns27": 3, "37": [3, 72, 73, 74, 78, 79, 82], "test27": 3, "lns28": 3, "38": [3, 72, 73, 74], "test28": 3, "lns29": 3, "39": [3, 72], "test29": 3, "lns30": 3, "40": [3, 38, 51, 74, 81], "test30": 3, "mandatori": [3, 10, 15, 16, 17, 18, 19, 20, 22, 25, 26, 29, 30, 31, 34, 35, 36, 38, 50, 53, 62, 66, 67, 75, 81, 82], "hostnam": [3, 38, 46, 49, 50, 51, 64, 73, 77, 78, 79, 81], "avp": [3, 38, 50], "tunnel": [3, 16, 19, 38, 50], "messag": [3, 7, 12, 16, 19, 28, 31, 38, 49, 50, 57, 58, 64, 67, 73, 75, 76, 77, 78, 81], "65535": [3, 7, 29, 30, 31, 34, 35, 36, 38, 39, 41, 44, 46, 49, 50, 51, 54, 62, 66, 67, 70, 73, 75, 77, 78, 81, 82], "congest": [3, 6, 38, 50], "slow": [3, 38, 50], "aggress": [3, 38, 50], "reliabl": [3, 6, 38, 50, 71], "deliveri": [3, 38, 50, 81], "describ": [3, 38, 50, 77, 81], "appendix": [3, 38, 50], "channel": [3, 6, 37, 38, 50], "avoid": [3, 38, 50], "fix": [3, 38, 50, 68, 82], "stick": [3, 38, 50], "permit": [3, 28, 38, 50], "hello": [3, 38, 46, 49, 50, 51, 77, 78, 81], "bit": [3, 36, 38, 50, 62, 67, 82], "non": [3, 38, 50, 68, 70, 72, 76], "offset": [3, 38, 50, 82], "sccrq": [3, 38, 50], "icrq": [3, 38, 50], "pad": [3, 38, 46, 50, 74, 77], "client": [3, 6, 9, 12, 13, 14, 16, 30, 34, 36, 41, 50, 62, 64, 68, 70, 72, 73, 77, 81, 82], "auth": [3, 38, 46, 50, 51, 73, 77, 79, 81], "check": [3, 6, 38, 50, 64, 69, 73, 77, 81, 82], "result": [3, 6, 16, 19, 36, 37, 38, 49, 62, 63, 64, 65, 67, 72, 73, 74, 78, 82], "just": [3, 66, 69], "four": 3, "store": [3, 7, 64, 65, 74, 82], "csun": 3, "process": [3, 6, 37, 38, 64, 72, 82], "correctli": [3, 8, 69, 71], "via": [3, 7, 38, 44, 54, 69, 70, 75, 76, 82], "socket": [3, 16, 38, 39, 64, 70, 72, 73, 77, 79, 81], "csurq": [3, 16, 19], "about": [3, 4, 16, 64, 68, 74, 81, 82], "50011": 3, "inc": [3, 68], "102": [3, 6], "dup": 3, "out": [3, 68, 69, 73, 78], "order": [3, 38, 72, 82], "1406": 3, "206": [3, 38, 39, 70, 74], "return": [3, 7, 15, 16, 64, 71, 72, 81, 82], "32867": 3, "proxi": 3, "sub": [3, 4, 71, 82], "bp": [3, 38, 62, 82], "48000": 3, "ari": 3, "aci": 3, "79": [3, 8, 73], "output": [3, 64, 66, 69, 75, 78, 82, 83], "filter": [3, 66, 71, 73, 82, 83], "given": [3, 8, 38, 62, 72, 81, 82], "displai": [3, 4, 9, 10, 13, 14, 15, 16, 18, 19, 20, 22, 25, 26, 71], "mediat": 4, "statist": [4, 16, 21, 25, 26, 38, 63, 64, 68, 73, 74, 82], "todai": 4, "bcm": 4, "qmx": 4, "format": [4, 38, 41, 44, 64, 70, 82], "further": [4, 6, 64, 68, 71, 72, 73, 75, 78, 82], "easili": [4, 69, 74, 75, 78, 82, 83], "integr": [4, 64], "9": [4, 8, 64, 70, 72, 75, 77, 78, 81, 82], "d": [4, 64], "pt": 4, "spt": 4, "liid": 4, "work": [4, 5, 6, 8, 16, 26, 69, 71, 72, 73, 81, 82], "standalon": [4, 73], "100": [4, 6, 7, 8, 38, 63, 66, 67, 69, 70, 71, 72, 73, 74, 75, 77, 82], "sourc": [4, 6, 31, 36, 37, 38, 62, 67, 71, 72, 75, 77, 78, 81], "49152": [4, 38, 63], "doubl": [4, 72], "4194301": 4, "byte": [4, 38, 39, 41, 46, 65, 70, 74, 77, 82], "94": 4, "tcp": [4, 16, 26, 34, 35, 38, 49, 62, 66, 73, 78, 83], "udp": [4, 38, 62, 63, 71, 78, 82], "intern": [4, 65, 71, 74, 77], "next": [4, 6, 37, 38, 66, 73, 75, 82], "160720": 4, "820": 4, "61": [4, 72], "ani": [4, 7, 28, 38, 64, 66, 67, 68, 69, 70, 71, 73, 82], "tester": [4, 66, 68], "59": [4, 72, 73, 79], "robust": [5, 6, 7, 37, 38, 71], "If": [5, 6, 7, 16, 23, 26, 31, 37, 38, 62, 68, 69, 70, 71, 73, 75, 82], "randomli": [5, 79], "kill": [5, 64], "restart": [5, 16, 25, 66, 68, 70], "padt": [5, 74], "e": [5, 6, 16, 26, 37, 38, 40, 41, 42, 43, 44, 63, 64, 70, 73, 77, 79, 81, 82], "g": [5, 6, 16, 26, 37, 38, 40, 41, 42, 43, 44, 62, 63, 64, 70, 79, 81, 82], "power": [5, 8, 29, 38], "outag": 5, "gracefulli": [5, 64], "flap": [5, 16, 18, 74, 76], "independ": 5, "similarli": 5, "auto": [5, 16, 27, 38, 47, 77], "could": [5, 65, 71, 74, 79, 82, 83], "maximum": [5, 6, 7, 29, 37, 38, 39, 41, 42, 49, 54, 63, 70, 72, 74, 78, 82], "As": [5, 64, 69], "soon": [5, 8, 31, 38, 60, 64, 75, 78, 82], "after": [5, 6, 31, 36, 37, 38, 61, 62, 64, 67, 71, 73, 75, 78, 82], "hour": 5, "wait": [5, 6, 37, 38, 44, 61, 62, 66, 70, 71, 82], "becom": [5, 7, 38, 62, 64, 66, 71, 82], "again": [5, 73], "fulli": [5, 68], "recov": [5, 65], "hang": 5, "crash": 5, "memori": [5, 64, 68, 70, 72, 75, 78], "leak": [5, 77], "advanc": [6, 73], "focu": [6, 71], "therefor": [6, 7, 28, 38, 64, 70, 71, 72, 73, 75, 78], "igmp": [6, 15, 37, 41, 70, 74, 83], "version": [6, 29, 37, 38, 41, 51, 64, 66, 69, 70, 71, 73, 77, 78, 79, 81], "implement": [6, 68, 70], "record": [6, 37, 38, 71], "extern": [6, 47, 48, 52, 53, 64, 71, 73, 77, 79, 81], "show": [6, 8, 64, 69, 70, 71, 72, 73, 75, 77, 78, 79, 81, 82, 83], "how": [6, 8, 37, 38, 63, 64, 70, 72, 73, 74, 75, 77, 81, 83], "millisecond": [6, 7, 37, 38, 39, 43, 58, 63, 70], "239": [6, 16, 37, 38, 82], "count": [6, 7, 15, 16, 36, 37, 38, 61, 62, 64, 67, 75, 78, 79, 82], "measur": [6, 8, 37, 38, 63, 68, 74, 75, 82], "delai": [6, 7, 16, 25, 29, 34, 36, 37, 38, 58, 61, 62, 63, 66, 67, 71, 82], "mc1": 6, "mc2": 6, "distribut": [6, 38, 63, 64, 69, 72, 78], "modifi": [6, 38, 39, 70, 75, 78, 79, 82], "enough": [6, 70, 71, 77, 82], "proper": [6, 83], "recogn": 6, "sequenc": [6, 8, 38, 41, 44, 70, 73, 74, 77, 79, 81, 83], "particular": [6, 16, 26, 71, 74, 82], "gap": [6, 82], "last": [6, 12, 16, 74, 75, 82], "would": [6, 8, 65, 72, 73, 74, 82], "report": [6, 8, 37, 38, 68, 73, 82], "argument": [6, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 22, 23, 24, 25, 26, 64, 69, 74, 75, 77, 78, 79, 81, 82, 83], "l": [6, 67, 73, 75, 78, 79, 81, 83], "log": [6, 16, 67, 73, 75, 78, 79], "help": [6, 64, 71, 75, 78, 79, 83], "search": [6, 74], "miss": 6, "captur": [6, 16, 23, 38, 39, 64, 65, 68, 70, 71, 72, 73, 83], "consum": 6, "do": [6, 16, 70, 72, 82], "232": 6, "source1": [6, 15, 16], "202": 6, "source2": [6, 15, 16], "source3": [6, 15, 16], "103": 6, "1291": 6, "activ": [6, 38, 42, 64, 68, 70, 71, 77, 78, 81, 82], "m": [6, 38, 46, 62, 63, 73, 74, 75, 77, 78, 79, 82], "139": [6, 74], "7456": 6, "idl": [6, 66, 73], "114": [6, 82], "kei": [6, 16, 38, 46, 51, 73, 77, 79, 81, 82], "element": [6, 16], "long": [6, 68], "doe": [6, 16, 27, 65, 82], "take": [6, 29, 38, 64, 68, 75], "right": 6, "old": 6, "overlap": 6, "lead": [6, 38, 63, 68], "sent": [6, 8, 37, 38, 39, 62, 63, 64, 70, 71, 72, 73, 78, 82, 83], "fast": [6, 7, 69, 70, 82], "typic": [6, 70, 71, 75, 82], "view": [6, 37, 38, 73], "durat": [6, 37, 38, 74], "within": [6, 29, 37, 38, 63, 65, 68, 71, 77], "igmpv3": [6, 37, 38], "appli": [6, 16, 26, 28, 29, 36, 37, 38, 62, 66, 67, 70, 71, 72, 73, 82], "293": [6, 37, 38], "asm": [6, 37, 38], "befor": [6, 36, 37, 38, 61, 62, 65, 66, 67, 69, 73, 82], "final": [6, 8, 16, 37, 38, 64, 73, 74, 77, 81], "often": [6, 37, 38, 72], "abov": [6, 37, 38, 66, 72], "threshold": [6, 37, 38], "mention": [6, 37, 38], "special": [6, 37, 38], "signatur": [6, 37, 38, 82], "faster": [6, 37, 38, 72, 82], "analysi": [6, 37, 38, 64, 71], "done": [6, 16, 38, 62, 71, 73, 77, 78, 81, 82], "concept": 7, "lean": 7, "idea": [7, 65], "fail": [7, 69], "expect": [7, 16, 19, 29, 38, 62, 65, 75, 77, 81, 82], "condit": [7, 68, 71], "fulfil": [7, 68], "negoti": 7, "successfulli": [7, 16], "dn": [7, 38, 41, 44, 57, 70], "opposit": [7, 72, 82], "behav": [7, 70, 77, 81], "faulti": 7, "4049": [7, 70], "2000": [7, 70, 73, 77, 82], "2999": [7, 70], "outstand": [7, 38, 61], "800": [7, 38, 61], "400": [7, 38, 61, 66, 67], "infin": [7, 36, 38, 59, 62, 67, 82], "padi": [7, 38, 59, 74], "padr": [7, 38, 59, 74], "payload": [7, 38, 59, 62, 82], "rfc4638": [7, 38, 59], "unit": [7, 38, 54, 64], "propos": [7, 38, 54, 72], "reject": [7, 38, 55, 57], "echo": [7, 16, 24, 38, 58, 67, 70, 74], "ignor": [7, 12, 16, 24, 25, 26, 38, 57, 58, 78], "primari": [7, 38, 57, 66, 82], "129": [7, 38, 57], "secondari": [7, 38, 57], "131": [7, 38, 57], "chapter": [7, 38, 62, 82], "rfc": [7, 28, 29, 38, 77, 78], "2153": 7, "oui": 7, "kind": [7, 68, 70, 82], "respond": [7, 67, 70], "copi": [7, 70], "respons": [7, 16, 64, 66, 71], "user1": [7, 73], "open": [7, 16, 24, 31, 38, 68, 73, 74, 75, 77, 81], "56": [7, 72, 73], "10036": 7, "10083": 7, "bidirect": [8, 16, 26, 38, 60, 62, 71, 72, 73, 82], "unicast": [8, 31, 38, 71, 73, 75], "tool": [8, 16, 19, 68, 71, 73, 75, 76, 77, 78, 79, 81], "quickli": [8, 68], "unlabel": [8, 38, 60], "overwrit": [8, 38, 40, 41, 43, 60, 62, 70, 82], "prefer": [8, 38, 49, 75, 78], "select": [8, 38, 39, 41, 62, 70, 82], "config": [8, 38, 64, 65, 69, 73, 74, 79, 82], "96000": 8, "16000": 8, "violat": [8, 74], "12278": 8, "3071": 8, "3040": 8, "6167": 8, "12252": 8, "76": [8, 38, 62, 82], "3185": 8, "2900": 8, "12306": 8, "82": 8, "3123": 8, "2978": 8, "6205": 8, "12314": 8, "83": 8, "3104": 8, "3033": 8, "6177": 8, "3184": 8, "2891": 8, "12361": 8, "88": [8, 74], "3178": 8, "2957": 8, "6226": 8, "73763": 8, "84": 8, "18845": 8, "17799": 8, "37119": 8, "avg": [8, 29, 38, 74], "converg": [8, 68], "64bit": 8, "assum": [8, 38, 49, 61, 72, 78, 82], "took": [8, 82], "until": [8, 38, 44, 62, 64, 66, 70, 71, 78, 82], "reset": [9, 15, 16, 25, 26, 38, 49, 62, 78, 82], "match": [10, 16, 19, 20, 67, 78], "disconnect": [10, 16, 19, 20], "teardown": [10, 16, 18, 20, 22, 31, 38, 46, 47, 49, 51, 52, 61, 66, 75, 77, 78, 81], "list": [10, 16, 17, 19, 20, 21, 25, 26, 38, 39, 64, 68, 70, 73, 75, 77, 81, 82, 83], "load": [10, 16, 18, 20, 22, 64, 73, 74, 75, 77, 78, 81], "path": [10, 16, 23, 75, 77, 81], "cfm": [11, 38, 41, 44, 70], "cc": [11, 16, 38, 41, 44, 70], "eoam": [11, 16, 38, 41, 44, 70], "rdi": [11, 16], "off": [11, 16, 72, 73], "unset": [11, 16], "dhcp": [12, 32, 41, 45, 66, 68, 70, 71, 74, 83], "present": [12, 16, 24, 25, 38, 64, 68], "rememb": [12, 16], "icmp": [14, 36, 41, 68, 70, 74, 83], "join": [15, 16, 37, 38, 83], "leav": [15, 16, 37, 38, 83], "zap": [15, 16, 37, 38], "stat": [15, 16, 26, 71, 73, 74, 78], "unix": 16, "domain": [16, 38, 41, 44, 70], "interact": [16, 64, 66, 73, 83], "json": [16, 38, 64, 69, 73, 75, 77, 79, 81, 83], "rpc": [16, 64, 73], "we": [16, 68, 72, 73, 75], "One": [16, 66, 70, 71, 77, 81], "commun": [16, 68, 70, 71], "contain": [16, 64, 68, 70, 77, 81], "carri": 16, "cat": [16, 72, 77, 81], "counter": [16, 25, 64, 82], "nc": 16, "2xx": 16, "warn": [16, 64, 75, 78], "error": [16, 19, 64, 74, 77, 79, 81, 83], "404": [16, 64], "user10": 16, "altern": [16, 28, 38, 61, 69, 77, 81], "replac": [16, 38, 70, 75, 76], "becaus": [16, 38, 62, 77, 82], "eth0": [16, 38, 40, 41, 43, 44, 70, 72, 78], "python": [16, 74, 75, 78], "script": [16, 64, 74, 75, 78, 82, 83], "simpl": [16, 38, 46, 51, 68, 73, 74, 75, 77, 78, 79, 81, 82], "here": [16, 29, 38, 49, 65, 73, 75, 78, 79], "complex": [16, 71], "chain": 16, "pend": [16, 25, 26], "Then": [16, 69, 73], "extract": [16, 74], "flat": 16, "read": [16, 70, 73, 79], "index": [16, 17, 82], "summari": [16, 25, 26, 82], "close": [16, 23, 24, 38, 63, 66, 71, 73, 77, 81], "enforc": [16, 24, 64], "restor": [16, 24], "speed": [16, 19], "execut": [16, 19, 31, 38, 64, 66, 69, 74, 75], "rfc3145": [16, 19], "alter": [16, 27], "current": [16, 23, 27, 38, 39, 63, 64, 70, 72, 75, 77, 78, 82], "ha": [16, 27, 28, 31, 38, 62, 64, 68, 69, 71, 72, 73, 75, 77, 78, 79, 82, 83], "been": [16, 27, 68, 71, 74, 77, 79, 83], "t": [16, 27, 38, 68, 70, 71, 72, 73, 79, 82], "instead": [16, 27, 36, 38, 67], "act": [16, 27, 29, 38], "transmiss": [16, 27, 38, 63, 68, 81], "debug": [16, 26, 64, 69, 75, 78, 79, 83], "except": [16, 26, 38, 39, 70, 77, 81, 82], "fin": [16, 26], "syn": [16, 26, 71, 82], "rst": [16, 26], "push": [16, 26], "adjac": [16, 18, 20, 38, 46, 73, 81], "databas": [16, 18, 20, 22, 38, 47, 74, 78], "lsdb": [16, 18, 22, 79], "level": [16, 18, 38, 41, 44, 46, 48, 70, 73, 75, 77, 78, 79], "mrt": [16, 18, 22, 38, 47, 52, 73, 75, 76, 79], "lsp": [16, 18, 38, 46, 47, 73, 76, 78, 79, 81], "pdu": [16, 18, 22, 38, 49, 77, 78, 81], "purg": [16, 18, 38, 47, 52, 77, 79, 81], "timer": [16, 18, 68], "127": [16, 18, 73, 74], "neighbor": [16, 22, 38, 53, 73], "lsa": [16, 22, 38, 51, 52, 76, 77], "remain": [16, 23, 72, 77], "isi": [18, 44, 46, 47, 48, 64, 68, 70, 76, 79, 82, 83], "ldp": [20, 44, 49, 62, 68, 70, 76, 82], "ospf": [22, 51, 52, 53, 68, 76, 79], "pcap": [23, 65, 73, 75, 77, 78, 79, 81], "design": [28, 38, 71, 72, 75, 76, 77, 81, 82], "subsequ": [28, 38], "emploi": [28, 38], "overwritten": [28, 29, 38], "string": [28, 38, 41, 44, 64, 70], "variabl": [28, 70, 77, 81], "substitut": [28, 38, 70], "ascii": [28, 38, 41, 44, 70, 82], "4294967295": [28, 29, 31, 38, 41, 53, 70, 75, 81], "dsl": [28, 29, 38, 41, 70], "exclud": [28, 38, 82, 83], "imposs": [28, 38], "word": [28, 38, 82], "context": [28, 38, 73], "exclus": [28, 36, 38, 67, 78, 79], "dictat": [28, 38], "deviat": [28, 38], "guidelin": [28, 38], "either": [28, 38, 64, 66, 67, 69, 82], "profil": [29, 41, 70], "treat": [29, 38], "analog": [29, 38], "minimum": [29, 38, 41, 42, 70, 74, 82], "att": [29, 38], "attain": [29, 38], "datar": [29, 38], "low": [29, 38, 68, 70], "interl": [29, 38], "interleav": [29, 38], "encap": [29, 38], "pon": [29, 38], "etr": [29, 38], "throughput": [29, 38, 39, 63, 70, 72], "attetr": [29, 38], "gdr": [29, 38], "gamma": [29, 38], "attgdr": [29, 38], "ont": [29, 38], "onu": [29, 38], "averag": [29, 38, 74], "peak": [29, 38], "ass": [29, 38], "assur": [29, 38], "tree": [29, 38], "draft": [29, 38, 77], "lihawi": [29, 38], "04": [29, 38, 64, 69, 73, 79], "ancp": [29, 38], "extens": [29, 38, 64, 73, 74], "preced": [29, 38], "creat": [30, 36, 38, 41, 61, 67, 70, 73, 75, 76, 77, 78, 79, 81, 82], "target": [30, 38, 63, 69, 78], "resolv": [30, 38, 44, 61, 62, 68, 70, 71, 73, 78, 82], "AS": [31, 38, 73, 75], "65000": [31, 38, 75], "hold": [31, 38, 46, 49, 73, 75, 77, 78], "90": [31, 38, 73, 75], "ttl": [31, 36, 38, 62, 67, 75, 82], "finish": [31, 38, 73, 75], "famili": [31, 38, 75], "vpn": [31, 38, 75], "evpn": [31, 38, 75], "nexthop": [31, 38, 75], "none": [31, 38, 41, 44, 70, 75, 79], "url": [34, 38, 66, 71], "80": [34, 35, 38, 66, 71], "mutual": [36, 38, 67, 78], "them": [36, 38, 64, 66, 67, 70, 73, 77, 79, 81], "65507": [36, 38, 67, 77], "track": [36, 38, 67, 68, 82], "df": [36, 38, 62, 67, 82], "dont": [36, 38, 67], "fragement": [36, 38, 67], "minim": 38, "reloc": 38, "howev": [38, 66, 72, 79], "import": [38, 74, 77, 79, 81], "note": [38, 81], "main": [38, 39, 64, 70, 72, 77, 81], "approach": 38, "prove": 38, "benefici": 38, "conduct": [38, 68], "involv": [38, 68], "million": [38, 64, 68, 71, 72], "distinct": 38, "maintain": [38, 63, 67, 68, 78], "organ": 38, "effect": [38, 49, 66, 71, 78, 82], "your": [38, 65, 68, 70, 72, 73, 75, 78], "empow": 38, "larg": [38, 63, 64, 68, 70, 71, 77, 79, 81], "scale": [38, 68, 72], "eas": [38, 64], "c": [38, 68, 69, 72, 73, 79, 83], "md": [38, 41, 44, 70], "ma": [38, 41, 44, 70], "increment": [38, 62, 70, 75, 78, 82], "i1": [38, 41, 70], "i2": [38, 41, 70], "10000": [38, 73, 78], "io": [38, 39, 43, 64, 65, 69, 70, 72, 74, 82, 83], "packet_mmap_raw": [38, 39, 69, 70], "consid": [38, 39, 64, 65, 70, 72, 81, 82], "mmap": [38, 39, 65], "ring": [38, 39, 43, 70], "buffer": [38, 39, 46, 70, 77], "slot": [38, 39, 43, 70, 72], "might": [38, 39, 70, 77, 81, 82], "reach": [38, 39, 70, 72, 82], "desir": [38, 39, 63, 70, 74, 79], "depend": [38, 39, 47, 65, 70, 72, 77, 82], "4096": [38, 39, 46, 70, 77], "burst": [38, 39, 43, 62, 63, 70, 82], "qdisc": [38, 39, 43, 70], "bypass": [38, 39, 43, 70], "kernel": [38, 39, 43, 65, 70], "issu": [38, 39, 64, 68, 70, 71, 72], "poll": [38, 39, 43, 70, 74], "0001": [38, 39, 46, 70, 73, 77, 79], "third": [38, 39, 41, 69, 70], "disjoint": [38, 39, 70], "tun": [38, 39, 41, 70], "bbl": [38, 39, 63, 70, 82], "bbl1": [38, 39, 70], "bbl2": [38, 39, 70], "explicit": [38, 43, 70], "referenc": [38, 43, 70, 75, 79], "physic": [38, 43, 70, 72], "32768": [38, 42, 43, 70, 72], "cpuset": [38, 43, 70, 72], "pin": [38, 43, 70], "cpu": [38, 43, 68, 70, 72], "dpdk": [38, 43, 68, 83], "lag0": [38, 42, 70], "short": [38, 41, 42, 44, 68, 70], "3x1": [38, 42, 70], "3x30": [38, 42, 70], "system": [38, 42, 46, 48, 64, 65, 71, 72, 73, 75, 77, 79, 82], "multithread": [38, 42, 70, 72], "router": [38, 44, 46, 51, 53, 65, 68, 70, 73, 76, 77, 78, 79, 81], "ra": [38, 44, 70], "mtu": [38, 44, 67, 70, 82], "1500": [38, 44, 70, 74], "9000": [38, 44, 62, 65, 70, 82], "p2p": [38, 44, 70, 73, 77, 81], "l1": [38, 44, 48, 70, 73, 74, 77], "metric": [38, 44, 48, 53, 70, 73, 77, 79, 81], "l2": [38, 44, 48, 70, 73, 77, 82], "ospfv2": [38, 44, 53, 68, 70, 79, 81], "ospfv3": [38, 44, 53, 70], "mainten": [38, 41, 44, 70], "ccm": [38, 41, 44, 70], "ieee": [38, 41, 44, 70], "802": [38, 41, 44, 70], "1q": [38, 41, 44, 70], "encod": [38, 41, 44, 70, 77, 81], "33m": [38, 41, 44, 70], "10m": [38, 41, 44, 70], "100m": [38, 41, 44, 70], "1min": [38, 41, 44, 70], "10min": [38, 41, 44, 70], "mac_int": [38, 41, 44, 70], "aa": [38, 41, 44, 70], "bb": [38, 41, 44, 70], "dd": [38, 41, 44, 70], "ee": [38, 41, 44, 70], "123": [38, 41, 44, 70], "uint16": [38, 41, 44, 70], "vpn_id": [38, 41, 44, 70], "hex": [38, 41, 44, 70, 77, 81], "digit": [38, 41, 44, 70], "icc": [38, 41, 44, 70], "char": [38, 41, 44, 70], "pcp": [38, 41, 44, 70], "dowstream": [38, 44, 70], "ethertyp": [38, 40, 41, 70], "0x88a8": [38, 40, 41, 70], "equal": [38, 41, 62, 70, 77, 81, 82], "deactiv": [38, 41, 70], "10000000": [38, 41, 70], "caution": [38, 41, 70, 72], "sinc": [38, 41, 64, 70], "significantli": [38, 41, 70], "impact": [38, 41, 70, 71], "scalabl": [38, 41, 70, 71], "setup": [38, 61, 62, 67, 68, 72, 73, 78, 82], "signal": [38, 63, 64, 68], "calcul": [38, 49, 62, 63, 65, 71, 74, 78, 82], "massiv": [38, 63, 64, 68, 72], "1m": [38, 63, 67, 71], "live": [38, 63, 71, 76], "regul": [38, 63], "determin": [38, 63, 81, 82], "consist": [38, 63, 82], "influenc": [38, 63], "affect": [38, 63], "adher": [38, 63], "smaller": [38, 49, 63, 78], "smoother": [38, 63], "reduc": [38, 63], "risk": [38, 63], "micro": [38, 63], "fall": [38, 63], "intend": [38, 63], "larger": [38, 63, 70, 78], "toler": [38, 63], "find": [38, 63, 68], "prevent": [38, 63, 65, 66, 70, 72], "checksum": [38, 63, 73], "reassembl": [38, 63, 82], "reassembli": [38, 63, 82], "restrict": [38, 63, 68], "65056": [38, 62, 71, 82], "see": [38, 62, 68, 71, 73, 82], "tc": [38, 49, 62, 78, 82], "float": [38, 62, 82], "helper": [38, 62, 82], "put": [38, 62, 64, 82], "capit": [38, 62, 82], "letter": [38, 62, 82], "k": [38, 62, 73, 79, 82], "kilo": [38, 62, 82], "mega": [38, 62, 82], "giga": [38, 62, 82], "front": [38, 62, 82], "better": [38, 62, 68, 71, 74, 82], "readabl": [38, 62, 82], "gbp": [38, 62, 82], "1000000000": [38, 62, 82], "900": [38, 62, 82], "rpf": [38, 62, 82], "label1": [38, 62, 82], "exp": [38, 62, 82], "label2": [38, 62, 82], "lookup": [38, 62, 73, 78, 82], "nat": [38, 62, 66, 68, 82], "level1": [38, 46, 73, 77, 79], "md5": [38, 46, 51, 73, 77, 79, 81], "csnp": [38, 46, 77], "psnp": [38, 46, 77], "level2": [38, 46, 77], "lspbuffers": [38, 46, 77], "9192": [38, 46, 77], "lifetim": [38, 46, 73, 75, 77, 78, 79], "330": [38, 46, 77], "refresh": [38, 46, 47, 73, 77], "0100": [38, 46, 77], "0010": [38, 46, 77], "49": [38, 46, 73, 77, 79], "sr": [38, 46, 51, 73, 77, 79, 81], "algo": [38, 46, 77], "algorithm": [38, 46, 77, 81], "1048575": [38, 46, 51, 77, 81], "sid": [38, 46, 51, 73, 77, 81], "dure": [38, 47, 52, 64, 75, 77, 78, 81], "reason": [38, 47, 77], "dead": [38, 51, 81], "chosen": [38, 49, 78], "indic": [38, 49, 78, 82], "elaps": [38, 49, 78], "receipt": [38, 49, 78], "success": [38, 49, 78], "arriv": [38, 49, 78], "divid": [38, 49, 74, 78, 82], "lsr": [38, 49, 73, 78], "discard": [38, 49, 73, 78], "accord": [38, 49, 66, 78], "rfc7552": [38, 49, 78], "conveni": 64, "rest": [64, 76], "serv": [64, 68, 71], "simplifi": 64, "expos": 64, "programmat": 64, "paramet": [64, 66, 70, 73, 82], "monitor": [64, 75], "progress": 64, "standard": [64, 69, 75, 77, 83], "intuit": 64, "autom": [64, 68], "endpoint": [64, 71, 82], "download": [64, 69, 83], "retriev": 64, "encount": 64, "analyz": [64, 71, 74, 75, 83], "outcom": 64, "troubleshoot": [64, 68, 69], "problem": 64, "document": [64, 68], "purpos": [64, 66, 68, 71], "enhanc": [64, 68, 71, 72, 75, 79], "overal": [64, 66], "streamlin": 64, "seamless": 64, "github": [64, 66, 68, 69, 75], "modern": [64, 68, 69, 72], "linux": [64, 68, 69, 70], "primarili": [64, 69, 72], "debian": [64, 69, 72], "bookworm": [64, 69], "ubuntu": 64, "lt": [64, 69], "packag": [64, 69, 72], "wget": [64, 69], "controller_": 64, "_amd64": 64, "deb": [64, 69], "dpkg": [64, 69], "systemctl": 64, "bngblasterctrl": 64, "lib": 64, "systemd": 64, "preset": 64, "fri": 64, "2022": [64, 68, 73], "07": 64, "utc": 64, "7min": 64, "ago": 64, "pid": 64, "682535": 64, "task": [64, 77], "309235": 64, "6m": 64, "cgroup": 64, "slice": 64, "usr": [64, 69, 74], "bin": [64, 69, 74], "listen": 64, "8001": 64, "addr": [64, 67], "etc": 64, "usag": [64, 71, 75, 78, 79], "color": 64, "turn": 64, "consol": 64, "pretti": 64, "folder": 64, "var": 64, "sbin": [64, 69], "openapi": 64, "v1": [64, 69], "alreadi": [64, 75], "bodi": 64, "directori": [64, 69, 73, 83], "run_report": 64, "stderr": [64, 77, 81], "stdout": 64, "curl": 64, "quickstart_pppo": 64, "content": [64, 66], "veth1": [64, 73], "_start": 64, "logging_flag": 64, "session_count": 64, "schema": 64, "get": [64, 68, 70, 73, 82], "_command": 64, "pass": [64, 69, 71], "bngbnlaster": 64, "back": [64, 82], "_stop": 64, "sigint": 64, "int": [64, 82], "forcefulli": 64, "report_flag": 64, "huge": 64, "around": [64, 70, 82], "500mb": 64, "categori": 64, "pleas": 64, "pcap_captur": 64, "prometheu": 64, "text": 64, "instances_run": 64, "gaug": 64, "instances_tot": 64, "metric_flag": 64, "access_interfac": 64, "network_interfac": 64, "a10nsp_interfac": 64, "000": [64, 72, 73], "instance_nam": 64, "sessions_establish": 64, "interfaces_rx_packet": 64, "rbf": 64, "interface_nam": 64, "interface_typ": 64, "163": 64, "eth11": 64, "155": 64, "eth12": 64, "158": 64, "150": [64, 74], "driver": [65, 69, 70, 72, 82], "drop": [65, 83], "tri": 65, "occur": [65, 75], "potenti": [65, 71], "failur": 65, "overseen": 65, "why": 65, "3936": [65, 70], "pages": [65, 70], "minu": [65, 70], "overhead": [65, 70], "redirect": 66, "abil": [66, 71, 72], "top": [66, 73], "sever": [66, 75, 82], "translat": [66, 71], "rule": [66, 75], "accuraci": 66, "moreov": 66, "across": [66, 72, 82], "compat": 66, "bind": [66, 67], "startup": [66, 75, 77, 78, 81], "begin": 66, "give": [66, 74], "effici": [66, 71, 77, 81], "minor": [66, 71], "302": 66, "msg": [66, 71, 73], "nlocat": 66, "ncontent": 66, "nserver": [66, 71], "demonstr": [66, 75], "mark": [66, 77], "resum": [66, 82], "previous": 66, "continu": [66, 72, 82], "less": [66, 72, 82], "random": 66, "attempt": 66, "ping": [67, 71], "come": 67, "beyond": [67, 68, 72], "simpli": [67, 68], "consequ": 67, "unreach": 67, "exceed": 67, "properli": [67, 72], "made": 67, "dec": 67, "58": [67, 72], "394677": 67, "395566": 67, "727988": 67, "728992": 67, "63": [67, 72, 73], "rtt": 67, "927569": 67, "928480": 67, "origin": [68, 77, 81], "undergon": 68, "signific": 68, "evolut": 68, "transform": 68, "now": [68, 69, 71, 73, 74, 77, 81, 82], "encompass": [68, 71], "Its": 68, "scope": [68, 82], "expand": [68, 71], "broader": 68, "spectrum": [68, 71], "contrari": 68, "nomenclatur": 68, "isn": 68, "addition": [68, 76], "capac": 68, "verif": [68, 82], "complet": [68, 77, 81], "tabl": [68, 72, 74, 75], "queue": [68, 70, 72], "edg": 68, "latenc": [68, 82], "deutsch": 68, "telekom": 68, "ag": [68, 81], "famou": 68, "project": [68, 69, 75], "hard": [68, 72], "softwar": [68, 70, 72], "footprint": 68, "machin": [68, 73], "space": [68, 70], "friendli": 68, "api": [68, 73, 76, 82], "suit": [68, 71], "thousand": 68, "topologi": [68, 73, 76, 77, 81, 82], "segment": 68, "cgnat": 68, "introduct": [68, 79], "denog15": 68, "There": [68, 69, 73, 75, 78, 81, 82], "video": 68, "built": [68, 71, 76, 78], "scratch": 68, "veri": 68, "event": [68, 83], "loop": [68, 79], "constant": [68, 71, 82], "o": [68, 72, 77, 81], "librari": [68, 75, 78], "delet": 68, "fsm": 68, "evolv": 68, "build": [68, 72, 75, 77, 78, 81], "serious": 68, "look": 68, "contribut": [68, 72], "bug": 68, "welcom": [68, 72], "interest": 68, "go": [68, 73], "quick": 68, "guid": [68, 69, 70, 71], "our": [68, 72], "mission": 68, "instal": [68, 72, 73], "quickstart": 68, "frequent": 68, "ask": 68, "question": 68, "mail": 68, "chat": 68, "matrix": 68, "apnic": 68, "blog": 68, "dknog14": 68, "2024": 68, "2023": 68, "uknof49": 68, "denog13": 68, "2021": 68, "cp": [68, 74, 75], "dp": [68, 75], "bsd": 68, "claus": 68, "free": [68, 72], "commerci": 68, "2020": 68, "2026": 68, "apt": [69, 73], "y": [69, 79], "libssl1": 69, "libncurses5": 69, "libjansson4": 69, "newer": [69, 77, 81], "libssl3": 69, "libncurses6": 69, "libdict": 69, "fork": 69, "unzip": 69, "zip": 69, "libdict_1": 69, "5_amd64": 69, "dev_1": 69, "cmake": 69, "libpcap": 69, "dev": [69, 70, 73], "libcunit1": 69, "libssl": 69, "libjansson": 69, "libnuma": 69, "symbol": 69, "relwithdebinfo": 69, "git": 69, "clone": 69, "cd": 69, "mkdir": 69, "dcmake_build_typ": 69, "gdb": 69, "cpack": 69, "dgit_ref": 69, "rev": 69, "pars": 69, "abbrev": 69, "ref": 69, "head": 69, "dgit_sha": 69, "sha": 69, "df453a5ee9dbf6440aefbfb9630fa0f06e326d44": 69, "packet_mmap": [69, 70], "cmocka": 69, "libcmocka": 69, "bngblaster_test": 69, "dbngblaster_test": 69, "ON": 69, "testprotocol": 69, "sec": 69, "linux_gsg": 69, "build_dpdk": 69, "meson": 69, "ninja": 69, "rel": 69, "tar": 69, "xz": 69, "xjf": 69, "sdk": 69, "denable_driver_sdk": 69, "ldconfig": 69, "dbngblaster_dpdk": 69, "pkgconfig": 69, "pkg": 69, "modul": 69, "libdpdk": 69, "compil": [69, 70, 75, 78], "gnu": [69, 70], "permiss": 69, "easiest": 69, "root": [69, 73, 79], "normal": [69, 79], "binari": [69, 75, 78], "setcap": 69, "cap_net_raw": 69, "cap_net_admin": 69, "cap_dac_read_search": 69, "eip": 69, "distinguish": [70, 77, 81], "logic": 70, "attach": [70, 73, 76, 77, 78, 79, 81], "At": 70, "archiv": 70, "netplan": 70, "render": 70, "networkd": 70, "dhcp4": 70, "dhcp6": 70, "hardwar": [70, 72], "higher": [70, 72], "ethtool": [70, 72, 73], "ens5f1": 70, "pre": [70, 75, 78], "mini": 70, "jumbo": 70, "512": 70, "txqueuelen": 70, "lag1": 70, "face": 70, "side": [70, 72, 73], "own": [70, 72, 75, 77, 78, 81], "inject": [70, 75, 76, 77, 78, 81], "eth3": [70, 74], "s100": 70, "s200": 70, "pta": 70, "belong": [70, 82], "025": 70, "resid": 70, "packet_rx_r": 70, "packet_tx_r": 70, "abstract": 70, "program": 70, "lane": 70, "write": [70, 75, 78, 79, 81], "transmit": [70, 76], "expens": 70, "easi": 70, "calcualt": [70, 71], "osi": [70, 77], "steam": 70, "technologi": [71, 72], "comput": [71, 72, 81], "public": 71, "privat": 71, "entri": [71, 74, 77, 81], "conceal": 71, "structur": 71, "carrier": 71, "grade": 71, "isp": 71, "compani": 71, "scarciti": 71, "incorpor": 71, "tailor": 71, "instrument": 71, "demand": 71, "multitud": 71, "pool": [71, 72], "experi": 71, "broad": 71, "tradit": 71, "rigor": 71, "examin": 71, "invalu": 71, "resourc": 71, "profession": 71, "udp1": 71, "192": [71, 73, 77, 79], "configuraton": [71, 82], "destion": 71, "udp2": 71, "48523": 71, "tcp1": [71, 82], "stand": [71, 72, 82], "alon": [71, 82], "firewal": [71, 82], "adopt": [71, 82], "exist": [71, 75, 77, 78, 81], "uncahng": 71, "x": [71, 75, 79, 83], "enp6s21": 71, "254": 71, "enp6s20": 71, "c1": 71, "c2": 71, "nx": 71, "63122": 71, "63121": 71, "unfortun": 71, "nate": 71, "leverag": 71, "still": [71, 72, 73, 81, 82, 83], "100k": 71, "achiev": 72, "250": 72, "much": 72, "driven": 72, "split": 72, "workload": 72, "worker": 72, "asymmetr": 72, "unidirect": [72, 82], "vice": 72, "versa": 72, "full": [72, 75], "cach": 72, "coher": 72, "everyth": 72, "far": 72, "alwai": [72, 82], "rss": 72, "incom": 72, "improv": 72, "hash": 72, "adapt": [72, 81], "0x8100": 72, "best": [72, 81], "intel": 72, "person": 72, "ddp": 72, "boost": 72, "adjust": 72, "700": 72, "seri": [72, 74, 75, 78], "vari": 72, "usec": 72, "125": 72, "uniform": 72, "multi": 72, "processor": 72, "deriv": [72, 74], "sy": [72, 77, 81], "net": 72, "numa_nod": 72, "lscpu": 72, "node0": 72, "53": [72, 73], "node1": [72, 79], "54": [72, 73], "71": 72, "folow": 72, "55": [72, 73, 79], "57": 72, "nic": 72, "20g": 72, "ens2f2np2": 72, "ens2f3np3": 72, "ens5f2np2": 72, "ens5f3np3": 72, "62": [72, 74], "65": 72, "66": 72, "67": 72, "68": 72, "69": [72, 74], "offici": 72, "0000": [72, 73, 77, 79], "ll": 73, "walk": 73, "pair": 73, "veth": 73, "let": 73, "mar": 73, "303904": 73, "303952": 73, "396765": 73, "press": 73, "ctrl": [73, 79], "print": [73, 77, 81], "j": [73, 74], "p": [73, 75, 78, 79, 83], "what": 73, "happen": [73, 75], "cours": [73, 83], "try": [73, 77, 81], "f1": 73, "navig": 73, "keyboard": [73, 82], "input": [73, 83], "left": 73, "corner": 73, "f9": 73, "enter": 73, "familiar": 73, "repeat": [73, 82], "r1": [73, 77, 79, 81], "r2": [73, 77, 79, 81], "0002": [73, 77, 79], "1921": [73, 77, 79], "6800": [73, 77, 79], "168": [73, 77, 79], "secret123": [73, 79], "1002": [73, 77], "raw1": 73, "lspgen": [73, 76], "647569": 73, "647630": 73, "connector": 73, "0x192168001001": 73, "647633": 73, "647639": 73, "647642": 73, "0x1": 73, "647645": 73, "647648": 73, "647651": 73, "172": 73, "647654": 73, "647657": 73, "fc00": 73, "c0a8": 73, "647660": 73, "ac10": 73, "647669": 73, "a00": 73, "124": 73, "647672": 73, "srgb": 73, "647678": 73, "graph": [73, 77, 79, 81], "647813": 73, "981279": 73, "981314": 73, "981335": 73, "031917": 73, "087877": 73, "087971": 73, "088013": 73, "088035": 73, "088050": 73, "093906": 73, "093964": 73, "gobgp": 73, "gobgpd": 73, "But": 73, "offload": [73, 82], "92": 73, "65001": [73, 75], "afi": 73, "safi": 73, "bgpupdat": [73, 75, 76], "append": [73, 75, 77, 78, 81], "daemon": 73, "f": [73, 74, 75, 78, 79, 81], "08t14": 73, "51": 73, "03": [73, 74], "topic": 73, "apr": 73, "08": 73, "870722": 73, "138": 73, "kb": 73, "904266": 73, "904293": 73, "904369": 73, "52": 73, "904359": 73, "904389": 73, "904448": 73, "905659": 73, "opens": 73, "907888": 73, "907903": 73, "openconfirm": 73, "907917": 73, "907989": 73, "182885": 73, "outq": 73, "flop": 73, "multiprotocol": [73, 78], "octet": 73, "rcvd": 73, "notif": 73, "72": 73, "20000": 73, "100000": [73, 75, 79], "skip": 73, "09": 73, "establ": 73, "120000": 73, "withdraw": [73, 75, 78], "ldpupdat": [73, 76, 78], "Such": [73, 77, 81, 82], "To": [74, 76], "understand": 74, "think": 74, "job": 74, "decreas": 74, "75": 74, "50": [74, 79, 82], "55661": 74, "97": 74, "111410": 74, "12654727": 74, "110161": 74, "12300031": 74, "unknown": 74, "93709": 74, "110156": 74, "12299556": 74, "33319": 74, "32641": 74, "32635": 74, "33311": 74, "32633": 74, "1104": 74, "pado": 74, "500": 74, "373": 74, "4880": 74, "1700": 74, "1840": 74, "350": 74, "108580": 74, "12360218": 74, "106881": 74, "11982029": 74, "95265": 74, "106876": 74, "11981554": 74, "32465": 74, "31896": 74, "31895": 74, "32461": 74, "31894": 74, "1102": 74, "844": 74, "78": 74, "422": 74, "4343": 74, "822": 74, "1816": 74, "322": 74, "197523": 74, "21009053": 74, "188259": 74, "20425245": 74, "74810": 74, "65784": 74, "64537": 74, "61793": 74, "65772": 74, "61790": 74, "6000": 74, "623": 74, "199": 74, "224": [74, 78, 82], "624": 74, "218": 74, "227": 74, "197": 74, "3742": 74, "1198": 74, "1338": 74, "1206": 74, "filenam": [74, 79, 82], "sn": 74, "197340": 74, "188120": 74, "99949": 74, "97909": 74, "ipv6avg": 74, "97391": 74, "95685": 74, "env": 74, "python3": 74, "border": 75, "exterior": 75, "exchang": [75, 78], "reachabl": [75, 77], "among": [75, 82], "autonom": 75, "classifi": [75, 83], "vector": 75, "decis": 75, "plan": 75, "marker": 75, "scapi": [75, 78], "convert": 75, "phase": [75, 78], "update1": [75, 78], "onc": [75, 78, 82], "sens": 75, "update2": 75, "h": [75, 78, 79], "asn": 75, "local_pref": 75, "w": [75, 78, 79], "num": [75, 78], "ifac": 75, "rib": 75, "exit": [75, 77, 78, 81], "hop": [75, 82], "pref": 75, "blueprint": [75, 78], "6pe": 75, "50000": 75, "20001": 75, "48": [75, 82], "plane": 75, "propag": 75, "offlin": 76, "serial": 76, "rfc6396": [76, 77, 81], "produc": 76, "mimic": 76, "written": [77, 79], "iso": 77, "iec": 77, "10589": 77, "2002": 77, "interconnect": 77, "engin": 77, "forc": [77, 82], "republish": 77, "1142": 77, "later": [77, 79], "histor": 77, "7142": 77, "rather": 77, "confus": 77, "facto": 77, "backbon": 77, "synchron": [77, 81], "self": [77, 81], "itself": [77, 81, 82], "3600": 77, "n1": 77, "b1": 77, "0022": 77, "0021": 77, "65529": 77, "0011": 77, "65524": 77, "65506": 77, "whole": 77, "0x83": 77, "831b0100120100000021ffff010203040506000000000003c0d103010403490001": 77, "831b0100120100000021ffff010203040506000100000003bad603010403490001": 77, "contrib": [77, 81], "def": [77, 81], "arg": [77, 79, 81], "kwarg": [77, 81], "execute_command": [77, 81], "socket_path": [77, 81], "af_unix": [77, 81], "sock_stream": [77, 81], "dump": [77, 81], "utf": [77, 81], "junk": [77, 81], "recv": [77, 81], "decod": [77, 81, 82], "els": [77, 81], "break": [77, 81], "indent": [77, 81], "argv": [77, 81], "tlv": [77, 79], "isis_areatlv": 77, "isis_areaentri": 77, "areaid": 77, "isis_commonhdr": 77, "isis_l1_lsp": 77, "lspid": 77, "0102": 77, "0304": 77, "0506": 77, "seqnum": 77, "__name__": [77, 81], "__main__": [77, 81], "timestamp": [77, 81], "subtyp": [77, 81], "field": [77, 81, 82], "export": [77, 79, 81], "bi": 78, "646": 78, "subnet": 78, "5036": 78, "dut": 78, "ecmp": 78, "10001": 78, "exactli": 78, "longest": 78, "henc": 79, "accommod": 79, "ospf2": 79, "____": 79, "__": 79, "_": 79, "_____": 79, "___": 79, "______": 79, "ospf3": 79, "multipli": 79, "z": 79, "graphviz": 79, "seed": 79, "q": 79, "quit": 79, "repres": [79, 82], "toplogi": 79, "sep": 79, "780109": 79, "780127": 79, "simlar": 79, "construct": 79, "242810": 79, "242827": 79, "node_id": 79, "area_list": 79, "protocol_list": 79, "ipv4_address_list": 79, "ipv4_prefix_list": 79, "ipv4_prefix": 79, "segment_id": 79, "30005": 79, "node_flag": 79, "capability_list": 79, "router_id": 79, "mpls_ipv4_flag": 79, "mpls_ipv6_flag": 79, "srgb_base": 79, "srgb_rang": 79, "36000": 79, "neighbor_list": 79, "remote_node_id": 79, "0204": 79, "0003": 79, "30003": 79, "r3": 79, "shortest": 81, "interior": 81, "igp": 81, "wide": 81, "stabil": 81, "000100050ac801000aff010180000001e7790024ffffff00000000140000000000000000": 81, "000100050ac802000aff010180000001dc830024ffffff00000000140000000000000000": 81, "020400400101010100000000456e0000000000000000000000000001000100050ac80c000aff01018000012d13160024ffffff00000000140000000000000000": 81, "0204004001010101000000003b780000000000000000000000000001000100050ac80b000aff01018000012d1e0c0024ffffff00000000140000000000000000": 81, "ospf_external_lsa": 81, "adrout": 81, "mask": 81, "2147483649": 81, "struct": 81, "wb": 81, "222": 81, "2147483949": 81, "ospf_hdr": 81, "ospf_lsupd": 81, "lsacount": 81, "pack": 81, "ii": 81, "ihhi": 81, "len": [81, 82], "although": 81, "compar": 81, "conceptu": 81, "ident": 81, "r6": 81, "instanti": 82, "certain": 82, "brief": 82, "overview": 82, "2001": 82, "besteffort": 82, "voic": 82, "merg": 82, "determinist": 82, "incrementor": 82, "regardless": 82, "exce": 82, "upper": 82, "wrap": 82, "want": 82, "high": 82, "cover": 82, "1099": 82, "1009": 82, "1010": 82, "1019": 82, "1090": 82, "b": 82, "reus": 82, "hit": 82, "ters": 82, "queri": 82, "59670": 82, "54610": 82, "account": 82, "59655": 82, "54594": 82, "1100": 82, "9028800": 82, "8240000": 82, "mbp": 82, "0288": 82, "362": 82, "54593": 82, "1014": 82, "1030": 82, "54232": 82, "98595": 82, "8112000": 82, "l3": 82, "8000000": 82, "112": 82, "1026": 82, "43": 82, "98903": 82, "8208000": 82, "208": 82, "5458": 82, "5422": 82, "41": 82, "96548": 82, "811200": 82, "820800": 82, "800000": 82, "8112": 82, "8208": 82, "microsecond": 82, "subtract": 82, "volum": 82, "jsonpath": 82, "express": 82, "BE": 82, "27040": 82, "213": 82, "126": 82, "27008": 82, "10561": 82, "99": 82, "90288": 82, "99792": 82, "79200": 82, "090288": 82, "099792": 82, "0792": 82, "part": 82, "properti": 82, "readi": 82, "shortcut": 82, "f7": 82, "f8": 82, "respect": 82, "necessari": 82, "largest": 82, "1472": 82, "reserv": 82, "le": 82, "0x5274427269636b21": 82, "jitter": 82, "nano": 82, "meta": 83, "dissector": 83, "lua": 83, "bbl_header": 83, "place": 83, "lua_script": 83}, "objects": {}, "objtypes": {}, "objnames": {}, "titleterms": {"access": [0, 38, 70], "protocol": [0, 68, 76], "ipo": [1, 38], "static": 1, "address": [1, 71], "dhcpv4": 1, "v6": 1, "dhcp": [1, 16, 38, 73], "dhcpv6": [1, 38], "command": [1, 3, 7, 64, 77, 81, 82], "l2bsa": 2, "over": 2, "network": [2, 38, 70, 73], "inerfac": 2, "l2tp": [3, 16], "configur": [3, 7, 8, 38, 75, 77, 78, 79, 81, 82], "variabl": [3, 38], "data": 3, "header": 3, "rfc5515": 3, "legal": [4, 16], "intercept": [4, 16], "li": [4, 16], "monkei": 5, "multicast": [6, 82], "iptv": 6, "gener": [6, 75, 78], "traffic": [6, 8, 16, 38, 73, 78, 82], "manual": 6, "join": 6, "leav": 6, "test": [6, 16, 64, 69, 75], "zap": 6, "limit": [6, 75, 77, 78], "pppoe": [7, 38, 73], "ppp": [7, 16, 38], "authent": [7, 38], "lcp": [7, 38], "ipcp": [7, 38], "ipv4": [7, 38], "ip6cp": [7, 38], "ipv6": [7, 38], "vendor": 7, "extens": [7, 71], "session": [8, 16, 38, 74, 75, 78, 82], "verif": 8, "api": [16, 64], "cli": 16, "bng": [16, 68, 69, 82], "blaster": [16, 68, 69, 82], "interfac": [16, 38, 70, 81], "igmp": [16, 38], "stream": [16, 38, 71, 78, 82], "isi": [16, 38, 73, 77], "ospf": [16, 38, 81], "bgp": [16, 38, 73, 75], "ldp": [16, 38, 73, 78], "cfm": 16, "http": [16, 38, 66, 71], "icmp": [16, 38, 67, 71], "arp": [16, 38], "pcap": [16, 64, 83], "link": [38, 70], "aggreg": [38, 70], "lag": [38, 70], "a10nsp": [38, 70], "l2tpv2": 38, "server": [38, 66], "ln": 38, "line": 38, "profil": 38, "extern": 38, "connect": 38, "client": [38, 66, 67, 71], "control": 64, "instal": [64, 69], "creat": 64, "instanc": 64, "start": [64, 82], "statu": 64, "stop": [64, 82], "delet": 64, "report": [64, 74], "log": [64, 83], "metric": 64, "frequent": 65, "ask": 65, "question": 65, "emul": 66, "rtbrick": 68, "rout": [68, 76], "content": 68, "contact": 68, "articl": 68, "youtub": 68, "train": 68, "exampl": 68, "sourc": [68, 69, 82], "licens": 68, "copyright": 68, "ubuntu": 69, "build": 69, "from": [69, 79], "depend": 69, "run": 69, "unit": 69, "dpdk": [69, 70, 72], "support": 69, "oper": 70, "system": 70, "set": 70, "function": 70, "untag": 70, "singl": 70, "tag": 70, "doubl": 70, "tripl": 70, "i": 70, "o": 70, "mode": 70, "packet": 70, "mmap": 70, "raw": [70, 71, 75, 78, 82], "nat": 71, "cgnat": 71, "featur": 71, "revers": 71, "flow": [71, 82], "enabl": 71, "tcp": [71, 82], "setup": [71, 74], "interv": 71, "scale": 71, "perform": 72, "guid": [72, 73], "numa": 72, "quickstart": 73, "rate": 74, "standard": 74, "output": 74, "json": 74, "updat": [75, 77, 78, 81], "file": [75, 77, 78, 79, 81, 82], "converg": 75, "adjac": [77, 78], "databas": [77, 81], "flood": [77, 81], "lsp": 77, "via": [77, 81], "scapi": [77, 81], "mrt": [77, 81], "lspgen": [77, 79, 81], "connector": 79, "random": 79, "topologi": 79, "mpl": 80, "neighbor": 81, "lsa": 81, "ospfv3": 81, "understand": 82, "iter": 82, "destin": 82, "port": 82, "fragment": 82, "unicast": 82, "magic": 82, "sequenc": 82, "identifi": 82, "number": 82, "nanosecond": 82, "send": 82, "timestamp": 82, "troubleshoot": 83, "wireshark": 83, "plugin": 83}, "envversion": {"sphinx.domains.c": 3, "sphinx.domains.changeset": 1, "sphinx.domains.citation": 1, "sphinx.domains.cpp": 9, "sphinx.domains.index": 1, "sphinx.domains.javascript": 3, "sphinx.domains.math": 2, "sphinx.domains.python": 4, "sphinx.domains.rst": 2, "sphinx.domains.std": 2, "sphinx": 60}, "alltitles": {"Access Protocols": [[0, "access-protocols"]], "IPoE": [[1, "ipoe"], [1, "id2"], [38, "ipoe"]], "Static Addresses": [[1, "static-addresses"]], "DHCPv4/v6": [[1, "dhcpv4-v6"]], "DHCP": [[1, "dhcp"], [16, "dhcp"], [38, "dhcp"], [73, "dhcp"]], "DHCPv6": [[1, "dhcpv6"], [38, "dhcpv6"]], "IPoE Commands": [[1, "ipoe-commands"]], "L2BSA": [[2, "l2bsa"]], "L2BSA over Network Inerfaces": [[2, "l2bsa-over-network-inerfaces"]], "L2TP": [[3, "l2tp"], [16, "l2tp"]], "Configuration": [[3, "configuration"], [7, "configuration"], [8, "configuration"], [38, "id1"], [75, "configuration"], [77, "configuration"], [78, "configuration"], [81, "configuration"], [82, "configuration"]], "Variable Data Header": [[3, "variable-data-header"]], "RFC5515": [[3, "rfc5515"]], "L2TP Commands": [[3, "l2tp-commands"]], "Legal Interception (LI)": [[4, "legal-interception-li"], [16, "legal-interception-li"]], "Monkey": [[5, "monkey"]], "Multicast and IPTV": [[6, "multicast-and-iptv"]], "Generate Multicast Traffic": [[6, "generate-multicast-traffic"]], "Manual Join/Leave Testing": [[6, "manual-join-leave-testing"]], "IPTV Zapping Test": [[6, "iptv-zapping-test"]], "Multicast Limitations": [[6, "multicast-limitations"]], "PPPoE": [[7, "pppoe"], [7, "id2"], [38, "pppoe"], [73, "pppoe"]], "PPP": [[7, "ppp"], [16, "ppp"], [38, "ppp"]], "PPP Authentication": [[7, "ppp-authentication"], [38, "ppp-authentication"]], "PPP LCP": [[7, "ppp-lcp"], [38, "ppp-lcp"]], "PPP IPCP (IPv4)": [[7, "ppp-ipcp-ipv4"], [38, "ppp-ipcp-ipv4"]], "PPP IP6CP (IPv6)": [[7, "ppp-ip6cp-ipv6"], [38, "ppp-ip6cp-ipv6"]], "LCP Vendor Extension": [[7, "lcp-vendor-extension"]], "PPPoE Commands": [[7, "pppoe-commands"]], "Session Traffic": [[8, "session-traffic"]], "Verification": [[8, "verification"]], "API/CLI": [[16, "api-cli"]], "BNG Blaster CLI": [[16, "bng-blaster-cli"]], "Test": [[16, "test"]], "Interfaces": [[16, "interfaces"], [38, "interfaces"], [70, "interfaces"], [81, "interfaces"]], "Sessions": [[16, "sessions"], [38, "sessions"]], "IGMP": [[16, "igmp"], [38, "igmp"]], "Traffic": [[16, "traffic"], [38, "traffic"]], "Streams": [[16, "streams"]], "ISIS": [[16, "isis"], [38, "isis"], [73, "isis"], [77, "isis"]], "OSPF": [[16, "ospf"], [38, "ospf"], [81, "ospf"]], "BGP": [[16, "bgp"], [38, "bgp"], [73, "bgp"], [75, "bgp"]], "LDP": [[16, "ldp"], [38, "ldp"], [73, "ldp"], [78, "ldp"]], "CFM": [[16, "cfm"]], "HTTP": [[16, "http"]], "ICMP": [[16, "icmp"], [67, "icmp"]], "ARP": [[16, "arp"]], "PCAP": [[16, "pcap"], [64, "pcap"], [83, "pcap"]], "Variables": [[38, "variables"]], "Links": [[38, "links"], [70, "links"]], "Link Aggregation (LAG)": [[38, "link-aggregation-lag"], [70, "link-aggregation-lag"]], "Network Interfaces": [[38, "network-interfaces"], [70, "network-interfaces"]], "Access Interfaces": [[38, "access-interfaces"], [70, "access-interfaces"]], "A10NSP Interfaces": [[38, "a10nsp-interfaces"], [70, "a10nsp-interfaces"]], "L2TPv2 Server (LNS)": [[38, "l2tpv2-server-lns"]], "Traffic-Streams": [[38, "traffic-streams"]], "Session-Traffic": [[38, "session-traffic"]], "Access-Line": [[38, "access-line"]], "Access-Line-Profiles": [[38, "access-line-profiles"]], "ISIS External": [[38, "isis-external"]], "ISIS External Connections": [[38, "isis-external-connections"]], "OSPF External": [[38, "ospf-external"]], "OSPF External Connections": [[38, "ospf-external-connections"]], "HTTP-Client": [[38, "http-client"]], "HTTP-Server": [[38, "http-server"]], "ICMP-Client": [[38, "icmp-client"]], "ARP-Client": [[38, "arp-client"]], "Controller": [[64, "controller"]], "Installation": [[64, "installation"], [69, "installation"]], "API": [[64, "api"]], "Create Test Instance": [[64, "create-test-instance"]], "Start Test": [[64, "start-test"]], "Status": [[64, "status"]], "Command": [[64, "command"]], "Stop Test": [[64, "stop-test"]], "Delete Test Instance": [[64, "delete-test-instance"]], "Reports": [[64, "reports"], [74, "reports"]], "Logs": [[64, "logs"]], "Metrics": [[64, "metrics"]], "Frequently Asked Questions": [[65, "frequently-asked-questions"]], "HTTP Emulation": [[66, "http-emulation"]], "HTTP Client": [[66, "http-client"]], "HTTP Server": [[66, "http-server"]], "ICMP Client": [[67, "icmp-client"], [71, "icmp-client"]], "RtBrick - Routing Protocol and BNG Blaster": [[68, "rtbrick-routing-protocol-and-bng-blaster"]], "Contents": [[68, "contents"]], "Contact": [[68, "contact"]], "Articles": [[68, "articles"]], "YouTube": [[68, "youtube"]], "Trainings and Examples:": [[68, "trainings-and-examples"]], "Sources": [[68, "sources"]], "License": [[68, "license"]], "Copyright": [[68, "copyright"]], "Install Ubuntu": [[69, "install-ubuntu"]], "Build from Sources": [[69, "build-from-sources"]], "Dependencies": [[69, "dependencies"]], "Build": [[69, "build"]], "Install": [[69, "id1"]], "Build and Run Unit Tests": [[69, "build-and-run-unit-tests"]], "Build with DPDK Support": [[69, "build-with-dpdk-support"]], "Running BNG Blaster": [[69, "running-bng-blaster"]], "Operating System Settings": [[70, "operating-system-settings"]], "Interface Settings": [[70, "interface-settings"]], "Interface Functions": [[70, "interface-functions"]], "Untagged": [[70, "untagged"]], "Single Tagged": [[70, "single-tagged"]], "Double Tagged": [[70, "double-tagged"]], "Triple Tagged": [[70, "triple-tagged"]], "I/O Modes": [[70, "i-o-modes"]], "Packet MMAP": [[70, "packet-mmap"]], "RAW": [[70, "raw"]], "DPDK": [[70, "dpdk"], [72, "dpdk"]], "NAT / CGNAT": [[71, "nat-cgnat"]], "NAT Features": [[71, "nat-features"]], "Reverse Flow": [[71, "reverse-flow"]], "Flow Addresses": [[71, "flow-addresses"]], "NAT Enabled Streams": [[71, "nat-enabled-streams"]], "TCP RAW Streams": [[71, "tcp-raw-streams"], [82, "tcp-raw-streams"]], "Stream Setup interval": [[71, "stream-setup-interval"]], "HTTP NAT Extension": [[71, "http-nat-extension"]], "Scaling": [[71, "scaling"]], "Performance Guide": [[72, "performance-guide"]], "NUMA": [[72, "numa"]], "Quickstart Guide": [[73, "quickstart-guide"]], "Network Traffic": [[73, "network-traffic"]], "Session Setup Rate": [[74, "session-setup-rate"]], "Standard Output Reports": [[74, "standard-output-reports"]], "JSON Reports": [[74, "json-reports"]], "BGP Sessions": [[75, "bgp-sessions"]], "Limitations": [[75, "limitations"], [77, "limitations"], [78, "limitations"]], "RAW Update Files": [[75, "raw-update-files"], [78, "raw-update-files"]], "BGP RAW Update Generator": [[75, "bgp-raw-update-generator"]], "BGP Convergence Testing": [[75, "bgp-convergence-testing"]], "Routing Protocols": [[76, "routing-protocols"]], "Adjacencies": [[77, "adjacencies"]], "Database": [[77, "database"], [81, "database"]], "Flooding": [[77, "flooding"], [81, "flooding"]], "LSP Update Command": [[77, "lsp-update-command"]], "LSP Update via Scapy": [[77, "lsp-update-via-scapy"]], "MRT Files": [[77, "mrt-files"], [81, "mrt-files"]], "LSPGEN": [[77, "lspgen"], [79, "lspgen"], [81, "lspgen"]], "LDP Adjacencies": [[78, "ldp-adjacencies"]], "LDP Sessions": [[78, "ldp-sessions"]], "LDP Traffic Streams": [[78, "ldp-traffic-streams"]], "LDP RAW Update Generator": [[78, "ldp-raw-update-generator"]], "Connector": [[79, "connector"]], "Random Topologies": [[79, "random-topologies"]], "Topology from Configuration File": [[79, "topology-from-configuration-file"]], "MPLS": [[80, "mpls"]], "Neighbors": [[81, "neighbors"]], "LSA Update Command": [[81, "lsa-update-command"]], "LSA Update via Scapy": [[81, "lsa-update-via-scapy"]], "OSPFv3": [[81, "ospfv3"]], "Traffic Streams": [[82, "traffic-streams"]], "Understanding Flows": [[82, "understanding-flows"]], "Stream Configuration File": [[82, "stream-configuration-file"]], "RAW Streams": [[82, "raw-streams"]], "Stream Iterators": [[82, "stream-iterators"]], "Source and Destination Ports": [[82, "source-and-destination-ports"]], "Stream Commands": [[82, "stream-commands"]], "Start/Stop Traffic": [[82, "start-stop-traffic"]], "Fragmentation": [[82, "fragmentation"]], "BNG Blaster Traffic": [[82, "bng-blaster-traffic"]], "Unicast Session Traffic": [[82, "unicast-session-traffic"]], "Multicast Traffic": [[82, "multicast-traffic"]], "BNG Blaster Magic Sequence": [[82, "bng-blaster-magic-sequence"]], "Flow Identifier": [[82, "flow-identifier"]], "Flow Sequence Number": [[82, "flow-sequence-number"]], "Nanosecond Send Timestamps": [[82, "nanosecond-send-timestamps"]], "Troubleshooting": [[83, "troubleshooting"]], "Logging": [[83, "logging"]], "Wireshark Plugin": [[83, "wireshark-plugin"]]}, "indexentries": {}})
    \ No newline at end of file