Skip to main content

iproute for Mac

Project description

CI PYPI

This is a macOS network wrapper to imitate GNU/Linux iproute2 suite, inspired by the iproute2mac project.

Working staff

Command ip:

objects

implemented

supported

note

address

yes

yes

address

yes

yes

addrlabel

no

?

IPv6 protocol address label

maddress

no

?

route

yes

yes

rule

no

?

(e.g. source based routing with FreeBSD…)

neighbor

yes

yes

using ARP for IPv4 and NDP for IPv6

ntable

no

?

ntbl

no

?

link

yes

yes

l2tp

no

?

fou

no

?

IP-IP tunnel over UDP?

ila

no

?

IPv6 Identifier Locator Addressing

macsec

no

no

tunnel

no

yes

IP-IP only

tuntap

no

?

Tunnelblick third party tuntaposx?

token

no

?

May be related to non-numeric IPv6 mask?

tcpmetrics

no

?

monitor

no

no

xfrm

no

no

mroute

no

?

See Max OS: no multicast route for 127.0.0.1

mrule

no

?

netns

no

no

netconf

no

yes

vrf

no

?

Virtual Routing and Forwarding

sr

no

?

IPv6 Segment Routing management

nexthop

no

?

mptcp

no

no

Multipath TCP

ioam

no

?

IPv6 In-situ OAM (IOAM)

help

yes

yes

stats

no

?

Command bridge:

objects

implemented

supported

note

link

yes

yes

show only

fdb

yes

yes

show only

Examples:

  • ip address [ list | show ]

  • ip address { add | change | replace | delete }

  • ip link [ list | show ]

  • ip link { add | set | change | delete }

  • ip route [ list | show ]

  • ip route { add | change | replace | delete }

  • ip route get

  • ip neigh [ list | show ]

  • ip neigh flush

  • bridge link [ list | show ]

  • bridge fdb [ list | show ]

Installation

Homebrew

The preferred method of installation is Homebrew.

In order to use this tap, you can install directly the package:

brew install signal-09/tap/iproute4mac

Or subscribe the tap repository and then install the package:

brew tap signal-09/tap
brew install iproute4mac

PyPI

Create a Virtual Environment and upgrade pip module:

python3 -m venv venv
source venv/bin/activate
python3 -m pip install -U pip

Then install iproute4mac:

python3 -m pip install iproute4mac

Usage

iproute4mac try to imitate as much as possible the look & feel of the GNU/Linux iproute2 suite, but macOS (Darwin) is a BSD derivative, and some aspects cannot be replicated at all.

ip address show: look at protocol addresses

Implemented syntax:

ip address [ show [ dev IFNAME ] [ master DEVICE | nomaster ] [ type TYPE ] [up] ]

TYPE := { bond | bond_slave | bridge | bridge_slave | feth5 | vlan }

Shows IPv4 and IPv6 addresses assigned to all network interfaces. The ‘show’ subcommand can be omitted:

ip address show

Same as above except that only IPv6 addresses assigned to active network interfaces are shown:

ip -6 address show up

Shows IPv4 and IPv6 addresses assigned to network interface en0 in pretty printed JSON:

ip -j -p address show dev en0

Shows IPv4 only addresses assigned to networks member of bridge0:

ip -4 address show master bridge0

Shows IP addresses belonging to private C class network 192.168.0.0/24:

ip address show to 192.168.0.0/24

Note:

  1. qdisc (queuing discipline) is part of the Linux Traffic Control subsystem (TC) managed via the tc utility. Even if this information is not reported, similar results in traffic control and shaping can be achieved using dnctl and pfctl.

  2. address lifetime for IPv6 addresses (-L flag of ifconfig) is not provided anymore in Sonoma (macOS 14); for IPv4, addresses valid and prederred lifetime, is supposed forever (0xffffffff = 4.294.967.295 = 32 bit).

  3. sysctl net.inet6.ip6.temppltime specifies the “preferred lifetime” for privacy addresses, in seconds, and defaults to 86400 (one day).

  4. sysctl net.inet6.ip6.tempvltime specifies the “valid lifetime” for privacy addresses, in second, and defaults to 604800 (one week).

  5. veth can be replaced by feth in macOS

ip address add: add new protocol address

ip address change: change protocol address

ip address replace: change or add protocol address

Implemented syntax:

ip address {add|change|replace} IFADDR dev IFNAME [ LIFETIME ] [ CONFFLAG-LIST ]

Note:

  1. {change|replace} option “really” change address properties (e.g. broadcast) while Linux simply ignore them.

ip address delete: delete protocol address

