HTTP Emulation

In addition to its primary purpose of testing HTTP redirect capabilities, the BNG Blaster’s ability to emulate HTTP requests on top of any PPPoE or IPoE session offers several other valuable applications. One such application is the testing of filters or NAT (Network Address Translation) rules.

By emulating HTTP requests, the BNG Blaster allows testers to assess the effectiveness and accuracy of their configured filters or NAT rules. Moreover, the BNG Blaster’s flexibility in emulating HTTP requests on different session types, such as PPPoE or IPoE, allows for comprehensive testing across various network configurations. This versatility enables users to evaluate the performance and compatibility of the BNG (Broadband Network Gateway) device under test in different deployment scenarios.

HTTP Client

Following is a basic HTTP client configuration example.

{
    "interfaces": {
        "access": [
        {
            "interface": "eth1",
            "type": "ipoe",
            "outer-vlan": 7,
            "vlan-mode": "N:1",
            "http-client-group-id": 1
        }
    ]
    },
    "dhcp": {
        "enable": true,
    },
    "dhcpv6": {
        "enable": true
    },
    "http-client": [
        {
            "http-client-group-id": 1,
            "name": "CLIENT-1",
            "url": "blaster.rtbrick.com",
            "destination-ipv4-address": "10.10.10.10",
            "destination-port": 80
        }
    ]
}
{ "http-client": {} }

Attribute

Description

name

Mandatory HTTP client name.

http-client-group-id

Mandatory HTTP client identifier.
Range: 1 - 65535

url

Mandatory HTTP request URL.

destination-port

TCP destination port.
Default: 80 Range: 1 - 65535

autostart

Autostart HTTP client.
Default: true

start-delay

HTTP client start delay in seconds.
Default: 0

destination-ipv4-address

Destination IPv4 address.

destination-ipv6-address

Destination IPv6 address.

The association between the HTTP client and sessions is established through the use of the HTTP client group identifier (http-client-group-id). Multiple HTTP clients can be defined with the same HTTP client group identifier.

For instance, if you define 4 HTTP clients with the same HTTP client group identifier and bind them to 100 sessions each, the BNG Blaster will generate a total of 400 HTTP client instances.

When a session becomes established, each HTTP client instance is automatically started by default. However, it is also possible to prevent automatic startup by setting the autostart parameter in the HTTP client definition to false. This allows for more control over when the HTTP client should begin operating.

In addition to automatic startup, the HTTP client can also be manually started or stopped using control commands. This gives users the flexibility to manage the HTTP client’s operation according to their specific requirements.

Overall, the HTTP client functionality provides the ability to bind multiple clients to sessions using the HTTP client group identifier, allowing for efficient management and control over the initiation and termination of HTTP client instances.

$ sudo bngblaster-cli run.sock http-clients session-id 1 | jq .
{
    "status": "ok",
    "code": 200,
    "http-clients": [
        {
            "session-id": 1,
            "http-client-group-id": 1,
            "name": "CLIENT-2",
            "url": "blaster.test.de",
            "destination-address": "10.10.10.12",
            "destination-port": 80,
            "state": "closed",
            "response": {
                "minor-version": 1,
                "status": 302,
                "msg": "Found\r\nLocation: https://github.com/rtbrick/bngblaster\r\nContent-Length: 0\r\n\r\n",
                "headers": [
                    {
                        "name": "Location",
                        "value": "https://github.com/rtbrick/bngblaster"
                    },
                    {
                        "name": "Content-Length",
                        "value": "0"
                    }
                ]
            }
        },
        {
            "session-id": 1,
            "http-client-group-id": 1,
            "name": "CLIENT-1",
            "url": "blaster.test.de",
            "destination-address": "10.10.10.11",
            "destination-port": 80,
            "state": "closed",
            "response": {
                "minor-version": 1,
                "status": 200,
                "msg": "OK\r\nServer: BNG-Blaster\r\n\r\n",
                "headers": [
                    {
                        "name": "Server",
                        "value": "BNG-Blaster"
                    }
                ]
            }
        }
    ]
}

The output above demonstrates the responses of two HTTP client instances. However, if any of the requests are marked as closed, it is possible to restart them using the HTTP client start command. This command can be applied to either all sessions simultaneously or just a specific session. By initiating the HTTP client start command, you can resume the execution of the previously closed requests and continue interacting with the server.

$ sudo bngblaster-cli run.sock http-clients-start session-id 1 | jq .
$ sudo bngblaster-cli run.sock http-clients-stop | jq .

HTTP Client States:

  • idle: session will start on next client interval (less than 1 second delay until connecting)

  • connecting: TCP session connecting (handshake)

  • connected: TCP session established

  • closing: TCP session teardown

  • session-down: underlying PPPoE or IPoE session is not established

  • retry-wait: wait random seconds (1-30 seconds) before next connection attempt

HTTP Server

Following is a basic HTTP server configuration example.

{
    "interfaces": {
        "access": [
            {
                "interface": "eth1",
                "type": "ipoe",
                "outer-vlan": 7,
                "vlan-mode": "N:1",
                "http-client-group-id": 1
            }
        ]
        "network": [
            {
                "interface": "eth2",
                "address": "10.10.10.10.1/24",
                "gateway": "10.10.10.1",
                "address-ipv6": "fc66:1337:7331::1/64",
                "gateway-ipv6": "fc66:1337:7331::2",
            }
        ]
    },
    "dhcp": {
        "enable": true,
    },
    "dhcpv6": {
        "enable": true
    },
    "http-client": [
        {
            "http-client-group-id": 1,
            "name": "CLIENT-1",
            "url": "blaster.rtbrick.com",
            "destination-ipv4-address": "10.10.10.10",
            "destination-port": 80
        }
    ],
    "http-server": [
        {
            "name": "SERVER",
            "network-interface": "eth2"
            "ipv4-address": "10.10.10.10",
            "port": 80,
        }
    ]
}
{ "http-server": {} }

Attribute

Description

name

Mandatory HTTP server name.

network-interface

Mandatory HTTP server network-interface.

port

Local TCP port.
Default: 80 Range: 1 - 65535

ipv4-address

Local IPv4 address.

ipv6-address

Local IPv6 address.

The BNG Blaster offers the capability to emulate a lightweight HTTP server on top of any network interface function. This functionality allows the BNG Blaster to simulate the behavior of an HTTP server, enabling various testing and evaluation scenarios.