===========
iproute4mac
===========
|CI| |PYPI|
This is a macOS network wrapper to imitate GNU/Linux
`iproute2 <https://wiki.linuxfoundation.org/networking/iproute2>`__
suite, inspired by the
`iproute2mac <https://github.com/brona/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... <https://mmacleod.ca/2011/06/source-based-routing-with-freebsd-using-multiple-routing-table/>`__)
``neighbor`` yes yes using `ARP <https://en.wikipedia.org/wiki/Address_Resolution_Protocol>`__ for IPv4 and `NDP <https://en.wikipedia.org/wiki/Neighbor_Discovery_Protocol>`__ 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 <https://kovyrin.net/2006/03/17/how-to-create-ip-ip-tunnel-between-freebsd-and-linux/>`__ only
``tuntap`` no ? `Tunnelblick <https://github.com/Tunnelblick/Tunnelblick/tree/master/third_party>`__ third party `tuntaposx <https://tuntaposx.sourceforge.net>`__?
``token`` no ? May be related to `non-numeric IPv6 mask <https://forums.freebsd.org/threads/how-to-apply-non-numeric-mask-to-ipv6-address.69829/>`__?
``tcpmetrics`` no ?
``monitor`` no no
``xfrm`` no no
``mroute`` no ? See `Max OS: no multicast route for 127.0.0.1 <https://issues.redhat.com/browse/JGRP-1808>`__
``mrule`` no ?
``netns`` no no
``netconf`` no yes
``vrf`` no ? `Virtual Routing and Forwarding <https://en.wikipedia.org/wiki/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 <https://brew.sh>`__.
In order to use this tap, you can install directly the package:
.. code:: shell
brew install signal-09/tap/iproute4mac
Or subscribe the tap
`repository <https://github.com/signal-09/homebrew-tap>`__ and then
install the package:
.. code:: shell
brew tap signal-09/tap
brew install iproute4mac
PyPI
----
Create a Virtual Environment and upgrade ``pip`` module:
.. code:: shell
python3 -m venv venv
source venv/bin/activate
python3 -m pip install -U pip
Then install ``iproute4mac``:
.. code:: shell
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 \| **feth**:superscript:`5` \| vlan }
Shows IPv4 and IPv6 addresses assigned to all network interfaces. The
‘show’ subcommand can be omitted:
.. code:: shell
ip address show
Same as above except that only IPv6 addresses assigned to active network
interfaces are shown:
.. code:: shell
ip -6 address show up
Shows IPv4 and IPv6 addresses assigned to network interface en0 in
pretty printed JSON:
.. code:: shell
ip -j -p address show dev en0
Shows IPv4 only addresses assigned to networks member of bridge0:
.. code:: shell
ip -4 address show master bridge0
Shows IP addresses belonging to private C class network 192.168.0.0/24:
.. code:: shell
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 link show``: display device attributes
-------------------------------------------
Implemented syntax:
ip link show [ DEVICE ] [ up ] [ master DEVICE \| nomaster ] [ type ETYPE ]
ETYPE := [ TYPE \| bridge_slave \| bond_slave ]
TYPE := [ bridge \| bond ]
Shows the state of all network interfaces on the system:
.. code:: shell
ip link show
Shows the bridge devices:
.. code:: shell
ip link show type bridge
Shows the vlan devices:
.. code:: shell
ip link show type vlan
Shows devices enslaved by bridge0:
.. code:: shell
ip link show master bridge0
Note:
^^^^^
1. ``txqlen`` (the transmit queue length) is not configurable on
specific interface; a system default value is managed via
``sysctl net.link.generic.system.sndq_maxlen`` (or
``net.link.generic.system.rcvq_maxlen``).
``ip link add``: add virtual link
---------------------------------
Implemented syntax:
ip link add [ link DEV ] [ name ] NAME [ address LLADDR ] [ mtu MTU ] type TYPE [ ARGS ]
Create a VLAN with TAG 100 linked to en1:
.. code:: shell
ip link add link en1 name vlan100 type vlan id 100
Create a new bridge interface (auto numbering1):
.. code:: shell
ip link add type bridge
Create a new bridge with a specified name:
.. code:: shell
ip link add bridge20 type bridge
Create a new static bond (vs lacp) interface:
.. code:: shell
ip link add bond1 type bond mode active-backup
Note:
^^^^^
1. macOS ``ifconfig`` print the created interface name to the standard
output
``ip link delete``: delete virtual link
---------------------------------------
Implemented syntax:
ip link delete { DEVICE \| dev DEVICE } type TYPE [ ARGS ]
Delete any kind of virtual interface:
.. code:: shell
ip link del vlan100
``ip link set`` (or ``change``): change device attributes
---------------------------------------------------------
Implemented syntax:
``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:
.. code:: shell
ip route show via 192.168.0.1
List IPv6 routes using a specific network interface:
.. code:: shell
ip -6 route show dev en1
List routes for multicast:
.. code:: shell
ip route show type multicast
List availabe routes to reach specific network:
.. code:: shell
ip route show to match 192.168.1.0/24
List IPv4 and IPv6 routes2
.. code:: shell
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:
.. code:: shell
ip route add 192.168.22.0/24 dev en1
Change interface for a given route:
.. code:: shell
ip route change 192.168.22.0/24 dev en0
Replace default gateway:
.. code:: shell
ip route replace default via 192.168.0.254
Delete route:
.. code:: shell
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:
.. code:: shell
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
-------------------
.. figure::
https://docs.github.com/assets/cb-34352/mw-1440/images/help/repository/fork-button.webp
:alt: Fork button
Fork button
Clone the fork
--------------
.. code:: shell
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 <https://docs.github.com/en/get-started/using-github/github-flow#following-github-flow>`__”).
.. code:: shell
git branch BRANCH-NAME
git checkout BRANCH-NAME
Create a developer environment
------------------------------
.. code:: shell
python3 -m venv venv
source venv/bin/activate
Then install requiered packages:
.. code:: shell
python3 -m pip install -U pip
python3 -m pip install pre-commit pytest pytest-console-scripts
pre-commit install
Coding style
------------
`Ruff <https://docs.astral.sh/ruff/>`__ is used to enforce coding style.
You can checkout the compliance with the following command:
.. code:: shell
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:
.. code:: shell
git add -A
git commit --amend
git push --force
In case of multiple and not organic commits, “`Squash and
merge <https://docs.github.com/pull-requests/collaborating-with-pull-requests/incorporating-changes-from-a-pull-request/about-pull-request-merges#squash-and-merge-your-commits>`__”
policy will be applied.
.. |CI| image:: https://github.com/signal-09/iproute4mac/actions/workflows/python-package.yml/badge.svg?branch=master
:target: https://github.com/signal-09/iproute4mac/actions/workflows/python-package.yml
.. |PYPI| image:: https://img.shields.io/pypi/dm/iproute4mac
:target: https://pypi.org/project/iproute4mac/
Raw data
{
"_id": null,
"home_page": "https://github.com/signal-09/iproute4mac",
"name": "iproute4mac",
"maintainer": null,
"docs_url": null,
"requires_python": ">=3.10",
"maintainer_email": null,
"keywords": "iproute2, ip, ifconfig",
"author": "Ettore Simone",
"author_email": "ettore.simone@gmail.com",
"download_url": "https://files.pythonhosted.org/packages/f6/be/c00247d5af3d358082aa91f69c2b8848ede7286e455cf91b30d504c81860/iproute4mac-0.5.7.tar.gz",
"platform": null,
"description": "===========\niproute4mac\n===========\n\n|CI| |PYPI|\n\nThis is a macOS network wrapper to imitate GNU/Linux\n`iproute2 <https://wiki.linuxfoundation.org/networking/iproute2>`__\nsuite, inspired by the\n`iproute2mac <https://github.com/brona/iproute2mac>`__ project.\n\nWorking staff\n=============\n\nCommand ``ip``:\n\n============== =========== ========= =============\nobjects implemented supported note\n============== =========== ========= =============\n``address`` yes yes\n``address`` yes yes\n``addrlabel`` no ? IPv6 protocol address label\n``maddress`` no ?\n``route`` yes yes\n``rule`` no ? (e.g. `source based routing with FreeBSD... <https://mmacleod.ca/2011/06/source-based-routing-with-freebsd-using-multiple-routing-table/>`__)\n``neighbor`` yes yes using `ARP <https://en.wikipedia.org/wiki/Address_Resolution_Protocol>`__ for IPv4 and `NDP <https://en.wikipedia.org/wiki/Neighbor_Discovery_Protocol>`__ for IPv6\n``ntable`` no ?\n``ntbl`` no ?\n``link`` yes yes\n``l2tp`` no ?\n``fou`` no ? IP-IP tunnel over UDP?\n``ila`` no ? IPv6 Identifier Locator Addressing\n``macsec`` no no\n``tunnel`` no yes `IP-IP <https://kovyrin.net/2006/03/17/how-to-create-ip-ip-tunnel-between-freebsd-and-linux/>`__ only\n``tuntap`` no ? `Tunnelblick <https://github.com/Tunnelblick/Tunnelblick/tree/master/third_party>`__ third party `tuntaposx <https://tuntaposx.sourceforge.net>`__?\n``token`` no ? May be related to `non-numeric IPv6 mask <https://forums.freebsd.org/threads/how-to-apply-non-numeric-mask-to-ipv6-address.69829/>`__?\n``tcpmetrics`` no ?\n``monitor`` no no\n``xfrm`` no no\n``mroute`` no ? See `Max OS: no multicast route for 127.0.0.1 <https://issues.redhat.com/browse/JGRP-1808>`__\n``mrule`` no ?\n``netns`` no no\n``netconf`` no yes\n``vrf`` no ? `Virtual Routing and Forwarding <https://en.wikipedia.org/wiki/Virtual_routing_and_forwarding>`__\n``sr`` no ? IPv6 Segment Routing management\n``nexthop`` no ?\n``mptcp`` no no Multipath TCP\n``ioam`` no ? IPv6 In-situ OAM (IOAM)\n``help`` yes yes\n``stats`` no ?\n============== =========== ========= =============\n\nCommand ``bridge``:\n\n=========== =========== ========= =============\nobjects implemented supported note\n=========== =========== ========= =============\n``link`` yes yes ``show`` only\n``fdb`` yes yes ``show`` only\n=========== =========== ========= =============\n\nExamples:\n\n- ``ip address [ list | show ]``\n- ``ip address { add | change | replace | delete }``\n- ``ip link [ list | show ]``\n- ``ip link { add | set | change | delete }``\n- ``ip route [ list | show ]``\n- ``ip route { add | change | replace | delete }``\n- ``ip route get``\n- ``ip neigh [ list | show ]``\n- ``ip neigh flush``\n- ``bridge link [ list | show ]``\n- ``bridge fdb [ list | show ]``\n\n\nInstallation\n============\n\n\nHomebrew\n--------\n\nThe preferred method of installation is `Homebrew <https://brew.sh>`__.\n\nIn order to use this tap, you can install directly the package:\n\n.. code:: shell\n\n brew install signal-09/tap/iproute4mac\n\nOr subscribe the tap\n`repository <https://github.com/signal-09/homebrew-tap>`__ and then\ninstall the package:\n\n.. code:: shell\n\n brew tap signal-09/tap\n brew install iproute4mac\n\n\nPyPI\n----\n\nCreate a Virtual Environment and upgrade ``pip`` module:\n\n.. code:: shell\n\n python3 -m venv venv\n source venv/bin/activate\n python3 -m pip install -U pip\n\nThen install ``iproute4mac``:\n\n.. code:: shell\n\n python3 -m pip install iproute4mac\n\nUsage\n=====\n\n**iproute4mac** try to imitate as much as possible the *look & feel* of\nthe GNU/Linux iproute2 suite, but macOS (Darwin) is a BSD derivative,\nand some aspects cannot be replicated at all.\n\n\n``ip address show``: look at protocol addresses\n-----------------------------------------------\n\nImplemented syntax:\n\n ip address [ show [ dev IFNAME ] [ master DEVICE \\| nomaster ] [ type TYPE ] [up] ]\n\n\n TYPE := { bond \\| bond_slave \\| bridge \\| bridge_slave \\| **feth**:superscript:`5` \\| vlan }\n\nShows IPv4 and IPv6 addresses assigned to all network interfaces. The\n\u2018show\u2019 subcommand can be omitted:\n\n.. code:: shell\n\n ip address show\n\nSame as above except that only IPv6 addresses assigned to active network\ninterfaces are shown:\n\n.. code:: shell\n\n ip -6 address show up\n\nShows IPv4 and IPv6 addresses assigned to network interface en0 in\npretty printed JSON:\n\n.. code:: shell\n\n ip -j -p address show dev en0\n\nShows IPv4 only addresses assigned to networks member of bridge0:\n\n.. code:: shell\n\n ip -4 address show master bridge0\n\nShows IP addresses belonging to private C class network 192.168.0.0/24:\n\n.. code:: shell\n\n ip address show to 192.168.0.0/24\n\nNote:\n^^^^^\n\n1. ``qdisc`` (queuing discipline) is part of the Linux Traffic Control\n subsystem (TC) managed via the ``tc`` utility. Even if this\n information is not reported, similar results in traffic control and\n shaping can be achieved using ``dnctl`` and ``pfctl``.\n2. ``address lifetime`` for IPv6 addresses (-L flag of ``ifconfig``) is\n not provided anymore in Sonoma (macOS 14); for IPv4, addresses\n *valid* and *prederred* lifetime, is supposed *forever* (0xffffffff =\n 4.294.967.295 = 32 bit).\n3. ``sysctl net.inet6.ip6.temppltime`` specifies the \u201cpreferred\n lifetime\u201d for privacy addresses, in seconds, and defaults to 86400\n (one day).\n4. ``sysctl net.inet6.ip6.tempvltime`` specifies the \u201cvalid lifetime\u201d\n for privacy addresses, in second, and defaults to 604800 (one week).\n5. ``veth`` can be replaced by ``feth`` in macOS\n\n\n``ip address add``: add new protocol address\n--------------------------------------------\n\n\n``ip address change``: change protocol address\n----------------------------------------------\n\n\n``ip address replace``: change or add protocol address\n------------------------------------------------------\n\nImplemented syntax:\n\n ip address {add|change|replace} IFADDR dev IFNAME [ LIFETIME ] [\n CONFFLAG-LIST ]\n\nNote:\n^^^^^\n\n1. ``{change|replace}`` option \u201creally\u201d change address properties\n (e.g. broadcast) while Linux simply ignore them.\n\n\n``ip address delete``: delete protocol address\n----------------------------------------------\n\n\n``ip link show``: display device attributes\n-------------------------------------------\n\nImplemented syntax:\n\n ip link show [ DEVICE ] [ up ] [ master DEVICE \\| nomaster ] [ type ETYPE ]\n\n ETYPE := [ TYPE \\| bridge_slave \\| bond_slave ]\n\n TYPE := [ bridge \\| bond ]\n\nShows the state of all network interfaces on the system:\n\n.. code:: shell\n\n ip link show\n\nShows the bridge devices:\n\n.. code:: shell\n\n ip link show type bridge\n\nShows the vlan devices:\n\n.. code:: shell\n\n ip link show type vlan\n\nShows devices enslaved by bridge0:\n\n.. code:: shell\n\n ip link show master bridge0\n\nNote:\n^^^^^\n\n1. ``txqlen`` (the transmit queue length) is not configurable on\n specific interface; a system default value is managed via\n ``sysctl net.link.generic.system.sndq_maxlen`` (or\n ``net.link.generic.system.rcvq_maxlen``).\n\n\n``ip link add``: add virtual link\n---------------------------------\n\nImplemented syntax:\n\n ip link add [ link DEV ] [ name ] NAME [ address LLADDR ] [ mtu MTU ] type TYPE [ ARGS ]\n\nCreate a VLAN with TAG 100 linked to en1:\n\n.. code:: shell\n\n ip link add link en1 name vlan100 type vlan id 100\n\nCreate a new bridge interface (auto numbering1):\n\n.. code:: shell\n\n ip link add type bridge\n\nCreate a new bridge with a specified name:\n\n.. code:: shell\n\n ip link add bridge20 type bridge\n\nCreate a new static bond (vs lacp) interface:\n\n.. code:: shell\n\n ip link add bond1 type bond mode active-backup\n\nNote:\n^^^^^\n\n1. macOS ``ifconfig`` print the created interface name to the standard\n output\n\n\n``ip link delete``: delete virtual link\n---------------------------------------\n\nImplemented syntax:\n\n ip link delete { DEVICE \\| dev DEVICE } type TYPE [ ARGS ]\n\nDelete any kind of virtual interface:\n\n.. code:: shell\n\n ip link del vlan100\n\n\n``ip link set`` (or ``change``): change device attributes\n---------------------------------------------------------\n\nImplemented syntax:\n\n\n``ip route show``: list routes\n------------------------------\n\nImplemented syntax:\n\n ip route [ show [ SELECTOR ] ]\n\n SELECTOR := [ proto RTPROTO ] [ type TYPE ] [ scope SCOPE ]\n\n TYPE := { unicast \\| broadcast \\| multicast \\| blackhole }\n\n SCOPE := [ host \\| link \\| global ]\n\n RTPROTO := [ kernel \\| static ]\n\nList routes using a specific gateway:\n\n.. code:: shell\n\n ip route show via 192.168.0.1\n\nList IPv6 routes using a specific network interface:\n\n.. code:: shell\n\n ip -6 route show dev en1\n\nList routes for multicast:\n\n.. code:: shell\n\n ip route show type multicast\n\nList availabe routes to reach specific network:\n\n.. code:: shell\n\n ip route show to match 192.168.1.0/24\n\nList IPv4 and IPv6 routes2\n\n.. code:: shell\n\n ip route show table all\n\nNote:\n^^^^^\n\n1. ``iif`` is not honored (is treated like ``dev`` and ``oif``).\n2. *Route tables* are not implemented in macOS (Darwin), but \u201ctable all\u201d\n will result in show IPv4 + IPv6 routes\n\n\n``ip route add``: add new route\n-------------------------------\n\n\n``ip route delete``: delete route\n---------------------------------\n\n\n``ip route change``: change route\n---------------------------------\n\n\n``ip route replace``: change or add new one\n-------------------------------------------\n\nImplemented syntax:\n\n ip route { add \\| delete \\| change \\| replace } ROUTE\n\n ROUTE := [ TYPE ] PREFIX [ tos TOS ] [ proto RTPROTO ] [ scope SCOPE ]\n\n TYPE := { unicast \\| broadcast \\| multicast \\| blackhole }\n\n SCOPE := [ host \\| link \\| global ]\n\n RTPROTO := [ kernel \\| boot \\| static ]\n\nAdd direct routing on a specific network interface:\n\n.. code:: shell\n\n ip route add 192.168.22.0/24 dev en1\n\nChange interface for a given route:\n\n.. code:: shell\n\n ip route change 192.168.22.0/24 dev en0\n\nReplace default gateway:\n\n.. code:: shell\n\n ip route replace default via 192.168.0.254\n\nDelete route:\n\n.. code:: shell\n\n ip route del 192.168.22.0/24\n\n\n``ip route get``: get a single route\n------------------------------------\n\nImplemented syntax:\n\n ip route get ADDRESS\n\nShows the route to reach Google DNS 8.8.8.8:\n\n.. code:: shell\n\n ip route get 8.8.8.8\n\n\n``ip neigh show``: list neighbour entries\n-----------------------------------------\n\nNote:\n^^^^^\n\n1. NOARP and PERMANENT states are not catched\n\n\n``ip neigh flush``: flush neighbour entries\n-------------------------------------------\n\nSame syntax of ``ip neigh show``\n\n\nContributing\n------------\n\nEvery contribute is welcome!\n\n\nFork the repository\n-------------------\n\n.. figure::\n https://docs.github.com/assets/cb-34352/mw-1440/images/help/repository/fork-button.webp\n :alt: Fork button\n\n Fork button\n\n\nClone the fork\n--------------\n\n.. code:: shell\n\n git clone https://github.com/YOUR-USERNAME/iproute4mac\n\n\nCreate a branch\n---------------\n\nBefore making changes to the project, you should create a new branch and\ncheck it out (see \u201c`GitHub\nflow <https://docs.github.com/en/get-started/using-github/github-flow#following-github-flow>`__\u201d).\n\n.. code:: shell\n\n git branch BRANCH-NAME\n git checkout BRANCH-NAME\n\n\nCreate a developer environment\n------------------------------\n\n.. code:: shell\n\n python3 -m venv venv\n source venv/bin/activate\n\nThen install requiered packages:\n\n.. code:: shell\n\n python3 -m pip install -U pip\n python3 -m pip install pre-commit pytest pytest-console-scripts\n pre-commit install\n\n\nCoding style\n------------\n\n`Ruff <https://docs.astral.sh/ruff/>`__ is used to enforce coding style.\nYou can checkout the compliance with the following command:\n\n.. code:: shell\n\n pre-commit run --all-files [--show-diff-on-failure]\n\n\nCommit your work\n----------------\n\nCreate as few commit as possible to make diff checking easier. In case\nof modification of already pushed commit, amend it if possible:\n\n.. code:: shell\n\n git add -A\n git commit --amend\n git push --force\n\nIn case of multiple and not organic commits, \u201c`Squash and\nmerge <https://docs.github.com/pull-requests/collaborating-with-pull-requests/incorporating-changes-from-a-pull-request/about-pull-request-merges#squash-and-merge-your-commits>`__\u201d\npolicy will be applied.\n\n.. |CI| image:: https://github.com/signal-09/iproute4mac/actions/workflows/python-package.yml/badge.svg?branch=master\n :target: https://github.com/signal-09/iproute4mac/actions/workflows/python-package.yml\n\n.. |PYPI| image:: https://img.shields.io/pypi/dm/iproute4mac\n :target: https://pypi.org/project/iproute4mac/\n\n",
"bugtrack_url": null,
"license": "Apache License, Version 2.0",
"summary": "iproute for Mac",
"version": "0.5.7",
"project_urls": {
"Bug Reports": "https://github.com/signal-09/iproute4mac/issues",
"Homepage": "https://github.com/signal-09/iproute4mac",
"Source": "https://github.com/signal-09/iproute4mac"
},
"split_keywords": [
"iproute2",
" ip",
" ifconfig"
],
"urls": [
{
"comment_text": "",
"digests": {
"blake2b_256": "5398caf205b889e9e61741483fd255f38fe2860e1c3edac989b59f1d67a21f03",
"md5": "b3976a82f4c21c69293f3dc412348dfd",
"sha256": "18a7d0c85390e1c02bc0a0046a5fb637ccd5291fc6673d129064f8944f166e10"
},
"downloads": -1,
"filename": "iproute4mac-0.5.7-py3-none-any.whl",
"has_sig": false,
"md5_digest": "b3976a82f4c21c69293f3dc412348dfd",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": ">=3.10",
"size": 109191,
"upload_time": "2024-10-01T10:09:14",
"upload_time_iso_8601": "2024-10-01T10:09:14.516675Z",
"url": "https://files.pythonhosted.org/packages/53/98/caf205b889e9e61741483fd255f38fe2860e1c3edac989b59f1d67a21f03/iproute4mac-0.5.7-py3-none-any.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "f6bec00247d5af3d358082aa91f69c2b8848ede7286e455cf91b30d504c81860",
"md5": "dbb22acb3b8a7a8c16e5c1192d6cc54b",
"sha256": "12e55f81c322ef808886e3064fe54bebcc0b4cd5f6e3c677dfd3fb5b53563d7e"
},
"downloads": -1,
"filename": "iproute4mac-0.5.7.tar.gz",
"has_sig": false,
"md5_digest": "dbb22acb3b8a7a8c16e5c1192d6cc54b",
"packagetype": "sdist",
"python_version": "source",
"requires_python": ">=3.10",
"size": 104837,
"upload_time": "2024-10-01T10:09:16",
"upload_time_iso_8601": "2024-10-01T10:09:16.290705Z",
"url": "https://files.pythonhosted.org/packages/f6/be/c00247d5af3d358082aa91f69c2b8848ede7286e455cf91b30d504c81860/iproute4mac-0.5.7.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2024-10-01 10:09:16",
"github": true,
"gitlab": false,
"bitbucket": false,
"codeberg": false,
"github_user": "signal-09",
"github_project": "iproute4mac",
"travis_ci": false,
"coveralls": false,
"github_actions": true,
"requirements": [],
"lcname": "iproute4mac"
}