ip route show: list routes

Implemented syntax:

ip route [ show [ SELECTOR ] ]

SELECTOR := [ proto RTPROTO ] [ type TYPE ] [ scope SCOPE ]

TYPE := { unicast | broadcast | multicast | blackhole }

SCOPE := [ host | link | global ]

RTPROTO := [ kernel | static ]

List routes using a specific gateway:

ip route show via 192.168.0.1

List IPv6 routes using a specific network interface:

ip -6 route show dev en1

List routes for multicast:

ip route show type multicast

List availabe routes to reach specific network:

ip route show to match 192.168.1.0/24

List IPv4 and IPv6 routes2

ip route show table all

Note:

  1. iif is not honored (is treated like dev and oif).

  2. Route tables are not implemented in macOS (Darwin), but “table all” will result in show IPv4 + IPv6 routes

ip route add: add new route

ip route delete: delete route

ip route change: change route

ip route replace: change or add new one

Implemented syntax:

ip route { add | delete | change | replace } ROUTE

ROUTE := [ TYPE ] PREFIX [ tos TOS ] [ proto RTPROTO ] [ scope SCOPE ]

TYPE := { unicast | broadcast | multicast | blackhole }

SCOPE := [ host | link | global ]

RTPROTO := [ kernel | boot | static ]

Add direct routing on a specific network interface:

ip route add 192.168.22.0/24 dev en1

Change interface for a given route:

ip route change 192.168.22.0/24 dev en0

Replace default gateway:

ip route replace default via 192.168.0.254

Delete route:

ip route del 192.168.22.0/24

ip route get: get a single route

Implemented syntax:

ip route get ADDRESS

Shows the route to reach Google DNS 8.8.8.8:

ip route get 8.8.8.8

ip neigh show: list neighbour entries

Note:

  1. NOARP and PERMANENT states are not catched

ip neigh flush: flush neighbour entries

Same syntax of ip neigh show

Contributing

Every contribute is welcome!

Fork the repository

Fork button

Fork button

Clone the fork

git clone https://github.com/YOUR-USERNAME/iproute4mac

Create a branch

Before making changes to the project, you should create a new branch and check it out (see “GitHub flow”).

git branch BRANCH-NAME
git checkout BRANCH-NAME

Create a developer environment

python3 -m venv venv
source venv/bin/activate

Then install requiered packages:

python3 -m pip install -U pip
python3 -m pip install pre-commit pytest pytest-console-scripts
pre-commit install

Coding style

Ruff is used to enforce coding style. You can checkout the compliance with the following command:

pre-commit run --all-files [--show-diff-on-failure]

Commit your work

Create as few commit as possible to make diff checking easier. In case of modification of already pushed commit, amend it if possible:

git add -A
git commit --amend
git push --force

In case of multiple and not organic commits, “Squash and merge” policy will be applied.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

iproute4mac-0.6.0.tar.gz (105.0 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

iproute4mac-0.6.0-py3-none-any.whl (109.3 kB view details)

Uploaded Python 3

File details

Details for the file iproute4mac-0.6.0.tar.gz.

File metadata

  • Download URL: iproute4mac-0.6.0.tar.gz
  • Upload date:
  • Size: 105.0 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for iproute4mac-0.6.0.tar.gz
Algorithm Hash digest
SHA256 80862f6f6cd7fd84c4a30edbbaa5a46b391c246d1f356932323c68ac88415bfa
MD5 4b7ea9ff9366e2dd39e17abb013fea17
BLAKE2b-256 83bbbd782e81d4a2677217bed1c0a1002590955334b7ae67c15656a068fc5087

See more details on using hashes here.

Provenance

The following attestation bundles were made for iproute4mac-0.6.0.tar.gz:

Publisher: python-package.yml on signal-09/iproute4mac

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file iproute4mac-0.6.0-py3-none-any.whl.

File metadata

  • Download URL: iproute4mac-0.6.0-py3-none-any.whl
  • Upload date:
  • Size: 109.3 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for iproute4mac-0.6.0-py3-none-any.whl
Algorithm Hash digest
SHA256 0360b1a61715510c8e2778922beede1af16bb250ce72b0ecc6827f50095c096d
MD5 61d60d3072279a566936bc698f99bb48
BLAKE2b-256 58617d3932e14bddcc0d8d8777fb8cf2637e91936656eaad2c986f174dcc5a75

See more details on using hashes here.

Provenance

The following attestation bundles were made for iproute4mac-0.6.0-py3-none-any.whl:

Publisher: python-package.yml on signal-09/iproute4mac

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page