Skip to content

JSON parsing Linux Network Namespace (netns) topology builder

License

Notifications You must be signed in to change notification settings

cooperlees/json2netns

Repository files navigation

json2netns

JSON parsing Linux Network Namespace (netns) topology builder.

Install

pip install git+git://github.com/cooperlees/json2netns

Concepts

The script takes a JSON config file and drives namespace creation from that JSON toplogy file. Lets look at the following simple two network namespace topology:

json2netns sample topology

We have two namespaces that have 1 direct connection via a veth. It also has a OOB (Out of Band) set of interfaces that allow the main Linux Network Namespace to communicate with the netns directly.

  • By default it even bridges with a physical interface to allow external packets to be routed into the netns if desired.

Configuration

The above topology is represented by sample.json. This config is also used by unittests to ensure correct functioning. We can add to it over time as we add more features.

Small Black 1 NS Example JSON Config

{
    "namespaces": {
        "left": {
            "id": 1,
            "interfaces": {
                "left0": {
                    "prefixes": ["fd00::1/64", "10.1.1.1/24"],
                    "peer_name": "right0",
                    "type": "veth"
                },
                "lo": {
                    "prefixes": ["fd00:1::/64", "10.6.9.1/32"],
                    "type": "loopback"
                }
            },
            "oob": false,
            "routes": {}
        }
    },
    "oob": {},
    "physical_int": ""
}

Usage

After installing just point it at a config file and run as root (in the future we could make it capability aware too - PR Welcome!).

  • usage: json2netns [-h] [-d] [--validate] [--workers WORKERS] config action

Actions

  • create: Create the interfaces and namespaces + bring interfaces up
  • check: Print the interface addressing + v4/6 routing tables to stdout
  • delete: Remove the namespaces and all interfaces

Development

Install

python3 -m venv [--upgrade-deps] /tmp/tj
/tmp/tj/bin/pip install -r requirements_test.txt wheel
/tmp/tj/bin/pip install -e .

Run Tests

/tmp/tj/bin/ptr [-k] [--print-cov] [--debug]
  • -k: keep venv ptr creates
  • --print-cov: handy to see what coverage is on all files
  • --debug: Handy to see all commands run so you can run a step manually

About

JSON parsing Linux Network Namespace (netns) topology builder

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages