Metadata-Version: 2.1
Name: libnl3
Version: 0.3.0
Summary: Pure Python port of the Netlink protocol library suite
Home-page: https://github.com/coolshou/libnl
Author: @coolshou2060
Author-email: coolshou2060@gmail.com
License: LGPL2.1
Description: =====
        libnl
        =====
        
        A port of `libnl <http://www.infradead.org/~tgr/libnl/>`_, a collection of libraries providing APIs to the Netlink
        protocol based Linux kernel interfaces. This library is API-equivalent to the original C library, and should make it
        relatively easy to convert C programs into pure Python without having to call external binaries.
        
        As Netlink is a Linux-specific protocol, this library will only work on Linux hosts. All communication is done using
        sockets between the Python process and the Linux kernel. The main driver for porting libnl was to use
        `nl80211 <https://wireless.wiki.kernel.org/en/developers/documentation/nl80211>`_ in Python to scan for wireless access
        points natively, without having to run an external program and parse its output.
        
        * Python 2.6, 2.7, PyPy, PyPy3, 3.3, and 3.4 supported on Linux.
        
        .. image:: https://img.shields.io/wercker/ci/54f908261d0e8d4b221bfc9d.svg?style=flat-square&label=Wercker%20CI
           :target: https://app.wercker.com/#applications/54f908261d0e8d4b221bfc9d
           :alt: Build Status WiFi
        
        .. image:: https://img.shields.io/travis/Robpol86/libnl/master.svg?style=flat-square&label=Travis%20CI
           :target: https://travis-ci.org/Robpol86/libnl
           :alt: Build Status
        
        .. image:: https://img.shields.io/codecov/c/github/Robpol86/libnl/master.svg?style=flat-square&label=Codecov
           :target: https://codecov.io/github/Robpol86/libnl
           :alt: Coverage Status
        
        .. image:: https://img.shields.io/pypi/v/libnl.svg?style=flat-square&label=Latest
           :target: https://pypi.python.org/pypi/libnl/
           :alt: Latest Version
        
        .. image:: https://img.shields.io/pypi/dm/libnl.svg?style=flat-square&label=PyPI%20Downloads
           :target: https://pypi.python.org/pypi/libnl/
           :alt: Downloads
        
        Quickstart
        ==========
        
        Install:
        
        .. code:: bash
        
            pip install libnl
        
        Example Implementations
        =======================
        
        A simple Python program that merely lists network adapters on the host:
        
        .. code:: python
        
            import ctypes
            import socket
        
            from libnl.error import errmsg
            from libnl.handlers import NL_CB_CUSTOM, NL_CB_VALID, NL_OK
            from libnl.linux_private.if_link import IFLA_IFNAME, IFLA_RTA
            from libnl.linux_private.netlink import NETLINK_ROUTE, NLMSG_LENGTH, NLM_F_DUMP, NLM_F_REQUEST
            from libnl.linux_private.rtnetlink import RTA_DATA, RTA_NEXT, RTA_OK, RTM_GETLINK, ifinfomsg, rtgenmsg
            from libnl.misc import get_string
            from libnl.msg import nlmsg_data, nlmsg_hdr
            from libnl.nl import nl_connect, nl_recvmsgs_default, nl_send_simple
            from libnl.socket_ import nl_socket_alloc, nl_socket_modify_cb
        
        
            def callback(msg, _):
                nlh = nlmsg_hdr(msg)
                iface = ifinfomsg(nlmsg_data(nlh))
                hdr = IFLA_RTA(iface)
                remaining = ctypes.c_int(nlh.nlmsg_len - NLMSG_LENGTH(iface.SIZEOF))
                while RTA_OK(hdr, remaining):
                    if hdr.rta_type == IFLA_IFNAME:
                        print('Found interface {0}: {1}'.format(iface.ifi_index, get_string(RTA_DATA(hdr)).decode('ascii')))
                    hdr = RTA_NEXT(hdr, remaining)
                return NL_OK
        
        
            sk = nl_socket_alloc()  # Creates an nl_sock instance.
            ret = nl_connect(sk, NETLINK_ROUTE)  # Create file descriptor and bind socket.
            if ret < 0:
                raise RuntimeError('nl_connect() returned {0} ({1})'.format(ret, errmsg[abs(ret)]))
            rt_hdr = rtgenmsg(rtgen_family=socket.AF_PACKET)
            ret = nl_send_simple(sk, RTM_GETLINK, NLM_F_REQUEST | NLM_F_DUMP, rt_hdr, rt_hdr.SIZEOF)
            if ret < 0:
                raise RuntimeError('nl_send_simple() returned {0} ({1})'.format(ret, errmsg[abs(ret)]))
            nl_socket_modify_cb(sk, NL_CB_VALID, NL_CB_CUSTOM, callback, None)  # Add callback to the nl_sock instance.
            ret = nl_recvmsgs_default(sk)  # Get kernel's answer, and call attached callbacks.
            if ret < 0:
                raise RuntimeError('nl_recvmsgs_default() returned {0} ({1})'.format(ret, errmsg[abs(ret)]))
        
        Here are some more examples with their C equivalents in order from "easy" to "hard":
        
        * `example_list_network_interfaces.py <https://github.com/Robpol86/libnl/blob/master/example_list_network_interfaces.py>`_ (`list_network_interfaces.c <https://github.com/Robpol86/libnl/blob/master/example_c/list_network_interfaces.c>`_)
        * `example_show_wifi_interface.py <https://github.com/Robpol86/libnl/blob/master/example_show_wifi_interface.py>`_ (`show_wifi_interface.c <https://github.com/Robpol86/libnl/blob/master/example_c/show_wifi_interface.c>`_)
        * `example_scan_access_points.py <https://github.com/Robpol86/libnl/blob/master/example_scan_access_points.py>`_ (`scan_access_points.c <https://github.com/Robpol86/libnl/blob/master/example_c/scan_access_points.c>`_)
        
        Changelog
        =========
        
        This project adheres to `Semantic Versioning <http://semver.org/>`_.
        
        0.3.0 - 2021-02-05
        ------------------
        
            * Fix python 3.6 error
            * Fix continue dump when no NL_CB_DUMP_INTR
        
        0.2.0 - 2015-03-26
        ------------------
        
        Added
        
            * Python2.6, PyPy, and PyPy3 support.
        
        0.1.1 - 2015-03-15
        ------------------
        
            * Initial release.
        
Keywords: netlink libnl libnl-genl nl80211
Platform: UNKNOWN
Classifier: Development Status :: 4 - Beta
Classifier: Intended Audience :: Developers
Classifier: License :: OSI Approved :: GNU Lesser General Public License v2 or later (LGPLv2+)
Classifier: Operating System :: POSIX :: Linux
Classifier: Programming Language :: Python :: 2.6
Classifier: Programming Language :: Python :: 2.7
Classifier: Programming Language :: Python :: 3.3
Classifier: Programming Language :: Python :: 3.4
Classifier: Programming Language :: Python :: 3.7
Classifier: Programming Language :: Python :: Implementation :: PyPy
Classifier: Topic :: Software Development :: Libraries
Classifier: Topic :: System :: Networking
Classifier: Topic :: System :: Operating System Kernels :: Linux
Requires-Python: >=3.6
Description-Content-Type: text/markdown
