Skip to content

Commit

Permalink
general: separate platform dependent imports
Browse files Browse the repository at this point in the history
  • Loading branch information
svinota committed Mar 29, 2019
1 parent 19426c3 commit b69999e
Show file tree
Hide file tree
Showing 2 changed files with 83 additions and 78 deletions.
107 changes: 53 additions & 54 deletions pyroute2/__init__.py
@@ -1,14 +1,16 @@
##
#
# NB: the deferred import code may be removed
#
# That should not affect neither the public API, nor the
# type matching with isinstance() and issubclass()
# This module contains all the public symbols from the library.
#
import pkg_resources
import sys
import struct
import logging

##
#
# Platform independent modules
#
from pyroute2.ipdb.exceptions import (DeprecationException,
CommitException,
CreateException,
Expand All @@ -21,26 +23,32 @@
IPBatch,
RawIPRoute,
RemoteIPRoute)
from pyroute2.ipset import IPSet
from pyroute2.netlink.rtnl.iprsocket import IPRSocket
from pyroute2.ipdb.main import IPDB
from pyroute2.ndb.main import NDB
from pyroute2.iwutil import IW
from pyroute2.devlink import DL
from pyroute2.conntrack import Conntrack
from pyroute2.nftables.main import NFTables
from pyroute2.netns.nslink import NetNS
from pyroute2.netns.process.proxy import NSPopen
from pyroute2.netlink.rtnl.iprsocket import IPRSocket
from pyroute2.netlink.taskstats import TaskStats
from pyroute2.netlink.nl80211 import NL80211
from pyroute2.netlink.devlink import DevlinkSocket
from pyroute2.netlink.event.acpi_event import AcpiEventSocket
from pyroute2.netlink.event.dquot import DQuotSocket
from pyroute2.netlink.ipq import IPQSocket
from pyroute2.netlink.diag import DiagSocket
from pyroute2.netlink.generic import GenericNetlinkSocket
from pyroute2.netlink.nfnetlink.nftsocket import NFTSocket
from pyroute2.netlink.nfnetlink.nfctsocket import NFCTSocket

##
#
# Linux specific code
#
if sys.platform.startswith('linux'):
from pyroute2.ipset import IPSet
from pyroute2.iwutil import IW
from pyroute2.devlink import DL
from pyroute2.conntrack import Conntrack
from pyroute2.nftables.main import NFTables
from pyroute2.netns.nslink import NetNS
from pyroute2.netns.process.proxy import NSPopen
from pyroute2.netlink.taskstats import TaskStats
from pyroute2.netlink.nl80211 import NL80211
from pyroute2.netlink.devlink import DevlinkSocket
from pyroute2.netlink.event.acpi_event import AcpiEventSocket
from pyroute2.netlink.event.dquot import DQuotSocket
from pyroute2.netlink.ipq import IPQSocket
from pyroute2.netlink.diag import DiagSocket
from pyroute2.netlink.generic import GenericNetlinkSocket
from pyroute2.netlink.nfnetlink.nftsocket import NFTSocket
from pyroute2.netlink.nfnetlink.nfctsocket import NFCTSocket
#
# The Console class is a bit special, it tries to engage
# modules from stdlib, that are sometimes stripped. Some
Expand Down Expand Up @@ -75,59 +83,50 @@ def wrapped(fmt, buf, offset=0):
else:
raise

# reexport exceptions
# re-export exceptions
exceptions = [NetlinkError,
NetlinkDecodeError,
DeprecationException,
CommitException,
CreateException,
PartialCommitException]

# reexport classes
# re-export classes
classes = [IPRouteRequest,
IPLinkRequest,
IPRoute,
IPBatch,
RawIPRoute,
RemoteIPRoute,
IPSet,
NDB,
IPDB,
IW,
DL,
Conntrack,
NFTables,
NetNS,
NSPopen,
IPRSocket,
TaskStats,
NL80211,
DevlinkSocket,
AcpiEventSocket,
DQuotSocket,
IPQSocket,
DiagSocket,
GenericNetlinkSocket,
NFTSocket,
NFCTSocket]
NDB,
IPDB]

if sys.platform.startswith('linux'):
classes.extend([IPSet,
IW,
DL,
Conntrack,
NFTables,
NetNS,
NSPopen,
TaskStats,
NL80211,
DevlinkSocket,
AcpiEventSocket,
DQuotSocket,
IPQSocket,
DiagSocket,
GenericNetlinkSocket,
NFTSocket,
NFCTSocket])

