import string import subprocess import threading from core import constants from core import logger from core.coreobj import PyCoreNetIf from core.coreobj import PyCoreNode from core.enumerations import NodeTypes from core.misc import nodeutils from core.misc import utils from core.netns import vnodeclient from core.netns.vif import TunTap from core.netns.vif import VEth utils.check_executables([constants.IP_BIN]) class SimpleLxcNode(PyCoreNode): """ Provides simple lxc functionality for core nodes. """ valid_deladdrtype = ("inet", "inet6", "inet6link") def __init__(self, session, objid=None, name=None, nodedir=None, start=True): """
""" import logging import os import threading import time from core import CoreCommandError from core import constants from core.coreobj import PyCoreNet from core.misc import utils from core.netns.vif import GreTap from core.netns.vif import VEth utils.check_executables([ constants.BRCTL_BIN, constants.IP_BIN, constants.EBTABLES_BIN, constants.TC_BIN ]) ebtables_lock = threading.Lock() class EbtablesQueue(object): """ Helper class for queuing up ebtables commands into rate-limited atomic commits. This improves performance and reliability when there are many WLAN link updates. """ # update rate is every 300ms rate = 0.3 # ebtables atomic_file = "/tmp/pycore.ebtables.atomic"
""" netgraph.py: Netgraph helper functions; for now these are wrappers around ngctl commands. """ import subprocess from core import constants from core.misc import utils utils.check_executables([constants.NGCTL_BIN]) def createngnode(node_type, hookstr, name=None): """ Create a new Netgraph node of type and optionally assign name. The hook string hookstr should contain two names. This is a string so other commands may be inserted after the two names. Return the name and netgraph ID of the new node. :param node_type: node type to create :param hookstr: hook string :param name: name :return: name and id :rtype: tuple """ hook1 = hookstr.split()[0] ngcmd = "mkpeer %s %s \n show .%s" % (node_type, hookstr, hook1) cmd = [constants.NGCTL_BIN, "-f", "-"] cmdid = subprocess.Popen(cmd, stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.STDOUT) # err will always be None
import os import threading import time from core import CoreCommandError from core import constants from core import logger from core.coreobj import PyCoreNet from core.misc import utils from core.netns.vif import GreTap from core.netns.vif import VEth utils.check_executables([ constants.BRCTL_BIN, constants.IP_BIN, constants.EBTABLES_BIN, constants.TC_BIN ]) ebtables_lock = threading.Lock() class EbtablesQueue(object): """ Helper class for queuing up ebtables commands into rate-limited atomic commits. This improves performance and reliability when there are many WLAN link updates. """ # update rate is every 300ms rate = 0.3 # ebtables
from core import constants from core import logger from core.api import coreapi from core.bsd.netgraph import connectngnodes from core.bsd.netgraph import ngloadkernelmodule from core.bsd.vnet import NetgraphNet from core.bsd.vnet import NetgraphPipeNet from core.bsd.vnode import JailNode from core.enumerations import LinkTlvs from core.enumerations import LinkTypes from core.enumerations import NodeTypes from core.enumerations import RegisterTlvs from core.misc import ipaddress from core.misc import utils utils.check_executables([constants.IFCONFIG_BIN]) class CoreNode(JailNode): apitype = NodeTypes.DEFAULT.value class PtpNet(NetgraphPipeNet): def tonodemsg(self, flags): """ Do not generate a Node Message for point-to-point links. They are built using a link message instead. """ pass def tolinkmsgs(self, flags):
from core import CoreCommandError from core import constants from core import logger from core.coreobj import PyCoreNetIf from core.coreobj import PyCoreNode from core.enumerations import NodeTypes from core.misc import nodeutils from core.misc import utils from core.misc.ipaddress import MacAddress from core.netns import vnodeclient from core.netns.vif import TunTap from core.netns.vif import VEth _DEFAULT_MTU = 1500 utils.check_executables([constants.IP_BIN]) class SimpleLxcNode(PyCoreNode): """ Provides simple lxc functionality for core nodes. :var nodedir: str :var ctrlchnlname: str :var client: core.netns.vnodeclient.VnodeClient :var pid: int :var up: bool :var lock: threading.RLock :var _mounts: list[tuple[str, str]] """ valid_address_types = {"inet", "inet6", "inet6link"}