if HAS_CONSOLE:
classes.append(Console)
else:
log.warning("Couldn't import the Console class")

__all__ = []


class __common(object):
def __getattribute__(self, key):
log.warning('module pyroute2.ipdb.common is deprecated, '
'use pyroute2.ipdb.exceptions instead')
return getattr(globals()['ipdb'].exceptions, key)


globals()['ipdb'].common = __common()

__all__.extend([x.__name__ for x in exceptions])
__all__.extend([x.__name__ for x in classes])

Expand Down
54 changes: 30 additions & 24 deletions pyroute2/netlink/rtnl/iprsocket.py
@@ -1,3 +1,4 @@
import sys
import types
from pyroute2 import config
from pyroute2.common import Namespace
Expand All @@ -10,14 +11,15 @@
from pyroute2.netlink import rtnl
from pyroute2.netlink.rtnl.marshal import MarshalRtnl

if config.kernel < [3, 3, 0]:
from pyroute2.netlink.rtnl.ifinfmsg.compat import proxy_newlink
from pyroute2.netlink.rtnl.ifinfmsg.compat import proxy_setlink
from pyroute2.netlink.rtnl.ifinfmsg.compat import proxy_dellink
from pyroute2.netlink.rtnl.ifinfmsg.compat import proxy_linkinfo
else:
from pyroute2.netlink.rtnl.ifinfmsg.proxy import proxy_newlink
from pyroute2.netlink.rtnl.ifinfmsg.proxy import proxy_setlink
if sys.platform.startswith('linux'):
if config.kernel < [3, 3, 0]:
from pyroute2.netlink.rtnl.ifinfmsg.compat import proxy_newlink
from pyroute2.netlink.rtnl.ifinfmsg.compat import proxy_setlink
from pyroute2.netlink.rtnl.ifinfmsg.compat import proxy_dellink
from pyroute2.netlink.rtnl.ifinfmsg.compat import proxy_linkinfo
else:
from pyroute2.netlink.rtnl.ifinfmsg.proxy import proxy_newlink
from pyroute2.netlink.rtnl.ifinfmsg.proxy import proxy_setlink


class IPRSocketMixin(object):
Expand All @@ -29,30 +31,34 @@ def __init__(self, fileno=None, sndbuf=1048576, rcvbuf=1048576,
all_ns=all_ns)
self.marshal = MarshalRtnl()
self._s_channel = None
send_ns = Namespace(self, {'addr_pool': AddrPool(0x10000, 0x1ffff),
'monitor': False})
self._sproxy = NetlinkProxy(policy='return', nl=send_ns)
self._sproxy.pmap = {rtnl.RTM_NEWLINK: proxy_newlink,
rtnl.RTM_SETLINK: proxy_setlink}
if config.kernel < [3, 3, 0]:
self._recv_ns = Namespace(self,
{'addr_pool': AddrPool(0x20000, 0x2ffff),
if sys.platform.startswith('linux'):
self._gate = self._gate_linux
send_ns = Namespace(self, {'addr_pool': AddrPool(0x10000,
0x1ffff),
'monitor': False})
self._sproxy.pmap[rtnl.RTM_DELLINK] = proxy_dellink
# inject proxy hooks into recv() and...
self.__recv = self._recv
self._recv = self._p_recv
# ... recv_into()
self._recv_ft = self.recv_ft
self.recv_ft = self._p_recv_ft
self._sproxy = NetlinkProxy(policy='return', nl=send_ns)
self._sproxy.pmap = {rtnl.RTM_NEWLINK: proxy_newlink,
rtnl.RTM_SETLINK: proxy_setlink}
if config.kernel < [3, 3, 0]:
self._recv_ns = Namespace(self,
{'addr_pool': AddrPool(0x20000,
0x2ffff),
'monitor': False})
self._sproxy.pmap[rtnl.RTM_DELLINK] = proxy_dellink
# inject proxy hooks into recv() and...
self.__recv = self._recv
self._recv = self._p_recv
# ... recv_into()
self._recv_ft = self.recv_ft
self.recv_ft = self._p_recv_ft

def clone(self):
return type(self)(sndbuf=self._sndbuf, rcvbuf=self._rcvbuf)

def bind(self, groups=rtnl.RTMGRP_DEFAULTS, **kwarg):
super(IPRSocketMixin, self).bind(groups, **kwarg)

def _gate(self, msg, addr):
def _gate_linux(self, msg, addr):
msg.reset()
msg.encode()
ret = self._sproxy.handle(msg)
Expand Down

0 comments on commit b69999e

Please sign in to comment.